Struct wgpu::Instance

source ·
pub struct Instance { /* private fields */ }
Expand description

Context for all other wgpu objects. Instance of wgpu.

This is the first thing you create when using wgpu. Its primary use is to create Adapters and Surfaces.

Does not have to be kept alive.

Corresponds to WebGPU GPU.

Implementations§

source§

impl Instance

source

pub const fn enabled_backend_features() -> Backends

Returns which backends can be picked for the current build configuration.

The returned set depends on a combination of target platform and enabled features. This does not do any runtime checks and is exclusively based on compile time information.

InstanceDescriptor::backends does not need to be a subset of this, but any backend that is not in this set, will not be picked.

TODO: Right now it’s otherwise not possible yet to opt-out of all features on some platforms. See https://github.com/gfx-rs/wgpu/issues/3514

  • Windows/Linux/Android: always enables Vulkan and GLES with no way to opt out
source

pub fn new(_instance_desc: InstanceDescriptor) -> Self

Create an new instance of wgpu.

Arguments
  • instance_desc - Has fields for which backends wgpu will choose during instantiation, and which DX12 shader compiler wgpu will use.

    Backends::BROWSER_WEBGPU takes a special role: If it is set and a navigator.gpu object is present, this instance will only be able to create WebGPU adapters.

    ⚠️ On some browsers this check is insufficient to determine whether WebGPU is supported, as the browser may define the navigator.gpu object, but be unable to create any WebGPU adapters. For targeting both WebGPU & WebGL is recommended to use crate::util::new_instance_with_webgpu_detection.

    If you instead want to force use of WebGL, either disable the webgpu compile-time feature or don’t add the Backends::BROWSER_WEBGPU flag to the the instance_desc’s backends field. If it is set and WebGPU support is not detected, the instance will use wgpu-core to create adapters. Meaning that if the webgl feature is enabled, it is able to create a WebGL adapter.

Panics

If no backend feature for the active target platform is enabled, this method will panic, see Instance::enabled_backend_features().

source

pub unsafe fn from_hal<A: HalApi>(hal_instance: A::Instance) -> Self

Available on wgpu_core only.

Create an new instance of wgpu from a wgpu-hal instance.

Arguments
  • hal_instance - wgpu-hal instance.
Safety

Refer to the creation of wgpu-hal Instance for every backend.

source

pub unsafe fn as_hal<A: HalApi>(&self) -> Option<&A::Instance>

Available on wgpu_core only.

Return a reference to a specific backend instance, if available.

If this Instance has a wgpu-hal Instance for backend A, return a reference to it. Otherwise, return None.

Safety
  • The raw instance handle returned must not be manually destroyed.
source

pub unsafe fn from_core(core_instance: Instance) -> Self

Available on wgpu_core only.

Create an new instance of wgpu from a wgpu-core instance.

Arguments
  • core_instance - wgpu-core instance.
Safety

Refer to the creation of wgpu-core Instance.

source

pub fn enumerate_adapters(&self, backends: Backends) -> Vec<Adapter>

Available on native only.

Retrieves all available Adapters that match the given Backends.

Arguments
  • backends - Backends from which to enumerate adapters.
source

pub fn request_adapter( &self, options: &RequestAdapterOptions<'_, '_> ) -> impl Future<Output = Option<Adapter>> + WasmNotSend

Retrieves an Adapter which matches the given RequestAdapterOptions.

Some options are “soft”, so treated as non-mandatory. Others are “hard”.

If no adapters are found that suffice all the “hard” options, None is returned.

A compatible_surface is required when targeting WebGL2.

source

pub unsafe fn create_adapter_from_hal<A: HalApi>( &self, hal_adapter: ExposedAdapter<A> ) -> Adapter

Available on wgpu_core only.

Converts a wgpu-hal ExposedAdapter to a wgpu Adapter.

Safety

hal_adapter must be created from this instance internal handle.

source

pub fn create_surface<'window>( &self, target: impl Into<SurfaceTarget<'window>> ) -> Result<Surface<'window>, CreateSurfaceError>

Creates a new surface targeting a given window/canvas/surface/etc..

Internally, this creates surfaces for all backends that are enabled for this instance.

See SurfaceTarget for what targets are supported. See Instance::create_surface_unsafe for surface creation with unsafe target variants.

Most commonly used are window handles (or provider of windows handles) which can be passed directly as they’re automatically converted to SurfaceTarget.

source

pub unsafe fn create_surface_unsafe<'window>( &self, target: SurfaceTargetUnsafe ) -> Result<Surface<'window>, CreateSurfaceError>

Creates a new surface targeting a given window/canvas/surface/etc. using an unsafe target.

Internally, this creates surfaces for all backends that are enabled for this instance.

See SurfaceTargetUnsafe for what targets are supported. See Instance::create_surface for surface creation with safe target variants.

Safety
source

pub fn poll_all(&self, force_wait: bool) -> bool

Polls all devices.

If force_wait is true and this is not running on the web, then this function will block until all in-flight buffers have been mapped and all submitted commands have finished execution.

Return true if all devices’ queues are empty, or false if there are queue submissions still in flight. (Note that, unless access to all Queues associated with this Instance is coordinated somehow, this information could be out of date by the time the caller receives it. Queues can be shared between threads, and other threads could submit new work at any time.)

On the web, this is a no-op. Devices are automatically polled.

source

pub fn generate_report(&self) -> Option<GlobalReport>

Available on wgpu_core only.

Generates memory report.

Returns None if the feature is not supported by the backend which happens only when WebGPU is pre-selected by the instance creation.

Trait Implementations§

source§

impl Debug for Instance

source§

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

Formats the value using the given formatter. Read more
source§

impl Default for Instance

source§

fn default() -> Self

Creates a new instance of wgpu with default options.

Backends are set to Backends::all(), and FXC is chosen as the dx12_shader_compiler.

Panics

If no backend feature for the active target platform is enabled, this method will panic, see Instance::enabled_backend_features().

source§

impl Hash for Instance

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Instance

source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Instance

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Instance

source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl Eq for Instance

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
§

impl<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
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>

§

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

§

impl<T> WasmNotSendSync for T

§

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