[Mesa-dev] [PATCH 22/29] i965: Use bitmask/ffs to iterate enabled clip planes.

Mathias.Froehlich at gmx.net Mathias.Froehlich at gmx.net
Tue Jun 14 05:00:08 UTC 2016


From: Mathias Fröhlich <mathias.froehlich at web.de>

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 <brianp at vmware.com>
Signed-off-by: Mathias Fröhlich <Mathias.Froehlich at web.de>
---
 src/mesa/drivers/dri/i965/brw_curbe.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_curbe.c b/src/mesa/drivers/dri/i965/brw_curbe.c
index dfb90b1..02c4e38 100644
--- a/src/mesa/drivers/dri/i965/brw_curbe.c
+++ b/src/mesa/drivers/dri/i965/brw_curbe.c
@@ -56,6 +56,7 @@
 #include "program/prog_parameter.h"
 #include "program/prog_print.h"
 #include "program/prog_statevars.h"
+#include "util/bitscan.h"
 #include "intel_batchbuffer.h"
 #include "intel_buffer_objects.h"
 #include "brw_context.h"
@@ -84,7 +85,7 @@ static void calculate_curbe_offsets( struct brw_context *brw )
 
    /* _NEW_TRANSFORM */
    if (ctx->Transform.ClipPlanesEnabled) {
-      GLuint nr_planes = 6 + _mesa_bitcount_64(ctx->Transform.ClipPlanesEnabled);
+      GLuint nr_planes = 6 + _mesa_bitcount(ctx->Transform.ClipPlanesEnabled);
       nr_clip_regs = (nr_planes * 4 + 15) / 16;
    }
 
@@ -226,7 +227,7 @@ brw_upload_constant_buffer(struct brw_context *brw)
    /* clipper constants */
    if (brw->curbe.clip_size) {
       GLuint offset = brw->curbe.clip_start * 16;
-      GLuint j;
+      GLbitfield mask;
 
       /* If any planes are going this way, send them all this way:
        */
@@ -241,14 +242,14 @@ brw_upload_constant_buffer(struct brw_context *brw)
        * clip-space:
        */
       clip_planes = brw_select_clip_planes(ctx);
-      for (j = 0; j < MAX_CLIP_PLANES; j++) {
-	 if (ctx->Transform.ClipPlanesEnabled & (1<<j)) {
-	    buf[offset + i * 4 + 0].f = clip_planes[j][0];
-	    buf[offset + i * 4 + 1].f = clip_planes[j][1];
-	    buf[offset + i * 4 + 2].f = clip_planes[j][2];
-	    buf[offset + i * 4 + 3].f = clip_planes[j][3];
-	    i++;
-	 }
+      mask = ctx->Transform.ClipPlanesEnabled;
+      while (mask) {
+         const int j = u_bit_scan(&mask);
+         buf[offset + i * 4 + 0].f = clip_planes[j][0];
+         buf[offset + i * 4 + 1].f = clip_planes[j][1];
+         buf[offset + i * 4 + 2].f = clip_planes[j][2];
+         buf[offset + i * 4 + 3].f = clip_planes[j][3];
+         i++;
       }
    }
 
-- 
2.5.5



More information about the mesa-dev mailing list