[PATCH 4/4] d3d9/tests: Add a test for the NULL format.
Henri Verbeet
hverbeet at codeweavers.com
Wed Jan 26 12:45:05 CST 2011
---
dlls/d3d9/tests/surface.c | 86 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 86 insertions(+), 0 deletions(-)
diff --git a/dlls/d3d9/tests/surface.c b/dlls/d3d9/tests/surface.c
index 7fcf6e4..8353b81 100644
--- a/dlls/d3d9/tests/surface.c
+++ b/dlls/d3d9/tests/surface.c
@@ -53,6 +53,8 @@ static IDirect3DDevice9 *init_d3d9(HMODULE d3d9_handle)
present_parameters.Windowed = TRUE;
present_parameters.hDeviceWindow = create_window();
present_parameters.SwapEffect = D3DSWAPEFFECT_DISCARD;
+ present_parameters.EnableAutoDepthStencil = TRUE;
+ present_parameters.AutoDepthStencilFormat = D3DFMT_D24S8;
hr = IDirect3D9_CreateDevice(d3d9_ptr, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
NULL, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &present_parameters, &device_ptr);
@@ -505,6 +507,89 @@ static void test_surface_dimensions(IDirect3DDevice9 *device)
if (SUCCEEDED(hr)) IDirect3DSurface9_Release(surface);
}
+static void test_surface_format_null(IDirect3DDevice9 *device)
+{
+ static const D3DFORMAT D3DFMT_NULL = MAKEFOURCC('N','U','L','L');
+ IDirect3DTexture9 *texture;
+ IDirect3DSurface9 *surface;
+ IDirect3DSurface9 *rt, *ds;
+ D3DLOCKED_RECT locked_rect;
+ D3DSURFACE_DESC desc;
+ IDirect3D9 *d3d;
+ HRESULT hr;
+
+ IDirect3DDevice9_GetDirect3D(device, &d3d);
+
+ hr = IDirect3D9_CheckDeviceFormat(d3d, 0, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8,
+ D3DUSAGE_RENDERTARGET, D3DRTYPE_SURFACE, D3DFMT_NULL);
+ if (hr != D3D_OK)
+ {
+ skip("No D3DFMT_NULL support, skipping test.\n");
+ IDirect3D9_Release(d3d);
+ return;
+ }
+
+ hr = IDirect3D9_CheckDeviceFormat(d3d, 0, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8,
+ D3DUSAGE_RENDERTARGET, D3DRTYPE_TEXTURE, D3DFMT_NULL);
+ ok(hr == D3D_OK, "D3DFMT_NULL should be supported for render target textures, hr %#x.\n", hr);
+
+ hr = IDirect3D9_CheckDepthStencilMatch(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8,
+ D3DFMT_NULL, D3DFMT_D24S8);
+ ok(SUCCEEDED(hr), "Depth stencil match failed for D3DFMT_NULL, hr %#x.\n", hr);
+
+ IDirect3D9_Release(d3d);
+
+ hr = IDirect3DDevice9_CreateRenderTarget(device, 128, 128, D3DFMT_NULL, 0, 0, TRUE, &surface, NULL);
+ ok(SUCCEEDED(hr), "Failed to create render target, hr %#x.\n", hr);
+
+ hr = IDirect3DDevice9_GetRenderTarget(device, 0, &rt);
+ ok(SUCCEEDED(hr), "Failed to get original render target, hr %#x.\n", hr);
+
+ hr = IDirect3DDevice9_GetDepthStencilSurface(device, &ds);
+ ok(SUCCEEDED(hr), "Failed to get original depth/stencil, hr %#x.\n", hr);
+
+ hr = IDirect3DDevice9_SetRenderTarget(device, 0, NULL);
+ ok(FAILED(hr), "Succeeded in setting render target 0 to NULL, should fail.\n");
+
+ hr = IDirect3DDevice9_SetRenderTarget(device, 0, surface);
+ ok(SUCCEEDED(hr), "Failed to set render target, hr %#x.\n", hr);
+
+ hr = IDirect3DDevice9_SetDepthStencilSurface(device, NULL);
+ ok(SUCCEEDED(hr), "Failed to set depth/stencil, hr %#x.\n", hr);
+
+ hr = IDirect3DDevice9_Clear(device, 0, NULL, D3DCLEAR_TARGET, 0x00000000, 0.0f, 0);
+ ok(SUCCEEDED(hr), "Clear failed, hr %#x.\n", hr);
+
+ hr = IDirect3DDevice9_SetRenderTarget(device, 0, rt);
+ ok(SUCCEEDED(hr), "Failed to set render target, hr %#x.\n", hr);
+
+ hr = IDirect3DDevice9_SetDepthStencilSurface(device, ds);
+ ok(SUCCEEDED(hr), "Failed to set depth/stencil, hr %#x.\n", hr);
+
+ IDirect3DSurface9_Release(rt);
+ IDirect3DSurface9_Release(ds);
+
+ hr = IDirect3DSurface9_GetDesc(surface, &desc);
+ ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
+ ok(desc.Width == 128, "Expected width 128, got %u.\n", desc.Width);
+ ok(desc.Height == 128, "Expected height 128, got %u.\n", desc.Height);
+
+ hr = IDirect3DSurface9_LockRect(surface, &locked_rect, NULL, 0);
+ ok(SUCCEEDED(hr), "Failed to lock surface, hr %#x.\n", hr);
+ ok(locked_rect.Pitch, "Expected non-zero pitch, got %u.\n", locked_rect.Pitch);
+ ok(!!locked_rect.pBits, "Expected non-NULL pBits, got %p.\n", locked_rect.pBits);
+
+ hr = IDirect3DSurface9_UnlockRect(surface);
+ ok(SUCCEEDED(hr), "Failed to unlock surface, hr %#x.\n", hr);
+
+ IDirect3DSurface9_Release(surface);
+
+ hr = IDirect3DDevice9_CreateTexture(device, 128, 128, 0, D3DUSAGE_RENDERTARGET,
+ D3DFMT_NULL, D3DPOOL_DEFAULT, &texture, NULL);
+ ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
+ IDirect3DTexture9_Release(texture);
+}
+
START_TEST(surface)
{
HMODULE d3d9_handle;
@@ -528,6 +613,7 @@ START_TEST(surface)
test_private_data(device_ptr);
test_getdc(device_ptr);
test_surface_dimensions(device_ptr);
+ test_surface_format_null(device_ptr);
refcount = IDirect3DDevice9_Release(device_ptr);
ok(!refcount, "Device has %u references left\n", refcount);
--
1.7.3.4
More information about the wine-patches
mailing list