From 38ff5af4481665276f7ba4c3b580c956d19c8f36 Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Wed, 12 Jan 2022 14:39:29 -0800 Subject: [PATCH] rotate uniform buffer if we run out of space --- src/Refresh_Driver_Vulkan.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/Refresh_Driver_Vulkan.c b/src/Refresh_Driver_Vulkan.c index 2f4cbf2..3f6302e 100644 --- a/src/Refresh_Driver_Vulkan.c +++ b/src/Refresh_Driver_Vulkan.c @@ -3381,7 +3381,6 @@ static void VULKAN_INTERNAL_CreateUniformBuffer( writeDescriptorSet.pImageInfo = NULL; writeDescriptorSet.pTexelBufferView = NULL; - /* FIXME: this needs a lock */ renderer->vkUpdateDescriptorSets( renderer->logicalDevice, 1, @@ -6900,9 +6899,13 @@ static uint32_t VULKAN_PushVertexShaderUniforms( graphicsPipeline->vertexUniformBlockSize >= UBO_BUFFER_SIZE ) { - /* FIXME: rotate another UBO in */ - Refresh_LogError("Vertex UBO overflow!"); - return 0; + /* We're out of space in this buffer, bind the old one and acquire a new one */ + VULKAN_INTERNAL_BindUniformBuffer(vulkanCommandBuffer->vertexUniformBuffer); + vulkanCommandBuffer->vertexUniformBuffer = VULKAN_INTERNAL_AcquireUniformBufferFromPool( + renderer, + renderer->vertexUniformBufferPool, + graphicsPipeline->vertexUniformBlockSize + ); } offset = vulkanCommandBuffer->vertexUniformBuffer->offset; @@ -6948,9 +6951,13 @@ static uint32_t VULKAN_PushFragmentShaderUniforms( graphicsPipeline->fragmentUniformBlockSize >= UBO_BUFFER_SIZE ) { - /* FIXME: rotate another UBO in */ - Refresh_LogError("Fragment UBO overflow!"); - return 0; + /* We're out of space in this buffer, bind the old one and acquire a new one */ + VULKAN_INTERNAL_BindUniformBuffer(vulkanCommandBuffer->fragmentUniformBuffer); + vulkanCommandBuffer->fragmentUniformBuffer = VULKAN_INTERNAL_AcquireUniformBufferFromPool( + renderer, + renderer->fragmentUniformBufferPool, + graphicsPipeline->fragmentUniformBlockSize + ); } offset = vulkanCommandBuffer->fragmentUniformBuffer->offset; @@ -6995,9 +7002,13 @@ static uint32_t VULKAN_PushComputeShaderUniforms( computePipeline->uniformBlockSize >= UBO_BUFFER_SIZE ) { - /* FIXME: rotate a new uniform buffer in */ - Refresh_LogError("Compute UBO overflow!"); - return 0; + /* We're out of space in this buffer, bind the old one and acquire a new one */ + VULKAN_INTERNAL_BindUniformBuffer(vulkanCommandBuffer->computeUniformBuffer); + vulkanCommandBuffer->computeUniformBuffer = VULKAN_INTERNAL_AcquireUniformBufferFromPool( + renderer, + renderer->computeUniformBufferPool, + computePipeline->uniformBlockSize + ); } offset = vulkanCommandBuffer->computeUniformBuffer->offset;