Skip to content

fix(diagnostics): open VideoOut telemetry and sampler files under any Unicode path on Windows - #12996

Merged
adriadam10 merged 2 commits into
boykopovar:mainfrom
JJenkx:windows/diagnostics-unicode-paths
Oct 30, 2026
Merged

adriadam10 merged 2 commits into
boykopovar:mainfrom
JJenkx:windows/diagnostics-unicode-paths

Conversation

@JJenkx

@JJenkx JJenkx commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

What

Four diagnostic paths were read with getenv and opened with the narrow fopen/ofstream: APS5_VIDEOOUT_TELEMETRY_DIR in VideoOut, and APS5_SAMPLE_THREADS, APS5_SAMPLE_WORKER and APS5_SAMPLE_COMMITTER in the AGC worker sampler. On Windows both sides use the ANSI code page, so these worked only for characters in it. A directory such as C:\x\東京テスト on a code-page-1252 system could not be opened. Their tests also fail whenever %TEMP% is not ASCII, because they pass a UTF-8 std::filesystem::path::string() into those APIs (follow-up to #12993, which fixes the pure test bugs).

The other diagnostic directories already read the wide environment and use std::filesystem::path: ANYPS5_SCREENSHOTS, APS5_DUMP_SUBMITS, APS5_DUMP_COMPUTE_PIPELINES, APS5_PAD_INPUT_FILE and APS5_TRACE_CALLS_FILE. This makes these four match:

  • VideoOut telemetry: Instance() takes the directory from _wgetenv(L"APS5_VIDEOOUT_TELEMETRY_DIR") as UTF-8 (getenv elsewhere). Writer opens videoout.jsonl through std::filesystem::path(u8 directory). Its std::string directory is UTF-8 on every host, so the existing test, which passes directory.string(), now works unchanged.
  • Worker sampler (Windows-only code): each variable is read with _wgetenv(L"…") and kept as a UTF-8 std::string, and the three output files, including the collapsed-stacks temporary, are opened with _wfopen through std::filesystem::path, and the temporary is published with MoveFileExW (was MoveFileExA, found in review). Its test now sets the variables with _wputenv_s and reads the files through std::filesystem::path, instead of narrow strings that the C runtime would read as ANSI. In the worker modes it also checks the published .collapsed.txt header and that its .tmp is gone.

Nothing changes for an ASCII path.

Tested

Windows 11 Enterprise 10.0.22621 (code page 1252), WinLibs GCC 15.2.0 UCRT r7, Ninja, Release, BUILD_TESTING=ON, no Vulkan driver visible, this head (ec7d2f5b85) on main 58b2753d74.

TEMP main 184afa49ad this PR
C:\x\tëmpünï 4 of 4 fail 4 of 4 pass, 3 of 3 runs each
C:\x\東京テスト (outside code page 1252) 4 of 4 fail 4 of 4 pass, 3 of 3 runs each
normal profile TEMP pass 4 of 4 pass, 3 of 3 runs each

The four tests are video_out_telemetry, agc_worker_sampler_default, agc_worker_sampler_selected and agc_worker_sampler_process (ctest --repeat until-fail:3). The full build succeeded at the first head (74ec7311f1); the review fix touches only WorkerSampler.cpp and its test, whose targets build at this head. With the previous MoveFileExA and the new test, agc_worker_sampler_default and _selected fail under both non-ASCII TEMP values, so the test covers the publication step.

  • python tools/check_conventions.py --base origin/main: all checks passed. Each variable is still read by a literal _wgetenv(L"…") call, so the docs/dev/ENVIRONMENT.md reference check keeps finding them.
  • Not run here: Linux and macOS. The sampler change is inside its _WIN32 block. Telemetry there now opens through std::filesystem::path of the same bytes and still reads getenv.

Independent Windows validation, reported by bunbeans2-arch for topic ec7d2f5b85ffa83dc05d71051ba824177c1d7531 against main f7f03daf52: Windows 11 Pro 22631, i9-9900K, MSYS2 UCRT64 GCC 16.1, Release. Four telemetry/sampler tests pass 3/3 for each of the é and outside-code-page Ж temporary paths, while main fails 3/3; normal-profile controls pass. The separately reported host std::tmpfile() failures concern #13083/#13104. This is the contributor's run, not a new local Windows execution.

Checklist

🤖 Generated with Claude Code

… Unicode path on Windows

APS5_VIDEOOUT_TELEMETRY_DIR, APS5_SAMPLE_THREADS, APS5_SAMPLE_WORKER and
APS5_SAMPLE_COMMITTER were read with getenv and opened with the narrow
fopen/ofstream, so on Windows they worked only for characters in the
ANSI code page, and the tests, which pass UTF-8 path.string() values,
failed whenever %TEMP% was not ASCII.

They are now read with _wgetenv and carried as UTF-8, as the other
diagnostic directories (ANYPS5_SCREENSHOTS, APS5_DUMP_SUBMITS,
APS5_PAD_INPUT_FILE) already are, and the files are opened through
std::filesystem::path. The worker sampler test sets its variables with
_wputenv_s and reads the results through std::filesystem::path.

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

Copy link
Copy Markdown
Collaborator

Thanks for fixing the wide environment reads and file opens. One publication step still uses the narrow API: WorkerSampler.cpp:225 calls MoveFileExA(temporary.c_str(), collapsed.c_str(), ...) after the temporary file was created with _wfopen from a UTF-8 path. On code page 1252 the A call interprets those UTF-8 bytes differently, so a Unicode parent directory leaves the .collapsed.txt.tmp file unpublished. This also affects non-ASCII names that previously fit the ANSI code page, since the stored path is now UTF-8. Please convert both paths back to native wide filesystem paths and call MoveFileExW, keeping replacement behavior. Extend the Windows sampler regression to read the final .collapsed.txt (not only the primary worker/process text), check its header/content and that publication consumed the temporary file. Run under both accented and out-of-code-page TEMP paths. The current test only checks the primary text files, so its passing result misses this step.

…FileExW

The collapsed-stacks file is written to a .tmp next to it and then moved
over the final name. That move still used MoveFileExA with the UTF-8
path, so under a non-ASCII directory the .tmp was never published.
Both paths now go through std::filesystem::path and MoveFileExW, with
the same MOVEFILE_REPLACE_EXISTING.

The worker sampler test now also reads the published .collapsed.txt,
checks its "# samples=N" header with N > 0, and checks that the .tmp is
gone.

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

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 7622 core/libs/prx/libSceAgcDriver/Execution/src/WorkerSampler.cpp L281-283

@JJenkx

JJenkx commented Oct 29, 2026

Copy link
Copy Markdown
Contributor Author

@oneandonlydean thanks, you're right. Fixed in ec7d2f5b85.

  • WorkerSampler.cpp: a NativePath helper turns the stored UTF-8 string into a std::filesystem::path. OpenForWriting uses it, and the publication step is now MoveFileExW(NativePath(temporary).c_str(), NativePath(collapsed).c_str(), MOVEFILE_REPLACE_EXISTING). No other narrow path call is left in the file. The remaining …A calls are GetModuleHandleExA with FROM_ADDRESS, which take an address rather than a path.
  • The test now also reads the published -worker.collapsed.txt, requires its first line to parse as # samples=N with N > 0, and requires the .tmp to be gone. It expects that only in the worker modes (default, selected), since process writes no collapsed file.

Windows 11 22621 (code page 1252), GCC 15.2 UCRT, ctest --repeat until-fail:3:

TEMP ec7d2f5b85 (4 tests) control: previous WorkerSampler.cpp (MoveFileExA) with the new test
C:\x\tëmpünï 4 of 4 pass agc_worker_sampler_default and _selected fail, _process passes
C:\x\東京テスト 4 of 4 pass _default and _selected fail, _process passes
normal profile TEMP 4 of 4 pass 3 of 3 pass

So the extended test catches the unpublished .tmp you described, and the fix publishes it. Conventions pass, and the PR description's table still holds for the four tests.

AI-assisted: yes (Claude Code).

@JJenkx

JJenkx commented Oct 29, 2026

Copy link
Copy Markdown
Contributor Author

Linux run at this PR's exact head ec7d2f5b85 (ec7d2f5b85ffa83dc05d71051ba824177c1d7531), not merged onto anything else; its base on main is 58b2753d74.

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.

  • video_out_telemetry: passes in each of 3 runs.
  • video_out_telemetry_caption: skipped in each run (exit 77, "no display or Vulkan device"). CMake runs it with SDL_VIDEODRIVER=offscreen, and this CPU-only run had no Vulkan window, so it is not covered here.
  • agc_worker_sampler_*: CMake registers these only on Windows, so they don't exist on Linux.

The non-Windows branch of the new configuredDirectory() and the UTF-8 path open in Telemetry.cpp build on Linux, and video_out_telemetry passes with them. I didn't check whether that test reaches the file-open path.

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

The Unicode-path fix and current-main merge check look sound, but this branch conflicts with open #7622 and its checklist still says Depends on: none.

What I ran

  • PR head: ec7d2f5b85ffa83dc05d71051ba824177c1d7531.
  • Base: upstream/main at d820fef1827f27247cd28da7b4eec7891904bae5; current-main merge preview was clean (b79f05d677514ef6af50495a011eaa8e6eb8334a). No touched paths changed on main after the reported comparison base 58b2753d74.
  • Environment: Linux x86_64; no local build or platform tests run.
git diff --check upstream/main...refs/review/pr-12996-head
git merge-tree --write-tree upstream/main refs/review/pr-12996-head
python tools/check_conventions.py --base upstream/main --head refs/review/pr-12996-head
git merge-tree --write-tree refs/review/pr-12996-head refs/review/pr-7622-head
git diff --name-only 58b2753d74...upstream/main -- core/libs/prx/libSceAgcDriver/Execution/src/WorkerSampler.cpp core/libs/prx/libSceAgcDriver/tests/WorkerSampler.cpp core/libs/prx/libSceVideoOut/src/Telemetry.cpp

Results

Check Result
Patch whitespace Pass; command exited 0 with no output.
Current-main merge preview Pass; clean tree b79f05d677514ef6af50495a011eaa8e6eb8334a.
Repository conventions Pass.
Pairwise integration with #7622 Conflict in core/libs/prx/libSceAgcDriver/Execution/src/WorkerSampler.cpp; both PRs remain open.
Hosted CI Windows product, eligibility, conventions, labels, and report checks passed; Linux and specialized jobs were skipped.
Platform tests The PR reports Windows non-ASCII TEMP tests passing 4/4 in three runs, including the collapsed-file publication check. It also reports the Linux telemetry test passing. These results are author-reported, not independently reproduced here.
Unedited local command output

python tools/check_conventions.py --base upstream/main --head refs/review/pr-12996-head

All conventions checks passed.

git merge-tree --write-tree upstream/main refs/review/pr-12996-head

b79f05d677514ef6af50495a011eaa8e6eb8334a

git diff --check upstream/main...refs/review/pr-12996-head exited 0 with no output. The comparison of changed paths since 58b2753d74 also produced no output.

The pairwise merge preview exited 1 and reported:

CONFLICT (content): Merge conflict in core/libs/prx/libSceAgcDriver/Execution/src/WorkerSampler.cpp

Findings

Blocking

  • Undeclared overlap with #7622: The pairwise merge preview conflicts in WorkerSampler.cpp, while this PR says Depends on: none. The current repository rule requires authors to agree which overlapping PR goes first and record that order with Depends on (pinned contribution rule). Please coordinate the order with #7622's author and update the dependency line; then I can recheck the combined merge.

Non-blocking

  • No additional blocker found in the source-level review. The reported Windows and Linux test runs were not independently reproduced here.

Not verified

  • I did not build or run platform tests locally. Linux and specialized hosted jobs were skipped.

To get this to a good state

Please record the agreed order for the overlapping PRs in Depends on. I will rerun the merge checks and review the updated head.

@JJenkx

JJenkx commented Oct 30, 2026

Copy link
Copy Markdown
Contributor Author

@MarcZX10 thanks. The overlap with #7622 is a single line. In StartProcessSampler, #7622 changes std::jthread( to Libc::StartHostJThread(, and this PR changes the same lambda's capture from [path = std::string(path)] to [path = *path], since the path is now a std::optional<std::string> read through _wgetenv. The StartCallingThreadSampler hunk merges cleanly; both PRs only touch its line separately.

I propose this PR lands first: it's three files, and #7622 is much broader. #7622 then resolves that line to processSamplerThread = Libc::StartHostJThread([path = *path](std::stop_token token) {. If you'd rather #7622 go first, say so, and I'll merge it into this branch once it lands and take your StartHostJThread there. I've recorded the proposed order in Depends on (merge order only).

AI-assisted: yes (Claude Code).

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head ec7d2f5 merged onto main f6fddd6 · tested 2026-10-30 03:53 UTC · 22 min

GPU NVIDIA RTX 2000 Ada Generation, driver 595.99.02, Vulkan 1.4.329
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-38-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 2,338 passed · 5 failed (0 new, 2 also fail on main, 3 unstable on main) · 41 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 2,384 of 2,950 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 (901 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_bda_device 62.5 s
Unstable on main (3, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_submit_progress: failed in 5 of the last 7 main runs
agc_submit_progress: failed in 5 of the last 7 main runs
agc_submit_progress_no_timeline: failed in 6 of the last 7 main runs
Failing on main too (2, not counted against this PR)
guest_mmap_executable
guest_socket_options_multicast
Validation IDs already present on main (4 IDs in 427 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (427 tests): agc_compute_pipeline_replay, agc_driver, agc_driver_address_passes, agc_driver_address_passes_draw_transitions, agc_driver_address_passes_targets_split, agc_driver_alias_copy_label, agc_driver_array_layer_target_cpu, agc_driver_bda_span_reads_draw_pipeline, and 419 more
VUID-vkCmdCopyImage-srcImage-01548 (11 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, 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, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_storage_dispatch, and 3 more
VUID-vkCmdCopyImage-srcImage-01551 (11 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, 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, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_storage_dispatch, and 3 more
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (2 tests): agc_driver_prepared_exports, agc_driver_srgb8_color_target
Skipped (41)
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_msaa_dcc_compared_import_2: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
agc_driver_msaa_dcc_compared_import_4: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
agc_driver_msaa_dcc_compared_import_8: skipped, the device reports host imports that keep write protection, so the write-watch probe compares none of them
agc_driver_sample_order_grid_reference: skipped, the device does not keep depth drawn at custom sample locations at those locations, even after a transition that names them: the composite of uniform renders holds the guest's depth in 0 of 3005 sloped samples, so no path can be compared with it bit for bit
agc_driver_sparse_dma_buf_import: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_stencil_ref_export: skipped, the device lacks VK_EXT_shader_stencil_export
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_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_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_controls: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip_in_order: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop_main: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_fresh: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or plat
Reproduce
git fetch origin ec7d2f5b85ffa83dc05d71051ba824177c1d7531 f6fddd60d826831f70f7c62e25423610ee742bcc
git checkout f6fddd60d826831f70f7c62e25423610ee742bcc && git merge --no-ff ec7d2f5b85ffa83dc05d71051ba824177c1d7531
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 32 --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 4 --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 NVIDIA machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs.

@MarcZX10

Copy link
Copy Markdown
Contributor

Re-checked — merge order agreed

I agree with the proposed order: #12996 first, then #7622 can retain the Libc::StartHostJThread wrapper with the [path = *path] capture; this records merge order only and does not merge either PR.

@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 — new head, looks good

The Windows path publication fix and regression are present, the proposed overlap order is now agreed, and the current-main preview and non-build checks pass.

What I ran

  • Exact PR head: ec7d2f5b85ffa83dc05d71051ba824177c1d7531; PR base: 184afa49adce16e298c47d136706fd2356198852.
  • Compared against current main 5ecef095b61e7a406b279c97896f3a8a6fbd6353; the preview merged cleanly as tree 76a793b90747a855c7490f47727855dd0b8a7793.
  • Environment: Linux x86_64; no compiler or local build/test run.
git merge-tree --write-tree upstream/main refs/review/pr-12996-current
git diff --check upstream/main...refs/review/pr-12996-current
python tools/check_conventions.py --base upstream/main --head refs/review/pr-12996-current
git diff --name-status 58b2753d74...upstream/main -- core/libs/prx/libSceAgcDriver/Execution/src/WorkerSampler.cpp core/libs/prx/libSceAgcDriver/tests/WorkerSampler.cpp core/libs/prx/libSceVideoOut/src/Telemetry.cpp

Results

Check Result
Current-main merge preview Clean; tree 76a793b90747a855c7490f47727855dd0b8a7793
git diff --check Passed; no output
Repository conventions Passed
Changed paths since reported comparison base None in the three relevant paths
Hosted Windows job Passed on exact head
Hosted Linux product job Skipped
Focused Windows and Linux tests Author reports the Windows Unicode-TEMP cases and Linux telemetry test passed on exact head; I did not independently run them.
Overlap coordination I agreed in the PR thread to #12996 first, then #7622; this is merge order only.
Unedited local command output
$ git merge-tree --write-tree upstream/main refs/review/pr-12996-current
76a793b90747a855c7490f47727855dd0b8a7793
$ python tools/check_conventions.py --base upstream/main --head refs/review/pr-12996-current
All conventions checks passed.

git diff --check and the changed-path comparison exited 0 with no output.

Findings

Blocking

None found. The publication path now uses MoveFileExW with native wide paths, and the Windows regression checks the collapsed file and temporary-file removal under Unicode temporary paths.

Non-blocking

Linux product CI is skipped. The focused Linux test result is author-reported, not independently run here.

Not verified

I did not run local builds or tests, and did not test on macOS or console hardware.

@github-actions github-actions Bot added prx agc libSceAgc* labels Oct 30, 2026
@bunbeans2-arch

Copy link
Copy Markdown
Contributor

Windows run with a non-ASCII TEMP. The PR head ec7d2f5b85 was merged onto main f7f03da.

Windows 11 Pro 10.0.22631 (code page 1252), i9-9900K, MSYS2 UCRT64 GCC 16.1.0, Release, BUILD_TESTING=ON. 3 runs per TEMP, ctest -j 2.

TEMP=TMP= video_out_telemetry, agc_worker_sampler_default, _selected, _process main this PR
...\e_é 4 tests fail 3/3 pass 3/3
...\zh_Ж (outside code page 1252) 4 tests fail 3/3 pass 3/3
normal profile 4 tests, plus agc_worker_sampler_unselected pass pass

This matches your 東京テスト result, here on MSYS2 GCC 16.1 instead of WinLibs 15.2.

Separate from this PR: 16 other tests abort under the Ж TEMP because host std::tmpfile() returns NULL there (#13083). #13104 covers 15 of them in different files, so it does not overlap with this PR.

AI-assisted: yes (Claude Code)

@adriadam10
adriadam10 merged commit e7529df into boykopovar:main Oct 30, 2026
17 of 19 checks passed
@adriadam10

Copy link
Copy Markdown
Collaborator

Checked the wide env reads, the _wfopen/std::filesystem::path opens, the MoveFileExW publication (Dean's point, fixed in ec7d2f5b85) and the extended sampler test; Windows and Conventions jobs are green and the merge onto current main is clean. #7622 touches different lines of WorkerSampler.cpp and is not a dependency; whichever lands second rebases. Merged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agc libSceAgc* prx

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants