anv/pipeline: Run lower_returns and inline_functions after spirv_to_nir
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 18 Dec 2015 19:28:21 +0000 (11:28 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 23 Dec 2015 21:49:56 +0000 (13:49 -0800)
src/vulkan/anv_pipeline.c

index 1906205c4d042a505245ed54efc47612fdf169a4..02be5a81984434656999fd36e8ccee108b1eb8a5 100644 (file)
@@ -102,26 +102,38 @@ anv_shader_compile_to_nir(struct anv_device *device,
        * and just use the NIR shader */
       nir = module->nir;
       nir->options = nir_options;
+      nir_validate_shader(nir);
    } else {
       uint32_t *spirv = (uint32_t *) module->data;
       assert(spirv[0] == SPIR_V_MAGIC_NUMBER);
       assert(module->size % 4 == 0);
 
       nir = spirv_to_nir(spirv, module->size / 4, stage, nir_options);
+      nir_validate_shader(nir);
+
+      nir_lower_returns(nir);
+      nir_validate_shader(nir);
+
+      nir_inline_functions(nir);
+      nir_validate_shader(nir);
    }
-   nir_validate_shader(nir);
 
    /* Vulkan uses the separate-shader linking model */
    nir->info.separate_shader = true;
 
-   /* Make sure the provided shader has exactly one entrypoint and that the
-    * name matches the name that came in from the VkShader.
-    */
+   /* Pick off the single entrypoint that we want */
    nir_function_impl *entrypoint = NULL;
-   nir_foreach_overload(nir, overload) {
-      if (strcmp(entrypoint_name, overload->function->name) == 0 &&
-          overload->impl) {
-         assert(entrypoint == NULL);
+   foreach_list_typed_safe(nir_function, func, node, &nir->functions) {
+      if (strcmp(entrypoint_name, func->name) != 0) {
+         /* Not our function, get rid of it */
+         exec_node_remove(&func->node);
+         continue;
+      }
+
+      assert(exec_list_length(&func->overload_list) == 1);
+      foreach_list_typed(nir_function_overload, overload, node,
+                         &func->overload_list) {
+         assert(overload->impl);
          entrypoint = overload->impl;
       }
    }