[PATCH 1/5] dxgi/tests: Test fullscreen and multiple swapchains.
Stefan Dösinger
stefan at codeweavers.com
Fri Nov 21 11:32:27 CST 2014
Contrary to the d3d8/9 behavior, fullscreen swapchains can be created
while a windowed swapchain exists. Creating a windowed (or fullscreen)
swapchain while a fullscreen one exists is not allowed.
Setting the swapchains to windowed mode before destroying them is
necessary to avoid a segfault on native.
---
dlls/dxgi/tests/device.c | 34 +++++++++++++++++++++++++++++++++-
1 file changed, 33 insertions(+), 1 deletion(-)
diff --git a/dlls/dxgi/tests/device.c b/dlls/dxgi/tests/device.c
index 70cf3be..181b04c 100644
--- a/dlls/dxgi/tests/device.c
+++ b/dlls/dxgi/tests/device.c
@@ -393,7 +393,7 @@ static void test_createswapchain(void)
IDXGIFactory *factory;
IDXGIDevice *device;
ULONG refcount;
- IDXGISwapChain *swapchain;
+ IDXGISwapChain *swapchain, *swapchain2;
DXGI_SWAP_CHAIN_DESC creation_desc, result_desc;
HRESULT hr;
WNDCLASSA wc = {0};
@@ -451,6 +451,38 @@ static void test_createswapchain(void)
hr = IDXGISwapChain_GetDesc(swapchain, NULL);
ok(hr == E_INVALIDARG, "GetDesc unexpectedly returned %#x.\n", hr);
+ creation_desc.Windowed = FALSE;
+ hr = IDXGIFactory_CreateSwapChain(factory, obj, &creation_desc, &swapchain2);
+ ok(SUCCEEDED(hr), "CreateSwapChain failed, hr %#x.\n", hr);
+ hr = IDXGISwapChain_SetFullscreenState(swapchain2, TRUE, NULL);
+ todo_wine ok(SUCCEEDED(hr), "SetFullscreenState failed, hr %#x.\n", hr);
+ hr = IDXGISwapChain_SetFullscreenState(swapchain2, FALSE, NULL);
+ todo_wine ok(SUCCEEDED(hr), "SetFullscreenState failed, hr %#x.\n", hr);
+ IDXGISwapChain_Release(swapchain2);
+
+ IDXGISwapChain_Release(swapchain);
+
+ hr = IDXGIFactory_CreateSwapChain(factory, obj, &creation_desc, &swapchain);
+ ok(SUCCEEDED(hr), "CreateSwapChain failed, hr %#x.\n", hr);
+
+ hr = IDXGIFactory_CreateSwapChain(factory, obj, &creation_desc, &swapchain2);
+ todo_wine ok(hr == DXGI_ERROR_INVALID_CALL, "Got unexpected hr %#x.\n", hr);
+ if (SUCCEEDED(hr))
+ IDXGISwapChain_Release(swapchain2);
+
+ creation_desc.Windowed = TRUE;
+ hr = IDXGIFactory_CreateSwapChain(factory, obj, &creation_desc, &swapchain2);
+ todo_wine ok(hr == DXGI_ERROR_INVALID_CALL, "Got unexpected hr %#x.\n", hr);
+ if (SUCCEEDED(hr))
+ IDXGISwapChain_Release(swapchain2);
+
+ hr = IDXGISwapChain_SetFullscreenState(swapchain, FALSE, NULL);
+ todo_wine ok(SUCCEEDED(hr), "SetFullscreenState failed, hr %#x.\n", hr);
+
+ hr = IDXGIFactory_CreateSwapChain(factory, obj, &creation_desc, &swapchain2);
+ ok(SUCCEEDED(hr), "CreateSwapChain failed, hr %#x.\n", hr);
+ IDXGISwapChain_Release(swapchain2);
+
IDXGISwapChain_Release(swapchain);
for (i = 0; i < sizeof(refresh_list)/sizeof(refresh_list[0]); i++)
--
2.0.4
More information about the wine-patches
mailing list