[Mesa-dev] [PATCH] glsl: Fix semantic checks on precision qualifiers

Chad Versace chad at chad-versace.us
Mon Jan 17 17:22:19 PST 2011


From: Chad Versace <chad.versace at intel.com>

Ian, you caught my mistake. I believe this patch has the correct behavior.
---

The check for the requirement that
   Precision qualifiers only apply to floating point and integer types.
was incomplete and allowed some types to illegaly have precision
qualifiers.
---
 src/glsl/ast_to_hir.cpp |   17 ++++++++---------
 1 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index e3164d8..477efad 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
-- 
1.7.3.3



More information about the mesa-dev mailing list