From afe1840c7491f6e5d9439818b2137368c46ac8fa Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Wed, 9 Feb 2022 13:14:10 +0100 Subject: [PATCH] [d3d11] Track resources when dispatching Cubin shaders as well --- src/d3d11/d3d11_context.cpp | 21 +++++++++++++++++++++ src/d3d11/d3d11_context.h | 3 +++ src/d3d11/d3d11_context_ext.cpp | 7 +++++++ 3 files changed, 31 insertions(+) diff --git a/src/d3d11/d3d11_context.cpp b/src/d3d11/d3d11_context.cpp index 2acd52f6..3171db31 100644 --- a/src/d3d11/d3d11_context.cpp +++ b/src/d3d11/d3d11_context.cpp @@ -4529,4 +4529,25 @@ namespace dxvk { pMsState->enableAlphaToCoverage = VK_FALSE; } + + void D3D11DeviceContext::TrackResourceSequenceNumber( + ID3D11Resource* pResource) { + if (!pResource) + return; + + D3D11CommonTexture* texture = GetCommonTexture(pResource); + + if (texture) { + if (texture->HasSequenceNumber()) { + for (uint32_t i = 0; i < texture->CountSubresources(); i++) + TrackTextureSequenceNumber(texture, i); + } + } else { + D3D11Buffer* buffer = static_cast(pResource); + + if (buffer->HasSequenceNumber()) + TrackBufferSequenceNumber(buffer); + } + } + } diff --git a/src/d3d11/d3d11_context.h b/src/d3d11/d3d11_context.h index 82500721..48b84427 100644 --- a/src/d3d11/d3d11_context.h +++ b/src/d3d11/d3d11_context.h @@ -1068,6 +1068,9 @@ namespace dxvk { } } + void TrackResourceSequenceNumber( + ID3D11Resource* pResource); + virtual void EmitCsChunk(DxvkCsChunkRef&& chunk) = 0; virtual void TrackTextureSequenceNumber( diff --git a/src/d3d11/d3d11_context_ext.cpp b/src/d3d11/d3d11_context_ext.cpp index c892f7ef..ecd41e83 100644 --- a/src/d3d11/d3d11_context_ext.cpp +++ b/src/d3d11/d3d11_context_ext.cpp @@ -193,6 +193,13 @@ namespace dxvk { ctx->launchCuKernelNVX(cLaunchInfo.nvxLaunchInfo, cLaunchInfo.buffers, cLaunchInfo.images); }); + // Track resource usage as necessary + for (uint32_t i = 0; i < NumReadResources; i++) + m_ctx->TrackResourceSequenceNumber(static_cast(pReadResources[i])); + + for (uint32_t i = 0; i < NumWriteResources; i++) + m_ctx->TrackResourceSequenceNumber(static_cast(pWriteResources[i])); + return true; } }