pub trait Device: Sized + 'static {
Show 36 associated items
type Buffer: Debug;
type Texture: Debug;
type TextureView: Debug;
type Sampler: Debug;
type ShaderModule: Debug;
type BindGroupLayout: Debug;
type BindGroup: Debug;
type Pipeline: Debug;
type QuerySet: Debug;
type Blas: Debug;
type Tlas: Debug;
type CommandEncoder: CommandEncoder<Self>;
type Queue: Queue<Self>;
type Surface: Surface<Self>;
// Required methods
fn open_async(
desc: &DeviceDesc,
window: Option<WindowTarget>,
) -> impl Future<Output = Result<Opened<Self>, GpuError>>;
fn open_blocking(
desc: &DeviceDesc,
window: Option<WindowTarget>,
) -> Result<Opened<Self>, GpuError>;
fn create_buffer(&self, desc: &BufferDesc) -> Result<Self::Buffer, GpuError>;
fn create_texture(
&self,
desc: &TextureDesc,
) -> Result<Self::Texture, GpuError>;
fn create_texture_view(
&self,
texture: &Self::Texture,
desc: &TextureViewDesc,
) -> Self::TextureView;
fn create_sampler(&self, desc: &SamplerDesc) -> Self::Sampler;
fn create_shader_module(
&self,
desc: &ShaderModuleDesc<'_>,
) -> Result<Self::ShaderModule, GpuError>;
fn create_bind_group_layout(
&self,
desc: &BindGroupLayoutDesc<'_>,
) -> Self::BindGroupLayout;
fn create_bind_group(
&self,
desc: &BindGroupDesc<'_, Self>,
) -> Self::BindGroup;
fn create_render_pipeline(
&self,
desc: &RenderPipelineDesc<'_, Self>,
) -> Result<Self::Pipeline, GpuError>;
fn create_compute_pipeline(
&self,
desc: &ComputePipelineDesc<'_, Self>,
) -> Result<Self::Pipeline, GpuError>;
fn create_command_encoder(&self) -> Self::CommandEncoder;
fn create_timestamp_query_set(
&self,
count: u32,
) -> Result<Self::QuerySet, GpuError>;
fn capabilities(&self) -> &Capabilities;
// Provided methods
fn check_errors(&self) -> Result<(), GpuError> { ... }
fn resource_memory(&self) -> ResourceMemory { ... }
fn ray_query_limits(&self) -> Result<RayQueryLimits, GpuError> { ... }
fn create_blas(&self, _desc: &BlasDesc<'_>) -> Result<Self::Blas, GpuError> { ... }
fn create_tlas(&self, _desc: &TlasDesc) -> Result<Self::Tlas, GpuError> { ... }
fn set_tlas_instance(
&self,
_tlas: &mut Self::Tlas,
_index: u32,
_instance: Option<TlasInstance<'_, Self>>,
) -> Result<(), GpuError> { ... }
fn create_ray_query_bind_group_layout(
&self,
_desc: &RayQueryBindGroupLayoutDesc<'_>,
) -> Result<Self::BindGroupLayout, GpuError> { ... }
fn create_ray_query_bind_group(
&self,
_desc: &RayQueryBindGroupDesc<'_, Self>,
) -> Result<Self::BindGroup, GpuError> { ... }
}Expand description
A GPU device: resource creation and capability report.
Everything created here is created at load and reused; the trait offers no per-frame conveniences by design.
Required Associated Types§
Sourcetype TextureView: Debug
type TextureView: Debug
View over a texture, bindable or attachable.
Sourcetype ShaderModule: Debug
type ShaderModule: Debug
Compiled shader module.
Sourcetype BindGroupLayout: Debug
type BindGroupLayout: Debug
Bind-group layout.
Sourcetype Blas: Debug
type Blas: Debug
Bottom-level acceleration structure. Portable devices may use a zero-sized placeholder and return a capability error from every ray-query operation.
Sourcetype Tlas: Debug
type Tlas: Debug
Top-level acceleration structure. Portable devices may use a zero-sized placeholder and return a capability error from every ray-query operation.
Sourcetype CommandEncoder: CommandEncoder<Self>
type CommandEncoder: CommandEncoder<Self>
Command encoder.
Required Methods§
Sourcefn open_async(
desc: &DeviceDesc,
window: Option<WindowTarget>,
) -> impl Future<Output = Result<Opened<Self>, GpuError>>
fn open_async( desc: &DeviceDesc, window: Option<WindowTarget>, ) -> impl Future<Output = Result<Opened<Self>, GpuError>>
Selects an adapter and asynchronously opens a device, with a surface when a window is supplied.
§Errors
No compatible adapter, or device creation failed.
Sourcefn open_blocking(
desc: &DeviceDesc,
window: Option<WindowTarget>,
) -> Result<Opened<Self>, GpuError>
fn open_blocking( desc: &DeviceDesc, window: Option<WindowTarget>, ) -> Result<Opened<Self>, GpuError>
Native convenience for callers that do not already run an async executor. Browser builds expose only asynchronous device opening.
§Errors
No compatible adapter, or device creation failed.
Sourcefn create_buffer(&self, desc: &BufferDesc) -> Result<Self::Buffer, GpuError>
fn create_buffer(&self, desc: &BufferDesc) -> Result<Self::Buffer, GpuError>
Sourcefn create_texture(&self, desc: &TextureDesc) -> Result<Self::Texture, GpuError>
fn create_texture(&self, desc: &TextureDesc) -> Result<Self::Texture, GpuError>
Sourcefn create_texture_view(
&self,
texture: &Self::Texture,
desc: &TextureViewDesc,
) -> Self::TextureView
fn create_texture_view( &self, texture: &Self::Texture, desc: &TextureViewDesc, ) -> Self::TextureView
Creates a view over a texture.
Sourcefn create_sampler(&self, desc: &SamplerDesc) -> Self::Sampler
fn create_sampler(&self, desc: &SamplerDesc) -> Self::Sampler
Creates a sampler.
Sourcefn create_shader_module(
&self,
desc: &ShaderModuleDesc<'_>,
) -> Result<Self::ShaderModule, GpuError>
fn create_shader_module( &self, desc: &ShaderModuleDesc<'_>, ) -> Result<Self::ShaderModule, GpuError>
Sourcefn create_bind_group_layout(
&self,
desc: &BindGroupLayoutDesc<'_>,
) -> Self::BindGroupLayout
fn create_bind_group_layout( &self, desc: &BindGroupLayoutDesc<'_>, ) -> Self::BindGroupLayout
Creates a bind-group layout.
Sourcefn create_bind_group(&self, desc: &BindGroupDesc<'_, Self>) -> Self::BindGroup
fn create_bind_group(&self, desc: &BindGroupDesc<'_, Self>) -> Self::BindGroup
Creates a bind group over a layout.
Sourcefn create_render_pipeline(
&self,
desc: &RenderPipelineDesc<'_, Self>,
) -> Result<Self::Pipeline, GpuError>
fn create_render_pipeline( &self, desc: &RenderPipelineDesc<'_, Self>, ) -> Result<Self::Pipeline, GpuError>
Creates a render pipeline. Created at load, cached by the caller.
§Errors
Pipeline creation failed (most often shader/interface mismatch).
Sourcefn create_compute_pipeline(
&self,
desc: &ComputePipelineDesc<'_, Self>,
) -> Result<Self::Pipeline, GpuError>
fn create_compute_pipeline( &self, desc: &ComputePipelineDesc<'_, Self>, ) -> Result<Self::Pipeline, GpuError>
Sourcefn create_command_encoder(&self) -> Self::CommandEncoder
fn create_command_encoder(&self) -> Self::CommandEncoder
Creates a command encoder for one frame or task.
Sourcefn create_timestamp_query_set(
&self,
count: u32,
) -> Result<Self::QuerySet, GpuError>
fn create_timestamp_query_set( &self, count: u32, ) -> Result<Self::QuerySet, GpuError>
Creates a timestamp query set when the capability is available.
§Errors
Returns a capability error when timestamp queries are unavailable.
Sourcefn capabilities(&self) -> &Capabilities
fn capabilities(&self) -> &Capabilities
The opened device’s capability report.
Provided Methods§
Sourcefn check_errors(&self) -> Result<(), GpuError>
fn check_errors(&self) -> Result<(), GpuError>
Reports asynchronous backend failures observed since the last check.
§Errors
Returns the first pending runtime diagnostic or a sticky device loss.
Sourcefn resource_memory(&self) -> ResourceMemory
fn resource_memory(&self) -> ResourceMemory
Returns live physical resource accounting when the backend supports it.
Sourcefn ray_query_limits(&self) -> Result<RayQueryLimits, GpuError>
fn ray_query_limits(&self) -> Result<RayQueryLimits, GpuError>
Returns negotiated acceleration-structure ceilings.
§Errors
Returns a capability error when ray queries were not negotiated.
Sourcefn create_blas(&self, _desc: &BlasDesc<'_>) -> Result<Self::Blas, GpuError>
fn create_blas(&self, _desc: &BlasDesc<'_>) -> Result<Self::Blas, GpuError>
Allocates a BLAS with fixed geometry ceilings.
§Errors
Returns capability, size or backend allocation failures.
Sourcefn create_tlas(&self, _desc: &TlasDesc) -> Result<Self::Tlas, GpuError>
fn create_tlas(&self, _desc: &TlasDesc) -> Result<Self::Tlas, GpuError>
Allocates a TLAS with a fixed instance ceiling.
§Errors
Returns capability, size or backend allocation failures.
Sourcefn set_tlas_instance(
&self,
_tlas: &mut Self::Tlas,
_index: u32,
_instance: Option<TlasInstance<'_, Self>>,
) -> Result<(), GpuError>
fn set_tlas_instance( &self, _tlas: &mut Self::Tlas, _index: u32, _instance: Option<TlasInstance<'_, Self>>, ) -> Result<(), GpuError>
Replaces or clears one TLAS instance.
§Errors
Returns a capability error or an out-of-range instance failure.
Sourcefn create_ray_query_bind_group_layout(
&self,
_desc: &RayQueryBindGroupLayoutDesc<'_>,
) -> Result<Self::BindGroupLayout, GpuError>
fn create_ray_query_bind_group_layout( &self, _desc: &RayQueryBindGroupLayoutDesc<'_>, ) -> Result<Self::BindGroupLayout, GpuError>
Creates a layout containing acceleration-structure slots.
§Errors
Returns a capability or backend layout failure.
Sourcefn create_ray_query_bind_group(
&self,
_desc: &RayQueryBindGroupDesc<'_, Self>,
) -> Result<Self::BindGroup, GpuError>
fn create_ray_query_bind_group( &self, _desc: &RayQueryBindGroupDesc<'_, Self>, ) -> Result<Self::BindGroup, GpuError>
Creates a bind group containing TLAS resources.
§Errors
Returns a capability or backend binding failure.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".