mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-05 13:20:11 +00:00
sceAgcDriverResolveShaderAbi and sceAgcDriverResolveGraphicsStagesAbi prepare every stage when the title creates its pipeline, and threw when the recompiler could not: Resident Evil Village stops there on a pixel shader whose T# pointer is a phi of user data and a ballot, and a compute shader that calls user-data pointers stopped the same way although its dispatch links the callees. ResolveShaderAbi and PrepareGraphicsStages now catch the failure inside their own preparation transaction, so the ShaderPreparationScope that libSceAgc opens around the call still commits. The shader is logged once, marked deferred like a shader deferred at registration, and the ABI key is recorded, so a repeated call prepares nothing. The draw or dispatch that uses the stage prepares it as before and fails there if it cannot. ResolvePreparedGraphics skips the rectangles of a deferred stage that has no artifact yet, which also lets a stage deferred at registration through sceAgcDriverResolveGraphicsAbi. Driver failures, ProcessShutdown and a failure stored by the shader's registration preparation still propagate.