Repository navigation
feat(agc): support uniform custom MSAA sample locations - #2169
oneandonlydean merged 6 commits 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.
|
|
Tested this with Hades II (PPSA36082) on Linux / RTX 4090. It needs the same thing with a different pattern: One thing I ran into doing the same change: If it's useful as a test: the console's standard 4x offsets I opened #2183 before I saw this one. I'll close it, since this came first and covers more (render-pass begin, devices without variable locations). |
0485363 to
e0813fa
Compare
e0813fa to
d92a665
Compare
|
Tested this at 0485363 on Seeker: My Shadow (PPSA12500, Unity), Windows 11, RTX 4070 SUPER. It renders into 4x MSAA targets ( |
|
Thanks @Raghav314 and @JAB-dev for testing across Hades II (Linux/NVIDIA) and Seeker: My Shadow (Windows/NVIDIA). Pushed \d92a665f:
|
adriadam10
left a comment
There was a problem hiding this comment.
Thanks for adding the sample count and pattern to the fragment keys; that covers the earlier request. Built the PR merged onto main and ran the libSceAgcDriver ctest scope (391/391 pass, including agc_driver_graphics and agc_driver_prepared_graphics).
One thing left, also reported by @cookie42073-cmd:
libraryKeys(Graphics/src/Pipeline.cpp:197-205): the resolvedsampleLocationsEnabledfromValidateSampleLocations(Pipeline.cpp:110-115) depends on the depth format, but isn't part ofkeys.fragmentShader/keys.fragmentOutput. Two draws with the same pattern and sample count but a compatible vs. incompatible depth format can reuse a library built with the other enablement, which links different multisample states (VUID 06635). Append the resolved value to both keys and add a case with the same pattern and two depth formats.
Still stacked on #419; this will wait for it to land, then rebase so it only carries its own commit.
|
Can you rebase this please? |
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Vulkan's standard 8x sample 7 is (0.9375, 0.0625), (7, -7) in signed sixteenths; the table had (7, -8), so the standard pattern (PPSA99902's PA_SC_AA_SAMPLE_LOCS words 0xbd153fd1 / 0x9773f95b) was refused as nonstandard. Regression row with those words. Reported by @Amoenus. Co-Authored-By: Amoenus <5391396+Amoenus@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> (cherry picked from commit 9a1a067)
589d42b to
605741d
Compare
|
Thanks everyone for the review and title testing. I?ve pushed the rebased update; it is now based on current
Locally on Windows / AMD Radeon 780M, |
|
Hi, Blazing Cook here. Following up on the earlier Ping Pong testing: we completed a full one-player match in Middle Ages Ping Pong on unmodified upstream Tested STL1te's Middle Ages Ping Pong, PPSA28319 / 01.000.000, on Windows with an RTX 4070 SUPER. This was a fresh Release build with MinGW-w64 GCC 15.2.0 and a fresh relink, without local production patches or a diagnostic library overlay. Relink inputs were reconstructed from the release; packaged ELF headers and PT_LOAD payloads were independently matched. Original full-ELF equivalence is not claimed. Using upstream
The capture ran for 317.624 seconds, saving 314 raw GPU frames. It ended with a requested recorder stop after those checks. The recorded game exit code 1 is from that deliberate process termination; it is not a spontaneous crash or a graceful in-game exit. Neither game log contains the fatal, unsupported, assertion or Vulkan-error signatures checked by the analysis script. The full default build and This is a compatibility follow-up after the upstream work in #419 and #2169, not an isolated before/after result for either change. Thanks to MichonGoddijn231849, authurtabo-byte and everyone who reviewed and tested them. STL1te is the homebrew author. There is no new code fix from this run. Victory, two-player mode, physical input, fullscreen, audio quality, performance and PS5 pixel equivalence remain untested. Frame readback and disabled caches make this unsuitable as a performance benchmark. These results also do not establish any commercial-title memory failure. If anyone reproduces a failure in this title, please share the exact AnyPS5 commit, title version, OS/GPU, reproduction steps and runtime log so we can compare it with this baseline. AI-assisted: yes, Codex. The attached evidence contains logs, frames, scripts and verification receipts, with no game binaries or assets. Evidence ZIP — SHA-256: |

What
Depends on #419. Its prerequisite commits are included; the follow-up is
feat(agc): support uniform custom MSAA sample locations.After multisampled targets are supported, 3D MiniGolf (PPSA03647) aborts while loading its first course because its four PA_SC_AA_SAMPLE_LOCS_PIXEL registers contain
0x22eea66a, rather than Vulkan's standard four-sample pattern. Preserve the guest's sample indices and signed sixteenth-pixel offsets through VK_EXT_sample_locations for uniform 2x, 4x and 8x patterns.Query the device's sample counts, coordinate range, subpixel precision and grid support before enabling the extension. Include the pattern in pipeline and render-pass continuation keys, check the actual depth format and sample count with vkGetPhysicalDeviceImageFormatProperties, create compatible depth images, and supply sample locations at pipeline creation and render-pass begin. Depth attachments retain GENERAL throughout their use. Spatially varying 2x2 patterns and unsupported devices throw. CB resolves validate sample counts independently of raster sample locations.
Vulkan behavior follows the official sample-location pipeline state, render-pass state, and depth-attachment requirement. The guest coordinate interpretation is unchanged from #419; PS5 coverage and interpolation equivalence remain unmeasured and are recorded in TechnicalDebt.
Tested
Rebased onto main
c9da0f93. Preserved upstream depth-surface extent/format checks while retaining the prerequisite HTILE fast-clear handling. Windows, MinGW-w64 GCC 15.2.0, Release, NVIDIA GeForce RTX 3050 6GB Laptop GPU.libSceAgcDriver,agc_driver_graphics_tests, and both depth fast-clear test targets build successfully. All three focused tests pass:agc_driver_graphics(6.25 s),agc_driver_depth_fast_clear(1.23 s), andagc_driver_depth_fast_clear_submit(0.47 s).tools/check_conventions.py --base origin/mainpasses.nonstandard sample locations are unsupportedto a rendered course and HUD. The separate unwritten-pixel-program blocker is covered by fix(agc): read an unwritten pixel program address as unset #2022. A completed shot is not confirmed; this PR alone does not provide all title startup fixes.0x444cc4cclocations rendered correctly in gameplay. His overlapping feat(agc): pass custom sample locations through VK_EXT_sample_locations #2183 was closed in favor of this PR. The depth-format capability check and standard-coordinate regression above address his feedback.Linux was not rerun locally. Validation layers and console coverage/interpolation equivalence were not tested. Guest coordinate interpretation remains documented as inferred in TechnicalDebt.
Checklist
main; no other open PR implements the same functions.mdfiles or images added to the repository