diff --git a/Common/Vulkan/VulkanImage.cpp b/Common/Vulkan/VulkanImage.cpp index 3d7ce8ae87..928b2fcb77 100644 --- a/Common/Vulkan/VulkanImage.cpp +++ b/Common/Vulkan/VulkanImage.cpp @@ -119,14 +119,18 @@ void VulkanTexture::Unlock(VkCommandBuffer cmd) { mem_alloc.memoryTypeIndex = 0; mem_alloc.allocationSize = mem_reqs.size; - // Find memory type - don't specify any mapping requirements - bool pass = vulkan_->MemoryTypeFromProperties(mem_reqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, &mem_alloc.memoryTypeIndex); - assert(pass); + if (allocator_) { + offset_ = allocator_->Allocate(mem_reqs, &mem); + } else { + offset_ = 0; + // Find memory type - don't specify any mapping requirements + bool pass = vulkan_->MemoryTypeFromProperties(mem_reqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, &mem_alloc.memoryTypeIndex); + assert(pass); + res = vkAllocateMemory(vulkan_->GetDevice(), &mem_alloc, NULL, &mem); + assert(res == VK_SUCCESS); + } - res = vkAllocateMemory(vulkan_->GetDevice(), &mem_alloc, NULL, &mem); - assert(res == VK_SUCCESS); - - res = vkBindImageMemory(vulkan_->GetDevice(), image, mem, 0); + res = vkBindImageMemory(vulkan_->GetDevice(), image, mem, offset_); assert(res == VK_SUCCESS); // Since we're going to blit from the mappable image, set its layout to SOURCE_OPTIMAL diff --git a/ext/native/thin3d/thin3d_vulkan.cpp b/ext/native/thin3d/thin3d_vulkan.cpp index d16c4e9230..17fe1a2f37 100644 --- a/ext/native/thin3d/thin3d_vulkan.cpp +++ b/ext/native/thin3d/thin3d_vulkan.cpp @@ -765,6 +765,7 @@ VKContext::VKContext(VulkanContext *vulkan, bool splitSubmit) } VKContext::~VKContext() { + allocator_->Destroy(); delete allocator_; // This also destroys all descriptor sets. for (int i = 0; i < VulkanContext::MAX_INFLIGHT_FRAMES; i++) {