Mesa (master): glsl: do not allow interface block to have name already taken
Tapani Pälli
tpalli at kemper.freedesktop.org
Thu Jan 22 05:56:47 UTC 2015
Module: Mesa
Branch: master
Commit: adc8cdfa351240f1ce28b677e1be79a30a36b594
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=adc8cdfa351240f1ce28b677e1be79a30a36b594
Author: Tapani Pälli <tapani.palli at intel.com>
Date: Mon Jan 19 12:28:17 2015 +0200
glsl: do not allow interface block to have name already taken
Fixes currently failing Piglit case
interface-blocks-name-reused-globally.vert
v2: combine var declaration with assignment (Ian)
Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
---
src/glsl/ast_to_hir.cpp | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 811a955..1ba29f7 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -5443,9 +5443,23 @@ ast_interface_block::hir(exec_list *instructions,
state->struct_specifier_depth--;
- if (!redeclaring_per_vertex)
+ if (!redeclaring_per_vertex) {
validate_identifier(this->block_name, loc, state);
+ /* From section 4.3.9 ("Interface Blocks") of the GLSL 4.50 spec:
+ *
+ * "Block names have no other use within a shader beyond interface
+ * matching; it is a compile-time error to use a block name at global
+ * scope for anything other than as a block name."
+ */
+ ir_variable *var = state->symbols->get_variable(this->block_name);
+ if (var && !var->type->is_interface()) {
+ _mesa_glsl_error(&loc, state, "Block name `%s' is "
+ "already used in the scope.",
+ this->block_name);
+ }
+ }
+
const glsl_type *earlier_per_vertex = NULL;
if (redeclaring_per_vertex) {
/* Find the previous declaration of gl_PerVertex. If we're redeclaring
More information about the mesa-commit
mailing list