glsl: Add new uniform_field_visitor::process variant
This flavor takes a type and a base name. It will be used to handle cases where the block name (instead of the instance name) is used for an interface block. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Carl Worth <cworth@cworth.org> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
007de494d2
commit
99b8935ce2
|
@ -57,6 +57,19 @@ values_for_type(const glsl_type *type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
uniform_field_visitor::process(const glsl_type *type, const char *name)
|
||||||
|
{
|
||||||
|
assert(type->is_record()
|
||||||
|
|| (type->is_array() && type->fields.array->is_record())
|
||||||
|
|| type->is_interface()
|
||||||
|
|| (type->is_array() && type->fields.array->is_interface()));
|
||||||
|
|
||||||
|
char *name_copy = ralloc_strdup(NULL, name);
|
||||||
|
recursion(type, &name_copy, strlen(name), false);
|
||||||
|
ralloc_free(name_copy);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
uniform_field_visitor::process(ir_variable *var)
|
uniform_field_visitor::process(ir_variable *var)
|
||||||
{
|
{
|
||||||
|
@ -161,6 +174,15 @@ public:
|
||||||
this->num_shader_uniform_components = 0;
|
this->num_shader_uniform_components = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void process(ir_variable *var)
|
||||||
|
{
|
||||||
|
if (var->is_interface_instance())
|
||||||
|
uniform_field_visitor::process(var->interface_type,
|
||||||
|
var->interface_type->name);
|
||||||
|
else
|
||||||
|
uniform_field_visitor::process(var);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Total number of active uniforms counted
|
* Total number of active uniforms counted
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -84,6 +84,23 @@ public:
|
||||||
*/
|
*/
|
||||||
void process(ir_variable *var);
|
void process(ir_variable *var);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Begin processing a uniform of a structured type.
|
||||||
|
*
|
||||||
|
* This flavor of \c process should be used to handle structured types
|
||||||
|
* (i.e., structures, interfaces, or arrays there of) that need special
|
||||||
|
* name handling. A common usage is to handle cases where the block name
|
||||||
|
* (instead of the instance name) is used for an interface block.
|
||||||
|
*
|
||||||
|
* \param type Type that is to be processed, associated with \c name
|
||||||
|
* \param name Base name of the structured uniform being processed
|
||||||
|
*
|
||||||
|
* \note
|
||||||
|
* \c type must be \c GLSL_TYPE_RECORD, \c GLSL_TYPE_INTERFACE, or an array
|
||||||
|
* there of.
|
||||||
|
*/
|
||||||
|
void process(const glsl_type *type, const char *name);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
* Method invoked for each leaf of the uniform
|
* Method invoked for each leaf of the uniform
|
||||||
|
|
Loading…
Reference in New Issue