Skip to content

Commit

Permalink
Merge pull request hrydgard#10440 from unknownbrackets/vulkan-leak
Browse files Browse the repository at this point in the history
Vulkan: Decimate the texture allocator
  • Loading branch information
hrydgard authored Dec 24, 2017
2 parents 1c9e970 + a7b3a1e commit 9b909b4
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 5 deletions.
4 changes: 2 additions & 2 deletions Common/Vulkan/VulkanMemory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ void VulkanPushBuffer::Unmap() {
}

VulkanDeviceAllocator::VulkanDeviceAllocator(VulkanContext *vulkan, size_t minSlabSize, size_t maxSlabSize)
: vulkan_(vulkan), lastSlab_(0), minSlabSize_(minSlabSize), maxSlabSize_(maxSlabSize), memoryTypeIndex_(UNDEFINED_MEMORY_TYPE), destroyed_(false) {
: vulkan_(vulkan), minSlabSize_(minSlabSize), maxSlabSize_(maxSlabSize) {
assert((minSlabSize_ & (SLAB_GRAIN_SIZE - 1)) == 0);
}

Expand Down Expand Up @@ -290,7 +290,7 @@ int VulkanDeviceAllocator::ComputeUsagePercent() const {
blocksUsed += slabs_[i].usage[j] != 0 ? 1 : 0;
}
}
return 100 * blocksUsed / blockSum;
return blockSum == 0 ? 0 : 100 * blocksUsed / blockSum;
}

void VulkanDeviceAllocator::Free(VkDeviceMemory deviceMemory, size_t offset) {
Expand Down
6 changes: 3 additions & 3 deletions Common/Vulkan/VulkanMemory.h
Original file line number Diff line number Diff line change
Expand Up @@ -190,9 +190,9 @@ class VulkanDeviceAllocator {

VulkanContext *const vulkan_;
std::vector<Slab> slabs_;
size_t lastSlab_;
size_t lastSlab_ = 0;
size_t minSlabSize_;
const size_t maxSlabSize_;
uint32_t memoryTypeIndex_;
bool destroyed_;
uint32_t memoryTypeIndex_ = UNDEFINED_MEMORY_TYPE;
bool destroyed_ = false;
};
2 changes: 2 additions & 0 deletions ext/native/thin3d/thin3d_vulkan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -779,6 +779,7 @@ void VKContext::BeginFrame() {
// OK, we now know that nothing is reading from this frame's data pushbuffer,
push_->Reset();
push_->Begin(vulkan_);
allocator_->Begin();

frame.descSets_.clear();
VkResult result = vkResetDescriptorPool(device_, frame.descriptorPool, 0);
Expand All @@ -792,6 +793,7 @@ void VKContext::WaitRenderCompletion(Framebuffer *fbo) {
void VKContext::EndFrame() {
// Stop collecting data in the frame's data pushbuffer.
push_->End();
allocator_->End();

renderManager_.Finish();

Expand Down

0 comments on commit 9b909b4

Please sign in to comment.