diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c index 864c3902fde..3a6803c181b 100644 --- a/dlls/d3dx9_36/effect.c +++ b/dlls/d3dx9_36/effect.c @@ -4071,10 +4071,14 @@ static HRESULT WINAPI ID3DXEffectImpl_BeginPass(ID3DXEffect *iface, UINT pass) if (technique && pass < technique->pass_count && !effect->active_pass) { - effect->active_pass = &technique->passes[pass]; + HRESULT hr; + memset(effect->current_light, 0, sizeof(effect->current_light)); memset(&effect->current_material, 0, sizeof(effect->current_material)); - return d3dx9_apply_pass_states(effect, effect->active_pass, TRUE); + + if (SUCCEEDED(hr = d3dx9_apply_pass_states(effect, &technique->passes[pass], TRUE))) + effect->active_pass = &technique->passes[pass]; + return hr; } WARN("Invalid argument supplied.\n"); diff --git a/dlls/d3dx9_36/tests/effect.c b/dlls/d3dx9_36/tests/effect.c index f3bc9e3c36a..c0ff4bde502 100644 --- a/dlls/d3dx9_36/tests/effect.c +++ b/dlls/d3dx9_36/tests/effect.c @@ -6019,6 +6019,7 @@ static void test_effect_shared_parameters(IDirect3DDevice9 *device) "Unexpected vector %g, %g, %g, %g.\n", fvect.x, fvect.y, fvect.z, fvect.w); hr = effect3->lpVtbl->EndPass(effect3); + todo_wine ok(hr == D3D_OK, "Got result %#x.\n", hr); hr = effect3->lpVtbl->End(effect3);