glsl: introduce data section to ir_variable

Data section helps serialization and cloning of a ir_variable. This
patch includes the helper bits used for read only ir_variables.

Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
This commit is contained in:
Tapani Pälli
2013-12-12 12:57:57 +02:00
parent cbe7431cdb
commit c1d3080ee8
18 changed files with 83 additions and 75 deletions

View File

@@ -93,39 +93,39 @@ cross_validate_types_and_qualifiers(struct gl_shader_program *prog,
/* Check that all of the qualifiers match between stages.
*/
if (input->centroid != output->centroid) {
if (input->data.centroid != output->data.centroid) {
linker_error(prog,
"%s shader output `%s' %s centroid qualifier, "
"but %s shader input %s centroid qualifier\n",
_mesa_glsl_shader_target_name(producer_type),
output->name,
(output->centroid) ? "has" : "lacks",
(output->data.centroid) ? "has" : "lacks",
_mesa_glsl_shader_target_name(consumer_type),
(input->centroid) ? "has" : "lacks");
(input->data.centroid) ? "has" : "lacks");
return;
}
if (input->sample != output->sample) {
if (input->data.sample != output->data.sample) {
linker_error(prog,
"%s shader output `%s' %s sample qualifier, "
"but %s shader input %s sample qualifier\n",
_mesa_glsl_shader_target_name(producer_type),
output->name,
(output->sample) ? "has" : "lacks",
(output->data.sample) ? "has" : "lacks",
_mesa_glsl_shader_target_name(consumer_type),
(input->sample) ? "has" : "lacks");
(input->data.sample) ? "has" : "lacks");
return;
}
if (input->invariant != output->invariant) {
if (input->data.invariant != output->data.invariant) {
linker_error(prog,
"%s shader output `%s' %s invariant qualifier, "
"but %s shader input %s invariant qualifier\n",
_mesa_glsl_shader_target_name(producer_type),
output->name,
(output->invariant) ? "has" : "lacks",
(output->data.invariant) ? "has" : "lacks",
_mesa_glsl_shader_target_name(consumer_type),
(input->invariant) ? "has" : "lacks");
(input->data.invariant) ? "has" : "lacks");
return;
}
@@ -764,13 +764,13 @@ varying_matches::record(ir_variable *producer_var, ir_variable *consumer_var)
* regardless of where they appear. We can trivially satisfy that
* requirement by changing the interpolation type to flat here.
*/
producer_var->centroid = false;
producer_var->sample = false;
producer_var->data.centroid = false;
producer_var->data.sample = false;
producer_var->interpolation = INTERP_QUALIFIER_FLAT;
if (consumer_var) {
consumer_var->centroid = false;
consumer_var->sample = false;
consumer_var->data.centroid = false;
consumer_var->data.sample = false;
consumer_var->interpolation = INTERP_QUALIFIER_FLAT;
}
}
@@ -887,7 +887,7 @@ varying_matches::compute_packing_class(ir_variable *var)
*
* Therefore, the packing class depends only on the interpolation type.
*/
unsigned packing_class = var->centroid | (var->sample << 1);
unsigned packing_class = var->data.centroid | (var->data.sample << 1);
packing_class *= 4;
packing_class += var->interpolation;
return packing_class;