Skip to content

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

Merged
oneandonlydean merged 25 commits into
boykopovar:mainfrom
Amoenus:codex/feat-volume-color-mips-mainaf
Nov 1, 2026
Merged

oneandonlydean merged 25 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 is merged. Earlier refreshed head 9a3ae675277b incorporates frozen main 6e9b9134f6ed14e659d870a33118d164096551df through a normal merge; published d82f817df54416cc8ad9792382f6018bb57b32a1 remains an ancestor and is archived. The eight production/test topic files retain exactly their previous added/removed lines. The #9050 buffer-range helper uses the volume's full backing-allocation address, including cached/moved binding checks; its two focused regressions are retained. No force push.

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 and #7254 are merged; their 2D CMASK accounting/refusals and layered-array attachment/dirty-range handling are retained. #7256 array attachment windows remain separate. #6959 implements mesh layer windows. The author confirms #7310-first landing order; its shared fixture must retain both optional Run arguments and enough vertices for the 33-layer mesh case and eight-layer mip cases. JJenkx's attributed Linux composition results below cover that fixture union at their stated pins; our own Windows matrix does not qualify #6959.

Tested

Current refreshed head 2c1f59472aeb, tested main d2d2a866d9a9ed65e9d3871f83dcf427195aa362. Normal merge after#12862 preserves published history/authorship,identical production/regression topic deltas,and all selected test-registration properties. No force push.

Exact pins,immutable raw logs,artifact inventories,controls and analysis: 36 positives(30 verified GPU/six CPU or header). Main14GPU/twoCPU;candidate16GPU/threeCPU plus public_headers. Shared layered draw/submit/vertex/no-GPL,XOR volume,depth bounds and new heap-mirror controls run on both GPUs. Candidate additionally passes all14volume-mip selections/vendor(28total) and CPU linear-nonresident refusal. Graphics/ShaderMemory pass on both sources,including intervening descriptor force-sync changes. Full native/relinker/real-fixture builds,conventions/whitespace/public_headers pass;binary inventories stable per source.

Required Vulkan,app cache/journal off,inserted Khronos1.4.363 and actual device identity verified;verbose serial30s. Windows11Enterprise26200/WinLibsGCC15.2,RTX5080/NVIDIA621.01 and RadeonGraphics1002:13c0/AMD26.10.1. Zero validation errors/VUIDs/skips/timeouts;known layer-compatibility warnings main80/candidate100,identical IDs/counts for shared groups. Two extra volume cases account for20warnings. Max wholeGPUprocess1.231s;max anyCTest17.794s. Not warning-free or a performance comparison.

Cppcheck/clang-tidy:115.463 analyzer-seconds,18advisories at unchanged main locations,no parser/configuration failures/timeouts or automatic fixes;no static-clean/whole-program claim. Historical isolated address/metadata mutation controls and previous fixture analysis retain their original pins;no new current-main failing control claimed. Candidate-only registrations are absent on literal main,not passing main controls. Latest inspected6190 has unrelated exports/relinker changes and is not the tested base.

Independent NVIDIA Linux retest of olderd917/main73f4:2430selected passes,no new failures/validation IDs,50skips;BDA/maps/graphics timing warnings remain source-pinned and unresolved by this focused Windows qualification. Prior hosted d917 compile/link evidence is historical;new-head hosted checks pending. No new title/FPS/full-suite/Linux/macOS/console or dependent-stack execution claim.

Additional Linux composition evidence: JJenkx tested this exact head with #6959 head327addf79eae on RX6650XT/RADV Mesa26.2.4. The report has six passing checks, zero skips/VUIDs and four confirmed Khronos layer insertions, covering all14 volume-mip selections plus the33-layer mesh case. Its private base also contains capture/diagnostic changes; this is candidate-only composed evidence, not a paired plain-main qualification or title/FPS result. The shared fixture retains both optional Run arguments and enough vertices for both mip and mesh cases. The agreed #7310-first order remains; our source is unchanged.

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 11557 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp L88

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 1368 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/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 docs/dev/debt/libSceAgcDriver.md
PR 4040 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 4449 docs/dev/debt/libSceAgcDriver.md
PR 5609 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 5925 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6187 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6188 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6192 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6194 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6197 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6209 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6223 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
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/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6300 docs/dev/debt/libSceAgcDriver.md
PR 6412 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6481 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6548 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6549 docs/dev/debt/libSceAgcDriver.md
PR 6743 docs/dev/debt/libSceAgcDriver.md
PR 6804 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6808 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6867 docs/dev/debt/libSceAgcDriver.md
PR 6970 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
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 7048 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
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 7275 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
PR 7369 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
PR 7410 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 7449 docs/dev/debt/libSceAgcDriver.md
PR 7514 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 7604 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7642 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7689 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 7844 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7978 docs/dev/debt/libSceAgcDriver.md
PR 8014 docs/dev/debt/libSceAgcDriver.md
PR 8319 docs/dev/debt/libSceAgcDriver.md
PR 8484 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 8542 docs/dev/debt/libSceAgcDriver.md
PR 8592 docs/dev/debt/libSceAgcDriver.md
PR 8707 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 8874 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9012 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 9020 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 9176 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 9287 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 9289 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 9335 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 9356 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/execution/LayeredVolumeDraw.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9387 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/execution/LayeredVolumeDraw.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9432 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 9445 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 9489 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
PR 9592 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9712 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9748 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 9852 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 9884 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 9898 docs/dev/debt/libSceAgcDriver.md
PR 9915 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9950 docs/dev/debt/libSceAgcDriver.md
PR 10026 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10064 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10193 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10233 docs/dev/debt/libSceAgcDriver.md
PR 10249 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 10256 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10351 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10359 docs/dev/debt/libSceAgcDriver.md
PR 10382 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 10442 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 10469 docs/dev/debt/libSceAgcDriver.md
PR 10492 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10497 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10764 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 10773 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 10940 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 11126 docs/dev/debt/libSceAgcDriver.md
PR 11444 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 11452 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
PR 11551 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 11920 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 12120 docs/dev/debt/libSceAgcDriver.md
PR 12348 docs/dev/debt/libSceAgcDriver.md
PR 12575 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 12662 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 12746 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 12855 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 12904 docs/dev/debt/libSceAgcDriver.md
PR 12980 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 13044 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 13146 docs/dev/debt/libSceAgcDriver.md
PR 13148 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
PR 13251 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 13793 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
docs/dev/debt/libSceAgcDriver.md
PR 13809 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 13863 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 13879 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 13920 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 13928 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 13929 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 14051 core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
PR 14212 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

@oneandonlydean 2026-10-20 CI follow-up: I traced the failed Linux job to exact #7310 head 028ec46d836ca0f0a4a31ad00e07f517d82f7955 merged into main 43cd8f4c47f4c81185c4ca14b84240e0748e3459. It stops at Install Xvfb: sudo: a password is required. CMake, compilation and tests are skipped, so this run does not identify a volume-rendering regression.

The Windows job succeeds: 457 executed tests pass and 645 skip. agc_driver_volume_mip_targets is among those skips under CI's execution-source selection; this is not new physical-GPU coverage. The actual fourteen-case NVIDIA/AMD checks remain in the description at their stated pins.

Main has since reverted the Xvfb workflow setup. Could you start a fresh Build workflow from current main for #7310, rather than rerunning the old job with its old workflow? The PR currently merges cleanly and its attached Conventions check passes. No patch code change is indicated by this setup failure.

AI-assisted: yes (Codex); author responsible.

Earlier depth-one review response and validation

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.

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 19, 2026
@Amoenus
Amoenus force-pushed the codex/feat-volume-color-mips-mainaf branch from bf98421 to f09a55b Compare October 19, 2026 05:02
@github-actions github-actions Bot added needs rebase Conflicts with main, rebase needed and removed needs rebase Conflicts with main, rebase needed labels Oct 19, 2026
@Amoenus
Amoenus force-pushed the codex/feat-volume-color-mips-mainaf branch from f09a55b to 9b1d53c Compare October 19, 2026 08:49
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 19, 2026
@adriadam10 adriadam10 self-assigned this Oct 19, 2026
@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 19, 2026
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 19, 2026
@Amoenus

Amoenus commented Oct 25, 2026

Copy link
Copy Markdown
Contributor Author

@oneandonlydean thanks, addressed both metadata write origins in 10716faddf1a, incorporating main d2b3ee3bcc8b and preserving published history. The new 24-combination planner regression fails3/3 before the two-line correction and passes3/3 after; linear and nonvolume intervals are retained.

Fresh main:11 focused passes. Corrected PR:20 passes (16 physical-GPU,4CPU), including all14 mip cases3/3 on each RTX5080/Radeon. Zero VUID/errors/skips/timeouts; max7.55s. Known layer-count warnings match main in shared groups. Pins, full synthetic logs and advisory triage (metadata-d2-*). No fresh title/full-suite claim. Ready for re-review and a fresh maintainer Build run. AI-assisted:yes(Codex); author responsible.

@Amoenus

Amoenus commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor Author

Refreshed and qualified at 2c1f59472aeb on tested maind2d2a866d9a9ed65e9d3871f83dcf427195aa362. Published d917 and original authorship remain ancestors;documented12862resolver preserves test commands/properties and the exact topic/regression delta. Depends on:none;#6959 still declares7310-first order.

Current report,immutable raw logs and manifest:36positives(30actualGPU/sixCPUheader),including14volume-mip selections on each GPU. Same-machine main/change controls,actualRTX5080/RadeonGraphics and loadedKhronos1.4.363 verified;no errors/VUIDs/skips/timeouts. Known compatibility warnings remain80main/100candidate;shared groups match exactly. Builds/public_headers/conventions/whitespace pass.18static advisories at unchanged main locations retained,no parser failures;no whole-program claim.

The independent NVIDIA Linux run remains olderd917/main73f4:2430selected passes,no new failures/validation IDs,50skips. BDA55.9s/maps31.3s/graphics30.1s warnings remain open;this Windows selection does not clear them. The bounded serial main/change request remains;no timeout increase. Its two capability modes were validated without a main baseline because absent there.

Previous37-pass qualification/controls,d917 hosted compile/link job,andJJenkx Linux6959 composition retain their historical pins;not new-head Linux/title evidence. No new game/FPS/full-suite claim. AI-assisted:yes(Codex);author responsible.

@github-actions github-actions Bot added needs rebase Conflicts with main, rebase needed and removed needs rebase Conflicts with main, rebase needed labels Oct 27, 2026
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 28, 2026
@JJenkx

JJenkx commented Oct 30, 2026

Copy link
Copy Markdown
Contributor

Linux compatibility evidence for exact #7310 head d91727875d404063abe97c4247c455fe44d7d7b0 combined privately with #6959 head 327addf79eaea87343c5800747ae1ad7215c3d00.

Private base f3d92877371bf3cc3f61618da912ce24c1561338 contains main f7f03daf52f11191174b1be089a56e268390a707, #6959 and retained capture/diagnostic changes. Combined commit 3a669bbe653369549db3a839049e2ad1793d4c53: production files auto-merge; CMake/shared-fixture resolution keeps both mip and mesh cases, both optional Run arguments, and enough vertex capacity for the 33-layer mesh fixture as well as the eight-layer mip cases.

RX 6650 XT / RADV Mesa 26.2.4, Linux 7.2.9, Release: 6/6 focused checks execute/pass, zero skips/VUIDs, four confirmed Khronos layer insertions, with ANYPS5_REQUIRE_VULKAN=1, ANYPS5_NO_SHADER_CACHE=1, VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation. Coverage: all 14 volume-mip selections, 33-layer mesh/vertex rendering, vertex without GPL, linear nonresident volume state, and layer-specialization lifetime.

This is candidate-only private composition smoke; it does not replace the paired plain-main qualification or establish title/FPS results. Known non-VUID layer-compatibility warnings remain. The first attempt stopped during module staging before any test; corrected raw-module paths were used in the fresh successful receipt. #6959's declared #7310-first merge order remains unchanged; no public source branch was modified.

Source pins, fixture resolution, binary hashes, loader/test discovery and full synthetic CTest output, SHA-256 f98a7a075056cea8e342ca1db835bd7e9fd4a668576bc6f79a2fcb304662b557 (upload/download verified). Game assets, images, captured memory and binaries remain private.

AI-assisted: yes (Codex).

@TechLevelZero

TechLevelZero commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head d917278 merged onto main 73f4f7e · tested 2026-10-31 20:48 UTC · 29 min

GPU NVIDIA RTX 2000 Ada Generation, driver 595.99.02, Vulkan 1.4.329
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-38-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 2,430 passed · 5 failed (0 new, 3 also fail on main, 2 unstable on main) · 50 skipped (ANYPS5_REQUIRE_VULKAN=1)
Test setup CPU-only tests without a GPU; GPU tests (and any CPU-only test that failed or skipped without one) once on the GPU with VK_LAYER_KHRONOS_validation and ANYPS5_NO_SHADER_CACHE=1; main ran the same way
Test selection 2,485 of 3,072 tests run: the ones this change can reach, chosen by tools/select_tests.py from main's build graph
Vulkan validation ✅ no new validation IDs vs main (925 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_bda_device 55.9 s, ⚠️ agc_driver_graphics_maps_fallback 31.3 s, ⚠️ agc_driver_graphics 30.1 s
Unstable on main (2, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_depth_clear_hle: failed in 2 of the last 10 main runs
agc_driver_submit_progress: failed in 8 of the last 10 main runs
Failing on main too (3, not counted against this PR)
agc_submit_progress_no_timeline
guest_mmap_executable
guest_socket_options_multicast
Passed on retry (1, failed in the parallel run, passed when re-run with a 360 s timeout; not counted against this PR)
agc_driver_job_manager_compute_capacity: Failed in the parallel run; also passed only on retry in 201 other runs in the last 7 days
Validated but not compared (2, not in the main baseline's validation pass)
agc_driver_linear_volume_nonresident
agc_driver_volume_mip_targets
Validation IDs already present on main (5 IDs in 426 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (426 tests): agc_compute_pipeline_replay, agc_driver, agc_driver_address_passes, agc_driver_address_passes_draw_transitions, agc_driver_address_passes_targets_split, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, and 418 more
VUID-vkCmdCopyImage-srcImage-01548 (13 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_sampling, and 5 more
VUID-vkCmdCopyImage-srcImage-01551 (13 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_sampling, and 5 more
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_srgb8_color_target
VUID-vkCmdCopyBuffer-commonparent (1 test): agc_driver_depth_clear_hle
Skipped (50)
agc_driver_bda_reads_shadowed_results: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_bda_reads_shadowed_results_per_build: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_msaa_dcc_compared_import_2: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
agc_driver_msaa_dcc_compared_import_4: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
agc_driver_msaa_dcc_compared_import_8: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
agc_driver_sample_order_grid_reference: skipped, the device does not keep depth drawn at custom sample locations at those locations, even after a transition that names them: the composite of uniform renders holds the guest's depth in 0 of 3005 sloped samples, so no path can be compared with it bit for bit
agc_driver_sparse_dma_buf_import: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_stencil_ref_export: skipped, the device lacks VK_EXT_shader_stencil_export
agc_driver_vertex_elected_atomic_max: skipped, the device runs vertex programs in subgroups, so they keep their cross-lane reductions
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_import_settle_initial_dcc: skipped, the device has no deferred settle of host imports: imports under 1 MiB wait for one only on Windows
agc_unit_shadow_completion_store: skipped, the device reports watched host memory written when it imports or reads it
guest_http_uri_locale: 
guest_net_ctl: skipped, the host has no IPv4 address
guest_video_out_color_space: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_hdr: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_high_frame_rate: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_output_mode: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_resolution_status: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_wqhd_detection: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
video_out_flip_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_backtoback: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_controls: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip_in_order: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_dcc: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_deferred: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or pla
Reproduce
git fetch origin d91727875d404063abe97c4247c455fe44d7d7b0 73f4f7e06e4f210a8c6570e335fd654dc0a86134
git checkout 73f4f7e06e4f210a8c6570e335fd654dc0a86134 && git merge --no-ff d91727875d404063abe97c4247c455fe44d7d7b0
git submodule update --init --recursive
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -DANYPS5_ENABLE_SPIRV_TOOLS=ON
cmake --build build && cmake --build build --target libs
VK_DRIVER_FILES=/nonexistent/icd.json ctest --test-dir build -E '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 32 --output-on-failure
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 4 --output-on-failure
# failures are then re-run alone: --timeout 360 --parallel 2; new validation IDs: the test alone, twice, --parallel 1

Automated build and test on a contributor's NVIDIA machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs.

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 31, 2026
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 31, 2026
@Amoenus

Amoenus commented Nov 1, 2026

Copy link
Copy Markdown
Contributor Author

@JAB-dev the refreshed overlap check flags #11557 against this PR. I checked #11557 at 7ef4e4a6961d7aeec7d0f3c6871bdd2825e46b50 and this PR at 2c1f59472aeb2f6ebea39e037d099858ce62220a: both insert after ColorTarget::partialWriteMask. Yours adds the staged-target fields; ours adds MemoryAddress() and the separate volume flag. These are distinct behaviors that need to be retained together.

Would #7310 first, then #11557 rebased while retaining both additions fit your plan? This is a merge-order proposal, not an agreed dependency or a combined build/runtime result. I have not modified your branch or changed our Depends on line.

@oneandonlydean
oneandonlydean merged commit dcda6bb into boykopovar:main Nov 1, 2026
12 of 13 checks passed
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.

7 participants