nir_validate complains in case less than 4 components are provided. CC: 18.1 <mesa-sta...@lists.freedesktop.org> --- src/compiler/spirv/spirv_to_nir.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 48154303ff2..b082af57b10 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -2450,10 +2450,20 @@ vtn_handle_image(struct vtn_builder *b, SpvOp opcode, case SpvOpAtomicStore: intrin->src[3] = nir_src_for_ssa(vtn_ssa_value(b, w[4])->def); break; - case SpvOpImageWrite: - intrin->src[3] = nir_src_for_ssa(vtn_ssa_value(b, w[3])->def); - break; + case SpvOpImageWrite: { + nir_ssa_def *value = vtn_ssa_value(b, w[3])->def; + if (value->num_components < 4) { + unsigned swiz[4]; + for (unsigned i = 0; i < 4; i++) + swiz[i] = i < value->num_components ? i : 0; + + value = nir_swizzle(&b->nb, value, swiz, 4, false); + } + + intrin->src[3] = nir_src_for_ssa(value); + break; + } case SpvOpAtomicCompareExchange: case SpvOpAtomicIIncrement: case SpvOpAtomicIDecrement: -- 2.18.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev