summaryrefslogtreecommitdiffstats
path: root/src/compiler/glsl/ast_function.cpp
diff options
context:
space:
mode:
authorCaio Marcelo de Oliveira Filho <[email protected]>2019-06-05 00:59:11 -0700
committerCaio Marcelo de Oliveira Filho <[email protected]>2019-06-10 14:29:26 -0700
commitb7c9fc72fddd76679ca3248dfd0540c69f1790da (patch)
tree7732fb30f22ffa8166eadbf4013fe251f6eda314 /src/compiler/glsl/ast_function.cpp
parentfb2169040aa056220469a620cd24fa4cef145baf (diff)
glsl: Make interlock builtins follow same compiler rules as barriers
Generalize the barrier code to provide correct error messages for other builtins. Fixes most of piglit compilation tests for ARB_fragment_shader_interlock. Reviewed-by: Tapani Pälli <[email protected]> Reviewed-by: Plamena Manolova <[email protected]>
Diffstat (limited to 'src/compiler/glsl/ast_function.cpp')
-rw-r--r--src/compiler/glsl/ast_function.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/compiler/glsl/ast_function.cpp b/src/compiler/glsl/ast_function.cpp
index 6bd8987cd9b..a35bd63fa41 100644
--- a/src/compiler/glsl/ast_function.cpp
+++ b/src/compiler/glsl/ast_function.cpp
@@ -2387,22 +2387,27 @@ ast_function_expression::hir(exec_list *instructions,
new(ctx) ir_dereference_variable(mvp),
new(ctx) ir_dereference_variable(vtx));
} else {
- if (state->stage == MESA_SHADER_TESS_CTRL &&
- sig->is_builtin() && strcmp(func_name, "barrier") == 0) {
+ if (sig->is_builtin() &&
+ ((state->stage == MESA_SHADER_TESS_CTRL &&
+ strcmp(func_name, "barrier") == 0) ||
+ (state->stage == MESA_SHADER_FRAGMENT &&
+ state->ARB_fragment_shader_interlock_enable &&
+ (strcmp(func_name, "beginInvocationInterlockARB") == 0 ||
+ strcmp(func_name, "endInvocationInterlockARB") == 0)))) {
if (state->current_function == NULL ||
strcmp(state->current_function->function_name(), "main") != 0) {
_mesa_glsl_error(&loc, state,
- "barrier() may only be used in main()");
+ "%s() may only be used in main()", func_name);
}
if (state->found_return) {
_mesa_glsl_error(&loc, state,
- "barrier() may not be used after return");
+ "%s() may not be used after return", func_name);
}
if (instructions != &state->current_function->body) {
_mesa_glsl_error(&loc, state,
- "barrier() may not be used in control flow");
+ "%s() may not be used in control flow", func_name);
}
}