Repository navigation
fix(agc): identify invalidated multisample DCC ranges - #6869
adriadam10 merged 1 commit into
Conversation
|
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.
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.
|
jotitadev
left a comment
There was a problem hiding this comment.
The description has NVIDIA on Windows and llvmpipe on Linux. This adds NVIDIA on native Linux.
Machine: NVIDIA GeForce RTX 3070, driver 595.99.02, Vulkan 1.4.329, Ubuntu 26.04, i7-8700, GCC 15.2, Release, BUILD_TESTING=ON. Head 67ec030c5 merged into main 452494439 (clean merge). Every runtime process logs Selected GPU name=NVIDIA GeForce RTX 3070.
^agc_driver_(msaa_dcc.*|alpha_to_coverage.*|dithered.*|undithered.*|graphics)$, 9 tests,-j1: 9/9 pass, 3 of 3 runs. That includesagc_driver_msaa_dcc_stateandagc_driver_msaa_dcc_clear_2/_4/_8, which all run on this GPU (no skips,Multisampled DCC fast clear tests passed).- I tried a negative control with
main'sGraphics/sources and the PR's tests, but the tests do not compile againstmain(ColorTargethas nodccControl, noGraphics::MultisampledDccBytes), so I have no red run of my own. The description's controls cover that.
Not run: lavapipe (already in the description), Windows, AMD, the full suite.
GPUs tested: NVIDIA GeForce RTX 3070 (595.99.02), Ubuntu 26.04
Written with AI assistance (Claude Code). I ran the builds and tests above on my machine.
67ec030 to
65e7a5c
Compare
65e7a5c to
58ba8a9
Compare
|
A current-
Are you planning to implement the resident writes after this diagnostic? If so, I'm happy to run these three titles on your branch. If not, I'd rather ask before starting on it, since it builds directly on your #5939 design. AI-assisted: yes (Claude Code) |
|
A reproduction of the stop in the description, on Linux: Ubuntu 24.04, RTX 4070 Ti, NVIDIA 595.99.02, Release. Base is
So the DCC metadata range is the plane that changed, in all three apps. Without #6543, on plain With #6543 and #7132 (e040cb7) instead of this PR (the two conflict in AI-assisted: yes (Claude Code) |
|
@milescoviello Thanks for identifying the DCC plane. Your #7250 now implements the full-range resident DCC fast-clear case; I will build on that work rather than duplicate it here. I independently validated its earlier head In our Sonic integration with #6543, that change removes this DCC stop and reaches the menu, opening movie and level-loading stage; the next recorded stop is #7260. This does not validate your three titles or arbitrary resident writes: partial fills, unsupported keys and color-memory writes remain refused. Thank you for the implementation and title testing. This PR remains diagnostic only. AI-assisted: Codex; author responsible. |
58ba8a9 to
4b674a7
Compare
|
Checked that all three refusals go through |
What
Append the affected color/DCC/CMASK plane, address, byte count and sample count to the existing watched-memory, changed-generation and pending-write refusals. Every predicate and the existing message prefix remain unchanged; details are formatted only on failure. This does not enable resident writes or identify their writer.
The remaining stop is
writes to a resident multisampled DCC target or its metadata are not implemented. Rush 2 (PPSA69423) and Wave Race 64 (PPSA69424) reach it with #5939 and the dispatch correction. The added detail makes subsequent reports distinguish which owned plane changed. Those title runs are the reporter's evidence; I have not reproduced them.#5939 is merged; Depends on: none. Current head 4b674a72ba, directly on main
51cee90311b427529e2b9899b13de334ae90d856, remains two files,+30/-3. The rebase conflict was the current range predicate: it retainsUnchangedSince(...) || !StoredOver(...)from #7132 exactly and adds only the existing diagnostic helper around it. Pending-write and watching predicates are also unchanged. This adds no resident-write capability. #7250 supplies that separate full-range fast-clear case, with our attributed validation linked in the follow-up comment.No duplicate diagnostic found. #6669 changes CMASK decoding, including its existing seed-line overlap with the parent; this diagnostic does not change that seed or decoding. #6543 handles dispatch ordering separately.
Stack-overlap clarification
The previous stack included #5939. Since it landed, the current main diff contains only this diagnostic. #6215 changes resident ownership; this patch does not establish a functional dependency on it. Earlier applicability checks retain their original pins.
Game follow-up with submitted #6869 — 2026-10-17 UTC
Integration
4de205aa01includes exact #6869 head58ba8a987on the previous main17 composition. A fresh RTX5080 run reaches the same initial loading screen and stops after41.654s, without a timeout or any button command; seven BMPs are retained. The executable, guest libc, three toolchain DLLs and other126 PRXs are byte-identical to the42.646s baseline. Only AGC differs. Protected original input/module and both original configuration hashes remain unchanged.This identifies the tracked DCC metadata range, at8 samples, as the first failed generation check. The preceding tracked color-range check passes at that call. It does not establish whether the metadata values changed, which writer invalidated the generation, or whether a valid full fast clear occurred. The existing fence error remains unexplained. No new menu/gameplay/FPS or capability-unblock claim.
The submitted diagnostic was absent from the previous contribution composition; it is now included. A temporary plane-label experiment at
1689c46a3reproduced DCC invalidation in42.631s and is superseded by this existing PR; no duplicate PR is being prepared. At the exact new integration pin, Windows/Linux full relinker/libraries builds pass and seven focused GPU fixture processes pass:2x/4x/8x on each actual NVIDIA/AMD GPU plus available4x llvmpipe (max0.66s, no selected skips; Linux2x/8x excluded for unavailable attachment support). This is validation of the integration, not an execution of the unchanged standalone PR head. AI-assisted: Codex; author responsible.Tested
Current head4b674a72ba / main51: full Release relinker/system-library and selected graphics/recorder/alpha-to-coverage builds pass on Windows11 Enterprise26200 (GCC15.2r7) and Ubuntu24.04 WSL2 (GCC13.3).
recordCommandsconcerns conditionalbatchownership: allocation and dereference take the samerecorder == nullptrbranch, andmake_uniquethrows on failure. This is inspected advisory output, not a clean Cppcheck claim.cmake --build build --target agc_driver_graphics_tests agc_driver_alpha_to_coverage_tests ctest --test-dir build -V -j1 --repeat until-fail:3 -R '^agc_driver_msaa_dcc_(state|clear_[248])$'Checklist
main; no other open PR implements this diagnostic (feat(agc): import uniform multisampled DCC fast clears #5939 is merged)NotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)