Skip to content

LuminalVGD v0.1.0-alpha.9

Latest

Choose a tag to compare

@NorthernLights NorthernLights released this 08 Aug 07:56
6f4388c

LuminalVGD v0.1.0-alpha.9 — Stable

Driver version 0.1.0.27 (Device Manager: DriverVer 08/07/2026, 0.1.0.27)
Protocol 0.10 (handshake build 27, caps 0xfe5, lease watchdog 10 s)
Build date 2026-08-07
Source main @ 6f4388c (#30, #31)
Signing NortheBridge Foundation (OV), RFC3161 timestamped

The D3D12 timeline-fence transport engages for the first time (#30)

Since the fence transport shipped, CreateTexture2D for the shared ring-slot textures failed with E_INVALIDARG: D3D11_RESOURCE_MISC_SHARED_NTHANDLE was used alone, but NTHANDLE is a modifier of a sharing mode, not a sharing mode. Under the FENCE_TRANSPORT_REQUIRED contract (protocol 0.10) that failure marked the ring DEAD on every advanced-color session, so hosts silently fell back to WGC capture (~21 fps at 4K HDR) and Direct-to-Encode never ran. The slot textures are now created with SHARED | NTHANDLE — the documented combination for fence-synchronized D3D12 interop — and consumers open them by name with no keyed mutex involved. First-ever ring publishes (RingTexturesCreated → RingFirstFramePublished) and full Direct-to-Encode sessions on native-D3D12 NVENC were verified live, including a 4K HDR Battlefield 6 stream.

The OS stall watchdog can no longer terminate the driver host (#31)

dxgkrnl terminates an indirect display driver's host process when a frame sits unconsumed on an assigned swapchain for ~10 s (IddCx TERMINATE_OUTPUT, code 0x200 — the WER WUDFVerifierFailure signature 501000400000200). Builds ≤26 exposed three windows, each observed killing the host in production on 2026-08-07:

  • Teardown orderingunplug and the TDR duck stopped the frame worker before IddCxMonitorDeparture, leaving DWM's frames unconsumed through the entire departure modeset (largest when departing a primary monitor). The departure now runs first while the worker keeps draining; the departure-driven EvtUnassign stops it at the contract point, with a bounded stop afterwards as the backstop.
  • Pinned ring mutex — a replacement frame worker could block indefinitely behind a deadline-detached predecessor after already advertising a consumer via SetDevice. The acquisition is now a bounded 3 s poll; on deadline the worker degrades to a compositor-friendly drain-only loop and automatically upgrades to full ring participation once the mutex frees (5 s retry). This also closes a D3D11 device leak (~45 leaked devices / ~590 driver-host threads found in a crash dump).
  • Panic cascades — shell locks are poison-tolerant, so a single frame-worker panic can no longer abort the watchdog's unplug and take the control device — and every other session — down with it.

Verification

  • Multi-hour streaming sessions on the fence transport, including 4K HDR 120 Hz Battlefield 6 on native-D3D12 NVENC
  • Repeated teardown and RDP/tscon console-switch cycles with zero new WUDFVerifierFailure events
  • All host-testable crate suites pass; eWDK shell build clean; two independent adversarial review passes on the teardown/drain changes

Install / upgrade

Unzip and run install-driver.ps1 from an elevated PowerShell (verifies signatures, stages the driver package, and creates the root\luminal_vgd devnode). In-place upgrade over an older build is supported — hosts re-handshake on the next session. uninstall-driver.ps1 removes the driver.

SHA256SUMS is published alongside the archive (sha256sum -c compatible).