Skip to content

v0.2.0-beta.0 — Phase 3c complete: D3D12 backend executes 8-pass pipeline

Pre-release
Pre-release

Choose a tag to compare

@GS-RUN GS-RUN released this 28 May 17:36

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-only mode 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): IRenderBackend abstraction. 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.cmake build-time GLSL→DXIL pipeline.
    • 8 fragment shaders refactored to explicit layout(std140, binding=0) uniform PassUniforms {...} blocks for deterministic HLSL cbuffer output.
    • Pipeline migrated to IRenderBackend resource 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 §M1 for 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