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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
- 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
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.
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.
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.