anv/pipeline: Set up point coord enables
[mesa.git] / src / intel / vulkan / anv_nir_lower_push_constants.c
index 53cd3d737937d97380238fc3c925cc38e241fc3a..64c155372ff0f035ffbcfff1252c5e71c42dc3d7 100644 (file)
 
 #include "anv_nir.h"
 
-struct lower_push_constants_state {
-   nir_shader *shader;
-   bool is_scalar;
-};
-
-static bool
-lower_push_constants_block(nir_block *block, void *void_state)
+void
+anv_nir_lower_push_constants(nir_shader *shader)
 {
-   struct lower_push_constants_state *state = void_state;
-
-   nir_foreach_instr(block, instr) {
-      if (instr->type != nir_instr_type_intrinsic)
-         continue;
-
-      nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
-
-      /* TODO: Handle indirect push constants */
-      if (intrin->intrinsic != nir_intrinsic_load_push_constant)
+   nir_foreach_function(function, shader) {
+      if (!function->impl)
          continue;
 
-      /* This wont work for vec4 stages. */
-      assert(state->is_scalar);
+      nir_foreach_block(block, function->impl) {
+         nir_foreach_instr(instr, block) {
+            if (instr->type != nir_instr_type_intrinsic)
+               continue;
 
-      assert(intrin->const_index[0] % 4 == 0);
-      assert(intrin->const_index[1] == 128);
+            nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
 
-      /* We just turn them into uniform loads with the appropreate offset */
-      intrin->intrinsic = nir_intrinsic_load_uniform;
-   }
-
-   return true;
-}
+            /* TODO: Handle indirect push constants */
+            if (intrin->intrinsic != nir_intrinsic_load_push_constant)
+               continue;
 
-void
-anv_nir_lower_push_constants(nir_shader *shader, bool is_scalar)
-{
-   struct lower_push_constants_state state = {
-      .shader = shader,
-      .is_scalar = is_scalar,
-   };
+            assert(intrin->const_index[0] % 4 == 0);
+            assert(intrin->const_index[1] == 128);
 
-   nir_foreach_function(shader, function) {
-      if (function->impl)
-         nir_foreach_block(function->impl, lower_push_constants_block, &state);
+            /* We just turn them into uniform loads */
+            intrin->intrinsic = nir_intrinsic_load_uniform;
+         }
+      }
    }
-
-   assert(shader->num_uniforms % 4 == 0);
-   if (is_scalar)
-      shader->num_uniforms /= 4;
-   else
-      shader->num_uniforms = DIV_ROUND_UP(shader->num_uniforms, 16);
 }