spirv: Handle constants and types before execution modes
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 22 Jan 2019 19:42:08 +0000 (13:42 -0600)
committerJason Ekstrand <jason@jlekstrand.net>
Fri, 1 Feb 2019 17:34:02 +0000 (17:34 +0000)
We already defer handling the actual execution modes until after we've
created the shader.  This just moves it a tiny bit further so we
actually have constants and types and can handle OpExecutionModeId.

Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
src/compiler/spirv/spirv_to_nir.c

index 41972edc1b5c21551b0fc683354cb98474b185aa..bfc16b2ae7d3ff85a73365610ac15295cf3391bb 100644 (file)
@@ -4441,10 +4441,6 @@ spirv_to_nir(const uint32_t *words, size_t word_count,
    /* Set shader info defaults */
    b->shader->info.gs.invocations = 1;
 
-   /* Parse execution modes */
-   vtn_foreach_execution_mode(b, b->entry_point,
-                              vtn_handle_execution_mode, NULL);
-
    b->specializations = spec;
    b->num_specializations = num_spec;
 
@@ -4452,6 +4448,10 @@ spirv_to_nir(const uint32_t *words, size_t word_count,
    words = vtn_foreach_instruction(b, words, word_end,
                                    vtn_handle_variable_or_type_instruction);
 
+   /* Parse execution modes */
+   vtn_foreach_execution_mode(b, b->entry_point,
+                              vtn_handle_execution_mode, NULL);
+
    if (b->workgroup_size_builtin) {
       vtn_assert(b->workgroup_size_builtin->type->type ==
                  glsl_vector_type(GLSL_TYPE_UINT, 3));