Matteo Bruni : wined3d: Optimize scanning changed transform states in wined3d_device_apply_stateblock().
Alexandre Julliard
julliard at winehq.org
Thu Feb 27 17:15:10 CST 2020
Module: wine
Branch: master
Commit: fd816f263ea246a963b9bf7aae86a096764b98d1
URL: https://source.winehq.org/git/wine.git/?a=commit;h=fd816f263ea246a963b9bf7aae86a096764b98d1
Author: Matteo Bruni <mbruni at codeweavers.com>
Date: Thu Feb 27 13:31:12 2020 +0100
wined3d: Optimize scanning changed transform 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 | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index fa675f5729..64cc80780d 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -3837,10 +3837,11 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device,
{
const struct wined3d_stateblock_state *state = &stateblock->stateblock_state;
const struct wined3d_saved_states *changed = &stateblock->changed;
+ const unsigned int word_bit_count = sizeof(DWORD) * CHAR_BIT;
struct wined3d_blend_state *blend_state;
+ unsigned int i, j, start, idx;
struct wined3d_color colour;
struct wined3d_range range;
- unsigned int i, j, start;
BOOL set_blend_state;
DWORD map;
@@ -3968,10 +3969,15 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device,
}
}
- for (i = 0; i < ARRAY_SIZE(state->transforms); ++i)
+ for (i = 0; i < ARRAY_SIZE(changed->transform); ++i)
{
- if (wined3d_bitmap_is_set(changed->transform, i))
- wined3d_device_set_transform(device, i, &state->transforms[i]);
+ map = changed->transform[i];
+ while (map)
+ {
+ j = wined3d_bit_scan(&map);
+ idx = i * word_bit_count + j;
+ wined3d_device_set_transform(device, idx, &state->transforms[idx]);
+ }
}
if (changed->indices)
More information about the wine-cvs
mailing list