[PATCH 3/6] d3dx9: Match native out of bounds array selector index handling.

Matteo Bruni matteo.mystral at gmail.com
Mon May 15 13:21:05 CDT 2017


2017-05-12 14:24 GMT+02:00 Paul Gofman <gofmanp at gmail.com>:

> diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c
> index 9c07f9c..21aa5d7 100644
> --- a/dlls/d3dx9_36/effect.c
> +++ b/dlls/d3dx9_36/effect.c
> @@ -1051,7 +1051,9 @@ static HRESULT d3dx9_get_param_value_ptr(struct d3dx_pass *pass, struct d3dx_sta
>                  FIXME("Preshader structure is null.\n");
>                  return D3DERR_INVALIDCALL;
>              }
> -            if (update_all || is_param_eval_input_dirty(param->param_eval))
> +            /* According to the tests, native d3dx handles the case of array index evaluated to -1
> +             * in a specific way. */
> +            if (state->index == 0xffffffffu || is_param_eval_input_dirty(param->param_eval, pass->update_version))

Hmm, so that's the index value set at initialization, thus getting a
-1 in the first evaluation ends up breaking the "selector changed"
check in native? You might want to spell that out in some form in the
comment.

AFAIU there is no other way a -1 is stored in state->index, correct?



More information about the wine-devel mailing list