App-owned host frame pool behind a FrameMemoryProvider. More...
Detailed Description
App-owned host frame pool behind a FrameMemoryProvider.
The direct-readback destination for vendors whose submit is a synchronous DMA from an arbitrary host pointer (AJA AutoCirculateTransfer, Bluefish bfDmaWrite, Deltacast slot buffers): unlike DeckLink there is no SDK frame object to wrap, so the pool allocates the frames itself, sized and aligned so the GPU can wrap each one as a readback target, and pins them through the vendor's VendorDmaRegistrar for the card's DMA engine.
Each frame is one whole allocation: bytes == regionBase, no interior offset. acquire() pops a free frame (an empty pool is that render tick's back-pressure drop); recycle() returns a frame after the vendor's submit completes or on any discard/cancel path. Because the vendor's DMA is synchronous, a frame is reusable the moment submit returns — the pool never tracks hardware completions.
Allocation granule: VirtualAlloc in whole 64 KiB on Windows (the only memory D3D12's OpenExistingHeapFromAddress accepts, at its allocation granularity), 4096-aligned elsewhere (VK_EXT_external_memory_host / GL_AMD_pinned_memory page requirement).
Threading: acquire() runs on the render thread, recycle() on the vendor's pump thread; the free list is mutex-guarded. allocate()/release() are init/teardown only.
Go to the source code of this file.
Classes | |
| class | score::gfx::interop::HostFramePool |
Namespaces | |
| namespace | score |
| Base toolkit upon which the software is built. | |
| namespace | score::gfx |
| Graphics rendering pipeline for ossia score. | |