[Mesa-dev] [PATCH] glsl: use bitwise operators in varying_matches::compute_packing_class()
Brian Paul
brianp at vmware.com
Thu Dec 21 01:08:06 UTC 2017
Ping, anyone?
-Brian
On 12/18/2017 09:30 PM, Brian Paul wrote:
> 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.
> ---
> src/compiler/glsl/link_varyings.cpp | 15 ++++++++++-----
> 1 file changed, 10 insertions(+), 5 deletions(-)
>
> diff --git a/src/compiler/glsl/link_varyings.cpp b/src/compiler/glsl/link_varyings.cpp
> index 7821b1e..5d39889 100644
> --- a/src/compiler/glsl/link_varyings.cpp
> +++ b/src/compiler/glsl/link_varyings.cpp
> @@ -1982,12 +1982,17 @@ varying_matches::compute_packing_class(const ir_variable *var)
> *
> * Therefore, the packing class depends only on the interpolation type.
> */
> - unsigned packing_class = var->data.centroid | (var->data.sample << 1) |
> - (var->data.patch << 2) |
> - (var->data.must_be_shader_input << 3);
> - packing_class *= 8;
> - packing_class += var->is_interpolation_flat()
> + const unsigned interp = var->is_interpolation_flat()
> ? 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;
> }
>
>
More information about the mesa-dev
mailing list