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

Nicolai Hähnle nhaehnle at gmail.com
Wed May 10 07:29:19 UTC 2017


On 10.05.2017 03:01, Timothy Arceri wrote:
> 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?

Curious about that as well, but regardless of the measurement I think it 
makes the code cleaner, so I'm in favor.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>

>
> 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);
>>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


-- 
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.


More information about the mesa-dev mailing list