dxgi/tests: Test IDXGISwapChain_GetContainingOutput() after Alt+Enter.
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
160cb956f8
commit
f904e9af1b
|
@ -2095,9 +2095,9 @@ static HMONITOR get_primary_if_right_side_secondary(const DXGI_OUTPUT_DESC *outp
|
|||
static void test_get_containing_output(void)
|
||||
{
|
||||
unsigned int adapter_idx, output_idx, output_count;
|
||||
DXGI_OUTPUT_DESC output_desc, output_desc2;
|
||||
DXGI_SWAP_CHAIN_DESC swapchain_desc;
|
||||
IDXGIOutput *output, *output2;
|
||||
DXGI_OUTPUT_DESC output_desc;
|
||||
MONITORINFOEXW monitor_info;
|
||||
IDXGISwapChain *swapchain;
|
||||
IDXGIFactory *factory;
|
||||
|
@ -2369,6 +2369,93 @@ static void test_get_containing_output(void)
|
|||
hr = IDXGISwapChain_SetFullscreenState(swapchain, FALSE, NULL);
|
||||
ok(hr == S_OK, "SetFullscreenState failed, hr %#x.\n", hr);
|
||||
|
||||
/* Test GetContainingOutput after a full screen swapchain is made windowed by pressing
|
||||
* Alt+Enter, then move it to another output and use Alt+Enter to enter full screen */
|
||||
output = NULL;
|
||||
output2 = NULL;
|
||||
for (adapter_idx = 0; SUCCEEDED(IDXGIFactory_EnumAdapters(factory, adapter_idx, &adapter));
|
||||
++adapter_idx)
|
||||
{
|
||||
for (output_idx = 0; SUCCEEDED(IDXGIAdapter_EnumOutputs(adapter, output_idx,
|
||||
output ? &output2 : &output)); ++output_idx)
|
||||
{
|
||||
if (output2)
|
||||
break;
|
||||
}
|
||||
|
||||
IDXGIAdapter_Release(adapter);
|
||||
if (output2)
|
||||
break;
|
||||
}
|
||||
|
||||
if (output && output2)
|
||||
{
|
||||
hr = IDXGISwapChain_SetFullscreenState(swapchain, TRUE, output);
|
||||
IDXGIOutput_Release(output);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
skip("SetFullscreenState failed, hr %#x.\n", hr);
|
||||
IDXGIOutput_Release(output2);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Post an Alt + VK_RETURN WM_SYSKEYDOWN to leave full screen on the first output */
|
||||
PostMessageA(swapchain_desc.OutputWindow, WM_SYSKEYDOWN, VK_RETURN,
|
||||
(MapVirtualKeyA(VK_RETURN, MAPVK_VK_TO_VSC) << 16) | 0x20000001);
|
||||
flush_events();
|
||||
hr = IDXGISwapChain_GetFullscreenState(swapchain, &fullscreen, NULL);
|
||||
ok(hr == S_OK, "GetFullscreenState failed, hr %#x.\n", hr);
|
||||
ok(!fullscreen, "Expect swapchain not full screen.\n");
|
||||
|
||||
/* Move the swapchain output window to the second output */
|
||||
hr = IDXGIOutput_GetDesc(output2, &output_desc2);
|
||||
ok(hr == S_OK, "GetDesc failed, hr %#x.\n", hr);
|
||||
ret = SetWindowPos(swapchain_desc.OutputWindow, 0, output_desc2.DesktopCoordinates.left,
|
||||
output_desc2.DesktopCoordinates.top, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
|
||||
ok(ret, "SetWindowPos failed.\n");
|
||||
|
||||
/* Post an Alt + VK_RETURN WM_SYSKEYDOWN to enter full screen on the second output */
|
||||
PostMessageA(swapchain_desc.OutputWindow, WM_SYSKEYDOWN, VK_RETURN,
|
||||
(MapVirtualKeyA(VK_RETURN, MAPVK_VK_TO_VSC) << 16) | 0x20000001);
|
||||
flush_events();
|
||||
output = NULL;
|
||||
hr = IDXGISwapChain_GetFullscreenState(swapchain, &fullscreen, &output);
|
||||
ok(hr == S_OK, "GetFullscreenState failed, hr %#x.\n", hr);
|
||||
ok(fullscreen, "Expect swapchain full screen.\n");
|
||||
ok(!!output, "Expect output not NULL.\n");
|
||||
hr = IDXGIOutput_GetDesc(output, &output_desc);
|
||||
ok(hr == S_OK, "GetDesc failed, hr %#x.\n", hr);
|
||||
hr = IDXGIOutput_GetDesc(output2, &output_desc2);
|
||||
ok(hr == S_OK, "GetDesc failed, hr %#x.\n", hr);
|
||||
todo_wine ok(!lstrcmpW(output_desc.DeviceName, output_desc2.DeviceName),
|
||||
"Expect device name %s, got %s.\n", wine_dbgstr_w(output_desc2.DeviceName),
|
||||
wine_dbgstr_w(output_desc.DeviceName));
|
||||
IDXGIOutput_Release(output);
|
||||
|
||||
output = NULL;
|
||||
hr = IDXGISwapChain_GetContainingOutput(swapchain, &output);
|
||||
ok(hr == S_OK, "GetContainingOutput failed, hr %#x.\n", hr);
|
||||
hr = IDXGIOutput_GetDesc(output, &output_desc);
|
||||
ok(hr == S_OK, "GetDesc failed, hr %#x.\n", hr);
|
||||
hr = IDXGIOutput_GetDesc(output2, &output_desc2);
|
||||
ok(hr == S_OK, "GetDesc failed, hr %#x.\n", hr);
|
||||
todo_wine ok(!lstrcmpW(output_desc.DeviceName, output_desc2.DeviceName),
|
||||
"Expect device name %s, got %s.\n", wine_dbgstr_w(output_desc2.DeviceName),
|
||||
wine_dbgstr_w(output_desc.DeviceName));
|
||||
|
||||
hr = IDXGISwapChain_SetFullscreenState(swapchain, FALSE, NULL);
|
||||
ok(hr == S_OK, "SetFullscreenState failed, hr %#x.\n", hr);
|
||||
}
|
||||
else
|
||||
{
|
||||
skip("This test requires two outputs.\n");
|
||||
}
|
||||
|
||||
if (output)
|
||||
IDXGIOutput_Release(output);
|
||||
if (output2)
|
||||
IDXGIOutput_Release(output2);
|
||||
|
||||
done:
|
||||
refcount = IDXGISwapChain_Release(swapchain);
|
||||
ok(!refcount, "IDXGISwapChain has %u references left.\n", refcount);
|
||||
|
|
Loading…
Reference in New Issue