From 45e8e6c6b1b7f3bc00a578fa6809c9bc719c171a Mon Sep 17 00:00:00 2001 From: Chad Versace Date: Mon, 17 Jan 2011 15:28:39 -0800 Subject: [PATCH] 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. --- src/glsl/ast_to_hir.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp index e3164d8c617..477efade814 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 -- 2.30.2