Commit Graph
4862 Commits
Author SHA1 Message Date
Dean Galvin 95a2d1184a fix(agc): load the import destroy functions when the device is unchanged
A context without a device, such as the graphics test's mock, leaves state.device equal to context.device, so refreshImports never loaded destroyBuffer and freeMemory and retiring an import called a null pointer.
2026-10-10 09:35:43 +02:00
MarcZX100 cf5c3ebef3 fix(agc): retire host imports before guest unmap
The pin waiter now receives the mutation range, drains GPU work and retires every overlapping host import before the unmap callback releases the pages. Deferred import retirement keeps only the device handle and the Vulkan destroy functions, so the static import registry no longer owns a Context or its BufferPool past the device.
2026-10-10 09:35:43 +02:00
Nahuel Genchi eb06284c78 fix(shader): read 2D image accesses through 1D T#s as measured
A compute shader in Astro Bot samples an image as 2D while the bound
T# is 1D, and the recompiler refused it. Offer a 1D runtime mode for
sampled images used only by image_sample_lz and mip-less image_load,
which reads the texel the first coordinate selects, as measured on
RDNA2 in #2237.
2026-10-10 09:35:34 +02:00
Adrià 2f655b124a Merge pull request #2327 from EdouardSence/perf/agc-registration-structurize
perf(agc): drop the redundant structurize pre-check at registration
2026-10-10 09:34:36 +02:00
eliasbruno124-dev 5a1b5bf947 fix(libSceAgcDriver): report unavailable bulk resource registration 2026-10-10 09:34:26 +02:00
aleandClaude Fable 5.1 0bea402a1c feat(shader): follow FP16_OVFL in every f16 result
With FP16_OVFL=1 the hardware writes an f16 result that would round to
infinity as the largest finite value of that sign, unless a source
operand is infinite. v_div_fixup_f16 keeps the infinity it writes for a
zero denominator or an infinite numerator. Measured on RDNA2 (gfx1036)
at IEEE=0 and IEEE=1 with f16 denormals kept and flushed.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-10 04:32:38 -03:00
Adrià 17d69d173f Merge pull request #1902 from fisherjoey/fix/agc-null-pixel-on-demand
fix(agc): prepare the null pixel program at draw when its variant was not prepared
2026-10-10 09:32:29 +02:00
Raihan Abdul MajidandClaude Opus 5.5 26035fab57 perf(agc): handle the dword pattern-fill kernel as a buffer fill
A 64-thread compute kernel (69 dwords) stores pattern[min(i % s9, 3)],
the pattern in s4..s7, to dword i of a 4-byte-stride buffer for every
i below min(launched threads, s8, num_records), with the group id in s10.
PPSA01325 runs it every frame to clear DCC keys, HTILE and other
metadata. It ran as a shader; a direct dispatch with a period of 1, 2
or 4 dwords, whole 16-byte units and a 16-byte aligned destination now
goes through fillBuffer like the existing fill kernel (clear path,
FillBuffer, key memo). APS5_NO_FILL_HLE turns both off.

tests/execution/DwordPatternFill.cpp checks the matcher and runs the
kernel through Submit for matched and unmatched cases (periods 3 and 5,
partial counts, record clamps, a partial dispatch); with
APS5_NO_FILL_HLE=1 the same expectations hold for the translated kernel.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01UTjpbMX7BUFMZZaxJE98zV
2026-10-10 09:31:03 +02:00
Adrià e8b47b9270 Merge pull request #2043 from CouchRiv/fix-shader-cube-sc-tc-snan
fix(shader): quiet signaling NaN cube results in IEEE mode
2026-10-10 09:28:56 +02:00
Adrià f198c8ff97 Merge pull request #2036 from CouchRiv/fix-shader-minmax-f16-f64-ieee
feat(shader): follow IEEE_MODE in f16 and f64 min and max
2026-10-10 09:28:37 +02:00
Adrià 51b8cef4f9 Merge pull request #1969 from lubaxe/fix/agc-null-vertex-buffer-descriptor
fix(agc): read zero for vertex attributes behind a null V#
2026-10-10 09:28:06 +02:00
Adrià 41e34915b8 Merge pull request #1777 from MathiasDevelopes/feat/libkernel-random-device
feat(libkernel): open /dev/random and /dev/urandom for reading
2026-10-10 09:27:46 +02:00
Adrià d99babe24c Merge pull request #1607 from saarthakpant/fix/agc-per-stage-color-attachments
fix(agc): count a pixel stage's colour attachments against maxPerStageResources
2026-10-10 09:25:20 +02:00
EdouardSenceandClaude Opus 5.5 d8ae88cf54 perf(agc): drop the redundant structurize pre-check at registration
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 09:23:55 +02:00
MarcZX100 606bc161aa test(agc): cover negative point-wrap offsets 2026-10-10 07:23:24 +00:00
MarcZX100 7bd8a0a66a fix(shader): normalize negative color compare wrap indices 2026-10-10 07:23:24 +00:00
Adrià 5fd101099d Merge pull request #1733 from TheAggie/feat/agc-texture-bc-swizzle
feat(agc): accept texture BC swizzles that leave the sampled border unchanged
2026-10-10 09:23:13 +02:00
Dean 256b8ed4f3 Merge pull request #2584 from oneandonlydean/revert/2279
revert(shader): undo #2279's fma NaN result selection
2026-10-10 20:22:49 +13:00
Adrià b23bd7323f Merge pull request #1831 from yabanana/fix/macos-descriptor-array-ranges
fix(agc): preserve descriptor array ranges in draw snapshots
2026-10-10 09:22:08 +02:00
Adrià 5596e5bd62 Merge pull request #1837 from EdouardSence/fix/agc-shader-header-copies
fix(agc): accept bound copies of a registered shader header that differ only in user_data
2026-10-10 09:20:19 +02:00
Celegans12 f6fbb480c5 perf(recompiler): preserve sorted dominance sets during insertion
Both dominance analyses start from sorted unique sets and intersect them.
Insert the current block ID with lower_bound instead of sorting again.
Preserve every intermediate set and the existing ID-order iteration.
Keep the generic unsorted helper and all graph rewrite logic unchanged.
Compare both analyses against the original algorithms on six raw CFGs.
Cover finite loops, closed SCCs, unreachable islands and permuted IDs.
2026-10-10 09:20:14 +02:00
Adrià eba8525acb Merge pull request #1924 from fisherjoey/fix/depth-bias-per-face
fix(agc): draw each face with its own depth bias
2026-10-10 09:19:03 +02:00
Hannah Lyons 1bfb3cbf09 feat(libc): implement the C locale wide character class functions 2026-10-10 03:18:53 -04:00
Adrià 3d48f65ae1 Merge pull request #1862 from aashishaxo/fix/issue-1581
fix(libSceAgcDriver): step over the one-dword NOP pad ffff1000
2026-10-10 09:18:40 +02:00
Sasha PapoandClaude Opus 5.5 e6e0b69101 fix(agc): read zero for vertex attributes behind a null V#
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 09:17:49 +02:00
Aryan Sharma e548e594fa test(audioout): check pad ports in the main mix without a pad device
With SDL's disk driver no pad audio device is open, so AudioOut2MixPorts
runs with no pad output. A vibration port and a mono pad speaker port
are pushed together: only the speaker's data reaches the main mix, and
a vibration port alone leaves it silent.
2026-10-10 12:46:54 +05:30
Aryan Sharma 34d09b5460 fix(audioout): drop vibration ports when no pad audio device is open
Without a DualSense audio device every AudioOut2 port was mixed into the
main output, including PAD_VIBRATION ports. Their waveforms drive the
controller's actuators on the console and are never heard; mixed into
the speakers they made PPSA28997's combat about 20 dB louder than its
dialogue. Vibration ports are now left out in that case; pad speaker
ports still go to the main output.
2026-10-10 12:46:54 +05:30
Adrià f9cd694c32 Merge pull request #1988 from NevesHenry/fix/libkernel-linux-thread-stack-size
fix(libkernel): give Linux guest threads the stack size they request
2026-10-10 09:16:35 +02:00
AlexandClaude Opus 5.5 6d1fe2b499 feat(shader): follow IEEE_MODE in f16 and f64 min and max
The f16 min/max/min3/max3/med3 now pick NaN results on the bits and
quiet a signaling NaN only with IEEE=1. With IEEE=0, v_min_f64 and
v_max_f64 return the other operand for a NaN, not a quieted NaN. This
completes #1826 for these forms, as measured on RDNA2 (gfx1036).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-10 09:16:09 +02:00
Adrià 97b985f157 Merge pull request #2046 from CouchRiv/fix-shader-mullit-flush
fix(shader): flush v_mullit_f32 denormals in the float modes that flush them
2026-10-10 09:13:07 +02:00
AlexandClaude Opus 5.5 2185d82522 fix(shader): quiet signaling NaN cube results in IEEE mode
With IEEE_MODE=1 the hardware quiets a signaling NaN that v_cubesc,
v_cubetc or v_cubema_f32 returns, keeping the sign the instruction gives
it; with IEEE=0 the bits pass through. Same rule as #1867, measured on
gfx1036 in both modes.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-10 09:13:00 +02:00
MathiasDevelopesandClaude Opus 5.5 7810f8464e feat(libkernel): open /dev/random and /dev/urandom for reading
Neither existed under the guest root, so opening them failed and titles
that then read from the descriptor crashed. Opening either for reading
now returns a descriptor whose reads, positioned reads and vector reads
fill the buffer from the host's random device, as
sceRandomGetRandomNumber does. Opening them for writing throws.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-10 09:12:55 +02:00
Adrià a86ffd3368 Merge pull request #1995 from lubaxe/feat/agc-store-pending-at-flip
feat(agc): store pending storage-image results at each flip with APS5_STORE_AT_FLIP
2026-10-10 09:12:46 +02:00
ahandClaude Sonnet 5.5 5f6da63e4a fix(shader): evaluate signed comparisons in SRT expressions
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RPEHi56pUMbT1X4VZwStm9
2026-10-10 02:08:12 -05:00
Dean 01dc5c14a3 Merge pull request #1764 from Zurisen/fix/flock-nonblocking-contention
fix(libkernel): return EWOULDBLOCK from a contended LOCK_NB flock
2026-10-10 20:08:00 +13:00
Dean 79d1220320 Merge pull request #2342 from AchrafReyani/fix/remove-readonly
fix(libc): remove read-only files on Windows
2026-10-10 20:07:46 +13:00
Dean 50cea78f6b Merge pull request #2291 from AchrafReyani/fix/libkernel-null-time-results
fix(libkernel): accept null results in gettimeofday and clock_getres
2026-10-10 20:07:40 +13:00
Daniele Giovane 1730b29c4a fix(agc): preserve descriptor array ranges in draw snapshots 2026-10-10 09:07:26 +02:00
Adrià 72ef435ec0 Merge pull request #2143 from erick-dsnk/fix/kernel-aio-completion-errors
fix(kernel): preserve invalid-offset errors in AIO completions
2026-10-10 09:06:53 +02:00
ahandClaude Sonnet 5.5 23443fb34d fix(agc): prepare combined shader layouts when linking
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RPEHi56pUMbT1X4VZwStm9
2026-10-10 02:06:51 -05:00
EdouardSenceandClaude Opus 5.5 cd1f76c831 fix(agc): accept bound copies of a registered shader header that differ only in user_data
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 09:06:48 +02:00
Joey Fisher e2664bef83 fix(agc): register the null pixel program with the inputs and user SGPRs its draws use
Since #1178 the SPI_PS_INPUT_ENA/ADDR emplace calls did nothing, so the registered variant had no pixel inputs, and null pixel draws took the last pixel shader's user SGPR count and the bound targets' export mapping. Registration now overwrites those registers, the draw gives the null program no user SGPRs and an empty export mapping, and the at-draw preparation is left for wave32 only. Root cause found by @Raghav314.
2026-10-10 09:06:31 +02:00
Joey Fisher bbfd61430a fix(agc): prepare the null pixel program at draw when its variant was not prepared 2026-10-10 09:06:23 +02:00
Adrià ca412953ea Merge pull request #2042 from CouchRiv/fix-shader-pack-b32-f16-snan
fix(shader): quiet signaling NaN halves in v_pack_b32_f16 in IEEE mode
2026-10-10 09:05:54 +02:00
Adrià c8e266577a Merge pull request #1934 from fisherjoey/fix/shader-ancillary-moved-word
fix(shader): carry a packed pixel ancillary through phis when every reader extracts a modelled field
2026-10-10 09:05:48 +02:00
Adrià 04d06f0d45 Merge pull request #2257 from Dextroid17/fix/defer-undecodable-shaders
fix(agc): defer a shader whose code does not decode instead of aborting the title
2026-10-10 09:05:21 +02:00
Joey Fisher e0084a56b0 fix(agc): draw each face with its own depth bias
A draw that rasterizes both faces with different front and back depth
bias was rejected, since Vulkan has one depth bias per draw and the
cull mode is pipeline state. Such a draw is now recorded twice in the
same pass: front faces with the back faces culled and the front bias,
then back faces with the front faces culled and the back bias. A face
whose offset is disabled gets no bias.
2026-10-10 09:04:37 +02:00
Dean Galvin 1be9b1e72f revert(shader): undo #2279's fma NaN result selection
#2279 made agc_driver_f32_arithmetic_nan fail on NVIDIA (Windows):
v_fmamk_f32 returns a quiet NaN where the signalling one is expected
(lane 1 no float mode v_fmamk_f32 is 0x7fc12345, expected 0x7f812345),
5/5 runs on main and 5/5 passing with #2279 reverted. CI's Windows job
skips the AGC execution tests, so it did not show there.

v_fma_legacy was rewritten as a split multiply and add after #2279; it
keeps that and gets back the invalid-product argument it passed before.

Fixes #2581
2026-10-10 20:02:43 +13:00
Adrià 40a5b8fae9 Merge pull request #2142 from MathiasDevelopes/fix/videoout-overlay-bus-flips
fix(libSceVideoOut): overlay-bus flips no longer replace the main output
2026-10-10 09:01:37 +02:00
Adrià 3a1c79f387 Merge pull request #2219 from XairRrR/feat/agc-depth-clear-draws
feat(agc-driver): draw DB_RENDER_CONTROL depth clears
2026-10-10 08:59:33 +02:00