Submission rewrite (#13)

Rework submission flow to reduce waiting and improve the resource cleanup process.

This patch also gets rid of descriptor set caching.
Co-authored-by: cosmonaut <evan@moonside.games>
Co-committed-by: cosmonaut <evan@moonside.games>
updatetemplate
cosmonaut 2022-02-23 00:49:45 +00:00
parent 1d72fdb995
commit 0319c26f6a
4 changed files with 868 additions and 1560 deletions

View File

@ -1038,6 +1038,7 @@ REFRESHAPI void Refresh_GetBufferData(
*/ */
REFRESHAPI void Refresh_QueueDestroyTexture( REFRESHAPI void Refresh_QueueDestroyTexture(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_Texture *texture Refresh_Texture *texture
); );
@ -1050,6 +1051,7 @@ REFRESHAPI void Refresh_QueueDestroyTexture(
*/ */
REFRESHAPI void Refresh_QueueDestroySampler( REFRESHAPI void Refresh_QueueDestroySampler(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_Sampler *sampler Refresh_Sampler *sampler
); );
@ -1062,6 +1064,7 @@ REFRESHAPI void Refresh_QueueDestroySampler(
*/ */
REFRESHAPI void Refresh_QueueDestroyBuffer( REFRESHAPI void Refresh_QueueDestroyBuffer(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_Buffer *buffer Refresh_Buffer *buffer
); );
@ -1074,6 +1077,7 @@ REFRESHAPI void Refresh_QueueDestroyBuffer(
*/ */
REFRESHAPI void Refresh_QueueDestroyRenderTarget( REFRESHAPI void Refresh_QueueDestroyRenderTarget(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_RenderTarget *renderTarget Refresh_RenderTarget *renderTarget
); );
@ -1086,6 +1090,7 @@ REFRESHAPI void Refresh_QueueDestroyRenderTarget(
*/ */
REFRESHAPI void Refresh_QueueDestroyFramebuffer( REFRESHAPI void Refresh_QueueDestroyFramebuffer(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_Framebuffer *frameBuffer Refresh_Framebuffer *frameBuffer
); );
@ -1098,6 +1103,7 @@ REFRESHAPI void Refresh_QueueDestroyFramebuffer(
*/ */
REFRESHAPI void Refresh_QueueDestroyShaderModule( REFRESHAPI void Refresh_QueueDestroyShaderModule(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_ShaderModule *shaderModule Refresh_ShaderModule *shaderModule
); );
@ -1110,6 +1116,7 @@ REFRESHAPI void Refresh_QueueDestroyShaderModule(
*/ */
REFRESHAPI void Refresh_QueueDestroyRenderPass( REFRESHAPI void Refresh_QueueDestroyRenderPass(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_RenderPass *renderPass Refresh_RenderPass *renderPass
); );
@ -1122,6 +1129,7 @@ REFRESHAPI void Refresh_QueueDestroyRenderPass(
*/ */
REFRESHAPI void Refresh_QueueDestroyComputePipeline( REFRESHAPI void Refresh_QueueDestroyComputePipeline(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_ComputePipeline *computePipeline Refresh_ComputePipeline *computePipeline
); );
@ -1134,6 +1142,7 @@ REFRESHAPI void Refresh_QueueDestroyComputePipeline(
*/ */
REFRESHAPI void Refresh_QueueDestroyGraphicsPipeline( REFRESHAPI void Refresh_QueueDestroyGraphicsPipeline(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_GraphicsPipeline *graphicsPipeline Refresh_GraphicsPipeline *graphicsPipeline
); );

View File

@ -542,99 +542,117 @@ void Refresh_GetBufferData(
void Refresh_QueueDestroyTexture( void Refresh_QueueDestroyTexture(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_Texture *texture Refresh_Texture *texture
) { ) {
NULL_RETURN(device); NULL_RETURN(device);
device->QueueDestroyTexture( device->QueueDestroyTexture(
device->driverData, device->driverData,
commandBuffer,
texture texture
); );
} }
void Refresh_QueueDestroySampler( void Refresh_QueueDestroySampler(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_Sampler *sampler Refresh_Sampler *sampler
) { ) {
NULL_RETURN(device); NULL_RETURN(device);
device->QueueDestroySampler( device->QueueDestroySampler(
device->driverData, device->driverData,
commandBuffer,
sampler sampler
); );
} }
void Refresh_QueueDestroyBuffer( void Refresh_QueueDestroyBuffer(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_Buffer *buffer Refresh_Buffer *buffer
) { ) {
NULL_RETURN(device); NULL_RETURN(device);
device->QueueDestroyBuffer( device->QueueDestroyBuffer(
device->driverData, device->driverData,
commandBuffer,
buffer buffer
); );
} }
void Refresh_QueueDestroyRenderTarget( void Refresh_QueueDestroyRenderTarget(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_RenderTarget *renderTarget Refresh_RenderTarget *renderTarget
) { ) {
NULL_RETURN(device); NULL_RETURN(device);
device->QueueDestroyRenderTarget( device->QueueDestroyRenderTarget(
device->driverData, device->driverData,
commandBuffer,
renderTarget renderTarget
); );
} }
void Refresh_QueueDestroyFramebuffer( void Refresh_QueueDestroyFramebuffer(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_Framebuffer *frameBuffer Refresh_Framebuffer *frameBuffer
) { ) {
NULL_RETURN(device); NULL_RETURN(device);
device->QueueDestroyFramebuffer( device->QueueDestroyFramebuffer(
device->driverData, device->driverData,
commandBuffer,
frameBuffer frameBuffer
); );
} }
void Refresh_QueueDestroyShaderModule( void Refresh_QueueDestroyShaderModule(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_ShaderModule *shaderModule Refresh_ShaderModule *shaderModule
) { ) {
NULL_RETURN(device); NULL_RETURN(device);
device->QueueDestroyShaderModule( device->QueueDestroyShaderModule(
device->driverData, device->driverData,
commandBuffer,
shaderModule shaderModule
); );
} }
void Refresh_QueueDestroyRenderPass( void Refresh_QueueDestroyRenderPass(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_RenderPass *renderPass Refresh_RenderPass *renderPass
) { ) {
NULL_RETURN(device); NULL_RETURN(device);
device->QueueDestroyRenderPass( device->QueueDestroyRenderPass(
device->driverData, device->driverData,
commandBuffer,
renderPass renderPass
); );
} }
void Refresh_QueueDestroyComputePipeline( void Refresh_QueueDestroyComputePipeline(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_ComputePipeline *computePipeline Refresh_ComputePipeline *computePipeline
) { ) {
NULL_RETURN(device); NULL_RETURN(device);
device->QueueDestroyComputePipeline( device->QueueDestroyComputePipeline(
device->driverData, device->driverData,
commandBuffer,
computePipeline computePipeline
); );
} }
void Refresh_QueueDestroyGraphicsPipeline( void Refresh_QueueDestroyGraphicsPipeline(
Refresh_Device *device, Refresh_Device *device,
Refresh_CommandBuffer *commandBuffer,
Refresh_GraphicsPipeline *graphicsPipeline Refresh_GraphicsPipeline *graphicsPipeline
) { ) {
NULL_RETURN(device); NULL_RETURN(device);
device->QueueDestroyGraphicsPipeline( device->QueueDestroyGraphicsPipeline(
device->driverData, device->driverData,
commandBuffer,
graphicsPipeline graphicsPipeline
); );
} }

View File

@ -361,46 +361,55 @@ struct Refresh_Device
void(*QueueDestroyTexture)( void(*QueueDestroyTexture)(
Refresh_Renderer *driverData, Refresh_Renderer *driverData,
Refresh_CommandBuffer *commandBuffer,
Refresh_Texture *texture Refresh_Texture *texture
); );
void(*QueueDestroySampler)( void(*QueueDestroySampler)(
Refresh_Renderer *driverData, Refresh_Renderer *driverData,
Refresh_CommandBuffer *commandBuffer,
Refresh_Sampler *sampler Refresh_Sampler *sampler
); );
void(*QueueDestroyBuffer)( void(*QueueDestroyBuffer)(
Refresh_Renderer *driverData, Refresh_Renderer *driverData,
Refresh_CommandBuffer *commandBuffer,
Refresh_Buffer *buffer Refresh_Buffer *buffer
); );
void(*QueueDestroyRenderTarget)( void(*QueueDestroyRenderTarget)(
Refresh_Renderer *driverData, Refresh_Renderer *driverData,
Refresh_CommandBuffer *commandBuffer,
Refresh_RenderTarget *renderTarget Refresh_RenderTarget *renderTarget
); );
void(*QueueDestroyFramebuffer)( void(*QueueDestroyFramebuffer)(
Refresh_Renderer *driverData, Refresh_Renderer *driverData,
Refresh_CommandBuffer *commandBuffer,
Refresh_Framebuffer *frameBuffer Refresh_Framebuffer *frameBuffer
); );
void(*QueueDestroyShaderModule)( void(*QueueDestroyShaderModule)(
Refresh_Renderer *driverData, Refresh_Renderer *driverData,
Refresh_CommandBuffer *commandBuffer,
Refresh_ShaderModule *shaderModule Refresh_ShaderModule *shaderModule
); );
void(*QueueDestroyRenderPass)( void(*QueueDestroyRenderPass)(
Refresh_Renderer *driverData, Refresh_Renderer *driverData,
Refresh_CommandBuffer *commandBuffer,
Refresh_RenderPass *renderPass Refresh_RenderPass *renderPass
); );
void(*QueueDestroyComputePipeline)( void(*QueueDestroyComputePipeline)(
Refresh_Renderer *driverData, Refresh_Renderer *driverData,
Refresh_CommandBuffer *commandBuffer,
Refresh_ComputePipeline *computePipeline Refresh_ComputePipeline *computePipeline
); );
void(*QueueDestroyGraphicsPipeline)( void(*QueueDestroyGraphicsPipeline)(
Refresh_Renderer *driverData, Refresh_Renderer *driverData,
Refresh_CommandBuffer *commandBuffer,
Refresh_GraphicsPipeline *graphicsPipeline Refresh_GraphicsPipeline *graphicsPipeline
); );

File diff suppressed because it is too large Load Diff