Skip to content

feat(agc): draw EQAA color targets at their coverage sample count - #9700

Open
frankea wants to merge 4 commits into
boykopovar:mainfrom
frankea:eqaa-color-targets
Open

frankea wants to merge 4 commits into
boykopovar:mainfrom
frankea:eqaa-color-targets

Conversation

@frankea

@frankea frankea commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

What

DecodeColorBuffer refused every color target whose CB_COLOR_ATTRIB.NUM_FRAGMENTS is below NUM_SAMPLES (EQAA): "color targets with fewer fragments than samples (EQAA) are unsupported". This accepts such a target when it has FMASK (CB_COLOR_INFO.COMPRESSION and a CB_COLOR*_FMASK base) and no DCC, and draws it as the existing host multisampled target at its coverage sample count.

  • ColorTarget gains eqaaFragments (0 when the fragments equal the samples). The FMASK base is feat(agc): expose expanded FMASK for tracked native owners #7948's fmaskAddress, which main decodes for every multisampled target; CB_COLOR*_FMASK_BASE_EXT (context 0x3a0 + slot) is now in DrawKeyRegisters. samples stays NUM_SAMPLES, so pipelines, draws, CMASK fast clears, the FMASK decompress and the CB resolve are the existing MSAA path. eqaaFragments fits in existing padding, so sizeof(State) and the pipeline journal are unchanged; a pipeline depends on the coverage sample count, not the fragment count.
  • The guest footprint (MultisampledColorBytes, the guarded range, color fills) uses the fragment count, as addrlib sizes the surface: a 4-sample 2-fragment 512x512 RGBA8 target occupies 2 MiB, not 4.
  • The FMASK plane is guarded as a Z_64KB_X surface of 1, 2 or 4 bytes per pixel, so a T#, CPU or DMA read of it throws by name ("overlaps the FMASK of EQAA color target") instead of reading memory the host never wrote. An unmap or allocation removal of either plane retires all of the target's guards; the second pass of retireUnmapped now drops every inactive range, not only metadata ranges.
  • The FMASK guard follows the FMASK base. When a resident EQAA target is drawn again with another CB_COLOR*_FMASK base, acquire() replaces its FMASK guard with one at the new base and keeps the target and its samples. The target's identity stays surface, format, extent, samples and fragments, so its contents carry over.
  • Sampling an EQAA target through a T# and storage image access to it throw ("... EQAA color target ... is not implemented"). EQAA without FMASK, with DCC, with one fragment, or with more fragments than samples throws.
  • Technical debt: a new "EQAA color targets" entry; "Multisampled target guest access" and "Multisampled color targets" now size by fragments and name the FMASK range.

GPU semantics, with sources:

  • NUM_SAMPLES is the coverage sample count and NUM_FRAGMENTS the number of colors stored per pixel. PAL and Mesa program them that way: PAL gfx9ColorTargetView.cpp and Mesa ac_descriptors.c.
  • addrlib sizes the color surface by its fragments: ac_surface.c, with the block rule the "Multisampled target guest access" debt entry already cites.
  • FMASK holds, per sample, the fragment it uses or "unknown" (Mesa ac_descriptors.h). Its element is 1 byte for 4 samples and 2 fragments, and 1, 2 or 4 bytes across the other counts (ac_descriptors.c).
  • The host keeps a color per coverage sample, which equals the console wherever a pixel needs at most NUM_FRAGMENTS distinct colors. Where more primitives meet in a pixel, the console marks samples unknown and the CB resolve drops them (radeonsi si_state.c). Which samples it drops is not documented or measured, so a resolve here can differ at those pixels. The debt entry says so.
  • One fragment behaves differently, which is why this PR leaves it refused. @fma-rc's radeonsi measurements in fix(agc): draw a one-fragment multisampled color target as one sample with sample 0's coverage #9450 (GL_AMD_framebuffer_multisample_advanced, RDNA2) show the split: with 2 or 4 storage samples, draws that cover part of a pixel resolve to blends, as a host color per sample does; with 1 storage sample only what sample 0 covers survives.

Why: Gran Turismo 7 (PPSA01317) stops on this refusal when it loads the World Map and when it delivers a purchased car, at a 512x512 RGBA8 target with 4 samples and 2 fragments (CB_COLOR_INFO 0x0000e028, CB_COLOR_ATTRIB 0x0000a000, CMASK and FMASK). The title consumes the target only through a CB resolve.

Overlap with other PRs:

Tested

  • Refreshed onto main 0db47b2 (head d902416; no conflicts), RTX 4090 (NVIDIA 616.92, Windows 11): the 64 ctest entries of the focused set below (with agc_driver_eqaa_color_target) pass 64/64, each test run three times, and 64/64 under the validation layer (VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation, ANYPS5_NO_SHADER_CACHE=1, ANYPS5_REQUIRE_VULKAN=1, ctest -V), with no VUID- line; its only messages are main's three Undefined-Value-ShaderOutputNotConsumed-DynamicRendering warnings from agc_driver_alpha_to_coverage. main 0db47b2 passes the union of the refreshed sets, 115/115, under the same layer settings with no VUID- line.
    Windows 11 (build 26200), NVIDIA GeForce RTX 4090 (driver 616.92), MinGW GCC Release build with BUILD_TESTING=ON, all on one machine.

  • Focused set: the 63 ctest entries of 19 targets (62 before the main merge). These are agc_driver_graphics_tests (the CPU decode tests, with a new EQAA case), the new agc_driver_eqaa_color_target_tests, and the MSAA, FMASK, CMASK and journal tests: alpha_to_coverage, cached_image_multisample_guard, cmask_fast_clear, color565_target, fmask_image_reads, image_msaa_address_on_plane, msaa_enable_single_sample, multisample_fill_host_only, multisample_readback, multisample_retirement, multisampled_pass_order, native_multisample_depth, pipeline_journal, pixel_sample_coverage, sample_mask_multisample, sample_multisample_target, staged_clear_sampled_read.

  • This PR (43a9181, which merges main 7e69be6): 63/63 passed, each test run three times (ctest --repeat until-fail:3).

  • After the merge, main (feat(agc): expose expanded FMASK for tracked native owners #7948) decodes an FMASK base for every multisampled target, so 43a9181 drops the decode test's check that a 4-sample 4-fragment target has none; it still checks that such a target is not EQAA.

  • Control for the FMASK guard move: this head without the move in acquire(). The new test fails with a read of the FMASK base the EQAA target was last drawn with was not refused by name.

  • Validation layer: VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation (Vulkan SDK 1.4.363.0), ANYPS5_NO_SHADER_CACHE=1 and ANYPS5_REQUIRE_VULKAN=1 with ctest -V, on main 83462cc (7e69be6 plus eight commits to tools/ only) (62/62; the new test isn't on main) and on this PR (63/63). Neither log has was not found but was requested by env var VK_INSTANCE_LAYERS. Neither log has a VUID- line. Both have the same three Undefined-Value-ShaderOutputNotConsumed-DynamicRendering warnings, from main's agc_driver_alpha_to_coverage.

  • Before the main merge (22766ab on main 7e2ba73): 62/62 three times. main control there: main 6ef5a1c plus only the new GPU test and its CMake line; the test fails with AGC graphics: color targets with fewer fragments than samples (EQAA) are unsupported.

  • The GPU test draws two slanted triangles, red and green, into a 256x256 RGBA8 target with 4 samples and 2 fragments and into the same target at 4 fragments, then CB-resolves both into one-sample targets. It requires byte-identical results, with edge texels at one-quarter and three-quarter coverage (410 such channels). It also checks that a read of the EQAA FMASK range is refused by name, that the color guard ends at the 2-fragment footprint (512 KiB, not 1 MiB), and that the 4x target's FMASK is not guarded. Then it draws the EQAA color surface again with a second FMASK base and checks that a read of the new base is refused by name and the old base is no longer guarded.

  • The CPU tests decode GT7's registers (PA_SC_AA_CONFIG 0x0020c002, CB_COLOR_INFO 0xe028, CB_COLOR_ATTRIB 0xa000, an FMASK base with pipe-bank bits) through the draw-key register facade (0x3a0 now covered), as well as 8 samples with 4 fragments. They check the refusals: one fragment, more fragments than samples, no COMPRESSION, no FMASK base, a bad FMASK_BASE_EXT, and DCC. They also check the CB resolve's source decode and the 4x, 4s/2f and 8s/4f footprints.

  • Not run on Linux. sizeof(State) stays at main's 808: a probe built on macOS gives 784, 792 and 808 for main 7e2ba73, this PR's previous head and main 7e69be6, the values of their Linux guards, and 808 for this head. tools/check_conventions.py reports no errors; its one warning is the length of the existing "Multisampled target guest access" debt entry, which this PR extends.

  • Gran Turismo 7 (PPSA01317) on a local stack of main with the open PRs it needs before this stop (fix(agc): write a replace blend into a packed color target without blending #7243, feat(agc): render layered draws into a depth view of several slices #7256, fix(shader): answer image_get_resinfo on any T# dimension #7550, fix(agc): raise no end-of-pipe event from flips and carry the release's interrupt context #7978, feat(agc): merge partial writes into 4_4_4_4 UNORM color targets #8564, feat(agc): blend into 11_11_10 float color targets in the pixel shader #9020, feat(agc): draw alpha-tested packed-target merges that write depth as a depth pass and an EQUAL merge pass #9335, fix(shader): link table callees that together exceed s_call_b64 range #9068), with its diagnostic switches that skip refused compute dispatches (at the revision before the one-fragment refusal; GT7's target has two fragments): the run no longer stops on the EQAA refusal, and nothing hits the FMASK or color guard. After CROSS at the main menu it renders the car loading screens, then stops on the next pass: a one-sample depth target under a multisampled rasterizer without MSAA_ENABLE is unsupported for points or lines and with ... DB_EQAA Z interpolation or overrasterization. That pass keeps the EQAA pass's 4x PA_SC_AA_CONFIG with DB_EQAA 0x00050000 (INTERPOLATE_COMP_Z); it is a separate topic for a follow-up PR.

Checklist

@github-actions github-actions Bot added the unblocks title Names a title ID on the Unblocks line label Oct 22, 2026
@clairtonmichel

Copy link
Copy Markdown

Tested on AMD Ryzen 7 9800X3D and AMD Radeon RX 7900 XTX (Fedora Linux, Mesa 26.2.5):

  • Built cleanly with zero errors.
  • Ran the AGC driver test suite (640 tests): passed successfully, aligning perfectly with environment baselines (known pre-existing test quirks).
  • EQAA color target changes are stable and ready to merge!

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

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

Pull request Shared files not compared
PR 1191 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
PR 1368 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
PR 1395 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 1896 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 2434 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 4040 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 4448 docs/dev/debt/libSceAgcDriver.md
PR 4449 docs/dev/debt/libSceAgcDriver.md
PR 5021 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5058 docs/dev/debt/libSceAgcDriver.md
PR 5371 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5372 docs/dev/debt/libSceAgcDriver.md
PR 5431 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5441 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 5925 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6044 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6146 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6182 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6185 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6186 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6187 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6188 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
PR 6192 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6194 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6209 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6223 docs/dev/debt/libSceAgcDriver.md
PR 6235 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6249 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6273 docs/dev/debt/libSceAgcDriver.md
PR 6280 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6300 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6412 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6481 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6498 docs/dev/debt/libSceAgcDriver.md
PR 6501 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6548 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6549 docs/dev/debt/libSceAgcDriver.md
PR 6612 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6628 core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
PR 6642 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6743 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6804 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6808 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6820 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6867 docs/dev/debt/libSceAgcDriver.md
PR 6905 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6921 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6926 docs/dev/debt/libSceAgcDriver.md
PR 6959 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6970 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6971 core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
PR 6973 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6977 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6987 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6989 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6995 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7002 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7048 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7085 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7201 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7223 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7243 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 7256 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7275 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7307 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 7310 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7395 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7410 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 7446 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 7449 docs/dev/debt/libSceAgcDriver.md
PR 7457 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7464 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7505 docs/dev/debt/libSceAgcDriver.md
PR 7508 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7514 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7604 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 7618 docs/dev/debt/libSceAgcDriver.md
PR 7642 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 7668 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7677 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7705 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7717 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7844 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7893 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7910 docs/dev/debt/libSceAgcDriver.md
PR 7978 docs/dev/debt/libSceAgcDriver.md
PR 8014 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 8089 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8105 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 8123 core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
docs/dev/debt/libSceAgcDriver.md
PR 8160 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8161 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8212 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 8213 docs/dev/debt/libSceAgcDriver.md
PR 8223 core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
docs/dev/debt/libSceAgcDriver.md
PR 8246 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 8281 docs/dev/debt/libSceAgcDriver.md
PR 8319 docs/dev/debt/libSceAgcDriver.md
PR 8365 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 8395 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 8401 docs/dev/debt/libSceAgcDriver.md
PR 8412 docs/dev/debt/libSceAgcDriver.md
PR 8419 docs/dev/debt/libSceAgcDriver.md
PR 8420 docs/dev/debt/libSceAgcDriver.md
PR 8423 docs/dev/debt/libSceAgcDriver.md
PR 8424 docs/dev/debt/libSceAgcDriver.md
PR 8484 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8542 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 8592 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 8639 docs/dev/debt/libSceAgcDriver.md
PR 8707 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 8735 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8740 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 8874 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 8887 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8930 docs/dev/debt/libSceAgcDriver.md
PR 8939 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8998 core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
PR 8999 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9007 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9022 docs/dev/debt/libSceAgcDriver.md
PR 9050 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9077 docs/dev/debt/libSceAgcDriver.md
PR 9098 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9159 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 9176 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9185 docs/dev/debt/libSceAgcDriver.md
PR 9186 core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9188 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9193 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9243 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9248 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9275 docs/dev/debt/libSceAgcDriver.md
PR 9287 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9289 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9318 docs/dev/debt/libSceAgcDriver.md
PR 9333 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
PR 9348 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9352 docs/dev/debt/libSceAgcDriver.md
PR 9356 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9361 docs/dev/debt/libSceAgcDriver.md
PR 9387 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9393 docs/dev/debt/libSceAgcDriver.md
PR 9396 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9401 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9402 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 9406 docs/dev/debt/libSceAgcDriver.md
PR 9424 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 9431 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9432 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9436 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9443 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9445 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9450 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9457 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9489 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9495 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9508 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 9514 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9521 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9564 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9565 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9592 docs/dev/debt/libSceAgcDriver.md
PR 9595 docs/dev/debt/libSceAgcDriver.md
PR 9597 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9604 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9626 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9633 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9652 docs/dev/debt/libSceAgcDriver.md
PR 9670 docs/dev/debt/libSceAgcDriver.md
PR 9671 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9672 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9673 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9674 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9675 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9676 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9685 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 9694 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9696 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9712 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9723 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9737 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9748 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9749 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9779 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9789 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9790 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9836 docs/dev/debt/libSceAgcDriver.md
PR 9842 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9852 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9856 docs/dev/debt/libSceAgcDriver.md
PR 9875 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9879 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 9890 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9891 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9892 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9893 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9895 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9897 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9898 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 9899 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9904 docs/dev/debt/libSceAgcDriver.md
PR 9905 docs/dev/debt/libSceAgcDriver.md
PR 9906 docs/dev/debt/libSceAgcDriver.md
PR 9907 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9913 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9915 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9940 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9941 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9950 docs/dev/debt/libSceAgcDriver.md
PR 9961 docs/dev/debt/libSceAgcDriver.md
PR 9969 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9989 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10000 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10026 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 10043 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10044 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10046 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 10062 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 10064 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 10066 docs/dev/debt/libSceAgcDriver.md
PR 10141 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 10159 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10164 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10179 docs/dev/debt/libSceAgcDriver.md
PR 10191 docs/dev/debt/libSceAgcDriver.md
PR 10193 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 10194 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
PR 10233 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10249 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
PR 10307 docs/dev/debt/libSceAgcDriver.md
PR 10333 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 10348 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 10351 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10359 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 10382 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10388 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10414 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10420 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10423 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10435 core/libs/prx/libSceAgcDriver/Graphics/include/State.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10442 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10443 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10463 docs/dev/debt/libSceAgcDriver.md
PR 10465 docs/dev/debt/libSceAgcDriver.md
PR 10469 docs/dev/debt/libSceAgcDriver.md
PR 10472 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10489 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10492 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md

@jotitadev jotitadev 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.

Apple GPU run of 22766ab: the new test passes on MoltenVK and fails without the change.

Setup: Apple M2 Max, macOS 27.2, x86-64 under Rosetta 2, Release. Base is #8658 (feat/macos-port) @ f48446a (main plus the macOS port), not main; your diff from 7e2ba73 applies cleanly on it. Two drivers: MoltenVK 1.4.2 (Vulkan SDK 1.4.363) and MoltenVK main + SPIRV-Cross #2704. ANYPS5_NO_SHADER_CACHE=1, -j1 --timeout 30.

  • This PR: agc_driver_eqaa_color_target passes 3 of 3 on both drivers: 4-sample 2-fragment draws resolve like 4x MSAA (262144 bytes), 410 quarter-coverage channels, FMASK guarded. That is the same 410 channels as on your 4090, so Metal's 4x sample positions give the same edge coverage. Your focused set (32 ctest entries: agc_driver_graphics, the new test, and the MSAA, FMASK, CMASK and journal tests) with --repeat until-fail:3: the only failures are multisample_retirement and sample_mask_multisample. Both fail the same way on the base without this PR.
  • Test only, production files at the base (new EqaaColorTarget.cpp and its CMake line): fails on both drivers with AGC graphics: color targets with fewer fragments than samples (EQAA) are unsupported, the same as your main control.
  • Full ^agc (857 entries, without flip/display/lds_atomics64): MoltenVK main + #2704 gives exactly the base's 16 failures. MoltenVK 1.4.2 gives the base's 17, plus agc_driver_uint8x4_color_target, which is intermittent on Apple without this PR too (it fails in 19 of 150 runs on the base). No new failures.
  • The sizeof(State) == 792 assert is under __linux__ && __GLIBCXX__, so it doesn't apply to the macOS libc++ build. The macOS build compiles with no errors.

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

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


bool sameTarget(const ColorTarget& a, const ColorTarget& b) {
return a.surfaceAddress == b.surfaceAddress && a.format == b.format && a.extent.width == b.extent.width && a.extent.height == b.extent.height && a.samples == b.samples;
return a.surfaceAddress == b.surfaceAddress && a.format == b.format && a.extent.width == b.extent.width && a.extent.height == b.extent.height && a.samples == b.samples && a.eqaaFragments == b.eqaaFragments;

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.

This cache key distinguishes EQAA fragment count but omits the newly guarded FMASK address. If the same color surface is rendered again with a different fmaskAddress, acquire() finds the existing target and returns it without refreshing guarded(), so the old FMASK range remains protected while the current FMASK range is not. Please include the FMASK address in target identity/recreation or explicitly replace that guard when it changes, and add a regression that renders the same color target with two FMASK bases and verifies the guard follows the active base.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Thanks, that was a real gap. Fixed in 53d00af: when acquire() reuses an EQAA target whose FMASK base changed, it replaces the target's FMASK guard with one at the new base, and 81eca78 keeps the FMASK pipe/bank XOR with it. I kept the FMASK base out of the target's identity, so the host target and its samples carry over to the next draw.

The regression is in EqaaColorTarget.cpp: it draws the same color surface again with a second FMASK block, then requires a read of the new base to be refused by name and the old base to be unguarded. Without the change in acquire() it fails with a read of the FMASK base the EQAA target was last drawn with was not refused by name. Results are in the body.

AI-assisted: yes (Claude Code)

@MarcZX10 MarcZX10 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.

I reviewed the decode, fragment-sized guest footprint, FMASK guard, resolve path, and the execution test. The author reports 62/62 focused tests on an RTX 4090 with three repeats and validation-layer comparison; an independent Apple/MoltenVK report also says the new test passes. I could not independently build or run the C++ tests in this Linux checkout because no configured product build is available.

There is a guard-lifetime issue at sameTarget (I left an inline comment): the cache key includes eqaaFragments but omits fmaskAddress. If the same color surface is reused with a different FMASK base, acquire() can return the existing target without refreshing its guard, leaving the new FMASK range unprotected. Please make the target/guard follow the current FMASK address and add a regression that changes the FMASK base for the same color surface.

Please also update this branch to current main (8b3a6ba88d8fc74e768f1a7e8e9e36fb69842768); the current head is based on 7e2ba73e4c, 13 commits behind. Rerun the focused tests after rebasing.

The overlap report lists shared changes with #7948 and #9450, which this description already discusses, and newly open #9672 through #9675, which touch State.hpp's register ranges and/or State.cpp's target decode. The repository asks authors to agree on landing order for overlapping code and declare Depends on when a stack is required. Please coordinate with those authors and update the checklist if this change depends on a particular order. I am treating these as shared-file coordination needs, not assuming the separate PS4/PS5 behavior is duplicate work.

Local checks: git diff --check is clean. GitHub conventions, eligibility, intake, labels and report checks pass; product CI jobs are skipped by the repository gates. I did not independently reproduce the author-reported GPU results.

@EagleBearerYS

Copy link
Copy Markdown
Contributor

@frankea a merge-order note: #9533, with #9717 and #9742 stacked on it, moves the guarded byte count out of guard() into guardedColorBytes(target), so its colour-target alias query (whether a host-only colour target covers a D32S8 stencil or depth plane) uses the same range as the guard. This PR changes that count to use storedFragments(target) in place of the sample count. Composed, the fragment count goes into guardedColorBytes, so the guard and the alias query keep covering the same bytes. #9533 goes after this PR and rebases over it.

@frankea

frankea commented Oct 23, 2026

Copy link
Copy Markdown
Contributor Author

@EagleBearerYS thank you for working that out. I've recorded it in the checklist: #9533, with #9717 and #9742, goes after this PR and takes the fragment count in guardedColorBytes.

AI-assisted: yes (Claude Code)

@frankea

frankea commented Oct 23, 2026

Copy link
Copy Markdown
Contributor Author

@MarcZX10 the FMASK guard follows the active FMASK base since 53d00af, with the regression you asked for, and the branch now merges main 0db47b2 (head d902416, no conflicts); the focused set and the paired validation-layer comparison are rerun on it (first bullet under Tested). The checklist now records the order with #9533, #9450 and #9672 to #9675, and I've asked fma-rc and ntamas94 on their PRs.

AI-assisted: yes (Claude Code)

@adriadam10 adriadam10 self-assigned this Oct 23, 2026
A color target with fewer fragments than samples (CB_COLOR_ATTRIB NUM_FRAGMENTS below NUM_SAMPLES) with FMASK is drawn as a host multisampled target at its coverage sample count. Its guest footprint and guard are sized by its fragments, its FMASK plane is guarded, and sampling it, storage access to it, DCC on it and EQAA without FMASK throw.
@github-actions github-actions Bot added needs rebase Conflicts with main, rebase needed and removed needs rebase Conflicts with main, rebase needed labels Oct 24, 2026

This branch has not been deployed

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

Labels

agc libSceAgc* build docs needs rebase Conflicts with main, rebase needed unblocks title Names a title ID on the Unblocks line

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants