From 180d8cb5448c6958093477274c7e2dbe40fface6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= Date: Fri, 15 May 2026 12:56:08 -0700 Subject: [PATCH] intel/brw: Fix nir_intrinsic_load_inline_data_intel register offset calculation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In case of nir_intrinsic_load_inline_data_intel it was not using base_offset to create the uniform, instead it was using only the special BRW_INLINE_PARAM_REG value that later will be replaced by the inline_data fixed register. So here using base_offset for both intrinsics, adding BRW_INLINE_PARAM_REG if nir_intrinsic_load_inline_data_intel and then in brw_shader::assign_curb_setup checking for inst->src[i].nr >= BRW_INLINE_PARAM_REG and adjusting brw_reg by the remaining of the subtraction with BRW_INLINE_PARAM_REG. Fixes: 7f1981441469 ("brw/nir: handle inline_data_intel more like push_data_intel") Reviewed-by: Lionel Landwerlin Signed-off-by: José Roberto de Souza Part-of: --- src/intel/compiler/brw/brw_from_nir.cpp | 7 +++---- src/intel/compiler/brw/brw_shader.cpp | 3 ++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/intel/compiler/brw/brw_from_nir.cpp b/src/intel/compiler/brw/brw_from_nir.cpp index 217c167d63e..db6bdb0f9c4 100644 --- a/src/intel/compiler/brw/brw_from_nir.cpp +++ b/src/intel/compiler/brw/brw_from_nir.cpp @@ -5164,10 +5164,9 @@ brw_from_nir_emit_intrinsic(nir_to_brw_state &ntb, unsigned base_offset = nir_intrinsic_base(instr); assert(base_offset % 4 == 0 || base_offset % brw_type_size_bytes(dest.type) == 0); - brw_reg src = brw_uniform_reg( - instr->intrinsic == nir_intrinsic_load_inline_data_intel ? - BRW_INLINE_PARAM_REG : (base_offset / REG_SIZE), - dest.type); + unsigned nr = base_offset / REG_SIZE; + nr += instr->intrinsic == nir_intrinsic_load_inline_data_intel ? BRW_INLINE_PARAM_REG : 0; + brw_reg src = brw_uniform_reg(nr, dest.type); if (nir_src_is_const(instr->src[0])) { unsigned load_offset = nir_src_as_uint(instr->src[0]); diff --git a/src/intel/compiler/brw/brw_shader.cpp b/src/intel/compiler/brw/brw_shader.cpp index 5241365964a..0a9ebd38958 100644 --- a/src/intel/compiler/brw/brw_shader.cpp +++ b/src/intel/compiler/brw/brw_shader.cpp @@ -327,8 +327,9 @@ brw_shader::assign_curb_setup() continue; struct brw_reg brw_reg; - if (inst->src[i].nr == BRW_INLINE_PARAM_REG) { + if (inst->src[i].nr >= BRW_INLINE_PARAM_REG) { brw_reg = cs_payload().inline_parameter; + brw_reg.nr += inst->src[i].nr - BRW_INLINE_PARAM_REG; } else { assert(inst->src[i].nr < 64); used |= BITFIELD64_BIT(inst->src[i].nr);