Module: wine Branch: master Commit: 05b11380e8fa3e11f8b8813f048e1aa1e820c459 URL: https://source.winehq.org/git/wine.git/?a=commit;h=05b11380e8fa3e11f8b8813f0...
Author: Józef Kucia jkucia@codeweavers.com Date: Mon Jan 22 14:11:55 2018 +0100
dxgi: Implement dxgi_swapchain_GetFullscreenDesc().
Signed-off-by: Józef Kucia jkucia@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/dxgi/swapchain.c | 25 +++++++++++++++++++++++-- dlls/dxgi/tests/device.c | 7 +++++++ 2 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c index fe7e5cc..8e7dccb 100644 --- a/dlls/dxgi/swapchain.c +++ b/dlls/dxgi/swapchain.c @@ -465,9 +465,30 @@ static HRESULT STDMETHODCALLTYPE dxgi_swapchain_GetDesc1(IDXGISwapChain1 *iface, static HRESULT STDMETHODCALLTYPE dxgi_swapchain_GetFullscreenDesc(IDXGISwapChain1 *iface, DXGI_SWAP_CHAIN_FULLSCREEN_DESC *desc) { - FIXME("iface %p, desc %p stub!\n", iface, desc); + struct dxgi_swapchain *swapchain = impl_from_IDXGISwapChain1(iface); + struct wined3d_swapchain_desc wined3d_desc;
- return E_NOTIMPL; + TRACE("iface %p, desc %p.\n", iface, desc); + + if (!desc) + { + WARN("Invalid pointer.\n"); + return E_INVALIDARG; + } + + wined3d_mutex_lock(); + wined3d_swapchain_get_desc(swapchain->wined3d_swapchain, &wined3d_desc); + wined3d_mutex_unlock(); + + FIXME("Ignoring ScanlineOrdering and Scaling.\n"); + + desc->RefreshRate.Numerator = wined3d_desc.refresh_rate; + desc->RefreshRate.Denominator = 1; + desc->ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; + desc->Scaling = DXGI_MODE_SCALING_UNSPECIFIED; + desc->Windowed = wined3d_desc.windowed; + + return S_OK; }
static HRESULT STDMETHODCALLTYPE dxgi_swapchain_GetHwnd(IDXGISwapChain1 *iface, HWND *hwnd) diff --git a/dlls/dxgi/tests/device.c b/dlls/dxgi/tests/device.c index ea10ff5..899a063 100644 --- a/dlls/dxgi/tests/device.c +++ b/dlls/dxgi/tests/device.c @@ -868,6 +868,7 @@ static void test_create_swapchain(void) struct swapchain_fullscreen_state initial_state, expected_state; unsigned int i, expected_width, expected_height; DXGI_SWAP_CHAIN_DESC creation_desc, result_desc; + DXGI_SWAP_CHAIN_FULLSCREEN_DESC fullscreen_desc; DXGI_SWAP_CHAIN_DESC1 swapchain_desc; IDXGIDevice *device, *bgra_device; ULONG refcount, expected_refcount; @@ -978,6 +979,12 @@ static void test_create_swapchain(void) "Got unexpected scaling %#x.\n", swapchain_desc.Scaling); ok(swapchain_desc.AlphaMode == DXGI_ALPHA_MODE_IGNORE, "Got unexpected alpha mode %#x.\n", swapchain_desc.AlphaMode); + hr = IDXGISwapChain1_GetFullscreenDesc(swapchain1, NULL); + ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr); + hr = IDXGISwapChain1_GetFullscreenDesc(swapchain1, &fullscreen_desc); + ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); + ok(fullscreen_desc.Windowed == creation_desc.Windowed, + "Got unexpected windowed %#x.\n", fullscreen_desc.Windowed); hr = IDXGISwapChain1_GetHwnd(swapchain1, &window); ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); ok(window == creation_desc.OutputWindow, "Got unexpected window %p.\n", window);