You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Layered rendering: a draw into all slices of a 3D color target aborts with "color views of several array slices are unsupported" #2102
Before its first frame, the title fills a whole 3D render target in one draw, with each slice written by its own primitives. The draw fails in DecodeColorBuffer:
[gpu] layer/viewport index vertex exports are ignored (PA_CL_VS_OUT_CNTL=0x01240000)
[videoout] presentation failed: AGC graphics: color views of several array slices are unsupported
It is a rect-list draw: the null pixel program is prepared at draw (#1902) and its rectangle at draw (#1928). So this is UE4's "rasterize into a volume texture" pattern: an RGBA16F 48³ volume, one instance per slice, and the vertex stage choosing the slice through the render target index export.
What is missing
DecodeColorBuffer accepts one slice per view. A slice range needs a multi-layer attachment view (the volume path already makes 2D-array-compatible views of one slice in StorageTexture::AttachmentView) and a framebuffer or rendering layer count.
The render target index export is ignored. It would have to reach gl_Layer from the last pre-rasterization stage. For a rect-list draw that is the tessellation evaluation stage, so the value has to pass through the rect-list stages (shaderOutputLayer).
Right behind this: the target has DCC enabled, and 3D targets with DCC are refused (mipmapped or DCC 3D color targets are unsupported).
I'm looking into this for the title and will post here before writing anything, in case someone already has layered rendering in progress.
Investigated and written by Claude (AI assistant) on a contributor's machine; the register print was local only.
I tried #1077, which renders layered draws into 3D color targets, but it no longer merges into current main: it conflicts in libSceAgcDriver/CMakeLists.txt, VulkanDevice.cpp, Context.hpp and ShaderValidation.cpp. So I haven't checked whether this title's target is 3D or a 2D array.
Tested and written by Claude (AI assistant) on a contributor's machine.
Silent Hill: Townfall (PPSA33286 v02.003.000, UE) also stops here, at its first presentation. Windows 11, MinGW, RTX 3070.
[gpu] layer/viewport index vertex exports are ignored (PA_CL_VS_OUT_CNTL=0x01240000)
[videoout] presentation failed: AGC graphics: color views of several array slices are unsupported
Same PA_CL_VS_OUT_CNTL as Epic Mickey above. Before it, the title creates its 3840x2160 render targets.
On maind70b899 it took these, in this order, to get here; each one cleared the stop before it:
VOP1 SDWA destination selector 4 (unused 2, source selector 3) of opcode 0x50, i.e. v_cvt_f16_u16_sdwa ... dst_sel:WORD_0 dst_unused:UNUSED_PRESERVE src0_sel:BYTE_3. No open PR covers it. Locally I allowed byte source selects for VCvtF16U16 in vop1SdwaRules, the same kind of change as fix(recompiler): accept SDWA destination selects on v_not_b32 #2200 for v_not_b32.
Also on the branch, for another title and not needed here: #1339 and three placeholder imports. As noted above, #1077 conflicts with current main in four files, so I haven't tried it.
Taxi Chaos 2 (PPSA30279 v01.007.000, Unreal Engine) also stops here at its first menu frame, with the same warning:
[gpu] layer/viewport index vertex exports are ignored (PA_CL_VS_OUT_CNTL=0x01240000)
AGC graphics: color views of several array slices are unsupported
The local build that reached this point has #2054, #425 and a local workaround for #1409. Windows 11 26200, Radeon 880M (ANYPS5_GPU=AMD). Dump from my own copy; no game files are shared.
Sword of the Sea (PPSA25344, UE5, Windows, RTX 5070).
For Sword of the Sea, a local port of #1077 together with #423's layer and viewport index exports gets past this stop, and the main menu renders correctly. The port sits on an older base and has conflicts with current main, so it is evidence for #1077's approach, not a branch to merge.
High on Life (PPSA15388 v01.120.000, UE4) also stops here, on its first run. It plays the publisher logos, the content warning and the Squanch Games logo, then its loading screen (the small ship on a star map) runs until frame 1728, about 90 s in, and the title aborts:
[gpu] layer/viewport index vertex exports are ignored (PA_CL_VS_OUT_CNTL=0x01240000)
AGC graphics: color views of several array slices are unsupported
It has the same PA_CL_VS_OUT_CNTL as the other titles here. Linux (CachyOS), RTX 4090, NVIDIA 615.78, Release, relinked with --to-intel; mainf5c0fe00 plus #757, #758 and local fixes that aren't on this path (#3334, #3335, #3336). I'll try #1077 with #423, as @AlxcBTW did for Sword of the Sea, and report back.
Tested and written by Claude (AI assistant) on a contributor's machine.
Following up on High on Life: #423 with #1077 ported onto the same tree gets it past this stop. The layered draw no longer throws, and the next stop is a compute shader writing a depth surface as a storage image, which is #1409:
compute shader 0x20313a0000: AGC graphics: storage image access to depth/stencil surface 0x20af9a0000 is not implemented
The newer dynamic-rendering path in Pipeline::Begin sets layerCount = 1. With it, every layer of a layered draw lands in slice 0. The port makes Framebuffer keep its layer count and Begin use it. feat(agc): render layered draws into 3D color targets #1077 rebased as it is would likely hit this.
LEGO Horizon Adventures (PPSA14632) hits this on current main (90c152e). After #3279 it no longer stops at the ancillary shader, and it aborts after about 35 s on its 64x64x64 RGBA16F lighting volumes. #1077 is now rebased onto that main, with #423 squashed in, and LEGO gets past this stop with it, next stopping at #1409.
@AlxcBTW@xXPBSXx@Rohan03x@MisterbALLIN: if you want to try Minecraft Dungeons II, Sword of the Sea, Palworld or Kena on it, the head is 5e14fe0d on alfalfa-star:feat/agc-layered-volume-targets.
@alfalfa-star I tried 5e14fe0 on Windows with an RTX 5070, where AnyPS5 builds graphics pipeline libraries. agc_driver_layered_volume_draw fails there:
On that path Pipeline::Begin starts dynamic rendering with layerCount = 1, so every layer lands in the color view's first slice. No error is raised, the picture is just wrong.
Framebuffer keeps its layer count and Begin passes it as VkRenderingInfo::layerCount. The maxFramebufferLayers check now covers both paths.
The mesh case in the layered test validates with the device's subgroup size (32 on NVIDIA) instead of 64.
agc_vertex_layer_export copies the extension names. They pointed into a destroyed RecompileResult.
agc_driver_vertex_clip_cull_draw shuts the driver down before returning. Without that it hung at exit on Windows.
With it, the five layered and clip/cull tests and 296 other agc tests pass on NVIDIA. Only agc_driver_depth_compare_copy skipped, because it opened no device.
mipmapped or DCC 3D color targets are unsupported. Register values (local diagnostic): slot 0, a 48x48x48 volume with DCC on, maxMip 0, view slices 0-48, format 12 number 7, CB_COLOR_INFO 0x10040730, ATTRIB2 0x000bc02f, ATTRIB3 0x4ec6c02f, CB_COLOR_VIEW 0x00060000, PA_CL_VS_OUT_CNTL 0x01240000 (render target index export on). A layered draw into a DCC volume; feat(agc): render layered draws into 3D color targets #1077 drops the DCC part of the check and gets past it.
#3633 and #1077 conflict in DecodeColorBuffer, as both rewrite the slice checks. I resolved it with #1077's volume branch and #3633's 2D-array branch, keeping lastSlice >= slice (merge commit ab6e3a3d); the tests/Graphics.cpp conflict is resolved the same way but not built. With both, the next stop is #1409.
Note on #1077: [gpu] layer/viewport index vertex exports are ignored (PA_CL_VS_OUT_CNTL=0x01240000) is still printed, because bit 24 is outside layerExports, although the layered draw is routed.
Windows 11 Pro 26300, RTX 2080 Ti, MinGW-w64 GCC 15.2.0 (WinLibs r7), RelWithDebInfo, maina11c8f7f7. Full list in #2648. AI-assisted (Claude Code).
Closing: layered draws into a 3D color target render on main since #3763, and #3633 covers array views; the error in the title is gone. If a title still stops on a layered draw on current main, comment here with the message.
Activity
EdouardSence commentedon Oct 9, 2026
Ratchet & Clank: Rift Apart (PPSA01474) also stops here, about 25 s in, on Linux with an RX 9070 XT (RADV):
Base:
main43972e6 + #1673, #1339, #1836, #1837, #1893, #2105, #2184, #2226, #2219, #1902, #1928.I tried #1077, which renders layered draws into 3D color targets, but it no longer merges into current
main: it conflicts inlibSceAgcDriver/CMakeLists.txt,VulkanDevice.cpp,Context.hppandShaderValidation.cpp. So I haven't checked whether this title's target is 3D or a 2D array.Tested and written by Claude (AI assistant) on a contributor's machine.
tv7 commentedon Oct 9, 2026
Silent Hill: Townfall (PPSA33286 v02.003.000, UE) also stops here, at its first presentation. Windows 11, MinGW, RTX 3070.
Same
PA_CL_VS_OUT_CNTLas Epic Mickey above. Before it, the title creates its 3840x2160 render targets.On
maind70b899 it took these, in this order, to get here; each one cleared the stop before it:s_swappc_b64call target at pc 0x74 (105 shaders deferred at registration).VOP1 SDWA destination selector 4 (unused 2, source selector 3) of opcode 0x50, i.e.v_cvt_f16_u16_sdwa ... dst_sel:WORD_0 dst_unused:UNUSED_PRESERVE src0_sel:BYTE_3. No open PR covers it. Locally I allowed byte source selects forVCvtF16U16invop1SdwaRules, the same kind of change as fix(recompiler): accept SDWA destination selects on v_not_b32 #2200 forv_not_b32.DMA_DATAprefetch destination.bd5f22c9from Sampled image heap of 16 rejects a retail shader before the metadata limit #1789:shader image heap capacity exceeded.guest memory is not readable at 0x58).rectangle ABI refers to a replaced shader header.guest buffer view exceeds its GPU owner.Also on the branch, for another title and not needed here: #1339 and three placeholder imports. As noted above, #1077 conflicts with current
mainin four files, so I haven't tried it.AlxcBTW commentedon Oct 10, 2026
Taxi Chaos 2 (PPSA30279 v01.007.000, Unreal Engine) also stops here at its first menu frame, with the same warning:
The local build that reached this point has #2054, #425 and a local workaround for #1409. Windows 11 26200, Radeon 880M (
ANYPS5_GPU=AMD). Dump from my own copy; no game files are shared.AI-assisted: yes
AlxcBTW commentedon Oct 11, 2026
Two more titles stop here:
For Sword of the Sea, a local port of #1077 together with #423's layer and viewport index exports gets past this stop, and the main menu renders correctly. The port sits on an older base and has conflicts with current
main, so it is evidence for #1077's approach, not a branch to merge.AI-assisted: yes (Claude Code)
Tamalero commentedon Oct 11, 2026
High on Life (PPSA15388 v01.120.000, UE4) also stops here, on its first run. It plays the publisher logos, the content warning and the Squanch Games logo, then its loading screen (the small ship on a star map) runs until frame 1728, about 90 s in, and the title aborts:
It has the same
PA_CL_VS_OUT_CNTLas the other titles here. Linux (CachyOS), RTX 4090, NVIDIA 615.78, Release, relinked with--to-intel;mainf5c0fe00plus #757, #758 and local fixes that aren't on this path (#3334, #3335, #3336). I'll try #1077 with #423, as @AlxcBTW did for Sword of the Sea, and report back.Tested and written by Claude (AI assistant) on a contributor's machine.
Tamalero commentedon Oct 11, 2026
Following up on High on Life: #423 with #1077 ported onto the same tree gets it past this stop. The layered draw no longer throws, and the next stop is a compute shader writing a depth surface as a storage image, which is #1409:
Port notes
mainthe three request-version bumps of feat(agc): vertex clip and cull distances #423 fold into one:paClVsOutCntlis read from version 16, the next aftermain's.Pipeline::BeginsetslayerCount = 1. With it, every layer of a layered draw lands in slice 0. The port makesFramebufferkeep its layer count andBeginuse it. feat(agc): render layered draws into 3D color targets #1077 rebased as it is would likely hit this.agc_driver_vertex_clip_cull_distances,_draw,_draw_no_key,agc_driver_layered_volume_drawandagc_vertex_layer_export.Tested and written by Claude (AI assistant) on a contributor's machine.
alfalfa-star commentedon Oct 11, 2026
LEGO Horizon Adventures (PPSA14632) hits this on current
main(90c152e). After #3279 it no longer stops at the ancillary shader, and it aborts after about 35 s on its 64x64x64 RGBA16F lighting volumes. #1077 is now rebased onto thatmain, with #423 squashed in, and LEGO gets past this stop with it, next stopping at #1409.@AlxcBTW @xXPBSXx @Rohan03x @MisterbALLIN: if you want to try Minecraft Dungeons II, Sword of the Sea, Palworld or Kena on it, the head is
5e14fe0donalfalfa-star:feat/agc-layered-volume-targets.AI-assisted: yes (Claude Code)
AlxcBTW commentedon Oct 11, 2026
@alfalfa-star I tried 5e14fe0 on Windows with an RTX 5070, where AnyPS5 builds graphics pipeline libraries.
agc_driver_layered_volume_drawfails there:On that path
Pipeline::Beginstarts dynamic rendering withlayerCount = 1, so every layer lands in the color view's first slice. No error is raised, the picture is just wrong.Commit bdd55e0 on AlxcBTW/AnyPS5
fix/layered-dynamic-rendering-layers-2sits on top of your head, so you can cherry-pick it:Framebufferkeeps its layer count andBeginpasses it asVkRenderingInfo::layerCount. ThemaxFramebufferLayerscheck now covers both paths.agc_vertex_layer_exportcopies the extension names. They pointed into a destroyedRecompileResult.agc_driver_vertex_clip_cull_drawshuts the driver down before returning. Without that it hung at exit on Windows.With it, the five layered and clip/cull tests and 296 other agc tests pass on NVIDIA. Only
agc_driver_depth_compare_copyskipped, because it opened no device.AI-assisted: yes (Claude Code)
queeeef commentedon Oct 11, 2026
Palworld (PPSA23126, 01.102.999, Unreal Engine) needs both #3633 and #1077 here, one after the other:
color views of several array slices are unsupported: fix(agc): render a color view of several array slices into its first slice #3633 gets past it.mipmapped or DCC 3D color targets are unsupported. Register values (local diagnostic): slot 0, a 48x48x48 volume with DCC on,maxMip 0, view slices 0-48, format 12 number 7,CB_COLOR_INFO 0x10040730,ATTRIB2 0x000bc02f,ATTRIB3 0x4ec6c02f,CB_COLOR_VIEW 0x00060000,PA_CL_VS_OUT_CNTL 0x01240000(render target index export on). A layered draw into a DCC volume; feat(agc): render layered draws into 3D color targets #1077 drops the DCC part of the check and gets past it.#3633 and #1077 conflict in
DecodeColorBuffer, as both rewrite the slice checks. I resolved it with #1077's volume branch and #3633's 2D-array branch, keepinglastSlice >= slice(merge commitab6e3a3d); thetests/Graphics.cppconflict is resolved the same way but not built. With both, the next stop is #1409.Note on #1077:
[gpu] layer/viewport index vertex exports are ignored (PA_CL_VS_OUT_CNTL=0x01240000)is still printed, because bit 24 is outsidelayerExports, although the layered draw is routed.Windows 11 Pro 26300, RTX 2080 Ti, MinGW-w64 GCC 15.2.0 (WinLibs r7), RelWithDebInfo,
maina11c8f7f7. Full list in #2648. AI-assisted (Claude Code).oneandonlydean commentedon Oct 14, 2026
Closing: layered draws into a 3D color target render on main since #3763, and #3633 covers array views; the error in the title is gone. If a title still stops on a layered draw on current main, comment here with the message.