elk: bit-boyutu indirgemesine UBO modunu ekle

nir_lower_mem_access_bit_sizes()'in mod listesinde nir_var_mem_ubo yoktu.
Modern brw (brw_nir.c) onu iceriyor; elk'te unutulmus. Sonucu: gen7'de
16-bit UBO erisimleri hic indirgenmiyor ve sessizce yanlis sonuc
veriyordu -- get_mem_access_size_align() verx10 < 75 icin her sub-dword
erisimi 32-bit dword'e cevirip load'da shift+extract, store'da atomic RMW
uretiyor, ama pass UBO yuklerine hic ugramiyordu.

storageBuffer16BitAccess acilana kadar ulasilamaz bir yoldu, o yuzden
fark edilmemis.

VK-GL-CTS, 8086:0166, spirv_assembly 16-bit seti (15368 vaka):
  16bit_storage.uniform_16_to_32 / _chainaccess / _to_64 -> 72 Fail
  duzeltmeden sonra 72'sinin tamami Pass.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
elwrclandClaude Opus 5 committed 2026-09-21 22:55:53 +03:00
1 parent 9fbac1ee73
commit 64632dfceb
1 file changed
+6
+6
View File
@@ -1441,6 +1441,12 @@ elk_vectorize_lower_mem_access(nir_shader *nir,
const struct intel_device_info *devinfo = compiler->devinfo;
nir_lower_mem_access_bit_sizes_options mem_access_options = {
.modes = nir_var_mem_ssbo |
/* brw (gfx9+) UBO'yu da listeye koyuyor; elk'te yoktu, bu
* yuzden gen7'de 16-bit UBO erisimleri hic indirgenmiyor ve
* CTS'in 16bit_storage.uniform_* vakalari yanlis sonuc
* veriyordu. SSBO icin zaten dogru olan dword indirgemesi
* UBO icin de gerekli. */
nir_var_mem_ubo |
nir_var_mem_constant |
nir_var_shader_temp |
nir_var_function_temp |