Mesa (main): nine: replace unnecessary dynamic-sized array with bitfield

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Aug 24 20:49:08 UTC 2021


Module: Mesa
Branch: main
Commit: e645e3c523a93174d369ab9865f02793326ad17d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e645e3c523a93174d369ab9865f02793326ad17d

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Mon Aug 23 10:43:22 2021 -0400

nine: replace unnecessary dynamic-sized array with bitfield

PIPE_MAX_VERTEX_STREAMS is 4, so this can be simplified to reduce cpu usage

Reviewed-by: <Axel Davy davyaxel0 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12523>

---

 src/gallium/frontends/nine/nine_state.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/src/gallium/frontends/nine/nine_state.c b/src/gallium/frontends/nine/nine_state.c
index 721252e5e2a..2cc12ffd81e 100644
--- a/src/gallium/frontends/nine/nine_state.c
+++ b/src/gallium/frontends/nine/nine_state.c
@@ -841,14 +841,13 @@ update_vertex_elements(struct NineDevice9 *device)
     unsigned n, b, i;
     int index;
     char vdecl_index_map[16]; /* vs->num_inputs <= 16 */
-    char used_streams[device->caps.MaxStreams];
+    uint16_t used_streams = 0;
     int dummy_vbo_stream = -1;
     BOOL need_dummy_vbo = FALSE;
     struct cso_velems_state ve;
 
     context->stream_usage_mask = 0;
     memset(vdecl_index_map, -1, 16);
-    memset(used_streams, 0, device->caps.MaxStreams);
     vs = context->programmable_vs ? context->vs : device->ff.vs;
 
     if (vdecl) {
@@ -859,7 +858,7 @@ update_vertex_elements(struct NineDevice9 *device)
             for (i = 0; i < vdecl->nelems; i++) {
                 if (vdecl->usage_map[i] == vs->input_map[n].ndecl) {
                     vdecl_index_map[n] = i;
-                    used_streams[vdecl->elems[i].vertex_buffer_index] = 1;
+                    used_streams |= BITFIELD_BIT(vdecl->elems[i].vertex_buffer_index);
                     break;
                 }
             }
@@ -873,11 +872,9 @@ update_vertex_elements(struct NineDevice9 *device)
     }
 
     if (need_dummy_vbo) {
-        for (i = 0; i < device->caps.MaxStreams; i++ ) {
-            if (!used_streams[i]) {
-                dummy_vbo_stream = i;
+        u_foreach_bit(bit, BITFIELD_MASK(device->caps.MaxStreams) & ~used_streams) {
+                dummy_vbo_stream = bit;
                 break;
-            }
         }
     }
     /* there are less vertex shader inputs than stream slots,



More information about the mesa-commit mailing list