=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: d3dx9: Implement ID3DXRenderToSurface:: GetDevice.

Alexandre Julliard julliard at winehq.org
Wed Jun 6 15:35:19 CDT 2012


Module: wine
Branch: master
Commit: de1f2ffd526a108d8a60f6dde5bf551da4b66b4b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=de1f2ffd526a108d8a60f6dde5bf551da4b66b4b

Author: Józef Kucia <joseph.kucia at gmail.com>
Date:   Tue Jun  5 12:05:45 2012 +0200

d3dx9: Implement ID3DXRenderToSurface::GetDevice.

---

 dlls/d3dx9_36/render.c     |   11 +++++++++--
 dlls/d3dx9_36/tests/core.c |   27 +++++++++++++++++++++++++++
 2 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/dlls/d3dx9_36/render.c b/dlls/d3dx9_36/render.c
index 99cee8d..9aa1487 100644
--- a/dlls/d3dx9_36/render.c
+++ b/dlls/d3dx9_36/render.c
@@ -85,8 +85,15 @@ static ULONG WINAPI D3DXRenderToSurface_Release(ID3DXRenderToSurface *iface)
 static HRESULT WINAPI D3DXRenderToSurface_GetDevice(ID3DXRenderToSurface *iface,
                                                     IDirect3DDevice9 **device)
 {
-    FIXME("(%p)->(%p): stub\n", iface, device);
-    return E_NOTIMPL;
+    struct render_to_surface *render = impl_from_ID3DXRenderToSurface(iface);
+
+    TRACE("(%p)->(%p)\n", iface, device);
+
+    if (!device) return D3DERR_INVALIDCALL;
+
+    IDirect3DDevice9_AddRef(render->device);
+    *device = render->device;
+    return D3D_OK;
 }
 
 static HRESULT WINAPI D3DXRenderToSurface_GetDesc(ID3DXRenderToSurface *iface,
diff --git a/dlls/d3dx9_36/tests/core.c b/dlls/d3dx9_36/tests/core.c
index 5b0ebc7..41b282d 100644
--- a/dlls/d3dx9_36/tests/core.c
+++ b/dlls/d3dx9_36/tests/core.c
@@ -500,6 +500,32 @@ void test_D3DXCreateRenderToSurface(IDirect3DDevice9 *device)
     if (SUCCEEDED(hr)) ID3DXRenderToSurface_Release(render);
 }
 
+static void test_ID3DXRenderToSurface(IDirect3DDevice9 *device)
+{
+    HRESULT hr;
+    ULONG ref_count;
+    IDirect3DDevice9 *out_device;
+    ID3DXRenderToSurface *render;
+
+    hr = D3DXCreateRenderToSurface(device, 256, 256, D3DFMT_A8R8G8B8, FALSE, D3DFMT_UNKNOWN, &render);
+    if (FAILED(hr))
+    {
+        skip("Failed to create ID3DXRenderToSurface\n");
+        return;
+    }
+
+    /* GetDevice */
+    hr = ID3DXRenderToSurface_GetDevice(render, NULL /* device */);
+    ok(hr == D3DERR_INVALIDCALL, "ID3DXRenderToSurface::GetDevice returned %#x, expected %#x\n", hr, D3DERR_INVALIDCALL);
+
+    ref_count = get_ref((IUnknown *)device);
+    hr = ID3DXRenderToSurface_GetDevice(render, &out_device);
+    ok(hr == D3D_OK, "ID3DXRenderToSurface::GetDevice returned %#x, expected %#x\n", hr, D3D_OK);
+    check_release((IUnknown *)out_device, ref_count);
+
+    check_release((IUnknown *)render, 0);
+}
+
 START_TEST(core)
 {
     HWND wnd;
@@ -535,6 +561,7 @@ START_TEST(core)
     test_ID3DXSprite(device);
     test_ID3DXFont(device);
     test_D3DXCreateRenderToSurface(device);
+    test_ID3DXRenderToSurface(device);
 
     check_release((IUnknown*)device, 0);
     check_release((IUnknown*)d3d, 0);




More information about the wine-cvs mailing list