=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: dxgi: Factor out dxgi_validate_swapchain_desc().

Alexandre Julliard julliard at winehq.org
Tue Sep 18 15:14:31 CDT 2018


Module: wine
Branch: master
Commit: e36af9284fa457f808f7bdf0d924cff97cc6a88a
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=e36af9284fa457f808f7bdf0d924cff97cc6a88a

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Tue Sep 18 16:06:00 2018 +0200

dxgi: Factor out dxgi_validate_swapchain_desc().

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/dxgi_private.h |  2 ++
 dlls/dxgi/factory.c      | 30 +-----------------------------
 dlls/dxgi/swapchain.c    | 37 +++++++++++++++++++++++++++++++++++++
 3 files changed, 40 insertions(+), 29 deletions(-)

diff --git a/dlls/dxgi/dxgi_private.h b/dlls/dxgi/dxgi_private.h
index 4967bd4..f74514f 100644
--- a/dlls/dxgi/dxgi_private.h
+++ b/dlls/dxgi/dxgi_private.h
@@ -182,6 +182,8 @@ HRESULT d3d12_swapchain_create(IWineDXGIFactory *factory, ID3D12CommandQueue *qu
         const DXGI_SWAP_CHAIN_DESC1 *swapchain_desc, const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *fullscreen_desc,
         IDXGISwapChain1 **swapchain) DECLSPEC_HIDDEN;
 
+BOOL dxgi_validate_swapchain_desc(const DXGI_SWAP_CHAIN_DESC1 *desc) DECLSPEC_HIDDEN;
+
 /* IDXGISurface */
 struct dxgi_surface
 {
diff --git a/dlls/dxgi/factory.c b/dlls/dxgi/factory.c
index cc9075a..a4577ae 100644
--- a/dlls/dxgi/factory.c
+++ b/dlls/dxgi/factory.c
@@ -251,7 +251,6 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CreateSwapChainForHwnd(IWineDXGIFa
         IDXGIOutput *output, IDXGISwapChain1 **swapchain)
 {
     ID3D12CommandQueue *command_queue;
-    unsigned int min_buffer_count;
     IWineDXGIDevice *dxgi_device;
     HRESULT hr;
 
@@ -270,35 +269,8 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CreateSwapChainForHwnd(IWineDXGIFa
         return DXGI_ERROR_UNSUPPORTED;
     }
 
-    switch (desc->SwapEffect)
-    {
-        case DXGI_SWAP_EFFECT_DISCARD:
-        case DXGI_SWAP_EFFECT_SEQUENTIAL:
-            min_buffer_count = 1;
-            break;
-
-        case DXGI_SWAP_EFFECT_FLIP_DISCARD:
-        case DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL:
-            min_buffer_count = 2;
-
-            if (desc->SampleDesc.Count != 1 || desc->SampleDesc.Quality)
-            {
-                WARN("Invalid sample desc %u, %u for swap effect %#x.\n",
-                        desc->SampleDesc.Count, desc->SampleDesc.Quality, desc->SwapEffect);
-                return DXGI_ERROR_INVALID_CALL;
-            }
-            break;
-
-        default:
-            WARN("Invalid swap effect %u used.\n", desc->SwapEffect);
-            return DXGI_ERROR_INVALID_CALL;
-    }
-
-    if (desc->BufferCount < min_buffer_count || desc->BufferCount > DXGI_MAX_SWAP_CHAIN_BUFFERS)
-    {
-        WARN("BufferCount is %u.\n", desc->BufferCount);
+    if (!dxgi_validate_swapchain_desc(desc))
         return DXGI_ERROR_INVALID_CALL;
-    }
 
     if (output)
         FIXME("Ignoring output %p.\n", output);
diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c
index f8e4f80..57d6b24 100644
--- a/dlls/dxgi/swapchain.c
+++ b/dlls/dxgi/swapchain.c
@@ -55,6 +55,43 @@ static DXGI_SWAP_EFFECT dxgi_swap_effect_from_wined3d(enum wined3d_swap_effect s
     }
 }
 
+BOOL dxgi_validate_swapchain_desc(const DXGI_SWAP_CHAIN_DESC1 *desc)
+{
+    unsigned int min_buffer_count;
+
+    switch (desc->SwapEffect)
+    {
+        case DXGI_SWAP_EFFECT_DISCARD:
+        case DXGI_SWAP_EFFECT_SEQUENTIAL:
+            min_buffer_count = 1;
+            break;
+
+        case DXGI_SWAP_EFFECT_FLIP_DISCARD:
+        case DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL:
+            min_buffer_count = 2;
+
+            if (desc->SampleDesc.Count != 1 || desc->SampleDesc.Quality)
+            {
+                WARN("Invalid sample desc %u, %u for swap effect %#x.\n",
+                        desc->SampleDesc.Count, desc->SampleDesc.Quality, desc->SwapEffect);
+                return FALSE;
+            }
+            break;
+
+        default:
+            WARN("Invalid swap effect %u used.\n", desc->SwapEffect);
+            return FALSE;
+    }
+
+    if (desc->BufferCount < min_buffer_count || desc->BufferCount > DXGI_MAX_SWAP_CHAIN_BUFFERS)
+    {
+        WARN("BufferCount is %u.\n", desc->BufferCount);
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
 static inline struct d3d11_swapchain *d3d11_swapchain_from_IDXGISwapChain1(IDXGISwapChain1 *iface)
 {
     return CONTAINING_RECORD(iface, struct d3d11_swapchain, IDXGISwapChain1_iface);




More information about the wine-cvs mailing list