From a7c1e7a2a066269b535f36d8138d89cb4450d681 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Fri, 14 Feb 2025 19:53:56 +0100 Subject: [PATCH] [dxvk] Add resource flag to track graphics pipeline side effects --- src/dxvk/dxvk_sparse.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/dxvk/dxvk_sparse.h b/src/dxvk/dxvk_sparse.h index 7eb9385a9..d6e71ca17 100644 --- a/src/dxvk/dxvk_sparse.h +++ b/src/dxvk/dxvk_sparse.h @@ -580,6 +580,27 @@ namespace dxvk { m_trackId = 0u; } + /** + * \brief Checks whether the buffer has been used for gfx stores + * + * \returns \c true if any graphics pipeline has written this + * resource via transform feedback or a storage descriptor. + */ + bool hasGfxStores() const { + return m_hasGfxStores; + } + + /** + * \brief Tracks graphics pipeline side effects + * + * Must be called whenever the resource is written via graphics + * pipeline storage descriptors or transform feedback. + * \returns \c true if side effects were already tracked. + */ + bool trackGfxStores() { + return std::exchange(m_hasGfxStores, true); + } + /** * \brief Queries sparse page table * @@ -622,6 +643,8 @@ namespace dxvk { uint64_t m_trackId = { 0u }; uint64_t m_cookie = { 0u }; + bool m_hasGfxStores = false; + static constexpr uint64_t getIncrement(DxvkAccess access) { return uint64_t(1u) << (uint32_t(access) * 20u); }