Matteo Bruni : wined3d: Optimize scanning changed stream states in wined3d_device_apply_stateblock().

Alexandre Julliard julliard at winehq.org
Fri Feb 28 13:54:40 CST 2020


Module: wine
Branch: master
Commit: 02d3cfe0aee36f0228c44686cd34d564ee4f0f35
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=02d3cfe0aee36f0228c44686cd34d564ee4f0f35

Author: Matteo Bruni <mbruni at codeweavers.com>
Date:   Fri Feb 28 11:25:01 2020 +0100

wined3d: Optimize scanning changed stream states in wined3d_device_apply_stateblock().

Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wined3d/device.c | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 863b483bab..add20cc63e 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -3998,14 +3998,19 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device,
     if (changed->scissorRect)
         wined3d_device_set_scissor_rects(device, 1, &state->scissor_rect);
 
-    for (i = 0; i < ARRAY_SIZE(state->streams); ++i)
-    {
-        if (changed->streamSource & (1u << i))
-            wined3d_device_set_stream_source(device, i, state->streams[i].buffer,
-                    state->streams[i].offset, state->streams[i].stride);
-        if (changed->streamFreq & (1u << i))
-            wined3d_device_set_stream_source_freq(device, i,
-                    state->streams[i].frequency | state->streams[i].flags);
+    map = changed->streamSource;
+    while (map)
+    {
+        i = wined3d_bit_scan(&map);
+        wined3d_device_set_stream_source(device, i, state->streams[i].buffer,
+                state->streams[i].offset, state->streams[i].stride);
+    }
+    map = changed->streamFreq;
+    while (map)
+    {
+        i = wined3d_bit_scan(&map);
+        wined3d_device_set_stream_source_freq(device, i,
+                state->streams[i].frequency | state->streams[i].flags);
     }
 
     for (i = 0; i < ARRAY_SIZE(state->textures); ++i)




More information about the wine-cvs mailing list