diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c
index 864c3902fde5e68b65efcb7ffab6b7c8d78c5b26..3a6803c181b4cec9f1821a5503049fc2851f90d3 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 f3bc9e3c36ae4b1ed048d2e13a84365bc1942d3d..c0ff4bde502d96e1ce0baff19c6e25448fe45b60 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);