glsl: use bitwise operators in varying_matches::compute_packing_class()

The mix of bitwise operators with * and + to compute the packing_class
values was a little weird.  Just use bitwise ops instead.

v2: add assertion to make sure interpolation bits fit without collision,
per Timothy.  Basically, rewrite function to be simpler.

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
Brian Paul
2017-12-15 14:30:26 -07:00
parent cd7705de44
commit 76fc24ba8d

View File

@@ -1982,12 +1982,17 @@ varying_matches::compute_packing_class(const ir_variable *var)
* *
* Therefore, the packing class depends only on the interpolation type. * Therefore, the packing class depends only on the interpolation type.
*/ */
unsigned packing_class = var->data.centroid | (var->data.sample << 1) | const unsigned interp = var->is_interpolation_flat()
(var->data.patch << 2) |
(var->data.must_be_shader_input << 3);
packing_class *= 8;
packing_class += var->is_interpolation_flat()
? unsigned(INTERP_MODE_FLAT) : var->data.interpolation; ? unsigned(INTERP_MODE_FLAT) : var->data.interpolation;
assert(interp < (1 << 3));
const unsigned packing_class = (interp << 0) |
(var->data.centroid << 3) |
(var->data.sample << 4) |
(var->data.patch << 5) |
(var->data.must_be_shader_input << 6);
return packing_class; return packing_class;
} }