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; } }