Module: wine Branch: master Commit: ad5f230afc1535bb59d857f25c688949e64ca15f URL: https://source.winehq.org/git/wine.git/?a=commit;h=ad5f230afc1535bb59d857f25...
Author: Matteo Bruni mbruni@codeweavers.com Date: Fri Feb 28 11:25:03 2020 +0100
wined3d: Optimize scanning changed clip planes 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 | 7 ++++--- dlls/wined3d/wined3d_private.h | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 6474b02ccc..660ba777ef 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -4022,10 +4022,11 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device, wined3d_device_set_texture(device, stage, state->textures[i]); }
- for (i = 0; i < ARRAY_SIZE(state->clip_planes); ++i) + map = changed->clipplane; + while (map) { - if (changed->clipplane & (1u << i)) - wined3d_device_set_clip_plane(device, i, &state->clip_planes[i]); + i = wined3d_bit_scan(&map); + wined3d_device_set_clip_plane(device, i, &state->clip_planes[i]); }
memset(&stateblock->changed, 0, sizeof(stateblock->changed)); diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 15e376c832..744e647008 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -3926,7 +3926,7 @@ struct wined3d_saved_states DWORD renderState[(WINEHIGHEST_RENDER_STATE >> 5) + 1]; DWORD textureState[WINED3D_MAX_TEXTURES]; /* WINED3D_HIGHEST_TEXTURE_STATE + 1, 18 */ WORD samplerState[WINED3D_MAX_COMBINED_SAMPLERS]; /* WINED3D_HIGHEST_SAMPLER_STATE + 1, 14 */ - DWORD clipplane; /* WINED3D_MAX_USER_CLIP_PLANES, 32 */ + DWORD clipplane; /* WINED3D_MAX_CLIP_DISTANCES, 8 */ DWORD textures : 20; /* WINED3D_MAX_COMBINED_SAMPLERS, 20 */ DWORD indices : 1; DWORD material : 1;