summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2011-03-26 23:37:09 -0700
committerKenneth Graunke <kenneth@whitecape.org>2011-05-25 11:17:41 -0700
commit5408ccb09f6f6cb8643ae9bb7169150dfa715a16 (patch)
tree7efffb501936e41e9f5a9377ab2107ae950b940d
parent203624128c70445e2dae54b5b78823190641f2b4 (diff)
glsl: Accept precision qualifiers on sampler types, but only in ES.7.9
GLSL 1.30 states clearly that only float and int are allowed, while the GLSL ES specification's issues section states that sampler types may take precision qualifiers. Fixes compilation failures in 3DMarkMobileES 2.0 and GLBenchmark 2.0, as well as a regression in the Meego Tablet UX. (cherry-picked from 45e8e6c6b1b7f3bc00a578fa6809c9bc719c171a)
-rw-r--r--src/glsl/ast_to_hir.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 6a916bbb62..b41e305a4d 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -2021,17 +2021,24 @@ ast_declarator_list::hir(exec_list *instructions,
* preceded by one of these precision qualifiers [...] Literal
* constants do not have precision qualifiers. Neither do Boolean
* variables.
+ *
+ * In GLSL ES, sampler types are also allowed.
+ *
+ * From page 87 of the GLSL ES spec:
+ * "RESOLUTION: Allow sampler types to take a precision qualifier."
*/
if (this->type->specifier->precision != ast_precision_none
&& !var->type->is_float()
&& !var->type->is_integer()
+ && !(var->type->is_sampler() && state->es_shader)
&& !(var->type->is_array()
&& (var->type->fields.array->is_float()
|| var->type->fields.array->is_integer()))) {
_mesa_glsl_error(&loc, state,
- "precision qualifiers apply only to floating point "
- "and integer types");
+ "precision qualifiers apply only to floating point"
+ "%s types", state->es_shader ? ", integer, and sampler"
+ : "and integer");
}
/* Process the initializer and add its instructions to a temporary