Title
GPU device lost on level load since 3d7b2ed4 — draw with an absent optional vertex stream hangs the GPU
Platform
Windows 11, AMD Radeon RX 6700 (discrete desktop GPU). Reproducible on both Vulkan render paths (FSI and host), and reported on D3D12 as well. Not specific to this session's diagnostic changes — reproduced with a clean install after a launcher update.
Summary
Level 1 crashes the GPU (device lost) during loading: after compiling ~60 pipelines, the first draw submission fails:
[error] [gpu] Failed to submit a Vulkan command buffer
Last pipelines compiled before the hang:
VS 19EC96CCC26B8AE6, PS 9478DB87CE8D9912
VS 0677DFD4C857AE3C (+ PS F2F1A64657692D23 / PS A81BDA175F678D7C)
VS 458F2C9A0EEB7567, PS 1E3D21E625E808AD
Regression evidence
- The level loaded fine on the initial release build (with the known "invisible character" pop-in issue).
- After updating the launcher (which ships commits including
3d7b2ed4 "Fix invisible characters by default"), level 1 no longer loads.
3d7b2ed4 changed the handling of draws with invalid vertex streams:
- Before: any draw touching an invalid stream was muted (did not rasterize) — characters stayed invisible, but the level loaded.
- After: draws whose only invalid slots are absent optional streams (blend-shape bindings the shaders never read) rasterize by default (
gpu_allow_null_optional_streams, default true). One of those draws in level 1 hangs the GPU.
Confirmed workaround
gpu_allow_null_optional_streams = false
With this, level 1 loads (character invisible on load, becomes visible after dying/respawning — confirming the same optional-stream draw is being muted).
Stability with the workaround: a 90-minute play session ran without further issues (FMV logos, audio, level gameplay all fine; minor stutter at load and a small performance dip, otherwise fully playable).
Logs (attached)
simpsons_026.log (FSI path crash), simpsons_027.log (host path crash). The last ~30 lines contain the pipeline-compile burst and the failed submit. Note: logs contain local diagnostic instrumentation (VP6-* prefixes) not part of the project.
Suggested fix
Investigate the level-1 draw whose absent optional stream hangs the GPU — likely a blend-shape binding with invalid data/stride that should be vetoed by draw_util::ClassifyInvalidVertexFetch instead of rasterized (rather than reverting to the blanket mute).
Title
GPU device lost on level load since
3d7b2ed4— draw with an absent optional vertex stream hangs the GPUPlatform
Windows 11, AMD Radeon RX 6700 (discrete desktop GPU). Reproducible on both Vulkan render paths (FSI and host), and reported on D3D12 as well. Not specific to this session's diagnostic changes — reproduced with a clean install after a launcher update.
Summary
Level 1 crashes the GPU (device lost) during loading: after compiling ~60 pipelines, the first draw submission fails:
Last pipelines compiled before the hang:
VS 19EC96CCC26B8AE6, PS 9478DB87CE8D9912VS 0677DFD4C857AE3C(+PS F2F1A64657692D23/PS A81BDA175F678D7C)VS 458F2C9A0EEB7567, PS 1E3D21E625E808ADRegression evidence
3d7b2ed4"Fix invisible characters by default"), level 1 no longer loads.3d7b2ed4changed the handling of draws with invalid vertex streams:gpu_allow_null_optional_streams, default true). One of those draws in level 1 hangs the GPU.Confirmed workaround
With this, level 1 loads (character invisible on load, becomes visible after dying/respawning — confirming the same optional-stream draw is being muted).
Stability with the workaround: a 90-minute play session ran without further issues (FMV logos, audio, level gameplay all fine; minor stutter at load and a small performance dip, otherwise fully playable).
Logs (attached)
simpsons_026.log (FSI path crash), simpsons_027.log (host path crash). The last ~30 lines contain the pipeline-compile burst and the failed submit. Note: logs contain local diagnostic instrumentation (VP6-* prefixes) not part of the project.
Suggested fix
Investigate the level-1 draw whose absent optional stream hangs the GPU — likely a blend-shape binding with invalid data/stride that should be vetoed by
draw_util::ClassifyInvalidVertexFetchinstead of rasterized (rather than reverting to the blanket mute).