summaryrefslogtreecommitdiffstats
path: root/video/out
diff options
context:
space:
mode:
authormsoxzw <56633971+msoxzw@users.noreply.github.com>2023-01-30 23:20:51 +0000
committerDudemanguy <random342@airmail.cc>2023-02-28 14:41:33 +0000
commit8006ff6cf6af462944cfbb9d4d816e40961a5de1 (patch)
treee130f5a58fee29b5b86c8fbe5624d116eaff30be /video/out
parent3e351a41e24522f5a2d979809e84106cbfbbb480 (diff)
downloadmpv-8006ff6cf6af462944cfbb9d4d816e40961a5de1.tar.bz2
mpv-8006ff6cf6af462944cfbb9d4d816e40961a5de1.tar.xz
vo_gpu: d3d11_helpers: prefer DXGI_SWAP_EFFECT_FLIP_DISCARD if possible
Similar to libplacebo[1], DXGI_SWAP_EFFECT_FLIP_DISCARD is used instead of DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL starting with Windows 10. [1]: https://github.com/haasn/libplacebo/blob/master/src/d3d11/swapchain.c
Diffstat (limited to 'video/out')
-rw-r--r--video/out/gpu/d3d11_helpers.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/video/out/gpu/d3d11_helpers.c b/video/out/gpu/d3d11_helpers.c
index 8aee0f69ba..54eaea94aa 100644
--- a/video/out/gpu/d3d11_helpers.c
+++ b/video/out/gpu/d3d11_helpers.c
@@ -640,7 +640,11 @@ static HRESULT create_swapchain_1_2(ID3D11Device *dev, IDXGIFactory2 *factory,
desc.BufferUsage &= ~DXGI_USAGE_UNORDERED_ACCESS;
}
- desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
+ if (IsWindows10OrGreater()) {
+ desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD;
+ } else {
+ desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
+ }
desc.BufferCount = opts->length;
} else {
desc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
@@ -931,7 +935,9 @@ bool mp_d3d11_create_swapchain(ID3D11Device *dev, struct mp_log *log,
DXGI_SWAP_CHAIN_DESC scd = {0};
IDXGISwapChain_GetDesc(swapchain, &scd);
- if (scd.SwapEffect == DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL) {
+ if (scd.SwapEffect == DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL ||
+ scd.SwapEffect == DXGI_SWAP_EFFECT_FLIP_DISCARD)
+ {
mp_verbose(log, "Using flip-model presentation\n");
} else {
mp_verbose(log, "Using bitblt-model presentation\n");