anv/pipeline: Call nir_lower_constant_initializers
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 15 Jul 2016 23:55:14 +0000 (16:55 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Mon, 5 Dec 2016 23:40:09 +0000 (15:40 -0800)
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
src/intel/vulkan/anv_pipeline.c

index 9b65e353a903676312ebcd5530c32291a13f12e4..9104267090e8e9728a4c4e3633726db6be6326c1 100644 (file)
@@ -136,6 +136,13 @@ anv_shader_compile_to_nir(struct anv_device *device,
       nir_validate_shader(nir);
    }
 
+   /* We have to lower away local constant initializers right before we
+    * inline functions.  That way they get properly initialized at the top
+    * of the function and not at the top of its caller.
+    */
+   nir_lower_constant_initializers(nir, nir_var_local);
+   nir_validate_shader(nir);
+
    nir_lower_returns(nir);
    nir_validate_shader(nir);
 
@@ -155,6 +162,12 @@ anv_shader_compile_to_nir(struct anv_device *device,
    nir_remove_dead_variables(nir, nir_var_system_value);
    nir_validate_shader(nir);
 
+   /* Now that we've deleted all but the main function, we can go ahead and
+    * lower the rest of the constant initializers.
+    */
+   nir_lower_constant_initializers(nir, ~0);
+   nir_validate_shader(nir);
+
    nir_propagate_invariant(nir);
    nir_validate_shader(nir);