[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