From b7c9fc72fddd76679ca3248dfd0540c69f1790da Mon Sep 17 00:00:00 2001 From: Caio Marcelo de Oliveira Filho Date: Wed, 5 Jun 2019 00:59:11 -0700 Subject: [PATCH] glsl: Make interlock builtins follow same compiler rules as barriers MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- src/compiler/glsl/ast_function.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/compiler/glsl/ast_function.cpp b/src/compiler/glsl/ast_function.cpp index 6bd8987..a35bd63 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); } } -- 2.7.4