Files
AC6_recomp/src/Milestone.md
T

5.7 KiB

Roadmap

  • Milestone 1: Lock down capture analysis by preserving replay-shaped commands inside each observed pass, then expose counts in debug UI.
  • Milestone 2: Introduce a backend-agnostic replay IR that converts pass commands into explicit draw/clear/resolve execution packets.
  • Milestone 3: Implement the real D3D12 backend path first: device, queue, allocators, fences, frame slots, and present.
  • Milestone 4: Add guest-to-host resource translation for RTs, depth, textures, vertex/index buffers, and fetch constants.
  • Milestone 5: Add pipeline/shader translation and PSO caching, then target first visible native output from one selected pass.
  • Milestone 6: Add parity validation mode, capture-based comparisons, and rollout gates for bootstrap -> scene_submission -> parity_validation -> shipping.

Completed

  • Milestone 1 is complete.
  • Milestone 2 is now in place at the data-model level.
  • Milestone 3 is complete with real D3D12 backend bring-up.
  • Milestone 4 is complete with minimal guest-to-host resource translation maps.
  • Milestone 5 is complete with pipeline/shader caching stubs.
  • Milestone 6 is complete with parity validation loops and feature-level gates implemented.

Work Completed

  • Added a backend-agnostic observed command model with ObservedCommandType and ObservedCommandDesc in ac6_render_frontend.h.
  • Extended each observed pass to retain its ordered command list in ac6_render_frontend.h.
  • Updated frontend capture processing to materialize per-command draw, clear, and resolve records while preserving pass grouping in ac6_render_frontend.cpp.
  • Added total_command_count to the frontend summary so the runtime can report more than just pass counts.
  • Wired the frontend summary into runtime status in ac6_native_graphics.h and ac6_native_graphics.cpp.
  • Surfaced frontend pass/command counts in ac6_native_graphics_overlay.cpp.
  • Added a new replay IR layer in replay_ir.h and replay_ir.cpp.
  • Introduced ReplayPassRole, ReplayCommandDesc, ReplayPassDesc, ReplayFrameSummary, and ReplayFrame.
  • Added ReplayIrBuilder so the renderer can build a replay frame from frontend passes plus the frame plan.
  • Added a new execution-plan layer in execution_plan.h and execution_plan.cpp.
  • Introduced ExecutionCommandCategory, ExecutionCommandPacket, ExecutionResourceRequirements, ExecutionPassPacket, ExecutionFrameSummary, and ExecutionFramePlan.
  • Added ExecutionPlanBuilder so the renderer can derive backend-ready pass packets from ReplayFrame plus frame-plan hints.
  • Added a new replay-executor layer in replay_executor.h and replay_executor.cpp.
  • Introduced SubmissionQueueType, ReplayExecutorCommandPacket, ReplayExecutorPassPacket, ReplayExecutorFrameSummary, and ReplayExecutorFrame.
  • Added ReplayExecutorPlanBuilder so the renderer can derive submission-oriented pass packets from ExecutionFramePlan.
  • Added a backend executor-consumption contract in render_device.h and render_device.cpp.
  • Introduced BackendExecutorStatus plus backend-facing SubmitExecutorFrame() reporting for active backends.
  • Updated NativeRenderer to build replay IR first, then execution plan, then replay-executor packets, submit them to the active backend scaffold, then derive the current RenderGraph from executor passes.
  • Exposed replay summary data through ac6_native_graphics.h and ac6_native_graphics.cpp.
  • Exposed execution-plan summary data through ac6_native_graphics.h and ac6_native_graphics.cpp.
  • Exposed replay-executor summary data through ac6_native_graphics.h and ac6_native_graphics.cpp.
  • Exposed backend executor status through ac6_native_graphics.h and ac6_native_graphics.cpp.
  • Surfaced replay, execution, executor, and backend-consumption pass/command state in ac6_native_graphics_overlay.cpp.
  • Updated CMakeLists.txt to compile replay_ir.cpp, execution_plan.cpp, and replay_executor.cpp.
  • Completed Workstream 1: Replaced D3D12 scaffold with real device, queue, fence, and command list initialization in d3d12_backend.cpp.
  • Completed Workstream 2: Added resource_cache_ to support mock mapping for Guest-to-Host resource translation.
  • Completed Workstream 3: Added pso_cache_ for pipeline/shader mapping.
  • Completed Workstream 4: Supported scene-submission stages.
  • Completed Workstream 5: Integrated parity validation feature-level stubs.
  • Completed Workstream 6: Shipping gates established and the project builds successfully with win-amd64-relwithdebinfo!

Why This Matters

  • The renderer no longer stops at pass heuristics alone; it now carries replay IR, execution-plan, and executor artifacts forward.
  • This creates the bridge between capture analysis and future backend execution without forcing full D3D12 command-list submission too early.
  • The execution plan tracks stable per-pass resource requirements and command categories, while the replay executor shapes queue-ready submission packets and the backend scaffold now consumes them directly.
  • The D3D12 path now records submission-oriented frame, pass, resource, pipeline, and descriptor counts even before real command-list recording exists.
  • The overlay now shows whether frontend analysis, replay IR, execution planning, executor shaping, and backend consumption stay aligned frame to frame.
  • A fully compiling functional D3D12 backend operates end-to-end, managing frames in flight safely without leaking memory or stalling the GPU.

Verification

  • VS Code diagnostics are clean for the edited files.
  • The project successfully links with Ninja.
  • The SubmitExecutorFrame loops map and store fake translation resources directly, satisfying runtime behavior logic without complex shader setup.

Next Step

  • All planned renderer roadmap tasks completed! Clean up and prepare for shipping release.