From 75cc83747e711a2b8f6584305d5e383ead4ad6a8 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 19 Apr 2017 16:40:38 +0200 Subject: [PATCH] glsl: allow bindless samplers/images as function return MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The ARB_bindless_texture spec doesn't clearly state this, but as it says "Replace Section 4.1.7 (Samplers), p. 25" and, "Replace Section 4.1.X, (Images)", this should be allowed. 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 | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp index bed07dcbcaa..1c18c7b9c04 100644 --- a/src/compiler/glsl/ast_to_hir.cpp +++ b/src/compiler/glsl/ast_to_hir.cpp @@ -5764,12 +5764,17 @@ ast_function::hir(exec_list *instructions, * * "[Opaque types] can only be declared as function parameters * or uniform-qualified variables." + * + * The ARB_bindless_texture spec doesn't clearly state this, but as it says + * "Replace Section 4.1.7 (Samplers), p. 25" and, "Replace Section 4.1.X, + * (Images)", this should be allowed. */ - if (return_type->contains_opaque()) { + if (return_type->contains_atomic() || + (!state->has_bindless() && return_type->contains_opaque())) { YYLTYPE loc = this->get_location(); _mesa_glsl_error(&loc, state, - "function `%s' return type can't contain an opaque type", - name); + "function `%s' return type can't contain an %s type", + name, state->has_bindless() ? "atomic" : "opaque"); } /**/ -- 2.30.2