From cf7fb3980596f46c8376f1121043b98332eab62c Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Thu, 13 Dec 2018 15:03:28 -0600 Subject: [PATCH] nir/lower_wpos_center: Look at derefs for modes This is instead of looking all the way back to the variable which may not exist for all derefs. This makes this code properly ignore casts with modes other than the mode[s] we care about (where casts aren't allowed). Reviewed-by: Timothy Arceri --- src/compiler/nir/nir_lower_wpos_center.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/compiler/nir/nir_lower_wpos_center.c b/src/compiler/nir/nir_lower_wpos_center.c index 74f4d2a9701..3c114936f7e 100644 --- a/src/compiler/nir/nir_lower_wpos_center.c +++ b/src/compiler/nir/nir_lower_wpos_center.c @@ -82,10 +82,12 @@ lower_wpos_center_block(nir_builder *b, nir_block *block, nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); if (intr->intrinsic == nir_intrinsic_load_deref) { nir_deref_instr *deref = nir_src_as_deref(intr->src[0]); + if (deref->mode != nir_var_shader_in) + continue; + nir_variable *var = nir_deref_instr_get_variable(deref); - if (var->data.mode == nir_var_shader_in && - var->data.location == VARYING_SLOT_POS) { + if (var->data.location == VARYING_SLOT_POS) { /* gl_FragCoord should not have array/struct derefs: */ assert(deref->deref_type == nir_deref_type_var); update_fragcoord(b, intr, for_sample_shading); -- 2.30.2