From 6b91b87dba669f1db208a3422aadf0c5fd16aa96 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Thu, 10 Feb 2022 21:27:44 +0100 Subject: [PATCH] [dxvk] Reorganize DxvkBuffer data structure Should hopefully reduce CPU cache conflicts. --- src/dxvk/dxvk_buffer.h | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/dxvk/dxvk_buffer.h b/src/dxvk/dxvk_buffer.h index f17abba26..da98bb2d9 100644 --- a/src/dxvk/dxvk_buffer.h +++ b/src/dxvk/dxvk_buffer.h @@ -289,21 +289,23 @@ namespace dxvk { DxvkBufferHandle m_buffer; DxvkBufferSliceHandle m_physSlice; - uint32_t m_vertexStride = 0; + + alignas(CACHE_LINE_SIZE) + sync::Spinlock m_freeMutex; + uint32_t m_lazyAlloc = false; - - sync::Spinlock m_freeMutex; - sync::Spinlock m_swapMutex; - - std::vector m_buffers; - std::vector m_freeSlices; - std::vector m_nextSlices; - - VkDeviceSize m_physSliceLength = 0; - VkDeviceSize m_physSliceStride = 0; - VkDeviceSize m_physSliceCount = 1; - VkDeviceSize m_physSliceMaxCount = 1; + VkDeviceSize m_physSliceLength = 0; + VkDeviceSize m_physSliceStride = 0; + VkDeviceSize m_physSliceCount = 1; + VkDeviceSize m_physSliceMaxCount = 1; + + std::vector m_buffers; + std::vector m_freeSlices; + + alignas(CACHE_LINE_SIZE) + sync::Spinlock m_swapMutex; + std::vector m_nextSlices; void pushSlice(const DxvkBufferHandle& handle, uint32_t index) { DxvkBufferSliceHandle slice;