Finally, 3DMigoto hooks IDXGISwapChain::Present to mark frame boundaries. Unlike DX11, there is no guarantee that all rendering is complete at Present due to async compute queues. 3DMigoto DX12 must insert a GPU fence and wait for all queues to idle before performing any frame-wide analysis (e.g., dumping all textures).