[PATCH 4/5] dxgi: Implement dxgi_swapchain_GetDesc1().
Józef Kucia
jkucia at codeweavers.com
Mon Jan 22 07:11:54 CST 2018
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
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 ec9b2b43b6ba..fe7e5cc4bc88 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 18306db74818..ea10ff5ef863 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);
--
2.13.6
More information about the wine-devel
mailing list