Struct wgpu::core::device::Device

pub struct Device<A>
where A: HalApi,
{ /* private fields */ }
Available on wgpu_core only.
Expand description

Structure describing a logical device. Some members are internally mutable, stored behind mutexes.

TODO: establish clear order of locking for these: life_tracker, trackers, render_passes, pending_writes, trace.

Currently, the rules are:

  1. life_tracker is locked after hub.devices, enforced by the type system
  2. self.trackers is locked last (unenforced)
  3. self.trace is locked last (unenforced)

Right now avoid locking twice same resource or registry in a call execution and minimize the locking to the minimum scope possible Unless otherwise specified, no lock may be acquired while holding another lock. This means that you must inspect function calls made while a lock is held to see what locks the callee may try to acquire.

As far as this point: device_maintain_ids locks Device::lifetime_tracker, and calls… triage_suspected locks Device::trackers, and calls… Registry::unregister locks Registry::storage

Important: When locking pending_writes please check that trackers is not locked trackers should be locked only when needed for the shortest time possible

Implementations§

§

impl<A> Device<A>
where A: HalApi,

pub fn is_valid(&self) -> bool

pub fn get_queue(&self) -> Option<Arc<Queue<A>>>

pub fn set_queue(&self, queue: Arc<Queue<A>>)

pub fn create_buffer_from_hal( self: &Arc<Device<A>>, hal_buffer: <A as Api>::Buffer, desc: &BufferDescriptor<Option<Cow<'_, str>>> ) -> Buffer<A>

pub fn create_validator( self: &Arc<Device<A>>, flags: ValidationFlags ) -> Validator

Create a validator with the given validation flags.

Trait Implementations§

§

impl<A> Debug for Device<A>
where A: HalApi,

§

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

Formats the value using the given formatter. Read more
§

impl<A> Drop for Device<A>
where A: HalApi,

§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<A> !RefUnwindSafe for Device<A>

§

impl<A> Send for Device<A>

§

impl<A> Sync for Device<A>

§

impl<A> Unpin for Device<A>
where A: Unpin, <A as Api>::Buffer: Unpin, <A as Api>::CommandBuffer: Unpin, <A as Api>::CommandEncoder: Unpin, <A as Api>::Device: Unpin, <A as Api>::Fence: Unpin, <A as Api>::Queue: Unpin,

§

impl<A> !UnwindSafe for Device<A>

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>

source§

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

source§

impl<T> WasmNotSendSync for T

source§

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