NullMoth 2.6.4 is out, and it only touches the translator. v2.6.4
(2026-10-29) has ten commits over 2.6.3 (compare).
There are three fixes. First, sampler arrays get lowered, so the descriptor-array bail-out from #426 is gone
(248a406, 4b59abe).
Second, elements of a texture array now read their own texture: before this, every element past the first read
element 0 (c0abbde). Third, samplers declared inline
in older Metal shaders are recognised (07ac4b9).
The texture array fix goes through the bindless-all address table, which is on unless NVMTL_NO_BINDLESS_ALL is set
(buffer_addresses.rs).
The only kext change is one line: an IOPCIFamily dependency added to the NVRM framebuffer plist. The release notes
say WebGL shadow maps still draw dark. High confidence (read from the diffs).
Rebase picture. Our branch nvgfx-2.6.2 is 73 commits on top of v2.6.2
(fork history). Upstream 2.6.3 already carries the
plugin work: the per-process cache folder, unbound-slot sampler, per-module newFunctionWithName, fetch descriptor set
per pass, the ahead pass on its own queue, the refused-link memo, async IOSurface upload, the tagged surface writer key,
the four cache-io commits, the HiDPI flag (#354), sampler restore (#363), the two Intel heap and buffer-texture fixes, and
GeekAudio's two translator pointer-field commits (PR #385). All of these appear in the
v2.6.2...v2.6.3 compare with the same titles.
Upstream also removed the fork's marker comments (4c04b7d),
so the clean path is to drop our copies and keep upstream's.
That leaves these as ours: the repeat-pipeline skip and the sampler-variant memo, with their conf switches; the NVRM
power work (GPS and NVPCF _DSM, the TGP mode, refreshing the power source, the phys control escape); the NVRMFB Intel
panel proxy head; the build harness; nvgfx-smi, nvgfx-burn and nvgfx-boost; and the docs. The likely conflicts are
kexts/NVRM/NVRM.cpp (2.6.3 rewrote the BAR1 placement), kexts/NVRMFB/fb/nvrm-fb.cpp (2.6.3 added about 500 lines
of brightness, rotation and audio code next to our proxy head), and plugin/NVMTLObjects.m and plugin/nvmtl_vk.c for
the pipeline skip and the memo. 2.6.4 adds no conflicts of its own because we carry no translator commits beyond #385.
The rebase is worth doing, and doing it straight onto 2.6.4 costs about the same as onto 2.6.3. The Intel branch has
to follow, because the texture array path now goes through the address table on Intel too. Medium confidence: this is
predicted from file overlap, not a trial merge.
HP OMEN 16 (RTX 5070 Laptop) on 26.7.2: HiDPI stops at whole 2x sizes. Game-5040's commit
moves the guide to 26.7.2 and stock NullMoth 2.6.3. On their 2560x1600 panel, nvfbhidpi=1 together with #354 only
gives integer 2x sizes; 1440x900 and 1680x1050 are missing. On the same panel size, we get 1680x1050 HiDPI from a
DisplayOverride whose scale-resolutions entries are 12 bytes long (16-byte entries carry flag 0x00200000, and Tahoe
hides those), on top of the #354 flag. That makes this a solution offer. They also report four other things: icons in
the default glass style showing parts of other icons (2.6.3, "not #363"), the brightness persistence from PR #312 not
working on their machine, shutdown turning into a restart while USB devices are plugged in, and that our MtkWlanNative
0.4.14 and LegionBtFix 0.3.0 are needed on 26.7.2. They credit the watchthelight-labs repos by name with links. They
run stock NullMoth, not NvGfx. High confidence for what the README says; the icon overlap may be the texture array bug
2.6.4 fixes, but that is unverified.
#449 (issue), filed on an RTX 5050 Laptop running 26.7.2 and 2.6.4: the follow-up to #426. The array is accepted now, but a sampler array element picked by a non-constant index still fails with "sampler operand is a pointer whose exact sampler state was not recovered". This is the three.js shadow path. None of our measurements cover it. Medium confidence.
#452 (issue), filed on an RTX 4060 Laptop running 26.7.1
and 2.6.4: Safari WebGL contexts are lost 7 to 18 ms after creation, while Chrome on ANGLE Metal is stable. WebKit
logs Invalid display 0x00000000. We have no Safari WebGL measurement, so it is worth a probe on the 5070. Low
confidence on the cause.
#445 (PR): a port of mickys' change that presents drawables on their own queue, to avoid a Metal HUD deadlock. It is near our present path (the ahead pass queue, I-069), but it is untested. Watch for a conflict when it lands. Medium confidence.
#450 (PR): detects ANGLE from the libraries a process has loaded, instead of a list of app names. If it lands, the Chromium whitelist work in 2.6.3 changes shape. Low impact for us.
1401 issue #117 (issue): on a Zen 4 laptop with an RTX 5070 Ti Laptop,
recovery hangs hard after EXITBS. The title says GB206, but the PCI ID 10DE:2F18 belongs to GB205 (as #64 lists it).
It is an AMD platform, and 2.6.3 did not change the config. It has no bearing on our GB206. Medium confidence.
1401 issue #69 (issue): the Legion 2023 (i9-13900HX) panic, "Non-monotonic time", was closed by the reporter after adding CpuTscSync 1.1.2. We already load CpuTscSync 1.1.2, so this matches our setup. High confidence.
1401 v2.6.4 (release): a HiDPI switch for nvfbhidpi=1
in the Mac app, the stick writer refusing the disk Windows started from, an HTTPS retry on recovery-server 400 errors,
IntelBTPatcher turned off after its own panic, and XhciNudge offered on Strix Point
(60617b9). It does not affect our setup.
reims-vgpu #141 (issue): in an x86_64 guest, the paravirtual display sends no VBL while idle, so animations start 114 to 143 ms late. The gap falls to 8 ms when something keeps presenting. The maintainer says the kext needs a patch. It is a different stack, but the same "late first frame after idle" shape is worth a check against our window drag issue (labs #11). Low confidence that it is related.
No replies to our comments on 1401 #64 and #110. #451 (a GTX 1650 without ReBAR panicking at one fixed page) is a Turing small-BAR case. #119 (a Legion Y7000P with an i9-14900HX panicking in early probing) has no logs attached yet. #120 is an AMD recovery reboot. The reims-vgpu runtime commits and two discovery repos (a Zephyrus G14 RTX 3060 build and a PyTorch to Metal compiler) are unrelated. A web sweep (five searches) found nothing dated in the window, only the early October coverage of the driver.