From 35c8e727a55d15485091eb9de279d8beb3abc55e Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 21 Apr 2017 19:27:16 +0200 Subject: glsl: allow bindless samplers/images to be initialized MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From section 4.1.7 of the ARB_bindless_texture spec: "Samplers may be declared as shader inputs and outputs, as uniform variables, as temporary variables, and as function parameters." From section 4.1.X of the ARB_bindless_texture spec: "Images may be declared as shader inputs and outputs, as uniform variables, as temporary variables, and as function parameters." v3: - add spec comment - update the glsl error message Signed-off-by: Samuel Pitoiset Reviewed-by: Timothy Arceri Reviewed-by: Nicolai Hähnle --- src/compiler/glsl/ast_to_hir.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp index d73d74a5cfe..7ae83dfd83f 100644 --- a/src/compiler/glsl/ast_to_hir.cpp +++ b/src/compiler/glsl/ast_to_hir.cpp @@ -4333,11 +4333,22 @@ process_initializer(ir_variable *var, ast_declaration *decl, * "Opaque variables [...] are initialized only through the * OpenGL API; they cannot be declared with an initializer in a * shader." + * + * From section 4.1.7 of the ARB_bindless_texture spec: + * + * "Samplers may be declared as shader inputs and outputs, as uniform + * variables, as temporary variables, and as function parameters." + * + * From section 4.1.X of the ARB_bindless_texture spec: + * + * "Images may be declared as shader inputs and outputs, as uniform + * variables, as temporary variables, and as function parameters." */ - if (var->type->contains_opaque()) { + if (var->type->contains_atomic() || + (!state->has_bindless() && var->type->contains_opaque())) { _mesa_glsl_error(&initializer_loc, state, - "cannot initialize opaque variable %s", - var->name); + "cannot initialize %s variable %s", + var->name, state->has_bindless() ? "atomic" : "opaque"); } if ((var->data.mode == ir_var_shader_in) && (state->current_function == NULL)) { -- cgit v1.2.3