[Mesa-dev] [PATCH] mesa: use u_bit_scan() in update_program_texture_state()

Timothy Arceri tarceri at itsqueeze.com
Wed May 10 01:01:42 UTC 2017


I made this same change a while back but found I couldn't really measure 
any performance increase in practice. I suspect it's because we already
limit the max loops with (1 << s) <= prog[i]->SamplersUsed and there is 
generally no big gaps in used samples.

Did you manage to measure any improvement here?

On 10/05/17 07:33, Samuel Pitoiset wrote:
> The check in update_single_program_texture() can also be
> removed.
> 
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>   src/mesa/main/texstate.c | 13 +++++--------
>   1 file changed, 5 insertions(+), 8 deletions(-)
> 
> diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
> index 830b230b5d..c11a2e95fe 100644
> --- a/src/mesa/main/texstate.c
> +++ b/src/mesa/main/texstate.c
> @@ -620,9 +620,6 @@ update_single_program_texture(struct gl_context *ctx, struct gl_program *prog,
>      struct gl_sampler_object *sampler;
>      int unit;
>   
> -   if (!(prog->SamplersUsed & (1 << s)))
> -      return NULL;
> -
>      unit = prog->SamplerUnits[s];
>      texUnit = &ctx->Texture.Unit[unit];
>   
> @@ -676,16 +673,16 @@ update_program_texture_state(struct gl_context *ctx, struct gl_program **prog,
>      int i;
>   
>      for (i = 0; i < MESA_SHADER_STAGES; i++) {
> +      GLbitfield mask;
>         int s;
>   
>         if (!prog[i])
>            continue;
>   
> -      /* We can't only do the shifting trick as the loop condition because if
> -       * sampler 31 is active, the next iteration tries to shift by 32, which is
> -       * undefined.
> -       */
> -      for (s = 0; s < MAX_SAMPLERS && (1 << s) <= prog[i]->SamplersUsed; s++) {
> +      mask = prog[i]->SamplersUsed;
> +
> +      while (mask) {
> +         const int s = u_bit_scan(&mask);
>            struct gl_texture_object *texObj;
>   
>            texObj = update_single_program_texture(ctx, prog[i], s);
> 


More information about the mesa-dev mailing list