Commit Graph
14017 Commits
Author SHA1 Message Date
Pedro 43a460cc66 fix(videoout): report GPU driver shutdown failure from the present thread at Shutdown
presentLoop called AgcDriverShutdown outside its try block, so a stored
worker failure rethrown there terminated the process. Store it in
flipQueue->failure so VideoOutDriver::Shutdown rethrows it after the join.

Register the lifetime, decode and controls modes of video_out_flip_tests
in ctest.
2026-10-09 06:53:27 -05:00
darhebkf 357d4d3e8b fix(tools): check overlap against every open pull request 2026-10-09 13:49:20 +02:00
kali113 d5241d282f fix(relinker): give Linux guest modules a default non-executable stack 2026-10-09 13:45:37 +02:00
Petre Buia 7dc3a067d1 test(agc): flush shader cache writes before removing test files 2026-10-09 13:45:09 +02:00
kali113 68072d6050 test(agc): bound storage cache budget regression workload 2026-10-09 13:44:25 +02:00
Zheorgyan eec5c18279 fix(libc): define APS5_LOG_OUT_DEBUG when APS5_DEBUG_LOG is set 2026-10-09 13:42:51 +02:00
darhebkf a00559a222 fix(tools): preserve function bodies after line comments 2026-10-09 13:42:24 +02:00
Rohan03xandClaude Opus 5.5 a8bc85c5f4 build: skip the FreeType version resource so Windows builds work in paths with spaces
MinGW windres passes -I paths to cc1 with backslash-escaped spaces and
parentheses, so compiling 3rdparty/freetype/src/base/ftver.rc fails when
the checkout or build path contains them. FreeType is linked as a static
library and the resource object is never pulled into an output, so it is
removed from the target's sources on Windows.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 22:36:46 +11:00
Rohan03xandClaude Opus 5.5 39055977e6 docs(usage): list the MinGW runtime DLLs a self-built libs directory needs
The built Windows libraries import libgcc_s_seh-1.dll, libstdc++-6.dll and
libwinpthread-1.dll, and the entry stub loads them without searching PATH.
The release archives ship the DLLs in libs/, but the runtime layout only
told self-builders to copy the .prx files, which ends in error 126.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 22:36:45 +11:00
XairRrR 8b7ff670a7 fix(recompiler): bind the rect-list fault buffer in the tessellation control group
The rect-list control and evaluation shaders put their fault buffer one
past the highest vertex or fragment binding. Bindings are grouped per
stage (RuntimeAbi::BindingNumber), so that number could fall inside
another stage's group and collide with one of its bindings, and the
draw failed with a duplicate binding. The fault buffer now uses the
TessellationControl FaultBuffer binding.

Uncharted: Legacy of Thieves Collection (PPSA05684) stopped at its first rect-list draw with "duplicate shader binding".
2026-10-09 13:28:48 +02:00
XairRrR 09582357f2 fix(recompiler): accept SDWA destination selects on v_not_b32
v_not_b32_sdwa takes the same dst_sel and dst_unused operands as the
other 32-bit VOP1 SDWA forms (RDNA2 ISA 6.3.1 "SDWA"; LLVM
VOP1Instructions.td gives V_NOT_B32 a VOP1_SDWA encoding with dst_sel
and dst_unused). The rule now allows byte and word destinations with
every unused mode, which the existing SDWA writeback implements; the
execution test checks WORD_0 with UNUSED_PRESERVE.

Uncharted: Legacy of Thieves Collection (PPSA05684) stopped at a v_not_b32_sdwa with dst_sel:WORD_0 dst_unused:UNUSED_PRESERVE.
2026-10-09 13:28:48 +02:00
XairRrR 46a0c1a2c3 feat(agc-driver): sample 8_SNORM images
GFX10 image format 2 (8_SNORM, Mesa gfx10_format_table) resolves to
VK_FORMAT_R8_SNORM and is marked sampleable in the recompiler's format
table.

Uncharted: Legacy of Thieves Collection (PPSA05684) stopped at a compute shader sampling an 8_SNORM image.
2026-10-09 13:28:48 +02:00
XairRrR 628c656199 fix(agc-driver): ignore marker pops without a pushed marker
Debug markers are NOP payloads the command processor skips, so a pop
with no marker pushed (a title that pops a marker it pushed in an
earlier command buffer) has no effect on the GPU; it no longer throws.

Uncharted: Legacy of Thieves Collection (PPSA05684) pops one marker more than it pushes and stopped with "marker stack underflow".
2026-10-09 13:28:48 +02:00
XairRrR 0fc522d9be fix(agc-driver): rasterize nothing through a zero-scale viewport
A viewport whose X or Y scale is zero maps every vertex onto one line,
so triangle, strip, fan and rect-list draws through it cover no pixel.
Such draws, which titles use to skip work without rebuilding a command
buffer, get a valid 1x1 Vulkan viewport and an empty scissor instead of
throwing. Points, lines and other negative or non-finite scales still
throw.

Uncharted: Legacy of Thieves Collection (PPSA05684) stopped at such a draw with "unsupported viewport transform: scale=(0, -0, 1)".
2026-10-09 13:28:48 +02:00
XairRrR 60c26120a6 feat(libs): implement libSceVdecsw on top of libSceVideodec2
libSceVdecsw is the software H.264 decoder interface PPSA05684 uses for
its movies. Decoder creation, compute queues, memory queries, decode
input and output, AVC picture info, reset and finalize are implemented
with the layouts of shadPS4's vdecsw.h, checked against the title's
movie decoder, and decode through libSceVideodec2. The H.264 stream the
Videodec2 test uses moves to a shared fixture, and a guest test decodes
it through Vdecsw.

Uncharted: Legacy of Thieves Collection (PPSA05684) plays its movies through libSceVdecsw and stopped at sceVdecswQueryComputeMemoryInfo.
2026-10-09 13:28:48 +02:00
ctj01 1352b9b34d fix(relinker): write Linux PT_LOAD headers in ascending address order
The header-block PT_LOAD has the highest address but was the first
loadable entry in the table. Linux before 5.18 sizes the ET_DYN mapping
from the first and last PT_LOAD entries in table order, so the output
failed to exec with SIGSEGV. Write PT_PHDR and PT_INTERP first, sort the
kept PT_LOAD entries by address, and place the extra and header blocks
after them.
2026-10-09 06:27:23 -05:00
Achraf ReyaniandClaude Opus 5.5 2a52af8509 build(windows): guard NOMINMAX in the kernel sync test
libstdc++ already defines NOMINMAX on MinGW, so the unguarded define
warned on every Windows build.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 20:19:05 +09:00
krishalivaibhav 4361d8c53a test(shader): validate image compilation on SPIR-V 1.3 targets 2026-10-09 16:46:37 +05:30
tezzgod74andClaude Opus 5.5 5463ea4784 fix(tests): target SPIR-V 1.4 where the prepared graphics test adds mesh shading
The geometry pass adds the mesh capability and extension to the device
target but kept its SPIR-V version. On a device without mesh shaders
that is 1.3, and the mesh module was rejected as exceeding the target.
VulkanDevice targets 1.4 whenever mesh shading is enabled.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 06:09:32 -05:00
tezzgod74andClaude Opus 5.5 1774cc9d62 fix(shader): splat the FMASK read condition into a bool vector for SPIR-V 1.3
The FMASK identity read selected a uvec4 with a scalar bool condition,
which needs SPIR-V 1.4. Devices without mesh shaders target 1.3, so
every image test that reaches the path failed validation with
ANYPS5_ENABLE_SPIRV_TOOLS (#2138), as in #574.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 06:09:32 -05:00
Dextroid17 ad1c3924da ci: accept the device limitations the CI jobs actually report 2026-10-09 07:00:35 -04:00
Dextroid17 1924e18f6f ci: fail when a test skips that the job's device is not expected to skip
The Linux job reports "100% tests passed out of 371" with 20 agc_driver execution tests skipped
(llvmpipe reports subgroup size 8, so the tests that need a wider wave exit 77), and the Windows
job reports "100% tests passed, 0 tests failed out of 368" with 143 skipped - the runner has no
Vulkan driver and ANYPS5_REQUIRE_VULKAN is not set there, so 143 of the 147 GPU execution tests
silently do not run. ctest counts a skip as a pass, so neither job notices when the set grows.

Add tools/check_skips.py. It reads the file ctest writes with --output-junit and fails when a test
skips for a reason that is not expected:

- linux: a skip is expected only when the test's own output reports that the device's subgroups
  are too narrow for it, so adding a wave32 test does not need the rule edited;
- windows: any agc_driver test, since the runner has no driver for them, while a skip of anything
  else fails.

Both jobs now pass --output-junit and run the check after ctest. The JUnit file needs no
redirection, so the console output stays visible and no pipe can hide a failing ctest.

Verified here with the CI command and the CI device (lavapipe, subgroup 8): the real run reports
20 skipped, all expected; a 21st wave32 test skipping for the same reason passes; a skip whose
reason is something else exits 1; a file with 143 agc_driver skips passes with --job windows and
one non-agc skip in it exits 1.
2026-10-09 07:00:35 -04:00
Dextroid17 84d851bf81 fix(relinker): bound the symbol table entry read 2026-10-09 06:54:33 -04:00
Aryan Sharma 7fc6fac1af test(libc): move the malloc_stats_fast checks to their own test 2026-10-09 16:22:39 +05:30
Dean d70b899894 Merge pull request #2112 from LeandroLP23/fix/agc-profile-output-shutdown
fix(agc): stop the profile output at shutdown only if it was created
2026-10-09 23:46:21 +13:00
Claude 4a2769f26d test(net): skip only the IPv6 socket checks on a host without IPv6
On a host without IPv6, socket(AF_INET6) fails with EAFNOSUPPORT, so
guest_sce_net aborted at its first IPv6 socket and never ran the TCP,
UDP, epoll, sendmsg/recvmsg, resolver and NetCtl checks after it.

When sceNetSocket reports guest EAFNOSUPPORT (47) for the IPv6 socket,
skip those socket checks, run the rest of the test, and exit with 77,
which ctest reports as skipped. Hosts with IPv6 run every check.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Ha6Tsy62AFUyp9a5Mf7vjA
2026-10-09 10:30:28 +00:00
Claude 9bd8089cbb test(agc): compare llvmpipe shader clocks modulo 2^32
llvmpipe builds the high dword of the shader clock with a left shift by
32 (emit_clock in Mesa's lp_bld_nir_soa.c), so it is always 0 and
s_memtime and s_memrealtime wrap every 2^32 ns. A pass of
agc_driver_shader_clock whose two reads straddle a wrap failed with
"memtime: lane N went back from 4294921902 to 3823"; dispatching right
before the boundary fails every lane of that pass.

On llvmpipe compare the low dwords modulo 2^32, which stays correct if
Mesa fixes the shift. Other devices keep the 64-bit comparison.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Ha6Tsy62AFUyp9a5Mf7vjA
2026-10-09 10:30:28 +00:00
Claude c7b95bc6c5 fix(agc): fail a failed submission's flips before reporting the failure
When a queue worker failed, it published the failure and woke the idle
waiters before failing the flips of the submission it was executing.
A thread returning from AgcDriverWaitIdle with that failure could still
see one of those flips neither completed nor failed, which made
agc_driver_flip fail with "failed flip was completed successfully" in
2 of 240 runs under four-way parallel load on lavapipe.

Fail the executing submission's flips first, as ReportFailure already
does for the pending submissions it drops before it notifies.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Ha6Tsy62AFUyp9a5Mf7vjA
2026-10-09 10:30:28 +00:00
Aryan Sharma bdeef942f7 test(libc): check malloc_stats_fast forwarding and its error paths 2026-10-09 15:58:34 +05:30
Dean 51f69aa218 Merge pull request #1586 from awake-devel/fix/relinker-keep-eh-frame-hdr
fix(relinker): keep PT_GNU_EH_FRAME in the relinked executable
2026-10-09 23:25:35 +13:00
Daniele Giovane fbce671015 test(libc): verify register contexts on Linux and macOS 2026-10-09 12:22:14 +02:00
Daniele Giovane 9313a9ea1a feat(libc): support register context transfer on macOS x86-64 2026-10-09 12:22:14 +02:00
Sanjaysrinivas b2c825b91b fix(shader): support wave32 mesh programs
Use the guest wave width when constructing NGG mesh entry registers. Add resource-analysis boundaries and indexed/non-indexed rendering regressions.
2026-10-09 12:14:57 +02:00
AngelandClaude Opus 5.5 b6f42c75d8 fix(avplayer): read the PS5 SceAvPlayerInitDataEx layout
PS5 titles pass a 0x230-byte SceAvPlayerInitDataEx: auto start is the
byte after debug_level at 0x74, nine 0x30-byte thread parameter blocks
fill 0x78-0x228 and the output video frame buffer count is at 0x228.
sceAvPlayerInitEx read both fields at their PS4 offsets: auto start at
0xa8 is the video decoder thread priority and the buffer count at 0xa4
lies in the audio decoder block. PPSA25063 (Poppy Playtime: Chapter 4)
sets every thread priority to 700, so its intro video started on its
own and stopped at once; it writes auto start 0 and starts playback
itself.

With this_size 0x230 or more both fields are read at the PS5 offsets;
smaller structures are read as before. The layout follows KytyPS5,
prosper, SharpProspero and sharpemu and is recorded in TechnicalDebt.

guest_avplayer builds a 0x230-byte structure with auto start 0 and
nonzero thread parameters, then with auto start 1, and checks when
playback starts and how many video buffers are allocated.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 12:14:01 +02:00
Celegans12 52eb4272de fix(agc): copy an imported range once a merge extends it past its import
An address-based build maps each imported registered range through its
host import. UploadPrepare merges a descriptor range or snapshot
overlapping such a range into the range's region, and the region kept
the import even when the merge took it past the import's end, as a V#
crossing into the next registered range does. Descriptor then bound the
import's buffer beyond its size, and the BDA table mapped the whole
region, the next range included, through the import's device address.

A merge that extends a region past its end now drops the import. The
region then takes the import lookup and, with no import covering it,
the copy path, as a range crossing an image mirror's end already does.
Like every copied range, it is read-only to pointer stores.
2026-10-09 12:11:06 +02:00
Dean 745b775e2d Merge pull request #2151 from oneandonlydean/fix/hw-oracle-amdgpu-skip
fix(hw-oracle): skip the wave64 assembly test when clang has no AMDGPU target
2026-10-09 23:10:00 +13:00
Dean Galvin e0a8297a7b fix(hw-oracle): skip the wave64 assembly test when clang has no AMDGPU target 2026-10-09 23:05:41 +13:00
Dean 47d254479d Merge pull request #2147 from oneandonlydean/ci/build-merge-ref
ci(build): build pull requests merged into current main
2026-10-09 23:05:17 +13:00
Zheorgyan ed8bf0bd14 test(ajm): use a synthetic AT9 block that stays inside the gradient table 2026-10-09 12:03:22 +02:00
MathiasDevelopesandClaude Opus 5.5 10f57dea29 feat(libSceVideoOut): deliver pre-vblank start events
sceVideoOutAddPreVblankStartEvent threw "physical pre-vblank timing is
not implemented", so titles that pace on it stopped at startup. It now
registers the event like the vblank event does, and each emulated vblank
tick triggers the pre-vblank start events just before the vblank events,
with the pre-vblank count as data. The console's lead time is unknown.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-09 12:00:55 +02:00
Dean Galvin 5994806a8b ci(build): build pull requests merged into current main 2026-10-09 23:00:01 +13:00
boykopovar 43972e69a1 Merge pull request #2096 from boykopovar/fix/windows-host-import-texture-reuploads
fix(win): windows host import texture reuploads
2026-10-09 12:56:45 +03:00
Dean ede2a9cb1f Merge pull request #1711 from SleglJan/feat/libkernel-socketpair
feat(libkernel): implement socketpair
2026-10-09 22:55:53 +13:00
Zheorgyan d1a3d42121 fix(agc): remove display upload logs 2026-10-09 11:50:14 +02:00
Dean 3bd74c155d Merge pull request #1989 from yeahboi233/fix/pr-overlap-utf8
fix(tools): decode overlap command output as UTF-8
2026-10-09 22:43:19 +13:00
Dean b7218b3cec Merge pull request #1962 from CouchRiv/fix-hw-oracle-wave64
fix(hw-oracle): assemble wave64 bodies in wave64 mode
2026-10-09 22:43:05 +13:00
Dean 34b881e326 Merge pull request #1542 from ska2704/fix/oracle-cache-publication
fix(oracle): publish cached executable only after successful build
2026-10-09 22:42:51 +13:00
Dean 2c3a386e29 Merge pull request #2075 from jdmagic/feat/audioout2-mastering-term
feat(libSceAudioOut): accept sceAudioOut2MasteringTerm
2026-10-09 22:42:37 +13:00
Dean a7ff88524d Merge pull request #2074 from jdmagic/feat/ppsa01289-missing-exports
feat(libs): provide the exports PPSA01289 imports that no library has
2026-10-09 22:42:23 +13:00
Dean 1d7c70a752 Merge pull request #1992 from LuisBiceps/feat/system-service-kill-app
feat(libSceSystemService): let the running title close itself with sceSystemServiceKillApp
2026-10-09 22:42:08 +13:00