summaryrefslogtreecommitdiff
path: root/src/glsl/ast_to_hir.cpp
diff options
context:
space:
mode:
authorChad Versace <chad.versace@intel.com>2011-01-17 15:28:39 -0800
committerChad Versace <chad.versace@intel.com>2011-01-18 14:43:49 -0800
commit45e8e6c6b1b7f3bc00a578fa6809c9bc719c171a (patch)
tree59eb59b398e9d348fd328e8158f3115f05e1214c /src/glsl/ast_to_hir.cpp
parent42dbc2530b5a2263012f3fa0e48517a1b8db1c52 (diff)
glsl: Fix semantic checks on precision qualifiers
The check for Precision qualifiers only apply to floating point and integer types. was incomplete. It rejected only type 'bool' and structures.
Diffstat (limited to 'src/glsl/ast_to_hir.cpp')
-rw-r--r--src/glsl/ast_to_hir.cpp17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index e3164d8c61..477efade81 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -2363,7 +2363,7 @@ ast_declarator_list::hir(exec_list *instructions,
}
- /* Precision qualifiers do not apply to bools and structs.
+ /* Precision qualifiers only apply to floating point and integer types.
*
* From section 4.5.2 of the GLSL 1.30 spec:
* "Any floating point or any integer declaration can have the type
@@ -2372,16 +2372,15 @@ ast_declarator_list::hir(exec_list *instructions,
* variables.
*/
if (this->type->specifier->precision != ast_precision_none
- && this->type->specifier->type_specifier == ast_bool) {
+ && !var->type->is_float()
+ && !var->type->is_integer()
+ && !(var->type->is_array()
+ && (var->type->fields.array->is_float()
+ || var->type->fields.array->is_integer()))) {
_mesa_glsl_error(&loc, state,
- "preicion qualifiers do not apply to type bool");
- }
- if (this->type->specifier->precision != ast_precision_none
- && this->type->specifier->structure != NULL) {
-
- _mesa_glsl_error(&loc, state,
- "precision qualifiers do not apply to structures");
+ "precision qualifiers apply only to floating point "
+ "and integer types");
}
/* Process the initializer and add its instructions to a temporary