dispose renderpass
parent
2548833525
commit
031f36f450
|
@ -1126,6 +1126,14 @@ typedef struct VulkanRenderer
|
||||||
uint32_t submittedFramebuffersToDestroyCount;
|
uint32_t submittedFramebuffersToDestroyCount;
|
||||||
uint32_t submittedFramebuffersToDestroyCapacity;
|
uint32_t submittedFramebuffersToDestroyCapacity;
|
||||||
|
|
||||||
|
VkRenderPass *renderPassesToDestroy;
|
||||||
|
uint32_t renderPassesToDestroyCount;
|
||||||
|
uint32_t renderPassesToDestroyCapacity;
|
||||||
|
|
||||||
|
VkRenderPass *submittedRenderPassesToDestroy;
|
||||||
|
uint32_t submittedRenderPassesToDestroyCount;
|
||||||
|
uint32_t submittedRenderPassesToDestroyCapacity;
|
||||||
|
|
||||||
#define VULKAN_INSTANCE_FUNCTION(ext, ret, func, params) \
|
#define VULKAN_INSTANCE_FUNCTION(ext, ret, func, params) \
|
||||||
vkfntype_##func func;
|
vkfntype_##func func;
|
||||||
#define VULKAN_DEVICE_FUNCTION(ext, ret, func, params) \
|
#define VULKAN_DEVICE_FUNCTION(ext, ret, func, params) \
|
||||||
|
@ -2044,6 +2052,17 @@ static void VULKAN_INTERNAL_DestroyFramebuffer(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void VULKAN_INTERNAL_DestroyRenderPass(
|
||||||
|
VulkanRenderer *renderer,
|
||||||
|
VkRenderPass renderPass
|
||||||
|
) {
|
||||||
|
renderer->vkDestroyRenderPass(
|
||||||
|
renderer->logicalDevice,
|
||||||
|
renderPass,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
static void VULKAN_INTERNAL_DestroySwapchain(VulkanRenderer* renderer)
|
static void VULKAN_INTERNAL_DestroySwapchain(VulkanRenderer* renderer)
|
||||||
{
|
{
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
@ -2112,7 +2131,7 @@ static void VULKAN_INTERNAL_DestroySamplerDescriptorSetCache(
|
||||||
SDL_free(cache);
|
SDL_free(cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void VULKAN_INTERNAL_PostSubmitCleanup(VulkanRenderer* renderer)
|
static void VULKAN_INTERNAL_PostWorkCleanup(VulkanRenderer* renderer)
|
||||||
{
|
{
|
||||||
uint32_t i, j;
|
uint32_t i, j;
|
||||||
|
|
||||||
|
@ -2183,6 +2202,15 @@ static void VULKAN_INTERNAL_PostSubmitCleanup(VulkanRenderer* renderer)
|
||||||
}
|
}
|
||||||
renderer->submittedFramebuffersToDestroyCount = 0;
|
renderer->submittedFramebuffersToDestroyCount = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < renderer->submittedRenderPassesToDestroyCount; i += 1)
|
||||||
|
{
|
||||||
|
VULKAN_INTERNAL_DestroyRenderPass(
|
||||||
|
renderer,
|
||||||
|
renderer->submittedRenderPassesToDestroy[i]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
renderer->submittedRenderPassesToDestroyCount = 0;
|
||||||
|
|
||||||
/* Re-size submitted destroy lists */
|
/* Re-size submitted destroy lists */
|
||||||
|
|
||||||
EXPAND_ARRAY_IF_NEEDED(
|
EXPAND_ARRAY_IF_NEEDED(
|
||||||
|
@ -2241,6 +2269,14 @@ static void VULKAN_INTERNAL_PostSubmitCleanup(VulkanRenderer* renderer)
|
||||||
renderer->framebuffersToDestroyCount
|
renderer->framebuffersToDestroyCount
|
||||||
)
|
)
|
||||||
|
|
||||||
|
EXPAND_ARRAY_IF_NEEDED(
|
||||||
|
renderer->submittedRenderPassesToDestroy,
|
||||||
|
VkRenderPass,
|
||||||
|
renderer->renderPassesToDestroyCount,
|
||||||
|
renderer->submittedRenderPassesToDestroyCapacity,
|
||||||
|
renderer->renderPassesToDestroyCount
|
||||||
|
)
|
||||||
|
|
||||||
/* Rotate destroy lists */
|
/* Rotate destroy lists */
|
||||||
|
|
||||||
MOVE_ARRAY_CONTENTS_AND_RESET(
|
MOVE_ARRAY_CONTENTS_AND_RESET(
|
||||||
|
@ -2299,6 +2335,14 @@ static void VULKAN_INTERNAL_PostSubmitCleanup(VulkanRenderer* renderer)
|
||||||
renderer->framebuffersToDestroyCount
|
renderer->framebuffersToDestroyCount
|
||||||
)
|
)
|
||||||
|
|
||||||
|
MOVE_ARRAY_CONTENTS_AND_RESET(
|
||||||
|
i,
|
||||||
|
renderer->submittedRenderPassesToDestroy,
|
||||||
|
renderer->submittedRenderPassesToDestroyCount,
|
||||||
|
renderer->renderPassesToDestroy,
|
||||||
|
renderer->renderPassesToDestroyCount
|
||||||
|
)
|
||||||
|
|
||||||
SDL_UnlockMutex(renderer->disposeLock);
|
SDL_UnlockMutex(renderer->disposeLock);
|
||||||
|
|
||||||
/* Increment the frame index */
|
/* Increment the frame index */
|
||||||
|
@ -3015,8 +3059,8 @@ static void VULKAN_DestroyDevice(
|
||||||
VULKAN_INTERNAL_DestroyBuffer(renderer, renderer->fragmentUBO);
|
VULKAN_INTERNAL_DestroyBuffer(renderer, renderer->fragmentUBO);
|
||||||
|
|
||||||
/* We have to do this twice so the rotation happens correctly */
|
/* We have to do this twice so the rotation happens correctly */
|
||||||
VULKAN_INTERNAL_PostSubmitCleanup(renderer);
|
VULKAN_INTERNAL_PostWorkCleanup(renderer);
|
||||||
VULKAN_INTERNAL_PostSubmitCleanup(renderer);
|
VULKAN_INTERNAL_PostWorkCleanup(renderer);
|
||||||
|
|
||||||
VULKAN_INTERNAL_DestroyTextureStagingBuffer(renderer);
|
VULKAN_INTERNAL_DestroyTextureStagingBuffer(renderer);
|
||||||
|
|
||||||
|
@ -6130,7 +6174,23 @@ static void VULKAN_AddDisposeRenderPass(
|
||||||
REFRESH_Renderer *driverData,
|
REFRESH_Renderer *driverData,
|
||||||
REFRESH_RenderPass *renderPass
|
REFRESH_RenderPass *renderPass
|
||||||
) {
|
) {
|
||||||
SDL_assert(0);
|
VulkanRenderer *renderer = (VulkanRenderer*) driverData;
|
||||||
|
VkRenderPass vulkanRenderPass = (VkRenderPass) renderPass;
|
||||||
|
|
||||||
|
SDL_LockMutex(renderer->disposeLock);
|
||||||
|
|
||||||
|
EXPAND_ARRAY_IF_NEEDED(
|
||||||
|
renderer->renderPassesToDestroy,
|
||||||
|
VkRenderPass,
|
||||||
|
renderer->renderPassesToDestroyCount + 1,
|
||||||
|
renderer->renderPassesToDestroyCapacity,
|
||||||
|
renderer->renderPassesToDestroyCapacity * 2
|
||||||
|
)
|
||||||
|
|
||||||
|
renderer->renderPassesToDestroy[renderer->renderPassesToDestroyCount] = vulkanRenderPass;
|
||||||
|
renderer->renderPassesToDestroyCount += 1;
|
||||||
|
|
||||||
|
SDL_UnlockMutex(renderer->disposeLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void VULKAN_AddDisposeGraphicsPipeline(
|
static void VULKAN_AddDisposeGraphicsPipeline(
|
||||||
|
@ -6712,7 +6772,7 @@ static void VULKAN_Submit(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
VULKAN_INTERNAL_PostSubmitCleanup(renderer);
|
VULKAN_INTERNAL_PostWorkCleanup(renderer);
|
||||||
|
|
||||||
/* Reset the previously submitted command buffers */
|
/* Reset the previously submitted command buffers */
|
||||||
for (i = 0; i < renderer->submittedCommandBufferCount; i += 1)
|
for (i = 0; i < renderer->submittedCommandBufferCount; i += 1)
|
||||||
|
@ -8049,6 +8109,22 @@ static REFRESH_Device* VULKAN_CreateDevice(
|
||||||
renderer->submittedFramebuffersToDestroyCapacity
|
renderer->submittedFramebuffersToDestroyCapacity
|
||||||
);
|
);
|
||||||
|
|
||||||
|
renderer->renderPassesToDestroyCapacity = 16;
|
||||||
|
renderer->renderPassesToDestroyCount = 0;
|
||||||
|
|
||||||
|
renderer->renderPassesToDestroy = (VkRenderPass*) SDL_malloc(
|
||||||
|
sizeof(VkRenderPass) *
|
||||||
|
renderer->renderPassesToDestroyCapacity
|
||||||
|
);
|
||||||
|
|
||||||
|
renderer->submittedRenderPassesToDestroyCapacity = 16;
|
||||||
|
renderer->submittedRenderPassesToDestroyCount = 0;
|
||||||
|
|
||||||
|
renderer->submittedRenderPassesToDestroy = (VkRenderPass*) SDL_malloc(
|
||||||
|
sizeof(VkRenderPass) *
|
||||||
|
renderer->submittedRenderPassesToDestroyCapacity
|
||||||
|
);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue