From: Iago Toral Quiroga <ito...@igalia.com> Undefined sources in alu operations don't have a valid bit size because they are uninitialized. Simply ignoring undefined sources for bit size validation is not enough since drivers can check and operate with the bit-size and that can lead to issues later on. Instead, fix undefined sources to always have a compatible bit size.
v2 (Sam): - Use helper to get type size from nir_alu_type. --- src/compiler/nir/nir_validate.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/compiler/nir/nir_validate.c b/src/compiler/nir/nir_validate.c index 9f18d1c..645c15a 100644 --- a/src/compiler/nir/nir_validate.c +++ b/src/compiler/nir/nir_validate.c @@ -180,9 +180,11 @@ validate_alu_src(nir_alu_instr *instr, unsigned index, validate_state *state) unsigned num_components; unsigned src_bit_size; + bool is_undef = false; if (src->src.is_ssa) { src_bit_size = src->src.ssa->bit_size; num_components = src->src.ssa->num_components; + is_undef = src->src.ssa->parent_instr->type == nir_instr_type_ssa_undef; } else { src_bit_size = src->src.reg.reg->bit_size; if (src->src.reg.reg->is_packed) @@ -205,12 +207,20 @@ validate_alu_src(nir_alu_instr *instr, unsigned index, validate_state *state) if (nir_alu_type_get_type_size(src_type)) { /* This source has an explicit bit size */ + if (is_undef) { + src_bit_size = nir_alu_type_get_type_size(src_type); + src->src.ssa->bit_size = src_bit_size; + } assert(nir_alu_type_get_type_size(src_type) == src_bit_size); } else { if (!nir_alu_type_get_type_size(nir_op_infos[instr->op].output_type)) { unsigned dest_bit_size = instr->dest.dest.is_ssa ? instr->dest.dest.ssa.bit_size : instr->dest.dest.reg.reg->bit_size; + if (is_undef) { + src_bit_size = dest_bit_size; + src->src.ssa->bit_size = dest_bit_size; + } assert(dest_bit_size == src_bit_size); } } -- 2.5.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev