diff options
author | Eric Anholt <[email protected]> | 2010-08-05 14:41:09 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2010-08-05 14:41:09 -0700 |
commit | 8048226b7b1bbe8fd89f9c32fa4fadca4b8760c4 (patch) | |
tree | 55b73abdfee86352226cfe52c87e769f070b6917 /src | |
parent | 0a0ab121f87a3b00e29c20a38fdd28e2fc31bae7 (diff) |
glsl2: Insert global declarations at the top of the instruction stream.
Fixes use-before-decl in glslparsertest shaders.
Fixes:
CorrectFull.frag
CorrectModule.frag
Diffstat (limited to 'src')
-rw-r--r-- | src/glsl/ast_to_hir.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp index 292c7be6217..f14341c8f72 100644 --- a/src/glsl/ast_to_hir.cpp +++ b/src/glsl/ast_to_hir.cpp @@ -1951,7 +1951,14 @@ ast_declarator_list::hir(exec_list *instructions, decl->identifier); } - instructions->push_tail(var); + /* Push the variable declaration to the top. It means that all + * the variable declarations will appear in a funny + * last-to-first order, but otherwise we run into trouble if a + * function is prototyped, a global var is decled, then the + * function is defined with usage of the global var. See + * glslparsertest's CorrectModule.frag. + */ + instructions->push_head(var); instructions->append_list(&initializer_instructions); /* Add the variable to the symbol table after processing the initializer. |