The ARB_bindless_texture spec says: "Replace Section 4.1.7 (Samplers), p. 25"
"Samplers may be declared as shader inputs and outputs, as uniform variables, as temporary variables, and as function parameters." "Replace Section 4.1.X, (Images)" "Images may be declared as shader inputs and outputs, as uniform variables, as temporary variables, and as function parameters." Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> --- src/compiler/glsl/ast_to_hir.cpp | 67 +++++++++++++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 12 deletions(-) diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp index c9772ff83e..85015e140e 100644 --- a/src/compiler/glsl/ast_to_hir.cpp +++ b/src/compiler/glsl/ast_to_hir.cpp @@ -3312,11 +3312,26 @@ apply_image_qualifier_to_variable(const struct ast_type_qualifier *qual, return; } - if (var->data.mode != ir_var_uniform && - var->data.mode != ir_var_function_in) { - _mesa_glsl_error(loc, state, "image variables may only be declared as " - "function parameters or uniform-qualified " - "global variables"); + if (state->has_bindless()) { + if (var->data.mode != ir_var_auto && + var->data.mode != ir_var_uniform && + var->data.mode != ir_var_shader_in && + var->data.mode != ir_var_shader_out && + var->data.mode != ir_var_function_in && + var->data.mode != ir_var_function_out && + var->data.mode != ir_var_function_inout) { + _mesa_glsl_error(loc, state, "bindless image variables may only be " + "declared as shader inputs and outputs, as uniform " + "variables, as temporary variables and as function " + "parameters"); + } + } else { + if (var->data.mode != ir_var_uniform && + var->data.mode != ir_var_function_in) { + _mesa_glsl_error(loc, state, "image variables may only be declared as " + "function parameters or uniform-qualified " + "global variables"); + } } var->data.image_read_only |= qual->flags.q.read_only; @@ -3656,11 +3671,26 @@ apply_layout_qualifier_to_variable(const struct ast_type_qualifier *qual, } if (var->type->contains_sampler()) { - if (var->data.mode != ir_var_uniform && - var->data.mode != ir_var_function_in) { - _mesa_glsl_error(loc, state, "sampler variables may only be declared " - "as function parameters or uniform-qualified " - "global variables"); + if (state->has_bindless()) { + if (var->data.mode != ir_var_auto && + var->data.mode != ir_var_uniform && + var->data.mode != ir_var_shader_in && + var->data.mode != ir_var_shader_out && + var->data.mode != ir_var_function_in && + var->data.mode != ir_var_function_out && + var->data.mode != ir_var_function_inout) { + _mesa_glsl_error(loc, state, "bindless sampler variables may only " + "be declared as shader inputs and outputs, as " + "uniform variables, as temporary variables and as " + "function parameters"); + } + } else { + if (var->data.mode != ir_var_uniform && + var->data.mode != ir_var_function_in) { + _mesa_glsl_error(loc, state, "sampler variables may only be " + "declared as function parameters or " + "uniform-qualified global variables"); + } } } @@ -5268,9 +5298,22 @@ ast_declarator_list::hir(exec_list *instructions, * * "[Opaque types] can only be declared as function * parameters or uniform-qualified variables." + * + * The ARB_bindless_texture spec says: + * + * "Replace Section 4.1.7 (Samplers), p. 25" + * + * "Samplers may be declared as shader inputs and outputs, as uniform + * variables, as temporary variables, and as function parameters." + * + * "Replace Section 4.1.X, (Images)" + * + * "Images may be declared as shader inputs and outputs, as uniform + * variables, as temporary variables, and as function parameters." */ - if (var_type->contains_opaque() && - !this->type->qualifier.flags.q.uniform) { + if (!this->type->qualifier.flags.q.uniform && + (var_type->contains_atomic() || + (!state->has_bindless() && var_type->contains_opaque()))) { _mesa_glsl_error(&loc, state, "opaque variables must be declared uniform"); } -- 2.12.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev