intel/fs: Fix horiz_offset() to handle FIXED_GRFs with non-trivial 2D regions.

Reviewed-by: Caio Oliveira <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18157>
This commit is contained in:
Francisco Jerez
2022-08-08 14:04:06 -07:00
committed by Marge Bot
parent 61a77c9ce2
commit 6f33b22495

View File

@@ -121,8 +121,16 @@ horiz_offset(const fs_reg &reg, unsigned delta)
if (reg.is_null()) {
return reg;
} else {
const unsigned stride = reg.hstride ? 1 << (reg.hstride - 1) : 0;
return byte_offset(reg, delta * stride * type_sz(reg.type));
const unsigned hstride = reg.hstride ? 1 << (reg.hstride - 1) : 0;
const unsigned vstride = reg.vstride ? 1 << (reg.vstride - 1) : 0;
const unsigned width = 1 << reg.width;
if (delta % width == 0) {
return byte_offset(reg, delta / width * vstride * type_sz(reg.type));
} else {
assert(vstride == hstride * width);
return byte_offset(reg, delta * hstride * type_sz(reg.type));
}
}
}
unreachable("Invalid register file");