Skip to main content

GpuContext

Struct GpuContext 

Source
pub struct GpuContext {
    pub device: Device,
    pub queue: Queue,
    pub target_format: TextureFormat,
    pub faults: FaultSink,
    /* private fields */
}
Expand description

GPU handles that a host passes to the engines, with the sink for errors no scope catches.

A clone is cheap, and shares the fault sink and the record of a lost device.

Fields§

§device: Device

Device every model builds on.

§queue: Queue

Queue the engine submits its work to.

§target_format: TextureFormat

Colour format of the target a display pipeline renders into.

A model builds its display render pipeline once, at construction, and a pipeline is tied to its colour target format.

§faults: FaultSink

Sink for errors that nothing else caught. See GpuContext::new.

Implementations§

Source§

impl GpuContext

Source

pub fn new( device: Device, queue: Queue, target_format: TextureFormat, faults: FaultSink, ) -> Self

Creates a context over device and queue, and takes over the device’s error handling. Left to wgpu, every error is fatal.

Errors raised inside a fault::catching_on go to that scope. Everything else, including egui’s own rendering on the same device, is stored in faults for the host to pick up. On the web this is the only route. fault::catching_on pushes no scopes there.

A GPUInternalError still ends the web build. wgpu converts an error with Error::from_js. Anything other than a GPUValidationError or a GPUOutOfMemoryError panics there. A model provokes those two, and the handler reports them normally.

The context also records the loss of the device. Self::is_lost reports it.

Note that a second new on the same device takes over the error handler from the first context, and on native targets the lost callback too. From then on only the newest context receives the device’s unscoped errors, and on native targets its loss. In a browser every context on the device records the loss. A clone shares the fault sink and the loss record with the context it came from.

The context carries no RuntimeInfo. A host that passes its context to a sweep attaches one with .with_runtime_info(RuntimeInfo::collect(&adapter, &device)). Without it the sweep’s manifest records no adapter.

Source

pub fn with_runtime_info(self, info: RuntimeInfo) -> Self

Returns the context with info attached, as Self::runtime_info reads it back.

Source

pub fn runtime_info(&self) -> Option<&RuntimeInfo>

Facts about the host and the adapter, None when nothing attached them.

Source

pub fn is_lost(&self) -> bool

Returns whether the device is lost. A lost device runs no more work.

Note that a destroyed device counts as lost once a poll finds its queue empty.

Trait Implementations§

Source§

impl Clone for GpuContext

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for GpuContext

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast<T> for T

Source§

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

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

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

Source§

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

Source§

impl<T> WasmNotSendSync for T

Source§

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

Source§

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