Skip to content

Commit 5e7ec1b

Browse files
committed
fix: better cleanup queue work in renderer ext
1 parent e091e0c commit 5e7ec1b

File tree

2 files changed

+35
-14
lines changed

2 files changed

+35
-14
lines changed

extensions/pl_renderer_ext.c

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1386,18 +1386,34 @@ pl_renderer_resize_view(plView* ptView, plVec2 tDimensions)
13861386
plRenderPassAttachments atPickAttachmentSets[PL_MAX_FRAMES_IN_FLIGHT] = {0};
13871387

13881388

1389-
// queue old resources for deletion
1390-
gptGfx->queue_texture_for_deletion(ptDevice, ptView->tFinalTexture);
1391-
gptGfx->queue_texture_for_deletion(ptDevice, ptView->atUVMaskTexture0);
1392-
gptGfx->queue_texture_for_deletion(ptDevice, ptView->atUVMaskTexture1);
1393-
gptGfx->queue_texture_for_deletion(ptDevice, ptView->tRawOutputTexture);
1394-
gptGfx->queue_texture_for_deletion(ptDevice, ptView->tAlbedoTexture);
1395-
gptGfx->queue_texture_for_deletion(ptDevice, ptView->tNormalTexture);
1396-
gptGfx->queue_texture_for_deletion(ptDevice, ptView->tAOMetalRoughnessTexture);
1397-
gptGfx->queue_texture_for_deletion(ptDevice, ptView->tDepthTexture);
1398-
gptGfx->queue_bind_group_for_deletion(ptDevice, ptView->tLightingBindGroup);
1389+
uint64_t uOldValue = gptGfx->get_semaphore_value(ptDevice, gptStarter->get_current_timeline_semaphore());
1390+
1391+
if(uOldValue >= gptStarter->get_current_timeline_value())
1392+
{
1393+
gptGfx->destroy_texture(ptDevice, ptView->tFinalTexture);
1394+
gptGfx->destroy_texture(ptDevice, ptView->atUVMaskTexture0);
1395+
gptGfx->destroy_texture(ptDevice, ptView->atUVMaskTexture1);
1396+
gptGfx->destroy_texture(ptDevice, ptView->tRawOutputTexture);
1397+
gptGfx->destroy_texture(ptDevice, ptView->tAlbedoTexture);
1398+
gptGfx->destroy_texture(ptDevice, ptView->tNormalTexture);
1399+
gptGfx->destroy_texture(ptDevice, ptView->tAOMetalRoughnessTexture);
1400+
gptGfx->destroy_texture(ptDevice, ptView->tDepthTexture);
1401+
gptGfx->destroy_texture(ptDevice, ptView->tPickTexture);
1402+
}
1403+
else
1404+
{
1405+
gptGfx->queue_texture_for_deletion(ptDevice, ptView->tFinalTexture);
1406+
gptGfx->queue_texture_for_deletion(ptDevice, ptView->atUVMaskTexture0);
1407+
gptGfx->queue_texture_for_deletion(ptDevice, ptView->atUVMaskTexture1);
1408+
gptGfx->queue_texture_for_deletion(ptDevice, ptView->tRawOutputTexture);
1409+
gptGfx->queue_texture_for_deletion(ptDevice, ptView->tAlbedoTexture);
1410+
gptGfx->queue_texture_for_deletion(ptDevice, ptView->tNormalTexture);
1411+
gptGfx->queue_texture_for_deletion(ptDevice, ptView->tAOMetalRoughnessTexture);
1412+
gptGfx->queue_texture_for_deletion(ptDevice, ptView->tDepthTexture);
1413+
gptGfx->queue_texture_for_deletion(ptDevice, ptView->tPickTexture);
1414+
}
13991415

1400-
gptGfx->queue_texture_for_deletion(ptDevice, ptView->tPickTexture);
1416+
gptGfx->queue_bind_group_for_deletion(ptDevice, ptView->tLightingBindGroup);
14011417
ptView->tPickTexture = pl__renderer_create_texture(&tPickTextureDesc, "pick", 0, PL_TEXTURE_USAGE_SAMPLED);
14021418

14031419
// textures
@@ -2199,9 +2215,9 @@ pl_renderer_prepare_scene(plScene* ptScene)
21992215
pl_sb_reset(ptScene->sbtLightShadowData);
22002216

22012217
const plBeginCommandInfo tShadowBeginInfo = {
2202-
.uWaitSemaphoreCount = 1,
2203-
.atWaitSempahores = {gptStarter->get_current_timeline_semaphore()},
2204-
.auWaitSemaphoreValues = {gptStarter->get_current_timeline_value()},
2218+
.uWaitSemaphoreCount = 2,
2219+
.atWaitSempahores = {gptStarter->get_current_timeline_semaphore(), gptStarter->get_last_timeline_semaphore()},
2220+
.auWaitSemaphoreValues = {gptStarter->get_current_timeline_value(), ptScene->uLastSemValueForShadow},
22052221
};
22062222

22072223
plCommandBuffer* ptShadowCmdBuffer = gptGfx->request_command_buffer(ptCmdPool, "scene shadows");
@@ -2939,6 +2955,7 @@ pl_renderer_render_view(plView* ptView, plCamera* ptCamera, plCamera* ptCullCame
29392955
.atSignalSempahores = {gptStarter->get_current_timeline_semaphore()},
29402956
.auSignalSemaphoreValues = {gptStarter->increment_current_timeline_value()}
29412957
};
2958+
ptScene->uLastSemValueForShadow = gptStarter->get_current_timeline_value();
29422959
gptGfx->submit_command_buffer(ptSceneCmdBuffer, &tSceneSubmitInfo);
29432960
gptGfx->return_command_buffer(ptSceneCmdBuffer);
29442961

@@ -3214,6 +3231,8 @@ pl_renderer_render_view(plView* ptView, plCamera* ptCamera, plCamera* ptCullCame
32143231
.atSignalSempahores = {gptStarter->get_current_timeline_semaphore()},
32153232
.auSignalSemaphoreValues = {gptStarter->increment_current_timeline_value()}
32163233
};
3234+
ptScene->aulStartTimelineValue[uFrameIdx] = tPostSubmitInfo.auSignalSemaphoreValues[0];
3235+
32173236
gptGfx->submit_command_buffer(ptPostCmdBuffer, &tPostSubmitInfo);
32183237
gptGfx->return_command_buffer(ptPostCmdBuffer);
32193238

extensions/pl_renderer_internal.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,8 @@ typedef struct _plScene
341341
bool bActive;
342342
plShaderHandle tLightingShader;
343343
plShaderHandle tEnvLightingShader;
344+
uint64_t uLastSemValueForShadow;
345+
uint64_t aulStartTimelineValue[PL_MAX_FRAMES_IN_FLIGHT];
344346

345347
// skybox resources (optional)
346348
plDrawable tSkyboxDrawable;

0 commit comments

Comments
 (0)