glsl: allow image qualifiers inside structures

ARB_bindless_texture allows to declare images inside structures
which means that qualifiers like writeonly should be allowed.

I have a got a confirmation from Jeff Bolz (one author of the spec),
because the spec doesn't clearly explain this.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Samuel Pitoiset
2017-04-07 14:34:55 +02:00
parent 48b7882200
commit 242964ca5c

View File

@@ -2409,10 +2409,29 @@ struct_declaration:
ast_fully_specified_type *const type = $1;
type->set_location(@1);
if (type->qualifier.flags.i != 0)
_mesa_glsl_error(&@1, state,
"only precision qualifiers may be applied to "
"structure members");
if (state->has_bindless()) {
ast_type_qualifier input_layout_mask;
/* Allow to declare qualifiers for images. */
input_layout_mask.flags.i = 0;
input_layout_mask.flags.q.coherent = 1;
input_layout_mask.flags.q._volatile = 1;
input_layout_mask.flags.q.restrict_flag = 1;
input_layout_mask.flags.q.read_only = 1;
input_layout_mask.flags.q.write_only = 1;
input_layout_mask.flags.q.explicit_image_format = 1;
if ((type->qualifier.flags.i & ~input_layout_mask.flags.i) != 0) {
_mesa_glsl_error(&@1, state,
"only precision and image qualifiers may be "
"applied to structure members");
}
} else {
if (type->qualifier.flags.i != 0)
_mesa_glsl_error(&@1, state,
"only precision qualifiers may be applied to "
"structure members");
}
$$ = new(ctx) ast_declarator_list(type);
$$->set_location(@2);