summaryrefslogtreecommitdiffstats
path: root/src/glsl/ir_clone.cpp
diff options
context:
space:
mode:
authorPaul Berry <stereotype441@gmail.com>2013-11-13 16:53:18 -0800
committerPaul Berry <stereotype441@gmail.com>2013-11-21 15:04:59 -0800
commit2bbcf19acad530d339ffe8e007fe2f6a244e1580 (patch)
tree54df0e3f535b1f7ee0b5aaf1701f2b4eb285a005 /src/glsl/ir_clone.cpp
parent7a70f033b5fbb8d3e5956cc4df30b84f0d4d9653 (diff)
downloadexternal_mesa3d-2bbcf19acad530d339ffe8e007fe2f6a244e1580.zip
external_mesa3d-2bbcf19acad530d339ffe8e007fe2f6a244e1580.tar.gz
external_mesa3d-2bbcf19acad530d339ffe8e007fe2f6a244e1580.tar.bz2
glsl: Prohibit illegal mixing of redeclarations inside/outside gl_PerVertex.
From section 7.1 (Built-In Language Variables) of the GLSL 4.10 spec: Also, if a built-in interface block is redeclared, no member of the built-in declaration can be redeclared outside the block redeclaration. We have been regarding this text as a clarification to the behaviour established for gl_PerVertex by GLSL 1.50, so we apply it regardless of GLSL version. This patch enforces the rule by adding an enum to ir_variable to track how the variable was declared: implicitly, normally, or in an interface block. Fixes piglit tests: - gs-redeclares-pervertex-out-after-global-redeclaration.geom - vs-redeclares-pervertex-out-after-global-redeclaration.vert - gs-redeclares-pervertex-out-after-other-global-redeclaration.geom - vs-redeclares-pervertex-out-after-other-global-redeclaration.vert - gs-redeclares-pervertex-out-before-global-redeclaration - vs-redeclares-pervertex-out-before-global-redeclaration Cc: "10.0" <mesa-stable@lists.freedesktop.org> v2: Don't set "how_declared" redundantly in builtin_variables.cpp. Properly clone "how_declared". Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Diffstat (limited to 'src/glsl/ir_clone.cpp')
-rw-r--r--src/glsl/ir_clone.cpp1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/glsl/ir_clone.cpp b/src/glsl/ir_clone.cpp
index b0f173a..40ed33a 100644
--- a/src/glsl/ir_clone.cpp
+++ b/src/glsl/ir_clone.cpp
@@ -68,6 +68,7 @@ ir_variable::clone(void *mem_ctx, struct hash_table *ht) const
var->has_initializer = this->has_initializer;
var->depth_layout = this->depth_layout;
var->assigned = this->assigned;
+ var->how_declared = this->how_declared;
var->used = this->used;
var->num_state_slots = this->num_state_slots;