diff options
author | Jason Ekstrand <jason.ekstrand@intel.com> | 2018-12-13 15:03:28 -0600 |
---|---|---|
committer | Jason Ekstrand <jason.ekstrand@intel.com> | 2018-12-18 13:13:28 -0600 |
commit | cf7fb3980596f46c8376f1121043b98332eab62c (patch) | |
tree | 743b9e5e879e5e7f5191faf5c93cd5284b607f68 | |
parent | 867fe35a16c309374d68530a415b1aca1d0f1975 (diff) |
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 <tarceri@itsqueeze.com>
-rw-r--r-- | src/compiler/nir/nir_lower_wpos_center.c | 6 |
1 files 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); |