[PATCH 2/2] dxgi: Fix possible null output from d3d11_swapchain_GetFullscreenState.
Zhiyi Zhang
zzhang at codeweavers.com
Mon Jul 8 02:09:31 CDT 2019
When swapchain is created in windowed mode, and then enter fullscreen
via Alt+Enter. Calling d3d11_swapchain_GetFullscreenState will return
a null output because swapchain->target wasn't initialized.
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
---
dlls/dxgi/swapchain.c | 20 ++++++++++++++++----
dlls/dxgi/tests/dxgi.c | 2 +-
2 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c
index 8dbbfab805..caf0863609 100644
--- a/dlls/dxgi/swapchain.c
+++ b/dlls/dxgi/swapchain.c
@@ -407,22 +407,34 @@ static HRESULT STDMETHODCALLTYPE d3d11_swapchain_GetFullscreenState(IDXGISwapCha
{
struct d3d11_swapchain *swapchain = d3d11_swapchain_from_IDXGISwapChain1(iface);
struct wined3d_swapchain_desc swapchain_desc;
+ HRESULT hr;
TRACE("iface %p, fullscreen %p, target %p.\n", iface, fullscreen, target);
- if (fullscreen)
+ if (fullscreen || target)
{
wined3d_mutex_lock();
wined3d_swapchain_get_desc(swapchain->wined3d_swapchain, &swapchain_desc);
wined3d_mutex_unlock();
- *fullscreen = !swapchain_desc.windowed;
}
+ if (fullscreen)
+ *fullscreen = !swapchain_desc.windowed;
+
if (target)
{
- *target = swapchain->target;
- if (*target)
+ if (!swapchain_desc.windowed)
+ {
+ if (!swapchain->target && FAILED(hr = IDXGISwapChain1_GetContainingOutput(iface, &swapchain->target)))
+ return hr;
+
+ *target = swapchain->target;
IDXGIOutput_AddRef(*target);
+ }
+ else
+ {
+ *target = NULL;
+ }
}
return S_OK;
diff --git a/dlls/dxgi/tests/dxgi.c b/dlls/dxgi/tests/dxgi.c
index af396e9acf..f82c3d5f5b 100644
--- a/dlls/dxgi/tests/dxgi.c
+++ b/dlls/dxgi/tests/dxgi.c
@@ -5455,7 +5455,7 @@ static void test_window_association(void)
ok(fullscreen == tests[i].expect_fullscreen
|| broken(tests[i].broken_d3d10 && fullscreen),
"Test %u: Got unexpected fullscreen %#x.\n", i, fullscreen);
- todo_wine_if(fullscreen) ok(fullscreen ? !!output : !output, "Got wrong output.\n");
+ ok(fullscreen ? !!output : !output, "Got wrong output.\n");
if (output)
IDXGIOutput_Release(output);
--
2.20.1
More information about the wine-devel
mailing list