Fix D3D11 fence sharing without monitored fence support

This commit is contained in:
Cameron Gutman
2026-01-19 14:53:23 -06:00
parent f6e08f8a43
commit a739c1cef8
2 changed files with 11 additions and 8 deletions

View File

@@ -136,8 +136,14 @@ D3D11VARenderer::~D3D11VARenderer()
bool D3D11VARenderer::createSharedFencePair(UINT64 initialValue, ID3D11Device5* dev1, ID3D11Device5* dev2, ComPtr<ID3D11Fence>& dev1Fence, ComPtr<ID3D11Fence>& 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;

View File

@@ -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<ID3D11Fence>& dev1Fence,
Microsoft::WRL::ComPtr<ID3D11Fence>& dev2Fence);
bool createSharedFencePair(UINT64 initialValue,
ID3D11Device5* dev1, ID3D11Device5* dev2,
Microsoft::WRL::ComPtr<ID3D11Fence>& dev1Fence,
Microsoft::WRL::ComPtr<ID3D11Fence>& dev2Fence);
int m_DecoderSelectionPass;
int m_DevicesWithFL11Support;