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_ */ """