--- src/glsl/nir/nir_validate.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/src/glsl/nir/nir_validate.c b/src/glsl/nir/nir_validate.c index a7aa798..d7ba374 100644 --- a/src/glsl/nir/nir_validate.c +++ b/src/glsl/nir/nir_validate.c @@ -97,6 +97,16 @@ typedef struct { static void validate_src(nir_src *src, validate_state *state); static void +validate_src_components(nir_src *src, int num_components) +{ + if (src->is_ssa) { + assert(num_components <= src->ssa->num_components); + } else if (!src->reg.reg->is_packed) { + assert(num_components <= src->reg.reg->num_components); + } +} + +static void validate_reg_src(nir_reg_src *src, validate_state *state) { assert(src->reg != NULL); @@ -361,13 +371,8 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr, validate_state *state) assert(components_read > 0); - if (instr->src[i].is_ssa) { - assert(components_read <= instr->src[i].ssa->num_components); - } else if (!instr->src[i].reg.reg->is_packed) { - assert(components_read <= instr->src[i].reg.reg->num_components); - } - validate_src(&instr->src[i], state); + validate_src_components(&instr->src[i], components_read); } if (nir_intrinsic_infos[instr->intrinsic].has_dest) { @@ -423,6 +428,8 @@ validate_tex_instr(nir_tex_instr *instr, validate_state *state) assert(!src_type_seen[instr->src[i].src_type]); src_type_seen[instr->src[i].src_type] = true; validate_src(&instr->src[i].src, state); + validate_src_components(&instr->src[i].src, + nir_tex_instr_src_size(instr, i)); } if (instr->sampler != NULL) -- 2.1.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev