On 04/12/2017 02:13 AM, Timothy Arceri wrote:
On 12/04/17 02:48, Samuel Pitoiset wrote:
The ARB_bindless_texture spec says:
"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 | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/src/compiler/glsl/ast_to_hir.cpp
b/src/compiler/glsl/ast_to_hir.cpp
index 4a0f3fe315..f52ba8181a 100644
--- a/src/compiler/glsl/ast_to_hir.cpp
+++ b/src/compiler/glsl/ast_to_hir.cpp
@@ -3383,12 +3383,27 @@ apply_image_qualifier_to_variable(const struct
ast_type_qualifier *qual,
{
const glsl_type *base_type = var->type->without_array();
- if (base_type->is_image()) {
- 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 (base_type->is_image() || base_type->is_bindless_image()) {
+ if (base_type->is_bindless_image()) {
+ 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");
+ }
}
There doesn't see to be any reason to combine these like this. Why not
just:
if (base_type->is_image()) {
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");
} else if (base_type->is_bindless_image()) {
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");
}
}
Yes, this can probably be improved in some ways. Will do.
var->data.image_read_only |= qual->flags.q.read_only;
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev