Skip to content

fix(agc): allow chunked imports as vertex and index buffers - #6913

Open
JJenkx wants to merge 1 commit into
boykopovar:mainfrom
JJenkx:fix/chunk-import-vertex-index-usage
Open

JJenkx wants to merge 1 commit into
boykopovar:mainfrom
JJenkx:fix/chunk-import-vertex-index-usage

Conversation

@JJenkx

@JJenkx JJenkx commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

What

Linux shared ranges fitting inside one 64 MiB udmabuf chunk can be bound directly as vertex or index input, but ChunkImportUsage omits both required usage flags. Override 2 (PPSA01907 v01.007.000) reports VUID-vkCmdBindVertexBuffers-pBuffers-00627 and VUID-vkCmdBindIndexBuffer-buffer-08784 with Vulkan validation.

Add VK_BUFFER_USAGE_VERTEX_BUFFER_BIT and VK_BUFFER_USAGE_INDEX_BUFFER_BIT to the existing usage mask, matching the ordinary host-pointer and sparse import paths. These are required by vertex-buffer binding and index-buffer binding. No allocation policy or draw ordering changes.

The regression imports an 8 MiB shared range, checks it takes the non-sparse dma-buf path, and checks the actual buffer creation flags admit both input roles.

Tested

Latest refresh (2026-10-23): one linear topic commit d89f7050b7de6e7ec337f8edfcc8e41feb644b7b on main 938812df1403f9616dba71744216725891ca4979. Retains current upstream sparse and unaligned-import behavior. The branch also merges cleanly against main 15e71dbe1116517913c5fbf309aa86d102285da3 at publication. Full Release libraries and the three focused test executables build on GCC 16.2.1/Linux.

On the same RX 6650 XT/RADV setup, agc_host_import_sparse, agc_driver_graphics, and agc_driver_sparse_dma_buf_import pass on both pinned main and the change: three tests per arm, no skips, validation layer loaded, zero VUIDs. The first two fixtures use mocked Vulkan; the sparse-import test exercises the real device. With the exact unchanged candidate fixture executable and the baseline library (loader path verified), both missing vertex/index usage assertions fail. Restoring the candidate library passes; the fixture SHA-256 is unchanged. No fresh title, Windows, lavapipe, full-suite, visual or performance result is claimed for this refresh. Pinned receipts and logs.

Historical validation below retains its original source revisions.

Head b3a58676bf108f830731f571975b810ef44b9dbe, one linear topic commit on main 93e54cedd3dd49eabf1c589f020b54758e0b6461. Linux 7.2.9-arch1-1, GCC 16.2.1 Release, Ryzen 9 7950X, RX 6650 XT / RADV Mesa 26.2.4-arch1.1; lavapipe Mesa 26.2.4 / LLVM 23.1.1.

  • Full libs and the three selected test executables build. agc_host_import_sparse, agc_driver_graphics, and agc_driver_sparse_dma_buf_import: 3/3 pass on RADV and 3/3 on lavapipe, no skips (4.42 s / 4.12 s). The first is a mocked Vulkan device with real Linux udmabuf backing, not a hardware shader test.
  • Negative control on main d9b696ddb with only the test added fails both missing-usage assertions. After adding the production fix, the exact same fixture executable passes; SHA-256 06618cfd9aed0f0e73f3efbcf1d8522bcdd8f7d07228309624969061985243b5.
  • Native Override 2, installed RADV, pipelined draws enabled, Khronos validation 1.4.363 verified in both process mappings: baseline reports both VUIDs; adding only this fix reports neither. Both reach the menu and close normally (exit 0), restoring temporary settings. Native validation uses main d9b696ddb; the rebase onto 93e54cedd adds only upstream test guards and keeps the production file byte-identical. Baseline also has inactive capture diagnostics and tools-only replay changes, none modifying host imports.
  • Separate CMASK host-stage and sampled-sRGB-view VUIDs remain, covered by fix(agc): include the host stage in the CMASK clear's host-access barriers #6781 and fix(agc): restrict sampled storage texture view usage #862 respectively; neither is a dependency of this fix. Dark 3D output remains unresolved. No visual fix, FPS gain, Windows validation or newly playable title is claimed.
  • Conventions and whitespace pass. Full hosted builds still need collaborator dispatch.

Sanitized validation and screenshot: chunk-import-usage-validation-public.json, chunk-import-usage-menu.png, chunk-usage-main93-radv-tests.log, chunk-usage-main93-lavapipe-tests.log. No raw guest code, assets or full title logs published.

Separate combined diagnostic: testing/override2-api-fixes-main93 adds lvmino97’s #862 and XairRrR’s #6781 to this PR; its Override 2 startup/menu run closes normally with zero validation errors, while dark rendering persists. Further Recorder validation, recorder-complete-main93-validation-public.json, covers AnzouBeli’s #5883, Dextroid17’s #6155 and MarcZX100’s #6642 plus a separate CoverPass fixture correction: the full Recorder flow passes with zero validation errors in dynamic and legacy modes on both RADV and lavapipe. These are separate integration/test changes, not dependencies or a visual-fix claim for this standalone import PR.

Additional title coverage: Infliction: Extended Cut (PPSA02688) reports both missing vertex/index usage VUIDs on the local main 84b0d2f248 diagnostic stack. A combined integration on main f51724078f adds this PR plus #6782, #6781 and #862; both buffer VUIDs and the independent-blend, sampled-sRGB-view and host-stage VUIDs are absent through gameplay and normal shutdown. One pre-existing shutdown leak report remains. This is combined integration evidence, not an isolated A/B for this PR; dark lighting remains unresolved. Sanitized protocol and results.

Crimson Spires integration validation (2026-10-19 UTC)

A combined integration on main 3b20a366caa8a8de5509e7add433c55275aa6f29, head cdcb1b9b55630aaf7db1164656660afb9500a2d5, includes #7681, #7627, #7630, #6959/#6934, #6913, #862 and #6782. Full libs builds and 13 focused checks pass on RX 6650 XT / RADV Mesa 26.2.4-arch1.1, Arch Linux, with required Vulkan and core validation, zero skips (7.44 s total).

The warm-cache PPSA03568 native run completed after 307.859 s with exit 0. It recorded zero Vulkan validation errors; two warning types remain (image subresource layer-count compatibility and shader output not consumed, ten occurrences each). The 295 s capture shows the car gameplay scene with visible road and dashboard; the user independently confirmed both menu and gameplay rendering looked good. This is combined-integration evidence, not an isolated result for this PR, a PS5 image-match claim or a performance comparison.

Sanitized pinned report · Gameplay capture

Checklist

  • Based on current main; no other open PR found adding these flags to ChunkImportUsage
  • One topic per PR; follow-ups separate
  • 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
  • Fixes: none
  • Depends on: none
  • Unblocks: none (corrects Vulkan validation errors observed in PPSA01907; no bring-up stop or visible defect claimed fixed)
  • GPUs tested: AMD Radeon RX 6650 XT / RADV Mesa 26.2.4-arch1.1 and lavapipe Mesa 26.2.4 / LLVM 23.1.1, Linux 7.2.9-arch1-1
  • AI-assisted: yes

@github-actions github-actions Bot added the agc libSceAgc* label Oct 16, 2026
@github-actions

github-actions Bot commented Oct 16, 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 2434 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 5021 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6186 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6197 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6481 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6548 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6918 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 7457 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 7514 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 7642 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 9012 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 9852 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 9898 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 10025 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 10193 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 10442 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 12157 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 12944 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 13148 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 13863 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 13920 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 13928 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 13929 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 14943 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 14976 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 17, 2026
@JJenkx
JJenkx force-pushed the fix/chunk-import-vertex-index-usage branch from b3a5867 to b46f4ce Compare October 17, 2026 23:38
@github-actions github-actions Bot added needs rebase Conflicts with main, rebase needed and removed needs rebase Conflicts with main, rebase needed labels Oct 18, 2026
@JJenkx
JJenkx force-pushed the fix/chunk-import-vertex-index-usage branch from b46f4ce to 7ba8642 Compare October 18, 2026 05:34
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 18, 2026
@JJenkx

JJenkx commented Oct 18, 2026

Copy link
Copy Markdown
Contributor Author

Additional native evidence: Crimson Spires PPSA03568, opening-car dialogue, Linux / RX 6650 XT / RADV Mesa 26.2.4-arch1.1, default Khronos core validation enabled.

Baseline 355de8bdfcf25fb2af95ae9884c4163b10ac640d is main c4c2b3aa7371ee988c94ca62f1431ebaaf0688c8 plus the depth-bounds and scheduled-jump-table bring-up fixes (#7627 and #7630). It emits 10 validation headers each for VUID-vkCmdBindVertexBuffers-pBuffers-00627 and VUID-vkCmdBindIndexBuffer-buffer-08784: the chunk-import buffer lacks vertex/index usage. These counts are capped emitted messages, not a count of all invalid calls.

A local integration at bc8fdb728ff348c92fe5a65c0eefa80d03d097a7 adds this exact topic plus #6782 (independent blend), #6781 (CMASK host barrier stages), and #862 (sampled image-view usage). Both buffer VUIDs disappear; the other four baseline error categories also disappear. The two pre-existing warning categories remain. This is combined-integration evidence, not an isolated native A/B of #6913.

Both runs use a 1536x864 window, the same input schedule, APS5_HOST_IMPORT_MIB=16384, APS5_DRAW_CACHE_ENTRIES=4096, APS5_PIPELINED_DRAWS=1, and APS5_PLAYGO_UNLISTED_CHUNKS=installed, with retained caches. Both reach the same car dialogue and close normally at about 233 seconds; both PIDs are gone and the temporary udmabuf limit is restored to 64 MiB. The dark/malformed 3D scene persists. No visual fix or speedup is claimed.

Integration full libraries and affected fixtures build; agc_driver_graphics, agc_sampled_storage_base_level_usage, agc_host_import_sparse, and agc_driver_sparse_dma_buf_import pass 4/4 without skips (4.11 seconds). The separate CMASK draw/eliminate fixture also passes. Existing isolated buffer regression evidence above remains the evidence specific to this topic.

AI-assisted validation/reporting: yes.

@github-actions github-actions Bot added the unblocks title Names a title ID on the Unblocks line label Oct 18, 2026
@adriadam10 adriadam10 self-assigned this Oct 19, 2026
@github-actions github-actions Bot removed the unblocks title Names a title ID on the Unblocks line label Oct 20, 2026
@JJenkx
JJenkx force-pushed the fix/chunk-import-vertex-index-usage branch from 7ba8642 to d89f705 Compare October 23, 2026 16:04
@JJenkx

JJenkx commented Oct 23, 2026

Copy link
Copy Markdown
Contributor Author

Rebased the existing topic to d89f7050b7de6e7ec337f8edfcc8e41feb644b7b on main 938812df1403f9616dba71744216725891ca4979; latest main 15e71dbe1116517913c5fbf309aa86d102285da3 merges cleanly. Both pinned main and change pass the same three focused checks with Vulkan required, shader cache disabled and Khronos validation loaded, with zero VUIDs. The unchanged candidate fixture fails both usage assertions when loading the verified baseline library, then passes again with the fixed library. Full Release libraries build; conventions and whitespace pass.

Exact revisions, control receipts and logs. This refresh makes no new native-title, visual, Windows or performance claim.

@JJenkx

JJenkx commented Oct 23, 2026

Copy link
Copy Markdown
Contributor Author

Additional affected-title reproduction: Record of Lodoss War (PPSA05347), opening sword tutorial, on pinned main 11e8ad2934 production. Both control f4a99f4fdc (test-only fixtures added) and guest-memory PR #7938 head d1e04a2349 omit #6913. Each logs 20 VUID-vkCmdBindVertexBuffers-pBuffers-00627 and 20 VUID-vkCmdBindIndexBuffer-buffer-08784 occurrences, with two actual Khronos layer insertions per arm. Both close normally and restore private configuration/saves; the captured tutorial scene renders on both.

This is another affected title on that pinned main. It establishes the existing vertex/index usage warnings; it does not apply #6913 to this title or attribute a frame-rate change. The two allocator arms have identical VUID types/counts.

Retained native logs, exact build mappings and scoped review. Earlier before/after coverage of this PR remains separate.

AI-assisted: yes.

@JJenkx

JJenkx commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor Author

Current-main Linux follow-up for exact PR headd89f7050b7de6e7ec337f8edfcc8e41feb644b7b; no public branch/rebase changes made.

New fixture against unchanged main: built this PR's HostImportSparseDmaBuf.cpp against clean mainc4669c9ca20711eccfe0bc8c83f33514e00a3b45 libraries, keeping main source untouched. It exits1 with exactly these two failing assertions:

FAIL: a chunked import cannot be bound as a vertex buffer
FAIL: a chunked import cannot be bound as an index buffer

The same test source SHA-2561a854f44d09a90155f77a68f6cf4a2a9ae21a15f07ce65f62431e5ec6d7a2b01 passes against the changed library (exit0). These mock import tests do not initialize Vulkan; their injected fallback warnings are not hardware failures.

Native reproduction: Hamster Playground PPSA06652 v01.009.000 on Linux/RX6650XT/RADV/Ryzen9 7950X. Both private integrations use mainc4669c9 plus unchanged #6782 to eliminate the separate independent-blend error:

Build Native validation
Before this PR: fa7521d35954 vkCmdBindVertexBuffers00627 and vkCmdBindIndexBuffer08784: the same chunk-import buffer has transfer/storage/indirect/device-address usage, but lacks vertex/index usage.
With exact PR product/test patch: 00273d99c34b No VUIDs; one actual Khronos instance-layer insertion, no missing-layer warning.

The product delta between those private heads is only ChunkImportUsage; the other change is this PR's assertions. Same private native runtime and unchanged title inputs. Ordinary _sd saves were reset, but _sd_mem save-memory containers persisted between these runs (the earlier “frozen empty save seed” wording overstated the reset scope); source/build were updated only after the earlier test finished. First95s of both runs are the same idle title scene. The changed run then issues one Cross at96.63s and directly reviewed images show the game's clear disclaimer screen, confirming input response. Planned normal close200s returns0; saves/configuration/kernel limit restored and no native process left. House creation, gameplay and audio are still untested in these runs. Different cache warmth and later input mean no FPS-gain or matched performance claim.

Focused changed-build checks: agc_host_import_sparse, agc_driver_graphics, agc_driver_graphics_maps_fallback, agc_driver_prepared_exports all pass, no skips or VUIDs. The graphics-state/import fixtures are CPU-only; prepared-exports loads Khronos validation on the actual GPU. Required GPU settings were ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation with ctest -V.

Control/change logs, build identities, exact patch, fixture-build commands and scoped native reviews — SHA-256ddf129906545230c890a55154feae1c340c11e15b17f0120198ff5b0603525ef, public download verified. No proprietary title code/assets or captured shaders are included.

AI-assisted: yes.

Save-isolation clarification: the restored-save checks in the archived reviews cover the original ordinary-save scope. They do not establish _sd_mem restoration. The native before/after observations are not a controlled save-state pair; the independent main-library negative control still isolates the missing vertex/index flags. Subsequent runs will reset and hash-verify both save paths.

@JulesB40

Copy link
Copy Markdown
Contributor

Note

🤖 Claude Opus 5.5 responding on behalf of JulesB40

On Windows + NVIDIA (Ada), head d89f7050b7 merged onto main d4cb89300f matches that main exactly across all 1,125 agc_ tests: same passes, same skips, same VUID- lines.

Setup: Windows 11 Home 10.0.26200, Intel Core i9-13900HX, NVIDIA GeForce RTX 4070 Laptop GPU (0x2860), driver 616.92, Vulkan SDK 1.4.335 (VK_LAYER_KHRONOS_validation), WinLibs GCC 15.2.0 r7, Release, BUILD_TESTING=ON. Both sides were built in the same tree; the merge (d7dfb00d2, local only) applied cleanly.

Command, the same on both sides:

ANYPS5_GPU=4070 ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^agc_' -j 6
Passed Failed Skipped VUID- lines Missing-layer lines
main d4cb89300f 1117 0 8 18 0
this PR merged 1117 0 8 18 0
  • Every GPU test that opened a device selected NVIDIA GeForce RTX 4070 Laptop GPU.
  • Per test, the VUID- messages are identical on both sides. All 18 are VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605, in agc_driver_prepared_exports and agc_driver_srgb8_color_target, already present on main (AGC: pipelines use differing per-attachment blend states while independentBlend is never enabled (VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605) #11990). Seeing them also confirms the layer was active.
  • The 8 skips are the same on both sides: Linux-only imports and comparison modes, optimize_on_fiber, no VK_EXT_shader_stencil_export, and sample_order_grid_reference.
  • agc_host_import_sparse and agc_driver_sparse_dma_buf_import skip on Windows (udmabuf imports are Linux only) on both sides, so this run shows only that nothing else regresses on Windows + NVIDIA. It does not exercise the new path.

No title was run.

@Dextroid17

Copy link
Copy Markdown
Contributor

Linux run of head d89f7050b7 on main 3a2b919816 (merge 275f40cd35), repeating the PR's negative control on a second Linux host. Nothing new beyond that and a note for built-in-udmabuf kernels.

Setup: CachyOS, kernel 7.3.0-4-cachyos, CONFIG_UDMABUF=y, udmabuf size_limit_mb lowered to 64 so agc_host_import_sparse runs instead of skipping. The test is the mock Vulkan device over real /dev/udmabuf; the lavapipe ICD env was set but this test does not load an ICD. Clean env (env -i), 3 runs per arm, test executable sha b5964804e762 in all three arms; only libSceAgcDriver.prx differs.

B  PR merged on main                               3/3 pass
C  B with GuestBufferMemory.cpp reverted to main   3/3 FAIL
R  B restored, rebuilt                             3/3 pass

C fails exactly on the two new checks:

847: FAIL: a chunked import cannot be bound as a vertex buffer
847: FAIL: a chunked import cannot be bound as an index buffer
847: 2 sparse dma-buf import checks failed

The B→C diff is the one line in ChunkImportUsage (dropping VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT), so the test catches the missing usage bits and the fix clears them.

Note for others running this: on this host udmabuf is built in (modinfo udmabuf reports it not found), so a modprobe option cannot set the limit, and size_limit_mb read 2147483647 (> 1024), which makes the test skip. echo 64 | sudo tee /sys/module/udmabuf/parameters/size_limit_mb un-skips it until reboot.

AI-assisted: yes

@JJenkx

JJenkx commented Oct 29, 2026

Copy link
Copy Markdown
Contributor Author

Fresh Linux Ikai PPSA06584 qualification of this PR together with #6782, without rewriting either public branch or opening a duplicate implementation.

Pinned baseline main 52f212ec053f917455f2f87674ddb708dcc545d8; private composition aed115da87674a1870f4860aba606a6e4ca12082 contains #6782 4433a62b3bf6248df830994a255701c72581cc95 and this PR d89f7050b7de6e7ec337f8edfcc8e41feb644b7b. Both merges were clean; the complete three-file source delta is attached.

On the same Linux/RX6650XT/RADV machine, the same six focused CTest groups pass on each frozen build: 6/6 each, zero skips, zero VUIDs, with the validation layer actually inserted four times per arm. The sparse host-import fixture uses a mock device; the driver sparse-import, graphics and blend suites exercise the physical GPU. The new usage fixture against baseline libraries fails for both missing vertex and index flags.

Native runs used byte-identical converted game/module files, separate libraries/config/saves, the same two scripted Cross presses and normal close after560seconds. Both completed with native exit0, two actual validation-layer insertions each, unchanged original inputs and complete cleanup. Emitted validation messages:

VUID Main #6782 + #6913
vkCmdBindVertexBuffers-pBuffers-00627 20 0
vkCmdBindIndexBuffer-buffer-08784 20 0
VkPipelineColorBlendStateCreateInfo-pAttachments-00605 16 0

The actual loaded AGC hashes are recorded. VideoOut is the only other differing library; normalizing its telemetry commit immediates and GNU build-id makes its entire binary identical, without modifying tested files.

Graphics remain unresolved: directly reviewed final captures show the same brush/wood painting scene and large black rectangular/streaked regions. This establishes API-validation cleanup, not a visual, brightness, FPS, audio or full-playthrough improvement. The native result belongs to the two-PR composition, not a standalone performance attribution.

Source composition patch, synthetic GPU logs/JUnit, negative control, library hashes and numeric native comparison, SHA-256 0ef9f3708a5757e1a1cf1533ce379fa7b92e09d46b6e198509c66b47e7c88aa9 (download verified). The first incorrectly configured gate was rejected because raising udmabuf's limit caused two fixtures to skip; its failed receipt is retained. The unchanged frozen binaries then ran all six tests at the supported64MiB limit. No proprietary binaries, game logs, saves or screenshots are attached.

@JJenkx

JJenkx commented Nov 1, 2026

Copy link
Copy Markdown
Contributor Author

Additional Linux native coverage for this PR's d89f7050b7de6e7ec337f8edfcc8e41feb644b7b implementation: The Smurfs – Dreams (PPSA21607) reached the village and exited normally after 342.2 seconds with zero Vulkan validation errors.

This is a private layered smoke, not an isolated PR-only native A/B: main 8a4fc62318a4 + #6959 c6759ecb2f97 + #13934 b8e732def781 + #9508 f2449f6ec25d + #6782 4433a62b3bf6 + this PR, integration b136192b85db. RX 6650 XT/RADV, Khronos validation 1.4.363 explicitly inserted, descriptor heaps and heap verification enabled. Earlier baseline and heap runs on main 381891927c2b without #6782/this PR both reported VUID-vkCmdBindVertexBuffers-pBuffers-00627, VUID-vkCmdBindIndexBuffer-buffer-08784, and independent-blend 00605 (covered by #6782). All three are absent in the corrected run.

The refreshed integration's focused tests passed in both default and heap modes: 17 passes plus the same five documented host-import skips per mode; the required real DMA-buf CPU-lead case executed. All 26 heap-specific cases passed without skips. All modes had zero VUIDs. Native cleanup verified 789 SDK files and 14 original inputs unchanged, kernel setting restored, no remaining game process. Village capture reviewed; background-window X11 freshness verification was unavailable. No FPS or audio-quality claim.

Evidence archive — SHA-256 dc004ae5612b43a823359d7948e9d6b8ef9fec5483b2725b69bf8667ca61c8e0 (uploaded/downloaded and verified). It includes exact pins, test results/logs, validation extracts and the exclusion of an earlier stale patched-library attempt. A new build-ID preflight checks all 394 patched/unpatched library pairs before freezing or launching the runtime.

@fogydes

fogydes commented Nov 1, 2026

Copy link
Copy Markdown
Contributor

Verdict: OK

  1. [verified] Freshness & Clean Merge: Head commit d89f7050b7de6e7ec337f8edfcc8e41feb644b7b merges cleanly with origin/main (git merge-tree --write-tree origin/main pull/6913 exited 0 with clean tree 54fa6829a0ebfcfb4e7558d4f60209b1db9355ea), despite being 10,043 commits behind origin/main.
  2. [verified] Conventions & Commits: python tools/check_conventions.py --base 938812df1403f9616dba71744216725891ca4979 passed with 0 findings in an isolated worktree. The single commit adheres to Conventional Commits formatting, and the PR title matches the commit subject.
  3. [read-only] Checklist Template Compliance: Full compliance with .github/pull_request_template.md. Every checklist item is retained and ticked, with negative control rationale and GPU details documented.
  4. [author-reported] Validation & Execution: Author reported 3/3 tests passing on both RADV (RX 6650 XT) and lavapipe with Khronos validation active, zero VUID errors, and elimination of VUID-vkCmdBindVertexBuffers-pBuffers-00627 / VUID-vkCmdBindIndexBuffer-buffer-08784 in title runs.

Freshness Envelope

  • Head SHA: d89f7050b7de6e7ec337f8edfcc8e41feb644b7b
  • Merge-base: 938812df1403f9616dba71744216725891ca4979
  • Behind count: 10,043 commits behind origin/main
  • Merge-tree result: exit 0 (clean tree 54fa6829a0ebfcfb4e7558d4f60209b1db9355ea)

Cross-PR Ledger

@JJenkx

JJenkx commented Nov 2, 2026

Copy link
Copy Markdown
Contributor Author

Fresh Linux qualification on current main 926f7dd492b0, plus a Wobbly Life (PPSA29413) native comparison. Public head d89f7050b7 is unchanged; the private refresh 62aabfe373c8 and native addition have the same stable patch ID as that head.

Standalone gates: Release libraries and the three focused executables build. On the same RX 6650 XT / RADV machine, agc_host_import_sparse, agc_driver_graphics, and agc_driver_sparse_dma_buf_import pass on both unmodified main926 and main926 plus this PR: 3/3 per arm, zero skips, zero VUIDs. The first two use mocked Vulkan; the sparse-import driver fixture exercises the physical device with Khronos validation actually inserted. The new fixture against baseline libraries fails exactly the missing vertex/index flag assertions; byte-identical test executables pass with the change. All frozen inputs remain unchanged.

Native comparison: Wobbly needs the separately refreshed #6300 depth path to reach the outdoor tutorial, so this pair compares that chain (56cbc104e3b6 on main 93dbd0f82aea) against the same chain plus only this PR (1bb26234eadf). It is not a pure-main title A/B. Same original inputs, cache seed, scripted Cross schedule, fresh private runtime and normal-close deadline; Khronos validation inserted at both instance and device levels in both arms.

Emitted validation error reports #6300 chain Same chain + #6913
VUID-vkCmdBindVertexBuffers-pBuffers-00627 10 0
VUID-vkCmdBindIndexBuffer-buffer-08784 10 0

The old logs contain 20 textual occurrences per ID because the specification links repeat it; the table counts emitted error reports. The new run contains zero VUID occurrences of any class. Both native runs close normally with exit0 after242.4seconds; all original inputs, frozen SDK files and generated modules remain unchanged, temporary udmabuf setting restored to64MiB, no remaining private native processes.

Directly reviewed window capture and post-fence GPU frame show the outdoor tutorial, “Right, let’s get you started.” This establishes validation cleanup while preserving the reached scene. Performance remains low; no FPS, audio, movement/map interaction or full-playthrough improvement is claimed.

Source deltas, identical-fixture proof, synthetic test logs/JUnit, native numeric receipts and tutorial screenshots, SHA-256 4a9088dcd13d8f7557f3bfa7bd50b24487ee24a09bfbc550aa1ea4881f5e28b4 (GitHub asset digest verified). No proprietary code, assets, saves or native game logs are included. No duplicate PR or remote-branch rewrite.

@github-actions github-actions Bot added review queue Next in the maintainer review queue: checks pass, no open change request, no conflict and removed review queue Next in the maintainer review queue: checks pass, no open change request, no conflict labels Nov 4, 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*

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants