Skip to content

Code Violet (PPSA26528): abort at compute shader 0x147b9e400, "buffer descriptor has reserved bits set", new between d92a8dad3 and 51acb79ac #7051

Closed

Description

@erm14254

Since a change between d92a8da and 51acb79, Code Violet (PPSA26528, Unreal Engine 5.5) aborts before its title screen in ShaderResources::addGuestBuffer:

[videoout] presentation failed: compute shader 0x147b9e400: AGC graphics: buffer descriptor has reserved bits set
[gpu] driver failure: compute shader 0x147b9e400: AGC graphics: buffer descriptor has reserved bits set
terminate called after throwing an instance of 'std::runtime_error'
FATAL: abort() (SIGABRT) on thread 25168

That is Require((words[1] & 0x40000000u) == 0, "buffer descriptor has reserved bits set") at the top of addGuestBuffer: bit 30 of the V#'s second dword. The check itself predates d92a8da (#5049 normalises those bits before scalar binding; vector and mixed bindings still require them clear), so what changed is that this shader's buffer now reaches it with the bit set.

Windows 11 (10.0.22631), RTX PRO 6000 Blackwell Workstation Edition (NVIDIA 597.16), WinLibs GCC 15.2.0 r7, Release. The failing run had only APS5_TRACE_BIGBUF=1 and APS5_TRACE_HOST_IMPORT=1 set, which add log lines only.

Base Bring-up commits on top Result
d92a8da yes reaches the title screen and the main menu (#6256)
51acb79 yes, rebased cleanly aborts as above, about nine minutes into a cold run, before the title screen
0615cd2 no stops seconds after start at the NVIDIA compiler crash nvgpucomp64.dll+0x28072a1, which one of the bring-up commits handles

The bring-up commits are #6258 and the branches feat/shader-table-call-constant-pointer, feat/libkernel-system-gpu-page and fix/shader-fault-record-no-dontinline on erm14254/AnyPS5, listed in #6256. None of them changes how buffer descriptors are bound: they touch AppendConsume, ShaderRegistry.cpp, the control-flow graph builder, the libc guest arena, libkernel direct memory and SpirvBdaFault.cpp.

Not bisected (490 commits, 161 merges). The merges in the range that touch the files where buffer descriptors are bound (ShaderResources.cpp, ShaderResources.hpp, ResourceMaterializer.cpp, SpirvRuntimeBuffer.cpp) are #5828, #5841, #5778, #5473, #5509, #4794, #1201, #1193, #454 and #5496.

The message does not print the descriptor's dwords; I can capture them if that helps.

This blocks the capture asked for in #6257.

AI-assisted: yes

Activity

  1. pushkarreddyy commented on Oct 17, 2026

    @pushkarreddyy
    Contributor

    Taking this up. I will normalize / mask reserved bit 30 in \ShaderResources::addGuestBuffer\ and add host execution test coverage in \BufferDescriptorRuntime.cpp\ to accept descriptors with bit 30 set, following the pattern from #5049. Will open a PR shortly.

  2. pushkarreddyy commented on Oct 17, 2026

    @pushkarreddyy
    Contributor

    PR opened: #7089

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions