Commit Graph
6138 Commits
Author SHA1 Message Date
Hannah Lyons d7e52cb295 feat(libkernel): implement madvise 2026-10-09 21:22:44 -04:00
Hannah Lyons 94a33bfa5c fix(libkernel): honour open flags when Windows falls back to a directory descriptor 2026-10-09 21:22:23 -04:00
alfalfa-starandClaude Opus 5.5 b7443c4424 perf(agc): share one dma-buf import per 64 MiB of Linux direct memory
Every direct memory allocation had a memfd of its own, so each one the
GPU used became its own udmabuf and its own imported buffer object. An
imported buffer object cannot be always valid in the GPU VM: amdgpu
validates every one of them at every command submission. PPSA14632
(LEGO Horizon Adventures) imports about 7000 allocations, 5800 of them
64 KiB, and each vkQueueSubmit took about 2.3 ms (5 s per 10 s, held
under the GPU mutex). A standalone test shows the cost follows the
count of imported dma-buf buffer objects, not their size or the count
of ordinary allocations.

- libkernel: on Linux all direct memory lives in one sparse memfd of
  DIRECT_MEMORY_SIZE, at file offset = physical address
  (PhysicalBacking keeps the file and its offset; SharedBacking returns
  that offset). A range allocated again is zeroed through a temporary
  mapping, as the old per-allocation memfd was.
- Driver: an import of shared direct memory that lies inside one
  64 MiB chunk of the file binds its own VkBuffer into that chunk's
  memory, one udmabuf import per chunk (HostImport::chunk holds it, so
  it lives until the last buffer bound to it retires). Ranges that
  cross a chunk or do not meet the buffer alignment are imported alone
  as before.

On PPSA14632 vkQueueSubmit drops from about 2400 us to 46 us on
average, the GPU idles 36 ms instead of 172 ms per present, and
presents go from about 40 to 80-97 per 10 s.

Released direct memory stays committed in the file (see
TechnicalDebt.md): a live chunk import pins its pages.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 03:21:53 +02:00
Adrià FranchandClaude 4120b2be0f docs(architecture): keep the recompiler stage notes under their diagram
Co-Authored-By: Claude <[email protected]>
2026-10-10 03:16:29 +02:00
Sanjaysrinivas 140c46093c fix(shader): guard runtime MODE changes
Read MODE rounding fields from the declared initial mode. Accept only
constant writes that preserve it; diagnose unsupported runtime changes.
Document the supported contract and add decoder-to-recompiler regressions.

Refs #1668, #981
2026-10-10 03:16:25 +02:00
Adrià c9da0f93cf Merge pull request #1559 from ctj01/fix/relinker-pt-load-order
fix(relinker): write Linux PT_LOAD headers in ascending address order
2026-10-10 03:16:06 +02:00
Adrià 67bb99865a Merge pull request #1518 from ArjenS-LA/fix/windows-file-timestamps
fix(libkernel): preserve Windows file timestamp precision
2026-10-10 03:15:32 +02:00
Adrià 426fe62282 Merge pull request #2028 from overlordxrz-source/feat/libkernel-get-module-list
feat(libkernel): implement sceKernelGetModuleList and sceKernelGetModuleInfo
2026-10-10 03:15:01 +02:00
Adrià 419069e6d3 Merge pull request #1606 from mohdfaour03/fix/libc-guest-tm-layout
fix(libc): convert times into the guest's 56-byte tm on Windows
2026-10-10 03:14:40 +02:00
Adrià b255a3b998 Merge pull request #1604 from Zheorgyan/fix/host-thread-local-async-teardown
test(libc): wait for std::async thread teardown in host_thread_local
2026-10-10 03:14:22 +02:00
Adrià 2d58760056 Merge pull request #1602 from krishnaraya4/fix/agc-linear-volume-mip-rounding
fix(agc): round linear volume mip extents up as addrlib does
2026-10-10 03:14:01 +02:00
Adrià 6637eee34d Merge pull request #1600 from awake-devel/fix/libkernel-unwind-info-linux
fix(libkernel): report guest unwind tables in sceKernelGetModuleInfoForUnwind on Linux
2026-10-10 03:13:40 +02:00
Adrià 3181e7116d Merge pull request #1597 from mugurc/macos-relinker
feat(relinker): write Mach-O output for macOS with --macos
2026-10-10 03:13:21 +02:00
Adrià 16602061e0 Merge pull request #1589 from krishnaraya4/fix/rdna-mubuf-lds-refused
fix(shader): refuse the MUBUF lds modifier instead of decoding a VGPR load
2026-10-10 03:13:01 +02:00
Adrià d11caf7519 Merge pull request #1588 from Roojool/fix/net-epoll-precise-timeout
fix(net): use native Windows condition waits for empty epoll
2026-10-10 03:12:41 +02:00
Adrià b2f4218ad2 Merge pull request #1587 from krishnaraya4/fix/agc-release-mem-int-sel-bounds
fix(libSceAgcDriver): read the RELEASE_MEM interrupt select only from RELEASE_MEM packets
2026-10-10 03:12:22 +02:00
Sasha PapoandClaude Opus 5.5 98b4bdf843 fix(agc): skip an indexed draw whose indices are all restart markers
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 21:12:16 -04:00
Sasha PapoandClaude Opus 5.5 c0a88ce392 fix(agc): leave the primitive restart index out of an indexed draw's vertex range
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 21:12:16 -04:00
Adrià a9ac7bc4c3 Merge pull request #1580 from Zheorgyan/feat/storage-buffers-update-after-bind
feat(agc): bind storage buffers update-after-bind above the per-stage limit
2026-10-10 03:12:01 +02:00
Adrià b9d7fd6448 Merge pull request #1571 from Zheorgyan/fix/exp-f32-smallest-normal
fix(shader): keep v_exp_f32 at or above the smallest normal for inputs from -126
2026-10-10 03:11:42 +02:00
Elijah De GuzmanandClaude Opus 5.5 80b0bab279 feat(libc): write watch on macOS hosts
macOS has no counterpart to userfaultfd write-protect or
MEM_WRITE_WATCH, so GuestWriteWatch had no backend there and the driver
re-read every guest buffer on each use.

The macOS backend write-protects watched pages. The first write to a
page faults, the SIGBUS/SIGSEGV handler records the page and restores
its protection, and Collect reports the recorded pages and protects
them again. A page is protected before its record is cleared, under the
lock the handler takes, so a write that lands in between is recorded.
The lock hands out turns in order: an unfair one starved writers under
Rosetta.

The protection is real, which adds three entry points:
- GuestWriteWatchBeginHostWrite/EndHostWrite lift it around a system
  call that writes guest memory, which would otherwise fail with
  EFAULT. GuestArena::HostWrite calls them, as it calls the Windows
  equivalent.
- GuestWriteWatchProtectionChanged tells the watch the protection given
  to watched pages by mprotect or a new mapping.
- GuestWriteWatchProtection reports that protection, since a watched
  page is read-only between a collection and the next write.

Register keeps the recorded protection of a page it already watches:
read from the kernel it would be the watch's own read-only protection,
and the page would never be watched again.

The tests build without the prx libraries and run natively and through
Rosetta.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 21:11:40 -04:00
Adrià 206df95c36 Merge pull request #1565 from Zheorgyan/fix/exec-host-lanes-vertex-subgroups
test(agc): skip the exec host lanes vertex draw without vertex subgroups
2026-10-10 03:11:21 +02:00
Dean 8542c7323c Merge pull request #1501 from TideOPL/fix/kernel-process-time-start
fix(libkernel): read the process start before the clock in process time
2026-10-10 14:10:57 +13:00
Adrià 527b18ea59 Merge pull request #1556 from MarcZX100/docs/fedora-static-cmake-deps
docs(build): note Fedora static link packages
2026-10-10 03:10:35 +02:00
Adrià 7876b46ff3 Merge pull request #1534 from hamb3r/codex/clearmrt-stencil-clear
fix(agc): preserve ClearMRT color writes and validate stencil clears
2026-10-10 03:09:58 +02:00
Adrià 69cee68d4b Merge pull request #1522 from silentone12725/perf/relinker-strict-reachability
perf(relinker): replace O(n²) zero-padding scan in StrictReachability
2026-10-10 03:08:57 +02:00
Adrià b8cf0eb24f Merge pull request #1520 from popcoder565/fix/kernel-nested-sleep-timer
fix(libkernel): give a sleep nested in an APC its own timer on Windows
2026-10-10 03:07:46 +02:00
Adrià 7f1b6a0b30 Merge pull request #1507 from ArjenS-LA/fix/libc-wcsrtombs
fix(libc): convert wcsrtombs using guest characters
2026-10-10 03:05:55 +02:00
Adrià 395d24697c Merge pull request #1506 from kali113/fix/linux-guest-stack-header
fix(relinker): give Linux guest modules a default non-executable stack
2026-10-10 03:05:35 +02:00
Adrià be3441903b Merge pull request #1503 from eliasbruno124-dev/fix/guest-required-identities
fix(relinker): discover required guest module identities
2026-10-10 03:05:15 +02:00
Adrià 0eb7f098dd Merge pull request #1499 from yabanana/codex/macos-unwind-register-context
feat(libc): support x86-64 unwind register contexts on macOS
2026-10-10 03:04:54 +02:00
Adrià 85d4bfcf34 Merge pull request #1496 from hugodearaujo/fix/videoout-output-mode-errors
fix(videoout): answer output mode queries with the console's codes
2026-10-10 03:04:33 +02:00
Adrià 806ff29e5a Merge pull request #1495 from TideOPL/fix/agc-depth-memory-reuse
fix(agc): treat other-shaped views of a depth surface's memory as reused memory
2026-10-10 03:04:14 +02:00
Adrià 7703fda15e Merge pull request #1493 from LeandroLP23/refactor/controlflow-shared-helpers
refactor(recompiler): share the control flow helpers
2026-10-10 03:03:41 +02:00
Adrià ba6f1e5bd6 Merge pull request #1487 from Celegans12/feat/agc-forced-degamma-srgb
feat(agc): accept samplers that force sRGB decoding of sRGB textures
2026-10-10 03:03:19 +02:00
Adrià e0d4516b43 Merge pull request #1486 from popcoder565/fix/audio-precise-pacing
fix(audio): pace blocking audio calls with a high-resolution timer
2026-10-10 03:03:00 +02:00
Adrià 3fe03f7227 Merge pull request #1473 from LeandroLP23/fix/shader-lg-compare-amd-wave32
fix(shader): emit ordered not-equal through an integer NaN check
2026-10-10 03:02:02 +02:00
Adrià b993145df1 Merge pull request #1446 from sktharunbalaji13-cmd/contrib/rela-table-bounds
fix(relinker): bound DT_RELA table range
2026-10-10 03:01:42 +02:00
Adrià 5a014b888a Merge pull request #1417 from gjonn/feat/agc-fold-constant-swizzle-samples
feat(agc): fold samples of views whose channels all select constants
2026-10-10 03:01:21 +02:00
Adrià 7fae9c8f00 Merge pull request #1331 from TibixDev/pr/pipeline-key-storage
perf(pipeline): reuse key storage and hash keys in blocks
2026-10-10 03:00:46 +02:00
Adrià dcfd4f658f Merge pull request #1328 from darhebkf/codex/fix-nid-cache-download
fix(tools): publish NID database cache after download completes
2026-10-10 03:00:27 +02:00
Celegans12 0eebe23a12 perf(agc): reuse frontend within shader registration pairs
Retain an immutable decoded program and structured control flow while
preparing the registration variants for one shader.
Match owned code, stage and the complete SWAPPC inputs before reuse.
Translate and plan each variant separately using its current inputs.
Keep cache keys and persisted artifact layouts unchanged.
Provide a cache-neutral off switch for controlled comparisons.
Cover identity, lifetime, failed replacements and variant equivalence.
2026-10-10 02:53:50 +02:00
Dean 0c0dc1e98e Merge pull request #2514 from adriadam10/fix/linux-ci-display-skips
fix(ci): skip the VideoOut window tests without a display, as check_skips expects
2026-10-10 13:52:04 +13:00
Adrià Franch 94a1d0b20a fix(ci): accept no-display skips in the Windows job too
The Windows runner has no Vulkan driver, so the VideoOut window tests skip there for the same reason; check_skips.py
only accepted agc* skips in that job.
2026-10-10 02:38:24 +02:00
Adrià Franch df270d59eb fix(ci): skip the VideoOut window tests without a display, as check_skips expects
Main's Linux job fails since #1028 and #1714: guest_video_out_resolution_status aborts when SDL's offscreen
driver has no Vulkan window, and check_skips.py rejects the skips of guest_video_out_wqhd_detection and the
flip tests because "no display" is not among the device limitations it accepts.

The resolution status test now skips with code 77 like its wqhd sibling, the flip tests print the same skip
reason, and check_skips.py accepts "no display" as a device limitation. ANYPS5_REQUIRE_DISPLAY still turns
the skip into a failure.
2026-10-10 02:20:49 +02:00
Adrià FranchandClaude 6fee7e854d docs(shader): record the bitfield mask measurement on gfx1035
Co-Authored-By: Claude <[email protected]>
2026-10-10 02:14:00 +02:00
Adrià FranchandClaude 7e845c124b test(shader): skip the bitfield mask execution test below 32-lane subgroups
Co-Authored-By: Claude <[email protected]>
2026-10-10 02:14:00 +02:00
QRMOE 9fbb5a9f13 docs(shader): place bitfield debt with shader entries
AI-assisted: yes. Full current-main project build passed. Seven focused Windows tests pass; four shader tests also pass in full and none optimization modes with actual Vulkan execution required. Updated Linux and title runs remain pending.
2026-10-10 02:13:51 +02:00
QRMOE fc254615a1 test(shader): use raw bounds checking for bitfield buffers
AI-assisted: yes. Full current-main project build passed. Seven focused Windows tests pass; four shader tests also pass in full and none optimization modes with actual Vulkan execution required. Updated Linux and title runs remain pending.
2026-10-10 02:13:44 +02:00
QRMOE f2f442a364 test(shader): register bitfield mask translation test
Register the regression with CTest and configure Windows runtime lookup. AI-assisted: yes.
2026-10-10 02:13:34 +02:00