@@ -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
0 commit comments