glsl: Parse shared keyword for compute shader variables
v2: * Move shared parsing under storage qualifiers (tarceri) * Fail to compile if shared is used in non-compute shader (tarceri) * Use separate shared_storage bit for shared variables (tarceri) Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
This commit is contained in:
@@ -448,6 +448,7 @@ struct ast_type_qualifier {
|
||||
unsigned patch:1;
|
||||
unsigned uniform:1;
|
||||
unsigned buffer:1;
|
||||
unsigned shared_storage:1;
|
||||
unsigned smooth:1;
|
||||
unsigned flat:1;
|
||||
unsigned noperspective:1;
|
||||
|
||||
@@ -3089,6 +3089,12 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
|
||||
"members");
|
||||
}
|
||||
|
||||
if (qual->flags.q.shared_storage && state->stage != MESA_SHADER_COMPUTE) {
|
||||
_mesa_glsl_error(loc, state,
|
||||
"the shared storage qualifiers can only be used with "
|
||||
"compute shaders");
|
||||
}
|
||||
|
||||
if (qual->flags.q.row_major || qual->flags.q.column_major) {
|
||||
validate_matrix_layout_for_type(state, loc, var->type, var);
|
||||
}
|
||||
|
||||
@@ -85,7 +85,8 @@ ast_type_qualifier::has_storage() const
|
||||
|| this->flags.q.in
|
||||
|| this->flags.q.out
|
||||
|| this->flags.q.uniform
|
||||
|| this->flags.q.buffer;
|
||||
|| this->flags.q.buffer
|
||||
|| this->flags.q.shared_storage;
|
||||
}
|
||||
|
||||
bool
|
||||
|
||||
@@ -414,6 +414,8 @@ writeonly KEYWORD_WITH_ALT(420, 300, 420, 310, yyextra->ARB_shader_image_lo
|
||||
|
||||
atomic_uint KEYWORD_WITH_ALT(420, 300, 420, 310, yyextra->ARB_shader_atomic_counters_enable, ATOMIC_UINT);
|
||||
|
||||
shared KEYWORD_WITH_ALT(430, 310, 430, 310, yyextra->ARB_compute_shader_enable, SHARED);
|
||||
|
||||
struct return STRUCT;
|
||||
void return VOID_TOK;
|
||||
|
||||
|
||||
@@ -165,6 +165,7 @@ static bool match_layout_qualifier(const char *s1, const char *s2,
|
||||
%token IMAGE1DSHADOW IMAGE2DSHADOW IMAGE1DARRAYSHADOW IMAGE2DARRAYSHADOW
|
||||
%token COHERENT VOLATILE RESTRICT READONLY WRITEONLY
|
||||
%token ATOMIC_UINT
|
||||
%token SHARED
|
||||
%token STRUCT VOID_TOK WHILE
|
||||
%token <identifier> IDENTIFIER TYPE_IDENTIFIER NEW_IDENTIFIER
|
||||
%type <identifier> any_identifier
|
||||
@@ -1929,6 +1930,11 @@ storage_qualifier:
|
||||
memset(& $$, 0, sizeof($$));
|
||||
$$.flags.q.buffer = 1;
|
||||
}
|
||||
| SHARED
|
||||
{
|
||||
memset(& $$, 0, sizeof($$));
|
||||
$$.flags.q.shared_storage = 1;
|
||||
}
|
||||
;
|
||||
|
||||
memory_qualifier:
|
||||
|
||||
Reference in New Issue
Block a user