mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 05:42:57 +00:00
[WINESYNC] d3dx9_36: Improve stub for ID3DXEffectImpl_CloneEffect.
wine-staging patch by Sebastian Lackner <sebastian@fds-team.de>
This commit is contained in:
parent
7c02c861b1
commit
62f40620f1
3 changed files with 62 additions and 12 deletions
|
@ -4313,7 +4313,9 @@ static HRESULT WINAPI d3dx_effect_CloneEffect(ID3DXEffect *iface, IDirect3DDevic
|
||||||
if (!device)
|
if (!device)
|
||||||
return D3DERR_INVALIDCALL;
|
return D3DERR_INVALIDCALL;
|
||||||
|
|
||||||
return E_NOTIMPL;
|
iface->lpVtbl->AddRef(iface);
|
||||||
|
*new_effect = iface;
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if D3DX_SDK_VERSION >= 27
|
#if D3DX_SDK_VERSION >= 27
|
||||||
|
|
|
@ -7434,29 +7434,23 @@ static void test_effect_clone(void)
|
||||||
ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
|
ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
|
||||||
|
|
||||||
hr = effect->lpVtbl->CloneEffect(effect, device, &cloned);
|
hr = effect->lpVtbl->CloneEffect(effect, device, &cloned);
|
||||||
todo_wine
|
|
||||||
ok(hr == D3D_OK, "Got result %#x.\n", hr);
|
ok(hr == D3D_OK, "Got result %#x.\n", hr);
|
||||||
if (hr == D3D_OK)
|
|
||||||
{
|
todo_wine ok(cloned != effect, "Expected new effect instance.\n");
|
||||||
ok(cloned != effect, "Expected new effect instance.\n");
|
|
||||||
cloned->lpVtbl->Release(cloned);
|
cloned->lpVtbl->Release(cloned);
|
||||||
}
|
|
||||||
/* Try with different device. */
|
/* Try with different device. */
|
||||||
device2 = create_device(&window2);
|
device2 = create_device(&window2);
|
||||||
hr = effect->lpVtbl->CloneEffect(effect, device2, &cloned);
|
hr = effect->lpVtbl->CloneEffect(effect, device2, &cloned);
|
||||||
todo_wine
|
|
||||||
ok(hr == D3D_OK, "Got result %#x.\n", hr);
|
ok(hr == D3D_OK, "Got result %#x.\n", hr);
|
||||||
if (hr == D3D_OK)
|
todo_wine ok(cloned != effect, "Expected new effect instance.\n");
|
||||||
{
|
|
||||||
ok(cloned != effect, "Expected new effect instance.\n");
|
|
||||||
|
|
||||||
hr = cloned->lpVtbl->GetDevice(cloned, &device3);
|
hr = cloned->lpVtbl->GetDevice(cloned, &device3);
|
||||||
ok(hr == S_OK, "Failed to get effect device.\n");
|
ok(hr == S_OK, "Failed to get effect device.\n");
|
||||||
ok(device3 == device2, "Unexpected device instance.\n");
|
todo_wine ok(device3 == device2, "Unexpected device instance, device3 %p, device2 %p.\n", device3, device2);
|
||||||
IDirect3DDevice9_Release(device3);
|
IDirect3DDevice9_Release(device3);
|
||||||
|
|
||||||
cloned->lpVtbl->Release(cloned);
|
cloned->lpVtbl->Release(cloned);
|
||||||
}
|
|
||||||
IDirect3DDevice9_Release(device2);
|
IDirect3DDevice9_Release(device2);
|
||||||
DestroyWindow(window2);
|
DestroyWindow(window2);
|
||||||
effect->lpVtbl->Release(effect);
|
effect->lpVtbl->Release(effect);
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
diff --git a/dll/directx/wine/d3dx9_36/effect.c b/dll/directx/wine/d3dx9_36/effect.c
|
||||||
|
index 710e999..d57b182 100644
|
||||||
|
--- a/dll/directx/wine/d3dx9_36/effect.c
|
||||||
|
+++ b/dll/directx/wine/d3dx9_36/effect.c
|
||||||
|
@@ -4309,7 +4309,9 @@ static HRESULT WINAPI d3dx_effect_CloneEffect(ID3DXEffect *iface, IDirect3DDevic
|
||||||
|
if (!device)
|
||||||
|
return D3DERR_INVALIDCALL;
|
||||||
|
|
||||||
|
- return E_NOTIMPL;
|
||||||
|
+ iface->lpVtbl->AddRef(iface);
|
||||||
|
+ *new_effect = iface;
|
||||||
|
+ return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if D3DX_SDK_VERSION >= 27
|
||||||
|
diff --git a/modules/rostests/winetests/d3dx9_36/effect.c b/modules/rostests/winetests/d3dx9_36/effect.c
|
||||||
|
index ae6f65d..1b5c944 100644
|
||||||
|
--- a/modules/rostests/winetests/d3dx9_36/effect.c
|
||||||
|
+++ b/modules/rostests/winetests/d3dx9_36/effect.c
|
||||||
|
@@ -7419,29 +7419,23 @@ static void test_effect_clone(void)
|
||||||
|
ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = effect->lpVtbl->CloneEffect(effect, device, &cloned);
|
||||||
|
-todo_wine
|
||||||
|
ok(hr == D3D_OK, "Got result %#x.\n", hr);
|
||||||
|
-if (hr == D3D_OK)
|
||||||
|
-{
|
||||||
|
- ok(cloned != effect, "Expected new effect instance.\n");
|
||||||
|
+
|
||||||
|
+ todo_wine ok(cloned != effect, "Expected new effect instance.\n");
|
||||||
|
cloned->lpVtbl->Release(cloned);
|
||||||
|
-}
|
||||||
|
/* Try with different device. */
|
||||||
|
device2 = create_device(&window2);
|
||||||
|
hr = effect->lpVtbl->CloneEffect(effect, device2, &cloned);
|
||||||
|
-todo_wine
|
||||||
|
ok(hr == D3D_OK, "Got result %#x.\n", hr);
|
||||||
|
-if (hr == D3D_OK)
|
||||||
|
-{
|
||||||
|
- ok(cloned != effect, "Expected new effect instance.\n");
|
||||||
|
+ todo_wine ok(cloned != effect, "Expected new effect instance.\n");
|
||||||
|
|
||||||
|
hr = cloned->lpVtbl->GetDevice(cloned, &device3);
|
||||||
|
ok(hr == S_OK, "Failed to get effect device.\n");
|
||||||
|
- ok(device3 == device2, "Unexpected device instance.\n");
|
||||||
|
+ todo_wine ok(device3 == device2, "Unexpected device instance, device3 %p, device2 %p.\n", device3, device2);
|
||||||
|
IDirect3DDevice9_Release(device3);
|
||||||
|
|
||||||
|
cloned->lpVtbl->Release(cloned);
|
||||||
|
-}
|
||||||
|
+
|
||||||
|
IDirect3DDevice9_Release(device2);
|
||||||
|
DestroyWindow(window2);
|
||||||
|
effect->lpVtbl->Release(effect);
|
Loading…
Add table
Add a link
Reference in a new issue