diff --git a/Common/GPU/Vulkan/VulkanMemory.cpp b/Common/GPU/Vulkan/VulkanMemory.cpp index e0bfa741e5..ae2f812e7a 100644 --- a/Common/GPU/Vulkan/VulkanMemory.cpp +++ b/Common/GPU/Vulkan/VulkanMemory.cpp @@ -45,8 +45,8 @@ std::vector GetActiveVulkanMemoryManagers() { return buffers; } -VulkanPushBuffer::VulkanPushBuffer(VulkanContext *vulkan, const char *name, size_t size, VkBufferUsageFlags usage, PushBufferType type) - : vulkan_(vulkan), name_(name), size_(size), usage_(usage), type_(type) { +VulkanPushBuffer::VulkanPushBuffer(VulkanContext *vulkan, const char *name, size_t size, VkBufferUsageFlags usage) + : vulkan_(vulkan), name_(name), size_(size), usage_(usage) { { std::lock_guard guard(g_pushBufferListMutex); g_pushBuffers.insert(this); @@ -79,7 +79,7 @@ bool VulkanPushBuffer::AddBuffer() { b.pQueueFamilyIndices = nullptr; VmaAllocationCreateInfo allocCreateInfo{}; - allocCreateInfo.usage = type_ == PushBufferType::CPU_TO_GPU ? VMA_MEMORY_USAGE_CPU_TO_GPU : VMA_MEMORY_USAGE_GPU_ONLY; + allocCreateInfo.usage = VMA_MEMORY_USAGE_CPU_TO_GPU; VmaAllocationInfo allocInfo{}; VkResult res = vmaCreateBuffer(vulkan_->Allocator(), &b, &allocCreateInfo, &info.buffer, &info.allocation, &allocInfo); @@ -105,8 +105,7 @@ void VulkanPushBuffer::Destroy(VulkanContext *vulkan) { void VulkanPushBuffer::NextBuffer(size_t minSize) { // First, unmap the current memory. - if (type_ == PushBufferType::CPU_TO_GPU) - Unmap(); + Unmap(); buf_++; if (buf_ >= buffers_.size() || minSize > size_) { @@ -125,8 +124,7 @@ void VulkanPushBuffer::NextBuffer(size_t minSize) { // Now, move to the next buffer and map it. offset_ = 0; - if (type_ == PushBufferType::CPU_TO_GPU) - Map(); + Map(); } void VulkanPushBuffer::Defragment(VulkanContext *vulkan) { diff --git a/Common/GPU/Vulkan/VulkanMemory.h b/Common/GPU/Vulkan/VulkanMemory.h index 5d4e4b8659..50b9f35da9 100644 --- a/Common/GPU/Vulkan/VulkanMemory.h +++ b/Common/GPU/Vulkan/VulkanMemory.h @@ -14,11 +14,6 @@ VK_DEFINE_HANDLE(VmaAllocation); // // Vulkan memory management utils. -enum class PushBufferType { - CPU_TO_GPU, - GPU_ONLY, -}; - // Just an abstract thing to get debug information. class VulkanMemoryManager { public: @@ -33,6 +28,7 @@ public: // Use these to push vertex, index and uniform data. Generally you'll have two or three of these // and alternate on each frame. Make sure not to reset until the fence from the last time you used it // has completed. +// NOTE: This has now been replaced with VulkanPushPool for all uses except the vertex cache. class VulkanPushBuffer : public VulkanMemoryManager { struct BufInfo { VkBuffer buffer; @@ -43,7 +39,7 @@ public: // NOTE: If you create a push buffer with PushBufferType::GPU_ONLY, // then you can't use any of the push functions as pointers will not be reachable from the CPU. // You must in this case use Allocate() only, and pass the returned offset and the VkBuffer to Vulkan APIs. - VulkanPushBuffer(VulkanContext *vulkan, const char *name, size_t size, VkBufferUsageFlags usage, PushBufferType type); + VulkanPushBuffer(VulkanContext *vulkan, const char *name, size_t size, VkBufferUsageFlags usage); ~VulkanPushBuffer(); void Destroy(VulkanContext *vulkan); @@ -61,19 +57,11 @@ public: offset_ = 0; // Note: we must defrag because some buffers may be smaller than size_. Defragment(vulkan); - if (type_ == PushBufferType::CPU_TO_GPU) - Map(); + Map(); } - void BeginNoReset() { - if (type_ == PushBufferType::CPU_TO_GPU) - Map(); - } - - void End() { - if (type_ == PushBufferType::CPU_TO_GPU) - Unmap(); - } + void BeginNoReset() { Map(); } + void End() { Unmap(); } void Map(); void Unmap(); @@ -107,7 +95,6 @@ private: void Defragment(VulkanContext *vulkan); VulkanContext *vulkan_; - PushBufferType type_; std::vector buffers_; size_t buf_ = 0; diff --git a/GPU/Vulkan/DrawEngineVulkan.cpp b/GPU/Vulkan/DrawEngineVulkan.cpp index 68302f8855..0d92bbef9b 100644 --- a/GPU/Vulkan/DrawEngineVulkan.cpp +++ b/GPU/Vulkan/DrawEngineVulkan.cpp @@ -205,7 +205,7 @@ void DrawEngineVulkan::InitDeviceObjects() { res = vkCreateSampler(device, &samp, nullptr, &nullSampler_); _dbg_assert_(VK_SUCCESS == res); - vertexCache_ = new VulkanPushBuffer(vulkan, "pushVertexCache", VERTEX_CACHE_SIZE, VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, PushBufferType::CPU_TO_GPU); + vertexCache_ = new VulkanPushBuffer(vulkan, "pushVertexCache", VERTEX_CACHE_SIZE, VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT); tessDataTransferVulkan = new TessellationDataTransferVulkan(vulkan); tessDataTransfer = tessDataTransferVulkan; @@ -312,7 +312,7 @@ void DrawEngineVulkan::BeginFrame() { if (vertexCache_->GetTotalSize() > VERTEX_CACHE_SIZE) { vertexCache_->Destroy(vulkan); delete vertexCache_; // orphans the buffers, they'll get deleted once no longer used by an in-flight frame. - vertexCache_ = new VulkanPushBuffer(vulkan, "vertexCacheR", VERTEX_CACHE_SIZE, VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, PushBufferType::CPU_TO_GPU); + vertexCache_ = new VulkanPushBuffer(vulkan, "vertexCacheR", VERTEX_CACHE_SIZE, VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT); vai_.Iterate([&](uint32_t hash, VertexArrayInfoVulkan *vai) { delete vai; });