mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-03 02:28:26 +02:00
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:
parent
a4a46fe3fa
commit
8b28b35531
5 changed files with 17 additions and 1 deletions
|
|
@ -448,6 +448,7 @@ struct ast_type_qualifier {
|
||||||
unsigned patch:1;
|
unsigned patch:1;
|
||||||
unsigned uniform:1;
|
unsigned uniform:1;
|
||||||
unsigned buffer:1;
|
unsigned buffer:1;
|
||||||
|
unsigned shared_storage:1;
|
||||||
unsigned smooth:1;
|
unsigned smooth:1;
|
||||||
unsigned flat:1;
|
unsigned flat:1;
|
||||||
unsigned noperspective:1;
|
unsigned noperspective:1;
|
||||||
|
|
|
||||||
|
|
@ -3089,6 +3089,12 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
|
||||||
"members");
|
"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) {
|
if (qual->flags.q.row_major || qual->flags.q.column_major) {
|
||||||
validate_matrix_layout_for_type(state, loc, var->type, var);
|
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.in
|
||||||
|| this->flags.q.out
|
|| this->flags.q.out
|
||||||
|| this->flags.q.uniform
|
|| this->flags.q.uniform
|
||||||
|| this->flags.q.buffer;
|
|| this->flags.q.buffer
|
||||||
|
|| this->flags.q.shared_storage;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
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);
|
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;
|
struct return STRUCT;
|
||||||
void return VOID_TOK;
|
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 IMAGE1DSHADOW IMAGE2DSHADOW IMAGE1DARRAYSHADOW IMAGE2DARRAYSHADOW
|
||||||
%token COHERENT VOLATILE RESTRICT READONLY WRITEONLY
|
%token COHERENT VOLATILE RESTRICT READONLY WRITEONLY
|
||||||
%token ATOMIC_UINT
|
%token ATOMIC_UINT
|
||||||
|
%token SHARED
|
||||||
%token STRUCT VOID_TOK WHILE
|
%token STRUCT VOID_TOK WHILE
|
||||||
%token <identifier> IDENTIFIER TYPE_IDENTIFIER NEW_IDENTIFIER
|
%token <identifier> IDENTIFIER TYPE_IDENTIFIER NEW_IDENTIFIER
|
||||||
%type <identifier> any_identifier
|
%type <identifier> any_identifier
|
||||||
|
|
@ -1929,6 +1930,11 @@ storage_qualifier:
|
||||||
memset(& $$, 0, sizeof($$));
|
memset(& $$, 0, sizeof($$));
|
||||||
$$.flags.q.buffer = 1;
|
$$.flags.q.buffer = 1;
|
||||||
}
|
}
|
||||||
|
| SHARED
|
||||||
|
{
|
||||||
|
memset(& $$, 0, sizeof($$));
|
||||||
|
$$.flags.q.shared_storage = 1;
|
||||||
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
memory_qualifier:
|
memory_qualifier:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue