--tree replaces the hardcoded profile tree; the version strings come from the
environment the kernel step sets. The private copy stubs the native hooks the
bring-up patch calls from the kernel core (an undefined weak symbol's
authenticated pointer fails the link), trims the forced exports its objects
cannot provide and links again, and the comparison kernel lands at
build/xnu/fileset-reference/mach.release.bcm2837.unstripped.noctf, which a
clean tree had no step to produce.
--tree replaces the hardcoded profile tree; the version strings come from the
environment the kernel step sets; the unavailable forced exports are trimmed
from the private source copy and the link runs again; the built comparison
kernel lands at build/xnu/fileset-reference/mach.release.bcm2837.unstripped.noctf,
which a clean tree has no step to produce.
The report read the linked kernel's exports, but a clean tree links the kernel
only after the archive builders have run (the bootstrap pass stops at the link
by design), so the step failed on a fresh checkout. The report now names the
pending pass; the final kernel link remains the unresolved check.
The default was the extracting machine's cache alone; a clean checkout (the
packaging action) has no .cache/firmware/novatek. firmware/novatek of the
device repository, pinned in proprietary-files.txt, serves the same file.
A board script located its repository by a fixed sibling directory name and
failed when the checkout carries another name (the packaging action checks
out the device repository as device/).
build-adreno740-accelerator hashed drivers/NativeMetal/OriginalAcceleratorABI.h,
the repository's old name, and failed on a clean tree beside the driver's fix
of the include itself.
The firmware pins are fetched from api.github.com, whose anonymous quota a
hosted runner shares and exhausts (HTTP 403); GITHUB_TOKEN or GH_TOKEN goes to
GitHub hosts only, as prepare-xnu-source.py already does.
The ShengUfs component recipe runs this builder without arguments, so the
--policy-dir flag of the archive entry never reached it and a clean checkout
still looked for build/verified-root-<build>. Without an explicit directory the
builder now falls back to the single scripts/policies/*<build> directory of the
assembled tree, where the device repository's scripts are copied.
A build whose tables go to userdata reads only the first 544 bytes of each
manifest. The policy directory may now carry manifest.header.bin alone: the
image digest, the verification record and the shared anchor are still checked
against it, and the full block tables stay a local input of the userdata image.
A release writes the configuration at its preflight step, after the context
exists, so the copy taken when the context was made is empty on a fresh output
directory and build_archives built nothing: the kernel then linked archives
nobody had built and failed with _native_source_storage_start undefined.
need_config re-reads the file.
- cmd_release: [bootimg] dtb, relative to the build tree, is the device tree of the boot image.
- firmware.build: preflight scripts get UNIXNU_UEFI, the firmware checkout of the run.
unixnu release runs deps, preflight, patches, build, pack and verify and writes
package.manifest.json (sizes and SHA-256 of boot.img, payload.img and
kernel.macho, module revisions, patch order, command line length). verify
refuses a missing or changed output, a command line of 1000 bytes or more and a
boot image above [package] boot_partition_bytes.
board.toml [package.defconfig] maps an OS profile to its defconfig, and
[os_overrides."<profile>"] merges the values that differ for one profile over
the board; its remove list drops keys the profile does not have. --os picks the
profile, so one branch serves 17, 26 and 27.
templates/package.sh is the device repositories' fixed script. It reads only
[package] unixnu and runs unixnu release.
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.
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 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.
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.
Source-driver and source-storage builds, the arm64e PAC rewrite for the Rust bridge, the IOAccelerator base ABI of 24A446, the bridge with mimalloc and link-time optimisation, the plugin with the prime list, addon options for a prime list, a pipeline pack and cache export, wallpaper overlay and seed changes, and payload, kernel and userdata steps for the new profile.
A changed patch series re-clones the XNU work tree, which lacks the public
headers newer xnu omits (TrustCache among them), and archives built before
the kernel failed to compile against it.