mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-10-05 01:16:26 +00:00
GPU: Fix Vulkan backend never checking deallocations (#12567)
--------- Co-authored-by: Sam Lantinga <slouken@libsdl.org>
This commit is contained in:
@@ -1106,6 +1106,7 @@ struct VulkanRenderer
|
||||
|
||||
VulkanMemoryAllocator *memoryAllocator;
|
||||
VkPhysicalDeviceMemoryProperties memoryProperties;
|
||||
bool checkEmptyAllocations;
|
||||
|
||||
WindowData **claimedWindows;
|
||||
Uint32 claimedWindowCount;
|
||||
@@ -1546,6 +1547,10 @@ static void VULKAN_INTERNAL_RemoveMemoryUsedRegion(
|
||||
usedRegion->offset,
|
||||
usedRegion->size);
|
||||
|
||||
if (usedRegion->allocation->usedRegionCount == 0) {
|
||||
renderer->checkEmptyAllocations = true;
|
||||
}
|
||||
|
||||
SDL_free(usedRegion);
|
||||
|
||||
SDL_UnlockMutex(renderer->allocatorLock);
|
||||
@@ -10375,7 +10380,6 @@ static bool VULKAN_Submit(
|
||||
VkPipelineStageFlags waitStages[MAX_PRESENT_COUNT];
|
||||
Uint32 swapchainImageIndex;
|
||||
VulkanTextureSubresource *swapchainTextureSubresource;
|
||||
Uint8 commandBufferCleaned = 0;
|
||||
VulkanMemorySubAllocator *allocator;
|
||||
bool presenting = false;
|
||||
|
||||
@@ -10491,12 +10495,10 @@ static bool VULKAN_Submit(
|
||||
renderer,
|
||||
renderer->submittedCommandBuffers[i],
|
||||
false);
|
||||
|
||||
commandBufferCleaned = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (commandBufferCleaned) {
|
||||
if (renderer->checkEmptyAllocations) {
|
||||
SDL_LockMutex(renderer->allocatorLock);
|
||||
|
||||
for (Uint32 i = 0; i < VK_MAX_MEMORY_TYPES; i += 1) {
|
||||
@@ -10512,6 +10514,8 @@ static bool VULKAN_Submit(
|
||||
}
|
||||
}
|
||||
|
||||
renderer->checkEmptyAllocations = false;
|
||||
|
||||
SDL_UnlockMutex(renderer->allocatorLock);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user