From 64632dfceba3edc6a0f88c3214ca709b4f3f327e Mon Sep 17 00:00:00 2001 From: elwrcl Date: Mon, 21 Sep 2026 22:55:53 +0300 Subject: [PATCH] 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 --- src/intel/compiler/elk/elk_nir.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/intel/compiler/elk/elk_nir.c b/src/intel/compiler/elk/elk_nir.c index 2724976..2ae70f7 100644 --- a/src/intel/compiler/elk/elk_nir.c +++ b/src/intel/compiler/elk/elk_nir.c @@ -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 |