[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