CMake reads both options, and neither appeared in the option tables in BUILD.md. ANYPS5_NODE selects the Node.js binary that runs the memory64 Emscripten tests; ANYPS5_VIDEO_OUT_TEST_DRIVER selects the SDL video driver for the VideoOut flip tests. Their defaults come from core/libs/tests/emscripten/CMakeLists.txt and core/libs/prx/libSceVideoOut/CMakeLists.txt.
BUILD.md says Python 3.9 or newer enables the Python regression tests. The root CMakeLists.txt registers validate_patch_catalog only when Python is 3.11 or newer, and tools/validate_patch_catalog.py imports tomllib, so on Python 3.9 or 3.10 the test is not registered and no message says why.
The performance trace section said that APS5_TRACE_EVENTS sizes the
buffers of the queue workers and the presenter, and that only those
threads record a window. The draw committer of pipelined draws, which is
on by default, and the draw finisher of APS5_DRAW_PIPELINE also bind to
the trace with the default capacity, so PerformanceTrace::BindThread
gives them a buffer of APS5_TRACE_EVENTS events too, and they record
their scopes in the window. The section now names both threads.
AI-assisted: yes
The opt-in guest_libressl_oracle test downloads the LibreSSL 2.5.4
tarball at build time, checks its SHA-256, builds libcrypto and libssl
and compares the AES, digest, DES parity and error-string exports of
libSceLibreSsl and libSceLibreSsl3 with them, printing the cases and
differences per function. The option is off by default and adds no
download then. See #12537.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The CMake flag table left out the ANYPS5_REQUIRE_CPU_LEAD_TEST option and
the ANYPS5_AGC_EXECUTION_TESTS cache list that the Windows, MSYS2 and
sanitizer workflows set. Add a row for each and drop the stray comma
after "the reason" in the sanitizer workflow paragraph.
The directory limits (128 records, 256 MiB) throw CaptureLimit, which
WriteOptional catches: capture disables itself with one stderr line and
the pipeline is still created. Only the per-record 36 MiB limit throws
out of the capture, so the old sentence described both as an error.
TraceThread::Slice holds five eight-byte members (scope, stage, begin,
length and the recorder batch), so an event takes 40 bytes, not 32.
The example sizes follow: 10 MiB at the default 262,144 events, 120 MiB
at 3,145,728 and 160 MiB at the 4,194,304 maximum.
ANYPS5_BUILD_FUZZERS builds relinker_conversion_fuzzer with AddressSanitizer
and UndefinedBehaviorSanitizer in relinker-only Clang builds on Linux. The
first input byte selects the target system, --to-intel and the unused-filter
level; the rest is the executable passed to Conversion::Convert, the path the
web converter takes. tools/relinker_fuzz_seeds.py writes the relinker test
fixtures as seeds, and CTest runs a short smoke run.
The workflow and BUILD.md said ASAN_OPTIONS must end with ':' because tests append their own options with string_append. That is wrong: add_asan_test_options appends ':<options>', so ASAN_OPTIONS=detect_leaks=0 already gives detect_leaks=0:detect_stack_use_after_return=0 for the fiber test. Use detect_leaks=0 and remove the claim.
Document in BUILD.md, next to -DANYPS5_ENABLE_ASAN, what the Sanitizers workflow builds and runs, where the known failures are listed and what the job summary reports, and how to repeat a run locally: end ASAN_OPTIONS with ':' because tests append their own options, and set UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 so undefined behavior fails the test.
The recorder released its lock between recording a submission, flip or
suspend point and the driver accepting it. Another thread's delta could
then wait for the accepted work, read its blocks, and record itself
after a call whose work the driver had not accepted yet, so the replay
submitted that work before applying stale bytes over its result. The
entry points now pass the driver call to the recorder, which runs it
under the same lock right after recording the call.
agc_driver_frame_replay_concurrent submits copies from a second thread
during the capture and checks that every memory delta was read after
the submissions recorded before it had completed.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A delta read its blocks with ReadCommittedUnsynced while GPU work
accepted before the call could still write them, so a capture could
hold a block from before a DMA copy that the replay then wrote back over
the copy's result. A delta with blocks to read now waits up to 10 s for
the accepted submissions and records the serials after the wait; the
capture stops with a warning when the work does not finish. The Windows
quarantine of agc_driver_frame_replay is removed.
Fixes#10711
Co-Authored-By: Claude Opus 5.5 <[email protected]>