From 2b9c0e376816e44f665473704128f293986a7ba1 Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Thu, 22 Feb 2024 17:36:10 +0100 Subject: [PATCH] zink: lower unaligned memory accesses Fixes `vload_half` in OpenCL Fixes: 0288cb0a0c4 ("zink: lower vec8/16") Signed-off-by: Karol Herbst Part-of: --- src/gallium/drivers/zink/zink_compiler.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index fcfa4c1c1ee..5538c6d1b77 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -5321,11 +5321,20 @@ mem_access_size_align_cb(nir_intrinsic_op intrin, uint8_t bytes, assert(util_is_power_of_two_nonzero(align)); - return (nir_mem_access_size_align){ - .num_components = MIN2(bytes / (bit_size / 8), 4), - .bit_size = bit_size, - .align = bit_size / 8, - }; + /* simply drop the bit_size for unaligned load/stores */ + if (align < (bit_size / 8)) { + return (nir_mem_access_size_align){ + .num_components = MIN2(bytes / align, 4), + .bit_size = align * 8, + .align = align, + }; + } else { + return (nir_mem_access_size_align){ + .num_components = MIN2(bytes / (bit_size / 8), 4), + .bit_size = bit_size, + .align = bit_size / 8, + }; + } } static nir_mem_access_size_align