This patch series adds the necessary machinery to the GLSL compiler to allow shaders to redeclare the gl_PerVertex interface block. Although the precise rules for how to redeclare gl_PerVertex were not published until GLSL 4.10, it seems clear from context that this was intended as a clarification rather than a change in behaviour, so it makes sense to implement the rules now. Also, redeclaration of gl_PerVertex is required in order to get some corner cases of gl_ClipDistance working with geometry shaders.
This patch series represents the last of the "scary" geometry shader tasks. Everything that's left after this is bug fixing and a lot more testing. Once this series lands, I plan to turn on geometry shader support for i965 so people can start trying it out. Patches 1-2 make some minor corrections to previous work I've done. Patches 3-4 create the built-in gl_PerVertex output block (previously we only created gl_PerVertex for geometry shader inputs). Patch 5 fixes the interface block comparison code to properly account for the location field (without this, there would be subtle bugs in later patches). Patches 6-11 implement the rules for what's allowed to be declared in an interface block and what's not, including fixing a bunch of loopholes where we allowed identifiers starting with "gl_" where we shouldn't. Patches 12-15 set up the groundwork for allowing gl_PerVertex to be redeclared. Patch 16 adds the ability to redeclare the gl_PerVertex output interface block. Patch 17 closes a loophole in detecting compile-time errors. Patch 18 adds the ability to redeclare the gl_PerVertex input interface block. Finally, patch 19 implements the rule that gl_PerVertex is not allowed to be redeclared after a shader has used it. Note: I recently published a piglit series containing the tests that I used to validate this series. A few minor corner cases still don't pass yet: - gs-redeclares-pervertex-out-after-global-redeclaration.geom - gs-redeclares-pervertex-out-after-other-global-redeclaration.geom - gs-redeclares-pervertex-out-before-global-redeclaration.geom - vs-redeclares-pervertex-out-after-global-redeclaration.vert - vs-redeclares-pervertex-out-after-other-global-redeclaration.vert - vs-redeclares-pervertex-out-before-global-redeclaration.vert - interstage-pervertex-redeclaration-unneeded - intrastage-pervertex-in-redeclaration-unneeded - intrastage-pervertex-out-redeclaration-unneeded I plan to address these corner cases in forthcoming patches once this series lands. This series depends on two other patch series that have not yet landed: - the series starting with "glsl: Keep track of location for interface block fields." (partially reviewed by Ian) - the series called "glsl: Support unsized arrays in interface blocks." (not yet reviewed) To see the series in its proper context, check out branch "gs-phase-5" of https://github.com/stereotype441/mesa.git. [PATCH 01/19] glsl: Construct gl_in with a location of -1. [PATCH 02/19] glsl: Fix block name of built-in gl_PerVertex interface block. [PATCH 03/19] glsl: Refactor code for creating gl_PerVertex interface block. [PATCH 04/19] glsl: Construct gl_PerVertex interfaces for GS and VS outputs. [PATCH 05/19] glsl: Account for location field when comparing interface blocks. [PATCH 06/19] glsl: Refactor code to check that identifier names are valid. [PATCH 07/19] glsl: Don't allow unnamed interface blocks to redeclare variables. [PATCH 08/19] glsl: Don't allow invalid identifiers as interface block names. [PATCH 09/19] glsl: Don't allow invalid identifier names in struct/interface fields. [PATCH 10/19] glsl: Don't allow invalid identifiers as interface block instance names. [PATCH 11/19] glsl: Don't allow invalid identifiers as struct names. [PATCH 12/19] glsl: Generalize processing of variable redeclarations. [PATCH 13/19] glsl: Add an ir_variable::reinit_interface_type() function. [PATCH 14/19] glsl: Make it possible to remove a variable from the symbol table. [PATCH 15/19] glsl: Error check redeclarations of gl_PerVertex. [PATCH 16/19] glsl: Support redeclaration of VS and GS gl_PerVertex output. [PATCH 17/19] glsl: Catch redeclaration of interface block instance names at compile time. [PATCH 18/19] glsl: Support redeclaration of GS gl_PerVertex input. [PATCH 19/19] glsl: Don't allow gl_PerVertex to be redeclared after it's been used. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev