plugging more leaks
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
98b6518f2b
commit
059c28d5c0
|
@ -3895,18 +3895,17 @@ static void VULKAN_INTERNAL_RecreateSwapchain(
|
|||
) {
|
||||
CreateSwapchainResult createSwapchainResult;
|
||||
|
||||
renderer->vkDeviceWaitIdle(renderer->logicalDevice);
|
||||
VULKAN_Wait((Refresh_Renderer*)renderer);
|
||||
|
||||
VULKAN_INTERNAL_DestroySwapchain(renderer, windowHandle);
|
||||
createSwapchainResult = VULKAN_INTERNAL_CreateSwapchain(renderer, windowHandle);
|
||||
|
||||
if (createSwapchainResult == CREATE_SWAPCHAIN_FAIL)
|
||||
{
|
||||
Refresh_LogError("Failed to recreate swapchain!");
|
||||
return;
|
||||
}
|
||||
|
||||
renderer->vkDeviceWaitIdle(renderer->logicalDevice);
|
||||
VULKAN_Wait((Refresh_Renderer*)renderer);
|
||||
}
|
||||
|
||||
/* Command Buffers */
|
||||
|
@ -3980,10 +3979,25 @@ static void VULKAN_DestroyDevice(
|
|||
|
||||
VULKAN_Wait(device->driverData);
|
||||
|
||||
SDL_free(renderer->submittedCommandBuffers);
|
||||
|
||||
VULKAN_INTERNAL_DestroyBuffer(renderer, renderer->dummyVertexUniformBuffer->vulkanBuffer);
|
||||
VULKAN_INTERNAL_DestroyBuffer(renderer, renderer->dummyFragmentUniformBuffer->vulkanBuffer);
|
||||
VULKAN_INTERNAL_DestroyBuffer(renderer, renderer->dummyComputeUniformBuffer->vulkanBuffer);
|
||||
|
||||
SDL_free(renderer->dummyVertexUniformBuffer);
|
||||
SDL_free(renderer->dummyFragmentUniformBuffer);
|
||||
SDL_free(renderer->dummyComputeUniformBuffer);
|
||||
|
||||
for (i = 0; i < renderer->transferBufferPool.availableBufferCount; i += 1)
|
||||
{
|
||||
VULKAN_INTERNAL_DestroyBuffer(renderer, renderer->transferBufferPool.availableBuffers[i]->buffer);
|
||||
SDL_free(renderer->transferBufferPool.availableBuffers[i]);
|
||||
}
|
||||
|
||||
SDL_free(renderer->transferBufferPool.availableBuffers);
|
||||
SDL_DestroyMutex(renderer->transferBufferPool.lock);
|
||||
|
||||
for (i = 0; i < renderer->availableFenceCount; i += 1)
|
||||
{
|
||||
renderer->vkDestroyFence(
|
||||
|
@ -3993,6 +4007,8 @@ static void VULKAN_DestroyDevice(
|
|||
);
|
||||
}
|
||||
|
||||
SDL_free(renderer->availableFences);
|
||||
|
||||
for (i = 0; i < NUM_COMMAND_POOL_BUCKETS; i += 1)
|
||||
{
|
||||
commandPoolHashArray = renderer->commandPoolHashTable.buckets[i];
|
||||
|
@ -4015,11 +4031,23 @@ static void VULKAN_DestroyDevice(
|
|||
graphicsPipelineLayoutHashArray = renderer->graphicsPipelineLayoutHashTable.buckets[i];
|
||||
for (j = 0; j < graphicsPipelineLayoutHashArray.count; j += 1)
|
||||
{
|
||||
VULKAN_INTERNAL_DestroyDescriptorSetCache(
|
||||
renderer,
|
||||
graphicsPipelineLayoutHashArray.elements[j].value->vertexSamplerDescriptorSetCache
|
||||
);
|
||||
|
||||
VULKAN_INTERNAL_DestroyDescriptorSetCache(
|
||||
renderer,
|
||||
graphicsPipelineLayoutHashArray.elements[j].value->fragmentSamplerDescriptorSetCache
|
||||
);
|
||||
|
||||
renderer->vkDestroyPipelineLayout(
|
||||
renderer->logicalDevice,
|
||||
graphicsPipelineLayoutHashArray.elements[j].value->pipelineLayout,
|
||||
NULL
|
||||
);
|
||||
|
||||
SDL_free(graphicsPipelineLayoutHashArray.elements[j].value);
|
||||
}
|
||||
|
||||
if (graphicsPipelineLayoutHashArray.elements != NULL)
|
||||
|
@ -4045,6 +4073,8 @@ static void VULKAN_DestroyDevice(
|
|||
computePipelineLayoutHashArray.elements[j].value->pipelineLayout,
|
||||
NULL
|
||||
);
|
||||
|
||||
SDL_free(computePipelineLayoutHashArray.elements[j].value);
|
||||
}
|
||||
|
||||
if (computePipelineLayoutHashArray.elements != NULL)
|
||||
|
@ -5695,7 +5725,7 @@ static Refresh_Buffer* VULKAN_CreateBuffer(
|
|||
Refresh_BufferUsageFlags usageFlags,
|
||||
uint32_t sizeInBytes
|
||||
) {
|
||||
VulkanBuffer* buffer = SDL_malloc(sizeof(VulkanBuffer));
|
||||
VulkanBuffer* buffer;
|
||||
|
||||
VkBufferUsageFlags vulkanUsageFlags =
|
||||
VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
|
||||
|
@ -7459,7 +7489,7 @@ static void VULKAN_INTERNAL_AllocateCommandBuffers(
|
|||
VkResult vulkanResult;
|
||||
uint32_t i;
|
||||
VkCommandBuffer *commandBuffers = SDL_stack_alloc(VkCommandBuffer, allocateCount);
|
||||
VulkanCommandBuffer *currentVulkanCommandBuffer;
|
||||
VulkanCommandBuffer *commandBuffer;
|
||||
|
||||
vulkanCommandPool->inactiveCommandBufferCapacity += allocateCount;
|
||||
|
||||
|
@ -7490,23 +7520,117 @@ static void VULKAN_INTERNAL_AllocateCommandBuffers(
|
|||
|
||||
for (i = 0; i < allocateCount; i += 1)
|
||||
{
|
||||
currentVulkanCommandBuffer = SDL_malloc(sizeof(VulkanCommandBuffer));
|
||||
currentVulkanCommandBuffer->commandPool = vulkanCommandPool;
|
||||
currentVulkanCommandBuffer->commandBuffer = commandBuffers[i];
|
||||
currentVulkanCommandBuffer->boundComputeBufferCount = 0;
|
||||
currentVulkanCommandBuffer->transferBufferCapacity = 4;
|
||||
currentVulkanCommandBuffer->transferBufferCount = 0;
|
||||
currentVulkanCommandBuffer->transferBuffers = SDL_malloc(
|
||||
currentVulkanCommandBuffer->transferBufferCapacity * sizeof(VulkanTransferBuffer*)
|
||||
commandBuffer = SDL_malloc(sizeof(VulkanCommandBuffer));
|
||||
commandBuffer->commandPool = vulkanCommandPool;
|
||||
commandBuffer->commandBuffer = commandBuffers[i];
|
||||
commandBuffer->boundComputeBufferCount = 0;
|
||||
|
||||
commandBuffer->present = 0;
|
||||
commandBuffer->presentWindowHandle = NULL;
|
||||
commandBuffer->presentSwapchainImageIndex = 0;
|
||||
commandBuffer->needNewSwapchain = 0;
|
||||
|
||||
/* Transfer buffer tracking */
|
||||
|
||||
commandBuffer->transferBufferCapacity = 4;
|
||||
commandBuffer->transferBufferCount = 0;
|
||||
commandBuffer->transferBuffers = SDL_malloc(
|
||||
commandBuffer->transferBufferCapacity * sizeof(VulkanTransferBuffer*)
|
||||
);
|
||||
|
||||
/* Bound buffer tracking */
|
||||
|
||||
commandBuffer->boundUniformBufferCapacity = 16;
|
||||
commandBuffer->boundUniformBufferCount = 0;
|
||||
commandBuffer->boundUniformBuffers = SDL_malloc(
|
||||
commandBuffer->boundUniformBufferCapacity * sizeof(VulkanUniformBuffer*)
|
||||
);
|
||||
|
||||
/* Descriptor set tracking */
|
||||
|
||||
commandBuffer->boundDescriptorSetDataCapacity = 16;
|
||||
commandBuffer->boundDescriptorSetDataCount = 0;
|
||||
commandBuffer->boundDescriptorSetDatas = SDL_malloc(
|
||||
commandBuffer->boundDescriptorSetDataCapacity * sizeof(DescriptorSetData)
|
||||
);
|
||||
|
||||
/* Deferred destroy storage */
|
||||
|
||||
commandBuffer->renderTargetsToDestroyCapacity = 16;
|
||||
commandBuffer->renderTargetsToDestroyCount = 0;
|
||||
|
||||
commandBuffer->renderTargetsToDestroy = (VulkanRenderTarget**) SDL_malloc(
|
||||
sizeof(VulkanRenderTarget*) *
|
||||
commandBuffer->renderTargetsToDestroyCapacity
|
||||
);
|
||||
|
||||
commandBuffer->texturesToDestroyCapacity = 16;
|
||||
commandBuffer->texturesToDestroyCount = 0;
|
||||
|
||||
commandBuffer->texturesToDestroy = (VulkanTexture**)SDL_malloc(
|
||||
sizeof(VulkanTexture*) *
|
||||
commandBuffer->texturesToDestroyCapacity
|
||||
);
|
||||
|
||||
commandBuffer->buffersToDestroyCapacity = 16;
|
||||
commandBuffer->buffersToDestroyCount = 0;
|
||||
|
||||
commandBuffer->buffersToDestroy = (VulkanBuffer**) SDL_malloc(
|
||||
sizeof(VulkanBuffer*) *
|
||||
commandBuffer->buffersToDestroyCapacity
|
||||
);
|
||||
|
||||
commandBuffer->graphicsPipelinesToDestroyCapacity = 16;
|
||||
commandBuffer->graphicsPipelinesToDestroyCount = 0;
|
||||
|
||||
commandBuffer->graphicsPipelinesToDestroy = (VulkanGraphicsPipeline**) SDL_malloc(
|
||||
sizeof(VulkanGraphicsPipeline*) *
|
||||
commandBuffer->graphicsPipelinesToDestroyCapacity
|
||||
);
|
||||
|
||||
commandBuffer->computePipelinesToDestroyCapacity = 16;
|
||||
commandBuffer->computePipelinesToDestroyCount = 0;
|
||||
|
||||
commandBuffer->computePipelinesToDestroy = (VulkanComputePipeline**) SDL_malloc(
|
||||
sizeof(VulkanComputePipeline*) *
|
||||
commandBuffer->computePipelinesToDestroyCapacity
|
||||
);
|
||||
|
||||
commandBuffer->shaderModulesToDestroyCapacity = 16;
|
||||
commandBuffer->shaderModulesToDestroyCount = 0;
|
||||
|
||||
commandBuffer->shaderModulesToDestroy = (VkShaderModule*) SDL_malloc(
|
||||
sizeof(VkShaderModule) *
|
||||
commandBuffer->shaderModulesToDestroyCapacity
|
||||
);
|
||||
|
||||
commandBuffer->samplersToDestroyCapacity = 16;
|
||||
commandBuffer->samplersToDestroyCount = 0;
|
||||
|
||||
commandBuffer->samplersToDestroy = (VkSampler*) SDL_malloc(
|
||||
sizeof(VkSampler) *
|
||||
commandBuffer->samplersToDestroyCapacity
|
||||
);
|
||||
|
||||
commandBuffer->framebuffersToDestroyCapacity = 16;
|
||||
commandBuffer->framebuffersToDestroyCount = 0;
|
||||
|
||||
commandBuffer->framebuffersToDestroy = (VulkanFramebuffer**) SDL_malloc(
|
||||
sizeof(VulkanFramebuffer*) *
|
||||
commandBuffer->framebuffersToDestroyCapacity
|
||||
);
|
||||
|
||||
commandBuffer->renderPassesToDestroyCapacity = 16;
|
||||
commandBuffer->renderPassesToDestroyCount = 0;
|
||||
|
||||
commandBuffer->renderPassesToDestroy = (VkRenderPass*) SDL_malloc(
|
||||
sizeof(VkRenderPass) *
|
||||
commandBuffer->renderPassesToDestroyCapacity
|
||||
);
|
||||
currentVulkanCommandBuffer->present = 0;
|
||||
currentVulkanCommandBuffer->presentWindowHandle = NULL;
|
||||
currentVulkanCommandBuffer->presentSwapchainImageIndex = 0;
|
||||
currentVulkanCommandBuffer->needNewSwapchain = 0;
|
||||
|
||||
vulkanCommandPool->inactiveCommandBuffers[
|
||||
vulkanCommandPool->inactiveCommandBufferCount
|
||||
] = currentVulkanCommandBuffer;
|
||||
] = commandBuffer;
|
||||
vulkanCommandPool->inactiveCommandBufferCount += 1;
|
||||
}
|
||||
|
||||
|
@ -7615,7 +7739,7 @@ static Refresh_CommandBuffer* VULKAN_AcquireCommandBuffer(
|
|||
|
||||
SDL_UnlockMutex(renderer->acquireCommandBufferLock);
|
||||
|
||||
/* State tracking */
|
||||
/* Reset state */
|
||||
|
||||
commandBuffer->currentComputePipeline = NULL;
|
||||
commandBuffer->currentGraphicsPipeline = NULL;
|
||||
|
@ -7624,97 +7748,10 @@ static Refresh_CommandBuffer* VULKAN_AcquireCommandBuffer(
|
|||
commandBuffer->fragmentUniformBuffer = NULL;
|
||||
commandBuffer->computeUniformBuffer = NULL;
|
||||
|
||||
/* Bound buffer tracking */
|
||||
|
||||
commandBuffer->boundUniformBufferCapacity = 16;
|
||||
commandBuffer->boundUniformBufferCount = 0;
|
||||
commandBuffer->boundUniformBuffers = SDL_malloc(
|
||||
commandBuffer->boundUniformBufferCapacity * sizeof(VulkanUniformBuffer*)
|
||||
);
|
||||
|
||||
/* Descriptor set tracking */
|
||||
|
||||
commandBuffer->boundDescriptorSetDataCapacity = 16;
|
||||
commandBuffer->boundDescriptorSetDataCount = 0;
|
||||
commandBuffer->boundDescriptorSetDatas = SDL_malloc(
|
||||
commandBuffer->boundDescriptorSetDataCapacity * sizeof(DescriptorSetData)
|
||||
);
|
||||
|
||||
/* Deferred destroy storage */
|
||||
|
||||
commandBuffer->renderTargetsToDestroyCapacity = 16;
|
||||
commandBuffer->renderTargetsToDestroyCount = 0;
|
||||
|
||||
commandBuffer->renderTargetsToDestroy = (VulkanRenderTarget**) SDL_malloc(
|
||||
sizeof(VulkanRenderTarget*) *
|
||||
commandBuffer->renderTargetsToDestroyCapacity
|
||||
);
|
||||
|
||||
commandBuffer->texturesToDestroyCapacity = 16;
|
||||
commandBuffer->texturesToDestroyCount = 0;
|
||||
|
||||
commandBuffer->texturesToDestroy = (VulkanTexture**)SDL_malloc(
|
||||
sizeof(VulkanTexture*) *
|
||||
commandBuffer->texturesToDestroyCapacity
|
||||
);
|
||||
|
||||
commandBuffer->buffersToDestroyCapacity = 16;
|
||||
commandBuffer->buffersToDestroyCount = 0;
|
||||
|
||||
commandBuffer->buffersToDestroy = (VulkanBuffer**) SDL_malloc(
|
||||
sizeof(VulkanBuffer*) *
|
||||
commandBuffer->buffersToDestroyCapacity
|
||||
);
|
||||
|
||||
commandBuffer->graphicsPipelinesToDestroyCapacity = 16;
|
||||
commandBuffer->graphicsPipelinesToDestroyCount = 0;
|
||||
|
||||
commandBuffer->graphicsPipelinesToDestroy = (VulkanGraphicsPipeline**) SDL_malloc(
|
||||
sizeof(VulkanGraphicsPipeline*) *
|
||||
commandBuffer->graphicsPipelinesToDestroyCapacity
|
||||
);
|
||||
|
||||
commandBuffer->computePipelinesToDestroyCapacity = 16;
|
||||
commandBuffer->computePipelinesToDestroyCount = 0;
|
||||
|
||||
commandBuffer->computePipelinesToDestroy = (VulkanComputePipeline**) SDL_malloc(
|
||||
sizeof(VulkanComputePipeline*) *
|
||||
commandBuffer->computePipelinesToDestroyCapacity
|
||||
);
|
||||
|
||||
commandBuffer->shaderModulesToDestroyCapacity = 16;
|
||||
commandBuffer->shaderModulesToDestroyCount = 0;
|
||||
|
||||
commandBuffer->shaderModulesToDestroy = (VkShaderModule*) SDL_malloc(
|
||||
sizeof(VkShaderModule) *
|
||||
commandBuffer->shaderModulesToDestroyCapacity
|
||||
);
|
||||
|
||||
commandBuffer->samplersToDestroyCapacity = 16;
|
||||
commandBuffer->samplersToDestroyCount = 0;
|
||||
|
||||
commandBuffer->samplersToDestroy = (VkSampler*) SDL_malloc(
|
||||
sizeof(VkSampler) *
|
||||
commandBuffer->samplersToDestroyCapacity
|
||||
);
|
||||
|
||||
commandBuffer->framebuffersToDestroyCapacity = 16;
|
||||
commandBuffer->framebuffersToDestroyCount = 0;
|
||||
|
||||
commandBuffer->framebuffersToDestroy = (VulkanFramebuffer**) SDL_malloc(
|
||||
sizeof(VulkanFramebuffer*) *
|
||||
commandBuffer->framebuffersToDestroyCapacity
|
||||
);
|
||||
|
||||
commandBuffer->renderPassesToDestroyCapacity = 16;
|
||||
commandBuffer->renderPassesToDestroyCount = 0;
|
||||
|
||||
commandBuffer->renderPassesToDestroy = (VkRenderPass*) SDL_malloc(
|
||||
sizeof(VkRenderPass) *
|
||||
commandBuffer->renderPassesToDestroyCapacity
|
||||
);
|
||||
|
||||
/* init bound compute buffer array */
|
||||
commandBuffer->fixed = fixed;
|
||||
commandBuffer->submitted = 0;
|
||||
commandBuffer->present = 0;
|
||||
commandBuffer->renderPassInProgress = 0;
|
||||
|
||||
for (i = 0; i < MAX_BUFFER_BINDINGS; i += 1)
|
||||
{
|
||||
|
@ -7722,11 +7759,6 @@ static Refresh_CommandBuffer* VULKAN_AcquireCommandBuffer(
|
|||
}
|
||||
commandBuffer->boundComputeBufferCount = 0;
|
||||
|
||||
commandBuffer->fixed = fixed;
|
||||
commandBuffer->submitted = 0;
|
||||
commandBuffer->present = 0;
|
||||
commandBuffer->renderPassInProgress = 0;
|
||||
|
||||
VULKAN_INTERNAL_BeginCommandBuffer(renderer, commandBuffer);
|
||||
|
||||
return (Refresh_CommandBuffer*) commandBuffer;
|
||||
|
|
Loading…
Reference in New Issue