glsl: Propagate UBO binding qualifier into UBO member variables.

Without an instance name, there is no ir_variable representing the
actual uniform block declaration.  When the linker goes to set uniform
initializers, it only sees the members as ir_variables; never the block.

So, unfortunately, the members need to know about the binding.

There has to be a better way to do this.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
This commit is contained in:
Kenneth Graunke 2013-07-17 18:06:57 -07:00
parent 34e2ccc9f0
commit f25d94084c
1 changed files with 7 additions and 0 deletions

View File

@ -4387,6 +4387,13 @@ ast_interface_block::hir(exec_list *instructions,
var_mode);
var->interface_type = block_type;
/* Propagate the "binding" keyword into this UBO's fields;
* the UBO declaration itself doesn't get an ir_variable unless it
* has an instance name. This is ugly.
*/
var->explicit_binding = this->layout.flags.q.explicit_binding;
var->binding = this->layout.binding;
state->symbols->add_variable(var);
instructions->push_tail(var);
}