pub struct PipelineCache { /* private fields */ }
Expand description
Cache for render and compute pipelines.
The cache stores existing render and compute pipelines allocated on the GPU, as well as
pending creation. Pipelines inserted into the cache are identified by a unique ID, which
can be used to retrieve the actual GPU object once it’s ready. The creation of the GPU
pipeline object is deferred to the RenderSet::Render
step, just before the render
graph starts being processed, as this requires access to the GPU.
Note that the cache does not perform automatic deduplication of identical pipelines. It is up to the user not to insert the same pipeline twice to avoid wasting GPU resources.
Implementations§
Source§impl PipelineCache
impl PipelineCache
Sourcepub fn pipelines(&self) -> impl Iterator<Item = &CachedPipeline>
pub fn pipelines(&self) -> impl Iterator<Item = &CachedPipeline>
Returns an iterator over the pipelines in the pipeline cache.
Sourcepub fn waiting_pipelines(&self) -> impl Iterator<Item = usize> + '_
pub fn waiting_pipelines(&self) -> impl Iterator<Item = usize> + '_
Returns a iterator of the IDs of all currently waiting pipelines.
Sourcepub fn new(
device: RenderDevice,
render_adapter: RenderAdapter,
synchronous_pipeline_compilation: bool,
) -> Self
pub fn new( device: RenderDevice, render_adapter: RenderAdapter, synchronous_pipeline_compilation: bool, ) -> Self
Create a new pipeline cache associated with the given render device.
Sourcepub fn get_render_pipeline_state(
&self,
id: CachedRenderPipelineId,
) -> &CachedPipelineState
pub fn get_render_pipeline_state( &self, id: CachedRenderPipelineId, ) -> &CachedPipelineState
Get the state of a cached render pipeline.
Sourcepub fn get_compute_pipeline_state(
&self,
id: CachedComputePipelineId,
) -> &CachedPipelineState
pub fn get_compute_pipeline_state( &self, id: CachedComputePipelineId, ) -> &CachedPipelineState
Get the state of a cached compute pipeline.
Sourcepub fn get_render_pipeline_descriptor(
&self,
id: CachedRenderPipelineId,
) -> &RenderPipelineDescriptor
pub fn get_render_pipeline_descriptor( &self, id: CachedRenderPipelineId, ) -> &RenderPipelineDescriptor
Get the render pipeline descriptor a cached render pipeline was inserted from.
Sourcepub fn get_compute_pipeline_descriptor(
&self,
id: CachedComputePipelineId,
) -> &ComputePipelineDescriptor
pub fn get_compute_pipeline_descriptor( &self, id: CachedComputePipelineId, ) -> &ComputePipelineDescriptor
Get the compute pipeline descriptor a cached render pipeline was inserted from.
Sourcepub fn get_render_pipeline(
&self,
id: CachedRenderPipelineId,
) -> Option<&RenderPipeline>
pub fn get_render_pipeline( &self, id: CachedRenderPipelineId, ) -> Option<&RenderPipeline>
Try to retrieve a render pipeline GPU object from a cached ID.
§Returns
This method returns a successfully created render pipeline if any, or None
if the pipeline
was not created yet or if there was an error during creation. You can check the actual creation
state with PipelineCache::get_render_pipeline_state()
.
Sourcepub fn block_on_render_pipeline(&mut self, id: CachedRenderPipelineId)
pub fn block_on_render_pipeline(&mut self, id: CachedRenderPipelineId)
Wait for a render pipeline to finish compiling.
Sourcepub fn get_compute_pipeline(
&self,
id: CachedComputePipelineId,
) -> Option<&ComputePipeline>
pub fn get_compute_pipeline( &self, id: CachedComputePipelineId, ) -> Option<&ComputePipeline>
Try to retrieve a compute pipeline GPU object from a cached ID.
§Returns
This method returns a successfully created compute pipeline if any, or None
if the pipeline
was not created yet or if there was an error during creation. You can check the actual creation
state with PipelineCache::get_compute_pipeline_state()
.
Sourcepub fn queue_render_pipeline(
&self,
descriptor: RenderPipelineDescriptor,
) -> CachedRenderPipelineId
pub fn queue_render_pipeline( &self, descriptor: RenderPipelineDescriptor, ) -> CachedRenderPipelineId
Insert a render pipeline into the cache, and queue its creation.
The pipeline is always inserted and queued for creation. There is no attempt to deduplicate it with an already cached pipeline.
§Returns
This method returns the unique render shader ID of the cached pipeline, which can be used to query
the caching state with get_render_pipeline_state()
and to retrieve the created GPU pipeline once
it’s ready with get_render_pipeline()
.
Sourcepub fn queue_compute_pipeline(
&self,
descriptor: ComputePipelineDescriptor,
) -> CachedComputePipelineId
pub fn queue_compute_pipeline( &self, descriptor: ComputePipelineDescriptor, ) -> CachedComputePipelineId
Insert a compute pipeline into the cache, and queue its creation.
The pipeline is always inserted and queued for creation. There is no attempt to deduplicate it with an already cached pipeline.
§Returns
This method returns the unique compute shader ID of the cached pipeline, which can be used to query
the caching state with get_compute_pipeline_state()
and to retrieve the created GPU pipeline once
it’s ready with get_compute_pipeline()
.
Sourcepub fn process_queue(&mut self)
pub fn process_queue(&mut self)
Process the pipeline queue and create all pending pipelines if possible.
This is generally called automatically during the RenderSet::Render
step, but can
be called manually to force creation at a different time.
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for PipelineCache
impl !RefUnwindSafe for PipelineCache
impl Send for PipelineCache
impl Sync for PipelineCache
impl Unpin for PipelineCache
impl !UnwindSafe for PipelineCache
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more