mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-06-01 23:07:45 +08:00
GPU: Fix Vulkan backend never checking deallocations (#12567)
---------
Co-authored-by: Sam Lantinga <slouken@libsdl.org>
(cherry picked from commit 0bd70684b3)
This commit is contained in:
committed by
Sam Lantinga
parent
cd673c8254
commit
daf468e141
@@ -1135,6 +1135,7 @@ struct VulkanRenderer
|
|||||||
|
|
||||||
VulkanMemoryAllocator *memoryAllocator;
|
VulkanMemoryAllocator *memoryAllocator;
|
||||||
VkPhysicalDeviceMemoryProperties memoryProperties;
|
VkPhysicalDeviceMemoryProperties memoryProperties;
|
||||||
|
bool checkEmptyAllocations;
|
||||||
|
|
||||||
WindowData **claimedWindows;
|
WindowData **claimedWindows;
|
||||||
Uint32 claimedWindowCount;
|
Uint32 claimedWindowCount;
|
||||||
@@ -1577,6 +1578,10 @@ static void VULKAN_INTERNAL_RemoveMemoryUsedRegion(
|
|||||||
usedRegion->offset,
|
usedRegion->offset,
|
||||||
usedRegion->size);
|
usedRegion->size);
|
||||||
|
|
||||||
|
if (usedRegion->allocation->usedRegionCount == 0) {
|
||||||
|
renderer->checkEmptyAllocations = true;
|
||||||
|
}
|
||||||
|
|
||||||
SDL_free(usedRegion);
|
SDL_free(usedRegion);
|
||||||
|
|
||||||
SDL_UnlockMutex(renderer->allocatorLock);
|
SDL_UnlockMutex(renderer->allocatorLock);
|
||||||
@@ -10433,7 +10438,6 @@ static bool VULKAN_Submit(
|
|||||||
VkPipelineStageFlags waitStages[MAX_PRESENT_COUNT];
|
VkPipelineStageFlags waitStages[MAX_PRESENT_COUNT];
|
||||||
Uint32 swapchainImageIndex;
|
Uint32 swapchainImageIndex;
|
||||||
VulkanTextureSubresource *swapchainTextureSubresource;
|
VulkanTextureSubresource *swapchainTextureSubresource;
|
||||||
Uint8 commandBufferCleaned = 0;
|
|
||||||
VulkanMemorySubAllocator *allocator;
|
VulkanMemorySubAllocator *allocator;
|
||||||
bool presenting = false;
|
bool presenting = false;
|
||||||
|
|
||||||
@@ -10549,12 +10553,10 @@ static bool VULKAN_Submit(
|
|||||||
renderer,
|
renderer,
|
||||||
renderer->submittedCommandBuffers[i],
|
renderer->submittedCommandBuffers[i],
|
||||||
false);
|
false);
|
||||||
|
|
||||||
commandBufferCleaned = 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (commandBufferCleaned) {
|
if (renderer->checkEmptyAllocations) {
|
||||||
SDL_LockMutex(renderer->allocatorLock);
|
SDL_LockMutex(renderer->allocatorLock);
|
||||||
|
|
||||||
for (Uint32 i = 0; i < VK_MAX_MEMORY_TYPES; i += 1) {
|
for (Uint32 i = 0; i < VK_MAX_MEMORY_TYPES; i += 1) {
|
||||||
@@ -10570,6 +10572,8 @@ static bool VULKAN_Submit(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
renderer->checkEmptyAllocations = false;
|
||||||
|
|
||||||
SDL_UnlockMutex(renderer->allocatorLock);
|
SDL_UnlockMutex(renderer->allocatorLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user