On 09/09/2014 09:10 AM, Tapani Pälli wrote: > Hi Frank; > > Kalyan sent me a similar fix mentioning that it is related to this test > case: > https://www.khronos.org/registry/webgl/sdk/tests/conformance/limits/gl-min-textures.html > > If your patch is related, please mention in the commit message. It helps > to track possible regression in the future. > > With changes proposed by Anuj: > > Reviewed-by: Tapani Pälli <tapani.pa...@intel.com>
Oh sorry for the noise, I see it went in already, which is good :) > > On 08/23/2014 12:23 AM, Frank Henigman wrote: >> If a precision qualifer is allowed on type T, it should be allowed >> on an array of T. Refactor the check to ensure this is the case. >> --- >> I wanted to expand the comment to say why is_record() is in there, >> but I don't understand why it is. I thought structs couldn't have >> precision qualifiers. >> >> src/glsl/ast_to_hir.cpp | 75 >> +++++++++++++++++++++++++++---------------------- >> 1 file changed, 41 insertions(+), 34 deletions(-) >> >> diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp >> index 30b02d0..998404a 100644 >> --- a/src/glsl/ast_to_hir.cpp >> +++ b/src/glsl/ast_to_hir.cpp >> @@ -3202,6 +3202,41 @@ validate_identifier(const char *identifier, YYLTYPE >> loc, >> } >> } >> >> +static bool >> +precision_qualifier_allowed(const glsl_type *type) >> +{ >> + /* Precision qualifiers apply to floating point, integer and sampler >> + * types. >> + * >> + * Section 4.5.2 (Precision Qualifiers) of the GLSL 1.30 spec says: >> + * "Any floating point or any integer declaration can have the type >> + * preceded by one of these precision qualifiers [...] Literal >> + * constants do not have precision qualifiers. Neither do Boolean >> + * variables. >> + * >> + * Section 4.5 (Precision and Precision Qualifiers) of the GLSL 1.30 >> + * spec also says: >> + * >> + * "Precision qualifiers are added for code portability with OpenGL >> + * ES, not for functionality. They have the same syntax as in OpenGL >> + * ES." >> + * >> + * Section 8 (Built-In Functions) of the GLSL ES 1.00 spec says: >> + * >> + * "uniform lowp sampler2D sampler; >> + * highp vec2 coord; >> + * ... >> + * lowp vec4 col = texture2D (sampler, coord); >> + * // texture2D returns lowp" >> + * >> + * From this, we infer that GLSL 1.30 (and later) should allow precision >> + * qualifiers on sampler types just like float and integer types. >> + */ >> + return type->is_float() >> + || type->is_integer() >> + || type->is_record() >> + || type->is_sampler(); >> +} >> >> ir_rvalue * >> ast_declarator_list::hir(exec_list *instructions, >> @@ -3689,41 +3724,13 @@ ast_declarator_list::hir(exec_list *instructions, >> } >> >> >> - /* Precision qualifiers apply to floating point, integer and sampler >> - * types. >> - * >> - * Section 4.5.2 (Precision Qualifiers) of the GLSL 1.30 spec says: >> - * "Any floating point or any integer declaration can have the type >> - * preceded by one of these precision qualifiers [...] Literal >> - * constants do not have precision qualifiers. Neither do Boolean >> - * variables. >> - * >> - * Section 4.5 (Precision and Precision Qualifiers) of the GLSL 1.30 >> - * spec also says: >> - * >> - * "Precision qualifiers are added for code portability with >> OpenGL >> - * ES, not for functionality. They have the same syntax as in >> OpenGL >> - * ES." >> - * >> - * Section 8 (Built-In Functions) of the GLSL ES 1.00 spec says: >> - * >> - * "uniform lowp sampler2D sampler; >> - * highp vec2 coord; >> - * ... >> - * lowp vec4 col = texture2D (sampler, coord); >> - * // texture2D returns >> lowp" >> - * >> - * From this, we infer that GLSL 1.30 (and later) should allow >> precision >> - * qualifiers on sampler types just like float and integer types. >> + /* If a precision qualifier is allowed on a type, it is allowed on >> + * an array of that type. >> */ >> - if (this->type->qualifier.precision != ast_precision_none >> - && !var->type->is_float() >> - && !var->type->is_integer() >> - && !var->type->is_record() >> - && !var->type->is_sampler() >> - && !(var->type->is_array() >> - && (var->type->fields.array->is_float() >> - || var->type->fields.array->is_integer()))) { >> + if (!(this->type->qualifier.precision == ast_precision_none >> + || precision_qualifier_allowed(var->type) >> + || (var->type->is_array() >> + && precision_qualifier_allowed(var->type->fields.array)))) { >> >> _mesa_glsl_error(&loc, state, >> "precision qualifiers apply only to floating >> point" > // Tapani > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev