Zhiyi Zhang : dxgi: Support creating a fullscreen swapchain on d3d12.
Alexandre Julliard
julliard at winehq.org
Mon Oct 5 15:54:59 CDT 2020
Module: wine
Branch: master
Commit: 0a322f0ca596f460a480ab3f619eeabb66b07223
URL: https://source.winehq.org/git/wine.git/?a=commit;h=0a322f0ca596f460a480ab3f619eeabb66b07223
Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date: Mon Oct 5 17:24:06 2020 +0800
dxgi: Support creating a fullscreen swapchain on d3d12.
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/dxgi/swapchain.c | 27 ++++++++++++++++++++++++---
dlls/dxgi/tests/dxgi.c | 3 +--
2 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c
index c8f1502a13..d778ab9e03 100644
--- a/dlls/dxgi/swapchain.c
+++ b/dlls/dxgi/swapchain.c
@@ -2981,11 +2981,34 @@ static HRESULT d3d12_swapchain_init(struct d3d12_swapchain *swapchain, IWineDXGI
hr = wined3d_swapchain_desc_from_dxgi(&wined3d_desc, output, window, swapchain_desc,
fullscreen_desc);
- IDXGIOutput_Release(output);
if (FAILED(hr))
+ {
+ IDXGIOutput_Release(output);
return hr;
+ }
+
if (FAILED(hr = wined3d_swapchain_state_create(&wined3d_desc, window, &swapchain->state)))
+ {
+ IDXGIOutput_Release(output);
return hr;
+ }
+
+ if (!fullscreen_desc->Windowed)
+ {
+ hr = wined3d_swapchain_state_set_fullscreen(swapchain->state, &wined3d_desc, NULL);
+ if (FAILED(hr))
+ {
+ wined3d_swapchain_state_destroy(swapchain->state);
+ IDXGIOutput_Release(output);
+ return hr;
+ }
+
+ swapchain->target = output;
+ }
+ else
+ {
+ IDXGIOutput_Release(output);
+ }
if (swapchain_desc->BufferUsage && swapchain_desc->BufferUsage != DXGI_USAGE_RENDER_TARGET_OUTPUT)
FIXME("Ignoring buffer usage %#x.\n", swapchain_desc->BufferUsage);
@@ -3002,8 +3025,6 @@ static HRESULT d3d12_swapchain_init(struct d3d12_swapchain *swapchain, IWineDXGI
FIXME("Unhandled scanline ordering %#x.\n", fullscreen_desc->ScanlineOrdering);
if (fullscreen_desc->Scaling)
FIXME("Unhandled mode scaling %#x.\n", fullscreen_desc->Scaling);
- if (!fullscreen_desc->Windowed)
- FIXME("Fullscreen not supported yet.\n");
vk_instance = vkd3d_instance_get_vk_instance(vkd3d_instance_from_device(device));
vk_physical_device = vkd3d_get_vk_physical_device(device);
diff --git a/dlls/dxgi/tests/dxgi.c b/dlls/dxgi/tests/dxgi.c
index e6b5a4e66b..f747e236f3 100644
--- a/dlls/dxgi/tests/dxgi.c
+++ b/dlls/dxgi/tests/dxgi.c
@@ -2953,7 +2953,6 @@ static void test_default_fullscreen_target_output(IUnknown *device, BOOL is_d3d1
ok(SUCCEEDED(hr), "Adapter %u output %u: GetFullscreenState failed, hr %#x.\n",
adapter_idx, output_idx, hr);
ok(fullscreen, "Adapter %u output %u: Expected fullscreen.\n", adapter_idx, output_idx);
- todo_wine_if(is_d3d12)
ok(!!containing_output, "Adapter %u output %u: Expected a valid output.\n", adapter_idx,
output_idx);
if (containing_output)
@@ -2962,7 +2961,7 @@ static void test_default_fullscreen_target_output(IUnknown *device, BOOL is_d3d1
ret = GetWindowRect(swapchain_desc.OutputWindow, &window_rect);
ok(ret, "Adapter %u output %u: GetWindowRect failed, error %#x.\n", adapter_idx,
output_idx, GetLastError());
- todo_wine_if(is_d3d12) ok(EqualRect(&window_rect, &output_desc.DesktopCoordinates),
+ ok(EqualRect(&window_rect, &output_desc.DesktopCoordinates),
"Adapter %u output %u: Expect window rect %s, got %s.\n", adapter_idx,
output_idx, wine_dbgstr_rect(&output_desc.DesktopCoordinates),
wine_dbgstr_rect(&window_rect));
More information about the wine-cvs
mailing list