Skip to content

feat(ngs2): implement the custom Reverb module - #10599

Merged
oneandonlydean merged 8 commits into
boykopovar:mainfrom
kyon-eth:fix/ngs2-custom-reverb
Nov 2, 2026
Merged

oneandonlydean merged 8 commits into
boykopovar:mainfrom
kyon-eth:fix/ngs2-custom-reverb

Conversation

@kyon-eth

@kyon-eth kyon-eth commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

What

Custom racks containing Reverb (0x1b) currently throw before processing audio. Implement the module for the existing supported one-buffer custom sampler and submixer paths, with independent state per voice and module, both creation sizes, indexed I3DL2 controls, channel exclusion and normalized input folding.

Reuse the existing reverb DSP with the custom module's ring sizes, signed wet/dry gains and four-sample room filter. Preserve bypass until parameters are supplied and after setup; clear history on a fresh PLAY while retaining parameters. Sampler completion still ends its voice. Reuse working buffers across grains.

Multiple-buffer routing, custom mastering modules, unsupported rates and NaN controls remain explicit refusals, documented in the library debt file. No complete title unblock is claimed.

Integration status

#10347 has merged. This branch incorporates main fe2b52c7e4 and resolves the shared DSP conflict by retaining input-channel folding and mapped dry output alongside the custom profile, four-sample filter and reusable scratch buffers. It has no outstanding functional dependency on #10347.

#5548 and #9926 remain open. Their test-registration conflicts are covered by a separate local integration preview that retains every test and passes 17/17 NGS2 checks on ARM64 and seven focused checks on x86-64. Those branches are not included in this PR. Their authors were asked to confirm that maintainers may choose their order, with the later branch preserving both registrations; confirmation is pending in the coordination thread.

Manual review of #1384/#6044: the former contains the older experimental built-in DSP and must preserve main's reference-based DSP and this custom profile when rebased. The latter changes test categorization; the new regression must receive the media category if it lands first. Their authors have been notified.

This PR is ready for review. Maintainers may choose the landing order; the later branch must preserve both test registrations. Author confirmation on that ordering remains pending. The diff contains only custom-Reverb work.

Tested

Current-main validation (2026-10-27): integrated main 9ae2f7d22a in 61908b16ac. The rebuilt macOS x86-64 production-source fixture passes the requested Reverb/custom/render/core-render tests and related Gain/routing safety cases (11/11). Conventions, whitespace and privacy checks pass. No new Linux/Windows execution or complete-title unblock is claimed.

Updated onto main fe2b52c7e4; all four requested rendering/custom checks and seven related Gain/routing safety cases pass in the rebuilt macOS x86-64 production-source fixture (11/11). Earlier ARM64 results are historical.

Earlier validation based on main c9b2660d56: macOS ARM64 and x86-64 (Rosetta): rebuilt the production NGS2 sources using a focused external CMake fixture, the repository's module CMake definitions and pinned local LibAtrac9 dependency. Only unrelated host libc boundaries are adapted; this is not a full application build.

  • ngs2_customreverb, ngs2_custom, ngs2_render and ngs2_core_render: 4/4 pass on each architecture after rebasing, including the merged built-in channel-conversion coverage.
  • The new regression fails with main's original Custom.cpp at the unsupported-Reverb refusal.
  • Original 13.60 library voice-graph checks cover both sizes, bypass/setup, independent instances, stop/play and sampler completion/restart. They run with host synchronization/math/SDK adapters and an equivalent lowering of one SSE4a extraction for Rosetta. No console execution is claimed.
  • DSP comparisons against 3.20 and 13.60 cover 48 kHz impulses and parameter updates. Maximum observed ordinary stereo error is below 2e-8; strong HF attenuation is below 8e-8. This is numerical comparison, not bit-exact validation.
  • No author Linux, Windows or game run. Independent Linux/title results are linked below; they predate this update. No performance claim.
  • Conventions and whitespace checks pass. The required open-PR overlap scan completed; integration overlaps are described above.

Checklist

  • Based on current main; no other open PR implements the same functions
  • One topic per PR; follow-ups go in a new PR
  • 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
  • Depends on: none
  • Fixes: none
  • Unblocks: none
  • GPUs tested: n/a
  • AI-assisted: yes

Review follow-up: production Voice.cpp now uses the public API header, with no test helpers in the shipped library. Integrated main fe2b52c while retaining its Gain/routing safety changes and every test registration. The four requested rendering/custom tests and the seven related Gain/routing safety cases pass in the rebuilt macOS x86-64 production-source fixture (11/11). No new Windows or Linux execution is claimed; the full fixture also has an unrelated filesystem-adapter failure in ngs2_parse.

Independent title evidence: Project Zero: Maiden of Black Water, PPSA04333 passes the previous custom-Reverb refusal on the prior head, then reaches an unsupported custom-mastering module chain. This removes one reported blocker; it does not establish playable gameplay. BLUE REFLECTION Quartet PPSA33655 discussion 10271 reports the same Reverb refusal, but has not been tested with this implementation.

Subsequent independent validation

Native Windows full-build report covers exact published head 61908b16ac: 31/31 NGS2 tests pass on Windows 11. This is the reviewer's execution evidence, not an author Windows run.

BLUE REFLECTION Quartet follow-up confirms that the custom-Reverb refusal is removed at this head. The next blocker is an existing two-buffer UserFx submixer configuration. It is outside this one-buffer Reverb change, and no complete-title unblock is claimed. The independent Trails in the Sky 2nd result likewise requires the separate PitchShift PR and subsequent reconciliation.

@github-actions

github-actions Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

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.

Pull request Conflicting files (lines on main) Same exports Same new files
PR 14119 docs/dev/debt/libSceNgs2.native.md L51-52

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 1384 core/libs/prx/libSceNgs2.native/CMakeLists.txt
core/libs/prx/libSceNgs2.native/include/Ngs2Types.hpp
core/libs/prx/libSceNgs2.native/src/Ngs2Internal.hpp
core/libs/prx/libSceNgs2.native/src/Reverb.cpp
core/libs/prx/libSceNgs2.native/src/Voice.cpp
PR 5548 core/libs/prx/libSceNgs2.native/CMakeLists.txt
core/libs/prx/libSceNgs2.native/src/Ngs2Internal.hpp
core/libs/prx/libSceNgs2.native/src/Voice.cpp
docs/dev/debt/libSceNgs2.native.md
PR 9149 docs/dev/debt/libSceNgs2.native.md
PR 10249 core/libs/prx/libSceNgs2.native/src/Custom.cpp
PR 11388 core/libs/prx/libSceNgs2.native/CMakeLists.txt
core/libs/prx/libSceNgs2.native/include/Ngs2Types.hpp
core/libs/prx/libSceNgs2.native/src/Ngs2Internal.hpp
core/libs/prx/libSceNgs2.native/src/Voice.cpp
docs/dev/debt/libSceNgs2.native.md
PR 12107 core/libs/prx/libSceNgs2.native/include/Ngs2Types.hpp
core/libs/prx/libSceNgs2.native/src/Custom.cpp
core/libs/prx/libSceNgs2.native/tests/Ngs2Custom.cpp
docs/dev/debt/libSceNgs2.native.md
PR 14212 docs/dev/debt/libSceNgs2.native.md

@kyon-eth

Copy link
Copy Markdown
Contributor Author

@hugodearaujo @JJenkx @JAB-dev — coordinating the overlap reported on this draft before marking it ready.

Proposed order:

@TaymKal @TibixDev — the checker cannot compare #6044/#1384 because they already conflict with main. Manual review finds test categorization in #6044 and the older built-in reverb DSP in #1384. When rebasing, the custom-Reverb regression needs the media category after #6044, and #1384 needs to preserve main's reference-based DSP plus the custom profile here. Please flag any additional semantic overlap.

I am preparing a local integration preview; this comment does not claim an agreed order or that the combined branches have passed yet. The draft will stay in place while coordination is pending.

@kyon-eth

Copy link
Copy Markdown
Contributor Author

Integration preview update for the landing-order proposal above:

The tested resolution is retained locally for the rebase after #10347 lands. Depends on: #10347 now records the proposed landing dependency. Author confirmation is still pending; this remains a draft.

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 24, 2026
@kyon-eth
kyon-eth force-pushed the fix/ngs2-custom-reverb branch from bf8242f to 022c609 Compare October 24, 2026 13:56
@kyon-eth

Copy link
Copy Markdown
Contributor Author

#10347 is now merged. Rebased this PR onto main c9b2660d56 and applied the previously tested shared-DSP resolution. Input-channel folding and mapped dry output are preserved; custom Reverb retains its exclusion mask, four-sample filter and reusable buffers.

On the rebased source, ngs2_render, ngs2_core_render, ngs2_custom and ngs2_customreverb pass on both macOS ARM64 and x86-64: 4/4 per architecture. This includes the merged channel-conversion regressions. Conventions and whitespace checks pass. These remain focused production-source builds through the documented host-boundary fixture, not full application or Linux/Windows runs.

Removed the fulfilled #10347 dependency. The fresh overlap scan reports only the external test-registration conflicts with #5548/#9926, plus the already reviewed stale #1384 comparison. Its self-match against the old head of #10599 is this PR before the force-push, not a separate implementation. The resolved combined test-list preview is retained locally; confirmation of the remaining landing order is still pending, so the PR remains draft.

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

Reviewed updated head 022c609f947fef3fa0bc4f205f7a2aec75980556. The #10347 integration prerequisite is now merged and the body records that its channel folding and mapped dry path remain alongside custom Reverb. git diff --check upstream/main...HEAD passes. I reviewed the rebase and the custom state lifecycle (module creation, parameter activation, PLAY reset, setup reset and sampler completion paths); I found no new standalone source issue in this update.

The 4/4 results per macOS architecture and the combined-preview results are author-reported; I did not independently run these focused production-source fixtures. The PR remains draft while agreement on the test-registration ordering with #5548 and #9926 is pending. Please retain all test registrations when the later branch is rebased. The stale #1384 comparison also needs a fresh check if that PR's source changes are brought into the integration tree.

@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 24, 2026
@kyon-eth
kyon-eth marked this pull request as ready for review October 24, 2026 20:55
@kyon-eth

Copy link
Copy Markdown
Contributor Author

Merged current main 2e22b67032 and rebuilt the production NGS2 modules on macOS x86-64. ngs2_customreverb, ngs2_custom, ngs2_render and ngs2_core_render all pass (4/4); the repository-wide public-header audit, conventions and whitespace checks pass.

The description now reflects the actual ready-for-review state and distinguishes this rerun from the earlier ARM64 results. The existing test-registration landing-order notes remain; no unpublished PitchShift/scheduler work is included. No Linux/Windows or game run claimed. AI-assisted: yes.

@oneandonlydean

Copy link
Copy Markdown
Collaborator

@kyon-eth Please remove the new production Voice.cpp include of tests/Ngs2Test.hpp and use the appropriate production public/internal declarations. That fixture brings test helpers, a Require macro and an inline buffers registry into the shipped library. Keep the built-in channel-folding/mapped-dry behavior and custom-Reverb regressions, then rerun ngs2_customreverb, ngs2_custom, ngs2_render and ngs2_core_render on Linux and Windows. The pending test-registration order with #5548/#9926 remains a separate coordination item.

Register both new Ngs2 tests: this PR's CustomReverb and main's VoiceEvents.
@BunnyFl

BunnyFl commented Oct 26, 2026

Copy link
Copy Markdown
Contributor

A title that stops on this module: BLUE REFLECTION Quartet (PPSA33655). Its bring-up thread #10271 gives the current blocker as "libSceNgs2: the custom Reverb module is not implemented", which is the text Custom.cpp throws on current main (4b1a9a3) when a custom rack with module id 0x1b is queried or created (sceNgs2RackQueryBufferSize, sceNgs2RackCreate, sceNgs2RackCreateWithAllocator) (NGS2: the custom Reverb module is not implemented).

This PR's checklist has Unblocks: none. If the custom Reverb module here covers what that title creates, it could name PPSA33655 #10271. I haven't run the title with this PR.

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 26, 2026
@edubox

edubox commented Oct 26, 2026

Copy link
Copy Markdown
Contributor

Tested this head (54ac175ee3) on Linux (CachyOS, GCC 16.2.1) with Project Zero: Maiden of Black Water (PPSA04333, 01.000.005). The title now passes NGS2: the custom Reverb module is not implemented and stops on NGS2: custom mastering racks with modules are not implemented instead. ngs2_customreverb and ngs2_custom pass at this head.

A local probe that only removed the custom-mastering refusal (no implementation) shows what the title creates there: one buffer, one input and four modules, all with buffer id 0 and no option: 0x14 (no state), 0x15 (Gain), 0x17 (no state) and 0x18 (state offset 16, size 156). So the Reverb is no longer the blocker for this title; custom mastering racks and those module ids are the next wall.

@kyon-eth

kyon-eth commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor Author

Fixed in f108656. Voice.cpp now includes the production public API header, with no test fixture/header in the shipped source. Integrated main fe2b52c, preserving its Gain/routing safeguards, built-in channel folding, mapped dry output, custom-Reverb state and all test registrations.

The requested ngs2_customreverb, ngs2_custom, ngs2_render and ngs2_core_render tests pass in the rebuilt macOS x86-64 production-source fixture, alongside the seven related Gain/routing safety cases (11/11). I cannot run Windows/Linux here. The broader fixture’s unrelated ngs2_parse filesystem-adapter failure is not credited as a pass.

Thanks for the independent Linux/title report: Project Zero PPSA04333 gets past Reverb and reaches custom mastering instead. The description records that narrower result and BLUE REFLECTION Quartet’s reported blocker, without claiming either title is playable. Maintainers may choose the independent test-registration landing order; later rebases must retain both sets of tests. Could Linux/Windows testers rerun the four requested tests on this updated head?

The final main advancement changes no tested implementation source bytes.

@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 27, 2026
@kyon-eth

Copy link
Copy Markdown
Contributor Author

Integrated current main 9ae2f7d in 61908b1. The requested Reverb/custom/render/core-render tests and related Gain/routing safety cases pass 11/11 in the rebuilt macOS x86-64 production-source fixture. Conventions, whitespace and privacy checks pass. The latest discussion has no new code-fix request; this update adds no unrelated VAG, PitchShift, Json2 or allocator work. No new Linux/Windows execution or complete-title unblock is claimed.

@JJenkx

JJenkx commented Oct 27, 2026

Copy link
Copy Markdown
Contributor

Title run of this PR's exact head 61908b16ac, built clean, on Linux 7.2.9 (Arch), Ryzen 9 7950X, RX 6650 XT, RADV Mesa 26.2.4, GCC 16.2.1, Release.

BLUE REFLECTION Quartet (PPSA33655), the title from #10271 that stops on NGS2: the custom Reverb module is not implemented on main:

  • With this head the custom Reverb refusal is gone.
  • About 2 s in, the title now aborts on NGS2: multiple custom buffers require a submixer with at most one Gain module (exit 134), thrown from Custom.cpp. The same check exists on main.
  • I found no open PR for that case; feat(ngs2): accept custom submixers with more than eight channels #11347 is about submixers with more than eight channels.

Also: Trails in the Sky 2nd Chapter (PPSA35169) reaches this PR's module once #11315 handles its PitchShift: comment on #11315. The two PRs conflict in libSceNgs2.native, so I have not run that title with both.

Staging: relinker --registry --rpath <build>/core/libs/libs --executable bin/Prospero/B0.elf eboot.elf app.elf, with the modules in sce_module converted.

AI-assisted: yes (Claude Code).

@JJenkx

JJenkx commented Oct 27, 2026

Copy link
Copy Markdown
Contributor

Follow-up with the exact rack that BLUE REFLECTION Quartet (PPSA33655) is refused on, after this PR lets its Reverb rack through. I got it from a private diagnostic print at the start of Ngs2CheckCustomRack, on this PR's head 61908b16ac; the print is not part of this PR. The title creates three custom racks before it aborts:

# rackId num_buffers max inputs modules (module_id: source / extra / dest buffer) ports (source buffer) Result
1 0x4002 submixer 1 1 UserFx 0x19: 0 / 0 / 0, option null 0, 0 accepted
2 0x4002 submixer 1 1 Gain 0x15: 0 / 0 / 0, option null; Reverb 0x1b: 0 / 0 / 0, option set 0 accepted with this PR
3 0x4002 submixer 2 2 UserFx 0x19: 0 / 0 / 0; UserFx 0x19: 0 / 1 / 0; both options null 0 multiple custom buffers require a submixer with at most one Gain module

So the next step for this title is a two-input custom submixer whose second UserFx module takes buffer 1 as its extra buffer and writes buffer 0. I can't tell from this run whether that is a sidechain or a mix. This is outside this PR's scope; I am only adding it as data for whoever lifts the multi-buffer restriction.

AI-assisted: yes (Claude Code).

@akkadbakkad89

Copy link
Copy Markdown
Contributor

Independent validation of head 61908b16ac on Windows 11 (MinGW build, i7-10700) — a platform the existing results don't cover:

  • Full real build via the repo toolchain (not a fixture), ctest -R ngs2: 31/31 pass, including ngs2_customreverb, ngs2_custom, ngs2_render, ngs2_core_render, the Gain/routing safety cases, ngs2_voiceevents and ngs2_parse.
  • Reviewed the Custom.cpp/Reverb.cpp/Ngs2Internal.hpp deltas while validating: the customReverb state is per voice+module, 0x40001b00-indexed params take the shared I3DL2 block, and bypass/refusal edges (multi-buffer routing, unsupported rates) stay explicit. Nothing looked title-specific.

For Trails in the Sky 2nd (#10156) this is the module that aborts after #11315's PitchShift — note #11315 rewrites the same Ngs2ProcessUserFx/Ngs2ApplyCustomParam regions, so whichever lands second will need the rebase; the changes are additive in disjoint branches of both functions, so it should be a mechanical resolution.

# Conflicts:
#	core/libs/prx/libSceNgs2.native/CMakeLists.txt
#	core/libs/prx/libSceNgs2.native/src/Custom.cpp
#	core/libs/prx/libSceNgs2.native/src/Voice.cpp
#	docs/dev/debt/libSceNgs2.native.md
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 30, 2026
@oneandonlydean

Copy link
Copy Markdown
Collaborator

@kyon-eth thanks for merging main into this branch. The resolutions in CMakeLists.txt (the test list is main's plus CustomReverb), Custom.cpp, Voice.cpp and the new TestPitchShiftAndReverbSetup look right: both modules are accepted by Ngs2CheckCustomRack, both are sized in Ngs2SetupUserFx, and the custom-submixer setup resets the Reverb state on the non-PitchShift path and through ResetSetup() on the PitchShift path.

One thing left from the merge: the debt entry "NGS2 custom module ids" in docs/dev/debt/libSceNgs2.native.md still takes main's wording, "Reverb (0x1b) and Convolution (0x23) are not processed: a rack that passes their creation checks throws". This PR implements Reverb (the "NGS2 custom Reverb" entry a few lines below describes it), so the sentence is no longer true. It should name Convolution (0x23) only; the "missing Reverb options" in the list of unknowns can stay or go depending on whether the Reverb tests pin that case.

2Swagger added a commit to 2Swagger/AnyPS5 that referenced this pull request Oct 31, 2026
@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Nov 1, 2026
# Conflicts:
#	core/libs/prx/libSceNgs2.native/src/Voice.cpp
@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ AMD GPU test: passed

PR head 1e4443c merged onto main 291e02d · tested 2026-11-01 15:17 UTC · 12 min

GPU AMD Radeon RX 6300 (RADV NAVI24), driver Mesa 25.2.8-0ubuntu0.24.04.4, Vulkan 1.4.318
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-42-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 867 passed · 3 failed (0 new, 3 also fail on main) · 3 skipped (ANYPS5_REQUIRE_VULKAN=1)
Test setup CPU-only tests without a GPU; GPU tests (and any CPU-only test that failed or skipped without one) once on the GPU with VK_LAYER_KHRONOS_validation and ANYPS5_NO_SHADER_CACHE=1; main ran the same way
Test selection 873 of 3,155 tests run: the ones this change can reach, chosen by tools/select_tests.py from main's build graph
Vulkan validation ✅ no new validation IDs vs main (426 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 89.6 s, ⚠️ public_headers 44.7 s, ⚠️ unwrap_self 44.1 s
Failing on main too (3, not counted against this PR)
agc_driver_image_table
agc_driver_native_depth_bda_clear
agc_driver_native_multisample_depth
Validation IDs already present on main (5 IDs in 364 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (364 tests): agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, agc_driver_bindless_images, and 356 more
VUID-vkCmdCopyImage-srcImage-01548 (6 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (6 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_prepared_exports
VUID-VkShaderModuleCreateInfo-pCode-08737 (1 test): agc_driver_image_sample_derivatives
Skipped (3)
agc_driver_copied_writer_label_order: skipped, the device reports a minStorageBufferOffsetAlignment of 4, so the dispatch binds its record at +0x1004 in place and nothing is written back; the test needs an alignment above 4
agc_driver_linear_target_direct_write_completion: skipped, the device does not keep host imports write-watched, so no completion stamp over the target is tracked
agc_driver_ngg_vertex_wave_reduction: skipped, s3 describes a 32-lane wave only on 32-lane subgroups, and the device has 64 lanes
Reproduce
git fetch origin 1e4443ce4336f71ce4b404a84e865f76dd00c3c3 291e02d4877784d03d346962af51713b9df63b91
git checkout 291e02d4877784d03d346962af51713b9df63b91 && git merge --no-ff 1e4443ce4336f71ce4b404a84e865f76dd00c3c3
git submodule update --init --recursive
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -DANYPS5_ENABLE_SPIRV_TOOLS=ON
cmake --build build && cmake --build build --target libs
VK_DRIVER_FILES=/nonexistent/icd.json ctest --test-dir build -E '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 12 --output-on-failure
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 16 --output-on-failure
# failures are then re-run alone: --timeout 360 --parallel 2; new validation IDs: the test alone, twice, --parallel 1

Automated build and test on a contributor's AMD machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs.

@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Nov 1, 2026
@ycbuzi

ycbuzi commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

Tested on Project Zero: Mask of the Lunar Eclipse (PPSA10278), Windows 11, RTX 4070 SUPER, Release, this PR's head 1e4443ce43 merged onto main be24202363, replacing only libSceNgs2.prx.

  • Without this PR the game stops 15 s in with NGS2: the custom Reverb module is not implemented.
  • With it, that message is gone. The game then stops, also about 15 s in and before drawing a frame, with NGS2: custom mastering racks with modules are not implemented.

So this PR removes that stop for this title, but it does not unblock it. The sound was not checked, because the game stops before any audio could be judged. One run each.

AI-assisted (Claude Code).

@ycbuzi

ycbuzi commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

A second title with the same result: Project Zero: Maiden of Black Water (PPSA04334), same PC as my earlier comment (Windows 11, RTX 4070 SUPER, Release). The game is built with main 3a40945e62; for the second run only libSceNgs2.prx is replaced by the one built from this PR's head 1e4443ce43 merged onto main be24202363. One run each, about 15 s, no frame drawn in either.

libSceNgs2.prx Stops with
main 3a40945e62 NGS2: the custom Reverb module is not implemented
this PR NGS2: custom mastering racks with modules are not implemented

So this PR gets this title past its Reverb rack too, and it then stops at the same next check as Mask of the Lunar Eclipse (Ngs2CheckCustomRack, a custom mastering rack with num_modules != 0). I did not find an open PR for that check. Gameplay and audio output are not tested.

AI-assisted: yes (Claude Code)

@oneandonlydean
oneandonlydean merged commit 0702b30 into boykopovar:main Nov 2, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants