pub trait Device: WasmNotSendSync {
type A: Api;
Show 39 methods
// Required methods
unsafe fn exit(self, queue: <Self::A as Api>::Queue);
unsafe fn create_buffer(
&self,
desc: &BufferDescriptor<'_>
) -> Result<<Self::A as Api>::Buffer, DeviceError>;
unsafe fn destroy_buffer(&self, buffer: <Self::A as Api>::Buffer);
unsafe fn map_buffer(
&self,
buffer: &<Self::A as Api>::Buffer,
range: MemoryRange
) -> Result<BufferMapping, DeviceError>;
unsafe fn unmap_buffer(
&self,
buffer: &<Self::A as Api>::Buffer
) -> Result<(), DeviceError>;
unsafe fn flush_mapped_ranges<I>(
&self,
buffer: &<Self::A as Api>::Buffer,
ranges: I
)
where I: Iterator<Item = MemoryRange>;
unsafe fn invalidate_mapped_ranges<I>(
&self,
buffer: &<Self::A as Api>::Buffer,
ranges: I
)
where I: Iterator<Item = MemoryRange>;
unsafe fn create_texture(
&self,
desc: &TextureDescriptor<'_>
) -> Result<<Self::A as Api>::Texture, DeviceError>;
unsafe fn destroy_texture(&self, texture: <Self::A as Api>::Texture);
unsafe fn create_texture_view(
&self,
texture: &<Self::A as Api>::Texture,
desc: &TextureViewDescriptor<'_>
) -> Result<<Self::A as Api>::TextureView, DeviceError>;
unsafe fn destroy_texture_view(&self, view: <Self::A as Api>::TextureView);
unsafe fn create_sampler(
&self,
desc: &SamplerDescriptor<'_>
) -> Result<<Self::A as Api>::Sampler, DeviceError>;
unsafe fn destroy_sampler(&self, sampler: <Self::A as Api>::Sampler);
unsafe fn create_command_encoder(
&self,
desc: &CommandEncoderDescriptor<'_, Self::A>
) -> Result<<Self::A as Api>::CommandEncoder, DeviceError>;
unsafe fn destroy_command_encoder(
&self,
pool: <Self::A as Api>::CommandEncoder
);
unsafe fn create_bind_group_layout(
&self,
desc: &BindGroupLayoutDescriptor<'_>
) -> Result<<Self::A as Api>::BindGroupLayout, DeviceError>;
unsafe fn destroy_bind_group_layout(
&self,
bg_layout: <Self::A as Api>::BindGroupLayout
);
unsafe fn create_pipeline_layout(
&self,
desc: &PipelineLayoutDescriptor<'_, Self::A>
) -> Result<<Self::A as Api>::PipelineLayout, DeviceError>;
unsafe fn destroy_pipeline_layout(
&self,
pipeline_layout: <Self::A as Api>::PipelineLayout
);
unsafe fn create_bind_group(
&self,
desc: &BindGroupDescriptor<'_, Self::A>
) -> Result<<Self::A as Api>::BindGroup, DeviceError>;
unsafe fn destroy_bind_group(&self, group: <Self::A as Api>::BindGroup);
unsafe fn create_shader_module(
&self,
desc: &ShaderModuleDescriptor<'_>,
shader: ShaderInput<'_>
) -> Result<<Self::A as Api>::ShaderModule, ShaderError>;
unsafe fn destroy_shader_module(
&self,
module: <Self::A as Api>::ShaderModule
);
unsafe fn create_render_pipeline(
&self,
desc: &RenderPipelineDescriptor<'_, Self::A>
) -> Result<<Self::A as Api>::RenderPipeline, PipelineError>;
unsafe fn destroy_render_pipeline(
&self,
pipeline: <Self::A as Api>::RenderPipeline
);
unsafe fn create_compute_pipeline(
&self,
desc: &ComputePipelineDescriptor<'_, Self::A>
) -> Result<<Self::A as Api>::ComputePipeline, PipelineError>;
unsafe fn destroy_compute_pipeline(
&self,
pipeline: <Self::A as Api>::ComputePipeline
);
unsafe fn create_query_set(
&self,
desc: &QuerySetDescriptor<Label<'_>>
) -> Result<<Self::A as Api>::QuerySet, DeviceError>;
unsafe fn destroy_query_set(&self, set: <Self::A as Api>::QuerySet);
unsafe fn create_fence(
&self
) -> Result<<Self::A as Api>::Fence, DeviceError>;
unsafe fn destroy_fence(&self, fence: <Self::A as Api>::Fence);
unsafe fn get_fence_value(
&self,
fence: &<Self::A as Api>::Fence
) -> Result<FenceValue, DeviceError>;
unsafe fn wait(
&self,
fence: &<Self::A as Api>::Fence,
value: FenceValue,
timeout_ms: u32
) -> Result<bool, DeviceError>;
unsafe fn start_capture(&self) -> bool;
unsafe fn stop_capture(&self);
unsafe fn create_acceleration_structure(
&self,
desc: &AccelerationStructureDescriptor<'_>
) -> Result<<Self::A as Api>::AccelerationStructure, DeviceError>;
unsafe fn get_acceleration_structure_build_sizes(
&self,
desc: &GetAccelerationStructureBuildSizesDescriptor<'_, Self::A>
) -> AccelerationStructureBuildSizes;
unsafe fn get_acceleration_structure_device_address(
&self,
acceleration_structure: &<Self::A as Api>::AccelerationStructure
) -> BufferAddress;
unsafe fn destroy_acceleration_structure(
&self,
acceleration_structure: <Self::A as Api>::AccelerationStructure
);
}Required Associated Types§
Required Methods§
sourceunsafe fn create_buffer(
&self,
desc: &BufferDescriptor<'_>
) -> Result<<Self::A as Api>::Buffer, DeviceError>
unsafe fn create_buffer( &self, desc: &BufferDescriptor<'_> ) -> Result<<Self::A as Api>::Buffer, DeviceError>
Creates a new buffer.
The initial usage is BufferUses::empty().
unsafe fn destroy_buffer(&self, buffer: <Self::A as Api>::Buffer)
unsafe fn map_buffer( &self, buffer: &<Self::A as Api>::Buffer, range: MemoryRange ) -> Result<BufferMapping, DeviceError>
unsafe fn unmap_buffer( &self, buffer: &<Self::A as Api>::Buffer ) -> Result<(), DeviceError>
unsafe fn flush_mapped_ranges<I>(
&self,
buffer: &<Self::A as Api>::Buffer,
ranges: I
)where
I: Iterator<Item = MemoryRange>,
unsafe fn invalidate_mapped_ranges<I>(
&self,
buffer: &<Self::A as Api>::Buffer,
ranges: I
)where
I: Iterator<Item = MemoryRange>,
sourceunsafe fn create_texture(
&self,
desc: &TextureDescriptor<'_>
) -> Result<<Self::A as Api>::Texture, DeviceError>
unsafe fn create_texture( &self, desc: &TextureDescriptor<'_> ) -> Result<<Self::A as Api>::Texture, DeviceError>
Creates a new texture.
The initial usage for all subresources is TextureUses::UNINITIALIZED.
unsafe fn destroy_texture(&self, texture: <Self::A as Api>::Texture)
unsafe fn create_texture_view( &self, texture: &<Self::A as Api>::Texture, desc: &TextureViewDescriptor<'_> ) -> Result<<Self::A as Api>::TextureView, DeviceError>
unsafe fn destroy_texture_view(&self, view: <Self::A as Api>::TextureView)
unsafe fn create_sampler( &self, desc: &SamplerDescriptor<'_> ) -> Result<<Self::A as Api>::Sampler, DeviceError>
unsafe fn destroy_sampler(&self, sampler: <Self::A as Api>::Sampler)
sourceunsafe fn create_command_encoder(
&self,
desc: &CommandEncoderDescriptor<'_, Self::A>
) -> Result<<Self::A as Api>::CommandEncoder, DeviceError>
unsafe fn create_command_encoder( &self, desc: &CommandEncoderDescriptor<'_, Self::A> ) -> Result<<Self::A as Api>::CommandEncoder, DeviceError>
Create a fresh CommandEncoder.
The new CommandEncoder is in the “closed” state.
unsafe fn destroy_command_encoder(&self, pool: <Self::A as Api>::CommandEncoder)
sourceunsafe fn create_bind_group_layout(
&self,
desc: &BindGroupLayoutDescriptor<'_>
) -> Result<<Self::A as Api>::BindGroupLayout, DeviceError>
unsafe fn create_bind_group_layout( &self, desc: &BindGroupLayoutDescriptor<'_> ) -> Result<<Self::A as Api>::BindGroupLayout, DeviceError>
Creates a bind group layout.
unsafe fn destroy_bind_group_layout( &self, bg_layout: <Self::A as Api>::BindGroupLayout )
unsafe fn create_pipeline_layout( &self, desc: &PipelineLayoutDescriptor<'_, Self::A> ) -> Result<<Self::A as Api>::PipelineLayout, DeviceError>
unsafe fn destroy_pipeline_layout( &self, pipeline_layout: <Self::A as Api>::PipelineLayout )
unsafe fn create_bind_group( &self, desc: &BindGroupDescriptor<'_, Self::A> ) -> Result<<Self::A as Api>::BindGroup, DeviceError>
unsafe fn destroy_bind_group(&self, group: <Self::A as Api>::BindGroup)
unsafe fn create_shader_module( &self, desc: &ShaderModuleDescriptor<'_>, shader: ShaderInput<'_> ) -> Result<<Self::A as Api>::ShaderModule, ShaderError>
unsafe fn destroy_shader_module(&self, module: <Self::A as Api>::ShaderModule)
unsafe fn create_render_pipeline( &self, desc: &RenderPipelineDescriptor<'_, Self::A> ) -> Result<<Self::A as Api>::RenderPipeline, PipelineError>
unsafe fn destroy_render_pipeline( &self, pipeline: <Self::A as Api>::RenderPipeline )
unsafe fn create_compute_pipeline( &self, desc: &ComputePipelineDescriptor<'_, Self::A> ) -> Result<<Self::A as Api>::ComputePipeline, PipelineError>
unsafe fn destroy_compute_pipeline( &self, pipeline: <Self::A as Api>::ComputePipeline )
unsafe fn create_query_set( &self, desc: &QuerySetDescriptor<Label<'_>> ) -> Result<<Self::A as Api>::QuerySet, DeviceError>
unsafe fn destroy_query_set(&self, set: <Self::A as Api>::QuerySet)
unsafe fn create_fence(&self) -> Result<<Self::A as Api>::Fence, DeviceError>
unsafe fn destroy_fence(&self, fence: <Self::A as Api>::Fence)
unsafe fn get_fence_value( &self, fence: &<Self::A as Api>::Fence ) -> Result<FenceValue, DeviceError>
sourceunsafe fn wait(
&self,
fence: &<Self::A as Api>::Fence,
value: FenceValue,
timeout_ms: u32
) -> Result<bool, DeviceError>
unsafe fn wait( &self, fence: &<Self::A as Api>::Fence, value: FenceValue, timeout_ms: u32 ) -> Result<bool, DeviceError>
Wait for fence to reach value.
Operations like Queue::submit can accept a Fence and a
FenceValue to store in it, so you can use this wait function
to wait for a given queue submission to finish execution.
The value argument must be a value that some actual operation you have
already presented to the device is going to store in fence. You cannot
wait for values yet to be submitted. (This restriction accommodates
implementations like the vulkan backend’s FencePool that must
allocate a distinct synchronization object for each fence value one is
able to wait for.)
Calling wait with a lower FenceValue than fence’s current value
returns immediately.