From 26f5a6d6cc7d01b615ddca82ddb400960b4da1c4 Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Wed, 11 Mar 2026 09:49:36 +0100 Subject: [PATCH] nir: fix nir_intrinsic_copy_const_indices for large indices MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: 4ba581887e5 ("nir: support intrinsic indicies larger than 32 bits") Reviewed-by: Marek Olšák Part-of: --- src/compiler/nir/nir.c | 7 +++++-- src/compiler/nir/nir_intrinsics_indices_h.py | 13 +++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index 60d5d24a707..678c523e115 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -3353,8 +3353,11 @@ nir_intrinsic_copy_const_indices(nir_intrinsic_instr *dst, nir_intrinsic_instr * /* require that dst instruction also uses the same const_index[]: */ assert(dst_info->index_map[i] > 0); - dst->const_index[dst_info->index_map[i] - 1] = - src->const_index[src_info->index_map[i] - 1]; + unsigned size = nir_intrinsic_index_size(i); + + memcpy(&dst->const_index[dst_info->index_map[i] - 1], + &src->const_index[src_info->index_map[i] - 1], + sizeof(dst->const_index[0]) * size); } } diff --git a/src/compiler/nir/nir_intrinsics_indices_h.py b/src/compiler/nir/nir_intrinsics_indices_h.py index 6b5b47a737a..63fac4b1dfc 100644 --- a/src/compiler/nir/nir_intrinsics_indices_h.py +++ b/src/compiler/nir/nir_intrinsics_indices_h.py @@ -73,6 +73,19 @@ nir_intrinsic_has_${name}(const nir_intrinsic_instr *instr) } % endfor +static inline unsigned +nir_intrinsic_index_size(nir_intrinsic_index_flag index) +{ + switch (index) { +% for index in INTR_INDICES: +% if index.size != 1: + case ${"NIR_INTRINSIC_" + index.name.upper()}: return ${index.size}; +% endif +% endfor + default: return 1; + } +} + #endif /* _NIR_INTRINSICS_INDICES_ */ """