diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 635fdda2527..f9b4eb85530 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -3872,19 +3872,16 @@ vtn_ssa_transpose(struct vtn_builder *b, struct vtn_ssa_value *src) vtn_create_ssa_value(b, glsl_transposed_type(src->type)); for (unsigned i = 0; i < glsl_get_matrix_columns(dest->type); i++) { - nir_alu_instr *vec = create_vec(b, glsl_get_matrix_columns(src->type), - glsl_get_bit_size(src->type)); if (glsl_type_is_vector_or_scalar(src->type)) { - vec->src[0].src = nir_src_for_ssa(src->def); - vec->src[0].swizzle[0] = i; + dest->elems[i]->def = nir_channel(&b->nb, src->def, i); } else { - for (unsigned j = 0; j < glsl_get_matrix_columns(src->type); j++) { - vec->src[j].src = nir_src_for_ssa(src->elems[j]->def); - vec->src[j].swizzle[0] = i; + unsigned cols = glsl_get_matrix_columns(src->type); + nir_ssa_scalar srcs[cols]; + for (unsigned j = 0; j < cols; j++) { + srcs[j] = nir_get_ssa_scalar(src->elems[j]->def, i); } + dest->elems[i]->def = nir_vec_scalars(&b->nb, srcs, cols); } - nir_builder_instr_insert(&b->nb, &vec->instr); - dest->elems[i]->def = &vec->dest.dest.ssa; } dest->transposed = src;