[6/7] d3dx9: Implement ID3DXRenderToSurface::GetDesc.

Józef Kucia joseph.kucia at gmail.com
Tue Jun 5 05:05:44 CDT 2012


---
 dlls/d3dx9_36/render.c     |   19 ++++++++++++++--
 dlls/d3dx9_36/tests/core.c |   48 ++++++++++++++++++++++++++++++-------------
 2 files changed, 49 insertions(+), 18 deletions(-)

diff --git a/dlls/d3dx9_36/render.c b/dlls/d3dx9_36/render.c
index 4e4adfb..99cee8d 100644
--- a/dlls/d3dx9_36/render.c
+++ b/dlls/d3dx9_36/render.c
@@ -28,6 +28,7 @@ struct render_to_surface
     LONG ref;
 
     IDirect3DDevice9 *device;
+    D3DXRTS_DESC desc;
 };
 
 static inline struct render_to_surface *impl_from_ID3DXRenderToSurface(ID3DXRenderToSurface *iface)
@@ -91,8 +92,14 @@ static HRESULT WINAPI D3DXRenderToSurface_GetDevice(ID3DXRenderToSurface *iface,
 static HRESULT WINAPI D3DXRenderToSurface_GetDesc(ID3DXRenderToSurface *iface,
                                                   D3DXRTS_DESC *desc)
 {
-    FIXME("(%p)->(%p): stub\n", iface, desc);
-    return E_NOTIMPL;
+    struct render_to_surface *render = impl_from_ID3DXRenderToSurface(iface);
+
+    TRACE("(%p)->(%p)\n", iface, desc);
+
+    if (!desc) return D3DERR_INVALIDCALL;
+
+    *desc = render->desc;
+    return D3D_OK;
 }
 
 static HRESULT WINAPI D3DXRenderToSurface_BeginScene(ID3DXRenderToSurface *iface,
@@ -147,7 +154,7 @@ HRESULT WINAPI D3DXCreateRenderToSurface(IDirect3DDevice9 *device,
 {
     struct render_to_surface *render;
 
-    FIXME("(%p, %u, %u, %#x, %d, %#x, %p): semi-stub\n", device, width, height, format,
+    TRACE("(%p, %u, %u, %#x, %d, %#x, %p)\n", device, width, height, format,
             depth_stencil, depth_stencil_format, out);
 
     if (!device || !out) return D3DERR_INVALIDCALL;
@@ -161,6 +168,12 @@ HRESULT WINAPI D3DXCreateRenderToSurface(IDirect3DDevice9 *device,
     IDirect3DDevice9_AddRef(device);
     render->device = device;
 
+    render->desc.Width = width;
+    render->desc.Height = height;
+    render->desc.Format = format;
+    render->desc.DepthStencil = depth_stencil;
+    render->desc.DepthStencilFormat = depth_stencil_format;
+
     *out = &render->ID3DXRenderToSurface_iface;
     return D3D_OK;
 }
diff --git a/dlls/d3dx9_36/tests/core.c b/dlls/d3dx9_36/tests/core.c
index ae60080..5b0ebc7 100644
--- a/dlls/d3dx9_36/tests/core.c
+++ b/dlls/d3dx9_36/tests/core.c
@@ -448,9 +448,20 @@ static void test_ID3DXFont(IDirect3DDevice9 *device)
 
 void test_D3DXCreateRenderToSurface(IDirect3DDevice9 *device)
 {
+    int i;
     HRESULT hr;
     ULONG ref_count;
+    D3DXRTS_DESC desc;
     ID3DXRenderToSurface *render = (void *)0xdeadbeef;
+    static const D3DXRTS_DESC tests[] =
+    {
+        { 0, 256, D3DFMT_A8R8G8B8, FALSE, D3DFMT_UNKNOWN },
+        { 256, 0, D3DFMT_A8R8G8B8, FALSE, D3DFMT_UNKNOWN },
+        { 256, 0, D3DFMT_A8R8G8B8, FALSE, D3DFMT_D24S8 },
+        { 256, 256, D3DFMT_UNKNOWN, FALSE, D3DFMT_R8G8B8 },
+        { 0, 0, D3DFMT_UNKNOWN, FALSE, D3DFMT_UNKNOWN },
+        { -1, -1, MAKEFOURCC('B','A','D','F'), TRUE, MAKEFOURCC('B','A','D','F') }
+    };
 
     hr = D3DXCreateRenderToSurface(NULL /* device */, 256, 256, D3DFMT_A8R8G8B8, FALSE, D3DFMT_UNKNOWN, &render);
     ok(hr == D3DERR_INVALIDCALL, "D3DXCreateRenderToSurface returned %#x, expected %#x\n", hr, D3DERR_INVALIDCALL);
@@ -459,21 +470,28 @@ void test_D3DXCreateRenderToSurface(IDirect3DDevice9 *device)
     hr = D3DXCreateRenderToSurface(device, 256, 256, D3DFMT_A8R8G8B8, FALSE, D3DFMT_UNKNOWN, NULL /* out */);
     ok(hr == D3DERR_INVALIDCALL, "D3DXCreateRenderToSurface returned %#x, expected %#x\n", hr, D3DERR_INVALIDCALL);
 
-    hr = D3DXCreateRenderToSurface(device, 0 /* width */, 256, D3DFMT_A8R8G8B8, FALSE, D3DFMT_UNKNOWN, &render);
-    ok(hr == D3D_OK, "D3DXCreateRenderToSurface returned %#x, expected %#x\n", hr, D3D_OK);
-    if (SUCCEEDED(hr)) ID3DXRenderToSurface_Release(render);
-
-    hr = D3DXCreateRenderToSurface(device, 256, 0 /* height */, D3DFMT_A8R8G8B8, FALSE, D3DFMT_UNKNOWN, &render);
-    ok(hr == D3D_OK, "D3DXCreateRenderToSurface returned %#x, expected %#x\n", hr, D3D_OK);
-    if (SUCCEEDED(hr)) ID3DXRenderToSurface_Release(render);
-
-    hr = D3DXCreateRenderToSurface(device, 256, 256, D3DFMT_UNKNOWN /* format */, FALSE, D3DFMT_UNKNOWN, &render);
-    ok(hr == D3D_OK, "D3DXCreateRenderToSurface returned %#x, expected %#x\n", hr, D3D_OK);
-    if (SUCCEEDED(hr)) ID3DXRenderToSurface_Release(render);
-
-    hr = D3DXCreateRenderToSurface(device, 0, 0, D3DFMT_UNKNOWN, FALSE, D3DFMT_UNKNOWN, &render);
-    ok(hr == D3D_OK, "D3DXCreateRenderToSurface returned %#x, expected %#x\n", hr, D3D_OK);
-    if (SUCCEEDED(hr)) ID3DXRenderToSurface_Release(render);
+    for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++)
+    {
+        hr = D3DXCreateRenderToSurface(device, tests[i].Width, tests[i].Height, tests[i].Format, tests[i].DepthStencil,
+                tests[i].DepthStencilFormat, &render);
+        ok(hr == D3D_OK, "%d: D3DXCreateRenderToSurface returned %#x, expected %#x\n", i, hr, D3D_OK);
+        if (SUCCEEDED(hr))
+        {
+            hr = ID3DXRenderToSurface_GetDesc(render, &desc);
+            ok(hr == D3D_OK, "%d: GetDesc failed %#x\n", i, hr);
+            if (SUCCEEDED(hr))
+            {
+                ok(desc.Width == tests[i].Width, "%d: Got width %u, expected %u\n", i, desc.Width, tests[i].Width);
+                ok(desc.Height == tests[i].Height, "%d: Got height %u, expected %u\n", i, desc.Height, tests[i].Height);
+                ok(desc.Format == tests[i].Format, "%d: Got format %#x, expected %#x\n", i, desc.Format, tests[i].Format);
+                ok(desc.DepthStencil == tests[i].DepthStencil, "%d: Got depth stencil %d, expected %d\n",
+                        i, desc.DepthStencil, tests[i].DepthStencil);
+                ok(desc.DepthStencilFormat == tests[i].DepthStencilFormat, "%d: Got depth stencil format %#x, expected %#x\n",
+                        i, desc.DepthStencilFormat, tests[i].DepthStencilFormat);
+            }
+            ID3DXRenderToSurface_Release(render);
+        }
+    }
 
     /* check device ref count */
     ref_count = get_ref((IUnknown *)device);
-- 
1.7.8.6




More information about the wine-patches mailing list