brw: Fix emit_a64_oword_block_header UNIFORM -> VGRF copies

This was triggering an assertion in the fs_builder::MOV helper that
the destination stride can't be 0 when dispatch_width > 1.  What we
want to do is copy the single 64-bit channel of data from the UNIFORM
file to a VGRF.  We can use a SIMD1 builder for that.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31995>
This commit is contained in:
Kenneth Graunke
2024-11-04 17:31:21 -08:00
committed by Marge Bot
parent d0560f59ce
commit 0a376a672a
@@ -1589,9 +1589,13 @@ emit_a64_oword_block_header(const fs_builder &bld, const brw_reg &addr)
brw_reg expanded_addr = addr;
if (addr.file == UNIFORM) {
/* We can't do stride 1 with the UNIFORM file, it requires stride 0 */
expanded_addr = ubld.vgrf(BRW_TYPE_UQ);
expanded_addr.stride = 0;
ubld.MOV(expanded_addr, retype(addr, BRW_TYPE_UQ));
fs_builder ubld1 = ubld.group(1, 0);
brw_reg tmp = ubld1.vgrf(BRW_TYPE_UQ);
ubld1.UNDEF(tmp);
expanded_addr = component(tmp, 0);
ubld1.MOV(expanded_addr, retype(addr, BRW_TYPE_UQ));
}
brw_reg header = ubld.vgrf(BRW_TYPE_UD);