Skip to content

feat(agc): render into mipmapped 3D color targets - #7310

Open
Amoenus wants to merge 3 commits into
boykopovar:mainfrom
Amoenus:codex/feat-volume-color-mips-mainaf
Open

Amoenus wants to merge 3 commits into
boykopovar:mainfrom
Amoenus:codex/feat-volume-color-mips-mainaf

Conversation

@Amoenus

@Amoenus Amoenus commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

What

Render into one mip of an uncompressed3D color surface, preserving the base dimensions and volume identity, including depth1. Use its3D mip layout, bound its slice view by the selected mip's depth, validate the full allocation, and create the resident attachment view at that mip. Unverified mipmapped3D DCC/CMASK metadata paths still throw.

Depends on: none. #7294 has merged. Head bf984211f5 rebases this topic's three commits onto main bb2624a5331ad814616e24958a434eb9c1945200. The first conflict combines the3D mip layout with main's new CMASK mip-tail accounting; both depth-one review commits replay unchanged. Later main changes to write-watch stamping/SRT plans are included, with the same three topic patches. The prior published a96 head is preserved; local canonical branches now match the published heads.

Sonic Unleashed Recompiled PPSA99902, #7260 / #4443, requests a two-level128x128x8 RGBA8_UINT SW_4KB_S_X target after the opening movie. The ordinary bring-up composition stops at the guard still present on main:

AGC graphics: mipmapped 3D color targets are unsupported

The diagnostic captured CB_COLOR_INFO=0x00070428, ATTRIB2=0x101fc07f, ATTRIB3=0x0ea54007, VIEW=0x0000e000 (mip0, slices0..7). #7274 merged the diagnostic; this capability change replaces the general refusal. Its64x4x4/mip1 descriptor test verifies the selected32x2 one-slice view. No title-specific branch or game modification is added.

Review correction: non-mipmapped depth-one volumes now bypass the2D resident-byte comparison as all other volumes do; their complete3D allocation was already validated against DescribeSurface. A single-level linear volume of depth1 retains the existing linear copy path, whose2D/3D layout is identical. Other nonresident volume cases continue to throw. Four new --mips cases cover96x32x1/one level in Linear, Standard4KB, RenderTarget and S4KBX modes, with exact per-texel readback.

Overlap review: #7199 is merged, and its2D CMASK accounting/refusals are retained. #6959 (mesh layer windows), #7254/#7256 (array attachment windows) are separate capabilities. Existing mesh/vertex cases and selected-mip bounds remain.

Tested

  • Exact bf98421: both full Release builds pass, including relinker/system libraries, Windows11 Enterprise26200 / WinLibs GCC15.2r7 and Ubuntu24.04 WSL2 / GCC13.3; SPIRV-Tools enabled. Sources stayed fixed during each test.
  • Ten selected groups3x: 30 passes on RTX5080 and30 on llvmpipe;27 passes on AMD plus the existing GPL-off layered-vertex failure below. No whole-test skips/timeouts. Includes all14 volume-mip/depth-one cases per process, XOR volume, layered draw/submit/vertex modes, CMASK first-write and CPU graphics/write-tracking/shader-memory. Counts include CPU checks. After the controls below, the exact head was restored, fully rebuilt and the14-case volume group passed another3/3 on each physical GPU.
  • Matched capability control: retain the new fixtures and implementation, reinstate only main's original Require(maxMip == 0, "mipmapped 3D color targets are unsupported"). The volume group fails3/3 on AMD at that exact refusal. Restore the implementation:3/3 pass on both GPUs. The earlier depth-one review control at3294c685f also failed3/3 on the linear refusal; correcting only that exposed the Standard4KB resident-layout mismatch, and the volume predicate correction made all14 cases pass.
  • Inherited AMD boundary: on exact unchanged mainbb262, affected AGC library/layered fixture rebuilt in the same checkout/build directory, agc_driver_layered_volume_vertex_no_gpl fails3/3: slice1 red remains0x40, expected255. Its GPL-on variant passes3/3. Same result on this PR; existing #5271, maintained fresh validation. No workaround or new cause claim. This is not an all-green suite.
  • Verified NVIDIA RTX5080 10de:2c02,610.62/32.0.16.1062, and AMD Radeon(TM) Graphics 1002:13c0,32.0.21036.18; Windows11 Enterprise26200. Linux: Mesa25.2.8 llvmpipe LLVM20.1.2. Khronos1.4.363 loaded, Vulkan required, project shader cache/pipeline journal disabled, driver caches uncontrolled; serial30s bounds. Zero logged VUID/validation errors, but maintenance9 forward-compatibility advisories remain:150 in the NVIDIA/Linux selections,124 in AMD's shorter failing selection. WARNING-VkImageSubresourceRange-layerCount-compatibility asks for VK_REMAINING_ARRAY_LAYERS if maintenance9 is enabled later. No warning-clean or performance claim.
  • Cppcheck then clang-tidy covered all five changed TUs at preceding86c520159f:158.308s analyzer time,8 Cppcheck/3 clang diagnostics in existing shared/helper/fixture paths, no parser/configuration failures. These five files are byte-identical at finalbf. The copied parameters, old descriptor-cache context reports, throwing-Require allocator, texture dead initializations and timer path remain advisory; no suppressions or clean-analyzer claim. Conventions/whitespace pass against mainbb262.
ctest --test-dir build -V -j1 --repeat until-fail:3 --timeout 30 -R '^agc_(write_tracking|shader_memory|driver_(graphics|dcc_keys_first_write|image_xor_swizzle_volume|layered_volume_(draw|submit|vertex|vertex_no_gpl)|volume_mip_targets))$'

Title evidence: the separate45dafde integration, containing this PR's a96 implementation and other bring-up fixes, reached a level scene with Sonic/Chip and the gameplay HUD (timer00:00:00) in its final capture. Its3600s bound ended the run; movement/interactive gameplay and FPS remain unverified.117 captures/post-run state were archived,142 prior runtime/state/config files hash-restored. Zero logged VUID/errors,8 maintenance9 advisories and12 guest fence failures remain. Current source pin, input and limits. This is composed title evidence; no PR-only title A/B, full-suite, console-equivalence or performance claim.

Checklist

@github-actions

github-actions Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.

Pull request Conflicting files (lines on main) Same exports Same new files
PR 4449 docs/dev/debt/libSceAgcDriver.md L188
PR 6959 core/libs/prx/libSceAgcDriver/CMakeLists.txt L1986, L1989, L1993
core/libs/prx/libSceAgcDriver/tests/execution/LayeredVolumeDraw.cpp L273, L280
docs/dev/debt/libSceAgcDriver.md L188
PR 7254 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp L2092
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp L1794-1795

Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.

Pull request Shared files not compared
PR 1191 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
PR 1341 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 1368 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 1395 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 2434 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 4040 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 4072 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
PR 4448 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 4650 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 4891 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5021 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5058 docs/dev/debt/libSceAgcDriver.md
PR 5371 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5426 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5431 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
PR 5441 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 5499 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 5500 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 5609 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 5925 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6044 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6185 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6186 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6188 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6192 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6194 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6197 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6218 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6223 docs/dev/debt/libSceAgcDriver.md
PR 6235 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6273 docs/dev/debt/libSceAgcDriver.md
PR 6280 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6300 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6312 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6326 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6341 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6360 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6412 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6414 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6454 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6472 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6481 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6486 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6501 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6529 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6535 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6539 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6548 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6549 docs/dev/debt/libSceAgcDriver.md
PR 6563 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6606 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
PR 6615 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6636 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6701 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6747 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6763 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
PR 6786 docs/dev/debt/libSceAgcDriver.md
PR 6788 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6808 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6856 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6867 docs/dev/debt/libSceAgcDriver.md
PR 6868 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6926 docs/dev/debt/libSceAgcDriver.md
PR 6937 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6941 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6946 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6947 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6963 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6970 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6971 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6972 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6977 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7008 docs/dev/debt/libSceAgcDriver.md
PR 7201 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7223 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7250 docs/dev/debt/libSceAgcDriver.md
PR 7256 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7258 docs/dev/debt/libSceAgcDriver.md
PR 7332 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7390 docs/dev/debt/libSceAgcDriver.md
PR 7432 docs/dev/debt/libSceAgcDriver.md
PR 7505 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 7604 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7615 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7642 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7644 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7687 docs/dev/debt/libSceAgcDriver.md

@oneandonlydean

Copy link
Copy Markdown
Collaborator

Thanks, the mip addressing and the per-texel --mips check look right, and all ten cases pass here (RTX 4090, current main 55f82fe). One regression on non-mipmapped volumes:

The PR now decides "3D target" by color.volume in SurfaceForTarget (State.cpp:1453) and in the fallback refusal (Draw.cpp:2079). The resident check at Draw.cpp:2067 still skips the byte comparison only for color.mipCount > 1 || color.depth > 1, and it compares against the 2D ColorTargetLayout. So a non-mipmapped 3D target of depth 1 in a thick 3D mode now gets a 3D resident image whose bytes differ from the 2D layout. The lookup is refused, and the fallback then throws. On main the same target rendered (as 2D).

Repro: replace the --mips case list with one case at a time:

{96, 32, 1, 1, 0, 0, 1, ColorTileMode::Standard4KB, false}   // fails
{96, 32, 1, 1, 0, 0, 1, ColorTileMode::RenderTarget, false}  // passes
{96, 32, 1, 1, 0, 0, 1, ColorTileMode::S4KBX, false}         // fails
[gpu] color target 0x... stays non-resident: AGC graphics: resident image layout differs from the color layout
AGC graphics: rendering into a 3D color target needs the resident image of its surface

A linear depth-1 volume without an existing host import reaches the same refusal. It used to render, and linear 3D at depth 1 has the same layout as 2D.

Could you:

  1. skip the 2D byte comparison for volumes at Draw.cpp:2067 (the volume allocation is already range-checked against DescribeSurface in DecodeColorBuffer);
  2. either keep the fallback for non-mipmapped depth-1 linear volumes or explain why it should refuse;
  3. add levels = 1, depth = 1 cases to --mips? The two existing depth-1 cases have three levels, so mipCount > 1 bypasses the changed check.

@Amoenus
Amoenus force-pushed the codex/feat-volume-color-mips-mainaf branch from ce9264c to a96dad4 Compare October 18, 2026 01:22
@Amoenus

Amoenus commented Oct 18, 2026

Copy link
Copy Markdown
Contributor Author

Thanks for catching the depth-one regression. Addressed in a96dad4ef, after rebasing onto mainf663 and removing the now-merged #7294 dependency.

All three requested changes are covered: volumes bypass the2D byte comparison; single-level depth-one linear volumes keep their valid existing copy path; --mips now includes Linear, Standard4KB, RenderTarget and S4KBX one-level/depth-one cases. The new test fails3/3 before correction; the linear-only correction exposes the separate thick-layout failure. Both corrections pass the fourteen-case readback3/3 on RTX5080, AMD iGPU and llvmpipe. Full Windows/Linux builds and33 selected processes pass. Existing3D barrier advisories and analyzer findings are disclosed in the updated body; no warning-clean or title-unblock claim.

AI-assisted: Codex; author responsible.

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 18, 2026
@Amoenus
Amoenus force-pushed the codex/feat-volume-color-mips-mainaf branch from a96dad4 to bf98421 Compare October 18, 2026 05:20
@github-actions github-actions Bot added unblocks title Names a title ID on the Unblocks line and removed needs rebase Conflicts with main, rebase needed labels Oct 18, 2026
@jotitadev

Copy link
Copy Markdown
Contributor

Apple GPU / MoltenVK run of the new --mips cases, as another vendor next to RTX 5080, AMD iGPU and llvmpipe. Under MoltenVK, a 3D mip attachment view becomes a Metal render target on one level of a 3D texture, so this path differs from the desktop drivers.

Machine: Apple M2 Max, macOS 27.2, x86-64 build under Rosetta. Head bf98421. Method: main 81cb863 + @mugurc's ci/macos-series-2 (fa6d8ae, which has the MoltenVK device bring-up) + the open fixes it uses as stand-ins, then this PR merged on top (clean). Drivers: MoltenVK 1.4.2 (Vulkan SDK 1.4.363), and MoltenVK main with SPIRV-Cross #2704. ANYPS5_REQUIRE_VULKAN=1, ANYPS5_NO_SHADER_CACHE=1.

Test MoltenVK 1.4.2 MoltenVK main + #2704
agc_driver_volume_mip_targets (new) 3/3 pass 3/3 pass
agc_driver_layered_volume_submit 3/3 pass 3/3 pass
agc_driver_layered_volume_draw, _vertex, _vertex_no_gpl fail, same as without the PR fail, same as without the PR
  • --mips runs all 14 cases here, each "preserves other mips and slices": 96x32x8 at mips 0/1/2, the 96x32x1 depth-one volume, and the 128x128x8 RGBA8_UINT two-level target from the title, including the XOR=500 case.

  • The three layered tests fail the same way with and without the PR: SPIR-V requires unsupported device capability 2. That's the Geometry capability, which MoltenVK doesn't have. It's a device gap this PR doesn't touch.

  • With only the test and CMake changes on the tree without the fix, agc_driver_volume_mip_targets fails: a depth-one volume mip was treated as a 2D image. So the new test catches the missing support on this device too.

Not done: the full suite with the PR.

GPUs tested: Apple M2 Max (MoltenVK 1.4.2; MoltenVK main + SPIRV-Cross #2704)

Written with AI assistance (Claude Code). I ran the builds and tests above on my machine.

This branch has not been deployed

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

Labels

agc libSceAgc* build docs unblocks title Names a title ID on the Unblocks line

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants