Commit Graph
14017 Commits
Author SHA1 Message Date
Dean 6a2b99b82d Merge pull request #1811 from gerardlesan/test/agc-mesh-ctest
test(agc): run agc_driver_mesh_tests under ctest
2026-10-09 22:41:54 +13:00
Dean fdaa12c044 Merge pull request #2073 from jdmagic/fix/ampr-clearbuffer-returns-buffer
fix(libSceAmpr): sceAmprCommandBufferClearBuffer returns the detached buffer
2026-10-09 22:41:40 +13:00
Dean 2bf781eabb Merge pull request #1856 from sarohy03/test/cli-args-coverage
test(relinker): cover CLI argument parsing
2026-10-09 22:41:25 +13:00
Dean 7bb7cc9bcb Merge pull request #1445 from Deftera186/fix/shader-fma-mix-fused
test(shader): check v_fma_mix_f32 in FmaRounding
2026-10-09 22:41:10 +13:00
Dean da8345b00d Merge pull request #1269 from st44rplatinum/feat/systemservice-mediaplay
feat(libSceSystemService): implement Disable/ReenableMediaPlay
2026-10-09 22:40:54 +13:00
Dean ca2b341852 Merge pull request #1059 from Celegans12/perf/agc-storage-image-cache-size
perf(agc): size the storage and sampled texture caches to the device
2026-10-09 22:40:39 +13:00
LeandroLP23andClaude Opus 5.5 c2231a821a fix(ajm): throw for a null buffer list with a nonzero count
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 11:37:04 +02:00
LeandroLP23andClaude Opus 5.5 2bdb979e69 fix: clear the GCC warnings in ProfileOutput, fopen, Ajm batch jobs and the SHA-256 test
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 11:37:04 +02:00
boykopovar 1c1c585722 Merge pull request #2125 from boykopovar/fix/ci-checks-after-merge
fix(ci): restore all builds and tests on main pushes
2026-10-09 12:36:40 +03:00
MathiasDevelopesandClaude Opus 5.5 e70e81dc45 fix(libSceAgcDriver): SPI_PS_INPUT_CNTL registers start at their clear-state value
A title that never writes SPI_PS_INPUT_CNTL_0 relies on its clear-state
value 0, but the register was absent from the initial context, so every
draw of a pixel shader with interpolants was rejected with "missing
register at DWORD 0x191". All 32 SPI_PS_INPUT_CNTL registers now start at
0, as in the GFX10 clear state, both initially and after CLEAR_STATE.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-09 11:30:38 +02:00
Jordan Hans 6de064f6d3 fix(shader): round the f16 fused multiply-adds once
v_fma_f16, v_fmac_f16, v_fmamk_f16, v_fmaak_f16, v_pk_fma_f16 and
v_pk_fmac_f16 rounded an f32 fused multiply-add to f16, rounding twice.
The product of two f16 values is exact in f32, so the sum is now rounded
to odd in f32 with an exact error term and then rounded to nearest even
in f16, which rounds the exact result once.
2026-10-09 09:28:33 +00:00
Negesin 4491fa9670 test(agc): skip unsupported int64 atomic subcase 2026-10-09 11:23:21 +02:00
LeandroLP23andClaude Opus 5.5 98427685e0 fix(agc): stop the profile output at shutdown only if it was created
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 11:22:30 +02:00
boykopovar 10d52b69f3 fix(ci): restore all builds and tests on main pushes 2026-10-09 12:20:50 +03:00
boykopovar 3ed0d03680 fix(build): add SPIR-V headers to shader fusion tests 2026-10-09 12:16:05 +03:00
raghav314andClaude Opus 5.5 f57d1647b5 perf(recompiler): compute post-dominators visiting successors first
computePostDominators iterates its sets to a fixed point, visiting the
blocks in id order. Post-dominance flows from a block's successors back to
it, and successors mostly have higher ids, so each pass moved the sets back
by about one block: a long program needed about as many passes as it has
blocks, each costing O(blocks^2). recomputeAnalyses runs it after every
split of splitSharedMergeBlocks, up to four times per block.

Visit the blocks in post-order of the CFG (successors first), then any the
entry does not reach. The sets start from every block and only shrink, so
the iteration still converges to the same greatest fixed point, now in a
few passes.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 14:40:08 +05:30
raghav314andClaude Opus 5.5 7638ade79f fix(agc): render into 1D color targets as one-row 2D targets
CB_COLOR_ATTRIB3.RESOURCE_TYPE 0 is a 1D surface (AddrResourceType
ADDR_RSRC_TEX_1D in addrlib). On GFX10, addrlib allows a 1D surface the
linear and render swizzle modes (Gfx10Rsrc1dSwModeMask) and picks its
swizzle pattern the same way as for a 2D surface (GetSwizzlePatternInfo
only tells 3D apart). So a 1D color target one row high is laid out
exactly like a 2D target one row tall, and is decoded as one.

A 1D target with a standard swizzle mode is rejected as invalid; one
with more than one row is not modeled and is rejected.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 14:40:08 +05:30
Dean d9484c719b Merge pull request #2099 from oneandonlydean/fix/spirv-headers-test-includes
fix(tests): add SPIRV-Headers to the tests that include VulkanTestDevice.hpp
2026-10-09 22:07:10 +13:00
boykopovar 49c27caf55 Merge pull request #2113 from boykopovar/ci/public-lint-gated-builds
ci(build): require manual full builds and auto-test relinker for contr
2026-10-09 12:02:35 +03:00
boykopovar 0ab2a04dd7 ci(build): require manual full builds and auto-test relinker for contributors 2026-10-09 11:58:02 +03:00
Karan Vora 809178603f perf(shader): skip the tiny product check that a constant factor settles
With f32 denormals flushed, every f32 multiply and fma checks whether the
exact product is below 2^-126 (#1850): two exponent extracts, a 32-bit
significand multiply-high and a chain of compares and selects. When a
factor is a literal or inline constant, its exponent settles the check
during translation:

- a factor that is zero (after the input flush), infinite, NaN or at least
  1 in magnitude never gives a tiny product, so the check is not emitted;
- a power-of-two factor never carries out of the significand product, so
  the multiply-high is not emitted.

Constant sources are folded with their abs, neg and denormal flush, so the
factor reaches the check as a constant.
2026-10-09 04:39:22 -04:00
Karan Vora d7007db4dc perf(shader): drop denormal flushes of values that can't be denormal
With f32 denormals flushed, every f32 result is flushed when it is
written and every f32 source when it is read, so a source computed by an
earlier flushing op is flushed twice. A flush returns any value that is
not a denormal unchanged, and the driver can't tell that the first flush
already removed them.

DenormalFlushEliminator replaces a flush whose source can't be a
denormal with the source: a flush, a normal or zero constant, a sign
change, absolute value, clamp or bit cast of such a value, an integer or
f16 converted to f32, and a select or phi of such values.
2026-10-09 04:39:16 -04:00
Dean Galvin 37bc6f2e74 fix(tests): add SPIRV-Headers to the tests that include VulkanTestDevice.hpp 2026-10-09 21:29:22 +13:00
Dean 6cc0503dac Merge pull request #1550 from ska2704/fix/progress-exclude-test-sources
fix(progress): exclude library test fixtures from function counts
2026-10-09 21:04:18 +13:00
Dean b38abc0a69 Merge pull request #1774 from 011010/test/guest-intel-trampolines-e2e
test(relinker): execute the guest Intel trampolines end to end
2026-10-09 21:04:06 +13:00
Dean a3475ee450 Merge pull request #1563 from krishnaraya4/test/agc-pin-int64-atomics-fail-emit
test(agc): pin the 64-bit atomics emission failures
2026-10-09 21:04:02 +13:00
Dean 25f1008710 Merge pull request #1558 from krishnaraya4/test/agc-target-has-capability
test(agc): check device capabilities by name in the execution tests
2026-10-09 21:03:59 +13:00
Dean 943bd52616 Merge pull request #1514 from CyanBook/docs/drop-json2-value-clear-debt
docs(debt): drop sce::Json::Value::clear from PPSA23566 unknown signatures
2026-10-09 21:03:55 +13:00
Dean 7988ed27c9 Merge pull request #1510 from Kikoarl/fix/unique-test-temp-paths-cpu-topology-icon
test: give cpu topology and icon resource temp paths a random suffix
2026-10-09 21:03:51 +13:00
Dean 69363a01ea Merge pull request #1428 from NahuelGenchi/fix-flip-compute
test(agc): match the unreadable-code error and run the flip compute mode in ctest
2026-10-09 21:03:47 +13:00
Dean 0905b51f6a Merge pull request #1931 from johnmaia/feat/videodec2-hevc-vp9
feat(libSceVideodec2): decode HEVC and VP9
2026-10-09 21:03:44 +13:00
Dean 31ca81bfc3 Merge pull request #1910 from TheAggie/fix/pad-vibration-mode-compatible
fix(pad): accept the compatible vibration mode
2026-10-09 21:03:40 +13:00
Dean f97205908a Merge pull request #1828 from LeandroLP23/test/patched-libraries-load
test(libs): load every patched library with its imports bound
2026-10-09 21:03:35 +13:00
Dean eaed9371ce Merge pull request #1820 from hugodearaujo/fix/audioout2-main-port-formats
fix(audioout2): match measured MAIN port format validation
2026-10-09 21:03:31 +13:00
Dean 6a7f40514d Merge pull request #1771 from TideOPL/pr/savedata-mount-status
fix(savedata): report a CREATE2 mount of an existing save as not created
2026-10-09 21:03:27 +13:00
Dean e4492fac50 Merge pull request #1712 from LuisBiceps/test/libc-guest-errors-thread-errno
test(libc): reset errno after the worker thread in guest_errors
2026-10-09 21:03:23 +13:00
Dean cb6d833295 Merge pull request #1705 from muhzain05/fix/ult-finalize-busy
fix(ult): reject finalize with outstanding ulthreads
2026-10-09 21:03:19 +13:00
Dean 812c86cde7 Merge pull request #1481 from awake-devel/feat/http-auth-info-callback
feat(http): accept sceHttpSetAuthInfoCallback
2026-10-09 21:03:15 +13:00
Dean 3e66276cba Merge pull request #1367 from Raghav314/fix/videoout-window-at-start
fix(videoout): create the window and the device when VideoOut starts
2026-10-09 21:03:10 +13:00
Obi Newman 881fb01069 feat(libs): report Http2, Ssl and Net memory pool statistics (#1119)
sceHttp2GetMemoryPoolStats, sceSslGetMemoryPoolStats and
sceNetGetMemoryPoolStats threw. PPSA16064 (Minecraft Dungeons II,
Unreal Engine) queries all three while its HTTP module starts, and
aborted there.

Each library now records the pool size given at sceHttp2Init,
sceSslInit or sceNetPoolCreate and reports it with a peak and current
use of 0: the offline Http2 and Ssl models and the host-socket Net
library allocate nothing from these pools. The layouts follow the PS4
SDK's *MemoryPoolStats structures. Net returns EBADF for an unknown
pool and EINVAL for a null output, like its other pool calls; Http2 and
Ssl throw for both, as their error codes are unknown. Terminating a
context or destroying a pool forgets its size.

sceHttp2SetResolveRetry, which the title calls next, accepts and
ignores its value like the other Http2 settings. The four Http2
WebSocket exports the title imports are added as unimplemented.

guest_http2, guest_ssl and guest_sce_net check the reported sizes;
guest_sce_net also checks the null-output and unknown-pool errors.
2026-10-09 21:03:06 +13:00
Dean d3a926ad36 Merge pull request #2077 from johnmaia/feat/np-entitlement-info-list
feat(libSceNpEntitlementAccess): report signed out for entitlement info lists
2026-10-09 21:03:01 +13:00
Dean bf65cfb2be Merge pull request #2004 from NahuelGenchi/feat/json2-object-empty
feat(libSceJson2): implement sce::Json::Object::empty
2026-10-09 21:02:56 +13:00
Dean a04350ae25 Merge pull request #1861 from fisherjoey/fix/ajm-atrac9-multichannel
fix(ajm): decode multichannel ATRAC9 streams
2026-10-09 21:02:52 +13:00
Dean d51e8f020a Merge pull request #1838 from LeandroLP23/feat/net-resolver-multiple-records-ex
feat(libSceNet): implement sceNetResolverStartNtoaMultipleRecordsEx
2026-10-09 21:02:48 +13:00
Dean 9e8db341d8 Merge pull request #1775 from MathiasDevelopes/fix/libscehttp-wait-request
fix(libSceHttp): sceHttpWaitRequest reports no ready requests
2026-10-09 21:02:43 +13:00
boykopovar 20cfc0130f fix(agc): preserve write tracking for shared host import aliases 2026-10-09 10:59:50 +03:00
boykopovar 0e1d25a8a2 fix(agc): avoid redundant transfers for untracked imported textures 2026-10-09 10:50:49 +03:00
Zheorgyan 688df0b880 test(libc): wait for std::async thread teardown in host_thread_local 2026-10-09 09:45:21 +02:00
Dean Galvin c8c90995a0 fix(shader): match half-wave reductions in vertex programs
A program's entry EXEC is the ballot of !gl_HelperInvocation in a pixel program and the ballot of true in vertex, local and tessellation programs (emitEntryPrologue). The half-wave reduction matcher only accepted the pixel form, so a wave64 vertex program that scans keys selected under its EXEC and reads lane 63 threw that the lane is outside the 32-lane host subgroup.

EntryLaneWalk now also accepts a ballot of true as within the entry EXEC for those stages. Every invocation is live at their entry, and a later ballot of true holds only invocations that are still active. Pixel programs keep the !gl_HelperInvocation form, because a ballot of true there includes helper invocations. Compute and mesh programs keep their own form too, because their entry EXEC can bound the local invocation index.
2026-10-09 20:36:07 +13:00
Dean Galvin ac2d172e0b perf(agc): bind misaligned draw buffer regions in place through the view adjustment
A draw's guest buffer region inside a host import at an offset off
minStorageBufferOffsetAlignment was copied per build (a new buffer, an
input snapshot, a vkCmdCopyBuffer that ends the open render pass), and
DirectRegions refused such builds as templates.

Descriptor already binds any DWORD-aligned view from the aligned offset
below it and passes the remainder through the shader's memory offset
slot. A draw build that is not address-based and whose every guest buffer
element has such a slot (a push constant byte, or a shader data byte
inside its data buffer) now binds a region whose offset in its import is
DWORD aligned in place, like an aligned one: its read-only views are
snapshotted per draw by PrepareDrawBindings at address - adjustment, the
import serial keys the template, and Revalidate proves it per use.
Dispatches keep the copy (they read in-place inputs at execution, not at
record).

agc_driver_recorder_tests misalignedRegionTests: a misaligned read-only
draw region is read in place, the build is reusable, the push constant
carries the adjustment, and the per-draw snapshot starts at the aligned
offset below the view.
2026-10-09 20:36:07 +13:00