glsl: rework validate_image_qualifier_for_type()
It makes more sense to have two separate validate functions, mainly because memory qualifiers are allowed with members of shader storage blocks. validate_memory_qualifier_for_type() will be fixed in a separate patch. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
@@ -3293,7 +3293,7 @@ apply_explicit_location(const struct ast_type_qualifier *qual,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
validate_image_qualifier_for_type(struct _mesa_glsl_parse_state *state,
|
validate_memory_qualifier_for_type(struct _mesa_glsl_parse_state *state,
|
||||||
YYLTYPE *loc,
|
YYLTYPE *loc,
|
||||||
const struct ast_type_qualifier *qual,
|
const struct ast_type_qualifier *qual,
|
||||||
const glsl_type *type)
|
const glsl_type *type)
|
||||||
@@ -3306,12 +3306,26 @@ validate_image_qualifier_for_type(struct _mesa_glsl_parse_state *state,
|
|||||||
qual->flags.q.restrict_flag) {
|
qual->flags.q.restrict_flag) {
|
||||||
_mesa_glsl_error(loc, state, "memory qualifiers may only be applied "
|
_mesa_glsl_error(loc, state, "memory qualifiers may only be applied "
|
||||||
"to images");
|
"to images");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qual->flags.q.explicit_image_format) {
|
static bool
|
||||||
|
validate_image_format_qualifier_for_type(struct _mesa_glsl_parse_state *state,
|
||||||
|
YYLTYPE *loc,
|
||||||
|
const struct ast_type_qualifier *qual,
|
||||||
|
const glsl_type *type)
|
||||||
|
{
|
||||||
|
/* From section 4.4.6.2 (Format Layout Qualifiers) of the GLSL 4.50 spec:
|
||||||
|
*
|
||||||
|
* "Format layout qualifiers can be used on image variable declarations
|
||||||
|
* (those declared with a basic type having “image ” in its keyword)."
|
||||||
|
*/
|
||||||
|
if (!type->is_image() && qual->flags.q.explicit_image_format) {
|
||||||
_mesa_glsl_error(loc, state, "format layout qualifiers may only be "
|
_mesa_glsl_error(loc, state, "format layout qualifiers may only be "
|
||||||
"applied to images");
|
"applied to images");
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -3325,7 +3339,11 @@ apply_image_qualifier_to_variable(const struct ast_type_qualifier *qual,
|
|||||||
{
|
{
|
||||||
const glsl_type *base_type = var->type->without_array();
|
const glsl_type *base_type = var->type->without_array();
|
||||||
|
|
||||||
if (!validate_image_qualifier_for_type(state, loc, qual, base_type))
|
if (!validate_image_format_qualifier_for_type(state, loc, qual, base_type) ||
|
||||||
|
!validate_memory_qualifier_for_type(state, loc, qual, base_type))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!base_type->is_image())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (var->data.mode != ir_var_uniform &&
|
if (var->data.mode != ir_var_uniform &&
|
||||||
|
Reference in New Issue
Block a user