=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: dxgi: Implement dxgi_swapchain_GetDesc1 ().
Alexandre Julliard
julliard at winehq.org
Mon Jan 22 15:34:55 CST 2018
Module: wine
Branch: master
Commit: 0e4250c59581b2d6e893b6f4c3bbbe93eabd134f
URL: https://source.winehq.org/git/wine.git/?a=commit;h=0e4250c59581b2d6e893b6f4c3bbbe93eabd134f
Author: Józef Kucia <jkucia at codeweavers.com>
Date: Mon Jan 22 14:11:54 2018 +0100
dxgi: Implement dxgi_swapchain_GetDesc1().
Signed-off-by: Józef Kucia <jkucia 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 | 32 ++++++++++++++++++++++++++++++--
dlls/dxgi/tests/device.c | 10 ++++++++++
2 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c
index ec9b2b4..fe7e5cc 100644
--- a/dlls/dxgi/swapchain.c
+++ b/dlls/dxgi/swapchain.c
@@ -429,9 +429,37 @@ static HRESULT STDMETHODCALLTYPE dxgi_swapchain_GetLastPresentCount(IDXGISwapCha
static HRESULT STDMETHODCALLTYPE dxgi_swapchain_GetDesc1(IDXGISwapChain1 *iface, DXGI_SWAP_CHAIN_DESC1 *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 Stereo, BufferUsage, Scaling, SwapEffect and AlphaMode.\n");
+
+ desc->Width = wined3d_desc.backbuffer_width;
+ desc->Height = wined3d_desc.backbuffer_height;
+ desc->Format = dxgi_format_from_wined3dformat(wined3d_desc.backbuffer_format);
+ desc->Stereo = FALSE;
+ dxgi_sample_desc_from_wined3d(&desc->SampleDesc,
+ wined3d_desc.multisample_type, wined3d_desc.multisample_quality);
+ desc->BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
+ desc->BufferCount = wined3d_desc.backbuffer_count;
+ desc->Scaling = DXGI_SCALING_STRETCH;
+ desc->SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
+ desc->AlphaMode = DXGI_ALPHA_MODE_IGNORE;
+ desc->Flags = dxgi_swapchain_flags_from_wined3d(wined3d_desc.flags);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE dxgi_swapchain_GetFullscreenDesc(IDXGISwapChain1 *iface,
diff --git a/dlls/dxgi/tests/device.c b/dlls/dxgi/tests/device.c
index 18306db..ea10ff5 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_DESC1 swapchain_desc;
IDXGIDevice *device, *bgra_device;
ULONG refcount, expected_refcount;
IUnknown *obj, *obj2, *parent;
@@ -968,6 +969,15 @@ static void test_create_swapchain(void)
"Failed to query IDXGISwapChain1 interface, hr %#x.\n", hr);
if (SUCCEEDED(hr))
{
+ hr = IDXGISwapChain1_GetDesc1(swapchain1, NULL);
+ ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+ hr = IDXGISwapChain1_GetDesc1(swapchain1, &swapchain_desc);
+ ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+ ok(!swapchain_desc.Stereo, "Got unexpected stereo %#x.\n", swapchain_desc.Stereo);
+ ok(swapchain_desc.Scaling == DXGI_SCALING_STRETCH,
+ "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_GetHwnd(swapchain1, &window);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
ok(window == creation_desc.OutputWindow, "Got unexpected window %p.\n", window);
More information about the wine-cvs
mailing list