Inspect the relationship#
Follow the handoffs from input to retirement with a backend-specific command view.
Step through a complete frame This illustration uses canvas. The explanation below describes the same process.
Try these experiments#
Step through the seven stages and read the active handoff. Switch between DX12 and Vulkan at recording/execution to compare the native command path. Scrub directly to retirement and ask which work proves a resource is no longer in use.
What the illustration shows#
Input becomes actions. Fixed simulation produces body and pose state. Extraction creates immutable render records. Visibility chooses useful instances. Recording encodes a pass plan. GPU execution consumes resources and presentation displays an image. Retirement reclaims allocations only when completion facts allow it. The stage diagram is a teaching order, not a claim that CPU and GPU work never overlap. The scheduling laboratory adds that overlap. Simulation also may take zero or several fixed steps between displayed frames.
Connect the boundaries#
Application coordinates the frame. Scene and simulation systems own authoritative state. Renderer owns extraction and pass orchestration. GraphicsDevice owns native execution. AssetStore and retirement queues publish or release versions at defined boundaries. Each stage should publish only complete data. A render snapshot cannot borrow a pointer into a component pool that simulation might move during recording. A retired CPU snapshot does not instantly make its GPU upload region reusable.
The completion distinction
CPU recording complete: commands are ready to submit.
GPU completion reached: submitted uses covered by the fence are finished.DX12 queue Signal marks progress after earlier queue work. Vulkan submission/timeline semantics and WSI semaphore consumption need their own native tracking. Frame numbers alone prove neither.
What to inspect when it is wrong#
A one-frame stale pose can be an extraction boundary issue. Flickering resources can be premature retirement. An idle GPU can be late CPU submission. A queue hang can be a dependency on a completion value never produced after an error. Read frame lifecycle and architecture for the complete ownership model.