From bc67499bebc96c181cd983994a72f467c262d7eb Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Mon, 25 Jun 2018 09:13:05 -0700 Subject: nir/validate: Use the type from the tail of call parameter derefs Otherwise, if what gets passed into the function call is a deref chain longer than just a variable deref, we would use the type of the entire variable rather than the type of the thing being dereferenced. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106980 Reviewed-by: Ian Romanick (Unique to 18.1) --- src/compiler/nir/nir_validate.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/compiler/nir/nir_validate.c b/src/compiler/nir/nir_validate.c index eee737e806..4a60b7d70e 100644 --- a/src/compiler/nir/nir_validate.c +++ b/src/compiler/nir/nir_validate.c @@ -567,14 +567,16 @@ validate_call_instr(nir_call_instr *instr, validate_state *state) if (instr->return_deref == NULL) { validate_assert(state, glsl_type_is_void(instr->callee->return_type)); } else { - validate_assert(state, instr->return_deref->deref.type == instr->callee->return_type); + validate_assert(state, instr->callee->return_type == + nir_deref_tail(&instr->return_deref->deref)->type); validate_deref_var(instr, instr->return_deref, state); } validate_assert(state, instr->num_params == instr->callee->num_params); for (unsigned i = 0; i < instr->num_params; i++) { - validate_assert(state, instr->callee->params[i].type == instr->params[i]->deref.type); + validate_assert(state, instr->callee->params[i].type == + nir_deref_tail(&instr->params[i]->deref)->type); validate_deref_var(instr, instr->params[i], state); } } -- cgit v1.2.3