pub struct Adapter {
pub(crate) context: Arc<dyn DynContext>,
pub(crate) id: ObjectId,
pub(crate) data: Box<dyn Any + Sync + Send>,
}
Expand description
Handle to a physical graphics and/or compute device.
Adapters can be used to open a connection to the corresponding Device
on the host system by using Adapter::request_device
.
Does not have to be kept alive.
Corresponds to WebGPU GPUAdapter
.
Fields§
§context: Arc<dyn DynContext>
§id: ObjectId
§data: Box<dyn Any + Sync + Send>
Implementations§
§impl Adapter
impl Adapter
pub fn request_device(
&self,
desc: &DeviceDescriptor<Option<&str>>,
trace_path: Option<&Path>
) -> impl Future<Output = Result<(Device, Queue), RequestDeviceError>> + WasmNotSend
pub fn request_device( &self, desc: &DeviceDescriptor<Option<&str>>, trace_path: Option<&Path> ) -> impl Future<Output = Result<(Device, Queue), RequestDeviceError>> + WasmNotSend
Requests a connection to a physical device, creating a logical device.
Returns the Device
together with a Queue
that executes command buffers.
Per the WebGPU specification, an Adapter
may only be used once to create a device.
If another device is wanted, call Instance::request_adapter()
again to get a fresh
Adapter
.
However, wgpu
does not currently enforce this restriction.
§Arguments
desc
- Description of the features and limits requested from the given device.trace_path
- Can be used for API call tracing, if that feature is enabled inwgpu-core
.
§Panics
request_device()
was already called on thisAdapter
.- Features specified by
desc
are not supported by this adapter. - Unsafe features were requested but not enabled when requesting the adapter.
- Limits requested exceed the values provided by the adapter.
- Adapter does not support all features wgpu requires to safely operate.
pub unsafe fn create_device_from_hal<A>(
&self,
hal_device: OpenDevice<A>,
desc: &DeviceDescriptor<Option<&str>>,
trace_path: Option<&Path>
) -> Result<(Device, Queue), RequestDeviceError>where
A: HalApi,
pub unsafe fn create_device_from_hal<A>(
&self,
hal_device: OpenDevice<A>,
desc: &DeviceDescriptor<Option<&str>>,
trace_path: Option<&Path>
) -> Result<(Device, Queue), RequestDeviceError>where
A: HalApi,
pub unsafe fn as_hal<A, F, R>(&self, hal_adapter_callback: F) -> R
pub unsafe fn as_hal<A, F, R>(&self, hal_adapter_callback: F) -> R
Apply a callback to this Adapter
’s underlying backend adapter.
If this Adapter
is implemented by the backend API given by A
(Vulkan,
Dx12, etc.), then apply hal_adapter_callback
to Some(&adapter)
, where
adapter
is the underlying backend adapter type, A::Adapter
.
If this Adapter
uses a different backend, apply hal_adapter_callback
to None
.
The adapter is locked for reading while hal_adapter_callback
runs. If
the callback attempts to perform any wgpu
operations that require
write access to the adapter, deadlock will occur. The locks are
automatically released when the callback returns.
§Safety
- The raw handle passed to the callback must not be manually destroyed.
pub fn is_surface_supported(&self, surface: &Surface<'_>) -> bool
pub fn is_surface_supported(&self, surface: &Surface<'_>) -> bool
Returns whether this adapter may present to the passed surface.
pub fn get_info(&self) -> AdapterInfo
pub fn get_info(&self) -> AdapterInfo
Get info about the adapter itself.
pub fn get_downlevel_capabilities(&self) -> DownlevelCapabilities
pub fn get_downlevel_capabilities(&self) -> DownlevelCapabilities
Get info about the adapter itself.
pub fn get_texture_format_features(
&self,
format: TextureFormat
) -> TextureFormatFeatures
pub fn get_texture_format_features( &self, format: TextureFormat ) -> TextureFormatFeatures
Returns the features supported for a given texture format by this adapter.
Note that the WebGPU spec further restricts the available usages/features.
To disable these restrictions on a device, request the Features::TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES
feature.
pub fn get_presentation_timestamp(&self) -> PresentationTimestamp
pub fn get_presentation_timestamp(&self) -> PresentationTimestamp
Generates a timestamp using the clock used by the presentation engine.
When comparing completely opaque timestamp systems, we need a way of generating timestamps that signal the exact same time. You can do this by calling your own timestamp function immediately after a call to this function. This should result in timestamps that are 0.5 to 5 microseconds apart. There are locks that must be taken during the call, so don’t call your function before.
use std::time::{Duration, Instant};
let presentation = adapter.get_presentation_timestamp();
let instant = Instant::now();
// We can now turn a new presentation timestamp into an Instant.
let some_pres_timestamp = some_code();
let duration = Duration::from_nanos((some_pres_timestamp.0 - presentation.0) as u64);
let new_instant: Instant = instant + duration;
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Adapter
impl !RefUnwindSafe for Adapter
impl Send for Adapter
impl Sync for Adapter
impl Unpin for Adapter
impl !UnwindSafe for Adapter
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moresource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request