rotate uniform buffer if we run out of space
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is passing Details

pull/1/head
cosmonaut 2022-01-12 14:39:29 -08:00
parent 1eb749ed10
commit 38ff5af448
1 changed files with 21 additions and 10 deletions

View File

@ -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;