mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-02 03:00:24 +01:00
glsl: added uniform initializer check
GLSL 1.10 disallows initializers for uniforms but GLSL 1.20 and later allows them. This patch uses the #version directive to allow/disallow uniform initializers. This addresses bug 25807, but piglit also needs to be fixed to specify the GLSL version in the shader.
This commit is contained in:
parent
639e7a140e
commit
4f481cb87a
3 changed files with 12 additions and 0 deletions
|
|
@ -3763,6 +3763,14 @@ _slang_gen_var_decl(slang_assemble_ctx *A, slang_variable *var,
|
|||
#endif
|
||||
}
|
||||
|
||||
if (var->type.qualifier == SLANG_QUAL_UNIFORM &&
|
||||
!A->allow_uniform_initializers) {
|
||||
slang_info_log_error(A->log,
|
||||
"initializer for uniform %s not allowed",
|
||||
varName);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* IR for the variable we're initializing */
|
||||
varRef = new_var(A, var);
|
||||
if (!varRef) {
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ typedef struct slang_assemble_ctx_
|
|||
struct gl_sl_pragmas *pragmas;
|
||||
slang_var_table *vartable;
|
||||
slang_info_log *log;
|
||||
GLboolean allow_uniform_initializers;
|
||||
|
||||
/* current loop stack */
|
||||
const slang_operation *LoopOperStack[MAX_LOOP_DEPTH];
|
||||
|
|
|
|||
|
|
@ -2058,6 +2058,7 @@ parse_init_declarator(slang_parse_ctx * C, slang_output_ctx * O,
|
|||
if (C->global_scope) {
|
||||
slang_assemble_ctx A;
|
||||
memset(&A, 0, sizeof(slang_assemble_ctx));
|
||||
A.allow_uniform_initializers = C->version > 110;
|
||||
A.atoms = C->atoms;
|
||||
A.space.funcs = O->funs;
|
||||
A.space.structs = O->structs;
|
||||
|
|
@ -2077,6 +2078,7 @@ parse_init_declarator(slang_parse_ctx * C, slang_output_ctx * O,
|
|||
if (var->initializer != NULL) {
|
||||
slang_assemble_ctx A;
|
||||
memset(&A, 0, sizeof(slang_assemble_ctx));
|
||||
A.allow_uniform_initializers = C->version > 110;
|
||||
A.atoms = C->atoms;
|
||||
A.space.funcs = O->funs;
|
||||
A.space.structs = O->structs;
|
||||
|
|
@ -2434,6 +2436,7 @@ parse_code_unit(slang_parse_ctx * C, slang_code_unit * unit,
|
|||
A.vartable = o.vartable;
|
||||
A.EmitContReturn = ctx->Shader.EmitContReturn;
|
||||
A.log = C->L;
|
||||
A.allow_uniform_initializers = C->version > 110;
|
||||
|
||||
/* main() takes no parameters */
|
||||
if (mainFunc->param_count > 0) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue