diff --git a/.pick_status.json b/.pick_status.json index c537f139cea..03d53f74ae2 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1154,7 +1154,7 @@ "description": "zink: lower unaligned memory accesses", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "0288cb0a0c471fbef07d1dfc1cae843c5396d8e1", "notes": null diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index d487de5443b..203c7a6292c 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -5302,11 +5302,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