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