pub struct AsyncDevice { /* private fields */ }Expand description
A wrapper around a wgpu::Device which shadows some methods to allow for callback-and-poll
methods to be made async.
Implementations§
Source§impl AsyncDevice
impl AsyncDevice
Sourcepub fn do_async<F, R>(&self, f: F) -> WgpuFuture<R> ⓘ
pub fn do_async<F, R>(&self, f: F) -> WgpuFuture<R> ⓘ
Converts a callback-and-poll wgpu method pair into a future.
The function given is called immediately, usually initiating work on the GPU immediately, however the device is only polled once the future is awaited.
§Example
The Buffer::map_async method is made async using this method:
let future = device.do_async(|callback|
buffer_slice.map_async(mode, callback)
);
let result = future.await;Sourcepub fn create_buffer(&self, desc: &BufferDescriptor<'_>) -> AsyncBuffer
pub fn create_buffer(&self, desc: &BufferDescriptor<'_>) -> AsyncBuffer
Creates an AsyncBuffer.
Sourcepub fn create_buffer_init(&self, desc: &BufferInitDescriptor<'_>) -> AsyncBuffer
pub fn create_buffer_init(&self, desc: &BufferInitDescriptor<'_>) -> AsyncBuffer
Creates an AsyncBuffer with data to initialize it.
Methods from Deref<Target = Device>§
Sourcepub fn poll(&self, maintain: Maintain<SubmissionIndex>) -> MaintainResult
pub fn poll(&self, maintain: Maintain<SubmissionIndex>) -> MaintainResult
Check for resource cleanups and mapping callbacks. Will block if Maintain::Wait is passed.
Return true if the queue is empty, or false if there are more queue
submissions still in flight. (Note that, unless access to the Queue is
coordinated somehow, this information could be out of date by the time
the caller receives it. Queues can be shared between threads, so
other threads could submit new work at any time.)
When running on WebGPU, this is a no-op. Devices are automatically polled.
Sourcepub fn features(&self) -> Features
pub fn features(&self) -> Features
The features which can be used on this device.
No additional features can be used, even if the underlying adapter can support them.
Sourcepub fn limits(&self) -> Limits
pub fn limits(&self) -> Limits
The limits which can be used on this device.
No better limits can be used, even if the underlying adapter can support them.
Sourcepub fn create_shader_module(
&self,
desc: ShaderModuleDescriptor<'_>,
) -> ShaderModule
pub fn create_shader_module( &self, desc: ShaderModuleDescriptor<'_>, ) -> ShaderModule
Creates a shader module.
This function may consume a lot of stack space. Compiler-enforced limits for parsing recursion exist; if shader compilation runs into them, it will return an error gracefully. However, on some build profiles and platforms, the default stack size for a thread may be exceeded before this limit is reached during parsing. Callers should ensure that there is enough stack space for this, particularly if calls to this method are exposed to user input.
Sourcepub unsafe fn create_shader_module_unchecked(
&self,
desc: ShaderModuleDescriptor<'_>,
) -> ShaderModule
👎Deprecated since 24.0.0: Use Device::create_shader_module_trusted(desc, wgpu::ShaderRuntimeChecks::unchecked()) instead.
pub unsafe fn create_shader_module_unchecked( &self, desc: ShaderModuleDescriptor<'_>, ) -> ShaderModule
Device::create_shader_module_trusted(desc, wgpu::ShaderRuntimeChecks::unchecked()) instead.Sourcepub unsafe fn create_shader_module_trusted(
&self,
desc: ShaderModuleDescriptor<'_>,
runtime_checks: ShaderRuntimeChecks,
) -> ShaderModule
pub unsafe fn create_shader_module_trusted( &self, desc: ShaderModuleDescriptor<'_>, runtime_checks: ShaderRuntimeChecks, ) -> ShaderModule
Creates a shader module with flags to dictate runtime checks.
When running on WebGPU, this will merely call create_shader_module.
§Safety
In contrast with create_shader_module this function
creates a shader module with user-customizable runtime checks which allows shaders to
perform operations which can lead to undefined behavior like indexing out of bounds,
thus it’s the caller responsibility to pass a shader which doesn’t perform any of this
operations.
See the documentation for ShaderRuntimeChecks for more information about specific checks.
Sourcepub unsafe fn create_shader_module_spirv(
&self,
desc: &ShaderModuleDescriptorSpirV<'_>,
) -> ShaderModule
pub unsafe fn create_shader_module_spirv( &self, desc: &ShaderModuleDescriptorSpirV<'_>, ) -> ShaderModule
Creates a shader module from SPIR-V binary directly.
§Safety
This function passes binary data to the backend as-is and can potentially result in a driver crash or bogus behaviour. No attempt is made to ensure that data is valid SPIR-V.
See also include_spirv_raw! and util::make_spirv_raw.
Sourcepub fn create_command_encoder(
&self,
desc: &CommandEncoderDescriptor<Option<&str>>,
) -> CommandEncoder
pub fn create_command_encoder( &self, desc: &CommandEncoderDescriptor<Option<&str>>, ) -> CommandEncoder
Creates an empty CommandEncoder.
Sourcepub fn create_render_bundle_encoder<'a>(
&self,
desc: &RenderBundleEncoderDescriptor<'_>,
) -> RenderBundleEncoder<'a>
pub fn create_render_bundle_encoder<'a>( &self, desc: &RenderBundleEncoderDescriptor<'_>, ) -> RenderBundleEncoder<'a>
Creates an empty RenderBundleEncoder.
Sourcepub fn create_bind_group(&self, desc: &BindGroupDescriptor<'_>) -> BindGroup
pub fn create_bind_group(&self, desc: &BindGroupDescriptor<'_>) -> BindGroup
Creates a new BindGroup.
Sourcepub fn create_bind_group_layout(
&self,
desc: &BindGroupLayoutDescriptor<'_>,
) -> BindGroupLayout
pub fn create_bind_group_layout( &self, desc: &BindGroupLayoutDescriptor<'_>, ) -> BindGroupLayout
Creates a BindGroupLayout.
Sourcepub fn create_pipeline_layout(
&self,
desc: &PipelineLayoutDescriptor<'_>,
) -> PipelineLayout
pub fn create_pipeline_layout( &self, desc: &PipelineLayoutDescriptor<'_>, ) -> PipelineLayout
Creates a PipelineLayout.
Sourcepub fn create_render_pipeline(
&self,
desc: &RenderPipelineDescriptor<'_>,
) -> RenderPipeline
pub fn create_render_pipeline( &self, desc: &RenderPipelineDescriptor<'_>, ) -> RenderPipeline
Creates a RenderPipeline.
Sourcepub fn create_compute_pipeline(
&self,
desc: &ComputePipelineDescriptor<'_>,
) -> ComputePipeline
pub fn create_compute_pipeline( &self, desc: &ComputePipelineDescriptor<'_>, ) -> ComputePipeline
Creates a ComputePipeline.
Sourcepub fn create_buffer(&self, desc: &BufferDescriptor<Option<&str>>) -> Buffer
pub fn create_buffer(&self, desc: &BufferDescriptor<Option<&str>>) -> Buffer
Creates a Buffer.
Sourcepub fn create_texture(
&self,
desc: &TextureDescriptor<Option<&str>, &[TextureFormat]>,
) -> Texture
pub fn create_texture( &self, desc: &TextureDescriptor<Option<&str>, &[TextureFormat]>, ) -> Texture
Creates a new Texture.
desc specifies the general format of the texture.
Sourcepub unsafe fn create_texture_from_hal<A>(
&self,
hal_texture: <A as Api>::Texture,
desc: &TextureDescriptor<Option<&str>, &[TextureFormat]>,
) -> Texturewhere
A: HalApi,
pub unsafe fn create_texture_from_hal<A>(
&self,
hal_texture: <A as Api>::Texture,
desc: &TextureDescriptor<Option<&str>, &[TextureFormat]>,
) -> Texturewhere
A: HalApi,
Sourcepub unsafe fn create_buffer_from_hal<A>(
&self,
hal_buffer: <A as Api>::Buffer,
desc: &BufferDescriptor<Option<&str>>,
) -> Bufferwhere
A: HalApi,
pub unsafe fn create_buffer_from_hal<A>(
&self,
hal_buffer: <A as Api>::Buffer,
desc: &BufferDescriptor<Option<&str>>,
) -> Bufferwhere
A: HalApi,
Sourcepub fn create_sampler(&self, desc: &SamplerDescriptor<Option<&str>>) -> Sampler
pub fn create_sampler(&self, desc: &SamplerDescriptor<Option<&str>>) -> Sampler
Creates a new Sampler.
desc specifies the behavior of the sampler.
Sourcepub fn create_query_set(
&self,
desc: &QuerySetDescriptor<Option<&str>>,
) -> QuerySet
pub fn create_query_set( &self, desc: &QuerySetDescriptor<Option<&str>>, ) -> QuerySet
Creates a new QuerySet.
Sourcepub fn on_uncaptured_error(
&self,
handler: Box<dyn UncapturedErrorHandler<Output = ()>>,
)
pub fn on_uncaptured_error( &self, handler: Box<dyn UncapturedErrorHandler<Output = ()>>, )
Set a callback for errors that are not handled in error scopes.
Sourcepub fn push_error_scope(&self, filter: ErrorFilter)
pub fn push_error_scope(&self, filter: ErrorFilter)
Push an error scope.
Sourcepub fn pop_error_scope(
&self,
) -> impl Future<Output = Option<Error>> + WasmNotSend
pub fn pop_error_scope( &self, ) -> impl Future<Output = Option<Error>> + WasmNotSend
Pop an error scope.
Sourcepub fn start_capture(&self)
pub fn start_capture(&self)
Starts frame capture.
Sourcepub fn stop_capture(&self)
pub fn stop_capture(&self)
Stops frame capture.
Sourcepub fn get_internal_counters(&self) -> InternalCounters
pub fn get_internal_counters(&self) -> InternalCounters
Query internal counters from the native backend for debugging purposes.
Some backends may not set all counters, or may not set any counter at all.
The counters cargo feature must be enabled for any counter to be set.
If a counter is not set, its contains its default value (zero).
Sourcepub fn generate_allocator_report(&self) -> Option<AllocatorReport>
pub fn generate_allocator_report(&self) -> Option<AllocatorReport>
Generate an GPU memory allocation report if the underlying backend supports it.
Backends that do not support producing these reports return None. A backend may
Support it and still return None if it is not using performing sub-allocation,
for example as a workaround for driver issues.
Sourcepub unsafe fn as_hal<A, F, R>(&self, hal_device_callback: F) -> R
pub unsafe fn as_hal<A, F, R>(&self, hal_device_callback: F) -> R
Apply a callback to this Device’s underlying backend device.
If this Device is implemented by the backend API given by A (Vulkan,
Dx12, etc.), then apply hal_device_callback to Some(&device), where
device is the underlying backend device type, A::Device.
If this Device uses a different backend, apply hal_device_callback
to None.
The device is locked for reading while hal_device_callback runs. If
the callback attempts to perform any wgpu operations that require
write access to the device (destroying a buffer, say), deadlock will
occur. The locks are automatically released when the callback returns.
§Safety
- The raw handle passed to the callback must not be manually destroyed.
Sourcepub fn set_device_lost_callback(
&self,
callback: impl Fn(DeviceLostReason, String) + Send + 'static,
)
pub fn set_device_lost_callback( &self, callback: impl Fn(DeviceLostReason, String) + Send + 'static, )
Set a DeviceLostCallback on this device.
Sourcepub unsafe fn create_pipeline_cache(
&self,
desc: &PipelineCacheDescriptor<'_>,
) -> PipelineCache
pub unsafe fn create_pipeline_cache( &self, desc: &PipelineCacheDescriptor<'_>, ) -> PipelineCache
Create a PipelineCache with initial data
This can be passed to Device::create_compute_pipeline
and Device::create_render_pipeline to either accelerate these
or add the cache results from those.
§Safety
If the data field of desc is set, it must have previously been returned from a call
to PipelineCache::get_data1. This data will only be used if it came
from an adapter with the same util::pipeline_cache_key.
This is compatible across wgpu versions, as any data format change will
be accounted for.
It is not supported to bring caches from previous direct uses of backend APIs into this method.
§Errors
Returns an error value if:
- the
PIPELINE_CACHEfeature is not enabled - this device is invalid; or
- the device is out of memory
This method also returns an error value if:
- The
fallbackfield ondescis false; and - the
dataprovided would not be used2
If an error value is used in subsequent calls, default caching will be used.
We do recognise that saving this data to disk means this condition is impossible to fully prove. Consider the risks for your own application in this case. ↩
This data may be not used if: the data was produced by a prior version of wgpu; or was created for an incompatible adapter, or there was a GPU driver update. In some cases, the data might not be used and a real value is returned, this is left to the discretion of GPU drivers. ↩
Sourcepub fn create_blas(
&self,
desc: &CreateBlasDescriptor<Option<&str>>,
sizes: BlasGeometrySizeDescriptors,
) -> Blas
pub fn create_blas( &self, desc: &CreateBlasDescriptor<Option<&str>>, sizes: BlasGeometrySizeDescriptors, ) -> Blas
Create a bottom level acceleration structure, used inside a top level acceleration structure for ray tracing.
desc: The descriptor of the acceleration structure.sizes: Size descriptor limiting what can be built into the acceleration structure.
§Validation
If any of the following is not satisfied a validation error is generated
The device must have Features::EXPERIMENTAL_RAY_TRACING_ACCELERATION_STRUCTURE enabled.
if sizes is BlasGeometrySizeDescriptors::Triangles then the following must be satisfied
- For every geometry descriptor (for the purposes this is called
geo_desc) ofsizes.descriptorsthe following must be satisfied:geo_desc.vertex_formatmust be within allowed formats (allowed formats for a given feature set may be queried with Features::allowed_vertex_formats_for_blas).- Both or neither of
geo_desc.index_formatandgeo_desc.index_countmust be provided.
Sourcepub fn create_tlas(&self, desc: &CreateTlasDescriptor<Option<&str>>) -> Tlas
pub fn create_tlas(&self, desc: &CreateTlasDescriptor<Option<&str>>) -> Tlas
Create a top level acceleration structure, used for ray tracing.
desc: The descriptor of the acceleration structure.
§Validation
If any of the following is not satisfied a validation error is generated
The device must have Features::EXPERIMENTAL_RAY_TRACING_ACCELERATION_STRUCTURE enabled.
Trait Implementations§
Source§impl<T> AsRef<T> for AsyncDevice
impl<T> AsRef<T> for AsyncDevice
Source§impl Clone for AsyncDevice
impl Clone for AsyncDevice
Source§fn clone(&self) -> AsyncDevice
fn clone(&self) -> AsyncDevice
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more