Skip to content

GPU device lost on level load since 3d7b2ed4 — draw with an absent optional vertex stream hangs the GPU #16

Description

@awemancba

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).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions