From: Riccardo Bortolato Subject: [PATCH 1/2] d3d9/tests: add test for surface preload (v3) Message-Id: <1441885713-9618-1-git-send-email-rikyz619@gmail.com> Date: Thu, 10 Sep 2015 13:48:32 +0200 --- dlls/d3d9/tests/device.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/dlls/d3d9/tests/device.c b/dlls/d3d9/tests/device.c index c41a5e6..ace35de 100644 --- a/dlls/d3d9/tests/device.c +++ b/dlls/d3d9/tests/device.c @@ -10325,6 +10325,68 @@ static void test_swapchain_parameters(void) DestroyWindow(window); } +static void test_preload(void) +{ + IDirect3DSurface9 *backbuffer, *stencilsurface, *offscreensurface, *rendertarget; + IDirect3DSwapChain9 *swapchain; + IDirect3DDevice9 *device; + ULONG refcount = 0; + IDirect3D9 *d3d; + HWND window; + HRESULT hr; + + window = CreateWindowA("d3d9_test_wc", "d3d9_test", WS_OVERLAPPEDWINDOW, + 0, 0, 640, 480, NULL, NULL, NULL, NULL); + ok(!!window, "Failed to create a window.\n"); + d3d = Direct3DCreate9(D3D_SDK_VERSION); + ok(!!d3d, "Failed to create a D3D object.\n"); + + if (!(device = create_device(d3d, window, NULL))) + { + skip("Failed to create a 3D device, skipping test.\n"); + goto cleanup; + } + + hr = IDirect3DDevice9_GetSwapChain(device, 0, &swapchain); + ok(SUCCEEDED(hr), "GetSwapChain failed, hr %#x.\n", hr); + + hr = IDirect3DDevice9_GetBackBuffer(device, 0, 0, D3DBACKBUFFER_TYPE_MONO, &backbuffer); + ok(SUCCEEDED(hr), "GetBackBuffer failed, hr %#x.\n", hr); + IDirect3DSurface9_PreLoad(backbuffer); + IDirect3DSurface9_Release(backbuffer); + + hr = IDirect3DDevice9_GetDepthStencilSurface(device, &stencilsurface); + ok(SUCCEEDED(hr), "GetDepthStencilSurface failed, hr %#x.\n", hr); + IDirect3DSurface9_PreLoad(stencilsurface); + IDirect3DSurface9_Release(stencilsurface); + + IDirect3DSwapChain9_Release(swapchain); + + hr = IDirect3DDevice9_CreateDepthStencilSurface(device, 32, 32, + D3DFMT_D24S8, D3DMULTISAMPLE_NONE, 0, TRUE, &stencilsurface, NULL); + ok(SUCCEEDED(hr), "CreateDepthStencilSurface failed, hr %#x.\n", hr); + IDirect3DSurface9_PreLoad(stencilsurface); + IDirect3DSurface9_Release(stencilsurface); + + hr = IDirect3DDevice9_CreateOffscreenPlainSurface(device, 32, 32, + D3DFMT_X8R8G8B8, D3DPOOL_DEFAULT, &offscreensurface, NULL); + ok(SUCCEEDED(hr), "CreateOffscreenPlainSurface failed, hr %#x.\n", hr); + IDirect3DSurface9_PreLoad(offscreensurface); + IDirect3DSurface9_Release(offscreensurface); + + hr = IDirect3DDevice9_CreateRenderTarget(device, 32, 32, + D3DFMT_X8R8G8B8, D3DMULTISAMPLE_NONE, 0, TRUE, &rendertarget, NULL); + ok(SUCCEEDED(hr), "CreateRenderTarget failed, hr %#x.\n", hr); + IDirect3DSurface9_PreLoad(rendertarget); + IDirect3DSurface9_Release(rendertarget); + + refcount = IDirect3DDevice9_Release(device); + ok(!refcount, "Device has %u references left.\n", refcount); +cleanup: + IDirect3D9_Release(d3d); + DestroyWindow(window); +} + START_TEST(device) { WNDCLASSA wc = {0}; @@ -10436,6 +10498,7 @@ START_TEST(device) test_lost_device(); test_resource_priority(); test_swapchain_parameters(); + test_preload(); UnregisterClassA("d3d9_test_wc", GetModuleHandleA(NULL)); } -- 1.9.1