SnapAdreno a2d43d0: ADRENO_PRESENT_EARLY_DONE in AdrenoDisplay
(src/AdrenoDisplayEarlyDone.h, boot-arg adreno_present_early_done)
and the desktop-early-done profile (desktop-backlight plus the
define). Define off, the desktop-next profile still builds the
deployed swap-path-20261024 AdrenoX2 section for section.
The on-device CoreImage pixel test (tools/run-icon-pixels.py, compare-icon-pixels.py, SnapMetal harness/icon-pixels) and SnapMetal 8fe64cb's ADRENO_CS_TABLES=1 build (SP_CS_CONFIG NTEX equal to NSAMP, as Mesa programs every stage), trusted and deployable as metal-stage-iconfix-20261024 (AdrenoMetal ba3a3fd6, CDHash 11d5ff9a; the icon-pixels tool 25f07e86). next1/next1b showed partial System Settings icons with no plug-in or kext refusal.
SnapAdreno e1cf072 (branch backlight-path, not pushed): AdrenoDisplay
overrides swap_submit and hands the brightness each swap carries to
AdrenoBacklight as source "swap"; AdrenoBacklight no longer publishes
force-brightness-control, whose writes WindowServer's sandbox refused
in run next2c. The default kext is section for section unchanged.
The --cs-tables expectations of test-adreno-settings-ci-encoding.py,
and SnapMetal at icon-pixels-next (8fe64cb): ADRENO_CS_TABLES (51d07a1,
ef0c80a) merged with the icon-pixels probe (713dab1, 263dd47).
icon-pixels (SnapMetal harness/icon-pixels*.m) and the tools that
build it, run it in the guest over the console and compare its lines
with this Mac's reference; docs/RUNNING.md describes the check.
SnapMetal ef0c80a lets a process started with ADRENO_CS_TABLES=0 keep the
old compute counts, so icon-pixels can compare both encodings in one
boot with the candidate installed.
SnapAdreno 9cc1e92 (branch backlight-path, not pushed): AdrenoBacklight
maps nits proportionally onto levels with the compat helpers of the
previous commit, publishes force-brightness-control so WindowServer's
BrightnessControl writes brightness-nits to it, and publishes its
DPCD700 diagnostic as 64 bits. The default kext is section for section
the base commit's.
SnapMetal 51d07a1 adds ADRENO_CS_TABLES (default off): CoreImage's
compute kernels get SP_CS_CONFIG NTEX = NSAMP = their T#/S# count and
NUAV = their UAV count, as Mesa programs every stage. A candidate for
the partial Settings icons, to be decided by the icon-pixels check.
SnapAdreno f54b9ec..b5bfcb4 (next):
adreno-kext: add the desktop-next build profile
(desktop-nocoherent plus ADRENO_BACKLIGHT in AdrenoDisplay.o, the
kext of an --edp-backlight run without --gpu-coherent)
SnapMetal 936d51b..7bc40ef (next): the --no-ff merge of
feature/settings-icons onto migrate-private 40a1864 (same tree as
936d51b)
SnapI2CHID 816aad8..f0b7984 (next): the merge of feature/fn-keys
(abaa501 Fn-key layer, 7c0a059 desktop-fnkeys profile). fn-keys made
no pointer commit, so this is the first one that carries it; the
umbrella's tests and build-auxkc-desktop.sh I2C_PROFILE need it.
Default builds stay section-identical to migrate-private
(tools/macho-sections.py, ZERO_AR_DATE=1): AdrenoX2 default 12 of 12,
SnapI2CHID default and desktop 12 of 12 each.
Merge feature/settings-icons (b9c12cb..22aad4b). docs/RUNNING.md and
tools/cycle_lib/installed_fresh.py merge without conflict: the
settings-icons trust set (ADDITIONS/TRUST_PAYLOAD, mirror-slab kept as
ADDITIONS_MIRRORSLAB for rollback) sits beside the brightness and
fn-keys options.
gpu/adreno-kext/kext: SnapAdreno next f54b9ec, the merge of all three
SnapAdreno feature branches; gpu/adreno-kext/plugin: SnapMetal 936d51b
(feature/settings-icons).
Merge feature/brightness (7da9adf..f189da7) onto the display-modes
merge.
tools/check-iomfb-vtable.py: both branches added an AdrenoDisplay
define option (display-modes --display-define, applied to
AdrenoDisplay.cpp only; brightness --define, applied to every .cpp).
Keep one implementation: --display-define, with --define as an alias
of the same list, compiles AdrenoDisplay.cpp alone with the defines,
which is what both branches' help text promises and what
test-adreno-display-trace.py passes.
gpu/adreno-kext/kext: SnapAdreno next 53c0054, the merge of
feature/display-modes and feature/brightness.
SnapMetal 40a1864..936d51b (branch feature/settings-icons):
adreno-metal: let build.sh pass ADRENO_PIPELINE
adreno-metal: encode the CoreImage kernels of Settings pane icons
adreno-metal: add the Settings pane icon harnesses
SnapAdreno 79de60e..e7b1d3c (branch feature/settings-icons):
adreno-kext: opt in to multi-unit CS sampler loads (adreno_cs_samplers)
adreno-kext: build the desktop profiles with ADRENO_IB_CS_SAMPLERS
Both features stay behind their defines. With ADRENO_SETTINGS_ICONS
unset or 0 the plug-in builds byte for byte as at 40a1864 (strict,
lenient, and with ADRENO_PIPELINE); without ADRENO_IB_CS_SAMPLERS the
default and desktop-profile kexts are byte-identical to 79de60e's. The
profiles now carry ADRENO_IB_CS_SAMPLERS, inert unless the guest boots
with adreno_cs_samplers=1. SnapAdreno's AdrenoX2 calls this
repository's adreno_ib_set_cs_sampler_units (compat, b9c12cb).
gpu/adreno-kext/kext 79de60e -> 41334e1 (SnapAdreno feature/brightness):
the AdrenoBacklight service (c94a34f) and the desktop-backlight profile
(41334e1) that --edp-backlight's AuxKC is built from. The default and
desktop kexts are section for section unchanged. Not pushed.
SnapAdreno feature/display-modes (c1b4ad5):
- moves the re-pin refusal report into an ordered part;
- adds ADRENO_RESIDENT_HEAD_OFFSET: page-unaligned client buffers are
mapped in whole pages, using compat/adreno-resource-tail.h;
- adds ADRENO_DISPLAY_TRACE_MODES: the IOMFB call and swap geometry
trace;
- builds both in the desktop profiles.
With the defines off, the default build and both profiles are
section-identical to SnapAdreno 79de60e.
SnapAdreno 3985c26..79de60e (branch migrate-private):
adreno-kext: re-prepare evicted maps (ADRENO_RESIDENT_REPIN)
adreno-kext: skip write-back maintenance once coherency is verified
adreno-kext: add desktop build profiles
adreno-kext: drop the raw-offset task lookup from the re-pin log
adreno-kext: say which commit the desktop profiles reproduce
SnapI2CHID 9cd36f4..816aad8 (branch migrate-private):
input: add a desktop build profile
Every new kext feature stays behind its define; the default builds of
both kexts are unchanged section for section. The re-pin and coherent
kext code uses this repository's compat/adreno-resource-tail.h and
compat/adreno-coherent-skip.h.
SnapI2CHID 9cd36f4, SnapQCC2072 244d5c7, SnapAdreno 3985c26, SnapMetal 40a1864
and air2ir3 55865cc split their large files into ordered parts that compile
as one translation unit each. Object code is unchanged in every component.
The Adreno kext, the Metal plug-in, air2ir3, SnapI2CHID and SnapQCC2072 now
live in their own repositories in the Snapintosh organization, split with
their history (git filter-repo --subdirectory-filter). They are mounted
back at their old paths, so relative build paths in build.sh, the tools
and the includes are unchanged. The EL2 monitor, tools and docs stay in
this repository.
Validation: see the follow-up verification on a fresh recursive clone.
The live scanout is mapped as Device memory, where an unaligned access
is an alignment fault and therefore a kernel panic. Cursor spans start
at an arbitrary x, so they are only 4-byte aligned. For long spans
(the enlarged shake-to-locate cursor, about 1.4 KiB per row) the kernel
memcpy issues 16-byte stores that end up unaligned, and the guest
panicked with "Unaligned kernel data abort" in
AdrenoDisplay::presentGated.
ADRENO_PRESENT_LIVE_ALIGNED routes every copy that reads or writes the
scanout through adreno_display_live_copy. It keeps memcpy when both
ends and the length are 16-byte aligned (whole rows) and otherwise uses
naturally aligned 8- and 4-byte accesses. The gate defaults to 0;
build.sh enables it because the faulting copy is also in the baseline
cursor path.
Validation:
PASS tools/test-adreno-live-copy.c: 7616 offset/length cases match
memcpy
PASS gpu/adreno-kext/kext/build.sh, with locally generated 26A428
headers
PASS with the gate off, the deployed kext configuration links
section-identical to the previous kext (12/12 sections)
OBSERVED A16, macOS 26A428: with the gate on, the shake-to-locate
cursor no longer panics. The same gesture panicked without it.
NOT RUN full host suite; frame-time measurement
An EL2 monitor/hypervisor and toolchain that boots macOS 27 on the ASUS A16
(Snapdragon X2 Elite), with an Adreno Metal plug-in and IOGPU kext, and
air2ir3, an AIR to Mesa ir3 shader compiler.
MIT, with GPL-2.0 components listed in LICENSE and THIRD_PARTY_NOTICES.md.
No Apple, Qualcomm, ASUS or Microsoft binaries are included.