Commit Graph

4579 Commits

Author SHA1 Message Date
Adrià Franch 894ef6db09 test(libSceSystemGesture): cover the handle and null checks of every recognizer call
Moves the no-touch line to "Silent stubs" and records the error-code disagreement with KytyPS5.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-11 02:04:04 +02:00
xXPBSXx 6e2ea0a071 docs(technical-debt): list the system gesture no-touch behavior
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-11 02:01:32 +02:00
xXPBSXx 4bf608565f fix(libSceSystemGesture): report no touch events for the primitive and recognizer calls
WIP: the TechnicalDebt entry for the silently successful calls is still missing.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-11 02:01:32 +02:00
Adrià 2a38c0bd91
Merge pull request #3011 from MarcZX100/codex/prbatch-2988-cond-wait
fix(libkernel): return errors for waits with an unowned mutex
2026-10-11 01:59:12 +02:00
Adrià a0d669926c
Merge pull request #2996 from MarcZX100/fix/agc-mesh-wave32-subgroup-2815
fix(agc): require 32-lane subgroups for wave32 mesh programs
2026-10-11 01:58:20 +02:00
Adrià e28fbc277d
Merge pull request #3010 from MarcZX100/codex/prbatch-2998-strerror
fix(libc): match FreeBSD errno message strings
2026-10-11 01:53:29 +02:00
MarcZX100 324be50c64 docs(libkernel): record condition wait errors 2026-10-11 01:53:27 +02:00
Hussein Kadhim 709c12e133 fix(libkernel): return EPERM or EINVAL when a condition wait gets a mutex the caller does not hold
pthread_cond_wait and pthread_cond_timedwait, and their sce counterparts, threw a
host exception when the mutex was unlocked, locked by another thread, or not yet
initialized, and dereferenced the adaptive static initializer. FreeBSD returns
EPERM for these (EINVAL for a destroyed mutex) before touching the condition.

(cherry picked from commit a78bb8a855ca3b277f128c6a9e52ff3949b9cb80)
2026-10-11 01:53:12 +02:00
Adrià ed79bde5b9
Merge pull request #2987 from CouchRiv/fix-shader-f16-addmul-denorm-flush
fix(shader): flush scalar f16 add/mul/sub denormals to signed zero
2026-10-11 01:51:46 +02:00
Adrià 9d792ae477
Merge pull request #2989 from CnRJay/fix/srt-null-root-reads
fix(recompiler): read SRT words through a null user-data pointer as zero
2026-10-11 01:49:13 +02:00
Adrià 9402d32fc2
Merge pull request #2993 from CnRJay/fix/agc-indirect-getsize-count
fix(agc): ignore the count passed to the indirect register GetSize functions
2026-10-11 01:48:56 +02:00
Adrià 62419286cd
Merge pull request #3009 from MarcZX100/fix/libkernel-open-directory-3004
fix(libkernel): report ENOTDIR for Windows O_DIRECTORY opens
2026-10-11 01:48:46 +02:00
Adrià 935993d608
Merge pull request #2980 from JAB-dev/test/agc-draw-cache-reuse
test(agc): require a repeated draw to reuse the cached draw
2026-10-11 01:46:52 +02:00
Adrià b64c75fc12
Merge pull request #2939 from CnRJay/fix/agc-dcc-comp-to-single
fix(agc): expand comp-to-single DCC keys in a DCC decompress pass
2026-10-11 01:46:49 +02:00
Adrià abb2f8e4fc
Merge pull request #2986 from MarcZX100/fix/relinker-windows-unicode-2640
fix(relinker): support Unicode Windows startup paths
2026-10-11 01:46:23 +02:00
Adrià 30ab2f6ef5
Merge pull request #2990 from CnRJay/fix/agc-dispatch-ahead-indirect-arguments
fix(agc): stop the dispatch look-ahead before indirect arguments an earlier dispatch may write
2026-10-11 01:46:17 +02:00
Adrià c633e6d532
Merge pull request #2880 from SleglJan/fix/shader-log2-near-one
fix(shader): correct v_log_f32 near 1.0 when the driver's log2 strays from a series
2026-10-11 01:46:08 +02:00
Adrià f336979f3b
Merge pull request #2991 from CnRJay/fix/agc-nop-one-dword
fix(agc): encode a one-dword NOP as the header-only form
2026-10-11 01:46:02 +02:00
Adrià 5bd6912b0b
Merge pull request #2978 from MarcZX100/fix/libkernel-rwlock-destroy-busy
fix(libkernel): return EBUSY when destroying a held rwlock
2026-10-11 01:45:28 +02:00
Adrià 68afb3cbb7
Merge pull request #2976 from SleglJan/fix/agc-drain-registration-prepare
fix(agc): drain the registration preparation pool before the device is reset
2026-10-11 01:44:40 +02:00
Adrià 59a8cbab89
Merge pull request #2981 from MarcZX100/codex/system-service-language-2769
feat(libSceSystemService): select the console language
2026-10-11 01:43:53 +02:00
Adrià 3db065af86
Merge pull request #2984 from MarcZX100/fix/agc-ignore-unchanged-watched-blocks
fix(agc): ignore unchanged imported texture blocks
2026-10-11 01:43:27 +02:00
Adrià 71d5f63018
Merge pull request #2912 from TheAggie/fix/agc-strided-buffer-overhang
fix(agc): bound a strided buffer's rounded-up last record by its allocation
2026-10-11 01:42:57 +02:00
Adrià 07e6ab0602
Merge pull request #2974 from MarcZX100/fix/structural-dominance-control-flow
test(shader): use structural dominance in CFG checks
2026-10-11 01:42:14 +02:00
Adrià cf70000356
Merge pull request #2979 from MarcZX100/fix/progress-nonvoid-stub-wrappers
fix(tools): detect non-void stub wrappers
2026-10-11 01:41:43 +02:00
Adrià 6dcfc5b646
Merge pull request #2765 from TheAggie/feat/libc-alarm
feat(libc): implement alarm
2026-10-11 01:40:26 +02:00
Adrià Franch 9678b46d8b docs(technical-debt): state the key range comp-to-single uniformity is judged over 2026-10-11 01:38:32 +02:00
Chad b89b7f953c fix(agc): expand comp-to-single DCC keys in a DCC decompress pass
Key 0x10 (GFX9_DCC_CLEAR_SINGLE in Mesa) marks a 256-byte block whose texels all equal its first texel. A CB DCC decompress pass over uniform comp-to-single keys now writes that texel over its block and stores uncompressed keys; a fast-clear eliminate over them throws.
2026-10-11 01:38:27 +02:00
Adrià Franch c9d1dbe6ed docs(debt): record rwlock destroy EBUSY choice 2026-10-11 01:37:32 +02:00
Zayd Zaari 718eb9cc3e fix(libkernel): return EBUSY when destroying locked rwlock 2026-10-11 01:37:26 +02:00
Adrià Franch 1e1554c768 docs(technical-debt): record the strided buffer overhang clamp 2026-10-11 01:37:01 +02:00
Scott Schuster dc48c61050 test(agc): a strided buffer's rounded-up last record stays within its own allocation
When another readable allocation starts right after the buffer's allocation,
the bound range still ends at the first allocation: the bytes past it are
outside the buffer the descriptor's records describe, and binding into the
neighbour would send the range back to a copy on every draw.

AI-assisted (Claude Code).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 01:37:00 +02:00
Scott Schuster b352406f70 fix(agc): bound a strided buffer's rounded-up last record by its allocation
RADV rounds a strided buffer descriptor's record count up, so stride * records
can run up to one stride past the end of the buffer's allocation. The guest
buffer region then no longer fits inside the allocation's host import and is
copied on the CPU, whole, for every draw that binds it.

When a strided descriptor ends less than one stride past the end of the
readable registered allocation that contains its base, the range is bound up
to the allocation's end. RetroArch's Dolphin core binds a 48 MiB stream buffer
with stride 20 (records 0x266667, 12 bytes past the allocation) on every draw.
With this change the buffer is bound in place from its import.

AI-assisted (Claude Code).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 01:37:00 +02:00
Adrià c07638834d
Merge pull request #2941 from CnRJay/fix/recompiler-selection-merge-loop-escape
fix(recompiler): merge a loop selection whose arm leaves the iteration where its arms rejoin
2026-10-11 01:35:31 +02:00
Adrià 6d71420c69
Merge pull request #2938 from MarcZX100/fix/agc-resize-idle-on-recreate
fix(agc): drain the device only when the swapchain is recreated
2026-10-11 01:35:27 +02:00
Adrià 29083579f4
Merge pull request #2873 from CouchRiv/fix-shader-div-scale-denorm-flush
fix(shader): flush v_div_scale_f32 input denormals
2026-10-11 01:35:02 +02:00
Daan Dehing 2dd453dae0 fix(agc): drain the registration preparation pool before the device is reset
Background registration preparations (#2583) copy the device's
SpirvTarget, whose capability and extension spans point into the
device's shader profile. Driver::stop reset the device without waiting
for the detached pool, so a preparation still queued or running read
freed extension names and agc_driver crashed at exit on RADV.

Driver::stop now closes the pool after joining the queue workers: it
stops queueing and waits until no task is queued or running. A
preparation submitted after that runs on the caller's thread, which
holds its own reference to the device, like the existing fallback for
a pool without threads.

Fixes #2891

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 01:34:05 +02:00
Adrià Franch 3983f16e37 docs(technical-debt): v_log near 1.0 bound from the exhaustive band sweep
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-11 01:33:54 +02:00
Jan Šlégl 447f3a5080 docs: note the unconditional log2 series and its f16 path
v_log_f16 is lowered through the same f32 log2, so the entry names both
and states the f16 effect measured over every f16 input (one NVIDIA
result moves onto the hardware's bits, none on RADV). The series is
chosen with OpSelect, so its cost applies to every v_log.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fnrk5Dazjb2tLooVSpdRQq
2026-10-11 01:33:44 +02:00
Jan Šlégl 580ac08478 fix(shader): correct v_log_f32 near 1.0 when the driver's log2 strays from a series
The driver's Log2 has an absolute error that does not shrink with the
result, so near 1.0 the relative error explodes: on an RTX 3080, v_log_f32
of 1 - 2^-24 is 23,947,836 ULP off. Measured on RDNA2 (gfx1036), the
hardware's log2 is within 1 ULP of the correctly rounded value, and an
eight-term series in x - 1 is within 2 ULP of both for |x - 1| <= 1/8.

The lowering keeps the driver's Log2 and takes the series only inside that
band when the two differ by more than 4 ULP, so RADV's native result stays
bit-exact and NVIDIA's is within 6 ULP inside the band.
agc_driver_log_near_one pins 64 inputs per type from the oracle with
per-lane tolerances.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012GLfKH7Sqe51wX254k1XsV
2026-10-11 01:33:44 +02:00
Adrià 383851643f
Merge pull request #2940 from CnRJay/fix/recompiler-sdwa-cvt-f16-16-byte-source
fix(recompiler): accept SDWA byte sources on v_cvt_f16_u16 and v_cvt_f16_i16
2026-10-11 01:33:36 +02:00
Adrià 76e9fd3a89
Merge pull request #2922 from XairRrR/fix/graphics-interface-diagnostic
fix(agc-driver): list both stages' interfaces when graphics interfaces disagree
2026-10-11 01:31:38 +02:00
Adrià 2cae6cc3cd
Merge pull request #2917 from XairRrR/feat/agc-prepare-unpredicted-variants
feat(agc-driver): prepare shader variants registration did not predict
2026-10-11 01:31:32 +02:00
Adrià ad3369236d
Merge pull request #2920 from XairRrR/fix/runtime-image-mode-diagnostic
fix(recompiler): describe the descriptor and modes when no runtime image mode matches
2026-10-11 01:30:51 +02:00
Adrià 1be7c79336
Merge pull request #2921 from XairRrR/fix/guest-buffer-view-bounds-diagnostic
fix(agc-driver): name the view and owner bounds when a guest buffer view exceeds its GPU owner
2026-10-11 01:30:43 +02:00
Adrià d962de918a
Merge pull request #2916 from XairRrR/feat/agc-8-8-swap-alt
feat(agc-driver): render to COLOR_8_8 targets with SWAP_ALT
2026-10-11 01:30:20 +02:00
Adrià 181420f881
Merge pull request #2915 from XairRrR/fix/spirv-shuffle-struct-extracts
fix(recompiler): fold extracts into a vector shuffle only between vectors
2026-10-11 01:23:07 +02:00
Adrià 1e52f94ea1
Merge pull request #3147 from SleglJan/feat/libc-realpath
feat(libc): implement realpath
2026-10-11 01:22:38 +02:00
Adrià b7bbe45f32
Merge pull request #2913 from MarcZX100/codex/libc-opendir-eloop-db343
fix(libc): report ELOOP from opendir symlink loops
2026-10-11 01:21:40 +02:00
Adrià 4b9f07519c
Merge pull request #2864 from MarcZX100/fix/agc-release-deferred-imports
fix(agc): release retired imports while waiting for pins
2026-10-11 01:21:06 +02:00