Make RequestAdapterOptionsBackendType part of RequestAdapterOptions
Removes the chained struct and adds it as a member to RequestAdapterOptions
PR: https://github.com/webgpu-native/webgpu-headers/pull/195
Bug: dawn:1875
Change-Id: I8693bab697292ef1dd832356913e1d23d985990e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/138160
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
diff --git a/dawn.json b/dawn.json
index 81e98ca..a975648 100644
--- a/dawn.json
+++ b/dawn.json
@@ -53,19 +53,11 @@
"members": [
{"name": "compatible surface", "type": "surface", "optional": true},
{"name": "power preference", "type": "power preference", "default": "undefined"},
+ {"name": "backend type", "type": "backend type", "default": "undefined"},
{"name": "force fallback adapter", "type": "bool", "default": "false"},
{"name": "compatibility mode", "type": "bool", "default": "false", "tags": ["dawn", "emscripten"]}
]
},
- "request adapter options backend type": {
- "tags": ["dawn"],
- "category": "structure",
- "chained": "in",
- "chain roots": ["request adapter options"],
- "members": [
- {"name": "backend type", "type": "backend type"}
- ]
- },
"request adapter status": {
"category": "enum",
"emscripten_no_enum_table": true,
@@ -210,14 +202,15 @@
"category": "enum",
"emscripten_no_enum_table": true,
"values": [
- {"value": 0, "name": "null"},
- {"value": 1, "name": "WebGPU"},
- {"value": 2, "name": "D3D11"},
- {"value": 3, "name": "D3D12"},
- {"value": 4, "name": "metal"},
- {"value": 5, "name": "vulkan"},
- {"value": 6, "name": "openGL"},
- {"value": 7, "name": "openGLES"}
+ {"value": 0, "name": "undefined", "jsrepr": "undefined", "valid": false},
+ {"value": 1, "name": "null"},
+ {"value": 2, "name": "WebGPU"},
+ {"value": 3, "name": "D3D11"},
+ {"value": 4, "name": "D3D12"},
+ {"value": 5, "name": "metal"},
+ {"value": 6, "name": "vulkan"},
+ {"value": 7, "name": "openGL"},
+ {"value": 8, "name": "openGLES"}
]
},
"bind group": {
@@ -2628,9 +2621,8 @@
{"value": 1007, "name": "dawn buffer descriptor error info from wire client", "tags": ["dawn"]},
{"value": 1008, "name": "dawn toggles descriptor", "tags": ["dawn", "native"]},
{"value": 1009, "name": "dawn shader module SPIRV options descriptor", "tags": ["dawn"]},
- {"value": 1010, "name": "request adapter options backend type", "tags": ["dawn"]},
- {"value": 1011, "name": "request adapter options LUID", "tags": ["dawn", "native"]},
- {"value": 1012, "name": "request adapter options get GL proc", "tags": ["dawn", "native"]}
+ {"value": 1010, "name": "request adapter options LUID", "tags": ["dawn", "native"]},
+ {"value": 1011, "name": "request adapter options get GL proc", "tags": ["dawn", "native"]}
]
},
"texture": {
diff --git a/docs/dawn/features/adapter_options.md b/docs/dawn/features/adapter_options.md
index 37b4a7d..56c209f 100644
--- a/docs/dawn/features/adapter_options.md
+++ b/docs/dawn/features/adapter_options.md
@@ -13,15 +13,12 @@
- `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.
-### `RequestAdapterOptionsBackendType`
-
-Filters the adapters that Dawn discovers to only one particular backend.
-
### `RequestAdapterOptionsGetGLProc`
When discovering adapters on the GL backend, Dawn uses the provided `RequestAdapterOptionsGetGLProc::getProc` method to load GL procs. This extension struct does nothing on other backends.
diff --git a/src/dawn/native/Adapter.cpp b/src/dawn/native/Adapter.cpp
index bb8fa36..f79e1d4 100644
--- a/src/dawn/native/Adapter.cpp
+++ b/src/dawn/native/Adapter.cpp
@@ -232,6 +232,8 @@
return 5;
case wgpu::BackendType::Null:
return 6;
+ case wgpu::BackendType::Undefined:
+ UNREACHABLE();
}
};
diff --git a/src/dawn/native/Instance.cpp b/src/dawn/native/Instance.cpp
index bc88e0a..2b51648 100644
--- a/src/dawn/native/Instance.cpp
+++ b/src/dawn/native/Instance.cpp
@@ -241,11 +241,7 @@
"RequestAdapter instead.";
// Transform the deprecated options to RequestAdapterOptions.
RequestAdapterOptions adapterOptions = {};
-
- RequestAdapterOptionsBackendType backendTypeOptions = {};
- backendTypeOptions.backendType = wgpu::BackendType(deprecatedOptions->backendType);
-
- adapterOptions.nextInChain = &backendTypeOptions;
+ adapterOptions.backendType = wgpu::BackendType(deprecatedOptions->backendType);
#if defined(DAWN_ENABLE_BACKEND_D3D11) || defined(DAWN_ENABLE_BACKEND_D3D12)
d3d::RequestAdapterOptionsLUID adapterOptionsLUID = {};
@@ -255,7 +251,7 @@
opengl::RequestAdapterOptionsGetGLProc glGetProcOptions = {};
#endif // defined(DAWN_ENABLE_BACKEND_OPENGL)
- switch (backendTypeOptions.backendType) {
+ switch (adapterOptions.backendType) {
#if defined(DAWN_ENABLE_BACKEND_D3D11) || defined(DAWN_ENABLE_BACKEND_D3D12)
case wgpu::BackendType::D3D11:
case wgpu::BackendType::D3D12: {
@@ -268,7 +264,7 @@
return false;
}
adapterOptionsLUID.adapterLUID = desc.AdapterLuid;
- backendTypeOptions.nextInChain = &adapterOptionsLUID;
+ adapterOptions.nextInChain = &adapterOptionsLUID;
}
break;
}
@@ -280,7 +276,7 @@
glGetProcOptions.getProc =
static_cast<const opengl::PhysicalDeviceDiscoveryOptions*>(deprecatedOptions)
->getProc;
- backendTypeOptions.nextInChain = &glGetProcOptions;
+ adapterOptions.nextInChain = &glGetProcOptions;
break;
#endif // defined(DAWN_ENABLE_BACKEND_OPENGL)
@@ -455,16 +451,12 @@
const RequestAdapterOptions* options) {
ASSERT(options);
- const RequestAdapterOptionsBackendType* backendTypeOptions = nullptr;
- FindInChain(options->nextInChain, &backendTypeOptions);
-
BackendsBitset enabledBackends = GetEnabledBackends();
BackendsBitset backendsToFind;
- if (backendTypeOptions) {
+ if (options->backendType != wgpu::BackendType::Undefined) {
backendsToFind = {};
- if (!ConsumedErrorAndWarnOnce(ValidateBackendType(backendTypeOptions->backendType))) {
- wgpu::BackendType backendType(backendTypeOptions->backendType);
- backendsToFind.set(backendType, enabledBackends[backendType]);
+ if (!ConsumedErrorAndWarnOnce(ValidateBackendType(options->backendType))) {
+ backendsToFind.set(options->backendType, enabledBackends[options->backendType]);
}
} else {
backendsToFind = enabledBackends;
diff --git a/src/dawn/samples/SampleUtils.cpp b/src/dawn/samples/SampleUtils.cpp
index b7843cf..320d0c0 100644
--- a/src/dawn/samples/SampleUtils.cpp
+++ b/src/dawn/samples/SampleUtils.cpp
@@ -129,11 +129,8 @@
instance = std::make_unique<dawn::native::Instance>();
- wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
- backendTypeOptions.backendType = backendType;
-
wgpu::RequestAdapterOptions options = {};
- options.nextInChain = &backendTypeOptions;
+ options.backendType = backendType;
// Get an adapter for the backend to use, and create the device.
dawn::native::Adapter backendAdapter = instance->EnumerateAdapters(&options)[0];
diff --git a/src/dawn/tests/AdapterTestConfig.cpp b/src/dawn/tests/AdapterTestConfig.cpp
index e81bb29..476e01a 100644
--- a/src/dawn/tests/AdapterTestConfig.cpp
+++ b/src/dawn/tests/AdapterTestConfig.cpp
@@ -91,6 +91,7 @@
return "OpenGLES";
case wgpu::BackendType::Vulkan:
return "Vulkan";
+ case wgpu::BackendType::Undefined:
default:
UNREACHABLE();
}
diff --git a/src/dawn/tests/DawnNativeTest.cpp b/src/dawn/tests/DawnNativeTest.cpp
index 31503b8..29b5031 100644
--- a/src/dawn/tests/DawnNativeTest.cpp
+++ b/src/dawn/tests/DawnNativeTest.cpp
@@ -65,11 +65,8 @@
reinterpret_cast<const WGPUInstanceDescriptor*>(&instanceDesc));
instance->EnableAdapterBlocklist(false);
- wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
- backendTypeOptions.backendType = wgpu::BackendType::Null;
-
wgpu::RequestAdapterOptions options = {};
- options.nextInChain = &backendTypeOptions;
+ options.backendType = wgpu::BackendType::Null;
adapter = instance->EnumerateAdapters(&options)[0];
device = wgpu::Device::Acquire(CreateTestDevice());
diff --git a/src/dawn/tests/DawnTest.cpp b/src/dawn/tests/DawnTest.cpp
index 24a748e..54f3ffd 100644
--- a/src/dawn/tests/DawnTest.cpp
+++ b/src/dawn/tests/DawnTest.cpp
@@ -706,11 +706,8 @@
WGPURequestAdapterCallback callback, void* userdata) {
ASSERT(gCurrentTest);
- wgpu::RequestAdapterOptionsBackendType adapterBackendTypeOptions;
- adapterBackendTypeOptions.backendType = gCurrentTest->mParam.adapterProperties.backendType;
-
wgpu::RequestAdapterOptions adapterOptions;
- adapterOptions.nextInChain = &adapterBackendTypeOptions;
+ adapterOptions.backendType = gCurrentTest->mParam.adapterProperties.backendType;
adapterOptions.compatibilityMode = gCurrentTest->mParam.adapterProperties.compatibilityMode;
// Find the adapter that exactly matches our adapter properties.
diff --git a/src/dawn/tests/benchmarks/NullDeviceSetup.cpp b/src/dawn/tests/benchmarks/NullDeviceSetup.cpp
index f4c0e8f..c7057fc 100644
--- a/src/dawn/tests/benchmarks/NullDeviceSetup.cpp
+++ b/src/dawn/tests/benchmarks/NullDeviceSetup.cpp
@@ -36,11 +36,8 @@
}
if (!nullBackendAdapter) {
- wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
- backendTypeOptions.backendType = wgpu::BackendType::Null;
-
wgpu::RequestAdapterOptions options = {};
- options.nextInChain = &backendTypeOptions;
+ options.backendType = wgpu::BackendType::Null;
auto nativeAdapter = nativeInstance->EnumerateAdapters(&options)[0];
nullBackendAdapter = wgpu::Adapter(nativeAdapter.Get());
diff --git a/src/dawn/tests/end2end/PhysicalDeviceDiscoveryTests.cpp b/src/dawn/tests/end2end/PhysicalDeviceDiscoveryTests.cpp
index 51532c5..af0288a 100644
--- a/src/dawn/tests/end2end/PhysicalDeviceDiscoveryTests.cpp
+++ b/src/dawn/tests/end2end/PhysicalDeviceDiscoveryTests.cpp
@@ -263,11 +263,8 @@
TEST(AdapterEnumerationTests, OnlyVulkan) {
native::Instance instance;
- wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
- backendTypeOptions.backendType = wgpu::BackendType::Vulkan;
-
wgpu::RequestAdapterOptions adapterOptions = {};
- adapterOptions.nextInChain = &backendTypeOptions;
+ adapterOptions.backendType = wgpu::BackendType::Vulkan;
const auto& adapters = instance.EnumerateAdapters(&adapterOptions);
for (const auto& adapter : adapters) {
@@ -282,11 +279,8 @@
TEST(AdapterEnumerationTests, OnlyD3D11) {
native::Instance instance;
- wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
- backendTypeOptions.backendType = wgpu::BackendType::D3D11;
-
wgpu::RequestAdapterOptions adapterOptions = {};
- adapterOptions.nextInChain = &backendTypeOptions;
+ adapterOptions.backendType = wgpu::BackendType::D3D11;
const auto& adapters = instance.EnumerateAdapters(&adapterOptions);
for (const auto& adapter : adapters) {
@@ -320,12 +314,9 @@
native::d3d::RequestAdapterOptionsLUID luidOptions = {};
luidOptions.adapterLUID = adapterDesc.AdapterLuid;
- wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
- backendTypeOptions.backendType = wgpu::BackendType::D3D11;
-
wgpu::RequestAdapterOptions adapterOptions = {};
- adapterOptions.nextInChain = &backendTypeOptions;
- backendTypeOptions.nextInChain = &luidOptions;
+ adapterOptions.backendType = wgpu::BackendType::D3D11;
+ adapterOptions.nextInChain = &luidOptions;
const auto& adapters = instance.EnumerateAdapters(&adapterOptions);
if (adapters.empty()) {
@@ -362,11 +353,8 @@
TEST(AdapterEnumerationTests, OnlyD3D12) {
native::Instance instance;
- wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
- backendTypeOptions.backendType = wgpu::BackendType::D3D12;
-
wgpu::RequestAdapterOptions adapterOptions = {};
- adapterOptions.nextInChain = &backendTypeOptions;
+ adapterOptions.backendType = wgpu::BackendType::D3D12;
const auto& adapters = instance.EnumerateAdapters(&adapterOptions);
for (const auto& adapter : adapters) {
@@ -400,12 +388,9 @@
native::d3d::RequestAdapterOptionsLUID luidOptions = {};
luidOptions.adapterLUID = adapterDesc.AdapterLuid;
- wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
- backendTypeOptions.backendType = wgpu::BackendType::D3D12;
-
wgpu::RequestAdapterOptions adapterOptions = {};
- adapterOptions.nextInChain = &backendTypeOptions;
- backendTypeOptions.nextInChain = &luidOptions;
+ adapterOptions.backendType = wgpu::BackendType::D3D12;
+ adapterOptions.nextInChain = &luidOptions;
const auto& adapters = instance.EnumerateAdapters(&adapterOptions);
if (adapters.empty()) {
@@ -442,11 +427,8 @@
TEST(AdapterEnumerationTests, OnlyMetal) {
native::Instance instance;
- wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
- backendTypeOptions.backendType = wgpu::BackendType::Metal;
-
wgpu::RequestAdapterOptions adapterOptions = {};
- adapterOptions.nextInChain = &backendTypeOptions;
+ adapterOptions.backendType = wgpu::BackendType::Metal;
const auto& adapters = instance.EnumerateAdapters(&adapterOptions);
for (const auto& adapter : adapters) {
@@ -460,11 +442,8 @@
// Test enumerating the Metal backend, then the Vulkan backend
// does not duplicate physical devices.
TEST(AdapterEnumerationTests, OneBackendThenTheOther) {
- wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
- backendTypeOptions.backendType = wgpu::BackendType::Metal;
-
wgpu::RequestAdapterOptions adapterOptions = {};
- adapterOptions.nextInChain = &backendTypeOptions;
+ adapterOptions.backendType = wgpu::BackendType::Metal;
native::Instance instance;
@@ -482,7 +461,7 @@
}
// Enumerate vulkan adapters. We should only see vulkan adapters.
{
- backendTypeOptions.backendType = wgpu::BackendType::Vulkan;
+ adapterOptions.backendType = wgpu::BackendType::Vulkan;
const auto& adapters = instance.EnumerateAdapters(&adapterOptions);
for (const auto& adapter : adapters) {
@@ -495,7 +474,7 @@
// Enumerate metal adapters. We should see the same number of metal adapters.
{
- backendTypeOptions.backendType = wgpu::BackendType::Metal;
+ adapterOptions.backendType = wgpu::BackendType::Metal;
const auto& adapters = instance.EnumerateAdapters(&adapterOptions);
uint32_t metalAdapterCount2 = adapters.size();
diff --git a/src/dawn/tests/unittests/ToggleTests.cpp b/src/dawn/tests/unittests/ToggleTests.cpp
index 2ced630..014538d 100644
--- a/src/dawn/tests/unittests/ToggleTests.cpp
+++ b/src/dawn/tests/unittests/ToggleTests.cpp
@@ -131,11 +131,8 @@
native::InstanceBase* instance = native::FromAPI(nativeInstance->Get());
const native::TogglesState& instanceTogglesState = instance->GetTogglesState();
- native::RequestAdapterOptionsBackendType backendTypeOptions = {};
- backendTypeOptions.backendType = wgpu::BackendType::Null;
-
native::RequestAdapterOptions options = {};
- options.nextInChain = &backendTypeOptions;
+ options.backendType = wgpu::BackendType::Null;
// Get the null adapter with default toggles.
Ref<native::AdapterBase> nullAdapter = instance->EnumerateAdapters(&options)[0];
diff --git a/src/dawn/tests/unittests/native/DeviceCreationTests.cpp b/src/dawn/tests/unittests/native/DeviceCreationTests.cpp
index d20a70c..56ab31f 100644
--- a/src/dawn/tests/unittests/native/DeviceCreationTests.cpp
+++ b/src/dawn/tests/unittests/native/DeviceCreationTests.cpp
@@ -44,11 +44,8 @@
WGPUInstanceDescriptor safeInstanceDesc = {};
instance = std::make_unique<dawn::native::Instance>(&safeInstanceDesc);
- wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
- backendTypeOptions.backendType = wgpu::BackendType::Null;
-
wgpu::RequestAdapterOptions options = {};
- options.nextInChain = &backendTypeOptions;
+ options.backendType = wgpu::BackendType::Null;
// Get the null adapter with default toggles.
adapter = instance->EnumerateAdapters(&options)[0];
diff --git a/src/dawn/tests/unittests/validation/ValidationTest.cpp b/src/dawn/tests/unittests/validation/ValidationTest.cpp
index eff8065..9a9dc3e 100644
--- a/src/dawn/tests/unittests/validation/ValidationTest.cpp
+++ b/src/dawn/tests/unittests/validation/ValidationTest.cpp
@@ -144,11 +144,8 @@
"_" + ::testing::UnitTest::GetInstance()->current_test_info()->name();
mWireHelper->BeginWireTrace(traceName.c_str());
- wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
- backendTypeOptions.backendType = wgpu::BackendType::Null;
-
wgpu::RequestAdapterOptions options = {};
- options.nextInChain = &backendTypeOptions;
+ options.backendType = wgpu::BackendType::Null;
options.compatibilityMode = gCurrentTest->UseCompatibilityMode();
mInstance.RequestAdapter(