glsl: Make accessor functions for ir_variable::interface_type.
In a future patch, this will allow us to enforce invariants when the interface type is updated. Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
@@ -47,7 +47,7 @@ validate_intrastage_interface_blocks(struct gl_shader_program *prog,
|
||||
if (!var)
|
||||
continue;
|
||||
|
||||
const glsl_type *iface_type = var->interface_type;
|
||||
const glsl_type *iface_type = var->get_interface_type();
|
||||
|
||||
if (iface_type == NULL)
|
||||
continue;
|
||||
@@ -81,32 +81,33 @@ validate_interstage_interface_blocks(struct gl_shader_program *prog,
|
||||
/* Add non-output interfaces from the consumer to the symbol table. */
|
||||
foreach_list(node, consumer->ir) {
|
||||
ir_variable *var = ((ir_instruction *) node)->as_variable();
|
||||
if (!var || !var->interface_type || var->mode == ir_var_shader_out)
|
||||
if (!var || !var->get_interface_type() || var->mode == ir_var_shader_out)
|
||||
continue;
|
||||
|
||||
interfaces.add_interface(var->interface_type->name,
|
||||
var->interface_type,
|
||||
interfaces.add_interface(var->get_interface_type()->name,
|
||||
var->get_interface_type(),
|
||||
(enum ir_variable_mode) var->mode);
|
||||
}
|
||||
|
||||
/* Verify that the producer's interfaces match. */
|
||||
foreach_list(node, producer->ir) {
|
||||
ir_variable *var = ((ir_instruction *) node)->as_variable();
|
||||
if (!var || !var->interface_type || var->mode == ir_var_shader_in)
|
||||
if (!var || !var->get_interface_type() || var->mode == ir_var_shader_in)
|
||||
continue;
|
||||
|
||||
enum ir_variable_mode consumer_mode =
|
||||
var->mode == ir_var_uniform ? ir_var_uniform : ir_var_shader_in;
|
||||
const glsl_type *expected_type =
|
||||
interfaces.get_interface(var->interface_type->name, consumer_mode);
|
||||
interfaces.get_interface(var->get_interface_type()->name,
|
||||
consumer_mode);
|
||||
|
||||
/* The consumer doesn't use this output block. Ignore it. */
|
||||
if (expected_type == NULL)
|
||||
continue;
|
||||
|
||||
if (var->interface_type != expected_type) {
|
||||
if (var->get_interface_type() != expected_type) {
|
||||
linker_error(prog, "definitions of interface block `%s' do not "
|
||||
"match\n", var->interface_type->name);
|
||||
"match\n", var->get_interface_type()->name);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user