[PATCH] d3dx9/effect: Reset output handle for next after last technique in FindNextValidTechnique().

Matteo Bruni matteo.mystral at gmail.com
Tue Aug 17 09:50:17 CDT 2021


On Thu, Aug 12, 2021 at 4:58 PM Nikolay Sivov <nsivov at codeweavers.com> wrote:
>
> Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
> ---
>  dlls/d3dx9_36/effect.c       | 2 +-
>  dlls/d3dx9_36/tests/effect.c | 9 ++++-----
>  2 files changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c
> index 710e999f27f..22afa649db3 100644
> --- a/dlls/d3dx9_36/effect.c
> +++ b/dlls/d3dx9_36/effect.c
> @@ -3816,7 +3816,7 @@ static HRESULT WINAPI d3dx_effect_FindNextValidTechnique(ID3DXEffect *iface, D3D
>          }
>      }
>
> -    *next_technique = get_technique_handle(&effect->techniques[0]);
> +    *next_technique = NULL;
>      return S_FALSE;
>  }
>
> diff --git a/dlls/d3dx9_36/tests/effect.c b/dlls/d3dx9_36/tests/effect.c
> index ae6f65d52d5..48119ef2736 100644
> --- a/dlls/d3dx9_36/tests/effect.c
> +++ b/dlls/d3dx9_36/tests/effect.c
> @@ -7892,9 +7892,9 @@ static void test_effect_find_next_valid_technique(void)
>      D3DPRESENT_PARAMETERS present_parameters = {0};
>      IDirect3DDevice9 *device;
>      D3DXTECHNIQUE_DESC desc;
> +    D3DXHANDLE tech, tech2;
>      ID3DXEffect *effect;
>      IDirect3D9 *d3d;
> -    D3DXHANDLE tech;
>      ULONG refcount;
>      HWND window;
>      HRESULT hr;
> @@ -7939,11 +7939,10 @@ static void test_effect_find_next_valid_technique(void)
>      ok(hr == D3D_OK, "Got result %#x.\n", hr);
>      ok(!strcmp(desc.Name, "tech1"), "Got unexpected technique %s.\n", desc.Name);
>
> -    hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech);
> +    tech2 = tech;
> +    hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech2);
>      ok(hr == S_FALSE, "Got result %#x.\n", hr);
> -    hr = effect->lpVtbl->GetTechniqueDesc(effect, tech, &desc);
> -    ok(hr == D3D_OK, "Got result %#x.\n", hr);
> -    ok(!strcmp(desc.Name, "tech0"), "Got unexpected technique %s.\n", desc.Name);
> +    ok(!tech2, "Unexpected tech handle %p\n", tech2);
>
>      effect->lpVtbl->Release(effect);

Something not obvious by just looking at the patch: how did this test
pass on Windows previously? It turns out GetTechniqueDesc(effect,
NULL, &desc); returns the descriptor of the first technique in the
effect. In fact our implementation already does that.
I don't see other tests of this particular GetTechniqueDesc() behavior
right now, so I think I'm going to resend this patch with those lines
reinstated and a comment to clarify what's happening.



More information about the wine-devel mailing list