anv: Enable VK_KHR_16bit_storage for PushConstant
[mesa.git] / src / intel / vulkan / anv_nir_lower_push_constants.c
index 53cd3d737937d97380238fc3c925cc38e241fc3a..ad60d0c824e924f4ca22ff175ef845aa91cea30d 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)
+   nir_foreach_function(function, shader) {
+      if (!function->impl)
          continue;
 
-      nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
+      nir_foreach_block(block, function->impl) {
+         nir_foreach_instr(instr, block) {
+            if (instr->type != nir_instr_type_intrinsic)
+               continue;
 
-      /* TODO: Handle indirect push constants */
-      if (intrin->intrinsic != nir_intrinsic_load_push_constant)
-         continue;
+            nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
 
-      /* This wont work for vec4 stages. */
-      assert(state->is_scalar);
+            /* TODO: Handle indirect push constants */
+            if (intrin->intrinsic != nir_intrinsic_load_push_constant)
+               continue;
 
-      assert(intrin->const_index[0] % 4 == 0);
-      assert(intrin->const_index[1] == 128);
-
-      /* We just turn them into uniform loads with the appropreate offset */
-      intrin->intrinsic = nir_intrinsic_load_uniform;
+            /* We just turn them into uniform loads */
+            intrin->intrinsic = nir_intrinsic_load_uniform;
+         }
+      }
    }
-
-   return true;
-}
-
-void
-anv_nir_lower_push_constants(nir_shader *shader, bool is_scalar)
-{
-   struct lower_push_constants_state state = {
-      .shader = shader,
-      .is_scalar = is_scalar,
-   };
-
-   nir_foreach_function(shader, function) {
-      if (function->impl)
-         nir_foreach_block(function->impl, lower_push_constants_block, &state);
-   }
-
-   assert(shader->num_uniforms % 4 == 0);
-   if (is_scalar)
-      shader->num_uniforms /= 4;
-   else
-      shader->num_uniforms = DIV_ROUND_UP(shader->num_uniforms, 16);
 }