Commit Graph
14017 Commits
Author SHA1 Message Date
Hashaam ZafarandClaude Opus 5.5 ace7999dce feat(relinker): load Windows guest TLS values through register addresses
mov r64 and mov r32 from fs:[mem], where mem has a base or an index
register, now relink for Windows (64 48 8b 03, mov rax, fs:[rbx], in
#217). The stub computes the offset with lea on the original address,
adds the thread pointer and loads.

These sites can be shorter than the 5-byte jump. A short site moves the
following sequential instructions into its stub and relocates
RIP-relative ones; a branch, a return or another TLS access after it
fails the relink. A TLS site shorter than a jump is now rejected instead
of overwriting the next instruction.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 11:44:34 -07:00
Hashaam ZafarandClaude Opus 5.5 1a413b0b56 fix(tools): run pr_overlap on git older than 2.45
git merge-tree takes trees with --merge-base only from git 2.45. On
older git, such as 2.43 on Ubuntu 24.04, the pairwise merge failed and
merge() read the first line of empty output, so --branch stopped with
an IndexError. The merged trees are now wrapped in commits on top of
the base, which git merge-tree accepts with --merge-base from 2.40, and
a failing git merge-tree raises with git's message.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 11:29:13 -07:00
Gjon Gojcevic ccc9e3c6da fix(libkernel): return EBADF from sceKernelClose for a descriptor that is not open 2026-10-07 14:10:53 -04:00
ploysiusandClaude Opus 5.5 f7424ea95d refactor(libSceAgc): name three more exports after their versioned NIDs
OpenAGC's include/agc_nids.h names three more of the raw-NID exports, and
each name hashes to its NID:

  gQkqkLttcpw  sceAgcAcb_gQkqkLttcpw               -> sceAgcAcbAtomicGds_0900
  dolOmWH+huQ  sceAgcUnknownGetFusedShaderSize     -> sceAgcGetFusedShaderSize_0080
  V++UgBtQhn0  sceAgcGetDataPacketPayloadAddressUnk -> sceAgcGetDataPacketPayloadAddress_0090

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 14:02:51 -04:00
ploysiusandClaude Opus 5.5 7400d45d49 fix(libc): drop the LibcHeapErrorReportForGame export no title imports
`LibcHeapErrorReportForGame_nid_postfix` exports NID SlMztUijOSk, which no
NID list or emulator knows. The name is KytyPS5's label for al3JzFI9MQ0,
the NID of sceLibcInternalHeapErrorReportForGame, which libc already
exports from HeapDiagnostics.cpp.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 13:58:15 -04:00
ploysiusandClaude Opus 5.5 39191f905d refactor(libSceAgc): name exports after the versioned SDK names their NIDs hash to
Eight libSceAgc exports were published under a raw NID with a made-up
name. Each NID is the hash of a versioned SDK name (checked with
tools/nid_names.py compute_nid), so the functions now carry that name and
are exported from it directly:

  23LRUSvYu1M  sceAgcUnknownInitState          -> sceAgcInit_0090
  -KRzWekV120  sceAgcUnknown__MKRzWekV120      -> sceAgcDcbSetIndexSize_0600
  Ikfdt-rIqCE  sceAgcUnknown_Ikfdt_MrIqCE      -> sceAgcJumpPatchSetTarget_0300
  7Wa3aeJgeVU  sceAgcUnknown_7Wa3aeJgeVU       -> sceAgcBranchPatchSetThenTarget_0300
  rP5xLdOf26k  sceAgcUnknown_rP5xLdOf26k       -> sceAgcBranchPatchSetElseTarget_0300
  fd5Bp5tGTgo  sceAgcUnknownFuseShaderHalves   -> sceAgcFuseShaderHalves_0200
  qj7QZpgr9Uw  sceAgcDcbContextStateAnotherOp  -> sceAgcDcbContextStateOp_0100
  k0E7vkgqAuE  sceAgcCreateInterpolantMappingVsPs -> sceAgcUpdateInterpolantMapping_0100

The exported NIDs are unchanged; the extra exports under the hashes of the
made-up names are gone. Behaviour is unchanged.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 13:55:45 -04:00
krishnarayaandClaude Opus 5.5 75398e9ed1 fix(agc): refuse 64-bit buffer atomics on devices without shaderBufferInt64Atomics
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-07 13:52:17 -04:00
ebosido444-ai 5a4d8b6f42 fix(tools): keep the pr_overlap DEPENDS pattern a raw string 2026-10-07 20:45:41 +03:00
john.maiaandClaude Opus 5.5 9cbbf9c33d test(agc): run the recorder tests on AMD and Intel GPUs
importWindowTests pinned watched imports even where the driver decides
to compare them. On amdgpu (RADV) and Intel (ANV) the import probe finds
the pages written after a GPU access, so the driver never watches
imports there; under the pinned watch the storage image keeps the CPU's
blocks and the test fails. It fails the same way at d8c7c0cc, where it
was added. It now reports itself as not run when imports are compared,
like the unit shadow test.

minLodTests expected MIN_LOD 1.5 to blend levels 1 and 2. With
VK_EXT_image_view_min_lod the view minimum LOD is minLodFloat
(preferred) or minLodInteger (alternative); ANV takes the integer part
and reads level 1. Either result is accepted and the alternative is
reported.

The test device ranks Vulkan devices as VulkanDevice does instead of
taking the first one, so on a host with an iGPU it runs on the same GPU
as the runtime. Like VulkanDevice, it destroys the unit shadows before
the device: a test that failed with live slabs segfaulted at exit when
the registry freed them after vkDestroyDevice.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 18:40:43 +01:00
ChadandClaude Opus 5.5 eb30830da3 fix(agc): reject 1D arrays outside the linear, Z and R swizzles
The hardware addresses a 1D array in the S and D swizzles differently
from a height-1 2D array, and addrlib allows only linear, Z and R
swizzles for 1D resources, so the other tile modes are rejected instead
of being sampled with a 2D array layout.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 12:32:09 -05:00
Lorenzo Delmonte cbc5b4cd5d feat(libSceJson2): implement sce::Json::Value::clear 2026-10-07 19:19:53 +02:00
MathiasDevelopesandClaude Opus 5.5 e84f43aceb feat(libc): implement hypot and hypotf
Both forward to std::hypot, which computes without intermediate
overflow and returns infinity when either argument is infinite, even
if the other is NaN. The math test checks those cases.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-07 19:10:07 +02:00
EdouardSenceandClaude Opus 5.5 24d6bfe355 fix(libc): back the main image's writable mappings with anonymous memory on Linux
amdgpu userptr, which RADV uses for VK_EXT_external_memory_host, refuses
file-backed VMAs (libdrm sets AMDGPU_GEM_USERPTR_ANONONLY). The executable's
writable PT_LOAD mappings are file-backed MAP_PRIVATE, so on RADV they are
never imported and become writable image mirrors that every address-based
build compares in full.

At load, libc replaces each rw-p mapping of /proc/self/exe with an anonymous
copy at the same address, before any guest code runs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 18:43:37 +02:00
krishnarayaandClaude Opus 5.5 bd0df80a53 fix(agc): require 32-wide compute subgroups on devices whose default is 32
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-07 12:43:15 -04:00
Nguyen Phuong Thuy 3b35a674f3 fix(relinker): reject incomplete RELA entries 2026-10-07 16:41:20 +00:00
john.maiaandClaude Opus 5.5 ff9962b88a test(agc): run agc_driver_bda_device_tests under ctest
The BDA device test was built only on request and never registered, so
it ran nowhere. Register it with the other AGC driver tests.

Pick the Vulkan device the way VulkanDevice does, a discrete GPU over an
integrated one, instead of the first enumerated device, so the test runs
on the same GPU as the runtime on hosts with an iGPU. Without a usable
device it exits 77, as OpenVulkanTestDevice does, unless
ANYPS5_REQUIRE_VULKAN is set.

On a CPU device the BDA execution tests are not run: llvmpipe loads
through the null pointer of a branch that is not taken and the process
segfaults (Mesa #16515, #16217). The contract, allocation and color
transfer tests still run there.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 17:39:25 +01:00
Ethan Barr 2ed81aebe4 fix(relinker): preserve GUI startup failure status without stderr 2026-10-07 09:38:56 -07:00
Adrià cea1ef13c3 Merge pull request #902 from Celegans12/fix/agc-unaligned-shader-headers
fix(agc): accept unaligned shader headers
2026-10-07 18:27:47 +02:00
Adrià d95ce1f29c Merge pull request #898 from alfalfa-star/feat/agc-cond-indirect-buffer
feat(agc): run COND_INDIRECT_BUFFER branches whose comparison always passes
2026-10-07 18:26:59 +02:00
Edgar MaurelandClaude Opus 5.5 241299bf01 test(font): move the console font aside instead of deleting it while its face is mapped
On Windows 10 a file with a mapped view cannot be deleted, and FreeType's
Windows stream keeps the face's file mapped, so removing SST-Bold.otf threw
and ended guest_system_font. Moving it out of the font directory leaves
nothing at the original path and works on every host.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 18:26:20 +02:00
Adrià 3f7fe285a0 Merge pull request #900 from alfalfa-star/feat/libkernel-acp-protection
feat(libkernel): accept the audio coprocessor memory protection bits
2026-10-07 18:26:06 +02:00
Adrià 6b3e8c476e Merge pull request #835 from adriadam10/feat/appcontent-addcont-info
feat(libSceAppContent): implement sceAppContentGetAddcontInfo and GetAddcontInfoList
2026-10-07 18:25:31 +02:00
Adrià 0da8f48cfc Merge pull request #831 from adriadam10/feat/audio3d-object-reserve
feat(libSceAudio3d): implement sceAudio3dObjectReserve and sceAudio3dObjectUnreserve
2026-10-07 18:24:56 +02:00
Adrià 5684bd9e92 Merge pull request #876 from YossiYad/feat/gpu-selection
feat(agc): choose the Vulkan device by name with ANYPS5_GPU
2026-10-07 18:24:13 +02:00
Adrià 4b16995d91 Merge pull request #807 from adriadam10/feat/kernel-timer-event
feat(libkernel): sceKernelAddTimerEvent and sceKernelDeleteTimerEvent
2026-10-07 18:22:56 +02:00
MichonandClaude Opus 5.5 29aa275653 fix(agc): accept fragment Geometry and SampleRateShading only when the device enabled them
The validator takes the geometryShader and sampleRateShading enables from the
context (set where #295 enables them), so a device without them refuses the
draw instead of creating a module that needs features it never enabled.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-07 18:18:47 +02:00
Adrià FranchandClaude cc789786de feat(libSceLibcInternal): implement _sceLibcInternalForceTlsDestructor
Co-Authored-By: Claude <[email protected]>
2026-10-07 18:18:13 +02:00
MichonandClaude Opus 5.5 f3fd29db0d fix(agc): accept a fragment SampleMask output
Pixel shaders that export a coverage mask write gl_SampleMask, an
int[1] (or uint[1]) output. The validator rejected array interface
types; it now spells them elem[N] and accepts SampleMask as int[1] or
uint[1].

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-07 18:18:12 +02:00
MichonandClaude Opus 5.5 78726f3836 fix(agc): fragment SampleId, Layer and FragDepth interfaces
The recompiler emits SampleId and Layer fragment inputs (pixel ancillary
data) and a FragDepth output with the DepthReplacing execution mode
(depth export), but the validator refused them, so those draws were
skipped. They are now accepted, as are the Geometry and SampleRateShading
capabilities those inputs need in fragment shaders. The device enables
both features when it has them.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-07 18:18:12 +02:00
MichonandClaude Opus 5.5 131adc17ae perf(agc): draw cache keys on the user words each stage reads
The draw key mixed all 32 user data words of every stage. It now mixes only the
words a stage's RSRC2 counts, so draws that differ only in words their programs
never read share an entry. The RSRC2 registers stay in the key.
APS5_DRAW_KEY_ALL_USER_WORDS=1 mixes all 32 again.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-07 18:18:00 +02:00
Adrià FranchandClaude 5b331ed022 feat(libSceAppContent): implement sceAppContentGetAddcontInfo and GetAddcontInfoList
Co-Authored-By: Claude <[email protected]>
2026-10-07 18:14:04 +02:00
Adrià FranchandClaude 9ab637a575 fix(libkernel): wake infinite equeue waits for timers, document timer choices
Co-Authored-By: Claude <[email protected]>
2026-10-07 18:14:04 +02:00
Adrià 2b8f0b215e Merge pull request #803 from adriadam10/feat/rtc-dos-time
feat(rtc): implement sceRtcGetDosTime and sceRtcSetDosTime
2026-10-07 18:07:20 +02:00
Adrià FranchandClaude 0781225d43 fix(rtc): decode the DOS year as unsigned, move TechnicalDebt line
Co-Authored-By: Claude <[email protected]>
2026-10-07 18:06:11 +02:00
Adrià Franch c3871dcb99 feat(libSceAudio3d): implement sceAudio3dObjectReserve and sceAudio3dObjectUnreserve 2026-10-07 18:01:24 +02:00
Oguzhan OzdemirandClaude Opus 5.5 e8f73a5531 fix(relinker): decode the 64-bit address of MOV moffs instructions
A0-A3 (MOV AL/eAX/rAX to and from moffs) have no ModRM byte and carry an
8-byte absolute address in 64-bit mode, or 4 bytes with a 0x67 prefix.
The decoder added nothing for the address, so the linear scanner decoded
the address bytes as code.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 19:00:37 +03:00
Oguzhan OzdemirandClaude Opus 5.5 cf8b7315b6 fix(relinker): include the run path in the Linux DT_STRSZ
The Linux patcher appends the DT_RUNPATH string after the copied
.dynstr data but kept DT_STRSZ and the .dynstr section size at the size
of the copied data, so DT_RUNPATH pointed at the first byte past the
declared string table.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 18:58:42 +03:00
ctz23 80120faf8e test(relinker): use distinct executables in Windows icon tests 2026-10-07 17:57:06 +02:00
ctz23 5ec12a44ac docs(build): list Linux X11 development dependencies 2026-10-07 17:57:05 +02:00
Adrià FranchandClaude d081e6749d feat(libkernel): sceKernelAddTimerEvent and sceKernelDeleteTimerEvent
Co-Authored-By: Claude <[email protected]>
2026-10-07 17:55:57 +02:00
eliasbruno124-dev ba3e75a100 fix(relinker): resolve Windows guest filename casing 2026-10-07 17:55:28 +02:00
Adrià def8119927 Merge pull request #550 from Pouare514/fix/memory-prot-gpu-bits
fix(libkernel): accept GPU coherency prot bits for host mapping
2026-10-07 17:54:41 +02:00
Adrià 8e281fa8d0 Merge pull request #518 from Pouare514/fix/tlou-videoout
fix(libs): TLOU throwing stubs for VideoOut VrrPeg and VrrStatus
2026-10-07 17:53:38 +02:00
Adrià FranchandClaude c94949aedb feat(rtc): implement sceRtcGetDosTime and sceRtcSetDosTime
Co-Authored-By: Claude <[email protected]>
2026-10-07 17:52:56 +02:00
Oguzhan OzdemirandClaude Opus 5.5 d64c0605ea fix(relinker): let REX.W override 0x66 when sizing decoder immediates
In 64-bit mode REX.W takes precedence over the 0x66 operand-size prefix,
so the immediate of 81, C7, 69, 68, A9, the 05..3D accumulator forms and
the F7 TEST form stays imm32. The decoder only applied this to B8+r and
returned a length two bytes short for the others.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 18:51:56 +03:00
Adrià f71bf7fd40 Merge pull request #716 from merwie/feat/relinker-needed-modules-outside-module-dirs
feat(relinker): relink needed modules outside the module directories
2026-10-07 17:51:47 +02:00
Adrià 4bf75d835e Merge pull request #467 from adriadam10/ci/conventions-check
ci: check pull requests against the contributing rules
2026-10-07 17:51:30 +02:00
krishnarayaandClaude Opus 5.5 53f94723d1 docs(build): name the CA bundle the WinLibs CMake needs for the FFmpeg download
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-07 11:48:32 -04:00
Raihan Abdul MajidandClaude Opus 5.5 0a6a8a7b5c feat(font): accept sceFontGlyphDefineAttribute as a silent stub
PPSA01325 stops on sceFontGlyphDefineAttribute right after generating a character glyph: it sets attribute 0x11 to 0 on that glyph, deletes it without using it, and draws the character with sceFontRenderCharGlyphImageHorizontal. The meaning of the attributes is unknown, so the call checks the glyph and ignores the rest; TechnicalDebt lists it under silent stubs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01UTjpbMX7BUFMZZaxJE98zV
2026-10-07 22:46:48 +07:00
Raihan Abdul MajidandClaude Opus 5.5 267b893b59 feat(libs): provide the exports PPSA01325 imports that no library has
Astro's Playroom (PPSA01325) fails eager binding on three imports. The two voice chat group requests follow the offline model of the other sceVoiceChatRequest* calls and return SIGNED_OUT; sceRudpActivate, whose signature is unknown, is declared as a throwing stub.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01UTjpbMX7BUFMZZaxJE98zV
2026-10-07 22:43:08 +07:00