Commit Graph
6138 Commits
Author SHA1 Message Date
Adrià 461fcfc7f3 Merge pull request #1436 from tototomate123/fix/hfw-offline-imports
fix(prx): add missing HFW imports with strict offline handling
2026-10-08 15:52:39 +02:00
Adrià 5fbddcdf53 Merge pull request #1435 from ewraj/fix/linux-guest-varargs
fix(libc): read every variadic argument of the Linux printf and scanf exports
2026-10-08 15:52:17 +02:00
Adrià 50490e4028 Merge pull request #1444 from ewraj/refactor/appcontent-enqueue-download
refactor(libSceAppContent): name the stub the NID database resolves
2026-10-08 15:50:29 +02:00
krishnarayaandClaude Opus 5.5 9157dfd7ed fix(libSceAgcDriver): read the RELEASE_MEM interrupt select only from RELEASE_MEM packets
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-08 09:49:11 -04:00
abderahmane-ai 9e6a6004a5 feat(tools): add an import audit for converted games
A converted game fails at launch on the first system function that no
built library exports, one function per run. tools/import_audit.py reads
the registry written by relinker --registry and classifies every imported
NID in one pass:

- implemented: a built library exports it
- stub: exported, but the whole function calls NotImplemented_nid_no_patch
- absent: no built library exports it, so the loader fails
- module: the import names a file the title ships itself

Exports are read from the built .prx files (ELF dynsym and PE export
table), the same view the loader has. Stubs come from the source tree
through tools/progress.py, and NIDs through tools/nid_names.py. The report
also lists needed libraries without a file and imports found only in a
different library than the one they name. --names adds names from an
aerolib.csv file and never downloads one; --json writes the full result
stamped with the repository commit.

The test builds ELF and PE libraries byte by byte, checks that every
reference lands in exactly one class, and pins the NID of
sceMsgDialogProgressBarSetValue (wTpfglkmv34) as an external anchor.
Registered in CTest as import_audit.
2026-10-08 15:47:46 +02:00
clem-gbandClaude Opus 5.5 d16cac0ab2 fix(relinker): keep PT_GNU_EH_FRAME in the relinked executable
The segment filter dropped every header in the PT_LOOS..PT_HIOS range,
which includes PT_GNU_EH_FRAME. The unwinders find the executable's
unwind tables through that header, so no C++ exception thrown in the
main executable could be caught on Linux.

The header is kept only when the output program header table still fits
in the input's table; otherwise it is dropped as before, with a warning.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01HeC9bA3n74TzJRYv9AgBE8
2026-10-08 15:47:39 +02:00
popcoder565andClaude Opus 5.5 24dc98d7c0 fix(libkernel): give up a raise whose target stays in NtContinue or winpthreads
The retry that waits for a target to leave NtContinue, NtContinueEx or
libwinpthread-1.dll had no bound, so a target that stayed there made
sceKernelRaiseException spin forever. It now throws after 1 s. A new
guest_raise_exception phase keeps a thread inside NtContinue by
continuing a context that calls NtContinue again, and checks that the
raise throws and that the handler did not run.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 09:47:25 -04:00
Adrià 63c57d2222 Merge pull request #1432 from ToyuAU/build/standalone-relinker
build(relinker): add a dependency-free conversion build mode
2026-10-08 15:43:51 +02:00
Adrià 033a46360d Merge pull request #1424 from muhzain05/fix/relinker-jmprel-bounds
fix(relinker): bound the jump relocation table range
2026-10-08 15:39:32 +02:00
Adrià FranchandClaude fd70266372 docs: move the Windows import TechnicalDebt line to Functional
It records a behaviour gap, not a silent stub, and sat at the end of its section.

Co-Authored-By: Claude <[email protected]>
2026-10-08 15:32:46 +02:00
ToyuAU c01044eeaa fix(memory): restore write tracking for fresh private backing 2026-10-08 15:32:42 +02:00
ToyuAU 0df794548e fix(tests): configure Windows unwind for write-watch coverage 2026-10-08 15:32:42 +02:00
ToyuAU 838d02a88c fix(agc): compare Windows host imports after late driver writes 2026-10-08 15:32:42 +02:00
Adrià b3fcd6d6c0 Merge pull request #1408 from hashaam1217/fix/pin-wide-compute-subgroups
fix(agc): require the widest subgroup for compute programs wider than the device
2026-10-08 15:25:25 +02:00
Adrià 02e741060e Merge pull request #1394 from gjonn/feat/agc-r10g11b11-float-images
feat(agc): load and store R10_G11_B11 float images
2026-10-08 15:25:08 +02:00
Celegans12 1816aea91c fix(agc): store and read DCC keys over the console's metadata extent
The console's DCC of a single-level 4-byte SW_64KB_R_X surface is
ceil(W/512) * ceil(H/512) * 4096 bytes, 49152 for 1920x1080, but the
driver stored and read one key per 256 surface bytes (34560).
PPSA26344 retiles its render DCC into the displayable copy it
registers (cs_dcc_retile_32bpp); a retile of the stale tail gives the
mixed keys PPSA12544 stops on.

DccKeyCount gives that extent. Color target and storage image key
stores cover it when the DCC is pipe-aligned (CB_COLOR_ATTRIB3 bit 30,
T# word 6 bit 19), whose CB keys reach its last meta block, and throw
where it is not writable; unaligned DCC keeps one key per 256 bytes,
as do texture and color target key reads. DisplayBufferKeys reads the
display DCC over the extent, presents only when every key agrees,
names the first differing key's pixels and checks a pending image
against those keys.
2026-10-08 15:24:43 +02:00
Adrià fd5342b6d6 Merge pull request #1425 from gjonn/fix/agc-reversed-rgba8-color-targets
fix(agc): render 8_8_8_8 and 16_16_16_16 color targets with reversed component orders
2026-10-08 15:18:26 +02:00
Adrià 588c7b7b5e Merge pull request #1402 from gjonn/claude/sleepy-engelbart-7b6379
fix(recompiler): take point-filtered sampler copies' descriptors from their source sampler
2026-10-08 15:17:38 +02:00
Adrià 83c57cb8fe Merge pull request #1414 from TheAggie/fix/agc-color-control-disable
fix(agc): render CB_COLOR_CONTROL mode disable as a draw without color
2026-10-08 15:16:42 +02:00
Scott SchusterandClaude Opus 5.5 550920a1fd fix(agc): render CB_COLOR_CONTROL mode disable as a draw without color
Mode 0 of CB_COLOR_CONTROL turns color writes off, but a draw with a
written color target and this mode was skipped as unsupported. Count no
export as written when the mode is disable, so the draw renders without
a color attachment like the existing attachment-free path, and accept
the mode with any ROP3, which does not apply while writes are off.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 15:13:08 +02:00
Adrià ede7ead473 Merge pull request #1419 from TheAggie/fix/agc-accept-tuning-fields
fix(agc): accept RB and primitive-group tuning fields
2026-10-08 15:12:33 +02:00
Adrià f4028921f8 Merge pull request #1412 from TheAggie/fix/recompiler-ngg-vertex-wave-info
fix(recompiler): give vertex-path shaders a full NGG merged wave info
2026-10-08 15:08:22 +02:00
Adrià c68c7576b9 Merge pull request #1399 from hugodearaujo/fix/rtc-parse-datetime-rfc2822-hardware
fix(rtc): parse RFC 2822, RFC 850 and asctime text like the console
2026-10-08 15:05:42 +02:00
Adrià FranchandClaude c39476459b docs: record the inferred NGG merged wave info layout in TechnicalDebt
Co-Authored-By: Claude <[email protected]>
2026-10-08 15:05:40 +02:00
Scott SchusterandClaude Opus 5.5 71e566fafb fix(recompiler): give vertex-path shaders a full NGG merged wave info
The vertex entry set only the vertex and instance index VGPRs, leaving
the NGG merged wave info SGPR s3 at 0. NGG shaders build EXEC from it
(s_bfe_u64 exec, -1, <count in bits 16..22>), so Mesa's NGG vertex
shaders ran with an empty EXEC and rasterized nothing.

Each host invocation on the vertex path is one vertex of a full wave:
when the user data starts at s8 or later, set s3 to the wave size as
both vertex and primitive count, with wave index 0.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 15:05:35 +02:00
Adrià FranchandClaude 61fbade375 test(agc): pin R10_G11_B11 float image edge values
Store: negative, -0, NaN (quiet and low-payload), +-Inf, overflow to the
largest finite value, truncation and small-float denormals. Load: Inf,
denormal and largest finite codes. Values measured on gfx1035.

Co-Authored-By: Claude <[email protected]>
2026-10-08 15:04:47 +02:00
Gjon Gojcevic ede33d56e2 feat(agc): load and store R10_G11_B11 float images
Format 43 packs R as a 10-bit and G and B as 11-bit unsigned floats, which
Vulkan has no format for. Keep it in an R32_UINT image like the other
packed formats without a host equivalent, and convert texels in the shader
on image loads and stores; sampling it still throws.
2026-10-08 15:04:47 +02:00
Adrià 7ad0b2976b Merge pull request #1406 from ebarr24/codex/batch-demangle-guest-heap
fix(libc): keep guest demangle buffers on the application heap
2026-10-08 15:03:54 +02:00
Adrià fd5f63a2d0 Merge pull request #1393 from xsvm/fix/relinker-rewriter-reference-sites
fix(relinker): classify rewrite reference sites with the instruction decoder
2026-10-08 15:03:48 +02:00
Adrià 147a9855c0 Merge pull request #1404 from overlordxrz-source/fix/libkernel-small-stacksize-einval
fix(libkernel): return EINVAL for thread stack sizes below 16 KiB
2026-10-08 15:03:07 +02:00
Adrià 79d23eb76c Merge pull request #1321 from TibixDev/pr/guest-path-case
fix(libc): resolve case differences in guest paths and mounts
2026-10-08 15:01:28 +02:00
Adrià 2a906716f9 Merge pull request #1403 from overlordxrz-source/refactor/relinker-read-needed-once
refactor(relinker): read the executable's DT_NEEDED entries in one place
2026-10-08 15:00:52 +02:00
Zheorgyan 847bd9f496 fix(shader): keep v_exp_f32 at or above the smallest normal for inputs from -126 2026-10-08 14:59:28 +02:00
Adrià 09a17e963a Merge pull request #1398 from hugodearaujo/fix/rtc-parse-datetime-iso-hardware
fix(rtc): parse ISO text in sceRtcParseDateTime by the RFC 3339 rules
2026-10-08 14:56:12 +02:00
Adrià FranchandClaude 87323a54fb fix(recompiler): bump the shader disk cache format version for the sampler copy source
Co-Authored-By: Claude <[email protected]>
2026-10-08 14:55:19 +02:00
Gjon GojcevicandClaude Opus 5.5 71851d66a3 fix(recompiler): take point-filtered sampler copies' descriptors from their source sampler
When one guest sampler is paired both with an image that needs point
filtering (sint, depth-bits or converted format) and with an ordinary
image, ResourceMaterializer::Apply appends a point-filtered copy of the
sampler after the original samplers. The resource snapshot only holds
the original samplers, so DescriptorBindingBuilder::Populate threw
"guest sampler index is out of range" for the copy, both in the sampler
binding and in the unnormalized-coordinate check.

SamplerResource::copyOf records the sampler a copy was made from, and
the guest sampler descriptor of a copy is read from that sampler; the
point-filter rewrite of word 2 still applies to the copy. The field is
part of the disk cache encoding: cache format version 8.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 14:55:18 +02:00
Adrià 377e819612 Merge pull request #1400 from ebarr24/codex/batch-thread-atexit-abi
fix(libc): bridge guest thread destructors to host ABI
2026-10-08 14:52:26 +02:00
Adrià b82c1c2f70 Merge pull request #864 from jeffrey12cali/fix/dlsym-default-scope
fix(module): resolve the default dlsym scope against the main program
2026-10-08 14:52:14 +02:00
Adrià e08c816abc Merge pull request #1383 from nisbenz/fix/shader-memtime-narrow-subgroup-clock
fix(shader): read s_memtime from the device clock where RADV's subgroup clock is 20 bits
2026-10-08 14:51:41 +02:00
MathiasDevelopesandClaude Opus 5.5 8685c14d16 feat(recompiler): convert f32 to f16 natively when the device rounds 16-bit floats to nearest even
The integer emulation of the round-to-nearest-even float-to-half
conversion is exact but costly: a compute shader with about 3600
conversions never finished compiling on NVIDIA. When the device enables
shaderFloat16 and guarantees shaderRoundingModeRTEFloat16,
shaderDenormPreserveFloat16 and shaderSignedZeroInfNanPreserveFloat16,
it advertises Float16, RoundingModeRTE and DenormPreserve, and the
recompiler emits OpFConvert under the 16-bit RoundingModeRTE,
DenormPreserve and SignedZeroInfNanPreserve execution modes instead.
NaNs keep the emulated quiet NaN with the high payload bits. Devices
without these guarantees keep the emulation.

Graphics validation accepts the RoundingModeRTE, DenormPreserve and
SignedZeroInfNanPreserve execution modes for 16-, 32- and 64-bit floats,
so vertex and pixel shaders with a native conversion still draw.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-08 12:51:07 +00:00
Adrià 0596a7a274 Merge pull request #1385 from gjonn/feat/recompiler-lwe-on-samples
feat(recompiler): accept lwe on MIMG samples and gathers
2026-10-08 14:43:27 +02:00
Zheorgyan ed14c24bd7 test(agc): skip the exec host lanes vertex draw without vertex subgroups 2026-10-08 14:43:17 +02:00
nisbenzandClaude Opus 5.5 f025a9e506 fix(shader): read s_memtime from the device clock where RADV's subgroup clock is 20 bits
On GFX10.3 to GFX11.7, ACO lowers a subgroup-scope OpReadClockKHR to
s_getreg_b32 of SHADER_CYCLES, 20 bits zero-extended to 64, so s_memtime
wrapped every 2^20 cycles and went backwards. Detect those families from
the RADV device name and read the device clock there instead.

Fixes #985

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 14:42:40 +02:00
Adrià 3c4bdda47a Merge pull request #1379 from gjonn/fix/recompiler-image-load-missing-coordinates
fix(recompiler): read image address components the instruction omits as 0
2026-10-08 14:42:10 +02:00
Adrià 07c2405c35 Merge pull request #1371 from TibixDev/pr/depth-maintenance-precheck
fix(agc): reject depth maintenance before shader compilation
2026-10-08 14:37:01 +02:00
Adrià 072804fd33 Merge pull request #1288 from Celegans12/fix/agc-dcc-filled-keys-refresh
fix(agc): forget a DCC key fill once a refresh sees other keys
2026-10-08 14:35:47 +02:00
Adrià cba8d86da8 Merge pull request #1270 from Celegans12/fix/agc-unaligned-buffer-views
fix(agc): bind guest buffer views that start off a DWORD boundary
2026-10-08 14:34:45 +02:00
Adrià FranchandClaude aee56e17f4 test(libc): use generic file names in the path-case test
Co-Authored-By: Claude <[email protected]>
2026-10-08 14:33:20 +02:00
TibixDev 4f23830d89 fix(libc): resolve guest filename case on host filesystems
Resolve ASCII case differences in guest paths and mount aliases while preferring exact names and rejecting ambiguous fallback matches. Preserve new filenames and host roots. Five filesystem tests pass; Skyrim now loads its INI and shader archives, initializes Vulkan and uploads intro textures instead of dereferencing null shader metadata. Written with AI assistance.
2026-10-08 14:33:17 +02:00
Adrià 0b3cc73e1c Merge pull request #1112 from Celegans12/feat/agc-conservative-rasterization
feat(agc): implement overestimating conservative rasterization
2026-10-08 14:31:38 +02:00