Content-verified one-time probe of the GPU->peer (playout) P2P path. More...
Detailed Description
Content-verified one-time probe of the GPU->peer (playout) P2P path.
Pinning a CUDA buffer for a capture card only proves nvidia_p2p_get_pages accepted the range. It does not prove the card can actually read that memory over PCIe: with the IOMMU in full-translation mode, or with the card and the GPU behind different host bridges, the transfer is silently dropped while every SDK call still returns success. The card then plays out whatever its framestore already held — a constant frame — and the pump reports a full frame count with zero drops.
The capture direction is already content-verified by its vendor adapter (seed the pinned buffer, run a real card->GPU transfer, check the bytes changed). This is the playout counterpart, and it lives here rather than in an addon so every vendor gets the same assertion: seed the pinned buffer with a known non-degenerate pattern, ask the vendor to push it to the device, ask the vendor to read it back, and compare 1:1.
The GPU seeding is injected (RdmaPlayoutProbeIo) so the decision table is exercisable without a CUDA driver.
Go to the source code of this file.
Classes | |
| struct | score::gfx::interop::RdmaPlayoutProbeIo |
Namespaces | |
| namespace | score |
| Base toolkit upon which the software is built. | |
| namespace | score::gfx |
| Graphics rendering pipeline for ossia score. | |
Enumerations | |
| enum class | score::gfx::interop::RdmaPlayoutProbeResult { Delivered , Unverified , NoProbe , SeedFailed , TransferFailed , ReadbackFailed , ContentMismatch } |
Functions | |
| unsigned char | score::gfx::interop::rdmaPlayoutProbeByte (std::uint32_t index) noexcept |
| RdmaPlayoutProbeResult | score::gfx::interop::rdmaProbePlayoutPath (void *pinnedGpuPtr, std::uint32_t frameByteSize, const VendorDmaRegistrar ®istrar, const RdmaPlayoutProbeIo &io) noexcept |
Run the probe. pinnedGpuPtr must already be pinned by the vendor. | |
| bool | score::gfx::interop::rdmaPlayoutProbeEngages (RdmaPlayoutProbeResult r) noexcept |
| True for the results on which an RDMA output rung may engage. | |
| const char * | score::gfx::interop::rdmaPlayoutProbeMessage (RdmaPlayoutProbeResult r) noexcept |
Variables | |
| constexpr std::uint32_t | score::gfx::interop::rdmaPlayoutProbeMaxBytes = 64u * 1024u |
Enumeration Type Documentation
◆ RdmaPlayoutProbeResult
|
strong |
Function Documentation
◆ rdmaPlayoutProbeByte()
|
noexcept |
Deterministic, non-degenerate pattern. Never constant and never all-zero, so a dropped transfer (stale framestore, zero-filled scratch) cannot alias a correct result.
Variable Documentation
◆ rdmaPlayoutProbeMaxBytes
|
inlineconstexpr |
Bytes the probe seeds and compares: enough to cross several GPU pages, capped so the probe stays cheap at 8K rasters.