From 4b97c581b4f85e1712c7900cb099c9d56babb05d Mon Sep 17 00:00:00 2001 From: Paul Berry Date: Mon, 21 Oct 2013 20:27:23 -0700 Subject: [PATCH] glsl: mark variables produced by lower_named_interface_blocks. These variables will need to be treated specially by program_resource_visitor, so that they can be addressed through the API using their interface block name (and array index, for interface block arrays). Reviewed-by: Kenneth Graunke Reviewed-by: Ian Romanick Reviewed-by: Matt Turner --- src/glsl/ir.h | 18 ++++++++++++++++++ src/glsl/lower_named_interface_blocks.cpp | 2 ++ 2 files changed, 20 insertions(+) diff --git a/src/glsl/ir.h b/src/glsl/ir.h index c4c00552ac3..8d5bec9c1ef 100644 --- a/src/glsl/ir.h +++ b/src/glsl/ir.h @@ -580,6 +580,24 @@ public: */ unsigned location_frac:2; + /** + * Non-zero if this variable was created by lowering a named interface + * block which was not an array. + * + * Note that this variable and \c from_named_ifc_block_array will never + * both be non-zero. + */ + unsigned from_named_ifc_block_nonarray:1; + + /** + * Non-zero if this variable was created by lowering a named interface + * block which was an array. + * + * Note that this variable and \c from_named_ifc_block_nonarray will never + * both be non-zero. + */ + unsigned from_named_ifc_block_array:1; + /** * \brief Layout qualifier for gl_FragDepth. * diff --git a/src/glsl/lower_named_interface_blocks.cpp b/src/glsl/lower_named_interface_blocks.cpp index 87ed60b971e..d59d11150e0 100644 --- a/src/glsl/lower_named_interface_blocks.cpp +++ b/src/glsl/lower_named_interface_blocks.cpp @@ -140,6 +140,7 @@ flatten_named_interface_blocks_declarations::run(exec_list *instructions) new(mem_ctx) ir_variable(iface_t->fields.structure[i].type, var_name, (ir_variable_mode) var->mode); + new_var->from_named_ifc_block_nonarray = 1; } else { const glsl_type *new_array_type = glsl_type::get_array_instance( @@ -149,6 +150,7 @@ flatten_named_interface_blocks_declarations::run(exec_list *instructions) new(mem_ctx) ir_variable(new_array_type, var_name, (ir_variable_mode) var->mode); + new_var->from_named_ifc_block_array = 1; } new_var->location = iface_t->fields.structure[i].location; new_var->explicit_location = (new_var->location >= 0); -- 2.30.2