From f6cdb91f55e22ddf82736cd4011a47b33c28400f Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Wed, 12 Feb 2020 22:29:31 +0900 Subject: [PATCH] d3d11window: Fix for broken dirty rect drawing on Windows 7 DXGI_SWAP_EFFECT_DISCARD cannot be used with dirty rect drawing feature of IDXGISwapChain1::Present(). Note that IDXGISwapChain1 interface is available on Platform Update for Windows 7 and DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL is also the case. --- sys/d3d11/gstd3d11window_win32.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/sys/d3d11/gstd3d11window_win32.cpp b/sys/d3d11/gstd3d11window_win32.cpp index 9e1dcc6225..01557b5942 100644 --- a/sys/d3d11/gstd3d11window_win32.cpp +++ b/sys/d3d11/gstd3d11window_win32.cpp @@ -717,13 +717,9 @@ gst_d3d11_window_win32_create_swap_chain (GstD3D11Window * window, { GstD3D11WindowWin32 *self = GST_D3D11_WINDOW_WIN32 (window); DXGI_SWAP_CHAIN_DESC desc = { 0, }; - DXGI_SWAP_EFFECT swap_effect = DXGI_SWAP_EFFECT_DISCARD; IDXGISwapChain *new_swapchain = NULL; GstD3D11Device *device = window->device; - if (gst_d3d11_is_windows_8_or_greater ()) - swap_effect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; - self->have_swapchain1 = FALSE; #if (DXGI_HEADER_VERSION >= 2) @@ -744,7 +740,7 @@ gst_d3d11_window_win32_create_swap_chain (GstD3D11Window * window, * but Windows7 does not support this method */ if (gst_d3d11_is_windows_8_or_greater ()) desc1.Scaling = DXGI_SCALING_NONE; - desc1.SwapEffect = swap_effect; + desc1.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; desc1.AlphaMode = DXGI_ALPHA_MODE_UNSPECIFIED; desc1.Flags = swapchain_flags; @@ -761,6 +757,11 @@ gst_d3d11_window_win32_create_swap_chain (GstD3D11Window * window, #endif if (!new_swapchain) { + DXGI_SWAP_EFFECT swap_effect = DXGI_SWAP_EFFECT_DISCARD; + + if (gst_d3d11_is_windows_8_or_greater ()) + swap_effect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; + /* we will get client area at on_resize */ desc.BufferDesc.Width = 0; desc.BufferDesc.Height = 0;