zink: lower unaligned memory accesses

Fixes `vload_half` in OpenCL

Fixes: 0288cb0a0c ("zink: lower vec8/16")
Signed-off-by: Karol Herbst <kherbst@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27754>
(cherry picked from commit 2b9c0e3768)
This commit is contained in:
Karol Herbst 2024-02-22 17:36:10 +01:00 committed by Eric Engestrom
parent 3794d15e61
commit 2166ee5c2e
2 changed files with 15 additions and 6 deletions

View file

@ -1154,7 +1154,7 @@
"description": "zink: lower unaligned memory accesses", "description": "zink: lower unaligned memory accesses",
"nominated": true, "nominated": true,
"nomination_type": 1, "nomination_type": 1,
"resolution": 0, "resolution": 1,
"main_sha": null, "main_sha": null,
"because_sha": "0288cb0a0c471fbef07d1dfc1cae843c5396d8e1", "because_sha": "0288cb0a0c471fbef07d1dfc1cae843c5396d8e1",
"notes": null "notes": null

View file

@ -5302,11 +5302,20 @@ mem_access_size_align_cb(nir_intrinsic_op intrin, uint8_t bytes,
assert(util_is_power_of_two_nonzero(align)); assert(util_is_power_of_two_nonzero(align));
return (nir_mem_access_size_align){ /* simply drop the bit_size for unaligned load/stores */
.num_components = MIN2(bytes / (bit_size / 8), 4), if (align < (bit_size / 8)) {
.bit_size = bit_size, return (nir_mem_access_size_align){
.align = bit_size / 8, .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 static nir_mem_access_size_align