From a739c1cef8166d8259741939a3b5f0e3e7da8d10 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 19 Jan 2026 14:53:23 -0600 Subject: [PATCH] Fix D3D11 fence sharing without monitored fence support --- app/streaming/video/ffmpeg-renderers/d3d11va.cpp | 10 +++++++--- app/streaming/video/ffmpeg-renderers/d3d11va.h | 9 ++++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/app/streaming/video/ffmpeg-renderers/d3d11va.cpp b/app/streaming/video/ffmpeg-renderers/d3d11va.cpp index 63d7eb6c..a18bf47b 100644 --- a/app/streaming/video/ffmpeg-renderers/d3d11va.cpp +++ b/app/streaming/video/ffmpeg-renderers/d3d11va.cpp @@ -136,8 +136,14 @@ D3D11VARenderer::~D3D11VARenderer() bool D3D11VARenderer::createSharedFencePair(UINT64 initialValue, ID3D11Device5* dev1, ID3D11Device5* dev2, ComPtr& dev1Fence, ComPtr& dev2Fence) { HRESULT hr; + D3D11_FENCE_FLAG flags; - hr = dev1->CreateFence(initialValue, D3D11_FENCE_FLAG_SHARED, IID_PPV_ARGS(&dev1Fence)); + flags = D3D11_FENCE_FLAG_SHARED; + if (m_FenceType == SupportedFenceType::NonMonitored) { + flags |= D3D11_FENCE_FLAG_NON_MONITORED; + } + + hr = dev1->CreateFence(initialValue, flags, IID_PPV_ARGS(&dev1Fence)); if (FAILED(hr)) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "ID3D11Device5::CreateFence() failed: %x", @@ -238,9 +244,7 @@ Exit: m_RenderD2RFence.Reset(); m_DecodeR2DFence.Reset(); m_RenderR2DFence.Reset(); - m_DecodeDevice.Reset(); - m_RenderDevice.Reset(); } return success; diff --git a/app/streaming/video/ffmpeg-renderers/d3d11va.h b/app/streaming/video/ffmpeg-renderers/d3d11va.h index 7ab835ea..fd4f268f 100644 --- a/app/streaming/video/ffmpeg-renderers/d3d11va.h +++ b/app/streaming/video/ffmpeg-renderers/d3d11va.h @@ -53,11 +53,10 @@ private: bool checkDecoderSupport(IDXGIAdapter* adapter); bool createDeviceByAdapterIndex(int adapterIndex, bool* adapterNotFound = nullptr); bool setupSharedDevice(IDXGIAdapter1* adapter); - - static bool createSharedFencePair(UINT64 initialValue, - ID3D11Device5* dev1, ID3D11Device5* dev2, - Microsoft::WRL::ComPtr& dev1Fence, - Microsoft::WRL::ComPtr& dev2Fence); + bool createSharedFencePair(UINT64 initialValue, + ID3D11Device5* dev1, ID3D11Device5* dev2, + Microsoft::WRL::ComPtr& dev1Fence, + Microsoft::WRL::ComPtr& dev2Fence); int m_DecoderSelectionPass; int m_DevicesWithFL11Support;