Mesa (master): glsl: Treat an interface block specifier as a level of struct nesting

Chris Forbes chrisf at kemper.freedesktop.org
Wed Jun 25 19:57:37 UTC 2014


Module: Mesa
Branch: master
Commit: b4ef7c596b31675aea131870ba4c07aaad1f1525
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b4ef7c596b31675aea131870ba4c07aaad1f1525

Author: Chris Forbes <chrisf at ijw.co.nz>
Date:   Sun Jun 15 12:57:20 2014 +1200

glsl: Treat an interface block specifier as a level of struct nesting

Fixes the piglit test:

   spec/glsl-1.50/compiler/interface-blocks-structs-defined-within-block-instanced.vert

Signed-off-by: Chris Forbes <chrisf at ijw.co.nz>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/glsl/ast_to_hir.cpp |    8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 92e0f90..7ba04a8 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -5287,6 +5287,12 @@ ast_interface_block::hir(exec_list *instructions,
    bool block_row_major = this->layout.flags.q.row_major;
    exec_list declared_variables;
    glsl_struct_field *fields;
+
+   /* Treat an interface block as one level of nesting, so that embedded struct
+    * specifiers will be disallowed.
+    */
+   state->struct_specifier_depth++;
+
    unsigned int num_variables =
       ast_process_structure_or_interface_block(&declared_variables,
                                                state,
@@ -5298,6 +5304,8 @@ ast_interface_block::hir(exec_list *instructions,
                                                redeclaring_per_vertex,
                                                var_mode);
 
+   state->struct_specifier_depth--;
+
    if (!redeclaring_per_vertex)
       validate_identifier(this->block_name, loc, state);
 




More information about the mesa-commit mailing list