=?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