Skip to content

fix(libc): fail a format byte from 0x80 up in sscanf_s as titles' libc.prx does - #12558

Open
JJenkx wants to merge 2 commits into
boykopovar:mainfrom
JJenkx:windows/libc-scanf-s-high-literal
Open

JJenkx wants to merge 2 commits into
boykopovar:mainfrom
JJenkx:windows/libc-scanf-s-high-literal

Conversation

@JJenkx

@JJenkx JJenkx commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

What

sscanf_s, vsscanf_s and the stream _s forms now treat a literal format byte from 0x80 up the way the libc.prx that titles ship does: it never matches. The scan stops there with the count so far, even when the input holds the same byte. That stop comes before the end-of-input check, so an empty input gives 0, not EOF. main matched such bytes literally. Most likely the titles decode format literals through the C-locale mbtowc, which rejects bytes from 0x80 up.

The "without this PR" column is a local build whose ScanSource literal branch is unchanged from main; the control in Tested checks main's own Formatting.cpp. Measured by calling the sscanf (1Pk0qZQGeWo) and sscanf_s (24m4Z4bUaoY) of PPSA07923 natively; plain sscanf behaves the same.

input format titles without this PR
80 \x80%n 0, %n not written 0, %n = 1
c3 a9 \xc3\xa9%n 0, %n not written 0, %n = 2
35 80 %d\x80%n 1, %n not written 1, %n = 2
61 62 5d 80 %[ab]]\x80%n 1, %n not written 1, %n = 4
(empty) \x80%n 0 EOF
7f \x7f%n matches (%n = 1) matches

It's a single check in ScanSource's literal branch. Plain sscanf on Windows still uses WindowsScanning.hpp; it picks this up when it's routed through ScanSource, which I'll do after #9087.

This is the last difference a local integration run found. That run combined this PR with #12507, #12530, #12532, #12428, #12468 and that routing, tested against the libc.prx of PPSA07923 and PPSA05916. Without this PR, 2 of 100,000 random scansets still differed, both with a high byte after the set. With it, that run gives 0 of 100,000 in both titles, for sscanf and sscanf_s.

Overlap: the source change doesn't touch the other PRs' lines. The new tests are inserted after the same line of core/libs/tests/Formatting.cpp as #12507's, so the two conflict textually there. The conflict is trivial (both blocks are kept), and whichever lands second takes it.

Tested

Windows 11 Enterprise 10.0.22621, Ryzen 9 5950X, WinLibs GCC 15.2.0 UCRT r7, Ninja, Release, BUILD_TESTING=ON, head 95a98f1ef4 on main 319621ba2e.

  • Native comparison: the 14 literal cases above and around them (including \xff, \xe9, a leading space, %d \x80) give 0 differences from the titles' sscanf_s with this build.
  • Unit tests: guest_formatting gains six of these cases through vsscanf_s. With main's Formatting.cpp, it fails.
  • Regression set: guest_formatting, guest_stdio_variadic, guest_scan_count, guest_wide_stream_scan, guest_wide_formatting, guest_wide_conversion, guest_strings, file_streams, guest_safe_errors and the guest_standard_streams* tests pass 3/3. Conventions pass.

Independent Windows validation reported by bunbeans2-arch for topic 95a98f1ef42a24e9f48a2a50be4d19a0d8cfb592 merged into main 409fe64199: Windows 11 Pro 22631, i9-9900K, MSYS2 UCRT64 GCC 16.1, Release. guest_formatting passes 5/5; retaining this PR's tests while restoring Formatting.cpp to main fails 5/5; plain main with its own source/tests passes 3/3. This is the contributor's run, not a new local Windows execution.

Checklist

🤖 Generated with Claude Code

…c.prx does

The libc.prx that titles ship (PPSA07923, PPSA05916) never matches a
literal format byte from 0x80 up, not even against the same input byte:
the scan stops there with the count so far, before the end-of-input
check, so an empty input gives 0 rather than EOF. The sscanf_s scanner
matched such bytes literally.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@adriadam10 adriadam10 self-assigned this Oct 28, 2026

@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 — changes requested

The parser change matches the title measurements and handles high-bit bytes without signed-char comparison, but the test hunk conflicts with open #12507 and the agreed landing order is not recorded.

What I ran

  • Reviewed PR head 95a98f1ef42a24e9f48a2a50be4d19a0d8cfb592 against main at 319621ba2e578bd053b0baba2877fe70520e0737.
  • git diff --check upstream/main...refs/review/pr-12558 — passed.
  • git merge-tree --write-tree upstream/main refs/review/pr-12558 — clean (6241cf3b2330a0b7109ba7ead32336e357744b2f).
  • git merge-tree --write-tree refs/review/pr-12507 refs/review/pr-12558 — content conflict in core/libs/tests/Formatting.cpp; the implementation file merges cleanly.
  • Inspected current checks: ASan, Ubuntu register-context, conventions, eligibility, intake, labels, and report pass. Windows, relinker platform jobs, macOS register-context, and write-watch jobs are pending; the Linux product job is skipped.

Findings

Blocking

  • The test insertion conflicts with open #12507 in core/libs/tests/Formatting.cpp. #12507 is already approved and changes adjacent scanner tests. CONTRIBUTING.md says overlapping PR authors should agree which lands first and declare the order with Depends on. The current description acknowledges the textual conflict but the checklist says Depends on: none; I found no explicit agreement with #12507's author. Please coordinate and record the order, then resolve/rebase the test block accordingly. This is an integration requirement; I found no separate defect in the one-line parser change.

Non-blocking

  • The PR supplies title-side comparisons, a main control, and focused Windows tests. Those results are author-reported; I did not reproduce them. The edge cases cover high-bit bytes, empty input, prior conversions, and a 0x7f control.

Not verified

  • I did not build or run guest_formatting locally.
  • Windows and several platform-specific CI jobs are still pending; the Linux product workflow is skipped.

To get this to a good state

  • Record the agreed order with #12507 and resolve the overlapping test insertion. Then rerun the relevant scanner tests and wait for the required CI checks.

@JJenkx

JJenkx commented Oct 28, 2026

Copy link
Copy Markdown
Contributor Author

Linux run at this PR's exact head 95a98f1ef4 (95a98f1ef42a24e9f48a2a50be4d19a0d8cfb592), not merged onto anything else; its base on main is 319621ba2e.

Arch Linux, kernel 7.2.9, Ryzen 9 7950X, g++ (GCC) 16.2.1 20260810, glibc 2.44, x86-64. Release, BUILD_TESTING=ON, Ninja -j4, private worktree.

  • ctest -R '^guest_formatting$': passes in each of 3 runs (3 passes).

@github-actions

github-actions Bot commented Oct 28, 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 5021 core/libs/tests/Formatting.cpp
PR 11332 core/libs/prx/libc/src/Formatting.cpp
core/libs/tests/Formatting.cpp
PR 11724 core/libs/prx/libc/src/Formatting.cpp
PR 11726 core/libs/prx/libc/src/Formatting.cpp
core/libs/tests/Formatting.cpp
PR 13486 core/libs/prx/libc/src/Formatting.cpp
core/libs/tests/Formatting.cpp

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

Re-checked — changes still requested

The test overlap with #12507 merges cleanly, but a direct merge preview confirms a source conflict with #9087, whose Windows sscanf routing this PR says it will follow; the order is not agreed or declared in the checklist.

What I ran

  • PR head: 95a98f1ef42a24e9f48a2a50be4d19a0d8cfb592; current main: 319621ba2e578bd053b0baba2877fe70520e0737.
  • git diff --check upstream/main...refs/review/pr-12558-current — passed (no output).
  • git merge-tree --write-tree upstream/main refs/review/pr-12558-current — clean, tree 6241cf3b2330a0b7109ba7ead32336e357744b2f.
  • git merge-tree --write-tree refs/review/pr-9087-current refs/review/pr-12558-current — conflict in core/libs/prx/libc/src/Formatting.cpp.
  • git merge-tree --write-tree refs/review/pr-12507-current refs/review/pr-12558-current — clean, tree d32ad0ee9f37770e92fd6fcfd697376df5607f96.
  • I read the exact diffs, latest description, and author-reported test results; I did not run this PR's tests locally.

Results

Check Result
Diff check Passed
Merge preview onto current main Clean
Pairwise preview with #9087 Content conflict in Formatting.cpp
Pairwise preview with #12507 Clean; the earlier test-insertion concern is not a blocker
Hosted Ubuntu/Windows relinker and ASan Passed
Hosted Ubuntu register-context Passed
Hosted Windows job Passed
Hosted macOS relinker/register-context/write-watch Queued at last check
Hosted Linux product tests Skipped
Focused formatting tests Author reports 3/3 on Linux and 3/3 on Windows; not independently rerun here
Raw merge and diff-check output
$ git merge-tree --write-tree upstream/main refs/review/pr-12558-current
6241cf3b2330a0b7109ba7ead32336e357744b2f
$ git merge-tree --write-tree refs/review/pr-12507-current refs/review/pr-12558-current
d32ad0ee9f37770e92fd6fcfd697376df5607f96
$ git merge-tree --write-tree refs/review/pr-9087-current refs/review/pr-12558-current
Auto-merging core/libs/prx/libc/src/Formatting.cpp
CONFLICT (content): Merge conflict in core/libs/prx/libc/src/Formatting.cpp
$ git diff --check upstream/main...refs/review/pr-12558-current
(no output; exit 0)

Negative control

Not independently run. The PR description reports that guest_formatting fails with main's Formatting.cpp while the PR test remains unchanged.

Findings

Blocking

  • The PR overlap with #9087 produces a content conflict in Formatting.cpp. The description says the Windows plain-sscanf path will be routed through ScanSource after #9087, while the checklist currently says Depends on: none. Please agree on the landing order with #9087's author and record the prerequisite/order in the checklist. If #9087 must land first for the planned Windows routing, list #9087 as a dependency and retain the focused regression when rebasing.

Non-blocking

  • The exact pairwise merge with #12507 is clean, so I am withdrawing the earlier concern that the two test insertions require a merge-order blocker. The author-provided Linux/Windows tests and title comparisons are useful evidence, but I have not reproduced them locally.

Sources

Not verified

I did not independently run guest_formatting, the Windows title comparison, or the reported random-scan integration. macOS CI was still queued; the Linux product workflow is skipped.

To get this to a good state

Coordinate and record the order with #9087, preserving the test and behavior when the conflicting hunks are integrated. I will recheck the exact updated head and rerun the focused formatting test.

@JJenkx

JJenkx commented Oct 28, 2026

Copy link
Copy Markdown
Contributor Author

@MarcZX10 the order with #9087 is now agreed and recorded in the checklist: orezraey confirmed that #9087 lands first and this PR rebases after it. The checklist now lists Depends on: #9087.

The resolution keeps #9087's mismatch line unchanged and puts this PR's >= 0x80 check just before it, which orezraey confirmed keeps both behaviours. I tested it on Windows (WinLibs GCC 15.2.0 UCRT r7, Release): #9087 ec862a495a merged with this head 95a98f1ef4, then guest_formatting, guest_stdio_variadic, guest_scan_count, guest_wide_stream_scan and guest_wide_formatting pass 3/3. The head is unchanged; I'll rebase once #9087 lands.

AI-assisted: yes (Claude Code).

@github-actions github-actions Bot added the libc label Oct 29, 2026

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

Re-checked — approved

The author has resolved the outstanding overlap concern: #9087’s author confirmed the order, this PR now declares Depends on: #9087, and the reported Windows integration run tested both heads together. I reviewed the current diff and verified the PR remains clean against current main; the dependency still prevents merging until #9087 is handled.

What I ran

  • Refreshed exact PR head, review history and hosted CI.
  • Reviewed the current PR diff and the updated overlap checklist.
  • Compared current-main and #9087 pairwise merge previews; ran git diff --check.
  • Did not build or run the tests locally.

Results

Check Result
Current-main merge preview Clean
Pairwise merge with #9087 Clean
git diff --check Pass
Hosted Windows, conventions, eligibility, labels, relinker, ASan, register-context and write-watch Passed
Hosted Linux product job Skipped
Author-reported Windows integration tests Five focused tests passed 3/3 on #9087 + this exact head
Author-reported Linux test guest_formatting passed 3/3 on this exact head
Unedited local check output
$ git merge-base upstream/main refs/review/upstream-12558
319621ba2e578bd053b0baba2877fe70520e0737
$ git rev-list --left-right --count upstream/main...refs/review/upstream-12558
270 1
$ git merge-tree --write-tree upstream/main refs/review/upstream-12558
6302eb58966c66dbe3c0ea9a72f8af4ca0cbc5da
$ git merge-tree --write-tree refs/review/upstream-9087 refs/review/upstream-12558
72e0c284c9e6eca16e75c9e1b3beb0455d6a0b27
$ git diff --check upstream/main...refs/review/upstream-12558
(no output; exit status 0)
$ git diff --name-status 319621ba2e578bd053b0baba2877fe70520e0737..upstream/main -- formatting/stdio paths touched by this PR
(no output)

Negative control

Not run independently in this re-check. The author’s focused integration report compares both PRs together; the earlier base/control evidence remains author-reported.

Findings

Blocking

None found in the current diff. The declared prerequisite #9087 remains open, so this approval does not indicate that the PR is ready to merge ahead of its dependency.

Non-blocking

The branch is 270 commits behind current main, but the intervening upstream commits do not touch this PR’s formatting source or test paths, and the current-main merge preview is clean.

Sources

Not verified

I did not independently reproduce the Windows or Linux test reports.

@bunbeans2-arch

Copy link
Copy Markdown
Contributor

A Windows run with GCC 16: Windows 11 Pro 10.0.22631, i9-9900K, MSYS2 UCRT64 GCC 16.1.0, Release, this PR (95a98f1ef4) merged into main 409fe64.

  • With this PR: guest_formatting passed 5 of 5.
  • Same tree with only Formatting.cpp put back to main (this PR's tests kept): it failed with Formatting check failed, in 5 of 5 runs.
  • main 409fe64 alone (its own tests and source): the same tests passed 3 of 3, so the failure above comes from the checks this PR adds.

AI-assisted: yes (Claude Code)

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Nov 5, 2026
…high-literal

# Conflicts:
#	core/libs/tests/Formatting.cpp
@JJenkx

JJenkx commented Nov 5, 2026

Copy link
Copy Markdown
Contributor Author

Refreshed onto main e772fb25cc (merge c4241481e3). The conflict was in core/libs/tests/Formatting.cpp, where main added checks next to this PR's. I kept main's file and re-added this PR's scoped block of high-byte literal checks after the same ScanListS("0b1", ...) line. The merge differs from main in exactly this PR's two files, with the same line counts as its own diff.

Windows, WinLibs GCC 15.2 UCRT, Release:

  • Formatting tests: guest_formatting and guest_wide_formatting pass in 3 of 3 runs, none skipped.
  • Negative control: with main's Formatting.cpp, one of the two fails.
  • Conventions: tools/check_conventions.py passes.

AI-assisted: yes.

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

Copy link
Copy Markdown
Contributor

❌ AMD GPU test: failed

PR head c424148 merged onto main e772fb2 · tested 2026-11-05 13:23 UTC · 33 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,937 passed · 16 failed (1 new: 1 pass on main with the PR's tests, 10 also fail on main, 5 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_pipeline_journal 120.1 s, ⚠️ agc_driver_graphics_maps_fallback 109.6 s, ⚠️ agc_driver_graphics 93.0 s, ⚠️ agc_graphics_profile_draw 60.4 s, ⚠️ public_headers 59.8 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 ✅ passed
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 102 calls 3 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 2006 calls 149 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 / 237 | arena 0x
[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.2 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 (5, these also failed in recent main runs on this machine; not counted against this PR)
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
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 c4241481e3efa4ff09710c3143cb01384631519f e772fb25cc72ee5faf77847f06bbc69533016e82
git checkout e772fb25cc72ee5faf77847f06bbc69533016e82 && git merge --no-ff c4241481e3efa4ff09710c3143cb01384631519f
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.

@JJenkx

JJenkx commented Nov 5, 2026

Copy link
Copy Markdown
Contributor Author

Linux check of exact head c4241481e3. Arch Linux 7.2.11, GCC 16.2.1, Release, BUILD_TESTING=ON.

guest_formatting and guest_wide_formatting pass in 3 of 3 runs each (ctest --repeat until-fail:3), none skipped. These are the tests the Windows refresh ran.

AI-assisted: yes

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants