Skip to content

feat(agc): draw PS4 multisampled color targets as host-resident targets - #9892

Merged
oneandonlydean merged 10 commits into
boykopovar:mainfrom
savvaniss:feat/ps4-gcn-msaa-targets
Nov 4, 2026
Merged

oneandonlydean merged 10 commits into
boykopovar:mainfrom
savvaniss:feat/ps4-gcn-msaa-targets

Conversation

@savvaniss

@savvaniss savvaniss commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

What

Get-fix#6, moved upstream. #9431 has merged, so the diff against main is now only this pull request's own files. oneandonlydean merged main into the branch and fixed it on 29 Oct (head 5c8fb7de19), and removed the two refusal assertions (EQAA and single-sample fast clear) from tests/GcnColorTarget.cpp that their review asked to drop.

On #9431 a PS4 color target with more than one sample threw "multisampled GCN color targets are not implemented". Boggle (CUSA03312) renders its 3D scenes into a 4x target, then resolves it with a CB resolve, after an FMASK decompress.

  • DecodeGcnColorBuffer now decodes 2x, 4x and 8x targets (CB_COLOR_ATTRIB NUM_SAMPLES) when NUM_FRAGMENTS matches. These go to the host-resident multisampled targets that the AGC path already draws, fast-clears and resolves.
  • With FAST_CLEAR or COMPRESSION set in CB_COLOR_INFO, the target's CMASK is taken from CB_COLOR_CMASK, with CMASK_SLICE (tile max + 1) times 128 bytes, so a CMASK fast clear reaches the host target as on the AGC path.
  • EQAA (fewer fragments than samples), more than 8 samples and a single-sample fast clear still throw.
  • A GCN target's extent comes from its pitch and slice, so tile padding enlarges it: a 1920x1080 target is 1920x1088. A CB metadata pass whose viewport and scissor cover only the visible rows refused it as "over part of a color target". The covered extent now counts when the target's tile mode pads it to the target's size. A pass over fewer rows than that is still refused.

The debt file gains an entry for PS4 multisampled color targets.

main's drawCovers now holds the CB metadata pass's viewport and scissor test. The padded-extent rule above is an optional GCN target argument of that helper.

Tested

Windows 11 Pro 26300, WinLibs GCC 15.2.0, Release, AMD Radeon RX 9070 XT (driver 32.0.31041.1004), ANYPS5_GPU=AMD.

Merge of main 828ac0b2ae, 31 Oct. Head 9110e4e17a. The only conflict was in docs/dev/debt/libSceAgcDriver.md: both sides kept. agc_gcn_color_target, agc_driver_graphics and agc_driver_gcn_detile pass, 3 of 3 on the RX 9070 XT, no VUID- line. Not rerun: the other tests, Linux, games.

Merge of main cae3edaf11, 1 Nov. Head 83a0d8ea00. The only conflict was libSceAgcDriver/CMakeLists.txt: main moved the AGC test registrations into tests/cmake, and tools/agc_test_split.py resolve moved agc_gcn_color_target_tests to its own fragment. agc_gcn_color_target, agc_driver_graphics and agc_driver_gcn_detile pass, 3 of 3 on the RX 9070 XT under the validation layer, no VUID- line. Not rerun: the other tests, Linux, games.

Merge of main 1e658521a0, 3 Nov. Head 3c0ee17922 (on fde9ff2d9a). The only conflict was in docs/dev/debt/libSceAgcDriver.md: the merge keeps this branch's PS4 multisampled color target entry and main's render-target entry with its new PS4 depth-target sentence. FormatVersion stays main's 52 (this branch does not change it) and no size guard changes. On the RX 9070 XT (Windows, Release) with ANYPS5_GPU=AMD ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation: agc_gcn_color_target, agc_driver, agc_driver_graphics and agc_shader_memory pass, 4 of 4, every Selected GPU line names the RX 9070 XT and there is no VUID- line. tools/check_conventions.py --base origin/main passes. Not rerun: the rest of the suite, Linux, and the game.

Base. This branch is now 545e2b5b3f, built in two merges:

  1. main 07da04f947 merged into feat(libSceAgcDriver): draw PS4 (GCN) command buffers #9431's head 26d651d3e0, as merge/9431-main (4e8243ac48). That merge is offered to Get-fix as chore: merge main into ps4/agc-gcn Get-fix/AnyPS5#22.
  2. merge/9431-main merged into this branch, with no file conflicts.

Checklist

  • Based on current main; no other open PR implements the same functions
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw (NotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file
  • No notes, investigation .md files or images added to the repository (attach them to this PR)
  • New third-party code is a submodule built from source
  • Generic behaviour, not specific to one title
  • Depends on: none (feat(libSceAgcDriver): draw PS4 (GCN) command buffers #9431 merged on 29 Oct, and this branch has it from main)
  • Fixes: none
  • Unblocks: CUSA03312 Hasbro Family Fun Pack (CUSA03312) #7198
  • GPUs tested: AMD Radeon RX 9070 XT, driver 32.0.31041.1004, Windows 11 Pro 26300
  • AI-assisted: yes

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 22, 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 9674 docs/dev/debt/libSceAgcDriver.md L114
PR 14085 docs/dev/debt/libSceAgcDriver.md L114-115

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 1395 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
PR 2434 docs/dev/debt/libSceAgcDriver.md
PR 5925 docs/dev/debt/libSceAgcDriver.md
PR 6186 docs/dev/debt/libSceAgcDriver.md
PR 6188 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
PR 6194 docs/dev/debt/libSceAgcDriver.md
PR 6223 docs/dev/debt/libSceAgcDriver.md
PR 6235 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
PR 6273 docs/dev/debt/libSceAgcDriver.md
PR 6280 docs/dev/debt/libSceAgcDriver.md
PR 6412 docs/dev/debt/libSceAgcDriver.md
PR 6481 docs/dev/debt/libSceAgcDriver.md
PR 6548 docs/dev/debt/libSceAgcDriver.md
PR 6804 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6808 docs/dev/debt/libSceAgcDriver.md
PR 6987 docs/dev/debt/libSceAgcDriver.md
PR 6989 docs/dev/debt/libSceAgcDriver.md
PR 6995 docs/dev/debt/libSceAgcDriver.md
PR 7002 docs/dev/debt/libSceAgcDriver.md
PR 7085 docs/dev/debt/libSceAgcDriver.md
PR 7256 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7449 docs/dev/debt/libSceAgcDriver.md
PR 7604 docs/dev/debt/libSceAgcDriver.md
PR 7642 docs/dev/debt/libSceAgcDriver.md
PR 7668 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 8592 docs/dev/debt/libSceAgcDriver.md
PR 8707 docs/dev/debt/libSceAgcDriver.md
PR 9020 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9318 docs/dev/debt/libSceAgcDriver.md
PR 9335 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9356 docs/dev/debt/libSceAgcDriver.md
PR 9387 docs/dev/debt/libSceAgcDriver.md
PR 9592 docs/dev/debt/libSceAgcDriver.md
PR 9672 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9673 docs/dev/debt/libSceAgcDriver.md
PR 9675 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9700 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9748 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9915 docs/dev/debt/libSceAgcDriver.md
PR 9950 docs/dev/debt/libSceAgcDriver.md
PR 10049 docs/dev/debt/libSceAgcDriver.md
PR 10193 docs/dev/debt/libSceAgcDriver.md
PR 10233 docs/dev/debt/libSceAgcDriver.md
PR 10249 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
PR 10256 docs/dev/debt/libSceAgcDriver.md
PR 10359 docs/dev/debt/libSceAgcDriver.md
PR 10743 docs/dev/debt/libSceAgcDriver.md
PR 11825 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 11998 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 12120 docs/dev/debt/libSceAgcDriver.md
PR 12565 docs/dev/debt/libSceAgcDriver.md
PR 12567 docs/dev/debt/libSceAgcDriver.md
PR 13599 docs/dev/debt/libSceAgcDriver.md
PR 13707 docs/dev/debt/libSceAgcDriver.md
PR 13796 core/libs/prx/libSceAgcDriver/Graphics/include/GuestTextureResource.hpp
PR 13863 docs/dev/debt/libSceAgcDriver.md
PR 13920 docs/dev/debt/libSceAgcDriver.md
PR 13928 docs/dev/debt/libSceAgcDriver.md
PR 13929 docs/dev/debt/libSceAgcDriver.md
PR 13963 docs/dev/debt/libSceAgcDriver.md
PR 13994 docs/dev/debt/libSceAgcDriver.md
PR 14005 docs/dev/debt/libSceAgcDriver.md
PR 14212 docs/dev/debt/libSceAgcDriver.md
PR 14302 docs/dev/debt/libSceAgcDriver.md
PR 14311 docs/dev/debt/libSceAgcDriver.md
PR 14344 docs/dev/debt/libSceAgcDriver.md
PR 14561 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 14621 docs/dev/debt/libSceAgcDriver.md
PR 14943 docs/dev/debt/libSceAgcDriver.md
PR 14944 docs/dev/debt/libSceAgcDriver.md
PR 14976 docs/dev/debt/libSceAgcDriver.md
PR 15059 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp

@oneandonlydean

Copy link
Copy Markdown
Collaborator

@savvaniss This PR now conflicts with main in core/libs/prx/libSceAgcDriver/Graphics/include/GuestTextureResource.hpp, core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp. Main’s texture metadata fields and removal of the layered-depth pitch restriction overlap this PR’s PS4 surface changes. Could you reconcile the PS4 surface metadata and layered-depth layout rules with the current implementation?

Brings in main 07da04f through the boykopovar#9431 merge offered as
Get-fix#22. No file conflicts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@savvaniss

Copy link
Copy Markdown
Contributor Author

@oneandonlydean merged, no rebase. The head is now 545e2b5b3f: main 07da04f947 merged into #9431's head (offered to Get-fix as Get-fix#22), then merged into this branch with no further conflicts.

On the RX 9070 XT with the validation layer:

  • 50 of 51 tests pass here, and 48 of 49 on main. agc_driver_depth_plane_partial_store fails the same way on both.
  • agc_gcn_color_target passes, and with State.cpp reverted it still fails with "multisampled GCN color targets are not implemented".
  • No VUID- lines.

AI-assisted: yes (Claude Code)

@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 25, 2026
@oneandonlydean

Copy link
Copy Markdown
Collaborator

@savvaniss The metadata and layered-depth merge points are answered. Please remove the two GcnColorTarget.cpp assertions requiring valid EQAA and single-sample fast-clear configurations to throw because they are unimplemented. Keep the supported 2/4/8-sample cases, the missing-CMASK-address check, the partial-coverage validation and the production refusals with their debt. #9431 remains an open prerequisite for this branch.

@babyhuey

Copy link
Copy Markdown
Contributor

This head 545e2b5b3f merged onto current main 442c43a574d (clean merge, local only) doesn't compile, which CI's skipped product jobs would hit on every host (Linux, anyps5-build CI image, GCC 13, configured fresh after the merge):

core/libs/prx/libSceAgcDriver/Graphics/src/PipelineJournal.cpp:41:29: error: static assertion failed: State changed: update CanonicalPipelineState and the recipe codec
core/libs/prx/libSceAgcDriver/Graphics/src/PipelineJournal.cpp:42:36: error: static assertion failed: ShaderStages changed: update the recipe codec

These are sizeof checks that main keeps current for the pipeline journal (last changed in 52f36c8, 10/22), so a change to State or ShaderStages also needs CanonicalPipelineState and the recipe codec updated, plus the expected sizes.

AI-assisted: yes (Claude Code)

@ycbuzi

ycbuzi commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

A Windows run of this head on two NVIDIA generations and an AMD iGPU: Windows 11 Home 10.0.26200, WinLibs GCC 15.2.0 r7 (MinGW-w64 UCRT), Release. 545e2b5b3f merged onto main 204c6747d0 with no conflicts. One GPU at a time with ANYPS5_GPU, plus ANYPS5_REQUIRE_VULKAN=1 and ANYPS5_NO_SHADER_CACHE=1, run with ctest -V --repeat until-fail:2. Each log's Selected GPU line names the device.

device result
GeForce RTX 4070 SUPER (0x2783, Ada), NVIDIA 616.92 55 of 55 pass, both runs
GeForce GTX 1650 SUPER (0x2187, Turing), NVIDIA 616.92 55 of 55 pass, both runs
AMD Radeon(TM) Graphics (1002:164e, RDNA2 iGPU), AMD 32.0.21030.2001 55 of 55 pass, both runs

Update: in the run above, the video_out_flip_* tests skipped. My build directory had a stale ANYPS5_VIDEO_OUT_TEST_DRIVER=offscreen cached from an older default; main's Windows default is windows. I reran with windows: 545e2b5b3f merged onto main bf77a9e9cb, the same 55 tests with the video_out_flip_* tests included. All 55 pass on the 4070 SUPER, the 1650 SUPER and the Radeon iGPU, both runs, and none skip. The build's only warnings are main's known Signals.cpp:25 and PipelineLibrary.cpp ones. No negative control: GcnColorTarget.cpp uses AgcDriverUseGcnShaders_nid_postfix from this PR, so it doesn't build with main's sources.

AI-assisted: yes (Claude Code)

@XairRrR XairRrR left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed — changes requested

This PR's own change (the GCN multisample decode, the CMASK fields and the padded-extent rule) builds and passes its tests when I apply it to main + #9431's current head. The head 545e2b5b3f itself conflicts with main and does not compile on Linux, because it carries an older #9431.

What I ran

  • Head: 545e2b5b3f83fed05a1a34fb21b1fdfda0c0707a
  • main: b433c40f2f46aa2e59e19806010a839ac8572d64
  • #9431 head used for the reconstruction: eefa50841267cd0bd5352af17248139445fb0613
  • Host: Arch Linux 7.2.11-zen, GCC 16.2.1, Release, Ninja, Intel Core i9-14900KF, NVIDIA GeForce RTX 4070 Ti SUPER (driver 615.78.08)
# 1. merge onto main
git checkout --detach origin/main
git merge --no-ff --no-edit 545e2b5b3f          # conflicts, aborted
git diff --check origin/main...545e2b5b3f
python3 tools/check_conventions.py --base origin/main

# 2. head alone
git checkout --detach 545e2b5b3f
cmake --build build -j10 --target agc_gcn_color_target_tests   # fails

# 3. this PR's own commit on main + #9431's current head
git checkout --detach origin/main
git merge --no-ff --no-edit eefa508412          # clean
git diff 4e8243ac48 545e2b5b3f | git apply --3way   # clean
cmake --build build -j10 --target agc_gcn_color_target_tests agc_driver_register_key_tests \
  agc_driver_recorder_tests agc_driver_pm4_tests agc_driver_graphics_tests agc_driver_gcn_detile_tests \
  agc_driver_multisample_fill_host_only_tests agc_driver_multisample_readback_tests agc_driver_pattern_buffer_fill_tests
VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation ANYPS5_NO_SHADER_CACHE=1 ANYPS5_REQUIRE_VULKAN=1 \
  VK_LOADER_DEBUG=error,warn,layer ctest --test-dir build -j4 -V \
  -R '^(agc_gcn_color_target|agc_driver_graphics|agc_driver_pm4|agc_driver_register_key|agc_tiled_resolve|agc_driver_gcn_detile|agc_driver_multisample_fill_host_only|agc_driver_multisample_readback|agc_driver_pattern_buffer_fill)$'

# 4. the same 8 tests (all but agc_gcn_color_target) on main + #9431 without this PR's commit, same flags

Results

Check Result
Merge onto main b433c40f2f Conflicts in Graphics/include/State.hpp (2 hunks) and Graphics/src/State.cpp (2 hunks)
git diff --check clean
tools/check_conventions.py --base origin/main All conventions checks passed.
Build of the head 545e2b5b3f (Linux, GCC 16) fails: PipelineJournal.cpp:41-42 static asserts
Own commit on main + #9431 eefa508412: build OK
agc_gcn_color_target Passed (0.00 s)
Validation layer, PR (9 tests) 9/9 pass, 0 VUID- lines, no was not found but was requested by env var VK_INSTANCE_LAYERS
Validation layer, base without the PR (8 tests) 8/8 pass, 0 VUID- lines, no was not found but was requested
Layer actually loaded yes: loader log shows VK_LAYER_KHRONOS_validation inserted; every Selected GPU line names the RTX 4070 Ti SUPER
Merge conflicts with main
CONFLIT (contenu) : Conflit de fusion dans core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
CONFLIT (contenu) : Conflit de fusion dans core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
  • State.hpp: ShaderStages (main adds hullWaveSize and tessellationGeometry, the branch adds legacyVertex) and DrawKeyRegisters (array size 50 on main, 52 on the branch).
  • State.cpp: decodeDepthPlane's extent (GCN DB_DEPTH_SIZE branch) and DecodeShaderStages (main's tessellation-geometry path against the branch's GCN legacy-vertex block).

All four hunks are #9431 code. #9431's current head resolves them: it merges cleanly with this main.

Build of the head alone
FAILED: core/libs/prx/libSceAgcDriver/CMakeFiles/libSceAgcDriver.dir/Graphics/src/PipelineJournal.cpp.o
PipelineJournal.cpp:41:29: error: static assertion failed: State changed: update CanonicalPipelineState and the recipe codec
  • the comparison reduces to '(848 == 840)'
PipelineJournal.cpp:42:36: error: static assertion failed: ShaderStages changed: update the recipe codec
  • the comparison reduces to '(116 == 112)'
Validation-layer run on the PR
1/9 Test  #717: agc_gcn_color_target ....................   Passed    0.00 sec
2/9 Test  #948: agc_driver_pm4 ..........................   Passed    0.14 sec
3/9 Test  #828: agc_tiled_resolve .......................   Passed    0.28 sec
4/9 Test  #715: agc_driver_register_key .................   Passed    0.84 sec
5/9 Test #1275: agc_driver_multisample_fill_host_only ...   Passed    0.60 sec
6/9 Test #1126: agc_driver_gcn_detile ...................   Passed    0.95 sec
7/9 Test #1276: agc_driver_multisample_readback .........   Passed    0.47 sec
8/9 Test #1303: agc_driver_pattern_buffer_fill ..........   Passed    0.78 sec
9/9 Test  #949: agc_driver_graphics .....................   Passed    4.97 sec
100% tests passed out of 9

Negative control

On the reconstructed tree I restored only Graphics/src/State.cpp to the version on main + #9431, rebuilt agc_gcn_color_target_tests and ran it. It fails, as the description says:

1/1 Test #717: agc_gcn_color_target .............***Failed    0.00 sec
AGC graphics: multisampled GCN color targets are not implemented

I then restored the PR's State.cpp.

Findings

Blocking

  1. Conflicts with main. See the table above. The conflicting hunks are #9431 code that this branch carries from the older merge 4e8243ac48. #9431 has since moved on (eefa508412, rebased onto a newer main), and that head merges cleanly. Fix: rebuild this branch on #9431's current head, or rebase the single commit db05653037 onto it. This PR's own diff (CMakeLists.txt, State.cpp, GcnColorTarget.cpp, the debt entry) applies to main + eefa508412 without conflicts. The checklist line "Based on current main" does not hold for the current head.
  2. The head does not compile on Linux x86-64 with libstdc++. This confirms babyhuey's report, now on the head alone and not only on a merge with a newer main. The guards at PipelineJournal.cpp#L41-L42 expect sizeof(State) == 840 and sizeof(ShaderStages) == 112, but #9431's ShaderStages::legacyVertex (State.hpp#L35) makes them 848 and 116. The guards sit under #if defined(__linux__) && defined(__x86_64__) && defined(__GLIBCXX__), which is why the Windows/MinGW runs in the description and in ycbuzi's comment did not hit them. #9431 fixed this in eefa508412 ("update the pipeline journal layout guards for ShaderStages::legacyVertex"), so moving to that head (finding 1) fixes this too.

Non-blocking

  1. A resolve accepted by the padded-extent rule writes rows the pass does not cover. At State.cpp#L2200-L2202, drawCovers swaps the target's padded extent for the covered extent, so the pass is accepted. The host resolve still uses the whole padded extent: MultisampleTarget.cpp#L1275 sets renderArea = {{0, 0}, source.extent}. For a 1920x1088 target resolved with a 1080-row viewport, the host writes destination rows 1080 to 1087, which the console leaves alone. Those rows are usually tile padding, but a texture with the padded height, or a copy of the whole surface, would see different bytes. Fix: either limit the resolve's render area to the covered extent, or state in the debt entry that the padding rows outside the viewport are resolved (and that an FMASK decompress also expands them).
  2. Requested test change still open. oneandonlydean asked for the two assertions that a valid EQAA target and a single-sample fast clear throw to be removed. They are still in the head: GcnColorTarget.cpp#L100-L101. The head has not changed since that comment.
  3. Debt entry order. CONTRIBUTING.md asks that an entry state the gap first and describe the implemented behaviour only as far as the gap needs. The new entry opens with the implemented behaviour and puts "None of it is checked on a console" last. Suggest leading with the gaps (not checked on a console; FMASK contents not modeled; EQAA, more than 8 samples and single-sample fast clear throw; the padded-extent acceptance) and shortening the description of the implemented behaviour.

I checked the decode against what the AGC multisample path consumes and found nothing wrong. The GCN path fills only cmaskAddress, cmaskBytes and cmaskFastClear. With dccAddress == 0, MultisampledCmask only acts on whole-range uniform fills (NoteFill, SeedCode), so the pipe-interleaved GCN CMASK layout does not matter, and a single slice's (CMASK_SLICE.TILE_MAX + 1) * 128 bytes is covered by the guest's aligned clear. MultisampledColorBytes returns 0 for GCN tile modes, so a memory fill over the color surface is refused, not absorbed. That is a throw, not silent behaviour.

Not verified

  • Behaviour in Boggle (CUSA03312) or any other title; I launched no title.
  • The test on the head itself, which does not build here; all test results above are from main + #9431 eefa508412 + this PR's own diff.
  • The tests on plain main without #9431: agc_gcn_color_target, agc_driver_gcn_detile and agc_driver_pattern_buffer_fill do not exist there. The baseline is main + #9431.
  • The video_out_flip_* tests and the agc_driver_depth_* tests from the description; I ran only the tests closest to this PR's own change.
  • AMD or Intel GPUs; NVIDIA only.

To get this to a good state

  1. Rebuild the branch on #9431's current head (eefa508412 or later) so it merges cleanly with main and builds on Linux (blocking findings 1 and 2).
  2. Settle oneandonlydean's request about GcnColorTarget.cpp lines 100 and 101.
  3. Optionally, limit the resolve's render area to the covered extent or document the extra rows, and reorder the debt entry.

@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Nov 1, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 83a0d8e merged onto main 3741ca9 · tested 2026-11-01 04:50 UTC · 20 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,475 passed · 3 failed (0 new, 3 also fail on main) · 44 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,522 of 3,121 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 (930 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_lookup_log_fits_build 59.5 s, ⚠️ agc_driver_pipeline_journal 45.7 s, ⚠️ agc_driver_graphics_maps_fallback 32.0 s
Failing on main too (3, not counted against this PR)
agc_driver_image_table
guest_mmap_executable
guest_socket_options_multicast
Validated but not compared (1, not in the main baseline's validation pass)
agc_gcn_color_target
Validation IDs already present on main (5 IDs in 480 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (480 tests): agc_driver, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, and 472 more
VUID-vkCmdCopyImage-srcImage-01548 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_prepared_exports
VUID-VkShaderModuleCreateInfo-pCode-08737 (1 test): agc_driver_image_sample_derivatives
Skipped (44)
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_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_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 platform
video_out_flip_eop: 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_eop_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_eop_main: 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_fresh: 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_f
Reproduce
git fetch origin 83a0d8ea00491cbd90e96f6d191e1c3b572f2151 3741ca9327246d0df81638726a986cef862b6db5
git checkout 3741ca9327246d0df81638726a986cef862b6db5 && git merge --no-ff 83a0d8ea00491cbd90e96f6d191e1c3b572f2151
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.

@oneandonlydean

Copy link
Copy Markdown
Collaborator

Hi savvaniss, main moved today, and this PR no longer merges cleanly with main. These conflicts overlap your changes, so they need your call:

  • core/libs/prx/libSceAgcDriver/Graphics/include/GuestTextureResource.hpp
  • core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp

Could you merge main into this branch and resolve them, keeping what main added? A merge commit is fine; no need to rebase or force-push. Once it's pushed we'll re-review the merge.

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Nov 2, 2026
This branch and main both contain 26d651d, so a default merge uses a
virtual base and reports conflicts that neither side made. Merged against
main's last merge base cae3eda instead. One conflict:
GuestTextureResource.hpp, where main added linearPitch and this branch added
fmaskCmaskAddress at the same place; keep both, main's first. The result differs
from main by exactly this branch's own changes.
@oneandonlydean

Copy link
Copy Markdown
Collaborator

Hi XairRrR,

Could you take another look at #9892? Head fde9ff2d9a (a merge of current main 24238c4cb1 into the author's 83a0d8ea00) merges cleanly with main. Your points, at this head:

  1. Duplicate fields: GuestTextureResource.hpp:108-112 declares gcnPitch, gcnPow2Pad and gcnLinearGeneral once each, followed by main's linearPitch and the branch's fmaskCmaskAddress. The diff against main is only this PR's 5 files (+183/-5).
  2. Description: it now lists each main merge with its head and test results, and Depends on: none (feat(libSceAgcDriver): draw PS4 (GCN) command buffers #9431 has merged). The results it lists are for 83a0d8ea00. Our local build of this head passes agc_gcn_color_target (1/1).
  3. Your optional notes, on the resolve's render area and the order in the debt entry, are not changed.

@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Nov 2, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head fde9ff2 merged onto main 1d91f29 · tested 2026-11-02 16:43 UTC · 27 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,678 passed · 4 failed (0 new, 3 also fail on main, 1 unstable on main) · 45 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,727 of 3,544 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 (984 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.1 s, ⚠️ agc_driver_graphics_maps_fallback 30.7 s, ⚠️ agc_driver_native_depth_clears 30.1 s
Unstable on main (1, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_pipeline_journal: failed in 3 of the last 10 main runs
Failing on main too (3, not counted against this PR)
agc_driver_image_table
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_native_depth_clears: Timeout in the parallel run; also passed only on retry in 7 other runs in the last 7 days
Validated but not compared (1, not in the main baseline's validation pass)
agc_gcn_color_target
Validation IDs already present on main (4 IDs in 510 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (510 tests): agc_driver, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, and 502 more
VUID-vkCmdCopyImage-srcImage-01548 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_prepared_exports
Skipped (45)
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_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_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 platform
video_out_flip_eop: 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_eop_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_eop_main: 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_fps_limit: 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_o
Reproduce
git fetch origin fde9ff2d9a1a81604be4962c7f717fb10d06e3c6 1d91f2966d0eef82a021628a7aa8e78e615ac807
git checkout 1d91f2966d0eef82a021628a7aa8e78e615ac807 && git merge --no-ff fde9ff2d9a1a81604be4962c7f717fb10d06e3c6
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.

@BunnyFl

BunnyFl commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

Windows re-run at fde9ff2d9a

A second run on Windows with an AMD GPU, for @XairRrR's re-check. I'm posting this as a comment: I haven't reviewed State.cpp or MultisampleTarget.cpp in depth.

What I ran

Head fde9ff2d9a merged onto current main (clean merge). Windows 11, WinLibs GCC 15.2.0, Release, BUILD_TESTING=ON, AMD Radeon RX 9070 XT.

Run ctest -R '^agc_gcn_color_target$'
Merge of this PR 1/1 pass
Same tree with main's Graphics/src/State.cpp restored 0/1; fails with "AGC graphics: multisampled GCN color targets are not implemented"

XairRrR's Blocking 1 (duplicate fields)

Resolved in 5c8fb7de19: GuestTextureResource.hpp declares gcnPitch, gcnPow2Pad and gcnLinearGeneral once each.

Non-blocking: the header still differs from main. git diff upstream/main...fde9ff2d9a -- core/libs/prx/libSceAgcDriver/Graphics/include/GuestTextureResource.hpp shows only fmaskCmaskAddress moving from before gcnPitch to after linearPitch. git grep at the head finds no sizeof/offsetof assert or memcmp of GuestTextureResource; the field writes are by name (GuestTextureResource.cpp:309, MultisampleTarget.cpp:85, :103). I'd expect the move to be harmless. With main's order restored, the file would drop out of the PR's diff.

XairRrR's optional notes (the resolve's render area, the debt entry order) are unchanged at this head, as oneandonlydean's comment says.

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ AMD GPU test: passed

PR head fde9ff2 merged onto main a4eca2a · tested 2026-11-03 01:27 UTC · 45 min

GPU AMD Radeon RX 6300 (RADV NAVI24), driver Mesa 25.2.8-0ubuntu0.24.04.4, Vulkan 1.4.318
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-42-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 2,670 passed · 13 failed (0 new, 12 also fail on main, 1 unstable on main) · 54 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,737 of 3,591 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 (977 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 124.7 s, ⚠️ agc_driver_graphics 120.2 s, ⚠️ agc_driver_image_sample_unnormalized 82.5 s, ⚠️ agc_driver_lazy_resolved_abi 69.2 s, ⚠️ agc_driver_lazy_resolved_abi_switch_set 53.9 s
Unstable on main (1, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_pipeline_journal: failed in 4 of the last 6 main runs
Failing on main too (12, not counted against this PR)
agc_driver_guest_memory_lifetime_direct
agc_driver_image_table
agc_driver_job_manager_compute_capacity
agc_driver_native_depth_bda_clear
agc_driver_native_depth_buffer_clear
agc_driver_native_depth_clears
agc_driver_native_multisample_depth
agc_idle_publish_wait
agc_submit_progress
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_graphics: Timeout in the parallel run; also passed only on retry in 52 other runs in the last 7 days
Validated but not compared (1, not in the main baseline's validation pass)
agc_gcn_color_target
Validation IDs already present on main (4 IDs in 513 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (513 tests): agc_driver, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, and 505 more
VUID-vkCmdCopyImage-srcImage-01548 (6 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (6 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_prepared_exports
Skipped (54)
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_copied_writer_label_order: skipped, the device reports a minStorageBufferOffsetAlignment of 4, so the dispatch binds its record at +0x1004 in place and nothing is written back; the test needs an alignment above 4
agc_driver_float16_unused_nan_payloads: skipped, the device has no native f16 conversions with RTE rounding and kept f16 denormals
agc_driver_image_table_vouched_lookups: skipped, the device reports 4 of 4 host-imported pages written after a GPU read, so a watched imported table cannot be vouched for
agc_driver_ngg_vertex_wave_reduction: skipped, s3 describes a 32-lane wave only on 32-lane subgroups, and the device has 64 lanes
agc_driver_unit_shadow: skipped, the device does not import watched host memory for unit shadows
agc_driver_unit_shadow_budget: skipped, the device does not import watched host memory for unit shadows
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_shadowed_key_stores: skipped, the device imports no watched host memory under a unit shadow
agc_small_tiled_shadow_label: skipped, host imports are unavailable: the test block is not imported and watched
agc_storage_clear_hand_over: skipped, the device imports no watched host memory for the clear-key hand-over
agc_unit_shadow: skipped, the device does not import watched host memory for unit shadows
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_deferr
Reproduce
git fetch origin fde9ff2d9a1a81604be4962c7f717fb10d06e3c6 a4eca2a056bf3bbbec98ab42e9d28163e4ea9cb8
git checkout a4eca2a056bf3bbbec98ab42e9d28163e4ea9cb8 && git merge --no-ff fde9ff2d9a1a81604be4962c7f717fb10d06e3c6
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 12 --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 16 --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 AMD machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs.

@XairRrR XairRrR left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-checked — approved

5c8fb7de19 removes the duplicate GuestTextureResource fields that blocked the previous head, and fde9ff2d9a merges current main. The merged tree builds, agc_gcn_color_target passes and fails with main's production files, and both failures that look new also fail with main's production files.

What changed since my last review

  • 5c8fb7de19 deletes the second copies of gcnPitch, gcnPow2Pad and gcnLinearGeneral.
  • 9110e4e17a, 83a0d8ea00 and fde9ff2d9a merge main. The AGC test registration now lives in tests/cmake/agc_gcn_color_target_tests.cmake, following main's split. The PR's own State.cpp change, test and debt entry are unchanged.
  • The description now says Depends on: none and lists each main merge with its test results.
  • In the discussion, oneandonlydean, BunnyFl (Windows, RX 9070 XT) and TechLevelZero's NVIDIA CI ran the PR's test at this head. These results are author- and contributor-reported.

What I ran

  • Head fde9ff2d9a1a81604be4962c7f717fb10d06e3c6, main 5cb015caaaaf83f8ee431414ee6a457b5b307d49, merged tree d7c08d33052c2d537b6490e4fa0f540615dbdc50.
  • Machine: Debian 13 VM, GCC 14.2.0, Release, lavapipe (Mesa 26.1.6, LLVM 19). There is no hardware GPU.
git diff --check 5cb015caaa...fde9ff2d9a
python3 tools/check_conventions.py --base 5cb015caaa
ctest --test-dir build --output-on-failure -R '^(agc_gcn_color_target|agc_driver_image_sample_lod_clamp_shader_lane|unwrap_self_UnwrapTest_test_new_output_inherits_the_destination_directory_group)$'
# negative control: State.cpp and GuestTextureResource.hpp from main
ninja -C build agc_gcn_color_target_tests agc_driver_image_sample_lod_clamp_tests
ctest ... (same three tests)
# restore the merged files, then rebuild
ctest --test-dir build -j8 --output-on-failure -R '^(agc_gcn_color_target|agc_driver_graphics|agc_tiled_resolve|agc_driver_gcn_detile)$'
git status --porcelain   # empty
Check Result
Merge onto main clean
git diff --check clean
check_conventions.py All conventions checks passed.
Build (script) OK
Selected tests (script) 2115 of 2235 passed and 112 skipped as expected. 6 failures are known on main; I traced the 2 that look new to main (see below).
Validation layer (script, 759 tests) 0 tests with a new VUID-; the layer loaded in 758
agc_gcn_color_target, agc_driver_graphics, agc_tiled_resolve, agc_driver_gcn_detile 4/4 pass
Diff against main only this PR's 5 files, +183/−5

The 2 failures that look new are not the PR's. The script's baseline (096c45570f) is older than main 5cb015caaa. With the PR's production files restored from main and the targets rebuilt, both still fail in the same way:

  • agc_driver_image_sample_lod_clamp_shader_lane reports thread 0 component 1 is 0.000000, expected 0.062500.
  • unwrap_self_UnwrapTest_test_new_output_inherits_the_destination_directory_group reports OSError: [Errno 22] from os.chown, which is the sandbox's group handling.
Run with main's production files
OSError: [Errno 22] Invalid argument: ...
2/3 Test #1772: agc_driver_image_sample_lod_clamp_shader_lane ...***Failed    3.15 sec
AGC graphics: image_sample_lz ... thread 0 component 1 is 0.000000, expected 0.062500
3/3 Test #2035: agc_gcn_color_target ............................***Failed    0.01 sec
AGC graphics: multisampled GCN color targets are not implemented

Negative control

I restored Graphics/src/State.cpp and Graphics/include/GuestTextureResource.hpp from main and rebuilt. agc_gcn_color_target then fails with AGC graphics: multisampled GCN color targets are not implemented. With the merged files restored and rebuilt, it passes, and git status --porcelain is empty.

Previous findings

  • New blocking 1, duplicate fields: Resolved. At the head, GuestTextureResource.hpp#L108-L112 declares each field once, and the merged tree builds.
  • New non-blocking 1, stale description: Mostly resolved. Depends on is now none and each merge is listed. The Base paragraph still says "This branch is now 545e2b5b3f", and its numbers are for older heads. The latest results the description itself gives are for 83a0d8ea00.
  • Non-blocking, a resolve accepted by the padded-extent rule renders the full extent: Still open, and optional as before. The rule in State.cpp#L2376-L2379 is unchanged. The resolve's renderArea is still source.extent (MultisampleTarget.cpp#L1468). oneandonlydean says this was left on purpose.
  • Non-blocking, order of the debt entry: Still open, and optional. The entry still describes the implemented behaviour before the gaps.

New findings

Blocking

None.

Non-blocking

  1. fmaskCmaskAddress moves in GuestTextureResource.hpp for no reason. This confirms BunnyFl's note. The PR's only change to the header (L112) moves the field below linearPitch. I found no positional initialization, sizeof, offsetof or memcmp of the struct; every use assigns by name (GuestTextureResource.cpp:309, MultisampleTarget.cpp:85, :103), so the move is harmless. Restoring main's order would remove the file from the diff and avoid future merge conflicts there.

Not verified

  • Any title, including Boggle (CUSA03312). I launched no title.
  • Hardware GPUs. Lavapipe only here; the AMD and NVIDIA results in the discussion are contributor-reported.
  • Windows.

@github-actions github-actions Bot added review queue Next in the maintainer review queue: checks pass, no open change request, no conflict needs rebase Conflicts with main, rebase needed and removed review queue Next in the maintainer review queue: checks pass, no open change request, no conflict labels Nov 3, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Nov 3, 2026

@XairRrR XairRrR left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-checked — approved

The only new commit is 3c0ee17922, a merge of main 1e658521a0. The PR's own three commits are byte-identical in range-diff, and the diff against main is still the same five files (+183/−5). The merged tree builds, agc_gcn_color_target passes and fails again with main's production files, and the one test flagged with new VUID- lines reports the same lines with main's production files.

What changed since my last review

  • 3c0ee17922 merges main 1e658521a0 into fde9ff2d9a. The conflict in docs/dev/debt/libSceAgcDriver.md is resolved by keeping both sides: the PS4 multisampled color target entry (now L119) sits directly above main's render-target entry (L120), and main's new PS4 depth-target sentence is kept.
  • range-diff shows db05653037, 6a7d99f3be and 5c8fb7de19 unchanged.
  • The description adds a "Merge of main 1e658521a0" paragraph with RX 9070 XT results for this head. These results are author-reported.

What I ran

  • Head 3c0ee179221d343ec624148fe66a3b7c3f90f436, main 086c0686c8adff3ee648fdbe34e0b0b647e1d511, merged tree 1c4c5e95106cae318149af2b382b3cd106062d4b.
  • Machine: Debian 13 VM, GCC 14.2.0, Release, lavapipe (Mesa 26.1.6, LLVM 19). No hardware GPU.
git diff --check 086c0686c8...3c0ee17922
python3 tools/check_conventions.py --base 086c0686c8
git diff --stat 086c0686c8 1c4c5e9510
env VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation ANYPS5_NO_SHADER_CACHE=1 ANYPS5_REQUIRE_VULKAN=1 \
  ctest --test-dir build -V -R '^(agc_driver_image_gather_volume|agc_gcn_color_target)$'
# negative control: State.cpp and GuestTextureResource.hpp from main
ninja -C build -j32 -l32 agc_gcn_color_target_tests agc_driver_image_gather_volume_tests
env VK_INSTANCE_LAYERS=... ctest --test-dir build -V -R '^(agc_driver_image_gather_volume|agc_gcn_color_target)$'
# restore the merged files, rebuild
ctest --test-dir build -j8 --test-load 32 --output-on-failure -R '^(agc_gcn_color_target|agc_driver_graphics|agc_driver_gcn_detile)$'
git status --porcelain   # empty
Check Result
Merge onto main clean
git diff --check clean
check_conventions.py All conventions checks passed.
Build and libs (script) OK
Selected tests (script) 2117 of 2239 passed, 115 skipped as expected. 0 new failures and 0 timeouts. The 7 failures also fail on main.
Validation layer (script, 783 tests) The layer loaded in 782 tests and was missing in none. One test, agc_driver_image_gather_volume, was flagged as "not run on main". It comes from main (see below).
agc_gcn_color_target, agc_driver_graphics, agc_driver_gcn_detile 3/3 pass

The agc_driver_image_gather_volume VUIDs (VUID-VkSamplerCreateInfo-addressModeU-01079 and the addressModeU/V/W-parameter ones) are not the PR's. I restored main's State.cpp and GuestTextureResource.hpp and rebuilt. The test then reports the same four validation errors with the same message IDs, and it still passes. The script's baseline did not run this test. The PR changes only the GCN color-target decode and the metadata-pass coverage check, so it does not reach sampler creation.

With main's production files
1236: Validation Error: [ VUID-VkSamplerCreateInfo-addressModeU-01079 ] | MessageID = 0x1aa95c2b
1236: Validation Error: [ VUID-VkSamplerCreateInfo-addressModeU-parameter ] | MessageID = 0x3fcec07
1236: Validation Error: [ VUID-VkSamplerCreateInfo-addressModeV-parameter ] | MessageID = 0xf8361085
1236: Validation Error: [ VUID-VkSamplerCreateInfo-addressModeW-parameter ] | MessageID = 0xd3b90dae
1/2 Test #1236: agc_driver_image_gather_volume ...   Passed   10.64 sec
2/2 Test #2104: agc_gcn_color_target .............***Failed    0.01 sec
2104: AGC graphics: multisampled GCN color targets are not implemented

Negative control

With Graphics/src/State.cpp and Graphics/include/GuestTextureResource.hpp restored from main and rebuilt, agc_gcn_color_target fails with AGC graphics: multisampled GCN color targets are not implemented. With the merged files restored and rebuilt, it passes, and git status --porcelain is empty.

Previous findings

  • Duplicate fields (blocking in an earlier review): Resolved. These were already resolved at the last review and are unchanged here.
  • Stale description: Still open, non-blocking. The new paragraph covers this head. The Base paragraph still says "This branch is now 545e2b5b3f", though, and the long validation list below it is for older heads.
  • A resolve accepted by the padded-extent rule renders the full extent: Still open, optional. State.cpp#L2388 is unchanged.
  • Order of the debt entry: Still open, optional. The entry still describes the implemented behaviour before the gaps.
  • fmaskCmaskAddress moved in GuestTextureResource.hpp: Still open, non-blocking. The field is still below linearPitch (L112-L113). The move is harmless, but restoring main's order would drop the file from the diff.

New findings

Blocking

None.

Non-blocking

None.

Not verified

  • Any title, including Boggle (CUSA03312). I launched no title.
  • Hardware GPUs and Windows. I ran on lavapipe only; the RX 9070 XT results in the description are author-reported.

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 3c0ee17 merged onto main 1e65852 · tested 2026-11-03 19:50 UTC · 21 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,765 passed · 7 failed (0 new, 3 also fail on main, 4 unstable on main) · 48 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,820 of 3,818 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 (936 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.2 s
Unstable on main (4, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_pipeline_journal: failed in 4 of the last 10 main runs
agc_driver_submit_progress: failed in 5 of the last 10 main runs
agc_submit_progress: failed in 6 of the last 10 main runs
agc_submit_progress_no_timeline: failed in 5 of the last 10 main runs
Failing on main too (3, not counted against this PR)
agc_driver_image_table
guest_mmap_executable
guest_socket_options_multicast
Validated but not compared (1, not in the main baseline's validation pass)
agc_gcn_color_target
Validation IDs already present on main (4 IDs in 517 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (517 tests): agc_driver, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, and 509 more
VUID-vkCmdCopyImage-srcImage-01548 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_srgb8_color_target
Skipped (48)
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_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_scattered_runs: skipped, host imports are unavailable: /dev/udmabuf is not accessible
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_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 platform
video_out_flip_eop: 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_eop_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_eop_main: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not co
Reproduce
git fetch origin 3c0ee179221d343ec624148fe66a3b7c3f90f436 1e658521a0a599872612bb91949311e2956b5283
git checkout 1e658521a0a599872612bb91949311e2956b5283 && git merge --no-ff 3c0ee179221d343ec624148fe66a3b7c3f90f436
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 review queue Next in the maintainer review queue: checks pass, no open change request, no conflict label Nov 3, 2026
@github-actions github-actions Bot added needs rebase Conflicts with main, rebase needed and removed review queue Next in the maintainer review queue: checks pass, no open change request, no conflict labels Nov 3, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ AMD GPU test: passed

PR head 3c0ee17 merged onto main 1e65852 · tested 2026-11-03 23:55 UTC · 45 min

GPU AMD Radeon RX 6300 (RADV NAVI24), driver Mesa 25.2.8-0ubuntu0.24.04.4, Vulkan 1.4.318
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-42-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 2,703 passed · 6 failed (0 new, 6 also fail on main) · 111 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,820 of 3,818 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 (993 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ public_headers 90.1 s, ⚠️ agc_driver_image_sample_unnormalized 66.8 s, ⚠️ agc_driver_lazy_resolved_abi 47.7 s, ⚠️ check_skips 38.8 s, ⚠️ agc_shader_sampler_limits 35.9 s
Failing on main too (6, not counted against this PR)
agc_driver_image_table
agc_driver_native_depth_buffer_clear
agc_submit_progress
agc_submit_progress_no_timeline
guest_mmap_executable
guest_socket_options_multicast
Passed on retry (2, failed in the parallel run, passed when re-run with a 360 s timeout; not counted against this PR)
public_headers: Timeout in the parallel run; also passed only on retry in 10 other runs in the last 7 days
trace_digest_TraceDigestTests_test_cli_rejects_invalid_event_fields_without_partial_output: Timeout in the parallel run; also passed only on retry in 39 other runs in the last 7 days
Validated but not compared (55, not in the main baseline's validation pass)
agc_gcn_color_target
guest_job_manager_worker_spin
public_headers_compile_0
public_headers_compile_10
public_headers_compile_12
public_headers_compile_14
public_headers_compile_18
public_headers_compile_2
public_headers_compile_20
public_headers_compile_21
public_headers_compile_22
public_headers_compile_23
public_headers_compile_24
public_headers_compile_25
public_headers_compile_26
public_headers_compile_27
public_headers_compile_28
public_headers_compile_29
public_headers_compile_30
public_headers_compile_31
public_headers_compile_32
public_headers_compile_33
public_headers_compile_34
public_headers_compile_35
public_headers_compile_36
public_headers_compile_37
public_headers_compile_38
public_headers_compile_39
public_headers_compile_4
public_headers_compile_40
public_headers_compile_41
public_headers_compile_42
public_headers_compile_43
public_headers_compile_44
public_headers_compile_45
public_headers_compile_46
public_headers_compile_47
public_headers_compile_48
public_headers_compile_49
public_headers_compile_50
public_headers_compile_51
public_headers_compile_52
public_headers_compile_53
public_headers_compile_54
public_headers_compile_55
public_headers_compile_56
public_headers_compile_57
public_headers_compile_58
public_headers_compile_59
public_headers_compile_6
public_headers_compile_60
public_headers_compile_61
public_headers_compile_62
public_headers_compile_63
public_headers_compile_8
Validation IDs already present on main (4 IDs in 506 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (506 tests): agc_driver, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, and 498 more
VUID-vkCmdCopyImage-srcImage-01548 (4 tests): agc_driver_depth_clear_hle, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (4 tests): agc_driver_depth_clear_hle, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (2 tests): agc_driver_prepared_exports, agc_driver_srgb8_color_target
Skipped (111)
usage: check_skips.py [-h] [--job {linux,windows}] [--list] [--require-tests]
                      junit
check_skips.py: error: /home/ben/anyps5-gpu-ci/data/runs/pr-9892/3c0ee179221d-1e658521a0a5/ctest.xml: testcase 'public_headers_compile_0' is notrun and was not run
Reproduce
git fetch origin 3c0ee179221d343ec624148fe66a3b7c3f90f436 1e658521a0a599872612bb91949311e2956b5283
git checkout 1e658521a0a599872612bb91949311e2956b5283 && git merge --no-ff 3c0ee179221d343ec624148fe66a3b7c3f90f436
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 12 --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 16 --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 AMD machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs.

@github-actions github-actions Bot added review queue Next in the maintainer review queue: checks pass, no open change request, no conflict and removed needs rebase Conflicts with main, rebase needed labels Nov 4, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 4308f2c merged onto main 1c8c0ef · tested 2026-11-04 01:19 UTC · 49 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,784 passed · 6 failed (0 new, 3 also fail on main, 3 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,840 of 3,842 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 (952 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.3 s, ⚠️ agc_driver_lazy_resolved_abi 30.3 s
Unstable on main (3, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_pipeline_journal: failed in 4 of the last 10 main runs
agc_submit_progress: failed in 5 of the last 10 main runs
agc_submit_progress_no_timeline: failed in 4 of the last 10 main runs
Failing on main too (3, not counted against this PR)
agc_driver_image_table
guest_mmap_executable
guest_socket_options_multicast
Validated but not compared (1, not in the main baseline's validation pass)
agc_gcn_color_target
Validation IDs already present on main (8 IDs in 531 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (531 tests): agc_driver, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, and 523 more
VUID-vkCmdCopyImage-srcImage-01548 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_srgb8_color_target
VUID-VkSamplerCreateInfo-addressModeU-01079 (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeU-parameter (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeV-parameter (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeW-parameter (1 test): agc_driver_image_gather_volume
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_gcn_display_present: skipped, no display: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
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_scattered_runs: skipped, host imports are unavailable: /dev/udmabuf is not accessible
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 platform
video_out_flip_eop: 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
vide
Reproduce
git fetch origin 4308f2c31c9d03a280388407ab82fd44f71cbd6b 1c8c0efc8c41314402e6966da5bef6ea3d639d10
git checkout 1c8c0efc8c41314402e6966da5bef6ea3d639d10 && git merge --no-ff 4308f2c31c9d03a280388407ab82fd44f71cbd6b
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.

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ AMD GPU test: passed

PR head 4308f2c merged onto main 1c8c0ef · tested 2026-11-04 01:42 UTC · 39 min

GPU AMD Radeon RX 6300 (RADV NAVI24), driver Mesa 25.2.8-0ubuntu0.24.04.4, Vulkan 1.4.318
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-42-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 2,771 passed · 8 failed (0 new, 7 also fail on main, 1 unstable on main) · 61 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,840 of 3,842 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 (952 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.4 s, ⚠️ agc_driver_image_sample_unnormalized 58.9 s, ⚠️ public_headers 54.8 s, ⚠️ agc_driver_lazy_resolved_abi 48.1 s, ⚠️ agc_driver_sample_multisample_target 40.1 s
Unstable on main (1, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_pipeline_journal: failed in 8 of the last 10 main runs
Failing on main too (7, not counted against this PR)
agc_driver_image_table
agc_driver_native_depth_bda_clear
agc_driver_native_multisample_depth
agc_submit_progress
agc_submit_progress_no_timeline
guest_mmap_executable
guest_socket_options_multicast
Validated but not compared (1, not in the main baseline's validation pass)
agc_gcn_color_target
Validation IDs already present on main (8 IDs in 531 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (531 tests): agc_driver, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, and 523 more
VUID-vkCmdCopyImage-srcImage-01548 (4 tests): agc_driver_depth_clear_hle, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (4 tests): agc_driver_depth_clear_hle, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_srgb8_color_target
VUID-VkSamplerCreateInfo-addressModeU-01079 (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeU-parameter (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeV-parameter (1 test): agc_driver_image_gather_volume
VUID-VkSamplerCreateInfo-addressModeW-parameter (1 test): agc_driver_image_gather_volume
Skipped (61)
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_copied_writer_label_order: skipped, the device reports a minStorageBufferOffsetAlignment of 4, so the dispatch binds its record at +0x1004 in place and nothing is written back; the test needs an alignment above 4
agc_driver_float16_unused_nan_payloads: skipped, the device has no native f16 conversions with RTE rounding and kept f16 denormals
agc_driver_gcn_display_present: skipped, no display: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
agc_driver_image_table_vouched_lookups: skipped, the device reports 4 of 4 host-imported pages written after a GPU read, so a watched imported table cannot be vouched for
agc_driver_linear_target_direct_write_completion: skipped, the device does not keep host imports write-watched, so no completion stamp over the target is tracked
agc_driver_ngg_vertex_wave_reduction: skipped, s3 describes a 32-lane wave only on 32-lane subgroups, and the device has 64 lanes
agc_driver_scattered_runs: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_sparse_dma_buf_import: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_unit_shadow: skipped, the device does not import watched host memory for unit shadows
agc_driver_unit_shadow_budget: skipped, the device does not import watched host memory for unit shadows
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_idle_publish_wait: skipped, the device reports 4 of 4 host-imported pages written after a GPU read, so a forced watch of the import reads its submissions as CPU stores
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_shadowed_key_stores: skipped, the device imports no watched host memory under a unit shadow
agc_small_tiled_shadow_label: skipped, host imports are unavailable: the test block is not imported and watched
agc_storage_clear_hand_over: skipped, the device imports no watched host memory for the clear-key hand-over
agc_storage_pending_key_refresh: skipped, refreshes over a pending key store are not testable here
agc_unit_shadow: skipped, the device does not import watched host memory for unit shadows
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 d
Reproduce
git fetch origin 4308f2c31c9d03a280388407ab82fd44f71cbd6b 1c8c0efc8c41314402e6966da5bef6ea3d639d10
git checkout 1c8c0efc8c41314402e6966da5bef6ea3d639d10 && git merge --no-ff 4308f2c31c9d03a280388407ab82fd44f71cbd6b
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 12 --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 16 --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 AMD machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs.

@oneandonlydean
oneandonlydean merged commit c2eafe4 into boykopovar:main Nov 4, 2026
12 checks passed
@github-actions github-actions Bot removed the review queue Next in the maintainer review queue: checks pass, no open change request, no conflict label Nov 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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