mesa: use u_bit_scan() in update_program_texture_state()
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Tue, 9 May 2017 21:33:27 +0000 (23:33 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 10 May 2017 10:14:17 +0000 (12:14 +0200)
The check in update_single_program_texture() can also be
removed.

v2: - remove unused 's' variable

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/mesa/main/texstate.c

index 830b230b5d7ca944fb66e09da2ff1797e3b02930..1aac3cdbd8b394fa641e8ca7649f87a363094f56 100644 (file)
@@ -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,15 @@ update_program_texture_state(struct gl_context *ctx, struct gl_program **prog,
    int i;
 
    for (i = 0; i < MESA_SHADER_STAGES; i++) {
-      int s;
+      GLbitfield mask;
 
       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);