etnaviv: a bit of micro-optimization
authorChristian Gmeiner <christian.gmeiner@gmail.com>
Fri, 13 Sep 2019 06:56:11 +0000 (08:56 +0200)
committerChristian Gmeiner <christian.gmeiner@gmail.com>
Tue, 17 Sep 2019 05:50:37 +0000 (05:50 +0000)
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Reviewed-by: Jonathan Marek <jonathan@marek.ca>
src/gallium/drivers/etnaviv/etnaviv_context.c
src/gallium/drivers/etnaviv/etnaviv_util.h

index 6919d13674766e6547fbd53224229e3a6e384a30..b3ced5ea2460f8566f7fcb69d01dc878cf1bcea5 100644 (file)
@@ -251,7 +251,7 @@ etna_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
    resource_read(ctx, ctx->constant_buffer[PIPE_SHADER_FRAGMENT].buffer);
 
    /* Mark VBOs as being read */
-   for (i = 0; i < ctx->vertex_buffer.count; i++) {
+   foreach_bit(i, ctx->vertex_buffer.enabled_mask) {
       assert(!ctx->vertex_buffer.vb[i].is_user_buffer);
       resource_read(ctx, ctx->vertex_buffer.vb[i].buffer.resource);
    }
index 62f62548d2cf016b1a669ba104c866d421efbe8f..75b72adb5cc37d7d3b0ec85504be47b4f6be8b89 100644 (file)
@@ -30,6 +30,9 @@
 /* for conditionally setting boolean flag(s): */
 #define COND(bool, val) ((bool) ? (val) : 0)
 
+#define foreach_bit(b, mask) \
+   for (uint32_t _m = (mask); _m && ({(b) = u_bit_scan(&_m); 1;});)
+
 /* align to a value divisable by granularity >= value, works only for powers of two */
 static inline uint32_t
 etna_align_up(uint32_t value, uint32_t granularity)