On Mon, Jun 10, 2019 at 3:05 PM Zhiyi Zhang zzhang@codeweavers.com wrote:
Signed-off-by: Zhiyi Zhang zzhang@codeweavers.com
dlls/dxgi/tests/dxgi.c | 167 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+)
diff --git a/dlls/dxgi/tests/dxgi.c b/dlls/dxgi/tests/dxgi.c index 765b174af6..216f03eed8 100644 --- a/dlls/dxgi/tests/dxgi.c +++ b/dlls/dxgi/tests/dxgi.c @@ -3992,9 +3992,13 @@ static void test_swapchain_parameters(void)
static void test_swapchain_present(IUnknown *device, BOOL is_d3d12) {
- static const DWORD flags[] = {0, DXGI_PRESENT_TEST};
- static const DWORD timeout = 2000; DXGI_SWAP_CHAIN_DESC swapchain_desc; IDXGISwapChain *swapchain; IDXGIFactory *factory;
- IDXGIOutput *output;
- BOOL fullscreen; unsigned int i; ULONG refcount; HRESULT hr;
@@ -4029,6 +4033,169 @@ static void test_swapchain_present(IUnknown *device, BOOL is_d3d12) hr = IDXGISwapChain_Present(swapchain, 0, 0); ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
- for (i = 0; i < ARRAY_SIZE(flags); ++i)
- {
HWND occluding_hwnd = CreateWindowA("static", "occluding_window", WS_POPUP | WS_VISIBLE, 0, 0, 400, 200, 0, 0, 0, 0);/* Another window covers the swapchain window, doesn't report as occluded */hr = IDXGISwapChain_Present(swapchain, 0, flags[i]);ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);/* Minimized window */ShowWindow(swapchain_desc.OutputWindow, SW_MINIMIZE);hr = IDXGISwapChain_Present(swapchain, 0, flags[i]);todo_wine_if(!is_d3d12) ok(hr == (is_d3d12 ? S_OK : DXGI_STATUS_OCCLUDED), "Got unexpected hr %#x.\n", hr);ShowWindow(swapchain_desc.OutputWindow, SW_NORMAL);/* Hidden window */ShowWindow(swapchain_desc.OutputWindow, SW_HIDE);hr = IDXGISwapChain_Present(swapchain, 0, flags[i]);ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);ShowWindow(swapchain_desc.OutputWindow, SW_SHOW);DestroyWindow(occluding_hwnd);/* Test IDXGIOutput_ReleaseOwnership makes the swapchain exit fullscreen */hr = IDXGISwapChain_SetFullscreenState(swapchain, TRUE, NULL);/* DXGI_ERROR_NOT_CURRENTLY_AVAILABLE on some machines. DXGI_ERROR_UNSUPPORTED on Win 7 testbot. */if (hr == DXGI_ERROR_NOT_CURRENTLY_AVAILABLE || broken(hr == DXGI_ERROR_UNSUPPORTED)){skip("Could not change fullscreen state.\n");continue;}todo_wine_if(is_d3d12) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);IDXGISwapChain_ResizeBuffers(swapchain, 0, 0, 0, DXGI_FORMAT_UNKNOWN, 0);hr = IDXGISwapChain_Present(swapchain, 0, flags[i]);ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);output = NULL;fullscreen = FALSE;hr = IDXGISwapChain_GetFullscreenState(swapchain, &fullscreen, &output);todo_wine_if(is_d3d12) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);todo_wine_if(is_d3d12) ok(fullscreen, "Unexpected fullscreen status.\n");todo_wine_if(is_d3d12) ok(output != NULL, "Expect output not null.\n");if (output) IDXGIOutput_ReleaseOwnership(output);/* Still in fullscreen */fullscreen = FALSE;hr = IDXGISwapChain_GetFullscreenState(swapchain, &fullscreen, NULL);todo_wine_if(is_d3d12) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);todo_wine_if(is_d3d12) ok(fullscreen, "Unexpected fullscreen status.\n");/* Now calling IDXGISwapChain_Present will exit the fullscreen */hr = IDXGISwapChain_Present(swapchain, 0, flags[i]);ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);fullscreen = TRUE;hr = IDXGISwapChain_GetFullscreenState(swapchain, &fullscreen, NULL);todo_wine_if(is_d3d12) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);/* Now fullscreen mode is exited */if (flags[i] == 0 && !is_d3d12){/* Still on fullscreen on vista and 2008 */todo_wine ok(!fullscreen || broken(fullscreen), "Unexpected fullscreen status.\n");}elseok(fullscreen, "Unexpected fullscreen status.\n");
Coding style: please add { } for the else block.
if (output) IDXGIOutput_Release(output);
Coding style: please put IDXGIOutput_Release(output); on the new line.
/* Test creating a window when swapchain is in fullscreen.* The window should break the swapchain out of fullscreen mode on d3d10/11.* d3d12 is different, new occluding window doesn't break swapchain out of fullscreen because d3d12 swapchain* fullscreen mode doesn't take exclusive ownership over output, nor does it disable compositing.* d3d12 fullscreen mode acts just like borderless fullscreen window mode */
2 empty lines before the comment.
occluding_hwnd = CreateWindowA("static", "occluding_window", WS_POPUP, 0, 0, 400, 200, 0, 0, 0, 0);/* Invisible window doesn't cause fullscreen mode to exit */IDXGISwapChain_ResizeBuffers(swapchain, 0, 0, 0, DXGI_FORMAT_UNKNOWN, 0);hr = IDXGISwapChain_Present(swapchain, 0, flags[i]);ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);fullscreen = FALSE;hr = IDXGISwapChain_GetFullscreenState(swapchain, &fullscreen, NULL);todo_wine_if(is_d3d12) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);todo_wine_if(is_d3d12) ok(fullscreen, "Unexpected fullscreen status.\n");/* Visible but with bottom z-order window still cause fullscreen mode to exit */SetWindowPos(occluding_hwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);ShowWindow(occluding_hwnd, SW_SHOW);/* Fullscreen mode takes a while to exit */Sleep(timeout);
Can we poll for the fullscreen state change instead of always waiting for 2 seconds? See get_query_data_() from dlls/d3d11/tests.