37 lines
1.8 KiB
Markdown
37 lines
1.8 KiB
Markdown
# D3D12 Migration
|
|
|
|
Aquarium is moving to D3D12 before the transparent stochastic surface pipeline
|
|
gets real machinery. D3D11 remains the reference renderer until the D3D12 path
|
|
has feature parity.
|
|
|
|
## Current State
|
|
|
|
- `--renderer d3d11` is the default renderer and owns the live scene.
|
|
- `--renderer d3d12` creates a D3D12 device, command queue, flip-discard
|
|
swapchain, RTV heap, per-backbuffer command allocators, command list,
|
|
fence-backed present loop, shader-visible CBV/SRV/UAV descriptor arena,
|
|
per-frame upload buffers, fullscreen root signature, and a smoke-test PSO.
|
|
- The D3D12 path currently draws a diagnostic fullscreen pass. It exists to
|
|
prove backend lifecycle, shader compilation, root signature creation,
|
|
descriptor-table binding, per-frame constant upload, PSO creation, render
|
|
target binding, and draw submission before real scene passes migrate.
|
|
- `IAquariumRenderer` is the host boundary. The host should not learn backend
|
|
internals as the D3D12 renderer grows teeth.
|
|
|
|
## Migration Order
|
|
|
|
1. Keep D3D11 as the visual reference.
|
|
2. Move shared renderer contracts behind explicit backend-neutral types.
|
|
3. Replace the smoke-only descriptor/upload code with general ring-buffer and
|
|
resource lifetime helpers.
|
|
4. Port the existing passes in visible order: grid height, froxel volume, scene,
|
|
bloom, resolve, overlay/debug.
|
|
5. Build the transparent stochastic surface pipe in D3D12 once descriptor and
|
|
candidate-buffer ownership is explicit.
|
|
|
|
## Invariants
|
|
|
|
- No hidden D3D11 dependency should leak into shared renderer contracts.
|
|
- D3D12 work must be validated by actual headless runs, not just compilation.
|
|
- D3D11 output remains the comparison target until D3D12 fully renders the scene.
|
|
- Transparent surfaces are still events/candidates, not canonical depth.
|