[PATCH 1/5] wined3d: Introduce wined3d_device_apply_stateblock().
Matteo Bruni
matteo.mystral at gmail.com
Tue Dec 10 02:39:34 CST 2019
On Sat, Dec 7, 2019 at 5:11 PM Zebediah Figura <z.figura12 at gmail.com> wrote:
>
> Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
> ---
> dlls/wined3d/device.c | 93 +++++++++++++++++++++++++++++++++++++++
> dlls/wined3d/wined3d.spec | 1 +
> include/wine/wined3d.h | 1 +
> 3 files changed, 95 insertions(+)
>
> diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
> index 0ae841d4e35..50029dfbec2 100644
> --- a/dlls/wined3d/device.c
> +++ b/dlls/wined3d/device.c
> @@ -3829,6 +3829,99 @@ struct wined3d_texture * CDECL wined3d_device_get_texture(const struct wined3d_d
> return device->state.textures[stage];
> }
>
> +void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device,
> + struct wined3d_stateblock *stateblock)
> +{
> + const struct wined3d_d3d_info *d3d_info = &stateblock->device->adapter->d3d_info;
> + const struct wined3d_stateblock_state *state = &stateblock->stateblock_state;
> + unsigned int i, j;
> +
> + TRACE("device %p, stateblock %p.\n", device, stateblock);
> +
> + wined3d_stateblock_init_contained_states(stateblock);
> +
> + wined3d_device_set_vertex_shader(device, state->vs);
> + wined3d_device_set_pixel_shader(device, state->ps);
Can we make use of the stateblock flags to only update the changed
states instead of all of them?
> + for (i = 0; i < d3d_info->limits.vs_uniform_count; ++i)
> + wined3d_device_set_vs_consts_f(device, i, 1, &state->vs_consts_f[i]);
Either only update the changed constants or set all of them in one go, IMO.
Somewhat related, I have a few patches optimizing / improving our
handling of those flags but I don't expect them to be ready before
code freeze (and I don't want to conflict with your patches,
especially now).
More information about the wine-devel
mailing list