Struct wgpu::PipelineCache

source ·
pub struct PipelineCache { /* private fields */ }
Expand description

Handle to a pipeline cache, which is used to accelerate creating RenderPipelines and ComputePipelines in subsequent executions

This reuse is only applicable for the same or similar devices. See util::pipeline_cache_key for some details.

Background

In most GPU drivers, shader code must be converted into a machine code which can be executed on the GPU. Generating this machine code can require a lot of computation. Pipeline caches allow this computation to be reused between executions of the program. This can be very useful for reducing program startup time.

Note that most desktop GPU drivers will manage their own caches, meaning that little advantage can be gained from this on those platforms. However, on some platforms, especially Android, drivers leave this to the application to implement.

Unfortunately, drivers do not expose whether they manage their own caches. Some reasonable policies for applications to use are:

  • Manage their own pipeline cache on all platforms
  • Only manage pipeline caches on Android

Usage

It is valid to use this resource when creating multiple pipelines, in which case it will likely cache each of those pipelines. It is also valid to create a new cache for each pipeline.

This resource is most useful when the data produced from it (using PipelineCache::get_data) is persisted. Care should be taken that pipeline caches are only used for the same device, as pipeline caches from compatible devices are unlikely to provide any advantage. util::pipeline_cache_key can be used as a file/directory name to help ensure that.

It is recommended to store pipeline caches atomically. If persisting to disk, this can usually be achieved by creating a temporary file, then moving/renaming the temporary file over the existing cache

Storage Usage

There is not currently an API available to reduce the size of a cache. This is due to limitations in the underlying graphics APIs used. This is especially impactful if your application is being updated, so previous caches are no longer being used.

One option to work around this is to regenerate the cache. That is, creating the pipelines which your program runs using with the stored cached data, then recreating the same pipelines using a new cache, which your application then store.

Implementations

This resource currently only works on the following backends:

  • Vulkan

This type is unique to the Rust API of wgpu.

Implementations§

source§

impl PipelineCache

source

pub fn get_data(&self) -> Option<Vec<u8>>

Get the data associated with this pipeline cache. The data format is an implementation detail of wgpu. The only defined operation on this data setting it as the data field on PipelineCacheDescriptor, then to Device::create_pipeline_cache.

This function is unique to the Rust API of wgpu.

Trait Implementations§

source§

impl Debug for PipelineCache

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Drop for PipelineCache

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T

§

impl<T> WasmNotSync for T
where T: Sync,