From c0c6d2f9fd3c418298dde4a39ef49dd803d57aea Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Mon, 9 Jan 2023 18:10:34 -0800 Subject: [PATCH 1/2] change vkWaitForFences call to vkGetFenceStatus --- src/Refresh_Driver_Vulkan.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/Refresh_Driver_Vulkan.c b/src/Refresh_Driver_Vulkan.c index e94b93e..4870066 100644 --- a/src/Refresh_Driver_Vulkan.c +++ b/src/Refresh_Driver_Vulkan.c @@ -9955,13 +9955,9 @@ static void VULKAN_Submit( for (i = renderer->submittedCommandBufferCount - 1; i >= 0; i -= 1) { - /* If we set a timeout of 0, we can query the command buffer state */ - vulkanResult = renderer->vkWaitForFences( + vulkanResult = renderer->vkGetFenceStatus( renderer->logicalDevice, - 1, - &renderer->submittedCommandBuffers[i]->inFlightFence, - VK_TRUE, - 0 + renderer->submittedCommandBuffers[i]->inFlightFence ); if (vulkanResult == VK_SUCCESS) -- 2.25.1 From 8edab57f7bcda2350e2f328582afbe6b5c79d0d5 Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Tue, 10 Jan 2023 13:02:35 -0800 Subject: [PATCH 2/2] move reset calls to Clean instead of Acquire --- src/Refresh_Driver_Vulkan.c | 47 ++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/src/Refresh_Driver_Vulkan.c b/src/Refresh_Driver_Vulkan.c index 4870066..77eb353 100644 --- a/src/Refresh_Driver_Vulkan.c +++ b/src/Refresh_Driver_Vulkan.c @@ -9227,27 +9227,6 @@ static Refresh_CommandBuffer* VULKAN_AcquireCommandBuffer( commandBuffer->renderPassInProgress = 0; commandBuffer->renderPassColorTargetCount = 0; - result = renderer->vkResetCommandBuffer( - commandBuffer->commandBuffer, - VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT - ); - - if (result != VK_SUCCESS) - { - LogVulkanResultAsError("vkResetCommandBuffer", result); - } - - result = renderer->vkResetFences( - renderer->logicalDevice, - 1, - &commandBuffer->inFlightFence - ); - - if (result != VK_SUCCESS) - { - LogVulkanResultAsError("vkResetFences", result); - } - VULKAN_INTERNAL_BeginCommandBuffer(renderer, commandBuffer); return (Refresh_CommandBuffer*) commandBuffer; @@ -9651,6 +9630,7 @@ static void VULKAN_INTERNAL_CleanCommandBuffer( uint32_t i; VulkanUniformBuffer *uniformBuffer; DescriptorSetData *descriptorSetData; + VkResult result; /* Bound uniform buffers are now available */ @@ -9780,12 +9760,35 @@ static void VULKAN_INTERNAL_CleanCommandBuffer( SDL_UnlockMutex(renderer->acquireCommandBufferLock); - /* Resent presentation data */ + /* Reset presentation data */ commandBuffer->presentDataCount = 0; commandBuffer->waitSemaphoreCount = 0; commandBuffer->signalSemaphoreCount = 0; + /* Reset Vulkan state */ + + result = renderer->vkResetCommandBuffer( + commandBuffer->commandBuffer, + VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT + ); + + if (result != VK_SUCCESS) + { + LogVulkanResultAsError("vkResetCommandBuffer", result); + } + + result = renderer->vkResetFences( + renderer->logicalDevice, + 1, + &commandBuffer->inFlightFence + ); + + if (result != VK_SUCCESS) + { + LogVulkanResultAsError("vkResetFences", result); + } + /* Remove this command buffer from the submitted list */ for (i = 0; i < renderer->submittedCommandBufferCount; i += 1) { -- 2.25.1