rework nested mutex lock on FetchFramebuffer
parent
0ef91c7f42
commit
313b4b81cc
|
@ -1811,7 +1811,6 @@ typedef struct VulkanRenderer
|
|||
|
||||
uint8_t needDefrag;
|
||||
uint32_t defragTimer;
|
||||
uint8_t resourceFreed;
|
||||
|
||||
#define VULKAN_INSTANCE_FUNCTION(ext, ret, func, params) \
|
||||
vkfntype_##func func;
|
||||
|
@ -2361,7 +2360,6 @@ static void VULKAN_INTERNAL_RemoveMemoryUsedRegion(
|
|||
|
||||
SDL_free(usedRegion);
|
||||
|
||||
renderer->resourceFreed = 1;
|
||||
SDL_UnlockMutex(renderer->allocatorLock);
|
||||
}
|
||||
|
||||
|
@ -8489,8 +8487,6 @@ static VulkanFramebuffer* VULKAN_INTERNAL_FetchFramebuffer(
|
|||
uint32_t attachmentCount = 0;
|
||||
uint32_t i;
|
||||
|
||||
SDL_LockMutex(renderer->framebufferFetchLock);
|
||||
|
||||
for (i = 0; i < MAX_COLOR_TARGET_BINDINGS; i += 1)
|
||||
{
|
||||
hash.colorAttachmentViews[i] = VK_NULL_HANDLE;
|
||||
|
@ -8551,14 +8547,17 @@ static VulkanFramebuffer* VULKAN_INTERNAL_FetchFramebuffer(
|
|||
hash.width = width;
|
||||
hash.height = height;
|
||||
|
||||
SDL_LockMutex(renderer->framebufferFetchLock);
|
||||
|
||||
vulkanFramebuffer = FramebufferHashArray_Fetch(
|
||||
&renderer->framebufferHashArray,
|
||||
&hash
|
||||
);
|
||||
|
||||
SDL_UnlockMutex(renderer->framebufferFetchLock);
|
||||
|
||||
if (vulkanFramebuffer != NULL)
|
||||
{
|
||||
SDL_UnlockMutex(renderer->framebufferFetchLock);
|
||||
return vulkanFramebuffer;
|
||||
}
|
||||
|
||||
|
@ -8637,11 +8636,15 @@ static VulkanFramebuffer* VULKAN_INTERNAL_FetchFramebuffer(
|
|||
|
||||
if (result == VK_SUCCESS)
|
||||
{
|
||||
SDL_LockMutex(renderer->framebufferFetchLock);
|
||||
|
||||
FramebufferHashArray_Insert(
|
||||
&renderer->framebufferHashArray,
|
||||
hash,
|
||||
vulkanFramebuffer
|
||||
);
|
||||
|
||||
SDL_UnlockMutex(renderer->framebufferFetchLock);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -8650,7 +8653,6 @@ static VulkanFramebuffer* VULKAN_INTERNAL_FetchFramebuffer(
|
|||
vulkanFramebuffer = NULL;
|
||||
}
|
||||
|
||||
SDL_UnlockMutex(renderer->framebufferFetchLock);
|
||||
return vulkanFramebuffer;
|
||||
}
|
||||
|
||||
|
@ -10246,7 +10248,11 @@ static void VULKAN_Wait(
|
|||
{
|
||||
LogVulkanResultAsError("vkWaitForFences", result);
|
||||
}
|
||||
}
|
||||
|
||||
for (i = renderer->submittedCommandBufferCount - 1; i >= 0; i -= 1)
|
||||
{
|
||||
commandBuffer = renderer->submittedCommandBuffers[i];
|
||||
VULKAN_INTERNAL_CleanCommandBuffer(renderer, commandBuffer);
|
||||
}
|
||||
|
||||
|
@ -11983,7 +11989,6 @@ static Refresh_Device* VULKAN_CreateDevice(
|
|||
|
||||
renderer->needDefrag = 0;
|
||||
renderer->defragTimer = 0;
|
||||
renderer->resourceFreed = 0;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue