Constructors
FramefIndex :: Word64Monotonic, used as the timeline-semaphore signal value for this frame.
fSwapchain :: SwapchainThe swapchain this frame targets. Held by reference so a frame in flight keeps its swapchain alive across recreation.
fRecycled :: RecycledResources rrThis frame's image-available semaphore + command pool — borrowed from the recycle channel; returned at retire time.
fHostTimeline :: SemaphoreLong-lived timeline semaphore. Each frame increments it to fIndex on the GPU; the host wait thread blocks on this.
fGPUWork :: IORef [(Semaphore, Word64)](Timeline semaphore, value) pairs the host wait thread will block on. Appended to by queueSubmitFrame.
fDeferredWork :: IORef [IO ()]fResources :: (ReleaseKey, InternalState)ResourceT scope for frame-local allocations; closed when the frame retires. The ReleaseKey lives in the outer ResourceT so the scope is freed cleanly even on early shutdown.