pub struct Yuv420pReadback { /* private fields */ }Expand description
A submitted GPU RGB-to-YUV420 conversion whose buffer is not mapped yet.
Implementations§
Source§impl Yuv420pReadback
impl Yuv420pReadback
Sourcepub const fn size(&self) -> RenderSize
pub const fn size(&self) -> RenderSize
Returns the luma-plane dimensions.
Sourcepub const fn staging_bytes(&self) -> u64
pub const fn staging_bytes(&self) -> u64
Returns bytes retained by the GPU-visible staging buffer.
Sourcepub fn wait_ready(&self) -> Result<(), RenderError>
pub fn wait_ready(&self) -> Result<(), RenderError>
Blocks a native caller until this readback is mapped.
§Errors
Returns RenderError::TextureReadback when mapping or polling fails.
Sourcepub fn wait_for_submission(&self) -> Result<(), RenderError>
pub fn wait_for_submission(&self) -> Result<(), RenderError>
Blocks native GPU progress through this readback’s submission.
This can be paired with an earlier Self::map_async call when a
scheduler wants mapping to begin before it eventually has to wait.
§Errors
Returns RenderError::GpuTimeout when the submission does not
complete within the renderer’s wait timeout, or
RenderError::TextureReadback when device polling fails.
Sourcepub fn wait(self) -> Result<Yuv420pPlanes, RenderError>
pub fn wait(self) -> Result<Yuv420pPlanes, RenderError>
Waits for this readback and returns tightly packed planes.
§Errors
Returns RenderError::TextureReadback when mapping, polling, or row
packing fails.
Sourcepub fn map_async(
&self,
on_ready: impl FnOnce(Result<(), RenderError>) + Send + 'static,
)
pub fn map_async( &self, on_ready: impl FnOnce(Result<(), RenderError>) + Send + 'static, )
Requests buffer mapping and reports readiness exactly once.
Sourcepub fn finish_into(
self,
targets: &mut Yuv420pTargets<'_>,
) -> Result<(), RenderError>
pub fn finish_into( self, targets: &mut Yuv420pTargets<'_>, ) -> Result<(), RenderError>
Packs mapped Y and UV rows into plane buffers the caller already owns.
Yuv420pReadback::finish allocates three vectors per frame, which is
what the browser path wants. A native caller that already owns the
memory the encoder will read from can pack straight into it, which
removes both that allocation and the copy that would follow it. The
pixels written are the same either way.
Each target may be strided, because encoder plane memory usually is.
§Errors
Returns RenderError::TextureReadback when the buffer is not mapped,
its layout cannot be represented, or a target is too small, and
RenderError::GpuWorkDropped when the GPU did not run the copy: the
buffer holds no frame of this readback, so it is not recycled, and the
renderer refuses further work.
Sourcepub fn finish(self) -> Result<Yuv420pPlanes, RenderError>
pub fn finish(self) -> Result<Yuv420pPlanes, RenderError>
Packs mapped Y and UV rows into three tightly packed planes.
§Errors
Returns RenderError::TextureReadback when the buffer is not mapped
or its layout cannot be represented, and RenderError::GpuWorkDropped
when the GPU did not run the copy, as Self::finish_into does.