[Mesa-dev] [PATCH 26/29] mesa: Use bitmask/ffs to iterate the enabled textures.

2016-06-13 Thread Mathias . Froehlich
From: Mathias Fröhlich 

Replaces an iterate and test bit in a bitmask loop by a
loop only iterating over the bits set in the bitmask.

v2: Use _mesa_bit_scan{,64} instead of open coding.
v3: Use u_bit_scan{,64} instead of _mesa_bit_scan{,64}.

Reviewed-by: Brian Paul 
Signed-off-by: Mathias Fröhlich 
---
 src/mesa/main/texstate.c | 31 ---
 1 file changed, 16 insertions(+), 15 deletions(-)

diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
index 3543369..94caf2a 100644
--- a/src/mesa/main/texstate.c
+++ b/src/mesa/main/texstate.c
@@ -38,6 +38,7 @@
 #include "teximage.h"
 #include "texstate.h"
 #include "mtypes.h"
+#include "util/bitscan.h"
 #include "util/bitset.h"
 
 
@@ -611,7 +612,7 @@ update_ff_texture_state(struct gl_context *ctx,
 
for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) {
   struct gl_texture_unit *texUnit = >Texture.Unit[unit];
-  GLuint texIndex;
+  GLbitfield mask;
   bool complete;
 
   if (texUnit->Enabled == 0x0)
@@ -651,20 +652,20 @@ update_ff_texture_state(struct gl_context *ctx,
*  undefined."
*/
   complete = false;
-  for (texIndex = 0; texIndex < NUM_TEXTURE_TARGETS; texIndex++) {
- if (texUnit->Enabled & (1 << texIndex)) {
-struct gl_texture_object *texObj = texUnit->CurrentTex[texIndex];
-struct gl_sampler_object *sampler = texUnit->Sampler ?
-   texUnit->Sampler : >Sampler;
-
-if (!_mesa_is_texture_complete(texObj, sampler)) {
-   _mesa_test_texobj_completeness(ctx, texObj);
-}
-if (_mesa_is_texture_complete(texObj, sampler)) {
-   _mesa_reference_texobj(>_Current, texObj);
-   complete = true;
-   break;
-}
+  mask = texUnit->Enabled;
+  while (mask) {
+ const int texIndex = u_bit_scan();
+ struct gl_texture_object *texObj = texUnit->CurrentTex[texIndex];
+ struct gl_sampler_object *sampler = texUnit->Sampler ?
+texUnit->Sampler : >Sampler;
+
+ if (!_mesa_is_texture_complete(texObj, sampler)) {
+_mesa_test_texobj_completeness(ctx, texObj);
+ }
+ if (_mesa_is_texture_complete(texObj, sampler)) {
+_mesa_reference_texobj(>_Current, texObj);
+complete = true;
+break;
  }
   }
 
-- 
2.5.5

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 26/29] mesa: Use bitmask/ffs to iterate the enabled textures.

2016-05-24 Thread Mathias . Froehlich
From: Mathias Fröhlich 

Replaces an iterate and test bit in a bitmask loop by a
loop only iterating over the bits set in the bitmask.

Signed-off-by: Mathias Fröhlich 
---
 src/mesa/main/texstate.c | 31 ---
 1 file changed, 16 insertions(+), 15 deletions(-)

diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
index 3543369..411073a 100644
--- a/src/mesa/main/texstate.c
+++ b/src/mesa/main/texstate.c
@@ -611,7 +611,7 @@ update_ff_texture_state(struct gl_context *ctx,
 
for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) {
   struct gl_texture_unit *texUnit = >Texture.Unit[unit];
-  GLuint texIndex;
+  GLbitfield mask;
   bool complete;
 
   if (texUnit->Enabled == 0x0)
@@ -651,20 +651,21 @@ update_ff_texture_state(struct gl_context *ctx,
*  undefined."
*/
   complete = false;
-  for (texIndex = 0; texIndex < NUM_TEXTURE_TARGETS; texIndex++) {
- if (texUnit->Enabled & (1 << texIndex)) {
-struct gl_texture_object *texObj = texUnit->CurrentTex[texIndex];
-struct gl_sampler_object *sampler = texUnit->Sampler ?
-   texUnit->Sampler : >Sampler;
-
-if (!_mesa_is_texture_complete(texObj, sampler)) {
-   _mesa_test_texobj_completeness(ctx, texObj);
-}
-if (_mesa_is_texture_complete(texObj, sampler)) {
-   _mesa_reference_texobj(>_Current, texObj);
-   complete = true;
-   break;
-}
+  mask = texUnit->Enabled;
+  while (mask) {
+ int texIndex = ffs(mask) - 1;
+ struct gl_texture_object *texObj = texUnit->CurrentTex[texIndex];
+ struct gl_sampler_object *sampler = texUnit->Sampler ?
+texUnit->Sampler : >Sampler;
+ mask ^= (1u << texIndex);
+
+ if (!_mesa_is_texture_complete(texObj, sampler)) {
+_mesa_test_texobj_completeness(ctx, texObj);
+ }
+ if (_mesa_is_texture_complete(texObj, sampler)) {
+_mesa_reference_texobj(>_Current, texObj);
+complete = true;
+break;
  }
   }
 
-- 
2.5.5

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev