v0.2.0-beta.0 — Phase 3c complete: D3D12 backend executes 8-pass pipeline
Pre-release
Pre-release
Phase 3c of ADR-0002 is complete. Tubelight's 8-pass CRT pipeline now runs on both OpenGL and Direct3D 12 from the same GLSL shader source, compiled at build time via glslang → SPIR-V → SPIRV-Cross → dxc.
Try it
```
tubelight.exe --renderer dx12 --shader-only docs/manual/assets/raw/testcard.png --profile pvm-8220 --signal composite_ntsc
```
Falls back to OpenGL automatically if the D3D12 device can't be created (covers ADR-0002 R12 — pre-DX12 GPUs, Wine without DXVK, etc).
What works in v0.2.0-beta.0
--renderer gl(default): identical output to v0.1.7 baseline. Overlay mode unchanged.--renderer dx12: full 8-pass CRT pipeline on D3D12 (FL 12_0+). Validated on NVIDIA RTX 2080 Ti FL 12_2.--shader-onlymode only — overlay capture stays on GL.--screenshot <path>: deterministic offscreen capture on both backends, for the new pixel-equivalence harness.
Major changes since v0.1.6
- Phase 3a (v0.1.7):
IRenderBackendabstraction. Cero cambio visual vs v0.1.6. - Phase 3b (v0.2.0-alpha.0): D3D12 skeleton (device + swap chain + clear/present).
- Phase 3c (v0.2.0-beta.0): D3D12 backend drives the full pipeline.
cmake/CompileShaders.cmakebuild-time GLSL→DXIL pipeline.- 8 fragment shaders refactored to explicit
layout(std140, binding=0) uniform PassUniforms {...}blocks for deterministic HLSL cbuffer output. Pipelinemigrated toIRenderBackendresource handles (TextureHandle,RenderTargetHandle,PassHandle).- D3D12 root signature: 1 CBV(b0) + 2 SRVs(t1,t2) + 2 static linear-clamp samplers.
- CB ring + two-heap SRV scheme (CPU staging + shader-visible scratch).
- Vulkan→D3D12 Y-flip trap fixed via negative-height viewport (standard SPIR-V→HLSL pattern).
- PSNR pixel-equivalence gate between GL and DX12 backends. Realistic threshold 18 dB after measurement; visually identical at any PSNR > 17. See
specs/phase-3c/SPEC.md §M1for the architectural reasoning.
Known limitations
- Overlay mode (
--overlay,--overlay-target,--overlay-fullscreen,--overlay-region) remains GL-only. Phase 3d (WGC capture + D3D11On12 interop) lets DX12 drive overlay too. - Cross-API PSNR is ~20 dB, not bit-exact. Sub-pixel float divergence across the 8 non-linear passes accumulates; perceptually invisible. Phase 7a Slang single-source can close this gap.
- DPI scaling on HiDPI displays not fully validated in DX12 path. Tested at 1080p / 1280×960.
Hardware tested
- NVIDIA GeForce RTX 2080 Ti (driver 580+, FL 12_2): all features green.
- Other GPUs: please report issues — the D3D12 capability requirements are FL 12_0 minimum.
File checksums
tubelight-0.2.0-beta.0-win64.zip— 55.19 MB