summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Ekstrand <jason.ekstrand@intel.com>2018-12-13 15:03:28 -0600
committerJason Ekstrand <jason.ekstrand@intel.com>2018-12-18 13:13:28 -0600
commitcf7fb3980596f46c8376f1121043b98332eab62c (patch)
tree743b9e5e879e5e7f5191faf5c93cd5284b607f68
parent867fe35a16c309374d68530a415b1aca1d0f1975 (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.c6
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);