Skip to content

fix(vulkan,rendering,editor): vkQueueSubmit2, deferred texture upload, async drag-drop - #773

Merged
JeanPhilippeKernel merged 1 commit into
developfrom
diag/timeline-semaphore-intel-guard
Sep 10, 2026
Merged

fix(vulkan,rendering,editor): vkQueueSubmit2, deferred texture upload, async drag-drop#773
JeanPhilippeKernel merged 1 commit into
developfrom
diag/timeline-semaphore-intel-guard

Conversation

@JeanPhilippeKernel

@JeanPhilippeKernel JeanPhilippeKernel commented Sep 8, 2026

Copy link
Copy Markdown
Owner

Summary

  • vkQueueSubmit2 migration — replace `vkQueueSubmit` + `VkTimelineSemaphoreSubmitInfo` with `vkQueueSubmit2` + `VkSemaphoreSubmitInfo` in all timeline semaphore submit paths. Each semaphore carries its own struct, eliminating the parallel-array count ambiguity that caused Intel Windows driver corruption (UINT64_MAX semaphore value). Enable `VkPhysicalDeviceSynchronization2Features` in `VkDeviceCreateInfo` — the extension was loaded but the feature flag was never set. Fix type correctness: stage flag fields now use `VkPipelineStageFlags2`. Remove `ASSERT_TIMELINE_MONOTONIC` macro and all 6 call sites — root cause fixed at API level.

  • Deferred texture upload — texture async ops and descriptor updates go into 1-frame SPSC deferred queues. `Present()` runs before `SubmitAsyncUploads()` so the same-frame GPU stall on drag-drop is eliminated. `RequestDeferredDescriptorUpdate` pre-fills the new descriptor slot with the fallback image view for the one-frame upload window, written from the render thread after present to avoid concurrent `vkUpdateDescriptorSets`.

  • Async drag-drop mesh deserialization — `DeserializeMeshAssetFile` and `IngestMaterialFromUUID` are synchronous file reads that were blocking the render thread on every drag-drop. Both now run on a `ThreadPool` worker with a dedicated per-drop `ArenaAllocator` (4× file size + 8 MB). The main-thread callback handles only the lightweight `IngestMesh` + actor create.

  • Same-session texture fix — in a same-session cook+drag-drop flow, `GetAsset(uuid)` returned null because the VFSFileWatcher marks the AssetRegistry record Stale after the importer sets it Loaded. Material index lookup now uses `UUIDToMaterialSlot.find(uuid)` directly — the raw slot set by `IngestMaterial`, never touched by the scanner.

Result

Stable 121 fps through mesh drag-drop with correct textures, both in fresh sessions and same-session cook+ingest flows.

Test plan

  • Drag a cooked `.zemesh` onto the viewport — FPS stays stable, mesh appears with correct textures
  • Import a raw mesh then immediately drag the cooked `.zemesh` in the same session — textures correct
  • Verify on Windows: no Intel timeline semaphore corruption with `vkQueueSubmit2`

@JeanPhilippeKernel

Copy link
Copy Markdown
Owner Author

[2026-09-09 09:07:44.115] [ENGINE] [warning] Pipeline 'Depth-Prepass-Pipeline': 4 unset input(s): DrawDataSB, IndexSB, VertexSB, TransformSB
[2026-09-09 09:07:44.292] [ENGINE] [error] vkCreateShaderModule(): SPIR-V Capability Int64 was declared, but one of the following requirements is required (VkPhysicalDeviceFeatures::shaderInt64).
The Vulkan spec states: If pCode is a pointer to SPIR-V code, and pCode declares any of the capabilities listed in the SPIR-V Environment appendix, one of the corresponding requirements must be satisfied (https://docs.vulkan.org/spec/latest/chapters/shaders.html#VUID-VkShaderModuleCreateInfo-pCode-08740)
[2026-09-09 09:07:44.306] [ENGINE] [warning] Pipeline 'GBuffer-Pipeline': 5 unset input(s): DrawDataSB, IndexSB, VertexSB, TransformSB, MatSB
[2026-09-09 09:07:45.017] [ENGINE] [info] [ZUI] FontBake body=26 small=21 header=34 FontScale=0.50
[2026-09-09 09:07:45.633] [ENGINE] [info] [ZUI] Style.FontSize=13 FrameHeight=19
[2026-09-09 09:07:45.634] [ENGINE] [info] Engine main loop starting — FixedDT=0.0167s MaxSteps=5
[2026-09-09 09:07:45.674] [ENGINE] [info] [ZUI] UIScale=1.00 Screen=2560x1369 (logical) ContentScale=1.00
[2026-09-09 09:07:45.701] [ENGINE] [info] [RRM] Uploaded mesh: 59 verts (1888 bytes), 102 indices (408 bytes) — vtx@0 idx@0
[2026-09-09 09:07:46.128] [ENGINE] [info] [GraphicRenderer] Bound TransformSB/DrawDataSB/MatSB/LightSB to passes
[2026-09-09 09:07:46.129] [ENGINE] [info] [GraphicRenderer] Bound global VertexSB/IndexSB to geometry passes
[2026-09-09 09:07:52.057] [ENGINE] [info] [RRM] Uploaded mesh: 20660 verts (661120 bytes), 99258 indices (397032 bytes) — vtx@59 idx@102
[2026-09-09 09:07:52.335] [ENGINE] [error] vkQueueSubmit(): pSubmits[0].pSignalSemaphores[0] (VkSemaphore 0x50000000005) signaled with value 334 which is smaller than the current value 18446744073709551615
The Vulkan spec states: For each element of pSignalSemaphores created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE the corresponding element of VkTimelineSemaphoreSubmitInfo::pSignalSemaphoreValues must have a value greater than the current value of the semaphore when the semaphore signal operation is executed (https://docs.vulkan.org/spec/latest/chapters/cmdbuffers.html#VUID-VkSubmitInfo-pSignalSemaphores-03242)
[2026-09-09 09:07:52.339] [ENGINE] [error] [DIAG] Semaphore 0x50000000005 ALREADY CORRUPTED before signalling 337 — corruption is upstream
[2026-09-09 09:07:52.339] [ENGINE] [critical] [DIAG] Timeline semaphore corrupted — see engine log
[2026-09-09 09:08:02.972] [ENGINE] [error] [DIAG] Semaphore 0x50000000005 NON-MONOTONIC: current=18446744073709551615 next=337 — THIS is the corrupting site
[2026-09-09 09:08:02.979] [ENGINE] [critical] [DIAG] Timeline semaphore non-monotonic — see engine log
[2026-09-09 09:08:03.706] [ENGINE] [error] vkQueueSubmit(): pSubmits[0].pSignalSemaphores[0] signal value (337) in VkQueue 0x1d301d21dd8 must be greater than current timeline semaphore VkSemaphore 0x50000000005 value (1844674407370955161

@JeanPhilippeKernel

Copy link
Copy Markdown
Owner Author

[2026-09-09 09:15:42.212] [ENGINE] [info] [RRM] Geometry pool: auto-detected 512 MB vtx + 512 MB idx (15% of largest device-local heap)
[2026-09-09 09:15:44.931] [ENGINE] [info] Fallback texture ready
[2026-09-09 09:15:45.053] [ENGINE] [info] Engine initialized
[2026-09-09 09:15:45.708] [ENGINE] [warning] Pipeline 'Depth-Prepass-Pipeline': 4 unset input(s): DrawDataSB, IndexSB, VertexSB, TransformSB
[2026-09-09 09:15:45.936] [ENGINE] [error] vkCreateShaderModule(): SPIR-V Capability Int64 was declared, but one of the following requirements is required (VkPhysicalDeviceFeatures::shaderInt64).
The Vulkan spec states: If pCode is a pointer to SPIR-V code, and pCode declares any of the capabilities listed in the SPIR-V Environment appendix, one of the corresponding requirements must be satisfied (https://docs.vulkan.org/spec/latest/chapters/shaders.html#VUID-VkShaderModuleCreateInfo-pCode-08740)
[2026-09-09 09:15:45.956] [ENGINE] [warning] Pipeline 'GBuffer-Pipeline': 5 unset input(s): DrawDataSB, IndexSB, VertexSB, TransformSB, MatSB
[2026-09-09 09:15:46.920] [ENGINE] [info] [ZUI] FontBake body=26 small=21 header=34 FontScale=0.50
[2026-09-09 09:15:47.532] [ENGINE] [info] [ZUI] Style.FontSize=13 FrameHeight=19
[2026-09-09 09:15:47.533] [ENGINE] [info] Engine main loop starting — FixedDT=0.0167s MaxSteps=5
[2026-09-09 09:15:47.564] [ENGINE] [info] [ZUI] UIScale=1.00 Screen=2560x1369 (logical) ContentScale=1.00
[2026-09-09 09:15:47.593] [ENGINE] [info] [RRM] Uploaded mesh: 59 verts (1888 bytes), 102 indices (408 bytes) — vtx@0 idx@0
[2026-09-09 09:15:48.018] [ENGINE] [info] [GraphicRenderer] Bound TransformSB/DrawDataSB/MatSB/LightSB to passes
[2026-09-09 09:15:48.019] [ENGINE] [info] [GraphicRenderer] Bound global VertexSB/IndexSB to geometry passes
[2026-09-09 09:15:55.195] [ENGINE] [info] Window has been restored
[2026-09-09 09:15:55.195] [ENGINE] [info] Window size updated, Width = 1500, Height = 800
[2026-09-09 09:15:55.195] [ENGINE] [info] Window has been resized
[2026-09-09 09:15:55.607] [ENGINE] [warning] Swapchain recreated: 1500x800
[2026-09-09 09:15:59.194] [ENGINE] [info] Window has been maximized
[2026-09-09 09:15:59.194] [ENGINE] [info] Window size updated, Width = 2560, Height = 1369
[2026-09-09 09:15:59.194] [ENGINE] [info] Window has been resized
[2026-09-09 09:15:59.398] [ENGINE] [warning] Swapchain recreated: 2560x1369
[2026-09-09 09:16:05.118] [ENGINE] [info] [RRM] Uploaded mesh: 20660 verts (661120 bytes), 99258 indices (397032 bytes) — vtx@59 idx@102
[2026-09-09 09:16:05.131] [ENGINE] [error] [DIAG] Semaphore 0x50000000005 ALREADY CORRUPTED before signalling 1175 — corruption is upstream
[2026-09-09 09:16:05.131] [ENGINE] [critical] [DIAG] Timeline semaphore corrupted — see engine log
[2026-09-09 09:16:16.953] [ENGINE] [error] [DIAG] Semaphore 0x50000000005 NON-MONOTONIC: current=18446744073709551615 next=1175 — THIS is the corrupting site
[2026-09-09 09:16:16.956] [ENGINE] [critical] [DIAG] Timeline semaphore non-monotonic — see engine log
[2026-09-09 09:16:18.708] [ENGINE] [error] vkQueueSubmit(): pSubmits[0].pSignalSemaphores[0] signal value (1175) in VkQueue 0x2c681e62b88 must be greater than current timeline semaphore VkSemaphore 0x50000000005 value (18446744073709551615).
The Vulkan spec states: For each element of pSignalSemaphores created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE the corresponding element of VkTimelineSemaphoreSubmitInfo::pSignalSemaphoreValues must have a value greater than the current value of the semaphore when the semaphore signal operation is executed (https://docs.vulkan.org/spec/latest/chapters/cmdbuffers.html#VUID-VkSubmitInfo-pSignalSemaphores-03242)
[2026-09-09 09:16:18.708] [ENGINE] [error] [DIAG] Semaphore 0x50000000005 ALREADY CORRUPTED before signalling 1176 — corruption is upstream
[2026-09-09 09:16:18.708] [ENGINE] [critical] [DIAG] Timeline semaphore corrupted — see engine log
[2026-09-09 09:16:20.334] [ENGINE] [error] [DIAG] Semaphore 0x50000000005 NON-MONOTONIC: current=18446744073709551615 next=1176 — THIS is the corrupting site
[2026-09-09 09:16:20.334] [ENGINE] [critical] [DIAG] Timeline semaphore non-monotonic — see engine log
[2026-09-09 09:16:21.152] [ENGINE] [error] vkQueueSubmit(): pSubmits[0].pSignalSemaphores[0] signal value (1176) in VkQueue 0x2c681e62b88 must be greater than current timeline semaphore VkSemaphore 0x50000000005 value (18446744073709551615).
The Vulkan spec states: For each element of pSignalSemaphores created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE the corresponding element of VkTimelineSemaphoreSubmitInfo::pSignalSemaphoreValues must have a value greater than the current value of the semaphore when the semaphore signal operation is executed (https://docs.vulkan.org/spec/latest/chapters/cmdbuffers.html#VUID-VkSubmitInfo-pSignalSemaphores-03242)
[2026-09-09 09:16:21.187] [ENGINE] [critical] [GPU] VK_ERROR_DEVICE_LOST detected in Present: render work submit — halting further Vulkan submission
[2026-09-09 09:16:38.850] [ENGINE] [info] Window has been closed
[2026-09-09 09:16:38.851] [ENGINE] [info] Engine main loop exited after 2438 frames
[2026-09-09 09:16:39.451] [ENGINE] [warning] [GPU] VMA shutdown: 2 allocation(s) still live (1 MB)

@JeanPhilippeKernel JeanPhilippeKernel changed the title diag: ASSERT_TIMELINE_MONOTONIC — pinpoint Intel RenderTimeline corruption fix(vulkan,rendering,editor): vkQueueSubmit2, deferred texture upload, async drag-drop Sep 9, 2026
@JeanPhilippeKernel
JeanPhilippeKernel marked this pull request as ready for review September 9, 2026 03:39
@JeanPhilippeKernel
JeanPhilippeKernel force-pushed the diag/timeline-semaphore-intel-guard branch from a0d0342 to 7152b8a Compare September 9, 2026 03:44
@JeanPhilippeKernel JeanPhilippeKernel self-assigned this Sep 9, 2026
@JeanPhilippeKernel JeanPhilippeKernel added this to the Stable Core (1.0.0) milestone Sep 9, 2026
@JeanPhilippeKernel JeanPhilippeKernel moved this to In Progress in ZEngine Board Sep 9, 2026
@JeanPhilippeKernel JeanPhilippeKernel added area-linux Work on Linux system area-window Work on Window system area-macOS Work on macOS system labels Sep 9, 2026
@JeanPhilippeKernel
JeanPhilippeKernel force-pushed the diag/timeline-semaphore-intel-guard branch from f46b411 to 95eb902 Compare September 9, 2026 08:06
@JeanPhilippeKernel

Copy link
Copy Markdown
Owner Author

another crash on windows

[2026-09-09 19:23:38.702] [ENGINE] [info] ||
[2026-09-09 19:23:38.702] [ENGINE] [info]
[2026-09-09 19:23:38.709] [ENGINE] [info] Using "Intel(R) Iris(R) Plus Graphics" with driver: "C:\WINDOWS\System32\DriverStore\FileRepository\iigd_dch.inf_amd64_c7d8ede2ab197971\igvk64.dll"
[2026-09-09 19:23:42.238] [ENGINE] [info] [RRM] Geometry pool: auto-detected 512 MB vtx + 512 MB idx (15% of largest device-local heap)
[2026-09-09 19:23:44.378] [ENGINE] [info] Fallback texture ready
[2026-09-09 19:23:44.436] [ENGINE] [info] Engine initialized
[2026-09-09 19:23:44.872] [ENGINE] [warning] Pipeline 'Depth-Prepass-Pipeline': 4 unset input(s): DrawDataSB, IndexSB, VertexSB, TransformSB
[2026-09-09 19:23:45.043] [ENGINE] [error] vkCreateShaderModule(): SPIR-V Capability Int64 was declared, but one of the following requirements is required (VkPhysicalDeviceFeatures::shaderInt64).
The Vulkan spec states: If pCode is a pointer to SPIR-V code, and pCode declares any of the capabilities listed in the SPIR-V Environment appendix, one of the corresponding requirements must be satisfied (https://docs.vulkan.org/spec/latest/chapters/shaders.html#VUID-VkShaderModuleCreateInfo-pCode-08740)
[2026-09-09 19:23:45.055] [ENGINE] [warning] Pipeline 'GBuffer-Pipeline': 5 unset input(s): DrawDataSB, IndexSB, VertexSB, TransformSB, MatSB
[2026-09-09 19:23:45.882] [ENGINE] [info] [ZUI] FontBake body=26 small=21 header=34 FontScale=0.50
[2026-09-09 19:23:46.351] [ENGINE] [info] [ZUI] Style.FontSize=13 FrameHeight=19
[2026-09-09 19:23:46.352] [ENGINE] [info] Engine main loop starting — FixedDT=0.0167s MaxSteps=5
[2026-09-09 19:23:46.392] [ENGINE] [info] [ZUI] UIScale=1.00 Screen=2560x1369 (logical) ContentScale=1.00
[2026-09-09 19:23:46.414] [ENGINE] [info] [RRM] Uploaded mesh: 59 verts (1888 bytes), 102 indices (408 bytes) — vtx@0 idx@0
[2026-09-09 19:23:46.717] [ENGINE] [info] [GraphicRenderer] Bound TransformSB/DrawDataSB/MatSB/LightSB to passes
[2026-09-09 19:23:46.718] [ENGINE] [info] [GraphicRenderer] Bound global VertexSB/IndexSB to geometry passes
[2026-09-09 19:24:04.445] [ENGINE] [info] [RRM] Uploaded mesh: 116469 verts (3727008 bytes), 508083 indices (2032332 bytes) — vtx@59 idx@102
[2026-09-09 19:24:04.471] [ENGINE] [error] vkQueueSubmit2(): pSubmits[0].pSignalSemaphoreInfos[0] (VkSemaphore 0x50000000005) signaled with value 2042 which is smaller than the current value 18446744073709551615
The Vulkan spec states: If the semaphore member of any element of pSignalSemaphoreInfos is a timeline semaphore, the value member of that element must have a value greater than the current value of the semaphore when the semaphore signal operation is executed (https://docs.vulkan.org/spec/latest/chapters/cmdbuffers.html#VUID-VkSubmitInfo2-semaphore-03882)
[2026-09-09 19:24:04.479] [ENGINE] [error] vkDestroyBuffer(): can't be called on VkBuffer 0xe400000000e4 that is currently in use by VkCommandBuffer 0x27570ba44c8.
The Vulkan spec states: All submitted commands that refer to buffer, either directly or via a VkBufferView, must have completed execution (https://docs.vulkan.org/spec/latest/chapters/resources.html#VUID-vkDestroyBuffer-buffer-00922)
[2026-09-09 19:24:04.480] [ENGINE] [error] vkDestroyBuffer(): can't be called on VkBuffer 0xe500000000e5 that is currently in use by VkCommandBuffer 0x27570ba44c8.
The Vulkan spec states: All submitted commands that refer to buffer, either directly or via a VkBufferView, must have completed execution (https://docs.vulkan.org/spec/latest/chapters/resources.html#VUID-vkDestroyBuffer-buffer-00922)
[2026-09-09 19:24:04.485] [ENGINE] [error] vkQueueSubmit2(): pSubmits[0].pSignalSemaphoreInfos[0].semaphore signal value (2045) in VkQueue 0x27301dc07d8 must be greater than current timeline semaphore VkSemaphore 0x50000000005 value (18446744073709551615).
The Vulkan spec states: If the semaphore member of any element of pSignalSemaphoreInfos is a timeline semaphore, the value member of that element must have a value greater than the current value of the semaphore when the semaphore signal operation is executed (https://docs.vulkan.org/spec/latest/chapters/cmdbuffers.html#VUID-VkSubmitInfo2-semaphore-03882)
[2026-09-09 19:24:04.486] [ENGINE] [error] vkQueueSubmit2(): pSubmits[0].pSignalSemaphoreInfos[0].semaphore signal value (2046) in VkQueue 0x27301dc07d8 must be greater than current timeline semaphore VkSemaphore 0x50000000005 value (18446744073709551615).
The Vulkan spec states: If the semaphore member of any element of pSignalSemaphoreInfos is a timeline semaphore, the value member of that element must have a value greater than the current value of the semaphore when the semaphore signal operation is executed (https://docs.vulkan.org/spec/latest/chapters/cmdbuffers.html#VUID-VkSubmitInfo2-semaphore-03882)
[2026-09-09 19:24:04.502] [ENGINE] [critical] [GPU] VK_ERROR_DEVICE_LOST detected in Present: render work submit — halting further Vulkan submission
[2026-09-09 19:25:29.888] [ENGINE] [info] Window has been restored
[2026-09-09 19:25:29.888] [ENGINE] [info] Window size updated, Width = 1500, Height = 800
[2026-09-09 19:25:29.888] [ENGINE] [info] Window has been resized
[2026-09-09 19:26:26.957] [ENGINE] [info] Window has been closed
[2026-09-09 19:26:26.957] [ENGINE] [info] Engine main loop exited after 10961 frames
[2026-09-09 19:26:27.395] [ENGINE] [info] Engine destroyed

@JeanPhilippeKernel

Copy link
Copy Markdown
Owner Author

[2026-09-09 20:06:00.966] [ENGINE] [info] Window created, Width = 1500, Height = 800
[2026-09-09 20:06:00.966] [ENGINE] [info] Input devices initialized
[2026-09-09 20:06:00.971] [ENGINE] [info] Window size updated, Width = 2560, Height = 1369
[2026-09-09 20:06:01.312] [ENGINE] [info] Description: Debugging capture layer for RenderDoc --- LayerName: VK_LAYER_RENDERDOC_Capture
[2026-09-09 20:06:01.624] [ENGINE] [info] Description: Khronos Validation Layer --- LayerName: VK_LAYER_KHRONOS_validation
[2026-09-09 20:06:01.887] [ENGINE] [info] Description: LunarG API dump layer --- LayerName: VK_LAYER_LUNARG_api_dump
[2026-09-09 20:06:02.134] [ENGINE] [info] Description: Crash Diagnostic Layer is a crash/hang debugging tool that helps determines GPU progress in a Vulkan application. --- LayerName: VK_LAYER_LUNARG_crash_diagnostic
[2026-09-09 20:06:02.377] [ENGINE] [info] Description: GFXReconstruct Capture Layer Version 1.0.5 --- LayerName: VK_LAYER_LUNARG_gfxreconstruct
[2026-09-09 20:06:02.497] [ENGINE] [info] Description: Execution Monitoring Layer --- LayerName: VK_LAYER_LUNARG_monitor
[2026-09-09 20:06:02.749] [ENGINE] [info] Description: LunarG image capture layer --- LayerName: VK_LAYER_LUNARG_screenshot
[2026-09-09 20:06:03.036] [ENGINE] [info] Description: Khronos Profiles layer --- LayerName: VK_LAYER_KHRONOS_profiles
[2026-09-09 20:06:03.328] [ENGINE] [info] Description: Khronos Shader object layer --- LayerName: VK_LAYER_KHRONOS_shader_object
[2026-09-09 20:06:03.555] [ENGINE] [info] Description: Khronos Synchronization2 layer --- LayerName: VK_LAYER_KHRONOS_synchronization2
[2026-09-09 20:06:05.001] [ENGINE] [info] Inserted device layer "VK_LAYER_KHRONOS_synchronization2" (C:\VulkanSDK\1.4.341.1\Bin\VkLayer_khronos_synchronization2.dll)
[2026-09-09 20:06:05.001] [ENGINE] [info] Inserted device layer "VK_LAYER_LUNARG_monitor" (C:\VulkanSDK\1.4.341.1\Bin\VkLayer_monitor.dll)
[2026-09-09 20:06:05.001] [ENGINE] [info] Inserted device layer "VK_LAYER_LUNARG_screenshot" (C:\VulkanSDK\1.4.341.1\Bin\VkLayer_screenshot.dll)
[2026-09-09 20:06:05.001] [ENGINE] [info] vkCreateDevice layer callstack setup to:
[2026-09-09 20:06:05.001] [ENGINE] [info]
[2026-09-09 20:06:05.001] [ENGINE] [info] Inserted device layer "VK_LAYER_KHRONOS_validation" (C:\VulkanSDK\1.4.341.1\Bin\VkLayer_khronos_validation.dll)
[2026-09-09 20:06:05.001] [ENGINE] [info]
[2026-09-09 20:06:05.001] [ENGINE] [info] ||
[2026-09-09 20:06:05.001] [ENGINE] [info] VK_LAYER_KHRONOS_validation
[2026-09-09 20:06:05.001] [ENGINE] [info] ||
[2026-09-09 20:06:05.001] [ENGINE] [info] Enabled By: Loader Settings File (Vulkan Configurator)
[2026-09-09 20:06:05.001] [ENGINE] [info] Manifest: C:\VulkanSDK\1.4.341.1\Bin\VkLayer_khronos_validation.json
[2026-09-09 20:06:05.001] [ENGINE] [info] Library: C:\VulkanSDK\1.4.341.1\Bin\VkLayer_khronos_validation.dll
[2026-09-09 20:06:05.001] [ENGINE] [info] Type: Explicit
[2026-09-09 20:06:05.001] [ENGINE] [info] VK_LAYER_LUNARG_monitor
[2026-09-09 20:06:05.001] [ENGINE] [info] Type: Explicit
[2026-09-09 20:06:05.001] [ENGINE] [info] ||
[2026-09-09 20:06:05.001] [ENGINE] [info] Manifest: C:\VulkanSDK\1.4.341.1\Bin\VkLayer_monitor.json
[2026-09-09 20:06:05.001] [ENGINE] [info] Library: C:\VulkanSDK\1.4.341.1\Bin\VkLayer_monitor.dll
[2026-09-09 20:06:05.001] [ENGINE] [info] Enabled By: By the Application
[2026-09-09 20:06:05.001] [ENGINE] [info] VK_LAYER_LUNARG_screenshot
[2026-09-09 20:06:05.001] [ENGINE] [info] Type: Explicit
[2026-09-09 20:06:05.001] [ENGINE] [info] ||
[2026-09-09 20:06:05.001] [ENGINE] [info] Manifest: C:\VulkanSDK\1.4.341.1\Bin\VkLayer_screenshot.json
[2026-09-09 20:06:05.001] [ENGINE] [info] Library: C:\VulkanSDK\1.4.341.1\Bin\VkLayer_screenshot.dll
[2026-09-09 20:06:05.001] [ENGINE] [info] Enabled By: By the Application
[2026-09-09 20:06:05.002] [ENGINE] [info] VK_LAYER_KHRONOS_synchronization2
[2026-09-09 20:06:05.002] [ENGINE] [info] ||
[2026-09-09 20:06:05.002] [ENGINE] [info] Enabled By: By the Application
[2026-09-09 20:06:05.002] [ENGINE] [info] Type: Explicit
[2026-09-09 20:06:05.002] [ENGINE] [info] Library: C:\VulkanSDK\1.4.341.1\Bin\VkLayer_khronos_synchronization2.dll
[2026-09-09 20:06:05.002] [ENGINE] [info] ||
[2026-09-09 20:06:05.002] [ENGINE] [info]
[2026-09-09 20:06:05.002] [ENGINE] [info] Manifest: C:\VulkanSDK\1.4.341.1\Bin\VkLayer_khronos_synchronization2.json
[2026-09-09 20:06:05.008] [ENGINE] [info] Using "Intel(R) Iris(R) Plus Graphics" with driver: "C:\WINDOWS\System32\DriverStore\FileRepository\iigd_dch.inf_amd64_c7d8ede2ab197971\igvk64.dll"
[2026-09-09 20:06:09.603] [ENGINE] [info] [RRM] Geometry pool: auto-detected 512 MB vtx + 512 MB idx (15% of largest device-local heap)
[2026-09-09 20:06:13.181] [ENGINE] [info] Fallback texture ready
[2026-09-09 20:06:13.257] [ENGINE] [info] Engine initialized
[2026-09-09 20:06:13.663] [ENGINE] [warning] Pipeline 'Depth-Prepass-Pipeline': 4 unset input(s): DrawDataSB, IndexSB, VertexSB, TransformSB
[2026-09-09 20:06:14.203] [ENGINE] [warning] Pipeline 'GBuffer-Pipeline': 5 unset input(s): DrawDataSB, IndexSB, VertexSB, TransformSB, MatSB
[2026-09-09 20:06:15.008] [ENGINE] [info] [ZUI] FontBake body=26 small=21 header=34 FontScale=0.50
[2026-09-09 20:06:15.349] [ENGINE] [info] [ZUI] Style.FontSize=13 FrameHeight=19
[2026-09-09 20:06:15.351] [ENGINE] [info] Engine main loop starting — FixedDT=0.0167s MaxSteps=5
[2026-09-09 20:06:15.375] [ENGINE] [info] [ZUI] UIScale=1.00 Screen=2560x1369 (logical) ContentScale=1.00
[2026-09-09 20:06:15.406] [ENGINE] [info] [RRM] Uploaded mesh: 59 verts (1888 bytes), 102 indices (408 bytes) — vtx@0 idx@0
[2026-09-09 20:06:15.728] [ENGINE] [info] [GraphicRenderer] Bound TransformSB/DrawDataSB/MatSB/LightSB to passes
[2026-09-09 20:06:15.728] [ENGINE] [info] [GraphicRenderer] Bound global VertexSB/IndexSB to geometry passes
[2026-09-09 20:06:57.984] [ENGINE] [info] [RRM] Uploaded mesh: 116469 verts (3727008 bytes), 508083 indices (2032332 bytes) — vtx@59 idx@102
[2026-09-09 20:06:58.088] [ENGINE] [error] vkQueueSubmit2(): pSubmits[0].pSignalSemaphoreInfos[0] (VkSemaphore 0x50000000005) signaled with value 4350 which is smaller than the current value 18446744073709551615
The Vulkan spec states: If the semaphore member of any element of pSignalSemaphoreInfos is a timeline semaphore, the value member of that element must have a value greater than the current value of the semaphore when the semaphore signal operation is executed (https://docs.vulkan.org/spec/latest/chapters/cmdbuffers.html#VUID-VkSubmitInfo2-semaphore-03882)
[2026-09-09 20:06:58.090] [ENGINE] [error] vkDestroyBuffer(): can't be called on VkBuffer 0xe400000000e4 that is currently in use by VkCommandBuffer 0x19ecee201c8.
The Vulkan spec states: All submitted commands that refer to buffer, either directly or via a VkBufferView, must have completed execution (https://docs.vulkan.org/spec/latest/chapters/resources.html#VUID-vkDestroyBuffer-buffer-00922)
[2026-09-09 20:06:58.091] [ENGINE] [error] vkDestroyBuffer(): can't be called on VkBuffer 0xe500000000e5 that is currently in use by VkCommandBuffer 0x19ecee201c8.
The Vulkan spec states: All submitted commands that refer to buffer, either directly or via a VkBufferView, must have completed execution (https://docs.vulkan.org/spec/latest/chapters/resources.html#VUID-vkDestroyBuffer-buffer-00922)
[2026-09-09 20:06:58.094] [ENGINE] [error] vkQueueSubmit2(): pSubmits[0].pSignalSemaphoreInfos[0].semaphore signal value (4353) in VkQueue 0x19e81d3a668 must be greater than current timeline semaphore VkSemaphore 0x50000000005 value (18446744073709551615).
The Vulkan spec states: If the semaphore member of any element of pSignalSemaphoreInfos is a timeline semaphore, the value member of that element must have a value greater than the current value of the semaphore when the semaphore signal operation is executed (https://docs.vulkan.org/spec/latest/chapters/cmdbuffers.html#VUID-VkSubmitInfo2-semaphore-03882)
[2026-09-09 20:06:58.095] [ENGINE] [error] vkQueueSubmit2(): pSubmits[0].pSignalSemaphoreInfos[0].semaphore signal value (4354) in VkQueue 0x19e81d3a668 must be greater than current timeline semaphore VkSemaphore 0x50000000005 value (18446744073709551615).
The Vulkan spec states: If the semaphore member of any element of pSignalSemaphoreInfos is a timeline semaphore, the value member of that element must have a value greater than the current value of the semaphore when the semaphore signal operation is executed (https://docs.vulkan.org/spec/latest/chapters/cmdbuffers.html#VUID-VkSubmitInfo2-semaphore-03882)
[2026-09-09 20:06:58.105] [ENGINE] [critical] [GPU] VK_ERROR_DEVICE_LOST detected in Present: render work submit — halting further Vulkan submission
[2026-09-09 20:08:07.693] [ENGINE] [info] Window has been closed
[2026-09-09 20:08:07.694] [ENGINE] [info] Engine main loop exited after 8677 frames
[2026-09-09 20:08:08.123] [ENGINE] [info] Engine destroyed

@JeanPhilippeKernel

Copy link
Copy Markdown
Owner Author

[2026-09-09 21:13:34.415] [ENGINE] [info] Fallback texture ready
[2026-09-09 21:13:34.504] [ENGINE] [info] Engine initialized
[2026-09-09 21:13:35.144] [ENGINE] [warning] Pipeline 'Depth-Prepass-Pipeline': 4 unset input(s): DrawDataSB, IndexSB, VertexSB, TransformSB
[2026-09-09 21:13:35.375] [ENGINE] [warning] Pipeline 'GBuffer-Pipeline': 5 unset input(s): DrawDataSB, IndexSB, VertexSB, TransformSB, MatSB
[2026-09-09 21:13:36.215] [ENGINE] [info] [ZUI] FontBake body=26 small=21 header=34 FontScale=0.50
[2026-09-09 21:13:36.593] [ENGINE] [info] [ZUI] Style.FontSize=13 FrameHeight=19
[2026-09-09 21:13:36.594] [ENGINE] [info] Engine main loop starting — FixedDT=0.0167s MaxSteps=5
[2026-09-09 21:13:36.629] [ENGINE] [info] [ZUI] UIScale=1.00 Screen=2560x1369 (logical) ContentScale=1.00
[2026-09-09 21:13:36.664] [ENGINE] [info] [RRM] Uploaded mesh: 59 verts (1888 bytes), 102 indices (408 bytes) — vtx@0 idx@0
[2026-09-09 21:13:37.020] [ENGINE] [info] [GraphicRenderer] Bound TransformSB/DrawDataSB/MatSB/LightSB to passes
[2026-09-09 21:13:37.020] [ENGINE] [info] [GraphicRenderer] Bound global VertexSB/IndexSB to geometry passes
[2026-09-09 21:13:50.881] [ENGINE] [info] Window has been restored
[2026-09-09 21:13:50.881] [ENGINE] [info] Window size updated, Width = 1500, Height = 800
[2026-09-09 21:13:50.881] [ENGINE] [info] Window has been resized
[2026-09-09 21:13:51.112] [ENGINE] [warning] Swapchain recreated: 1500x800
[2026-09-09 21:13:57.221] [ENGINE] [info] Window has been maximized
[2026-09-09 21:13:57.221] [ENGINE] [info] Window size updated, Width = 2560, Height = 1369
[2026-09-09 21:13:57.221] [ENGINE] [info] Window has been resized
[2026-09-09 21:13:57.420] [ENGINE] [warning] Swapchain recreated: 2560x1369
[2026-09-09 21:14:07.899] [ENGINE] [info] [RRM] Uploaded mesh: 20660 verts (661120 bytes), 99258 indices (397032 bytes) — vtx@59 idx@102
[2026-09-09 21:14:07.921] [ENGINE] [error] vkQueueSubmit2(): pSubmits[0].pSignalSemaphoreInfos[0].semaphore signal value (3165) in VkQueue 0x1e401e65f98 must be greater than current timeline semaphore VkSemaphore 0x50000000005 value (18446744073709551615).
The Vulkan spec states: If the semaphore member of any element of pSignalSemaphoreInfos is a timeline semaphore, the value member of that element must have a value greater than the current value of the semaphore when the semaphore signal operation is executed (https://docs.vulkan.org/spec/latest/chapters/cmdbuffers.html#VUID-VkSubmitInfo2-semaphore-03882)
[2026-09-09 21:14:07.922] [ENGINE] [error] vkQueueSubmit2(): pSubmits[0].pSignalSemaphoreInfos[0].semaphore signal value (3166) in VkQueue 0x1e401e65f98 must be greater than current timeline semaphore VkSemaphore 0x50000000005 value (18446744073709551615).
The Vulkan spec states: If the semaphore member of any element of pSignalSemaphoreInfos is a timeline semaphore, the value member of that element must have a value greater than the current value of the semaphore when the semaphore signal operation is executed (https://docs.vulkan.org/spec/latest/chapters/cmdbuffers.html#VUID-VkSubmitInfo2-semaphore-03882)
[2026-09-09 21:14:07.927] [ENGINE] [critical] [GPU] VK_ERROR_DEVICE_LOST detected in Present: render work submit — halting further Vulkan submission
[2026-09-09 21:14:39.582] [ENGINE] [info] Window has been restored
[2026-09-09 21:14:39.582] [ENGINE] [info] Window size updated, Width = 1500, Height = 800
[2026-09-09 21:14:39.582] [ENGINE] [info] Window has been resized
[2026-09-09 21:14:49.913] [ENGINE] [info] Window has been closed
[2026-09-09 21:14:49.913] [ENGINE] [info] Engine main loop exited after 5705 frames
[2026-09-09 21:14:50.259] [ENGINE] [warning] [GPU] VMA shutdown: 2 allocation(s) still live (1 MB)

@JeanPhilippeKernel

Copy link
Copy Markdown
Owner Author

[2026-09-09 21:17:53.991] [ENGINE] [info] Using "Intel(R) Iris(R) Plus Graphics" with driver: "C:\WINDOWS\System32\DriverStore\FileRepository\iigd_dch.inf_amd64_c7d8ede2ab197971\igvk64.dll"
[2026-09-09 21:17:55.443] [ENGINE] [info] [RRM] Geometry pool: auto-detected 512 MB vtx + 512 MB idx (15% of largest device-local heap)
[2026-09-09 21:17:56.151] [ENGINE] [info] Fallback texture ready
[2026-09-09 21:17:56.183] [ENGINE] [info] Engine initialized
[2026-09-09 21:17:56.423] [ENGINE] [warning] Pipeline 'Depth-Prepass-Pipeline': 4 unset input(s): DrawDataSB, IndexSB, VertexSB, TransformSB
[2026-09-09 21:17:56.465] [ENGINE] [warning] Pipeline 'GBuffer-Pipeline': 5 unset input(s): DrawDataSB, IndexSB, VertexSB, TransformSB, MatSB
[2026-09-09 21:17:56.695] [ENGINE] [info] [ZUI] FontBake body=26 small=21 header=34 FontScale=0.50
[2026-09-09 21:17:56.859] [ENGINE] [info] [ZUI] Style.FontSize=13 FrameHeight=19
[2026-09-09 21:17:56.859] [ENGINE] [info] Engine main loop starting — FixedDT=0.0167s MaxSteps=5
[2026-09-09 21:17:56.934] [ENGINE] [info] [ZUI] UIScale=1.00 Screen=2560x1369 (logical) ContentScale=1.00
[2026-09-09 21:17:56.949] [ENGINE] [info] [RRM] Uploaded mesh: 59 verts (1888 bytes), 102 indices (408 bytes) — vtx@0 idx@0
[2026-09-09 21:17:57.153] [ENGINE] [info] [GraphicRenderer] Bound TransformSB/DrawDataSB/MatSB/LightSB to passes
[2026-09-09 21:17:57.153] [ENGINE] [info] [GraphicRenderer] Bound global VertexSB/IndexSB to geometry passes
[2026-09-09 21:18:01.628] [ENGINE] [info] [RRM] Uploaded mesh: 20660 verts (661120 bytes), 99258 indices (397032 bytes) — vtx@59 idx@102
[2026-09-09 21:18:01.644] [ENGINE] [error] vkDestroyBuffer(): can't be called on VkBuffer 0xc800000000c8 that is currently in use by VkCommandBuffer 0x168f00c2fc8.
The Vulkan spec states: All submitted commands that refer to buffer, either directly or via a VkBufferView, must have completed execution (https://docs.vulkan.org/spec/latest/chapters/resources.html#VUID-vkDestroyBuffer-buffer-00922)
[2026-09-09 21:18:01.644] [ENGINE] [error] vkDestroyBuffer(): can't be called on VkBuffer 0xc900000000c9 that is currently in use by VkCommandBuffer 0x168f00c2fc8.
The Vulkan spec states: All submitted commands that refer to buffer, either directly or via a VkBufferView, must have completed execution (https://docs.vulkan.org/spec/latest/chapters/resources.html#VUID-vkDestroyBuffer-buffer-00922)
[2026-09-09 21:18:01.646] [ENGINE] [error] vkQueueSubmit2(): pSubmits[0].pSignalSemaphoreInfos[0].semaphore signal value (539) in VkQueue 0x16681dd5928 must be greater than current timeline semaphore VkSemaphore 0x50000000005 value (18446744073709551615).
The Vulkan spec states: If the semaphore member of any element of pSignalSemaphoreInfos is a timeline semaphore, the value member of that element must have a value greater than the current value of the semaphore when the semaphore signal operation is executed (https://docs.vulkan.org/spec/latest/chapters/cmdbuffers.html#VUID-VkSubmitInfo2-semaphore-03882)
[2026-09-09 21:18:01.646] [ENGINE] [error] vkQueueSubmit2(): pSubmits[0].pSignalSemaphoreInfos[0].semaphore signal value (540) in VkQueue 0x16681dd5928 must be greater than current timeline semaphore VkSemaphore 0x50000000005 value (18446744073709551615).
The Vulkan spec states: If the semaphore member of any element of pSignalSemaphoreInfos is a timeline semaphore, the value member of that element must have a value greater than the current value of the semaphore when the semaphore signal operation is executed (https://docs.vulkan.org/spec/latest/chapters/cmdbuffers.html#VUID-VkSubmitInfo2-semaphore-03882)
[2026-09-09 21:18:01.647] [ENGINE] [critical] [GPU] VK_ERROR_DEVICE_LOST detected in Present: render work submit — halting further Vulkan submission
[2026-09-09 21:18:27.464] [ENGINE] [info] Window has been closed
[2026-09-09 21:18:27.465] [ENGINE] [info] Engine main loop exited after 2159 frames
[2026-09-09 21:18:27.769] [ENGINE] [info] Engine destroyed

@JeanPhilippeKernel

Copy link
Copy Markdown
Owner Author

[2026-09-09 22:41:33.443] [ENGINE] [info]
[2026-09-09 22:41:33.443] [ENGINE] [info] Type: Explicit
[2026-09-09 22:41:33.446] [ENGINE] [info] Using "Intel(R) Iris(R) Plus Graphics" with driver: "C:\WINDOWS\System32\DriverStore\FileRepository\iigd_dch.inf_amd64_c7d8ede2ab197971\igvk64.dll"
[2026-09-09 22:41:36.455] [ENGINE] [info] [RRM] Geometry pool: auto-detected 512 MB vtx + 512 MB idx (15% of largest device-local heap)
[2026-09-09 22:41:37.646] [ENGINE] [info] Fallback texture ready
[2026-09-09 22:41:37.686] [ENGINE] [info] Engine initialized
[2026-09-09 22:41:38.001] [ENGINE] [warning] Pipeline 'Depth-Prepass-Pipeline': 4 unset input(s): DrawDataSB, IndexSB, VertexSB, TransformSB
[2026-09-09 22:41:38.110] [ENGINE] [warning] Pipeline 'GBuffer-Pipeline': 5 unset input(s): DrawDataSB, IndexSB, VertexSB, TransformSB, MatSB
[2026-09-09 22:41:38.469] [ENGINE] [info] [ZUI] FontBake body=26 small=21 header=34 FontScale=0.50
[2026-09-09 22:41:38.709] [ENGINE] [info] [ZUI] Style.FontSize=13 FrameHeight=19
[2026-09-09 22:41:38.709] [ENGINE] [info] Engine main loop starting — FixedDT=0.0167s MaxSteps=5
[2026-09-09 22:41:38.730] [ENGINE] [info] [ZUI] UIScale=1.00 Screen=2560x1369 (logical) ContentScale=1.00
[2026-09-09 22:41:43.347] [ENGINE] [info] [RRM] Uploaded mesh: 59 verts (1888 bytes), 102 indices (408 bytes) — vtx@0 idx@0
[2026-09-09 22:41:43.349] [ENGINE] [info] [GraphicRenderer] Bound TransformSB/DrawDataSB/MatSB/LightSB to passes
[2026-09-09 22:41:43.349] [ENGINE] [info] [GraphicRenderer] Bound global VertexSB/IndexSB to geometry passes
[2026-09-09 22:42:18.399] [ENGINE] [info] [RRM] Uploaded mesh: 20660 verts (661120 bytes), 99258 indices (397032 bytes) — vtx@59 idx@102
[2026-09-09 22:42:18.459] [ENGINE] [critical] [GPU] VK_ERROR_DEVICE_LOST detected in Present(legacy): render submit — halting further Vulkan submission
[2026-09-09 22:42:50.345] [ENGINE] [info] Window has been restored
[2026-09-09 22:42:50.345] [ENGINE] [info] Window size updated, Width = 1500, Height = 800
[2026-09-09 22:42:50.345] [ENGINE] [info] Window has been resized
[2026-09-09 22:42:58.434] [ENGINE] [info] Window has been closed
[2026-09-09 22:42:58.435] [ENGINE] [info] Engine main loop exited after 4180 frames
[2026-09-09 22:42:59.035] [ENGINE] [info] Engine destroyed

@JeanPhilippeKernel

Copy link
Copy Markdown
Owner Author

[2026-09-09 23:27:32.458] [ENGINE] [info] Using "Intel(R) Iris(R) Plus Graphics" with driver: "C:\WINDOWS\System32\DriverStore\FileRepository\iigd_dch.inf_amd64_c7d8ede2ab197971\igvk64.dll"
[2026-09-09 23:27:36.335] [ENGINE] [info] [RRM] Geometry pool: auto-detected 512 MB vtx + 512 MB idx (15% of largest device-local heap)
[2026-09-09 23:27:39.216] [ENGINE] [info] Fallback texture ready
[2026-09-09 23:27:39.295] [ENGINE] [info] Engine initialized
[2026-09-09 23:27:39.822] [ENGINE] [warning] Pipeline 'Depth-Prepass-Pipeline': 4 unset input(s): DrawDataSB, IndexSB, VertexSB, TransformSB
[2026-09-09 23:27:39.996] [ENGINE] [warning] Pipeline 'GBuffer-Pipeline': 5 unset input(s): DrawDataSB, IndexSB, VertexSB, TransformSB, MatSB
[2026-09-09 23:27:40.753] [ENGINE] [info] [ZUI] FontBake body=26 small=21 header=34 FontScale=0.50
[2026-09-09 23:27:41.125] [ENGINE] [info] [ZUI] Style.FontSize=13 FrameHeight=19
[2026-09-09 23:27:41.125] [ENGINE] [info] Engine main loop starting — FixedDT=0.0167s MaxSteps=5
[2026-09-09 23:27:41.155] [ENGINE] [info] [ZUI] UIScale=1.00 Screen=2560x1369 (logical) ContentScale=1.00
[2026-09-09 23:27:41.176] [ENGINE] [info] [RRM] Uploaded mesh: 59 verts (1888 bytes), 102 indices (408 bytes) — vtx@0 idx@0
[2026-09-09 23:27:41.513] [ENGINE] [info] [GraphicRenderer] Bound TransformSB/DrawDataSB/MatSB/LightSB to passes
[2026-09-09 23:27:41.513] [ENGINE] [info] [GraphicRenderer] Bound global VertexSB/IndexSB to geometry passes
[2026-09-09 23:27:56.883] [ENGINE] [info] [RRM] Uploaded mesh: 116469 verts (3727008 bytes), 508083 indices (2032332 bytes) — vtx@59 idx@102
[2026-09-09 23:27:56.911] [ENGINE] [critical] [GPU] VK_ERROR_DEVICE_LOST detected in Present(legacy): render submit — halting further Vulkan submission
[2026-09-09 23:28:17.215] [ENGINE] [info] Window has been restored
[2026-09-09 23:28:17.216] [ENGINE] [info] Window size updated, Width = 1500, Height = 800
[2026-09-09 23:28:17.216] [ENGINE] [info] Window has been resized
[2026-09-09 23:28:25.450] [ENGINE] [info] Window has been closed
[2026-09-09 23:28:25.450] [ENGINE] [info] Engine main loop exited after 3472 frames
[2026-09-09 23:28:25.950] [ENGINE] [info] Engine destroyed

…2, uint32 material maps

- Halt engine at startup when VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS is detected:
  fences/semaphores signal before GPU execution completes on Intel HD/UHD Windows —
  no reliable Vulkan workaround exists. Clear user message directs to driver update
  or future D3D12 backend. Intel Arc (newer driver) and Linux ANV unaffected.
  Tracks as issue #775.

- Replace uint64_t material map fields with uint32_t in MaterialData (GLSL) and
  MeshMaterial (C++): removes GL_EXT_shader_explicit_arithmetic_types_int64 /
  shaderInt64 capability from GBuffer shader — Intel Iris Plus and other drivers
  that lack shaderInt64 now compile the pipeline successfully.

- Migrate all timeline semaphore submits from vkQueueSubmit+VkTimelineSemaphoreSubmitInfo
  to vkQueueSubmit2+VkSemaphoreSubmitInfo. Enable VkPhysicalDeviceSynchronization2Features.
  Fix type correctness: stage flag fields use VkPipelineStageFlags2. Remove
  ASSERT_TIMELINE_MONOTONIC and all 6 call sites.

- Deferred texture upload: texture async ops go into 1-frame SPSC deferred queues.
  Present() runs before SubmitAsyncUploads() so the same-frame GPU stall on drag-drop
  is eliminated. RequestDeferredDescriptorUpdate writes fallback then real image from
  the render thread to avoid concurrent vkUpdateDescriptorSets.

- Async drag-drop mesh deserialization: DeserializeMeshAssetFile and
  IngestMaterialFromUUID moved to ThreadPool worker with a dedicated ArenaAllocator
  (4x file size + 8 MB). Main-thread callback handles IngestMesh + actor create.

- Gate batch staging retirement on RenderTimeline (not m_batch_timeline): submit_1
  waits for batch before signalling RenderTimeline, guaranteeing GPU completion
  before staging buffers are freed. Submit batch immediately before Present() so
  geometry is always ready when render commands execute.

- Fix same-session texture bug: AppRenderPipeline::RenderScene used GetAsset<AssetMaterial>
  which returns null when VFSScanner marks the registry record Stale. Changed to
  UUIDToMaterialSlot.find() which is always authoritative after IngestMaterial.
@JeanPhilippeKernel
JeanPhilippeKernel force-pushed the diag/timeline-semaphore-intel-guard branch from 95eb902 to e5283ad Compare September 10, 2026 00:13
@JeanPhilippeKernel
JeanPhilippeKernel merged commit 1f43d21 into develop Sep 10, 2026
25 of 27 checks passed
@JeanPhilippeKernel
JeanPhilippeKernel deleted the diag/timeline-semaphore-intel-guard branch September 10, 2026 01:20
@github-project-automation github-project-automation Bot moved this from In Progress to Done in ZEngine Board Sep 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-linux Work on Linux system area-macOS Work on macOS system area-window Work on Window system vulkan-api

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

macOS-only GPU timeout (kIOGPUCommandBufferCallbackErrorTimeout) crashes VkDevice, root cause unknown

1 participant