aboutsummaryrefslogtreecommitdiffstats
path: root/src/compiler/glsl
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2017-05-01 16:49:27 -0700
committerEric Anholt <[email protected]>2017-05-08 12:15:49 -0700
commit0ffa06a19badf2df0f02e02477a7d2904a53a6a8 (patch)
tree449781739c8ffb0e8fcba9dc16bde3cb530fe58e /src/compiler/glsl
parent79da0ed2fcb8c88253fe2c9036f17e29c1f319dc (diff)
glsl: Don't allow redefining builtin functions on GLSL 1.00.
The spec text cited above says you can't, but only the GLSL 3.00 (redefine or overload) case was implemented. Fixes dEQP scoping.invalid.redefine_builtin_fragment/vertex. Reviewed-by: Samuel Pitoiset <[email protected]> Tested-by: Matt Turner <[email protected]>
Diffstat (limited to 'src/compiler/glsl')
-rw-r--r--src/compiler/glsl/ast_to_hir.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp
index b03476c5763..0dc69ef4b11 100644
--- a/src/compiler/glsl/ast_to_hir.cpp
+++ b/src/compiler/glsl/ast_to_hir.cpp
@@ -5888,16 +5888,27 @@ ast_function::hir(exec_list *instructions,
* "User code can overload the built-in functions but cannot redefine
* them."
*/
- if (state->es_shader && state->language_version >= 300) {
+ if (state->es_shader) {
/* Local shader has no exact candidates; check the built-ins. */
_mesa_glsl_initialize_builtin_functions();
- if (_mesa_glsl_has_builtin_function(name)) {
+ if (state->language_version >= 300 &&
+ _mesa_glsl_has_builtin_function(name)) {
YYLTYPE loc = this->get_location();
_mesa_glsl_error(& loc, state,
"A shader cannot redefine or overload built-in "
"function `%s' in GLSL ES 3.00", name);
return NULL;
}
+
+ if (state->language_version == 100) {
+ ir_function_signature *sig =
+ _mesa_glsl_find_builtin_function(state, name, &hir_parameters);
+ if (sig && sig->is_builtin()) {
+ _mesa_glsl_error(& loc, state,
+ "A shader cannot redefine built-in "
+ "function `%s' in GLSL ES 1.00", name);
+ }
+ }
}
/* Verify that this function's signature either doesn't match a previously