Adapter Options (Unstable!)

wgpu::RequestAdapterOptions may be passed to wgpuInstanceRequestAdapter to request an adapter.

Dawn provides a few chained extension structs on RequestAdapterOptions to customize the behavior. Currently, the WGPUInstance doesn‘t provide a way to query support for these features, so these features may not be suitable for general use yet. Currently, they are used in Dawn’s testing, and in Chromium-specific integration with Dawn.

DawnTogglesDescriptor can also be chained on RequestAdapterOptions to provide the required adapter toggles. However, the final adapter toggles state also depends on instance toggles inheritance and adapter toggles validation/default-setting.

dawn::native::Instance::EnumerateAdapters is a Dawn native-only API that may be used to synchronously get a list of adapters according to the RequestAdapterOptions. The members are treated as follows:

  • RequestAdapterOptions::compatibleSurface is ignored.
  • RequestAdapterOptions::powerPreference adapters are sorted according to powerPreference such that preferred adapters are at the front of the list. It is a preference - so if wgpu::PowerPreference::LowPower is passed, the list may contain only integrated GPUs, fallback adapters, or a mix of everything. Implementations should try to avoid returning any discrete GPUs when low power is requested if at least one integrated GPU is available.
  • RequestAdapterOptions::backendType filters adapters such that only those on a particular backend are discovered. If WGPURequestAdapterType_Undefined is passed, all backends may be discovered.
  • RequestAdapterOptions::compatibilityMode all returned adapters must match the requested compatibility mode.
  • RequestAdapterOptions::forceFallbackAdapter all returned adapters must be fallback adapters.

If no options are passed to EnumerateAdapters, then it is as if the default RequestAdapterOptions are passed.


When discovering adapters on the GLES backend, Dawn uses the provided RequestAdapterOptionsGetGLProc::getProc method to load GL procs. RequestAdapterOptionsGetGLProc::display indicates the EGLDisplay on which to create an adapter. If display is EGL_NO_DISPLAY, the current display will be used. This extension struct does nothing on other backends.


When discovering adapters on D3D11 and D3D12, Dawn only discovers adapters matching the provided RequestAdapterOptionsLUID::adapterLUID. This extension struct does nothing on other backends.


When discovering adapters, Dawn will use chained DawnTogglesDescriptor as required adapter toggles. The final toggles state of each result adapter depends on the inheritance of instance toggles state, the backend-specific validation and the backend-specific default setting.