pub struct Adapter { /* private fields */ }
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
.
Implementations§
source§impl Adapter
impl Adapter
sourcepub fn request_device(
&self,
desc: &DeviceDescriptor<'_>,
trace_path: Option<&Path>
) -> impl Future<Output = Result<(Device, Queue), RequestDeviceError>> + WasmNotSend
pub fn request_device( &self, desc: &DeviceDescriptor<'_>, 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.
§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
- 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.
sourcepub unsafe fn create_device_from_hal<A: HalApi>(
&self,
hal_device: OpenDevice<A>,
desc: &DeviceDescriptor<'_>,
trace_path: Option<&Path>
) -> Result<(Device, Queue), RequestDeviceError>
pub unsafe fn create_device_from_hal<A: HalApi>( &self, hal_device: OpenDevice<A>, desc: &DeviceDescriptor<'_>, trace_path: Option<&Path> ) -> Result<(Device, Queue), RequestDeviceError>
sourcepub unsafe fn as_hal<A: HalApi, F: FnOnce(Option<&A::Adapter>) -> R, R>(
&self,
hal_adapter_callback: F
) -> R
pub unsafe fn as_hal<A: HalApi, F: FnOnce(Option<&A::Adapter>) -> R, 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.
sourcepub 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.
sourcepub fn features(&self) -> Features
pub fn features(&self) -> Features
The features which can be used to create devices on this adapter.
sourcepub fn limits(&self) -> Limits
pub fn limits(&self) -> Limits
The best limits which can be used to create devices on this adapter.
sourcepub fn get_info(&self) -> AdapterInfo
pub fn get_info(&self) -> AdapterInfo
Get info about the adapter itself.
sourcepub fn get_downlevel_capabilities(&self) -> DownlevelCapabilities
pub fn get_downlevel_capabilities(&self) -> DownlevelCapabilities
Get info about the adapter itself.
sourcepub 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.
sourcepub 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;