mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 08:58:02 +02:00
glsl: Allow precision qualifiers on general opaque types.
From the GLSL ES 3.1 spec, section 4.7.3: "Any floating point, integer, opaque type declaration can have the type preceded by one of these precision qualifiers: [...] highp [...], mediump [...], lowp [...]." Reviewed-by: Timothy Arceri <t_arceri@yahoo.com.au> Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
This commit is contained in:
parent
ee7bf349d8
commit
26b1141a78
1 changed files with 6 additions and 4 deletions
|
|
@ -3414,7 +3414,7 @@ validate_identifier(const char *identifier, YYLTYPE loc,
|
||||||
static bool
|
static bool
|
||||||
precision_qualifier_allowed(const glsl_type *type)
|
precision_qualifier_allowed(const glsl_type *type)
|
||||||
{
|
{
|
||||||
/* Precision qualifiers apply to floating point, integer and sampler
|
/* Precision qualifiers apply to floating point, integer and opaque
|
||||||
* types.
|
* types.
|
||||||
*
|
*
|
||||||
* Section 4.5.2 (Precision Qualifiers) of the GLSL 1.30 spec says:
|
* Section 4.5.2 (Precision Qualifiers) of the GLSL 1.30 spec says:
|
||||||
|
|
@ -3444,7 +3444,7 @@ precision_qualifier_allowed(const glsl_type *type)
|
||||||
return type->is_float()
|
return type->is_float()
|
||||||
|| type->is_integer()
|
|| type->is_integer()
|
||||||
|| type->is_record()
|
|| type->is_record()
|
||||||
|| type->is_sampler();
|
|| type->contains_opaque();
|
||||||
}
|
}
|
||||||
|
|
||||||
ir_rvalue *
|
ir_rvalue *
|
||||||
|
|
@ -4155,7 +4155,7 @@ ast_declarator_list::hir(exec_list *instructions,
|
||||||
|
|
||||||
_mesa_glsl_error(&loc, state,
|
_mesa_glsl_error(&loc, state,
|
||||||
"precision qualifiers apply only to floating point"
|
"precision qualifiers apply only to floating point"
|
||||||
", integer and sampler types");
|
", integer and opaque types");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* From section 4.1.7 of the GLSL 4.40 spec:
|
/* From section 4.1.7 of the GLSL 4.40 spec:
|
||||||
|
|
@ -5463,6 +5463,8 @@ is_valid_default_precision_type(const struct glsl_type *const type)
|
||||||
/* "int" and "float" are valid, but vectors and matrices are not. */
|
/* "int" and "float" are valid, but vectors and matrices are not. */
|
||||||
return type->vector_elements == 1 && type->matrix_columns == 1;
|
return type->vector_elements == 1 && type->matrix_columns == 1;
|
||||||
case GLSL_TYPE_SAMPLER:
|
case GLSL_TYPE_SAMPLER:
|
||||||
|
case GLSL_TYPE_IMAGE:
|
||||||
|
case GLSL_TYPE_ATOMIC_UINT:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -5511,7 +5513,7 @@ ast_type_specifier::hir(exec_list *instructions,
|
||||||
if (!is_valid_default_precision_type(type)) {
|
if (!is_valid_default_precision_type(type)) {
|
||||||
_mesa_glsl_error(&loc, state,
|
_mesa_glsl_error(&loc, state,
|
||||||
"default precision statements apply only to "
|
"default precision statements apply only to "
|
||||||
"float, int, and sampler types");
|
"float, int, and opaque types");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue