Skip to content

fix(libc): check sprintf_s and vsprintf_s as titles' libc.prx does - #12622

Open
JJenkx wants to merge 44 commits into
boykopovar:mainfrom
JJenkx:windows/libc-sprintf-s-constraints
Open

JJenkx wants to merge 44 commits into
boykopovar:mainfrom
JJenkx:windows/libc-sprintf-s-constraints

Conversation

@JJenkx

@JJenkx JJenkx commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Current-main integration — 2026-11-05. Exact head d6290aca7acbe0bbbfeda37ef2f7a2564842124b retains previous public 6a3e6798b1e94118988bbb41fdab6c3830abe74b and tested main 6d173c1a19788ff69d43b3d0ca62833e312ef939 as ancestors. The actual latest #9087 parent 1c3b118df8c062114d7962b48dbc39cfa4105496 is retained. The whole ScanSource matches that prerequisite composed with main, including signed 32-bit secure-stream %c width/clamping and the parent’s five regression rows; FormatTerminated remains byte-identical to the previous public head. The count-bookkeeping conflict resolves to the parent’s Boolean-equivalent expression. The child sprintf_s debt remains; the superseded narrow-width discrepancy is removed as in the parent.

Linux x86-64, GCC16.2.1, Ninja Release: actual production modules and focused fixture owners rebuilt; 7/7 runtime tests pass, zero skips: guest_formatting, guest_scan_count, guest_wide_stream_scan, guest_wide_formatting, guest_crt, guest_stdio_variadic, guest_strings. Matching pinned main passes all25 selected baseline groups. Production NID patching, conventions/whitespace, and MinGW syntax for Formatting.cpp, StdioExtras.cpp pass. A frozen guest_stdio_variadic executable fails at the clamped-width assertion with only the prior child/main Formatting.cpp restored. Exact restoration passes and reproduces source, library and executable hashes.

Public-header audit: failed on both pinned main and this head with the same five missing WKSecurityOrigin* declarations (Create, CopyToString, CopyHost, CopyProtocol, GetPort), with no additional declaration errors. The failure is retained in the logs; no all-green header/full-suite claim is made. The concrete shared-main repair is #16010, exact head 545e24b2ee2e549001421f7fc9f87ff801f3423c. Its independent qualification reports a green audit of 406 libraries/30,572 exports and two standalone units compiled by each of GCC and MinGW. A maintainer still needs to merge that repair and rerun the affected checks; this unmodified qualification tree is not relabelled header-green.

The older-main Windows DepthSurface::createSampleShadow allocation compile error is already corrected by merged #15855. This head contains that fix, and its DepthSurface.cpp/ImageMemory.hpp blobs match the fixing source. The fix’s hosted Windows build passed; that is attributed upstream evidence, not a Windows build/runtime result for this head. No duplicate AGC change was added. A final merge preview against newer main 7ad9749ed0311cc91d69bc7c690d09c92b9d42d0 is clean; qualification remains pinned to 6d173c1a19788ff69d43b3d0ca62833e312ef939.

Source/parent/provider/gitlink proofs, commands, raw logs, JUnit, hashes and known baseline failure. Historical platform, module-reference and performance reports below retain their original pins; no new Windows/macOS, SDK/physical-console, title/GPU or performance run.

Earlier pinned reports and the contribution template follow.

Refreshed against main 0263899e996f26b165aed37f6b5a616dd1d4c6bb; current head 6a3e6798b1e94118988bbb41fdab6c3830abe74b retains previous public head ed55fbdf74855878b2d4f5f73e7e51c9ec23458b and main as ancestors. The conflict resolution preserves the topic behavior and current-main ordinary-scan/input-failure handling and fixtures.

The same seven fixtures (guest_formatting, guest_scan_count, guest_wide_stream_scan, guest_wide_formatting, guest_crt, guest_stdio_variadic, guest_strings) pass three times on main and on this head: 21 executions per arm, zero failures/skips. The last two run in a separate scoped build with the actual PosixForWebKit/Net/NetCtl/kernel_sys/LibcInternal dependency owners. Public-header audit, conventions and whitespace checks pass. These are actual scoped libc/kernel/Ampr owners and selected fixtures with existing frozen ZArchive/zstd providers, not a whole-project build. No new Windows, title-unblock or performance claim.

Raw build/test/JUnit logs, commands, source patches, conflict resolutions and binary hashes, SHA-256 fd8ddb6a38a010916d71698df9cb60011e9800fe14db63baa9f4eca21e6b8e4f (download verified). The batch has 87 successful fixture executions in total; setup failures and corrected final qualification are retained in the archive.

Previous report and contribution template, with historical pins preserved:

What

Depends on #9087. Current head ed55fbdf74855878b2d4f5f73e7e51c9ec23458b includes actual parent d44f653788366cfa07727a8ae52088a0675f129f and pinned main b11c7bf84f5d2f636ff60166cc3371bd071e24d5. Original child, prerequisite and reviewer commits remain ancestors. #9935’s default-handler change is already on main through merged #10270.

sprintf_s and vsprintf_s now check their arguments and output the way the libc.prx that titles ship does. On main they formatted with no checks at all: a null buffer crashed, and output that didn't fit was silently truncated. They now share #9087's secure conversions through a new FormatTerminated next to FormatSecure, but follow their own violation rules. Measured natively on PPSA07923 and PPSA05916, which agree:

case titles, and this PR
output fits returns the length
null buffer, size 0, size above SIZE_MAX >> 3 returns 0, writes nothing, "<name>: bad argument"
null format returns 0, buf[0] = '\0', "<name>: bad format argument"
output too long returns 0, stores size - 1 characters and clears the first, "<name>: buffer overflow" with ERANGE
%n, null %s returns 0, clears the first character, "printf_s: %n disallowed" / "printf_s: bad %s argument"
%n after text that already filled the buffer as above, then a second call with "<name>: buffer overflow"

<name> is sprintf_s or vsprintf_s; the two use their own names. The handler always gets a null pointer. Unlike snprintf_s, every violation returns 0, never a negative value.

On Windows the two functions were defined in StdioExtras.cpp, outside the Formatting.cpp block that snprintf_s uses. They move next to snprintf_s, so both platforms share FormatTerminated. A debt entry records the rule.

Depends on #9087, for FormatSecure and its secure conversions. Its current shared SonyRsizeMax supplies the same 2^61 - 1 size bound formerly called secureSizeMax. Main’s default handler writes and returns. Main’s narrow printf literal behavior for unknown %y/%k conversions is retained; scanner unknown conversions still stop before the contiguous secure branch.

Tested

Current-main integration — 2026-11-04. Head ed55fbdf74855878b2d4f5f73e7e51c9ec23458b includes main b11c7bf84f5d2f636ff60166cc3371bd071e24d5 and preserves previous public commits and attribution/licence notices. Includes actual current #9087. Its shared SonyRsizeMax replaces the child’s stale private constant reference with the same SIZE_MAX >> 3 bound. Narrow printf %y/%k retain main’s literal-format behavior with exact result/output/no-handler assertions; the scanner unknown-conversion exit remains before its contiguous secure path. The compile failure from the stale reference is retained. Actual open prerequisite #9087 head d44f653788366cfa07727a8ae52088a0675f129f is an ancestor.

Linux x86-64, GCC 16.2.1, Ninja Release, BUILD_TESTING=ON: rebuilt actual libc/Ampr and selected executables. guest_formatting, guest_stdio_variadic, guest_scan_count, guest_wide_stream_scan, guest_wide_conversion, file_streams, guest_strings, guest_safe_errors, guest_crt each pass 3/3 (27 runtime passes, zero skips); public_headers, conventions and whitespace checks pass. Pinned main passes all 17 selected baseline groups 3/3 (51 passes) plus headers. Before/after dependency checks agree: 34 recursive trees and 31,551 tracked blobs, zero errors; the update=none QuickJS test262 corpus is explicitly excluded from these library inputs.

Source/parent/gitlink proofs, library/test hashes, raw logs/JUnit and head-leased push receipts: qualification archive, SHA-256 7c347f620951ad6f39068740750949212c6412815da094a46a96eca1d15c8bbf (download verified). Older platform, stress, negative-control and reference reports retain their original pins; no new Windows/macOS, full-suite, SDK-module, console, title/GPU or performance claim. AI-assisted: yes (Codex).

Earlier dated qualifications below retain their original source/platform pins.

Current-main refresh — 2026-11-02. Published head a65a15bdf7f81e00569ade98e191f4c75b4ae026 includes pinned main a4eca2a056bf3bbbec98ab42e9d28163e4ea9cb8. The source.Peek wide-bounds adaptation was already delivered in57711a6 (reply6583632302), using actual #9087 head24f4242c. This refresh keeps that wide block byte-identical and retains the maintainer529a1e6/prior public history and actual parent ancestry. The new a4 conflict was main’s unknown-conversion guard versus the contiguous secure branch: main’s guard now precedes the secure path. A frozen guest_formatting executable fails when only this guard is removed, then passes after exact restoration with identical libc/test hashes. No new tests or unsupported native-call assertions were added. Both Formatting.cpp and FormattingWide.cpp pass MinGW syntax; this is not Windows runtime qualification.

Rebuilt actual libc/Ampr and selected tests from the final input tree. guest_formatting, guest_wide_formatting, guest_stdio_variadic, guest_scan_count, guest_wide_stream_scan, guest_wide_conversion, file_streams, guest_strings, guest_safe_errors, guest_crt each pass three consecutive runs: 30 runtime passes, zero skips, plus public_headers. Conventions and whitespace pass. Source/input manifests, exact dependencies, library/test hashes, logs/JUnit and head-leased push receipts are attached. The same pinned main passes 18 selected groups three times (54 runtime passes) plus headers. All 34 recursive dependency trees/31,551 tracked blobs verify with zero errors; QuickJS’s update=none test262 corpus is explicitly excluded because it is not a library build input.

Linux-7.2.11-arch1-1-x86_64-with-glibc2.44, Ryzen 9 7950X, GCC 16.2.1, Ninja Release, BUILD_TESTING=ON. Focused Linux CPU qualification only plus MinGW syntax. Older Windows/module/reference reports retain their original pins; no fresh Windows/macOS, SDK-module, console, title/GPU or speed claim. AI-assisted: yes (Codex).

Evidence: https://github.com/JJenkx/AnyPS5/releases/download/linux-validation-20261023/math-six-main-a4eca-linux-extra10321-20261102.tar.gz; SHA-256 525ccb31a5d3d0f5adced5fda58818d8432f06c0afa7290139adb60ae6664b54.

Earlier dated qualifications below retain their recorded source/platform pins.

Exact head 57711a6544ba2f4c2679fcb840e23f8c548bb159, Linux 7.2.11/glibc 2.44, Ryzen 9 7950X, GCC 16.2.1, Ninja Release, BUILD_TESTING=ON. Rebuilt actual libc and all selected test executables.

  • guest_formatting, guest_scan_count, guest_wide_formatting, guest_stdio_variadic, guest_crt, file_streams, guest_strings, guest_wide_strings, guest_safe_errors: each passes three runs (27 passes, zero skips). Includes both main's byte-based wide scanner fixtures and the prerequisite's measured secure bounds/width cases, alongside this PR's terminated-format checks.
  • Same frozen guest_formatting_tests executable fails in CheckTerminatedFormat when only the Linux sprintf_s/vsprintf_s export bodies are restored to actual prerequisite fix(libc): follow snprintf_s and sscanf_s constraints as measured on a PS5 #9087's implementation. Restoring this implementation restores both source and the actual loaded libs/unpatched/libc.prx byte-for-byte and passes again. The loader path and SHA-256 identities are recorded.
  • Public headers and whitespace checks pass. Conventions against pinned main exit 0 with zero errors and one inherited long-debt-entry warning (the peer's shared _WStoul/_Iswctype/swscanf_s entry).
  • Independent merge-tree of actual fix(libc): follow snprintf_s and sscanf_s constraints as measured on a PS5 #9087 plus pinned main differs from this branch only in the original four topic files. The full source scanner is byte-identical to fix(libc): follow snprintf_s and sscanf_s constraints as measured on a PS5 #9087's adaptation; source/test child patch applies cleanly, and debt retains the peer's updated scanner qualifications plus main's new entry.

Exact pins, original and final patches, composition proof, build/test/JUnit logs and frozen negative/restore control, SHA-256 6d8bb229b1c62d15d2b49f56a7e2c620d73831a3ebe19470a44c1f6a7105bae6.

The original module measurements and prior Windows runs retain their earlier pins in historical qualification. No new exact-head Windows, SDK-module, console, title, GPU or performance claim. The prerequisite author's Windows/Linux scanner results are their independent report, not relabelled as our current-head execution.

Checklist

orezraey and others added 17 commits October 21, 2026 08:57
…a PS5

Measured on libSceLibcInternal.sprx of a PS5 on firmware 13.60:

- snprintf_s and vsnprintf_s: RSIZE_MAX is 2^61 - 1. A null buffer,
  size 0 or a size above RSIZE_MAX returns -1 with the buffer untouched;
  a null format returns -1 with buffer[0] zeroed; %n or a null %s, %ls
  or %S argument returns -23, keeps the output written before it and
  zeroes buffer[0]. Every violation calls the constraint handler with
  the console's message, a null pointer and EINVAL.
- sscanf_s and vsscanf_s: the size argument is 64 bits. A %s or %[
  field of at least size characters stores its first size characters
  without a terminator and is a matching failure; %c stores at most
  size characters and succeeds. Null destinations and sizes above
  RSIZE_MAX call the handler and return the assignments, or -23 before
  any conversion. A literal mismatch at the end of input returns the
  assignments, and %n counts as a conversion for the EOF result.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…les ship

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e stdio variadic test

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
JJenkx measured titles' own libc.prx: %ls and %l[ follow the narrow
rules, while %lc with a width above the size stores size units and
consumes the whole width.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 28, 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 7851 docs/dev/debt/libc.md L106-107
PR 15801 sprintf_s
PR 15802 sprintf_s
PR 15803 sprintf_s
PR 15804 sprintf_s
PR 15807 sprintf_s

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 5021 core/libs/prx/libc/include/WindowsFormatting.hpp
core/libs/tests/Formatting.cpp
docs/dev/debt/libc.md
PR 6819 docs/dev/debt/libc.md
PR 7447 docs/dev/debt/libc.md
PR 7715 docs/dev/debt/libc.md
PR 8150 docs/dev/debt/libc.md
PR 8965 core/libs/tests/GuestStrings.cpp
docs/dev/debt/libc.md
PR 9371 docs/dev/debt/libc.md
PR 9447 docs/dev/debt/libc.md
PR 9526 docs/dev/debt/libc.md
PR 10780 docs/dev/debt/libc.md
PR 11172 docs/dev/debt/libc.md
PR 11332 core/libs/prx/libc/include/WindowsFormatting.hpp
core/libs/prx/libc/src/Formatting.cpp
core/libs/tests/Formatting.cpp
docs/dev/debt/libc.md
PR 11724 core/libs/prx/libc/src/Formatting.cpp
docs/dev/debt/libc.md
PR 11726 core/libs/prx/libc/src/Formatting.cpp
core/libs/tests/Formatting.cpp
docs/dev/debt/libc.md
PR 11831 docs/dev/debt/libc.md
PR 12518 docs/dev/debt/libc.md
PR 12682 docs/dev/debt/libc.md
PR 12688 docs/dev/debt/libc.md
PR 12700 docs/dev/debt/libc.md
PR 12704 docs/dev/debt/libc.md
PR 12849 docs/dev/debt/libc.md
PR 12965 docs/dev/debt/libc.md
PR 13449 docs/dev/debt/libc.md
PR 13486 core/libs/prx/libc/include/WindowsFormatting.hpp
core/libs/prx/libc/src/Formatting.cpp
core/libs/tests/Formatting.cpp
docs/dev/debt/libc.md
PR 13794 docs/dev/debt/libc.md
PR 13804 docs/dev/debt/libc.md
PR 13809 docs/dev/debt/libc.md
PR 14212 docs/dev/debt/libc.md
PR 16004 docs/dev/debt/libc.md

@github-actions github-actions Bot added libc docs needs rebase Conflicts with main, rebase needed labels Oct 29, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@JJenkx

JJenkx commented Oct 29, 2026

Copy link
Copy Markdown
Contributor Author

Integrated current main 157b02c4f1803e9d2cd757677b9a805961203fc4 by normal fast-forward merge; earlier measured fixes, tests and actual parent ancestry are retained.

New head: 1dd0d4a860eefb9ee7834d67e110c1e0e20cfc6b. The conflict keeps the new constraint-handler context and capacity types while adding main’s quad-length cutoff before the Linux string-scan route.

Linux Release: guest_formatting, guest_wide_formatting, guest_stdio_variadic, guest_scan_count, guest_crt pass three repetitions (15 checks), plus the public-header audit, zero skips. Actual Formatting.cpp and FormattingWide.cpp, including WindowsFormatting.hpp, pass MinGW GCC16.2.0 cross syntax checking. Conventions report zero errors; any debt-length warnings are preserved in the logs. Whitespace and recursive submodule-pointer checks pass.

This is current-main Linux integration and Windows cross-compilation syntax evidence. Earlier actual Windows/title-library measurements retain their historical pins; no new Windows runtime, macOS, title, GPU or performance result is claimed. AI-assisted: yes.

Evidence: immutable Linux qualification bundle. Its SHA-256 is ca6b35926bcc6d3f21a9650517894c86b65594e2e2b653c5c32cd1c1de89c835. No fresh Windows runtime execution is claimed; older measurements retain their recorded source pins.

…nput

JJenkx's run of two reference libc modules returns 0 from fscanf_s for a
literal mismatch at end of input, as sscanf_s does on the PS5.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Nov 2, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@JJenkx

JJenkx commented Nov 2, 2026

Copy link
Copy Markdown
Contributor Author

@oneandonlydean Addressed at 57711a6544ba2f4c2679fcb840e23f8c548bb159, preserving your 529a1e6db1a merge and the prior public history without a force push.

Rather than duplicating the adaptation, I integrated @orezraey's actual #9087 head 24f4242cbd6222613859b62633a236cbd9231b24, which already moves the secure bounds onto the source-based scanner, then main b28bb7721777. The scanner is byte-identical to that peer commit. Our original sprintf_s/vsprintf_s production and regression patch applies cleanly on top; the debt resolution keeps the peer's updated scanner/stream qualifications and main's new entry. Both main's byte-scanning fixtures and the prerequisite's bounds fixtures survive. Actual #9087 ancestry is now present, so the previous pairwise dependency conflict is resolved for that head. Depends on remains #9087 and #9935.

Rebuilt libc and nine formatting/scan/stream/CRT/string/safe-error groups, each passing three times: 27 passes, zero skips. Public headers pass. Conventions exit0 with no errors and one inherited debt-length warning. A frozen guest_formatting executable fails specifically in CheckTerminatedFormat when only the Linux sprintf_s/vsprintf_s bodies are restored to the actual prerequisite, then passes after byte-identical source/library restoration. Logs, exact source composition and hashes are linked in the refreshed description. Current-head Windows remains pending; earlier module/Windows evidence keeps its old pins. AI-assisted: yes (Codex).

@JJenkx

JJenkx commented Nov 2, 2026

Copy link
Copy Markdown
Contributor Author

Current-main refresh — 2026-11-02. Published head a65a15bdf7f81e00569ade98e191f4c75b4ae026 includes pinned main a4eca2a056bf3bbbec98ab42e9d28163e4ea9cb8. The source.Peek wide-bounds adaptation was already delivered in57711a6 (reply6583632302), using actual #9087 head24f4242c. This refresh keeps that wide block byte-identical and retains the maintainer529a1e6/prior public history and actual parent ancestry. The new a4 conflict was main’s unknown-conversion guard versus the contiguous secure branch: main’s guard now precedes the secure path. A frozen guest_formatting executable fails when only this guard is removed, then passes after exact restoration with identical libc/test hashes. No new tests or unsupported native-call assertions were added. Both Formatting.cpp and FormattingWide.cpp pass MinGW syntax; this is not Windows runtime qualification.

Rebuilt actual libc/Ampr and selected tests from the final input tree. guest_formatting, guest_wide_formatting, guest_stdio_variadic, guest_scan_count, guest_wide_stream_scan, guest_wide_conversion, file_streams, guest_strings, guest_safe_errors, guest_crt each pass three consecutive runs: 30 runtime passes, zero skips, plus public_headers. Conventions and whitespace pass. Source/input manifests, exact dependencies, library/test hashes, logs/JUnit and head-leased push receipts are attached. The same pinned main passes 18 selected groups three times (54 runtime passes) plus headers. All 34 recursive dependency trees/31,551 tracked blobs verify with zero errors; QuickJS’s update=none test262 corpus is explicitly excluded because it is not a library build input.

Linux-7.2.11-arch1-1-x86_64-with-glibc2.44, Ryzen 9 7950X, GCC 16.2.1, Ninja Release, BUILD_TESTING=ON. Focused Linux CPU qualification only plus MinGW syntax. Older Windows/module/reference reports retain their original pins; no fresh Windows/macOS, SDK-module, console, title/GPU or speed claim. AI-assisted: yes (Codex).

Evidence: https://github.com/JJenkx/AnyPS5/releases/download/linux-validation-20261023/math-six-main-a4eca-linux-extra10321-20261102.tar.gz; SHA-256 525ccb31a5d3d0f5adced5fda58818d8432f06c0afa7290139adb60ae6664b54.

@oneandonlydean The earlier wide-bounds adaptation remains intact; this reply documents the later current-main conversion-guard conflict and its qualified resolution. Please re-review this final integration when available.

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

JJenkx commented Nov 2, 2026

Copy link
Copy Markdown
Contributor Author

Windows check of the rebased head a65a15bdf7.

Setup: Windows 11 Enterprise 10.0.22621, Ryzen 9 5950X, WinLibs GCC 15.2.0 UCRT r7 (the CI toolchain), Release, BUILD_TESTING=ON, private build. The build was clean, and the changed sources were rebuilt for this head.

  • ctest -R '^(guest_scan_count|guest_stdio_variadic|guest_strings)$' --repeat until-fail:3: all three pass 3/3.

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Nov 4, 2026
orezraey and others added 5 commits November 4, 2026 01:13
Take main's set_constraint_handler_s and wcsncat_s entries and boykopovar#9863's short-field
wording, keep this branch's sscanf_s constraint wording, and use SonyRsizeMax
from SonyCrt.hpp instead of a local copy of the same limit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@JJenkx

JJenkx commented Nov 4, 2026

Copy link
Copy Markdown
Contributor Author

Current-main integration — 2026-11-04. Head ed55fbdf74855878b2d4f5f73e7e51c9ec23458b includes main b11c7bf84f5d2f636ff60166cc3371bd071e24d5 and preserves previous public commits and attribution/licence notices. Includes actual current #9087. Its shared SonyRsizeMax replaces the child’s stale private constant reference with the same SIZE_MAX >> 3 bound. Narrow printf %y/%k retain main’s literal-format behavior with exact result/output/no-handler assertions; the scanner unknown-conversion exit remains before its contiguous secure path. The compile failure from the stale reference is retained. Actual open prerequisite #9087 head d44f653788366cfa07727a8ae52088a0675f129f is an ancestor.

Linux x86-64, GCC 16.2.1, Ninja Release, BUILD_TESTING=ON: rebuilt actual libc/Ampr and selected executables. guest_formatting, guest_stdio_variadic, guest_scan_count, guest_wide_stream_scan, guest_wide_conversion, file_streams, guest_strings, guest_safe_errors, guest_crt each pass 3/3 (27 runtime passes, zero skips); public_headers, conventions and whitespace checks pass. Pinned main passes all 17 selected baseline groups 3/3 (51 passes) plus headers. Before/after dependency checks agree: 34 recursive trees and 31,551 tracked blobs, zero errors; the update=none QuickJS test262 corpus is explicitly excluded from these library inputs.

Source/parent/gitlink proofs, library/test hashes, raw logs/JUnit and head-leased push receipts: qualification archive, SHA-256 7c347f620951ad6f39068740750949212c6412815da094a46a96eca1d15c8bbf (download verified). Older platform, stress, negative-control and reference reports retain their original pins; no new Windows/macOS, full-suite, SDK-module, console, title/GPU or performance claim. AI-assisted: yes (Codex).

@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Nov 4, 2026
orezraey and others added 2 commits November 4, 2026 16:27
Keep boykopovar#13119's ordinary %n bookkeeping beside the secure contiguous one,
route sscanf through ScansInProcess, and give the shared secure stream
%c loop the 32-bit width rule and the destination-size clamp.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Nov 4, 2026
@JJenkx

JJenkx commented Nov 4, 2026

Copy link
Copy Markdown
Contributor Author

Windows check for the scheduled cross-platform review, at head 6a3e6798b1 merged onto main b611e634f7 (64a8179b6f, clean merge).

Setup: Windows 11 Enterprise 22621, WinLibs GCC 15.2 UCRT, Release. The hosted Windows check does not run these tests on pull requests.

  • guest_formatting, guest_wide_formatting, guest_scan_count, guest_stdio_variadic and guest_strings pass in 3 of 3 runs.

AI-assisted: yes.

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

Copy link
Copy Markdown
Contributor

✅ AMD GPU test: passed

PR head 6a3e679 merged onto main b611e63 · tested 2026-11-05 01:40 UTC · 18 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 ✅ 3,819 passed · 17 failed (0 new, 14 also fail on main, 3 unstable on main) · 61 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 3,897 of 3,946 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 (1390 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 121.1 s, ⚠️ agc_driver_graphics 119.5 s, ⚠️ agc_driver_graphics_maps_fallback 117.5 s, ⚠️ public_headers 82.1 s, ⚠️ agc_driver_bda_device 55.7 s
Unstable on main (3, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_array_layer_target_cpu: failed in 3 of the last 10 main runs
agc_driver_pipeline_journal: failed in 9 of the last 10 main runs
agc_driver_two_sample_alpha_to_coverage_sample_mask_export: failed in 4 of the last 10 main runs
Failing on main too (14, not counted against this PR)
agc_driver_alpha_to_coverage_sample_mask_export
agc_driver_guest_memory_lifetime_direct
agc_driver_image_gather_volume
agc_driver_image_table
agc_driver_job_manager_compute_capacity
agc_driver_native_depth_bda_clear
agc_driver_native_depth_buffer_clear
agc_driver_native_depth_clears
agc_driver_native_multisample_depth
agc_driver_submit_progress
agc_submit_progress
agc_submit_progress_no_timeline
guest_mmap_executable
guest_socket_options_multicast
Validation IDs already present on main (4 IDs in 807 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (807 tests): agc_compute_pipeline_replay, agc_driver, agc_driver_address_draw_space_reuse, agc_driver_address_draw_space_reuse_held, agc_driver_address_draw_space_reuse_off, agc_driver_address_draw_space_reuse_transitions, agc_driver_address_draw_space_reuse_verify, agc_driver_address_passes, and 799 more
VUID-vkCmdCopyImage-srcImage-01548 (11 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store_image_copy, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_partially_unmapped_plane, agc_driver_depth_plane_unmapped_plane, and 3 more
VUID-vkCmdCopyImage-srcImage-01551 (11 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store_image_copy, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_partially_unmapped_plane, agc_driver_depth_plane_unmapped_plane, and 3 more
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (2 tests): agc_driver_prepared_exports, agc_driver_srgb8_color_target
Skipped (61)
agc_driver_bda_reads_shadowed_results: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_bda_reads_shadowed_results_per_build: skipped, the device reports watched host memory written when it imports or reads it
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_copied_writer_label_order_drain: 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_float16_unused_nan_payloads: skipped, the device has no native f16 conversions with RTE rounding and kept f16 denormals
agc_driver_gcn_display_present: skipped, no display: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
agc_driver_image_table_vouched_lookups: skipped, the device reports 4 of 4 host-imported pages written after a GPU read, so a watched imported table cannot be vouched for
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
agc_driver_scattered_runs: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_sparse_dma_buf_import: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_unit_shadow: skipped, the device does not import watched host memory for unit shadows
agc_driver_unit_shadow_budget: skipped, the device does not import watched host memory for unit shadows
agc_driver_vertex_elected_atomic_max: skipped, the device runs vertex programs in subgroups, so they keep their cross-lane reductions
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_idle_publish_wait: skipped, the device reports 4 of 4 host-imported pages written after a GPU read, so a forced watch of the import reads its submissions as CPU stores
agc_import_settle_initial_dcc: skipped, the device has no deferred settle of host imports: imports under 1 MiB wait for one only on Windows
agc_shadowed_key_stores: skipped, the device imports no watched host memory under a unit shadow
agc_small_tiled_shadow_label: skipped, host imports are unavailable: the test block is not imported and watched
agc_storage_clear_hand_over: skipped, the device imports no watched host memory for the clear-key hand-over
agc_unit_shadow: skipped, the device does not import watched host memory for unit shadows
agc_unit_shadow_completion_store: skipped, the device reports watched host memory written when it imports or reads it
guest_http_uri_locale: 
guest_net_ctl: skipped, the host has no IPv4 address
guest_video_out_color_space: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_hdr: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_high_frame_rate: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_output_mode: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_resolution_status: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_wqhd_detection: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
video_out_flip_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in 
Reproduce
git fetch origin 6a3e6798b1e94118988bbb41fdab6c3830abe74b b611e634f7fc024f0c13e342d96de744448ef1d9
git checkout b611e634f7fc024f0c13e342d96de744448ef1d9 && git merge --no-ff 6a3e6798b1e94118988bbb41fdab6c3830abe74b
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.

@JJenkx

JJenkx commented Nov 5, 2026

Copy link
Copy Markdown
Contributor Author

Refreshed to d6290aca7acbe0bbbfeda37ef2f7a2564842124b on tested main 6d173c1a19788ff69d43b3d0ca62833e312ef939, retaining the prior public head. The actual latest #9087 parent 1c3b118df8c062114d7962b48dbc39cfa4105496 is retained. The whole ScanSource matches that prerequisite composed with main, including signed 32-bit secure-stream %c width/clamping and the parent’s five regression rows; FormatTerminated remains byte-identical to the previous public head. The count-bookkeeping conflict resolves to the parent’s Boolean-equivalent expression. The child sprintf_s debt remains; the superseded narrow-width discrepancy is removed as in the parent.

Fresh Linux CPU-only qualification: 7/7 runtime tests pass, zero skips; actual module/fixture builds, production NID patching, conventions/whitespace and MinGW syntax pass. A frozen guest_stdio_variadic executable fails at the clamped-width assertion with only the prior child/main Formatting.cpp restored. Exact restoration passes and reproduces source, library and executable hashes. Public-header auditing remains red on main and this head for exactly the same five missing WKSecurityOrigin declarations; this is recorded, with no header-green claim.

The inherited older-main Windows allocation compile failure is fixed by already merged #15855; the fixing source is preserved here. Its successful Windows build is upstream evidence, not this branch’s Windows qualification. Final merge preview against main 7ad9749ed0311cc91d69bc7c690d09c92b9d42d0 is clean. Historical Windows/native-module reports stay at their original pins.

Immutable source/log/JUnit/control evidence, SHA-256 8cd459887f36477c0d43bb1ef4a3601ede91abb1a54dbc6c54ab43a4ed085c0d. No new Windows/macOS runtime, SDK-module/physical-console, title/GPU or speed claim.

AI-assisted: yes (Codex).

@TechLevelZero

Copy link
Copy Markdown
Contributor

❌ AMD GPU test: failed

PR head d6290ac merged onto main e772fb2 · tested 2026-11-05 14:23 UTC · 31 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 ❌ 3,935 passed · 18 failed (1 new: 1 fail on main with the PR's tests too, 10 also fail on main, 7 unstable on main) · 71 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 4,024 of 4,074 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 (1402 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_graphics 120.6 s, ⚠️ agc_driver_graphics_maps_fallback 120.1 s, ⚠️ agc_driver_pipeline_journal 120.1 s, ⚠️ agc_driver_lazy_resolved_abi_switch_set 67.5 s, ⚠️ agc_graphics_profile_draw 60.3 s

Failing tests

This PR changes test files, so each failing test was also built and run on main with only the PR's test changes applied. ✅ there means the failure comes from the PR's other changes; ❌ means the test fails on main too, so this run does not show the PR caused it.

Test With this PR Same test on main e772fb2 (main + this PR's test changes only)
agc_graphics_profile_draw ❌ failed ❌ also fails
agc_graphics_profile_draw: Timeout (also failed when re-run alone), assertion and diagnostics
ctest: Timeout

[guestmem] read 0 calls 0 MiB 0.0 s compare 0 calls 0 MiB 0.0 s write 0 calls 0 MiB 0.0 s write-changed 0 calls 0 MiB 0.0 s collect 0 calls 0 MiB 0.0 s verify 1 calls 0 MiB 0.0 s query 0 calls 0 MiB 0.0 s collect-memo hits 0, collect epochs 0 collect-dirty 0 tracker waits 0 / 0 | arena 0x10000+0xfbf
[textures] sampled created: 0 from storage images, 0 cleared on the GPU, 0 snapshots (0 snapshot reads over recorded writes inside cachedTexture, 0 storage-path fallbacks); stage-A records 0: 0 fast hits, 0 full lookups; storage images 0 hits, 0 created, 0 own-object refreshes; image tables 0 reused
[guestmem] read 62 calls 0 MiB 0.0 s compare 0 calls 0 MiB 0.0 s write 44 calls 0 MiB 0.0 s write-changed 5 calls 0 MiB 0.0 s collect 0 calls 0 MiB 0.0 s verify 1698 calls 56 MiB 0.0 s query 0 calls 0 MiB 0.0 s collect-memo hits 0, collect epochs 0 collect-dirty 0 tracker waits 0 / 71 | arena 0x1000
[guestmem] read 135 calls 6 MiB 0.0 s compare 0 calls 0 MiB 0.0 s write 44 calls 0 MiB 0.0 s write-changed 15 calls 0 MiB 0.0 s collect 0 calls 0 MiB 0.0 s verify 110137 calls 598 MiB 0.3 s query 0 calls 0 MiB 0.0 s collect-memo hits 0, collect epochs 0 collect-dirty 0 tracker waits 0 / 74705 | aren
[bufferpool] small: 0 hits, 0 misses, 0 evictions, 0 retained (0 MiB); large: 0 hits, 0 misses, 0 evictions, 0 retained (0 MiB); device: 0 hits, 0 misses, 0 evictions, 0 retained (0 MiB of 512); images: 0 hits, 0 misses, 0 evictions, 0 retained (0 MiB of 128)
[buffers] image mirrors: 0 ranges (0.0 MiB, 0 writable, 0 heap 0.0 MiB), 0 address-based builds served, 0 descriptor sub-ranges bound, 0 sparse heaps bound, 0 rebuilds, 33637 refreshes: 0 blocks compared, 0 copied, 0 refresh syncs; heap refills 0, unwatched heaps 33637, 0 heap mirrors evicted for bu
[descriptors] layouts 0 hits / 0 created, sets 0 from 0 pools and 0 dedicated pools, samplers 0 hits / 0 created
[dcc] 54 scans, 0.0 MiB scanned, 0 memo hits, 0 flush syncs, 0.0 ms; uncompressed keys stored: 0 on the GPU (0 with an unaligned head or tail), 17 on the CPU; key proofs: 0 proved, 0 scanned, 0 unstable
Unstable on main (7, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_graphics: failed in 3 of the last 10 main runs
agc_driver_graphics_maps_fallback: failed in 2 of the last 10 main runs
agc_driver_job_manager_compute_capacity: failed in 8 of the last 10 main runs
agc_driver_pipeline_journal: failed in 9 of the last 10 main runs
agc_driver_two_sample_alpha_to_coverage_sample_mask_export: failed in 5 of the last 10 main runs
agc_submit_progress: failed in 9 of the last 10 main runs
agc_submit_progress_no_timeline: failed in 9 of the last 10 main runs
Failing on main too (10, not counted against this PR)
agc_driver_alpha_to_coverage_sample_mask_export
agc_driver_guest_memory_lifetime_direct
agc_driver_image_table
agc_driver_native_depth_bda_clear
agc_driver_native_depth_buffer_clear
agc_driver_native_depth_clears
agc_driver_native_multisample_depth
agc_driver_submit_progress
guest_mmap_executable
guest_socket_options_multicast
Passed on retry (1, failed in the parallel run, passed when re-run with a 360 s timeout; not counted against this PR)
agc_driver_recorder: Timeout in the parallel run; also passed only on retry in 34 other runs in the last 7 days
Validation IDs already present on main (4 IDs in 805 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (805 tests): agc_compute_pipeline_replay, agc_driver, agc_driver_address_draw_space_reuse, agc_driver_address_draw_space_reuse_held, agc_driver_address_draw_space_reuse_off, agc_driver_address_draw_space_reuse_transitions, agc_driver_address_draw_space_reuse_verify, agc_driver_address_passes, and 797 more
VUID-vkCmdCopyImage-srcImage-01548 (11 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store_image_copy, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_partially_unmapped_plane, agc_driver_depth_plane_unmapped_plane, and 3 more
VUID-vkCmdCopyImage-srcImage-01551 (11 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store_image_copy, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_partially_unmapped_plane, agc_driver_depth_plane_unmapped_plane, and 3 more
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (2 tests): agc_driver_prepared_exports, agc_driver_srgb8_color_target
Skipped (71)
agc_driver_bda_reads_shadowed_results: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_bda_reads_shadowed_results_per_build: skipped, the device reports watched host memory written when it imports or reads it
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_copied_writer_label_order_drain: 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_float16_unused_nan_payloads: skipped, the device has no native f16 conversions with RTE rounding and kept f16 denormals
agc_driver_gcn_display_present: skipped, no display: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
agc_driver_image_table_vouched_lookups: skipped, the device reports 4 of 4 host-imported pages written after a GPU read, so a watched imported table cannot be vouched for
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
agc_driver_recorded_draw_staging: skipped, the device does not keep host imports write-watched, so the target is never resident
agc_driver_scattered_runs: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_sparse_dma_buf_import: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_unit_shadow: skipped, the device does not import watched host memory for unit shadows
agc_driver_unit_shadow_budget: skipped, the device does not import watched host memory for unit shadows
agc_driver_vertex_elected_atomic_max: skipped, the device runs vertex programs in subgroups, so they keep their cross-lane reductions
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_idle_publish_wait: skipped, the device reports 4 of 4 host-imported pages written after a GPU read, so a forced watch of the import reads its submissions as CPU stores
agc_import_settle_initial_dcc: skipped, the device has no deferred settle of host imports: imports under 1 MiB wait for one only on Windows
agc_shadowed_key_stores: skipped, the device imports no watched host memory under a unit shadow
agc_small_tiled_shadow_label: skipped, host imports are unavailable: the test block is not imported and watched
agc_storage_clear_hand_over: skipped, the device imports no watched host memory for the clear-key hand-over
agc_storage_pending_key_refresh: skipped, refreshes over a pending key store are not testable here
agc_unit_shadow: skipped, the device does not import watched host memory for unit shadows
agc_unit_shadow_completion_store: skipped, the device reports watched host memory written when it imports or reads it
guest_http_uri_locale: 
guest_net_ctl: skipped, the host has no IPv4 address
guest_net_ctl_disconnected: skipped, the host has no IPv4 address
guest_video_out_color_space: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_device_capability: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_hdr: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_high_frame_rate: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_host_resolution_disabled: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROL
Reproduce
git fetch origin d6290aca7acbe0bbbfeda37ef2f7a2564842124b e772fb25cc72ee5faf77847f06bbc69533016e82
git checkout e772fb25cc72ee5faf77847f06bbc69533016e82 && git merge --no-ff d6290aca7acbe0bbbfeda37ef2f7a2564842124b
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
# the failing tests, on this merge and on main:
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc_graphics_profile_draw)$' --parallel 1 -V

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.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants