Matteo Bruni : wined3d: Optimize scanning changed sampler 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: fcd51de66b06fad6f74a0abfaab985bf7b92e4cb
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=fcd51de66b06fad6f74a0abfaab985bf7b92e4cb

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

wined3d: Optimize scanning changed sampler 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 | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 9478c459e0..863b483bab 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -3961,15 +3961,17 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device,
         }
     }
 
-    for (i = 0; i < ARRAY_SIZE(state->sampler_states); ++i)
+    for (i = 0; i < ARRAY_SIZE(changed->samplerState); ++i)
     {
         DWORD stage = i;
+
         if (stage >= WINED3D_MAX_FRAGMENT_SAMPLERS)
             stage += WINED3DVERTEXTEXTURESAMPLER0 - WINED3D_MAX_FRAGMENT_SAMPLERS;
-        for (j = 0; j < ARRAY_SIZE(state->sampler_states[j]); ++j)
+        map = changed->samplerState[i];
+        while (map)
         {
-            if (changed->samplerState[i] & (1 << j))
-                wined3d_device_set_sampler_state(device, stage, j, state->sampler_states[i][j]);
+            j = wined3d_bit_scan(&map);
+            wined3d_device_set_sampler_state(device, stage, j, state->sampler_states[i][j]);
         }
     }
 




More information about the wine-cvs mailing list