Repository navigation
Conversation
|
Integration note: my draft #6971 addresses #6957 by tracking the native multisample image layout across storage writes, sampled reads, and later attachment/storage use. It overlaps this branch in |
|
Newer-composition qualification, 2026-10-20 UTC: the refreshed main Matched #6973/main parent The separate 4x DCC-clear group also passes 3/3 on NVIDIA and fails 3/3 on AMD in each arm at #7936's existing undrawn-samples/channels/scissor assertion. The two assertions are distinct; a shared cause is unconfirmed. Actual #6987 is now pushed at Original 419ad89/main-aa qualification, removal controls and manual-oracle boundary@oneandonlydean @MarcZX10 Review correction at 419ad899c6, based on main
Reproduce: Previous upstream-head qualification at cafd4f7@MarcZX10 #6973 is refreshed at The two new-main conflicts were adjacent method insertions. Source comparison preserves our initializer/import/ownership/layout bodies and main's metadata-fill tracking methods. The new refill flow retains your existing return-to-GENERAL transition before clearing. Original initializer fixtures are unchanged. No separate readback-layout work was taken into this refresh; your three-file follow-up and the reporter's offered Intel rerun remain separate. Full Windows builds pass. The new candidate has72 focused passes plus the same nine AMD DCC assertion failures independently reproduced on literal main1e774 (#7936); all selected logs have zero VUID/errors/warnings or unsupported/skipped/timed-out cases. After baseline comparison, the exact candidate rebuilds and nine restoration checks pass. The PR body records source pins, actual GPUs, current main comparisons and the inherited analyzer advisory. Earlier initializer-negative controls retain their original pins. This validates the adapted composition; no local Intel, fresh title/FPS, current-head Linux or full-suite result. AI-assisted: yes (Codex); author responsible. |
|
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.
|
|
Runtime datapoint on NVIDIA hardware. RTX 3070, Ampere, driver 617.42, Windows 11 26200, WinLibs GCC 15.2.0, Release, ANYPS5_NO_SHADER_CACHE=1. Head 82bfd52, all binaries rebuilt on this head, ctest serial:
All pass on Ampere — the guest-initial-content path into native MSAA color holds. |
|
Intel and AMD Windows data for head Windows 11 Pro 26300, WinLibs GCC 15.2.0 r7, Release,
AI-assisted: yes (Claude Code) |
|
Rebase handoff for the stack base — since #6973 is the base your four follow-ups (#6987, #6989, #6995, #7002) are commit-stacked on, rebasing it onto The rebase (22 commits, one resolved empty and dropped — its content was already carried by an earlier resolution) is on Verified on Linux (CachyOS, kernel 7.2.9, GCC 16.2.1, Ninja, Release, To pick it up: |
82bfd52 to
b64742f
Compare
|
@blawesom thanks for the rebase handoff; I adopted it, reviewed the range diff and incorporated main through @savvaniss I reproduced the pass-order failure, and the depth-storage failure @blawesom reported, on NVIDIA, AMD and llvmpipe. Both fixtures still described their MSAA color target as linear, so they stopped at initial import before reaching their intended assertions. The fixture-only correction gives them RenderTarget geometry and a complete 64 KiB color allocation; production refusals and existing test assertions are unchanged. Both corrected tests and initial-samples pass 3/3 on all three devices (27/27 fresh processes). Windows and Linux relinker/libs builds and conventions pass. Exact pins, devices, the failing pre-correction control and analysis limitations are in the updated description. The Intel upload mismatch is still open evidence: upload passes 3/3 on each of our three devices, which does not validate the Intel case. AI-assisted implementation and validation. |
|
Retest of head Windows 11 Pro 26300, WinLibs GCC 15.2.0 r7, Release,
The upload failure is #6957 on the fixture's verification read. At this head, Experiment diff (local, against b64742f)--- a/core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleReadback.cpp
+++ b/core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleReadback.cpp
@@ -92,7 +92,7 @@
- const VkDescriptorImageInfo image{VK_NULL_HANDLE, arrayView, VK_IMAGE_LAYOUT_GENERAL};
+ const VkDescriptorImageInfo image{VK_NULL_HANDLE, arrayView, format == VK_FORMAT_D32_SFLOAT ? VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL : VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL};
--- a/core/libs/prx/libSceAgcDriver/tests/execution/MultisampleReadback.cpp
+++ b/core/libs/prx/libSceAgcDriver/tests/execution/MultisampleReadback.cpp
@@ -293,10 +293,26 @@ std::vector<std::byte> CheckReadback(...)
RecordMemoryBarrier(...);
+ const bool experimentDepth = surface.format == VK_FORMAT_D32_SFLOAT;
+ const auto experimentLayout = [&](VkImageLayout from, VkImageLayout to) {
+ VkImageMemoryBarrier barrier{VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER};
+ barrier.srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT;
+ barrier.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT;
+ barrier.oldLayout = from;
+ barrier.newLayout = to;
+ barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
+ barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
+ barrier.image = surface.image;
+ barrier.subresourceRange = {static_cast<VkImageAspectFlags>(experimentDepth ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT), 0u, 1u, 0u, VK_REMAINING_ARRAY_LAYERS};
+ surface.context.Function<PFN_vkCmdPipelineBarrier>("vkCmdPipelineBarrier")(batch.Handle(), VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0u, 0u, nullptr, 0u, nullptr, 1u, &barrier);
+ };
+ const auto readLayout = experimentDepth ? VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL : VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
+ experimentLayout(VK_IMAGE_LAYOUT_GENERAL, readLayout);
for (std::uint32_t repeat = 0u; repeat < repetitions; ++repeat) {
reader.DispatchMultisampleReadback(...);
...
}
+ experimentLayout(readLayout, VK_IMAGE_LAYOUT_GENERAL);
RecordMemoryBarrier(..., VK_PIPELINE_STAGE_HOST_BIT, ...);AI-assisted: yes (Claude Code) |
|
@Amoenus a heads-up for the native colour publish stack (#6973 → #6987 → #6989 → #6995 → #7002).
Since every PR above #6973 inherits those hunks, the order is: rework #6973 on current |
419ad89 to
549983f
Compare
|
Refreshed after merged #8847: #6973 is now Explicit fixture change: the final unrelated-format/live-owner case now requires the existing native-owner refusal and preservation of its image/view/owner and zero samples. The actual sRGB twin-sharing/fill cases remain required. This is not a claim that the old fixture passed unchanged or that general live image-alias coherence is implemented. Finding and controls in #6480. #6971 remains pending at The four child production patches retain identical changed-line sequences. All conventions checks pass; four resolved-source analyzer advisories retain matching main/prior contexts. No new title replay, FPS or current Intel/Linux/macOS result. Older qualification remains at its original pins and archived fork sources. AI-assisted maintenance: yes. |
549983f to
77dd406
Compare
|
@Amoenus a merge-order note for this stack (#6973 → #6987 → #6989 → #6995 → #7002) and #9533, which has #9717 and #9742 stacked on it. They meet in
#9533 goes after #6973 and rebases over it, as well as after #7371 as agreed. |
|
@EagleBearerYS Agreed: #9533 should follow #6973 as well as #7371. I checked the constructor and The four child PRs inherit that constructor change; they do not need separate implementations of the composition. This is source review of the proposed ordering, not a combined runtime result. Thanks for keeping the attribution and dependencies explicit. Refresh is now published at |
|
@Amoenus a heads-up for this stack: #8847 merged a few minutes ago (8b3e398) and also changes
The four PRs above #6973 only conflict through #6973's lines, so rebasing #6973 and replaying the others should be enough. Once the stack is up again, I'll run the full CI on the new heads and then the stack gate. |
Consolidate the previously published initializer and its fault/regression coverage onto the refreshed layout/uploader foundations and the credited boykopovar#6971 dependency composition. Preserve the full snapshot and supported uniform/nonuniform paths, restrict borrowed sampled-view usage and keep current main ownership/device/CMASK handling. Original initializer and test work is preserved at published8068 and its archived history; boykopovar#6971 f65cecd remains an original ancestor. Written with AI assistance.
77dd406 to
9290696
Compare
|
@Amoenus your #7948 (expanded FMASK for native owners) merged today, and the whole stack (#6973 → #6987 → #6989 → #6995 → #7002) now conflicts with What conflicts textually
Why it isn't a mechanical union
Order: rebase #6973 onto |
|
@Amoenus one more thing for the rebase you're doing: we'd like to merge #8223 first, so the stack can pick up its owner retirement in the same pass. #8223 retires a resident multisampled colour owner when its guest memory was claimed by something else (a single-sample draw or a depth surface over it) or written since the owner's last Could you apply the same check before publishing: if the owner's |
|
@oneandonlydean Provisional owner-retirement adaptation is prepared on the fork, building on @savvaniss's #8223 ( Composed candidate e23d5c5d9a combines frozen main
Windows11 Enterprise26200, WinLibs GCC15.2r7/UCRT Release; NVIDIA GeForce RTX5080/610.62 and AMD Radeon(TM) Graphics/32.0.21036.18. Verbose serial CTest,30s limit, These are composed-fork comparisons, not unchanged-main, title-playability or console-equivalence claims. After #8223 merges, I will carry the needed changes into the appropriate existing stack PRs parent-first, rerun affected checks and report the exact head for the requested final gate. No changes to #8223's branch. Title follow-up: the 13763c6097 integration, on main24c6cc33f0 with #8223 and this adaptation, now reaches controlled Sonic daytime gameplay: movement,12 rings and tutorial interaction. Both SRT verifiers/draw profiling are unset. The900s capped run has no driver/guest-wait failure,14 disclosed validation warnings and0 VUIDs/errors. Full scope and source/runtime evidence. This is composed-title validation, not proof of this fix's isolated effect; the published stack still awaits #8223. AI-assisted implementation/validation/reporting: yes (Codex); author responsible. Earlier published-stack FMASK refresh and source-pinned validation@oneandonlydean The parent-first FMASK refresh is pushed for all five heads, through #7002 Agreed on #8223 first. I added it to this root’s dependency line and recorded your claimed/write-since-stamp review item throughout the stack. That behavior is not covered by the refresh above, so I am not presenting #7002 as ready for the final gate yet. Once #8223 lands, I’ll carry its owner-retirement check into the synchronization/publication path and add separate claimed-owner and written-owner regressions, preserving the still-live-owner controls. Then I’ll refresh parent-first and report the exact gated head. No changes to your #8223 branch. AI-assisted implementation/validation/reporting:yes (Codex); author responsible. |
What
Preserve guest-written color samples when a native multisample target is first created. Main clears a target without DCC to zero, so a partial first draw loses samples it does not cover. The regression checks untouched samples through the existing guest MIMG load path.
Pending prerequisite: #6971, exact head
f65cecddabd9bf40a49960b48873ca938754c1d6, adapted at996316cdfbf3bd5b787a9bd7f4740142c9edb17coriginally prepared on main8b3e39832a, with MarcZX100's authorship preserved. Former prerequisites are merged. This qualifies the adapted dependency composition; standalone #6971 is unchanged.The #8847 composition retains twin views, per-format resolve passes and cleanup. Initialization chooses storage flags before the twin capability query, which uses those flags plus MUTABLE_FORMAT, matching the intended allocation. Vulkan defines the query usage/flags as corresponding to image creation (API contract); EXTENDED_USAGE permits compatible views to supply usage support (image creation). No new console format semantics.
Related: #6480 and PPSA99902 bring-up discussion #4443. Preserve upstream's proven undrawn/HTILE clears independently of color bytes; unresolved metadata import still throws. General metadata import and completion-safe guest publication are unfinished; no native readback getter or fresh title improvement is included.
Adapted prerequisite refreshed with current main at
02e02f29185ba5bf06fda4546766cc21cc345012, retaining MarcZX100's original commit/authorship. #7948 is now merged; its native-owner FMASK behavior and regressions remain intact.Tested
FMASK merge refresh, 2026-10-22: head
d09283a1299a668b96cfac164d3bc9af0f75ff0a, main3bbd2321de9a4d7e83b21ad6d5964c0404421c49. Refreshed adapted #6971 first, then the owned stack parent-first after #7948 merged. Every previous published head remains an ancestor; those heads are also archived in our fork. Pending #6971 and #7002's #6498 dependency remain explicit.d09283a1298e4373d3aaa69f11aabe795585e15c5cfa3b21e2Across the five exact heads: 45 passing processes (1 CPU +44 verified physical GPU). Literal main
3bbd2321depasses CPU graphics plus FMASK, native vertex-input and original sRGB-twin groups on both GPUs (7 processes). Candidate-only publication/initialization modes absent from main are not counted as main passes. All four child topic deltas retain exactly the same added/removed code lines; root fixture helpers already absorbed by main are shared. Conflicts retain both independent fixture sections and both required includes. No guard or capability change.Actual groups here:
agc_driver_graphicsx1,agc_driver_native_color_initialx6,agc_driver_native_fmaskx2,agc_driver_multisample_srgb_twinx2.Windows11 Enterprise26200, WinLibs GCC15.2r7/UCRT Release, SPIRV-Tools enabled. NVIDIA RTX5080 (610.62 /32.0.16.1062), AMD Radeon Graphics (32.0.21036.18). Real selected devices and Khronos1.4.363 layer verified per GPU fixture. Required Vulkan, no application shader cache/journal, verbose serial CTest,30s bounds; driver caches uncontrolled. Zero VUIDs, validation errors/warnings, whole-test skips/timeouts. Affected libraries and actual fixture executables rebuild at each head. Prior full-runtime builds, controls and title runs retain their original pins; this mechanical refresh claims no fresh full suite, gameplay or FPS result.
Cppcheck then clang-tidy of the resolved MultisampleTarget and SampleMultisampleTarget units at final tip completes in39.29 analyzer seconds. Four advisories (batch-pointer, allocation, two header pointer-size reports), all in seven-line contexts already on this main; no parser/configuration failure, timeout or automatic fix. No static-clean claim. An initial orchestration invocation built successfully but selected three nonexistent test names; it stopped before tests. Only corrected, registered real-fixture runs are counted above. Conventions and whitespace pass.
Previous main8499 qualification is preserved at its exact source pins in the prior description/edit history and archived branch; it is not relabeled as current-head evidence. Earlier independent controls/peer evidence remain below.
Remaining review gate: maintainer comment6350560582 requests #8223 first, then applying its claimed/write-since-use retirement check before synchronization/publication, with one regression for each cause. That behavior is not in this refresh or its counts; this stack is not ready for its final gate until addressed.
Prior qualification at older pins and peer reports
Prior qualification, 2026-10-22: main
8b3e39832af85f404c6195418d11b3e1ebd1924d, this head9290696549855f4a54346e4c2ca5105b085ba60a. Parent-first stack #6973 -> #6987 -> #6989 -> #6995 -> #7002 retains pending #6971 at its root.8b3e39832a9290696549fb76b9823c139ca64a4a470e4e0c8147613d5d23Windows11 Enterprise26200, WinLibs GCC15.2r7/UCRT Release, SPIRV-Tools enabled. NVIDIA GeForce RTX5080
10de:2c02, 610.62 /32.0.16.1062; AMD Radeon(TM) Graphics1002:13c0, 32.0.21036.18. Actual devices and real execution sources verified. Required Vulkan,ANYPS5_NO_SHADER_CACHE=1,APS5_NO_PIPELINE_JOURNAL=1, loaded Khronos1.4.363, verbose serial CTest, 30s timeout. Driver caches uncontrolled.This head's groups (counts include both GPUs; CPU groups identified separately):
agc_driver_graphicsx1;agc_write_trackingx1;guest_memoryx1;agc_driver_multisample_readbackx2;agc_driver_sample_multisample_targetx2;agc_driver_multisample_retirementx2;agc_driver_multisample_srgb_twinx2;agc_driver_native_color_initialx6;agc_driver_msaa_dcc_recreate_layoutx6.The shared current-main/control matrix in #6973 covers all five heads: 96 passes (6 CPU +90 GPU), plus six expected fixture-only control failures. Main runs readback, ordinary sampling, retirement and its original twin fixture on both GPUs, plus CPU graphics/write-tracking/guest-memory. New initial-content and DCC-recreation groups run 3/3 per GPU on #6973.
Changed final-case expectation after #8847: literal main's twin fixture passes on both GPUs, including its creation of a separate unrelated-format image. Prepared initializer
a877ad4cf4instead reaches the existing CPU-read/native-owner refusal in that final case: guest bytes do not contain the newest host samples. The refresh retains that refusal, documents it in debt, and changes only that final case to require the specific overlap refusal, unchanged image/view/owner and unchanged zero samples. Twin-sharing and fill checks remain. The identical revised fixture on main alone fails the missing-refusal assertion 3/3 per GPU. This is an explicit unsupported-path expectation, not an unchanged-fixture pass or general live-alias coherence. Maintained finding in #6480.Across102 qualified processes: zero VUIDs, validation errors/warnings, whole-test skips or timeouts; maximum 6.094s. Capability-specific subcases/refusals retain their fixture scope; this is not a claim that every format/sample count is available.
All runtime libraries and relinker build at the identical final tip #7002 (
47613d5d23) in the warm N build, WinLibs Release with SPIRV-Tools enabled. Every listed head separately builds its AGC driver and selected real execution targets in E with SPIRV-Tools enabled. The duplicate full-runtime E build was intentionally stopped to reuse the warm runtime build; no success is claimed for that interrupted attempt. No full-default all-test-executables build, full-suite result, fresh Linux/Intel/macOS/title replay, console-equivalence or FPS claim. Earlier grid/depth-reference failures remain historical; this focused rebase does not retest them.Cppcheck2.20 then clang-tidy23.1.3 on resolved
MultisampleTarget.cppand revisedMultisampleSrgbTwin.cppat final tip: 4 advisories in 28.069s analyzer time. All four diagnostic contexts match main or the prior published tip. The allocation advisory follows an existing throwing Require; the batch-pointer and sizeof-pointer advisories retain prior triage. No new defect was established in the resolved source or revised assertion. No parser/configuration errors, timeouts, automatic fixes or static-clean claim. Unchanged child production patches retain their prior analysis at its stated pins.Conventions/title/template and whitespace pass. Source merges cleanly with newer main
b7d1d47a5f9f32c9c388ad8d47a0055a90ae6e33; its merged #7371 and barycentric-strip work do not change these topic deltas. That newer composition is source-checked, not runtime-tested here. Reproduce the named groups withctest --test-dir <build> -V -j1 --timeout 30 -R <exact-group-regex>and the settings above. Maintainer-triggered CI is separate.External Intel validation boundary
@savvaniss tested older head b64742f863x on Intel UHD770 (8086:a780,32.0.101.7088) and AMD RX9070XT (32.0.31041.1004), Windows11 Pro26300. Intel passes27/28 multisample groups; the upload/readback case fails on R8_UINT (format13), byte1 expected0x1f/actual0. AMD passes all28. They relate the remaining Intel boundary to existing #6957: sampling a GENERAL-layout image immediately after storage writes; their read-only-layout/barrier experiment passes both GPUs. This is their evidence on that pin, not a new local Intel/current-head result. No driver-specific fallback is included; a descriptor-layout change also needs the production #6987 caller transition. Current local hardware remains NVIDIA/AMD.
Earlier refresh repetitions are consolidated here. Older qualification remains at its stated pins in the review/edit history; the previous published source is preserved. It is not counted as current-head validation.
Checklist
main; no other open PR implements the same functionsNotImplemented_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)