linker: Refactor code that builds hash tables of varyings during linking
I want to make some changes to this code, but first I want to make some unit tests for it... so that I can capture the pre- and post-invariants. Pulling the code out into its own function in a non-anonymous namespace enables that. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
ca21cffebd
commit
8f5852bd2b
|
@ -1036,6 +1036,34 @@ private:
|
|||
};
|
||||
|
||||
|
||||
namespace linker {
|
||||
|
||||
void
|
||||
populate_consumer_input_sets(void *mem_ctx, exec_list *ir,
|
||||
hash_table *consumer_inputs,
|
||||
hash_table *consumer_interface_inputs)
|
||||
{
|
||||
foreach_list(node, ir) {
|
||||
ir_variable *const input_var = ((ir_instruction *) node)->as_variable();
|
||||
|
||||
if ((input_var != NULL) && (input_var->data.mode == ir_var_shader_in)) {
|
||||
if (input_var->get_interface_type() != NULL) {
|
||||
char *const iface_field_name =
|
||||
ralloc_asprintf(mem_ctx, "%s.%s",
|
||||
input_var->get_interface_type()->name,
|
||||
input_var->name);
|
||||
hash_table_insert(consumer_interface_inputs, input_var,
|
||||
iface_field_name);
|
||||
} else {
|
||||
hash_table_insert(consumer_inputs, input_var,
|
||||
ralloc_strdup(mem_ctx, input_var->name));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign locations for all variables that are produced in one pipeline stage
|
||||
* (the "producer") and consumed in the next stage (the "consumer").
|
||||
|
@ -1088,26 +1116,11 @@ assign_varying_locations(struct gl_context *ctx,
|
|||
* not being inputs. This lets the optimizer eliminate them.
|
||||
*/
|
||||
|
||||
if (consumer) {
|
||||
foreach_list(node, consumer->ir) {
|
||||
ir_variable *const input_var =
|
||||
((ir_instruction *) node)->as_variable();
|
||||
|
||||
if ((input_var != NULL) && (input_var->data.mode == ir_var_shader_in)) {
|
||||
if (input_var->get_interface_type() != NULL) {
|
||||
char *const iface_field_name =
|
||||
ralloc_asprintf(mem_ctx, "%s.%s",
|
||||
input_var->get_interface_type()->name,
|
||||
input_var->name);
|
||||
hash_table_insert(consumer_interface_inputs, input_var,
|
||||
iface_field_name);
|
||||
} else {
|
||||
hash_table_insert(consumer_inputs, input_var,
|
||||
ralloc_strdup(mem_ctx, input_var->name));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (consumer)
|
||||
linker::populate_consumer_input_sets(mem_ctx,
|
||||
consumer->ir,
|
||||
consumer_inputs,
|
||||
consumer_interface_inputs);
|
||||
|
||||
foreach_list(node, producer->ir) {
|
||||
ir_variable *const output_var = ((ir_instruction *) node)->as_variable();
|
||||
|
|
Loading…
Reference in New Issue