From: Caio Marcelo de Oliveira Filho Date: Wed, 5 Jun 2019 07:59:11 +0000 (-0700) Subject: glsl: Make interlock builtins follow same compiler rules as barriers X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b7c9fc72fddd76679ca3248dfd0540c69f1790da;p=mesa.git 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 Reviewed-by: Plamena Manolova --- 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); } }