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 ordering —
unplugand the TDR duck stopped the frame worker beforeIddCxMonitorDeparture, 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-drivenEvtUnassignstops 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/
tsconconsole-switch cycles with zero newWUDFVerifierFailureevents - 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).