[PATCH 3/3] d3dx9: Apply changed states only in CommitChanges.
Matteo Bruni
matteo.mystral at gmail.com
Mon Mar 13 16:47:12 CDT 2017
2017-03-09 23:15 GMT+01:00 Paul Gofman <gofmanp at gmail.com>:
> Signed-off-by: Paul Gofman <gofmanp at gmail.com>
> ---
> dlls/d3dx9_36/d3dx9_private.h | 8 ++-
> dlls/d3dx9_36/effect.c | 146 ++++++++++++++++++++++++++++--------------
> dlls/d3dx9_36/preshader.c | 40 ++++++++++--
> dlls/d3dx9_36/tests/effect.c | 13 ----
> 4 files changed, 137 insertions(+), 70 deletions(-)
>
> diff --git a/dlls/d3dx9_36/d3dx9_private.h b/dlls/d3dx9_36/d3dx9_private.h
> index 27b91a7..53cf99f 100644
> --- a/dlls/d3dx9_36/d3dx9_private.h
> +++ b/dlls/d3dx9_36/d3dx9_private.h
> @@ -222,6 +222,11 @@ struct d3dx_parameter
> DWORD *dirty_flag_ptr;
> };
>
> +static inline BOOL is_param_dirty(struct d3dx_parameter *param)
> +{
> + return (*param->dirty_flag_ptr & PARAMETER_FLAG_DIRTY);
> +}
> +
> struct d3dx9_base_effect;
>
> struct d3dx_parameter *get_parameter_by_name(struct d3dx9_base_effect *base,
> @@ -233,6 +238,7 @@ void d3dx_free_param_eval(struct d3dx_param_eval *peval) DECLSPEC_HIDDEN;
> HRESULT d3dx_evaluate_parameter(struct d3dx_param_eval *peval,
> const struct d3dx_parameter *param, void *param_value) DECLSPEC_HIDDEN;
> HRESULT d3dx_param_eval_set_shader_constants(struct IDirect3DDevice9 *device,
> - struct d3dx_param_eval *peval) DECLSPEC_HIDDEN;
> + struct d3dx_param_eval *peval, BOOL update_all) DECLSPEC_HIDDEN;
> +BOOL is_param_eval_input_dirty(struct d3dx_param_eval *peval) DECLSPEC_HIDDEN;
>
> #endif /* __WINE_D3DX9_PRIVATE_H */
> diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c
> index ada78f9..b18465c 100644
> --- a/dlls/d3dx9_36/effect.c
> +++ b/dlls/d3dx9_36/effect.c
> @@ -123,6 +123,9 @@ struct d3dx_pass
>
> struct d3dx_state *states;
> struct d3dx_parameter *annotations;
> +
> + D3DLIGHT9 current_light[8];
> + D3DMATERIAL9 current_material;
> };
I think these might be stored in the effect struct instead.
> +static void clear_dirty_all(struct d3dx9_base_effect *base)
clear_dirty_params() or something like that would be a clearer name.
> @@ -1570,8 +1587,12 @@ static HRESULT d3dx9_base_effect_set_int(struct d3dx9_base_effect *base, D3DXHAN
> {
> if (param->rows == 1 && param->columns == 1)
> {
> - set_number(param->data, param->type, &n, D3DXPT_INT);
> - set_dirty(param);
> + DWORD value;
> +
> + set_number(&value, param->type, &n, D3DXPT_INT);
> + if (value != *(DWORD *)param->data)
> + set_dirty(param);
> + *(DWORD *)param->data = value;
Shouldn't this go in the previous patch?
More information about the wine-devel
mailing list