mesa: move STATE_LENGTH to shader_enums.h and use it everywhere
[mesa.git] / src / compiler / nir / nir_lower_wpos_ytransform.c
index 873d259d7fc201e52fe150f0c4f7b38a19a87320..62166e787461eb9ab79088ef7d9725eae145ac06 100644 (file)
@@ -302,8 +302,10 @@ lower_wpos_ytransform_block(lower_wpos_ytransform_state *state, nir_block *block
             nir_deref_var *dvar = intr->variables[0];
             nir_variable *var = dvar->var;
 
-            if (var->data.mode == nir_var_shader_in &&
-                var->data.location == VARYING_SLOT_POS) {
+            if ((var->data.mode == nir_var_shader_in &&
+                 var->data.location == VARYING_SLOT_POS) ||
+                (var->data.mode == nir_var_system_value &&
+                 var->data.location == SYSTEM_VALUE_FRAG_COORD)) {
                /* gl_FragCoord should not have array/struct derefs: */
                assert(dvar->deref.child == NULL);
                lower_fragcoord(state, intr);
@@ -312,6 +314,10 @@ lower_wpos_ytransform_block(lower_wpos_ytransform_state *state, nir_block *block
                assert(dvar->deref.child == NULL);
                lower_load_sample_pos(state, intr);
             }
+         } else if (intr->intrinsic == nir_intrinsic_load_frag_coord) {
+            lower_fragcoord(state, intr);
+         } else if (intr->intrinsic == nir_intrinsic_load_sample_pos) {
+            lower_load_sample_pos(state, intr);
          } else if (intr->intrinsic == nir_intrinsic_interp_var_at_offset) {
             lower_interp_var_at_offset(state, intr);
          }
@@ -346,7 +352,7 @@ nir_lower_wpos_ytransform(nir_shader *shader,
       .shader = shader,
    };
 
-   assert(shader->stage == MESA_SHADER_FRAGMENT);
+   assert(shader->info.stage == MESA_SHADER_FRAGMENT);
 
    nir_foreach_function(function, shader) {
       if (function->impl)