87 Commits
Author SHA1 Message Date
rpone e95ec554ac chore: pin Adreno740 at its accelerator include fix 2026-11-01 10:11:18 +08:00
rpone f31716d83f chore: pin every module at its main
The rebase merges of the module pull requests rewrote the commit hashes, so
the pins of the earlier merge pointed at commits that main of the module no
longer contains. Each submodule pointer now names the module's main commit
(same tree), and components.toml names the same commits for builds that
fetch a module instead of using the submodule.
2026-11-01 06:00:43 +08:00
rpone e291c50b6e chore(drivers): bump Adreno740 and AdrenoMetal to their main
The Turnip patch keeps the new files the pass record adds
(tu_cmd_buffer.h, tu_pipeline.cc, tu_pipeline.h), and a linear image is
no longer mutable for the code that loads and stores it through tile
memory, so its swap is not applied twice on the way to memory.
2026-11-01 05:35:00 +08:00
rpone 02f8cdd377 fix(scripts): use mach.development.bcm2837.unstripped (no .noctf suffix)
The kernel object produced by the ipados27 build tree is
mach.development.bcm2837.unstripped; the .noctf variant is not emitted.
Fix the reference in build-sheng-source-drivers.py and all other scripts
that contained the wrong suffix.

Also update submodule pointers for Adreno740 (preemption A1) and
AdrenoMetal (priority forwarding + pass reporter), and regenerate
turnip-gmem-mutable-swap.patch to include the NativeAdrenoAbiPriority
method-17 call in tu_knl_darwin.cc.
2026-11-01 00:20:19 +08:00
rpone 36247a1b4c feat(gpu): frame path trace across runtime, driver and kernel
Bumps Adreno740 and AdrenoMetal and records bridge patch 0022.
2026-10-31 19:43:34 +08:00
rpone f749a7df29 feat(turnip): timestamp every render pass
Each recorded render pass writes RB_DONE_TS timestamps before and after its commands into a 512-slot buffer of the first device; tu_pass_ring_read returns them with the pass.
2026-10-31 19:06:18 +08:00
rpone 0bf5cab332 chore(adreno740): bump for the VM mapping index 2026-10-31 18:32:23 +08:00
rpone 49524f0fa6 perf(gpu): spare image blocks, async room, BoFree outside the lock
Bumps Adreno740 and AdrenoMetal and records bridge patch 0021.
2026-10-31 18:06:45 +08:00
rpone cce1f89ee2 chore(adreno740): bump for lock-free fence polls 2026-10-31 16:59:51 +08:00
rpone bcd106a0c6 chore(gpu): bump Adreno740 for the contiguous allocation limit 2026-10-31 16:12:55 +08:00
rpone 793d6bddf7 chore(gpu): bump Adreno740 for the call ring 2026-10-31 04:12:27 +08:00
rpone 66d1b698fd chore(gpu): bump the display and metal modules 2026-10-31 02:01:09 +08:00
rpone f5ef6b98ef feat(gpu): row-copy counters in Turnip, trace samples, grown rings 2026-10-31 01:31:47 +08:00
rpone 8fe2aaaa2f chore(gpu): bump AdrenoMetal for the profile writer 2026-10-31 01:10:13 +08:00
rpone d867a94885 chore(gpu): bump AdrenoMetal for the fixed-size cpu.profile 2026-10-31 00:46:18 +08:00
rpone 6fd55dc1fa chore(gpu): bump Adreno740 for the timeline fix 2026-10-31 00:03:58 +08:00
rpone 4b57b67251 feat(gpu): GMEM swap patch, unixnu --os, module pointers for the diagnostics batch
turnip-gmem-mutable-swap.patch moves GMEM loads and stores with the identity swap on the memory side and adds the render pass and submission rings; unixnu --os 17|26|27 selects the OS profile and its output directory.
2026-10-30 23:54:41 +08:00
rpone a7c92c8cc6 feat(sheng): module pointers for the direct scanout fence wait and its diagnostics 2026-10-30 21:53:02 +08:00
rpone 88604d01c1 feat(sheng): diag export source in the storage build; module pointers for the BGRA, contiguous BO and direct scanout work 2026-10-30 19:34:51 +08:00
rpone 310fb75edd chore(metal): bump AdrenoMetal for the frame histograms and per-function priming 2026-10-30 11:05:42 +08:00
bluseliu50 e5f729d1ba chore: bump AdrenoMetal, Adreno740 and ArmSmmu4K for the import fixes 2026-10-29 21:05:24 +08:00
bluseliu50 cfcd422330 chore(metal): bump AdrenoMetal for the EDR mirroring gate 2026-10-29 20:03:35 +08:00
bluseliu50 c58c530ad8 fix: point at RamBlock, not the old NativeRamBlock checkout
The previous commit recorded drivers/NativeRamBlock, an untracked
checkout of RamBlock's former name, instead of the drivers/RamBlock
submodule the build uses. The Data store change is RamBlock 4be2d7e.
2026-10-29 19:54:45 +08:00
bluseliu50 5e033b1909 chore: point at the Install-and-boot-only Data store 2026-10-29 19:53:47 +08:00
bluseliu50 64a573e2db chore: point at the TB telemetry row 2026-10-29 19:43:36 +08:00
bluseliu50 f19e94bac6 refactor: build the bridge's 20 patches and point at on-device pipelines
The bridge's fallback patch is gone and the later ones renumbered; the
Turnip build id comment names the persistent Data cache it keeps
valid. Pointers follow AdrenoMetal and Adreno740.
2026-10-29 19:35:44 +08:00
bluseliu50 1cff985fc5 chore: point at the externFunctionNames fix 2026-10-29 18:40:30 +08:00
bluseliu50 9a71bf997d chore: point at the lock, leaf-walk and 8-bit framebuffer changes
ArmSmmu4K walks each leaf table once per pass, Adreno740 prepares BoAlloc
pages outside the driver's lock, AdrenoMetal keeps the render server's
framebuffer BGRA.
2026-10-29 18:33:34 +08:00
bluseliu50 ed599414d0 perf(turnip): render unpadded host attachments in GMEM
A linear host-import or explicit-layout attachment whose size is not
whole gmem_align blocks was forced to SYSMEM, so the render server's
3048x2032 RGBA16F surface lost tile memory for every pass. Such an
attachment is now loaded by a 3D blit and stored by the unaligned 2D
path, both over its texels alone, and the autotuner chooses the mode.
tu_render_mode_stats reports passes and pixels per render mode.
2026-10-29 17:46:56 +08:00
bluseliu50 e038ba38fc fix(turnip): owner-laid linear images at 64-byte pitch, rendered in SYSMEM
fdl6_layout aligned an explicit linear layout's pitch to 16 pixels for
the 16x4 GMEM store, so an IOSurface whose rows are 24384 bytes (3048
RGBA16Float texels) could not be imported in place. An explicit layout
now takes the hardware's 64-byte alignment, and a linear host or
explicit-layout attachment whose size is not whole tile blocks renders
in SYSMEM, which reads and writes its texels alone. Bridge patch 0021.
2026-10-29 17:04:39 +08:00
bluseliu50 159eb82611 fix(turnip): memoryless textures take no memory
The darwin backend now offers lazily allocated memory, as the msm
backend does with a settable GPU address: a sparse VMA reserves the
range and a BO is made there only when a pass needs the bytes. A pass
with such an attachment that has no memory yet renders in GMEM, where
the attachment lives in tile memory alone; the autotuner chose SYSMEM
for passes of few draws and so made the memory for good.

Core Animation's render server holds its intermediate targets as
memoryless textures: untagged-feaf29203 had twelve 3048x2032 RGBA16F
ones, 758 MiB, each memory of its own. On the host the same Liquid
Glass scene no longer allocates the 48 MiB attachment.
2026-10-29 16:34:29 +08:00
bluseliu50 b624df5b5a fix(turnip): free cached BOs not reused within a second
The darwin BO cache gave BOs back only on memory pressure or a failed
allocation. With BOs from system memory nothing fails, so it held what
the render server freed. It now frees an entry not reused within a
second of entering it, as freedreno's fd_bo_cache_cleanup does. Bridge
patch 0019 and the MEM telemetry row.
2026-10-29 15:26:53 +08:00
bluseliu50 b5627336de feat(gpu): per-client BO bytes in the board log 2026-10-29 15:26:36 +08:00
bluseliu50 1241c538bb feat(gpu): PS pass telemetry, hostsim passes other IOKit services through 2026-10-29 15:00:36 +08:00
bluseliu50 16d7ff9632 feat(gpu): metal2vulkan development tip, BOs from system memory
The translator pin moves to upstream development 624bab39 (the
inexact-math work) and records its branch; check-metal2vulkan-pin.py
checks the pin against the branch the record names. Bridge patch 0018
rounds heap texture sizes to their alignment. Adreno740 takes user BOs
from system memory, with no fixed pool.
2026-10-29 14:30:09 +08:00
bluseliu50 fa2ff312f5 fix(gpu): ahead-compiled pipelines read on demand, metal2vulkan patch 0017
make-pipeline-cache.py builds its producer with the plugin's include paths
and the tablet's TU_DEBUG.
2026-10-29 13:16:00 +08:00
bluseliu50 c93e965466 feat(gpu): metal2vulkan 0dfdbcd, a fixed Turnip cache identity and pipelines compiled ahead
- pin metal2vulkan at upstream 0dfdbcd5 with the rebased 16-patch series;
  scripts/check-metal2vulkan-pin.py proves with git alone that the
  checkout is upstream plus exactly those patches
- Turnip's pipeline cache UUID comes from its compiler source
  (-Dtu-build-id), the same for the host and the tablet build
- scripts/make-pipeline-cache.py runs the render server's priming over
  every library of the OS image on the host through the tablet's
  compiler and packs the cache
2026-10-29 11:44:31 +08:00
bluseliu50 f20e2e0423 chore: bump GopFramebuffer for kept surface mappings 2026-10-29 02:41:26 +08:00
bluseliu50 fcbfc40ad8 chore: bump Adreno740 for BOs without XNU contiguous search 2026-10-29 02:39:39 +08:00
bluseliu50 366b93f5ae chore: bump Adreno740 for devices kept after a GPU restart 2026-10-29 02:26:08 +08:00
bluseliu50 85ec9a0989 chore: bump Adreno740 for allocation without contiguous search 2026-10-29 02:13:26 +08:00
bluseliu50 c6f672600d chore: bump AdrenoMetal for Core Image kernels by name 2026-10-29 01:57:09 +08:00
bluseliu50 9fe4855117 chore: bump Adreno740 for SMMU fault termination before restart 2026-10-29 00:19:54 +08:00
bluseliu50 2c40ae9a7b perf(turnip): no CPU wait on syncs already on the ring
Every client submits to the kernel's one in-order ring, and each job's
prologue flushes and invalidates the GPU caches and waits for idle, so
a wait on a sync already resolved to a ring fence is met by the ring,
as msm_gem_submit() skips its own ring's fences. Only an unresolved
sync is waited for, until it is submitted. The submitting thread no
longer stalls on the previous GPU work.

Also bumps AdrenoMetal and registers bridge patches 0024-0037.
2026-10-28 23:53:52 +08:00
bluseliu50 63cc454dd5 chore: bump AdrenoMetal for refusal causes in problem rows 2026-10-28 23:14:48 +08:00
bluseliu50 fb5cdd6e06 chore: bump AdrenoMetal for Apple-semantics waits, imports and heaps
Registers runtime patches 0022 (mipmaps outside the measured spread) and
0023 (heap texture size a multiple of its alignment). The frontend host
check counts the releasing surface import.
2026-10-28 22:49:41 +08:00
bluseliu50 caffd5dfb5 feat(turnip): release cached BOs on OS memory pressure
The retire queue and the BO cache grow with demand instead of holding
256 and 1024 entries. The cache gives everything back when libdispatch
reports memory pressure (DISPATCH_SOURCE_TYPE_MEMORYPRESSURE, warning
or critical) and when an allocation or GPU range cannot be had; the 2 s
idle eviction, the 100 ms kernel poll and the seven-eighths VA rule are
gone. Fence waits for idle and for ring space have no fixed bound: the
kernel's hangcheck ends a hang. TU_DARWIN_BO_CACHE=0 turns the cache off
for the host checks of the release paths.
2026-10-28 20:56:15 +08:00
bluseliu50 56d2582c18 chore: bump Adreno740 for dynamic object tables 2026-10-28 20:51:15 +08:00
bluseliu50 728260da6b chore: bump Adreno740 for the chunked BO pool 2026-10-28 20:42:47 +08:00
bluseliu50 56352f7391 chore: bump Adreno740 for GPU hang recovery
derive-a740-hwinit.py also emits RBBM_SW_RESET_CMD.
2026-10-28 20:40:55 +08:00