Repository navigation
fix(tests): run syslog, console identity, Audio3d and shader cache directory tests under a Unicode TEMP on Windows - #13758
Conversation
|
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.
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.
|
✅ NVIDIA GPU test: passedPR head
Unstable on main (2, these also failed in recent main runs on this machine; not counted against this PR)Validation IDs already present on main (3 IDs in 185 tests)Skipped (9)ReproduceAutomated 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. |
… TEMP on Windows With %TEMP% holding a character outside the ANSI code page, two Windows tests still abort: - guest_syslog captures stderr through std::tmpfile(), which returns NULL there (boykopovar#13083). It now opens the capture with TemporaryFile::Open(), as the other libc tests do since boykopovar#13104. - guest_kernel_sys_console_identity starts its PS4 child with std::system and a command built from directory.string() and argv[0]. Both are narrow, so `cd /d` gets '?' in place of the character and fails. On Windows the command is now built from directory.wstring() and GetModuleFileNameW and run with _wsystem, as AsyncLog's child does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… Unicode TEMP on Windows agc_pipeline_cache_header and agc_driver_lazy_resolved_abi passed ANYPS5_SHADER_CACHE_DIR through the narrow _putenv_s with path::string(), which is UTF-8 in MinGW's libstdc++. The driver reads the variable wide, so under a TEMP outside the ANSI code page it got a mangled directory: the header test's directory scan threw, and the lazy test found no cache files where it looked. On Windows both tests now set it with _wputenv_s from the wide path. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d on Windows guest_audio3d_port reruns its own executable from a temporary directory, and built the command from directory.string() and argv[0] for std::system. Under a TEMP with characters outside the active code page the narrow command lost them, cmd.exe could not change into the directory, and the test aborted at "the PS4 process checks must pass". On Windows the command is now built from directory.wstring() and the module's own path from GetModuleFileNameW, and run with _wsystem, as the console identity test does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3dd3b53 to
eab4fef
Compare
✅ NVIDIA GPU test: passedPR head
Validation IDs already present on main (3 IDs in 184 tests)Skipped (9)ReproduceAutomated 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. |
|
Checked the diff: |
What
With
%TEMP%holding a character outside the ANSI code page, Windows tests still abort. All of these are test-side problems:guest_syslogcaptures stderr throughstd::tmpfile(). That returnsNULLthere (Tests: 16 tests abort when TEMP has a character outside the ANSI code page (host std::tmpfile returns NULL) #13083) because the UCRT builds its path withGetTempPathA. It now opens the capture withTemporaryFile::Open()(tests/TemporaryFile.hpp), as the other libc tests have done since fix(tests): open scratch streams under a Unicode TEMP on Windows #13104. After fix(tests): open AGC and SceNet scratch streams under a Unicode TEMP on Windows #13704, this is the laststd::tmpfile()call in a test.guest_kernel_sys_console_identitystarts its PS4 child withstd::systemand a command built fromdirectory.string()andargv[0]. Both are narrow, socd /dreceives?in place of the character and fails ("The system cannot find the path specified"). On Windows the command is now built fromdirectory.wstring()andGetModuleFileNameWand run with_wsystem, asAsyncLog's child does. The other platforms keepstd::system.guest_audio3d_portreruns itself as a PS4 process the same way:std::systemwithcd /dand a command built fromdirectory.string()andargv[0]. On Windows it now builds the command fromdirectory.wstring()andGetModuleFileNameW, and runs it with_wsystem, as the console identity test does (third commiteab4fef05c).agc_pipeline_cache_headerandagc_driver_lazy_resolved_abi(+_switch_set) passANYPS5_SHADER_CACHE_DIRthrough the narrow_putenv_swithpath::string(), which is UTF-8 in MinGW's libstdc++. The driver reads the variable wide (ShaderDiskCache.cpp,_wgetenv), so it got a mangled directory. The header test's directory scan threw afilesystem_error, and the lazy test's reference process saved its cache under the mangled name and the test found no files. On Windows both now set the variable with_wputenv_sfrom the wide path (second commit).Tested
Windows 11 Enterprise 10.0.22621 (ANSI code page 1252), Ryzen 9 5950X, WinLibs GCC 15.2.0 UCRT r7, Ninja, Release,
BUILD_TESTING=ON. Same build directory for both commits.TEMPandTMPset toC:\Users\Windows\AnyPS5-agent\work\Темп-тест, withctest -R "^(guest_syslog|guest_kernel_sys_console_identity)$" --repeat until-fail:3:main0835ec8bdcguest_syslog0xc0000409)guest_kernel_sys_console_identity0xc0000409)TEMP, both pass 3/3 with this PR.Shader cache directory (second commit
3dd3b532b5), on the RX 6700 XT (AMD 26.10.1), VVL 1.4.309, sameTEMP,--repeat until-fail:3:0835ec8bdcagc_driver_lazy_resolved_abiagc_driver_lazy_resolved_abi_switch_setagc_pipeline_cache_headerfilesystem_error)cannot open a temporary file for stderragc_pipeline_cache_headeralso captures stderr throughstd::tmpfile()inRecorder.cpp, which #13704 fixes. With both, it passes.Audio3d PS4-process child (third commit
eab4fef05c), on the rebased branch,main73f4f7e06e. Same build directory for both; I put back onlyGuestAudio3dPort.cppfrommainfor the control, then restored it. Each ran--repeat until-fail:3:main's test fileguest_audio3d_port, UnicodeTEMP0xc0000409)guest_audio3d_port, normalTEMPI found this one in a full-suite run with the Unicode
TEMPonmain8f55414024: "The system cannot find the path specified", then "the PS4 process checks must pass". It passed with the normalTEMP. In that run every other failure that appears only under the UnicodeTEMPis either in a file #13704 changes, avideo_out_flip_*test (the display was off), or a tool test whose MinGWobjdump/compiler receives the path in the ANSI code page.I found the first ones in a full GPU-suite run with that
TEMPon #13704's head (3,159 entries). Its other native failures:video_out_flip_*failed because the display was off;ngs2_pitchshift,guest_filesystemandagc_driver_sample_order_grid_referencefail onmaintoo and have open fixes;agc_driver_skip_shader_fileis a product-side path bug, fixed separately in fix(agc): read APS5_SKIP_SHADER_FILE as a wide path on Windows #13762;agc_performance_overlaytimed out with eitherTEMP. Its 30 s budget was taken byK32GetPerformanceInfocalls, which fix(agc): read the overlay's commit charge without a system-wide scan #13788 replaces. It is notTEMP-related.main73f4f7e06e(headeab4fef05c). The first two commits came over unchanged, and their results above are from before the rebase.python tools/check_conventions.py --base origin/main: all checks passed.GuestKernelSysConsoleIdentity.cppandGuestAudio3dPort.cppchange;GuestSyslog.cppuses the helper, which returnsstd::tmpfile()off Windows.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)agc_pipeline_cache_headeradditionally needs fix(tests): open AGC and SceNet scratch streams under a Unicode TEMP on Windows #13704 to pass under a non-ANSITEMP). fix(libc): restore syslog program-name fallback #9929 also editsGuestSyslog.cpp(lines 16–17, syslog program-name fallback); the two do not implement the same thing, and whichever lands second needs a small rebase.🤖 Generated with Claude Code