From 95c83aba713ad89ff4d189cbdcbf725e2010af7e Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 21 Apr 2017 18:45:42 +0200 Subject: glsl: allow bindless samplers/images to be used with constructors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For the explicit conversions. From section 4.1.7 of the ARB_bindless_texture spec: "Samplers are represented using 64-bit integer handles, and may be converted to and from 64-bit integers using constructors." From section 4.1.X of the ARB_bindless_texture spec: "Images are represented using 64-bit integer handles, and may be converted to and from 64-bit integers using constructors." v3: - add spec comment - update the glsl error message Signed-off-by: Samuel Pitoiset Reviewed-by: Timothy Arceri (v2) Reviewed-by: Nicolai Hähnle --- src/compiler/glsl/ast_function.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'src/compiler') diff --git a/src/compiler/glsl/ast_function.cpp b/src/compiler/glsl/ast_function.cpp index d493d1bd01a..dd08ed84319 100644 --- a/src/compiler/glsl/ast_function.cpp +++ b/src/compiler/glsl/ast_function.cpp @@ -1968,9 +1968,21 @@ ast_function_expression::hir(exec_list *instructions, /* Constructors for opaque types are illegal. + * + * From section 4.1.7 of the ARB_bindless_texture spec: + * + * "Samplers are represented using 64-bit integer handles, and may be " + * converted to and from 64-bit integers using constructors." + * + * From section 4.1.X of the ARB_bindless_texture spec: + * + * "Images are represented using 64-bit integer handles, and may be + * converted to and from 64-bit integers using constructors." */ - if (constructor_type->contains_opaque()) { - _mesa_glsl_error(& loc, state, "cannot construct opaque type `%s'", + if (constructor_type->contains_atomic() || + (!state->has_bindless() && constructor_type->contains_opaque())) { + _mesa_glsl_error(& loc, state, "cannot construct %s type `%s'", + state->has_bindless() ? "atomic" : "opaque", constructor_type->name); return ir_rvalue::error_value(ctx); } -- cgit v1.2.3