Device

Struct Device 

Source
pub struct Device {
    mem_allocator: Mutex<Allocator>,
    desc_allocator: Mutex<DescriptorAllocator<DescriptorPool, DescriptorSet>>,
    valid_ash_memory_types: u32,
    naga_options: Options<'static>,
    render_doc: RenderDoc,
    counters: Arc<HalCounters>,
    shared: Arc<DeviceShared>,
}
Available on vulkan only.

Fields§

§mem_allocator: Mutex<Allocator>§desc_allocator: Mutex<DescriptorAllocator<DescriptorPool, DescriptorSet>>§valid_ash_memory_types: u32§naga_options: Options<'static>§render_doc: RenderDoc
Available on crate feature renderdoc only.
§counters: Arc<HalCounters>§shared: Arc<DeviceShared>

Implementations§

Source§

impl Device

Source

pub unsafe fn texture_from_raw( &self, vk_image: Image, desc: &TextureDescriptor<'_>, drop_callback: Option<DropCallback>, memory: TextureMemory, ) -> Texture

§Safety
  • vk_image must be created respecting desc
  • If drop_callback is None, wgpu-hal will take ownership of vk_image. If drop_callback is Some, vk_image must be valid until the callback is called.
  • If the ImageCreateFlags does not contain MUTABLE_FORMAT, the view_formats of desc must be empty.
  • If memory is not super::TextureMemory::External, wgpu-hal will take ownership of the memory (which is presumed to back vk_image). Otherwise, the memory must remain valid until drop_callback is called.
Source

fn find_memory_type_index( &self, type_bits_req: u32, flags_req: MemoryPropertyFlags, ) -> Option<usize>

Source

fn create_image_without_memory( &self, desc: &TextureDescriptor<'_>, external_memory_image_create_info: Option<&mut ExternalMemoryImageCreateInfo<'_>>, ) -> Result<ImageWithoutMemory, DeviceError>

Source

fn create_image_without_memory_with_tiling( &self, desc: &TextureDescriptor<'_>, tiling: ImageTiling, external_memory_image_create_info: Option<&mut ExternalMemoryImageCreateInfo<'_>>, drm_modifier_info: Option<&mut ImageDrmFormatModifierExplicitCreateInfoEXT<'_>>, ) -> Result<ImageWithoutMemory, DeviceError>

Source

pub unsafe fn texture_from_dmabuf_fd( &self, fd: OwnedFd, desc: &TextureDescriptor<'_>, drm_modifier: u64, stride: u64, offset: u64, ) -> Result<Texture, DeviceError>

Available on Unix only.

Import a DMA-buf as a texture. Currently only supports single-plane DMA-bufs.

§Safety
  • Requires VULKAN_EXTERNAL_MEMORY_DMA_BUF feature (implies VK_EXT_external_memory_dma_buf and VK_EXT_image_drm_format_modifier)
  • The fd must be a valid DMA-buf file descriptor matching desc
  • On success, Vulkan takes ownership of the file descriptor. On failure, the file descriptor is closed.
  • The drm_modifier, stride, and offset must match the DMA-buf layout
Source

fn import_dmabuf_memory( &self, external_memory_fd_fn: &Device, fd_raw: i32, image: Image, requirements: &MemoryRequirements, ) -> Result<DeviceMemory, DeviceError>

Available on Unix only.

Import DMA-buf memory and bind it to the image.

On failure, the raw fd is closed (if not yet consumed by Vulkan) and the caller is responsible for destroying the VkImage.

Source

fn create_shader_module_impl( &self, spv: &[u32], label: &Label<'_>, ) -> Result<ShaderModule, DeviceError>

Source

fn compile_stage( &self, stage: &ProgrammableStage<'_, ShaderModule>, naga_stage: ShaderStage, binding_map: &BindingMap, ) -> Result<CompiledStage, PipelineError>

Source

pub fn queue_family_index(&self) -> u32

Returns the queue family index of the device’s internal queue.

This is useful for constructing memory barriers needed for queue family ownership transfer when external memory is involved (from/to VK_QUEUE_FAMILY_EXTERNAL_KHR and VK_QUEUE_FAMILY_FOREIGN_EXT for example).

Source

pub fn queue_index(&self) -> u32

Source

pub fn raw_device(&self) -> &Device

Source

pub fn raw_physical_device(&self) -> PhysicalDevice

Source

pub fn raw_queue(&self) -> Queue

Source

pub fn enabled_device_extensions(&self) -> &[&'static CStr]

Source

pub fn shared_instance(&self) -> &InstanceShared

Source

fn error_if_would_oom_on_resource_allocation( &self, needs_host_access: bool, size: u64, ) -> Result<(), DeviceError>

Trait Implementations§

Source§

impl Device for Device

Source§

type A = Api

Source§

unsafe fn create_buffer( &self, desc: &BufferDescriptor<'_>, ) -> Result<Buffer, DeviceError>

Creates a new buffer. Read more
Source§

unsafe fn destroy_buffer(&self, buffer: Buffer)

Free buffer and any GPU resources it owns. Read more
Source§

unsafe fn add_raw_buffer(&self, _buffer: &Buffer)

A hook for when a wgpu-core buffer is created from a raw wgpu-hal buffer.
Source§

unsafe fn map_buffer( &self, buffer: &Buffer, range: MemoryRange, ) -> Result<BufferMapping, DeviceError>

Return a pointer to CPU memory mapping the contents of buffer. Read more
Source§

unsafe fn unmap_buffer(&self, buffer: &Buffer)

Remove the mapping established by the last call to Device::map_buffer. Read more
Source§

unsafe fn flush_mapped_ranges<I>(&self, buffer: &Buffer, ranges: I)
where I: Iterator<Item = MemoryRange>,

Indicate that CPU writes to mapped buffer memory should be made visible to the GPU. Read more
Source§

unsafe fn invalidate_mapped_ranges<I>(&self, buffer: &Buffer, ranges: I)
where I: Iterator<Item = MemoryRange>,

Indicate that GPU writes to mapped buffer memory should be made visible to the CPU. Read more
Source§

unsafe fn create_texture( &self, desc: &TextureDescriptor<'_>, ) -> Result<Texture, DeviceError>

Creates a new texture. Read more
Source§

unsafe fn destroy_texture(&self, texture: Texture)

Source§

unsafe fn add_raw_texture(&self, _texture: &Texture)

A hook for when a wgpu-core texture is created from a raw wgpu-hal texture.
Source§

unsafe fn create_texture_view( &self, texture: &Texture, desc: &TextureViewDescriptor<'_>, ) -> Result<TextureView, DeviceError>

Source§

unsafe fn destroy_texture_view(&self, view: TextureView)

Source§

unsafe fn create_sampler( &self, desc: &SamplerDescriptor<'_>, ) -> Result<Sampler, DeviceError>

Source§

unsafe fn destroy_sampler(&self, sampler: Sampler)

Source§

unsafe fn create_command_encoder( &self, desc: &CommandEncoderDescriptor<'_, Queue>, ) -> Result<CommandEncoder, DeviceError>

Create a fresh CommandEncoder. Read more
Source§

unsafe fn create_bind_group_layout( &self, desc: &BindGroupLayoutDescriptor<'_>, ) -> Result<BindGroupLayout, DeviceError>

Creates a bind group layout.
Source§

unsafe fn destroy_bind_group_layout(&self, bg_layout: BindGroupLayout)

Source§

unsafe fn create_pipeline_layout( &self, desc: &PipelineLayoutDescriptor<'_, BindGroupLayout>, ) -> Result<PipelineLayout, DeviceError>

Source§

unsafe fn destroy_pipeline_layout(&self, pipeline_layout: PipelineLayout)

Source§

unsafe fn create_bind_group( &self, desc: &BindGroupDescriptor<'_, BindGroupLayout, Buffer, Sampler, TextureView, AccelerationStructure>, ) -> Result<BindGroup, DeviceError>

Source§

unsafe fn destroy_bind_group(&self, group: BindGroup)

Source§

unsafe fn create_shader_module( &self, desc: &ShaderModuleDescriptor<'_>, shader: ShaderInput<'_>, ) -> Result<ShaderModule, ShaderError>

Source§

unsafe fn destroy_shader_module(&self, module: ShaderModule)

Source§

unsafe fn create_render_pipeline( &self, desc: &RenderPipelineDescriptor<'_, PipelineLayout, ShaderModule, PipelineCache>, ) -> Result<RenderPipeline, PipelineError>

Source§

unsafe fn destroy_render_pipeline(&self, pipeline: RenderPipeline)

Source§

unsafe fn create_compute_pipeline( &self, desc: &ComputePipelineDescriptor<'_, PipelineLayout, ShaderModule, PipelineCache>, ) -> Result<ComputePipeline, PipelineError>

Source§

unsafe fn destroy_compute_pipeline(&self, pipeline: ComputePipeline)

Source§

unsafe fn create_pipeline_cache( &self, desc: &PipelineCacheDescriptor<'_>, ) -> Result<PipelineCache, PipelineCacheError>

Source§

fn pipeline_cache_validation_key(&self) -> Option<[u8; 16]>

Source§

unsafe fn destroy_pipeline_cache(&self, cache: PipelineCache)

Source§

unsafe fn create_query_set( &self, desc: &QuerySetDescriptor<Label<'_>>, ) -> Result<QuerySet, DeviceError>

Source§

unsafe fn destroy_query_set(&self, set: QuerySet)

Source§

unsafe fn create_fence(&self) -> Result<Fence, DeviceError>

Source§

unsafe fn destroy_fence(&self, fence: Fence)

Source§

unsafe fn get_fence_value( &self, fence: &Fence, ) -> Result<FenceValue, DeviceError>

Source§

unsafe fn wait( &self, fence: &Fence, wait_value: FenceValue, timeout: Option<Duration>, ) -> Result<bool, DeviceError>

Wait for fence to reach value. Read more
Source§

unsafe fn start_graphics_debugger_capture(&self) -> bool

Start a graphics debugger capture. Read more
Source§

unsafe fn stop_graphics_debugger_capture(&self)

Stop a graphics debugger capture. Read more
Source§

unsafe fn pipeline_cache_get_data( &self, cache: &PipelineCache, ) -> Option<Vec<u8>>

Source§

unsafe fn get_acceleration_structure_build_sizes<'a>( &self, desc: &GetAccelerationStructureBuildSizesDescriptor<'a, Buffer>, ) -> AccelerationStructureBuildSizes

Source§

unsafe fn get_acceleration_structure_device_address( &self, acceleration_structure: &AccelerationStructure, ) -> BufferAddress

Source§

unsafe fn create_acceleration_structure( &self, desc: &AccelerationStructureDescriptor<'_>, ) -> Result<AccelerationStructure, DeviceError>

Source§

unsafe fn destroy_acceleration_structure( &self, acceleration_structure: AccelerationStructure, )

Source§

fn get_internal_counters(&self) -> HalCounters

Source§

fn generate_allocator_report(&self) -> Option<AllocatorReport>

Source§

fn tlas_instance_to_bytes(&self, instance: TlasInstance) -> Vec<u8>

Source§

fn check_if_oom(&self) -> Result<(), DeviceError>

Source§

impl Drop for Device

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl DynResource for Device

Source§

fn as_any(&self) -> &dyn Any

Source§

fn as_any_mut(&mut self) -> &mut dyn Any

Auto Trait Implementations§

§

impl !Freeze for Device

§

impl !RefUnwindSafe for Device

§

impl Send for Device

§

impl Sync for Device

§

impl Unpin for Device

§

impl !UnwindSafe for Device

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<D> DynDevice for D
where D: Device + DynResource,

Source§

unsafe fn create_buffer( &self, desc: &BufferDescriptor<'_>, ) -> Result<Box<dyn DynBuffer>, DeviceError>

Source§

unsafe fn destroy_buffer(&self, buffer: Box<dyn DynBuffer>)

Source§

unsafe fn add_raw_buffer(&self, buffer: &(dyn DynBuffer + 'static))

Source§

unsafe fn map_buffer( &self, buffer: &(dyn DynBuffer + 'static), range: Range<u64>, ) -> Result<BufferMapping, DeviceError>

Source§

unsafe fn unmap_buffer(&self, buffer: &(dyn DynBuffer + 'static))

Source§

unsafe fn flush_mapped_ranges( &self, buffer: &(dyn DynBuffer + 'static), ranges: &[Range<u64>], )

Source§

unsafe fn invalidate_mapped_ranges( &self, buffer: &(dyn DynBuffer + 'static), ranges: &[Range<u64>], )

Source§

unsafe fn create_texture( &self, desc: &TextureDescriptor<'_>, ) -> Result<Box<dyn DynTexture>, DeviceError>

Source§

unsafe fn destroy_texture(&self, texture: Box<dyn DynTexture>)

Source§

unsafe fn add_raw_texture(&self, texture: &(dyn DynTexture + 'static))

Source§

unsafe fn create_texture_view( &self, texture: &(dyn DynTexture + 'static), desc: &TextureViewDescriptor<'_>, ) -> Result<Box<dyn DynTextureView>, DeviceError>

Source§

unsafe fn destroy_texture_view(&self, view: Box<dyn DynTextureView>)

Source§

unsafe fn create_sampler( &self, desc: &SamplerDescriptor<'_>, ) -> Result<Box<dyn DynSampler>, DeviceError>

Source§

unsafe fn destroy_sampler(&self, sampler: Box<dyn DynSampler>)

Source§

unsafe fn create_command_encoder( &self, desc: &CommandEncoderDescriptor<'_, dyn DynQueue>, ) -> Result<Box<dyn DynCommandEncoder>, DeviceError>

Source§

unsafe fn create_bind_group_layout( &self, desc: &BindGroupLayoutDescriptor<'_>, ) -> Result<Box<dyn DynBindGroupLayout>, DeviceError>

Source§

unsafe fn destroy_bind_group_layout( &self, bg_layout: Box<dyn DynBindGroupLayout>, )

Source§

unsafe fn create_pipeline_layout( &self, desc: &PipelineLayoutDescriptor<'_, dyn DynBindGroupLayout>, ) -> Result<Box<dyn DynPipelineLayout>, DeviceError>

Source§

unsafe fn destroy_pipeline_layout( &self, pipeline_layout: Box<dyn DynPipelineLayout>, )

Source§

unsafe fn create_bind_group( &self, desc: &BindGroupDescriptor<'_, dyn DynBindGroupLayout, dyn DynBuffer, dyn DynSampler, dyn DynTextureView, dyn DynAccelerationStructure>, ) -> Result<Box<dyn DynBindGroup>, DeviceError>

Source§

unsafe fn destroy_bind_group(&self, group: Box<dyn DynBindGroup>)

Source§

unsafe fn create_shader_module( &self, desc: &ShaderModuleDescriptor<'_>, shader: ShaderInput<'_>, ) -> Result<Box<dyn DynShaderModule>, ShaderError>

Source§

unsafe fn destroy_shader_module(&self, module: Box<dyn DynShaderModule>)

Source§

unsafe fn create_render_pipeline( &self, desc: &RenderPipelineDescriptor<'_, dyn DynPipelineLayout, dyn DynShaderModule, dyn DynPipelineCache>, ) -> Result<Box<dyn DynRenderPipeline>, PipelineError>

Source§

unsafe fn destroy_render_pipeline(&self, pipeline: Box<dyn DynRenderPipeline>)

Source§

unsafe fn create_compute_pipeline( &self, desc: &ComputePipelineDescriptor<'_, dyn DynPipelineLayout, dyn DynShaderModule, dyn DynPipelineCache>, ) -> Result<Box<dyn DynComputePipeline>, PipelineError>

Source§

unsafe fn destroy_compute_pipeline(&self, pipeline: Box<dyn DynComputePipeline>)

Source§

unsafe fn create_pipeline_cache( &self, desc: &PipelineCacheDescriptor<'_>, ) -> Result<Box<dyn DynPipelineCache>, PipelineCacheError>

Source§

fn pipeline_cache_validation_key(&self) -> Option<[u8; 16]>

Source§

unsafe fn destroy_pipeline_cache( &self, pipeline_cache: Box<dyn DynPipelineCache>, )

Source§

unsafe fn create_query_set( &self, desc: &QuerySetDescriptor<Option<&str>>, ) -> Result<Box<dyn DynQuerySet>, DeviceError>

Source§

unsafe fn destroy_query_set(&self, query_set: Box<dyn DynQuerySet>)

Source§

unsafe fn create_fence(&self) -> Result<Box<dyn DynFence>, DeviceError>

Source§

unsafe fn destroy_fence(&self, fence: Box<dyn DynFence>)

Source§

unsafe fn get_fence_value( &self, fence: &(dyn DynFence + 'static), ) -> Result<u64, DeviceError>

Source§

unsafe fn wait( &self, fence: &(dyn DynFence + 'static), value: u64, timeout: Option<Duration>, ) -> Result<bool, DeviceError>

Source§

unsafe fn start_graphics_debugger_capture(&self) -> bool

Source§

unsafe fn stop_graphics_debugger_capture(&self)

Source§

unsafe fn pipeline_cache_get_data( &self, cache: &(dyn DynPipelineCache + 'static), ) -> Option<Vec<u8>>

Source§

unsafe fn create_acceleration_structure( &self, desc: &AccelerationStructureDescriptor<'_>, ) -> Result<Box<dyn DynAccelerationStructure>, DeviceError>

Source§

unsafe fn get_acceleration_structure_build_sizes( &self, desc: &GetAccelerationStructureBuildSizesDescriptor<'_, dyn DynBuffer>, ) -> AccelerationStructureBuildSizes

Source§

unsafe fn get_acceleration_structure_device_address( &self, acceleration_structure: &(dyn DynAccelerationStructure + 'static), ) -> u64

Source§

unsafe fn destroy_acceleration_structure( &self, acceleration_structure: Box<dyn DynAccelerationStructure>, )

Source§

fn tlas_instance_to_bytes(&self, instance: TlasInstance) -> Vec<u8>

Source§

fn get_internal_counters(&self) -> HalCounters

Source§

fn generate_allocator_report(&self) -> Option<AllocatorReport>

Source§

fn check_if_oom(&self) -> Result<(), DeviceError>

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

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

Source§

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>,

Source§

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>

Source§

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

Source§

impl<T> WasmNotSendSync for T

Source§

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