[PATCH 4/5] dxgi: Translate swap effects in dxgi_factory_CreateSwapChainForHwnd().

Henri Verbeet hverbeet at codeweavers.com
Thu Feb 15 00:05:18 CST 2018


Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
 dlls/dxgi/factory.c      | 13 ++++++++++---
 dlls/wined3d/swapchain.c |  3 ++-
 include/wine/wined3d.h   |  1 +
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/dlls/dxgi/factory.c b/dlls/dxgi/factory.c
index 00ca122..7fc3279 100644
--- a/dlls/dxgi/factory.c
+++ b/dlls/dxgi/factory.c
@@ -275,12 +275,22 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CreateSwapChainForHwnd(IWineDXGIFa
     switch (swapchain_desc->SwapEffect)
     {
         case DXGI_SWAP_EFFECT_DISCARD:
+            wined3d_desc.swap_effect = WINED3D_SWAP_EFFECT_DISCARD;
+            min_buffer_count = 1;
+            break;
+
         case DXGI_SWAP_EFFECT_SEQUENTIAL:
+            wined3d_desc.swap_effect = WINED3D_SWAP_EFFECT_SEQUENTIAL;
             min_buffer_count = 1;
             break;
 
         case DXGI_SWAP_EFFECT_FLIP_DISCARD:
+            wined3d_desc.swap_effect = WINED3D_SWAP_EFFECT_FLIP_DISCARD;
+            min_buffer_count = 2;
+            break;
+
         case DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL:
+            wined3d_desc.swap_effect = WINED3D_SWAP_EFFECT_FLIP_SEQUENTIAL;
             min_buffer_count = 2;
             break;
 
@@ -303,8 +313,6 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CreateSwapChainForHwnd(IWineDXGIFa
 
     if (swapchain_desc->Scaling != DXGI_SCALING_STRETCH)
         FIXME("Ignoring scaling %#x.\n", swapchain_desc->Scaling);
-    if (swapchain_desc->SwapEffect)
-        FIXME("Ignoring swap effect %#x.\n", swapchain_desc->SwapEffect);
     if (swapchain_desc->AlphaMode != DXGI_ALPHA_MODE_IGNORE)
         FIXME("Ignoring alpha mode %#x.\n", swapchain_desc->AlphaMode);
     if (fullscreen_desc && fullscreen_desc->ScanlineOrdering)
@@ -319,7 +327,6 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CreateSwapChainForHwnd(IWineDXGIFa
     wined3d_desc.backbuffer_usage = wined3d_usage_from_dxgi_usage(swapchain_desc->BufferUsage);
     wined3d_sample_desc_from_dxgi(&wined3d_desc.multisample_type,
             &wined3d_desc.multisample_quality, &swapchain_desc->SampleDesc);
-    wined3d_desc.swap_effect = WINED3D_SWAP_EFFECT_DISCARD;
     wined3d_desc.device_window = window;
     wined3d_desc.windowed = fullscreen_desc ? fullscreen_desc->Windowed : TRUE;
     wined3d_desc.enable_auto_depth_stencil = FALSE;
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index 2729df2..0d76b67 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -505,7 +505,8 @@ static void swapchain_gl_present(struct wined3d_swapchain *swapchain,
      * The FLIP swap effect is not implemented yet. We could mark WINED3D_LOCATION_DRAWABLE
      * up to date and hope WGL flipped front and back buffers and read this data into
      * the FBO. Don't bother about this for now. */
-    if (swapchain->desc.swap_effect == WINED3D_SWAP_EFFECT_DISCARD)
+    if (swapchain->desc.swap_effect == WINED3D_SWAP_EFFECT_DISCARD
+            || swapchain->desc.swap_effect == WINED3D_SWAP_EFFECT_FLIP_DISCARD)
         wined3d_texture_validate_location(swapchain->back_buffers[swapchain->desc.backbuffer_count - 1],
                 0, WINED3D_LOCATION_DISCARDED);
 
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index 22bb2d8..1e3c08b 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -507,6 +507,7 @@ enum wined3d_swap_effect
 {
     WINED3D_SWAP_EFFECT_DISCARD,
     WINED3D_SWAP_EFFECT_SEQUENTIAL,
+    WINED3D_SWAP_EFFECT_FLIP_DISCARD,
     WINED3D_SWAP_EFFECT_FLIP_SEQUENTIAL,
     WINED3D_SWAP_EFFECT_COPY,
     WINED3D_SWAP_EFFECT_COPY_VSYNC,
-- 
2.1.4




More information about the wine-devel mailing list