Skip to content

Draw with no pixel program fails: "prepared shader artifact is missing for the requested static ABI" (null pixel program) #1901

Closed

Description

@fisherjoey

Stray (PPSA02100 v1.05, Unreal Engine 4) gets to its window and then aborts before its first frame:

[videoout] presentation failed: AGC driver: prepared shader artifact is missing for the requested static ABI: address=140571275516160 stage=5 wave=64 pushOffset=20 pushCapacity=108 preparedLayouts= [0,128] [0,0]

Setup: Linux (Nobara 44, kernel 7.2), RTX 5070 Ti, NVIDIA 595.91.07. Base is main 1be6f9f + #861 + #1836 + #1893.

The address is not a guest shader. It is the driver's own NullPixelCode (libSceAgcDriver.prx + 0x715900). The null pixel program is prepared once, with 0 user SGPRs and wave64. When a draw has no pixel program, DrawDecode gives the null program the queue's current SPI_SHADER_PGM_RSRC2_PS user SGPR count and SPI_PS_IN_CONTROL wave bit. Those values are left over from the last pixel shader the title bound (4 user SGPRs here). The prepared shader key then never matches. Guest pixel shaders get their per-draw variant through ResolveShaderAbi, but nothing does that for the null program.

Fix: when a fragment request for the null pixel program misses, prepare it at the draw and cache the result in its entries. Unregistered compute shaders are already handled this way. The PR has a test that fails on main and passes with the fix. PR: #____

AI-assisted: yes

Activity

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