Commit Graph
14017 Commits
Author SHA1 Message Date
Avijit SinghandCopilot 1bb9f49ac4 docs(web): clarify batch output size limits
Co-authored-by: Copilot <[email protected]>
2026-10-15 06:46:14 +05:30
Avijit SinghandCopilot e78695baf5 docs(web): explain batch conversion bundles
Co-authored-by: Copilot <[email protected]>
2026-10-15 06:46:07 +05:30
Avijit SinghandCopilot 919af8c6dc feat(web): select multiple app archives
Co-authored-by: Copilot <[email protected]>
2026-10-15 06:42:57 +05:30
Avijit SinghandCopilot 297b0dfacf test(web): make batch limits independently testable
Co-authored-by: Copilot <[email protected]>
2026-10-15 06:39:30 +05:30
Avijit SinghandCopilot cd3781c1cf test(web): exercise batch inspection and conversion
Co-authored-by: Copilot <[email protected]>
2026-10-15 06:38:22 +05:30
Avijit SinghandCopilot 55a188fcb8 feat(web): stream multiple app packages in one ZIP
Co-authored-by: Copilot <[email protected]>
2026-10-15 06:37:56 +05:30
Avijit SinghandCopilot c64fa3d580 test(web): cover app bundles in a shared archive
Co-authored-by: Copilot <[email protected]>
2026-10-15 06:36:20 +05:30
Avijit SinghandCopilot b3b1517a5c feat(web): add batch sizing and output naming
Co-authored-by: Copilot <[email protected]>
2026-10-15 06:34:55 +05:30
Dean Galvin eac8bfcfc0 fix(libc): list the directory once for a missing path that may be a relinked module
A read-only open, stat or reachability check of a missing path listed its
directory twice: once for a case-insensitive match of the name and again for
a case-insensitive match of the relinked <name>.guest.prx (#5434). Both
names are now matched in the same listing. Precedence and the ambiguous-name
errors are unchanged.
2026-10-15 13:59:12 +13:00
XairRrR f991052cfd test(agc): an empty register list into a null buffer still throws
AI-assisted: yes
2026-10-15 02:54:50 +02:00
NaitikJoshiProandClaude Opus 5.5 498c00deb3 fix(agc): read unregistered graphics programs beside registered shaders
Since 39fdc48b5 a graphics program outside every registered shader was
read raw only while the registry was empty, and any RegisterShader after
the first raw draw threw. A title that registers some shaders through
sceAgcCreateShader and also draws programs it never registers stops at
its first such draw with "graphics program does not belong to a
compatible registered shader": oops-sdk homebrew registers its display
shaders while radeonsi (oops-mesa) submits raw programs.

Graphics programs now resolve as compute dispatches already do: an
address inside a registered shader resolves to that registration (a
registration of another type still throws), any other address is read
raw. RegisterShader throws only when the new shader's code overlaps a
graphics program that was drawn raw, where the program would get a
second identity (the draw cache revalidates raw programs by reading them
raw), instead of after any raw draw.

The drawn range is recorded once per raw snapshot: a flag on the
snapshot keeps later decodes of the same program off the lock. Recorded
ranges are merged, so the overlap check looks only at the predecessor of
the queried end.

Tests: agc_driver_prepared_graphics (a draw whose programs are registered
as compute shaders is refused, where it used an address outside every
registration before), agc_driver (ProgramSnapshot reads raw beside registered shaders
and refuses a registered program of another type; nested, overlapping
and adjacent raw ranges), agc_driver_prepared_unregistered_graphics
(raw-drawn ranges recorded exactly, unrelated code not reported).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-15 06:24:14 +05:30
Adrià 8cd937e291 Merge pull request #5136 from nikowolf123/fix/ci-pr-overlap-main-commit
fix(ci): ignore the main commit in pr-overlap change checks
2026-10-15 02:43:30 +02:00
Yunus Shaikh af3bd503cb refactor(agc): declare the largest device-local heap lookup after the budget helpers
Its declaration sat right after ClearCachedTextures, where another open change adds a line too. It now follows SampledBudgetReportDue, with the other memory-budget helpers.
2026-10-14 17:42:42 -07:00
Adrià 839d242405 Merge pull request #5508 from Zinebyte/test/executable-segment-scan-boundaries
test(relinker): cover executable segment scan boundaries
2026-10-15 02:38:28 +02:00
PYTHONRETARDEandClaude Opus 5.5 c494f33526 test(libkernel): deny the kqueue parent listing to the token user's SID
DeniedParentWatch denied FILE_LIST_DIRECTORY to the name GetUserNameW
returns. When the user name equals the computer name, LookupAccountNameW
resolves that bare name to the computer's domain SID (SidTypeDomain), so
the deny entry matched no one, the parent watch was allowed and the test
aborted on an empty error. The entry now names the SID of the process
token's user.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-15 00:18:40 +00:00
Josip Parlov 0e15b9be97 fix(agc): reuse the current detiler descriptor pool once its batches complete
When the current pool filled, the search for a completed pool started after it and skipped it, so a
title whose batches had all completed got a new pool instead of resetting the full one. The search
now ends at the current pool. A detiler test fills three pools' worth of sets with no batch in
flight and requires the pool count to stay the same.
2026-10-15 02:17:14 +02:00
Josip Parlov 8e56f56102 fix(agc): recycle detiler descriptor pools once their batches complete
TextureDetiler reset its descriptor pools only when the recorder was idle, so a recorder that keeps
work in flight grew a 64-set pool for every 64 detiles until vkAllocateDescriptorSets failed with
VK_ERROR_OUT_OF_DEVICE_MEMORY. PPSA25344 with its title near 9 FPS stopped on that after 12 and 22
minutes. Each pool now keeps the serial of the newest batch that used one of its sets, and a pool
whose batches completed (Recorder::CompletedThrough) is reset and reused before a new one is
created. The texture, image and CMASK pools share that ring.
2026-10-15 02:03:44 +02:00
Dean Galvin 5fd9c80faf test(shader): expect request version 29 with the default quad masks in the serializer replays
Requests replayed from versions 22 to 24 now re-serialize at version 29 with
the default quad pixel mask (0xf) and quad sample masks (0xffff) after the dither and front-face flags, plus the empty linked call fallback list.
2026-10-15 13:00:34 +13:00
fdfawef324andCodex dbbe282c14 fix(agc): require demote for masked subgroup reads
ReadFirstLane, Ballot and PermuteU32 can consume uncovered helper lanes after a fragment explicitly enables EXEC. Classify those operations as neighbour reads so a partial quad mask refuses their kill fallback when demote is unavailable. ReadFirstLane also stays protected when a constant whole-quad instruction folds away.

The CPU regression covers explicit EXEC, constant WQM, a comparison ballot and ds_permute. Unmasked programs still compile, supported masked programs retain demote and their subgroup operation, and constant colour keeps the kill fallback. The recovered source fails the readfirstlane and ballot checks; the corrected source passes both the focused check and shader-memory suite.

Co-Authored-By: Codex <[email protected]>
2026-10-15 13:00:34 +13:00
fdfawef324 1ffc5f672b feat(agc): emulate per-pixel multisample coverage masks
Decode the four PA_SC_AA_MASK fields at the rasterized sample count. Use the native Vulkan mask when all four pixels agree and apply varying masks in the fragment shader, preserving helpers and combining coverage with alpha-to-coverage and shader mask exports. Add the normalized masks to pipeline, draw and shader keys and the versioned replay request.

Refuse unsupported conservative-raster, centroid and early depth/stencil memory-write cases. Synthetic readbacks cover driver submission, depth/stencil suppression, fragment stores and one-sample and four-sample coverage.
2026-10-15 13:00:34 +13:00
Michon 90783f2748 fix(agc): count whole-quad mode as a neighbour-lane read for a quad mask without demote
A program that enables whole-quad mode (s_wqm_b64) and then reads a ballot or
readfirstlane sees the helper lanes, which OpKill removes.
2026-10-15 12:59:39 +13:00
Michon 90b20afac8 fix(agc): demote quad-mask pixels to helpers instead of killing them
With PA_SC_AA_MASK covering only some pixels of a quad, the uncovered pixels
run on the hardware as helper lanes, so derivatives of the covered pixels stay
defined. OpKill ends those invocations; OpDemoteToHelperInvocation keeps them
as helpers. The device enables VK_EXT_shader_demote_to_helper_invocation when
available and passes the DemoteToHelperInvocation capability and its SPIR-V
extension to the recompiler target and the graphics shader validation. A
demoted pixel also reads as a helper, so its initial EXEC bit is clear as on the
hardware. Without demote, OpKill stays for pixel programs that read no
neighbouring lanes; implicit-LOD sampling, LOD queries and cross-lane reads are
refused. The quad pixel mask execution test now also samples a mipmapped
texture with implicit LOD under the mask.
2026-10-15 12:59:39 +13:00
Michon 72518f64fb feat(agc): single-sample sample masks as a per-quad-pixel discard
With one sample, PA_SC_AA_MASK leaves one coverage bit per pixel of the 2x2 quad,
so a draw can cover only some pixels of every quad (GTA V renders a target one
quarter of the pixels at a time this way). The pixel stage info carries that 4-bit
mask; a fragment shader whose mask is not full starts by killing the invocation
unless its gl_FragCoord quad position is covered, and runs without early fragment
tests. The mask is part of the recompile cache key and the serialized request
(version 24). Sample masks of multisampled draws stay refused.
2026-10-15 12:59:39 +13:00
Romans Pokrovskis 008f91501a test(agc): exercise native depth feedback and clear-value refusals 2026-10-15 02:51:31 +03:00
husari.orozco b7948261a9 test(agc): cover a Layer input without geometry shaders 2026-10-14 17:45:15 -06:00
husari.orozco bc62c97dee fix(agc): lower a fragment Layer input through the viewport index layer extension 2026-10-14 17:45:15 -06:00
Jota 006e176812 fix(relinker): compare guest module directories by identity
(cherry picked from commit 6e3b80d65bd47344b896af9cbc763033fe6d5be0)
2026-10-14 23:42:30 +00:00
MarcZX100 df4350f3ae fix(libSceVideoOut): preserve relative mouse mode for mouse-to-stick 2026-10-14 23:40:49 +00:00
Dextroid17 4aeb8ef499 test(agc): stamp the guest writes the recorder tests make behind the driver's back 2026-10-14 19:39:04 -04:00
Dean ab9a476840 Merge pull request #5583 from BlizzyInc/fix/sample-through-1d
fix(shader): read explicit-LOD 2D samples through 1D T#s as measured
2026-10-15 12:34:15 +13:00
Dean 4bdfc9c801 Merge pull request #5631 from moong15/codex/skip-unused-pixel-stage
fix(agc): skip unused pixel stages with retained export formats
2026-10-15 12:33:48 +13:00
MiniRML a76fcc6648 test(tools): support Python 3.9 in oracle cache regression 2026-10-14 16:25:47 -07:00
ivica00andCursor b526a115af fix(agc): store the occlusion ready bit without reading the dump
Co-authored-by: Cursor <[email protected]>
2026-10-15 01:24:28 +02:00
ivica00andCursor 64844bd0e4 fix(ajm): keep the ATRAC9 PeekInt fast path portable and fail if the source moves
Co-authored-by: Cursor <[email protected]>
2026-10-15 01:24:28 +02:00
MarcZX100 7918cfc49a fix(libSceAgc): reserve complete atomic GDS packets 2026-10-14 23:21:34 +00:00
BIGFERRY999 c33036b162 feat(libc): implement safe wide string and concatenation functions 2026-10-15 00:20:27 +01:00
Adrià 2559e96233 Merge pull request #5531 from KauaSantos702/fix/name-psml-savedata-nids
fix(psml): name two exports that only had NIDs
2026-10-15 01:17:00 +02:00
Romans Pokrovskis 6972b5ae07 fix(agc): filter stencil aliases before native depth sampling 2026-10-15 02:15:38 +03:00
Romans Pokrovskis 745d483176 refactor(agc): isolate native depth routing from color dependency 2026-10-15 02:15:38 +03:00
Romans Pokrovskis afb636b7b2 test(agc): wire native depth fixture and descriptor controls 2026-10-15 02:15:38 +03:00
Romans Pokrovskis 7c510c6a4a fix(agc): retain ITERATE_256 for native depth descriptors 2026-10-15 02:15:38 +03:00
Romans Pokrovskis 01fdabd964 test(agc): use current context interface in native depth fixture 2026-10-15 02:15:38 +03:00
Romans Pokrovskis f56e3bc467 fix(agc): refuse native multisampled depth attachment feedback
Reject native sampled views of the depth image attached by the same draw before pipeline creation. Keep unrelated views, other devices and the single-sample path unaffected. Add unrun native-view refusal and scope controls; full dependency-stack build and runtime validation remain pending.
2026-10-15 02:15:38 +03:00
Romans Pokrovskis ee1ba73a2f feat(agc): sample native multisampled depth attachments
Adapt our preserved native-depth sampling work from c0d9edf and sample-aware footprint work from 6e35a877, retaining creation-time coherence and initial HTILE proof. The descriptor interface in upstream PR 4820 remains a separate prerequisite. This source draft has not been built or run.
2026-10-15 02:15:37 +03:00
Dean e263fc4c87 Merge pull request #6033 from milescoviello/carry/playgo-optional-chunks
fix(libScePlayGo): report optional chunks as supported and installed
2026-10-15 12:15:31 +13:00
Dean 6c854ae9c3 Merge pull request #3656 from EdouardSence/fix/generic-gpu-formatted-load
fix(shader): decode a GPU-selected formatted load from a format table
2026-10-15 12:14:58 +13:00
Dean 28fb252c62 Merge pull request #4341 from MarcZX100/codex/accept-vertex-stage-2002008-4329
fix(agc): accept reported vertex stage state
2026-10-15 12:14:32 +13:00
ivica00 dd1717c1a8 Merge upstream/main into fix/agc-sync-sample-dumps 2026-10-15 01:14:26 +02:00
Dean 3c87cdfda3 Merge pull request #5439 from mariusyo07/feat/json-string-methods
feat(libSceJson2): implement sce::Json::String methods and npos
2026-10-15 12:14:13 +13:00
Dean 90d148ff39 Merge pull request #5897 from YossiYad/fix/name-unsupported-buffer-descriptor
fix(agc): name the shader and V# when a draw is refused for a buffer descriptor type
2026-10-15 12:13:32 +13:00