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:
Jordan Justen
2015-03-15 13:53:06 -07:00
parent a4a46fe3fa
commit 8b28b35531
5 changed files with 17 additions and 1 deletions
+1
View File
@@ -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;
+6
View File
@@ -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);
}
+2 -1
View File
@@ -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
+2
View File
@@ -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;
+6
View File
@@ -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: