Module: wine Branch: master Commit: fcd51de66b06fad6f74a0abfaab985bf7b92e4cb URL: https://source.winehq.org/git/wine.git/?a=commit;h=fcd51de66b06fad6f74a0abfa...
Author: Matteo Bruni mbruni@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@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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]); } }