[Mesa-dev] [PATCH] anv/pipeline: Move multiple shaders/module finishme

Robert Bragg robert at sixbynine.org
Fri Nov 4 15:34:05 UTC 2016


The heuristic expecting the entrypoint to be named 'main' was causing
false warnings for modules with only a single shader that happen to use
another name. We now count entrypoints before triggering this warning.

Signed-off-by: Robert Bragg <robert at sixbynine.org>
---
 src/compiler/spirv/spirv_to_nir.c | 6 ++++++
 src/compiler/spirv/vtn_private.h  | 1 +
 src/intel/vulkan/anv_pipeline.c   | 4 ----
 3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c
index 9c5d331..6adeaa6 100644
--- a/src/compiler/spirv/spirv_to_nir.c
+++ b/src/compiler/spirv/spirv_to_nir.c
@@ -2507,6 +2507,8 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode,
       unsigned name_words;
       entry_point->name = vtn_string_literal(b, &w[3], count - 3, &name_words);
 
+      b->n_entry_points++;
+
       if (strcmp(entry_point->name, b->entry_point_name) != 0 ||
           stage_for_execution_model(w[1]) != b->entry_point_stage)
          break;
@@ -2995,6 +2997,10 @@ spirv_to_nir(const uint32_t *words, size_t word_count,
       return NULL;
    }
 
+   if (b->n_entry_points > 1) {
+      vtn_warn("FINISHME: Multiple shaders per module not really supported");
+   }
+
    b->shader = nir_shader_create(NULL, stage, options, NULL);
 
    /* Set shader info defaults */
diff --git a/src/compiler/spirv/vtn_private.h b/src/compiler/spirv/vtn_private.h
index 6f34f09..5746898 100644
--- a/src/compiler/spirv/vtn_private.h
+++ b/src/compiler/spirv/vtn_private.h
@@ -377,6 +377,7 @@ struct vtn_builder {
    gl_shader_stage entry_point_stage;
    const char *entry_point_name;
    struct vtn_value *entry_point;
+   int n_entry_points;
    bool origin_upper_left;
    bool pixel_center_integer;
 
diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c
index 0aac711..9600cd3 100644
--- a/src/intel/vulkan/anv_pipeline.c
+++ b/src/intel/vulkan/anv_pipeline.c
@@ -90,10 +90,6 @@ anv_shader_compile_to_nir(struct anv_device *device,
                           gl_shader_stage stage,
                           const VkSpecializationInfo *spec_info)
 {
-   if (strcmp(entrypoint_name, "main") != 0) {
-      anv_finishme("Multiple shaders per module not really supported");
-   }
-
    const struct brw_compiler *compiler =
       device->instance->physicalDevice.compiler;
    const nir_shader_compiler_options *nir_options =
-- 
2.10.1



More information about the mesa-dev mailing list