[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