[Mesa-dev] [PATCH 2/2] nir/validate: Use the type from the tail of call parameter derefs

Jason Ekstrand jason at jlekstrand.net
Mon Jun 25 16:13:07 UTC 2018


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
---
 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 abfd1712b39..a5fec7dd2d9 100644
--- a/src/compiler/nir/nir_validate.c
+++ b/src/compiler/nir/nir_validate.c
@@ -559,14 +559,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);
    }
 }
-- 
2.17.1



More information about the mesa-dev mailing list