webgpu.h: Return wgpu::Status enums
Bug: 42241199
Change-Id: I8e56efd63d6c47ff06c4e988823c9574d1fc2d95
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/184660
Reviewed-by: Loko Kung <lokokung@google.com>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
diff --git a/generator/templates/api_cpp.h b/generator/templates/api_cpp.h
index 4eebbc5..1fb80ed 100644
--- a/generator/templates/api_cpp.h
+++ b/generator/templates/api_cpp.h
@@ -139,6 +139,23 @@
{{BoolCType}} mValue = static_cast<{{BoolCType}}>(false);
};
+// Helper class to wrap Status which allows implicit conversion to bool.
+// Used while callers switch to checking the Status enum instead of booleans.
+// TODO(crbug.com/42241199): Remove when all callers check the enum.
+struct ConvertibleStatus {
+ // NOLINTNEXTLINE(runtime/explicit) allow implicit construction
+ constexpr ConvertibleStatus(Status status) : status(status) {}
+ // NOLINTNEXTLINE(runtime/explicit) allow implicit conversion
+ constexpr operator bool() const {
+ return status == Status::Success;
+ }
+ // NOLINTNEXTLINE(runtime/explicit) allow implicit conversion
+ constexpr operator Status() const {
+ return status;
+ }
+ Status status;
+};
+
template<typename Derived, typename CType>
class ObjectBase {
public:
@@ -305,7 +322,7 @@
{% set OriginalMethodName = method.name.CamelCase() %}
{% set MethodName = OriginalMethodName[:-1] if method.name.chunks[-1] == "f" else OriginalMethodName %}
{% set MethodName = CppType + "::" + MethodName if dfn else MethodName %}
- {{as_cppType(method.return_type.name)}} {{MethodName}}(
+ {{"ConvertibleStatus" if method.return_type.name.get() == "status" else as_cppType(method.return_type.name)}} {{MethodName}}(
{%- for arg in method.arguments -%}
{%- if not loop.first %}, {% endif -%}
{%- if arg.type.category == "object" and arg.annotation == "value" -%}
diff --git a/include/dawn/native/DawnNative.h b/include/dawn/native/DawnNative.h
index 2a44d87..1ff8d9b 100644
--- a/include/dawn/native/DawnNative.h
+++ b/include/dawn/native/DawnNative.h
@@ -89,11 +89,11 @@
// Essentially webgpu.h's wgpuAdapterGetProperties while we don't have WGPUAdapter in
// dawn.json
- void GetProperties(wgpu::AdapterProperties* properties) const;
- void GetProperties(WGPUAdapterProperties* properties) const;
+ wgpu::Status GetProperties(wgpu::AdapterProperties* properties) const;
+ wgpu::Status GetProperties(WGPUAdapterProperties* properties) const;
std::vector<const char*> GetSupportedFeatures() const;
- bool GetLimits(WGPUSupportedLimits* limits) const;
+ wgpu::ConvertibleStatus GetLimits(WGPUSupportedLimits* limits) const;
void SetUseTieredLimits(bool useTieredLimits);
diff --git a/src/dawn/common/xlib_with_undefs.h b/src/dawn/common/xlib_with_undefs.h
index f9dc708..6f419e8 100644
--- a/src/dawn/common/xlib_with_undefs.h
+++ b/src/dawn/common/xlib_with_undefs.h
@@ -47,6 +47,7 @@
#undef None
#undef Always
#undef Bool
+#undef Status
using XErrorHandler = int (*)(Display*, XErrorEvent*);
diff --git a/src/dawn/dawn.json b/src/dawn/dawn.json
index c76f9c2..4b71a1a 100644
--- a/src/dawn/dawn.json
+++ b/src/dawn/dawn.json
@@ -126,13 +126,14 @@
},
{
"name": "get limits",
- "returns": "bool",
+ "returns": "status",
"args": [
{"name": "limits", "type": "supported limits", "annotation": "*"}
]
},
{
"name": "get properties",
+ "returns": "status",
"args": [
{"name": "properties", "type": "adapter properties", "annotation": "*"}
]
@@ -190,7 +191,7 @@
{
"name": "get format capabilities",
"tags": ["dawn"],
- "returns": "bool",
+ "returns": "status",
"args": [
{"name": "format", "type": "texture format"},
{"name": "capabilities", "type": "format capabilities", "annotation": "*"}
@@ -1402,7 +1403,7 @@
},
{
"name": "get limits",
- "returns": "bool",
+ "returns": "status",
"args": [
{"name": "limits", "type": "supported limits", "annotation": "*"}
]
@@ -1805,6 +1806,13 @@
{"name": "rotation", "type": "external texture rotation", "default": "rotate 0 degrees"}
]
},
+ "status": {
+ "category": "enum",
+ "values": [
+ {"value": 0, "name": "success"},
+ {"value": 1, "name": "error"}
+ ]
+ },
"shared buffer memory": {
"category": "object",
"tags": ["dawn", "native"],
@@ -1818,7 +1826,7 @@
},
{
"name": "get properties",
- "returns": "void",
+ "returns": "status",
"args": [
{"name": "properties", "type": "shared buffer memory properties", "annotation": "*"}
]
@@ -1883,7 +1891,7 @@
},
{
"name": "get properties",
- "returns": "void",
+ "returns": "status",
"args": [
{"name": "properties", "type": "shared texture memory properties", "annotation": "*"}
]
@@ -2529,8 +2537,7 @@
},
"get instance features": {
"category": "function",
- "_comment": "TODO(crbug.com/dawn/1987): Figure out how to return error codes for functions like this (https://github.com/webgpu-native/webgpu-headers/issues/115).",
- "returns": "bool",
+ "returns": "status",
"args": [
{"name": "features", "type": "instance features", "annotation": "*"}
]
@@ -3602,7 +3609,7 @@
},
{
"name": "get capabilities",
- "returns": "void",
+ "returns": "status",
"args": [
{"name": "adapter", "type": "adapter"},
{"name": "capabilities", "type": "surface capabilities", "annotation": "*"}
diff --git a/src/dawn/native/Adapter.cpp b/src/dawn/native/Adapter.cpp
index c9b005a..819fe20 100644
--- a/src/dawn/native/Adapter.cpp
+++ b/src/dawn/native/Adapter.cpp
@@ -92,11 +92,11 @@
return instance;
}
-bool AdapterBase::APIGetLimits(SupportedLimits* limits) const {
+wgpu::Status AdapterBase::APIGetLimits(SupportedLimits* limits) const {
DAWN_ASSERT(limits != nullptr);
UnpackedPtr<SupportedLimits> unpacked;
if (mInstance->ConsumedError(ValidateAndUnpack(limits), &unpacked)) {
- return false;
+ return wgpu::Status::Error;
}
if (mUseTieredLimits) {
@@ -116,31 +116,35 @@
}
}
- return true;
+ return wgpu::Status::Success;
}
-void AdapterBase::APIGetProperties(AdapterProperties* properties) const {
+wgpu::Status AdapterBase::APIGetProperties(AdapterProperties* properties) const {
DAWN_ASSERT(properties != nullptr);
UnpackedPtr<AdapterProperties> unpacked;
if (mInstance->ConsumedError(ValidateAndUnpack(properties), &unpacked)) {
- return;
+ return wgpu::Status::Error;
}
+ bool hadError = false;
if (unpacked.Get<AdapterPropertiesMemoryHeaps>() != nullptr &&
!mSupportedFeatures.IsEnabled(wgpu::FeatureName::AdapterPropertiesMemoryHeaps)) {
- [[maybe_unused]] bool hadError = mInstance->ConsumedError(
+ hadError |= mInstance->ConsumedError(
DAWN_VALIDATION_ERROR("Feature AdapterPropertiesMemoryHeaps is not available."));
}
if (unpacked.Get<AdapterPropertiesD3D>() != nullptr &&
!mSupportedFeatures.IsEnabled(wgpu::FeatureName::AdapterPropertiesD3D)) {
- [[maybe_unused]] bool hadError = mInstance->ConsumedError(
+ hadError |= mInstance->ConsumedError(
DAWN_VALIDATION_ERROR("Feature AdapterPropertiesD3D is not available."));
}
if (unpacked.Get<AdapterPropertiesVk>() != nullptr &&
!mSupportedFeatures.IsEnabled(wgpu::FeatureName::AdapterPropertiesVk)) {
- [[maybe_unused]] bool hadError = mInstance->ConsumedError(
+ hadError |= mInstance->ConsumedError(
DAWN_VALIDATION_ERROR("Feature AdapterPropertiesVk is not available."));
}
+ if (hadError) {
+ return wgpu::Status::Error;
+ }
if (auto* powerPreferenceDesc = unpacked.Get<DawnAdapterPropertiesPowerPreference>()) {
powerPreferenceDesc->powerPreference = mPowerPreference;
@@ -178,6 +182,8 @@
properties->driverDescription = ptr;
memcpy(ptr, mPhysicalDevice->GetDriverDescription().c_str(), driverDescriptionCLen);
ptr += driverDescriptionCLen;
+
+ return wgpu::Status::Success;
}
void APIAdapterPropertiesFreeMembers(WGPUAdapterProperties properties) {
@@ -263,8 +269,8 @@
"can not chain after requiredLimits.");
SupportedLimits supportedLimits;
- bool success = APIGetLimits(&supportedLimits);
- DAWN_ASSERT(success);
+ wgpu::Status status = APIGetLimits(&supportedLimits);
+ DAWN_ASSERT(status == wgpu::Status::Success);
DAWN_TRY_CONTEXT(ValidateLimits(supportedLimits.limits, descriptor->requiredLimits->limits),
"validating required limits");
@@ -370,29 +376,29 @@
return {futureID};
}
-bool AdapterBase::APIGetFormatCapabilities(wgpu::TextureFormat format,
- FormatCapabilities* capabilities) {
+wgpu::Status AdapterBase::APIGetFormatCapabilities(wgpu::TextureFormat format,
+ FormatCapabilities* capabilities) {
if (!mSupportedFeatures.IsEnabled(wgpu::FeatureName::FormatCapabilities)) {
[[maybe_unused]] bool hadError = mInstance->ConsumedError(
DAWN_VALIDATION_ERROR("Feature FormatCapabilities is not available."));
- return false;
+ return wgpu::Status::Error;
}
DAWN_ASSERT(capabilities != nullptr);
UnpackedPtr<FormatCapabilities> unpacked;
if (mInstance->ConsumedError(ValidateAndUnpack(capabilities), &unpacked)) {
- return false;
+ return wgpu::Status::Error;
}
if (unpacked.Get<DrmFormatCapabilities>() != nullptr &&
!mSupportedFeatures.IsEnabled(wgpu::FeatureName::DrmFormatCapabilities)) {
[[maybe_unused]] bool hadError = mInstance->ConsumedError(
DAWN_VALIDATION_ERROR("Feature DrmFormatCapabilities is not available."));
- return false;
+ return wgpu::Status::Error;
}
mPhysicalDevice->PopulateBackendFormatCapabilities(format, unpacked);
- return true;
+ return wgpu::Status::Success;
}
const TogglesState& AdapterBase::GetTogglesState() const {
diff --git a/src/dawn/native/Adapter.h b/src/dawn/native/Adapter.h
index e11a98b..0404c6a 100644
--- a/src/dawn/native/Adapter.h
+++ b/src/dawn/native/Adapter.h
@@ -60,8 +60,8 @@
// WebGPU API
InstanceBase* APIGetInstance() const;
- bool APIGetLimits(SupportedLimits* limits) const;
- void APIGetProperties(AdapterProperties* properties) const;
+ wgpu::Status APIGetLimits(SupportedLimits* limits) const;
+ wgpu::Status APIGetProperties(AdapterProperties* properties) const;
bool APIHasFeature(wgpu::FeatureName feature) const;
size_t APIEnumerateFeatures(wgpu::FeatureName* features) const;
void APIRequestDevice(const DeviceDescriptor* descriptor,
@@ -72,7 +72,8 @@
Future APIRequestDevice2(const DeviceDescriptor* descriptor,
const WGPURequestDeviceCallbackInfo2& callbackInfo);
DeviceBase* APICreateDevice(const DeviceDescriptor* descriptor = nullptr);
- bool APIGetFormatCapabilities(wgpu::TextureFormat format, FormatCapabilities* capabilities);
+ wgpu::Status APIGetFormatCapabilities(wgpu::TextureFormat format,
+ FormatCapabilities* capabilities);
void SetUseTieredLimits(bool useTieredLimits);
diff --git a/src/dawn/native/DawnNative.cpp b/src/dawn/native/DawnNative.cpp
index cacb74c..71374e6 100644
--- a/src/dawn/native/DawnNative.cpp
+++ b/src/dawn/native/DawnNative.cpp
@@ -89,12 +89,12 @@
return *this;
}
-void Adapter::GetProperties(wgpu::AdapterProperties* properties) const {
- GetProperties(reinterpret_cast<WGPUAdapterProperties*>(properties));
+wgpu::Status Adapter::GetProperties(wgpu::AdapterProperties* properties) const {
+ return GetProperties(reinterpret_cast<WGPUAdapterProperties*>(properties));
}
-void Adapter::GetProperties(WGPUAdapterProperties* properties) const {
- mImpl->APIGetProperties(FromAPI(properties));
+wgpu::Status Adapter::GetProperties(WGPUAdapterProperties* properties) const {
+ return mImpl->APIGetProperties(FromAPI(properties));
}
WGPUAdapter Adapter::Get() const {
@@ -106,7 +106,7 @@
return supportedFeaturesSet.GetEnabledFeatureNames();
}
-bool Adapter::GetLimits(WGPUSupportedLimits* limits) const {
+wgpu::ConvertibleStatus Adapter::GetLimits(WGPUSupportedLimits* limits) const {
return mImpl->APIGetLimits(FromAPI(limits));
}
diff --git a/src/dawn/native/Device.cpp b/src/dawn/native/Device.cpp
index 07b5905..eeae081 100644
--- a/src/dawn/native/Device.cpp
+++ b/src/dawn/native/Device.cpp
@@ -1851,13 +1851,13 @@
}
}
-bool DeviceBase::APIGetLimits(SupportedLimits* limits) const {
+wgpu::Status DeviceBase::APIGetLimits(SupportedLimits* limits) const {
DAWN_ASSERT(limits != nullptr);
InstanceBase* instance = GetAdapter()->GetInstance();
UnpackedPtr<SupportedLimits> unpacked;
if (instance->ConsumedError(ValidateAndUnpack(limits), &unpacked)) {
- return false;
+ return wgpu::Status::Error;
}
limits->limits = mLimits.v1;
@@ -1873,7 +1873,7 @@
}
}
- return true;
+ return wgpu::Status::Success;
}
bool DeviceBase::APIHasFeature(wgpu::FeatureName feature) const {
diff --git a/src/dawn/native/Device.h b/src/dawn/native/Device.h
index 360b1b5..8cef28e 100644
--- a/src/dawn/native/Device.h
+++ b/src/dawn/native/Device.h
@@ -288,7 +288,7 @@
AdapterBase* APIGetAdapter();
QueueBase* APIGetQueue();
- bool APIGetLimits(SupportedLimits* limits) const;
+ wgpu::Status APIGetLimits(SupportedLimits* limits) const;
bool APIHasFeature(wgpu::FeatureName feature) const;
size_t APIEnumerateFeatures(wgpu::FeatureName* features) const;
void APIInjectError(wgpu::ErrorType type, const char* message);
diff --git a/src/dawn/native/Instance.cpp b/src/dawn/native/Instance.cpp
index 847a232..8e97cd3 100644
--- a/src/dawn/native/Instance.cpp
+++ b/src/dawn/native/Instance.cpp
@@ -114,14 +114,14 @@
} // anonymous namespace
-wgpu::Bool APIGetInstanceFeatures(InstanceFeatures* features) {
+wgpu::Status APIGetInstanceFeatures(InstanceFeatures* features) {
if (features->nextInChain != nullptr) {
- return false;
+ return wgpu::Status::Error;
}
features->timedWaitAnyEnable = true;
features->timedWaitAnyMaxCount = kTimedWaitAnyMaxCountDefault;
- return true;
+ return wgpu::Status::Success;
}
InstanceBase* APICreateInstance(const InstanceDescriptor* descriptor) {
diff --git a/src/dawn/native/Instance.h b/src/dawn/native/Instance.h
index 942a8e3..b0e26b3 100644
--- a/src/dawn/native/Instance.h
+++ b/src/dawn/native/Instance.h
@@ -66,7 +66,7 @@
using BackendsArray = ityp::
array<wgpu::BackendType, std::unique_ptr<BackendConnection>, kEnumCount<wgpu::BackendType>>;
-wgpu::Bool APIGetInstanceFeatures(InstanceFeatures* features);
+wgpu::Status APIGetInstanceFeatures(InstanceFeatures* features);
InstanceBase* APICreateInstance(const InstanceDescriptor* descriptor);
// This is called InstanceBase for consistency across the frontend, even if the backends don't
diff --git a/src/dawn/native/SharedBufferMemory.cpp b/src/dawn/native/SharedBufferMemory.cpp
index 510993a..d112b9d 100644
--- a/src/dawn/native/SharedBufferMemory.cpp
+++ b/src/dawn/native/SharedBufferMemory.cpp
@@ -86,15 +86,17 @@
return ObjectType::SharedBufferMemory;
}
-void SharedBufferMemoryBase::APIGetProperties(SharedBufferMemoryProperties* properties) const {
+wgpu::Status SharedBufferMemoryBase::APIGetProperties(
+ SharedBufferMemoryProperties* properties) const {
properties->usage = mProperties.usage;
properties->size = mProperties.size;
UnpackedPtr<SharedBufferMemoryProperties> unpacked;
if (GetDevice()->ConsumedError(ValidateAndUnpack(properties), &unpacked,
"calling %s.GetProperties", this)) {
- return;
+ return wgpu::Status::Error;
}
+ return wgpu::Status::Success;
}
BufferBase* SharedBufferMemoryBase::APICreateBuffer(const BufferDescriptor* descriptor) {
diff --git a/src/dawn/native/SharedBufferMemory.h b/src/dawn/native/SharedBufferMemory.h
index f8e60e1..b4e76ca 100644
--- a/src/dawn/native/SharedBufferMemory.h
+++ b/src/dawn/native/SharedBufferMemory.h
@@ -52,7 +52,7 @@
static SharedBufferMemoryBase* MakeError(DeviceBase* device,
const SharedBufferMemoryDescriptor* descriptor);
- void APIGetProperties(SharedBufferMemoryProperties* properties) const;
+ wgpu::Status APIGetProperties(SharedBufferMemoryProperties* properties) const;
BufferBase* APICreateBuffer(const BufferDescriptor* descriptor);
ObjectType GetType() const override;
diff --git a/src/dawn/native/SharedTextureMemory.cpp b/src/dawn/native/SharedTextureMemory.cpp
index f37a65b..041b3e5 100644
--- a/src/dawn/native/SharedTextureMemory.cpp
+++ b/src/dawn/native/SharedTextureMemory.cpp
@@ -106,10 +106,12 @@
return ObjectType::SharedTextureMemory;
}
-void SharedTextureMemoryBase::APIGetProperties(SharedTextureMemoryProperties* properties) const {
+wgpu::Status SharedTextureMemoryBase::APIGetProperties(
+ SharedTextureMemoryProperties* properties) const {
if (GetDevice()->ConsumedError(GetProperties(properties), "calling %s.GetProperties", this)) {
- return;
+ return wgpu::Status::Error;
}
+ return wgpu::Status::Success;
}
MaybeError SharedTextureMemoryBase::GetProperties(SharedTextureMemoryProperties* properties) const {
diff --git a/src/dawn/native/SharedTextureMemory.h b/src/dawn/native/SharedTextureMemory.h
index 1fb8b14..839f2c8 100644
--- a/src/dawn/native/SharedTextureMemory.h
+++ b/src/dawn/native/SharedTextureMemory.h
@@ -55,7 +55,7 @@
static Ref<SharedTextureMemoryBase> MakeError(DeviceBase* device,
const SharedTextureMemoryDescriptor* descriptor);
- void APIGetProperties(SharedTextureMemoryProperties* properties) const;
+ wgpu::Status APIGetProperties(SharedTextureMemoryProperties* properties) const;
TextureBase* APICreateTexture(const TextureDescriptor* descriptor);
ObjectType GetType() const override;
diff --git a/src/dawn/native/Surface.cpp b/src/dawn/native/Surface.cpp
index 90aced4..b6a931e 100644
--- a/src/dawn/native/Surface.cpp
+++ b/src/dawn/native/Surface.cpp
@@ -607,13 +607,17 @@
}
}
-void Surface::APIGetCapabilities(AdapterBase* adapter, SurfaceCapabilities* capabilities) const {
+wgpu::Status Surface::APIGetCapabilities(AdapterBase* adapter,
+ SurfaceCapabilities* capabilities) const {
MaybeError maybeError = GetCapabilities(adapter, capabilities);
if (!GetCurrentDevice()) {
[[maybe_unused]] bool error = mInstance->ConsumedError(std::move(maybeError));
+ return wgpu::Status::Error;
} else {
- [[maybe_unused]] bool error = GetCurrentDevice()->ConsumedError(
- std::move(maybeError), "calling %s.Configure().", this);
+ return GetCurrentDevice()->ConsumedError(std::move(maybeError), "calling %s.Configure().",
+ this)
+ ? wgpu::Status::Error
+ : wgpu::Status::Success;
}
}
diff --git a/src/dawn/native/Surface.h b/src/dawn/native/Surface.h
index f31d908..9ac666a 100644
--- a/src/dawn/native/Surface.h
+++ b/src/dawn/native/Surface.h
@@ -123,7 +123,7 @@
// Dawn API
void APIConfigure(const SurfaceConfiguration* config);
- void APIGetCapabilities(AdapterBase* adapter, SurfaceCapabilities* capabilities) const;
+ wgpu::Status APIGetCapabilities(AdapterBase* adapter, SurfaceCapabilities* capabilities) const;
void APIGetCurrentTexture(SurfaceTexture* surfaceTexture) const;
wgpu::TextureFormat APIGetPreferredFormat(AdapterBase* adapter) const;
void APIPresent();
diff --git a/src/dawn/tests/end2end/AdapterFormatCapabilitiesVkTests.cpp b/src/dawn/tests/end2end/AdapterFormatCapabilitiesVkTests.cpp
index 516914d..2a72f39 100644
--- a/src/dawn/tests/end2end/AdapterFormatCapabilitiesVkTests.cpp
+++ b/src/dawn/tests/end2end/AdapterFormatCapabilitiesVkTests.cpp
@@ -40,7 +40,7 @@
wgpu::DrmFormatCapabilities drmCapabilities;
capabilities.nextInChain = &drmCapabilities;
- EXPECT_EQ(supported,
+ EXPECT_EQ(supported ? wgpu::Status::Success : wgpu::Status::Error,
adapter.GetFormatCapabilities(wgpu::TextureFormat::RGBA8Unorm, &capabilities));
}
diff --git a/src/dawn/tests/end2end/BasicTests.cpp b/src/dawn/tests/end2end/BasicTests.cpp
index 6be182d..fb75573 100644
--- a/src/dawn/tests/end2end/BasicTests.cpp
+++ b/src/dawn/tests/end2end/BasicTests.cpp
@@ -76,16 +76,16 @@
TEST_P(BasicTests, GetInstanceFeatures) {
wgpu::InstanceFeatures instanceFeatures{};
- bool success = wgpu::GetInstanceFeatures(&instanceFeatures);
- EXPECT_TRUE(success);
+ auto status = wgpu::GetInstanceFeatures(&instanceFeatures);
+ EXPECT_EQ(status, wgpu::Status::Success);
EXPECT_EQ(instanceFeatures.timedWaitAnyEnable, !UsesWire());
EXPECT_EQ(instanceFeatures.timedWaitAnyMaxCount, kTimedWaitAnyMaxCountDefault);
EXPECT_EQ(instanceFeatures.nextInChain, nullptr);
wgpu::ChainedStruct chained{};
instanceFeatures.nextInChain = &chained;
- success = wgpu::GetInstanceFeatures(&instanceFeatures);
- EXPECT_FALSE(success);
+ status = wgpu::GetInstanceFeatures(&instanceFeatures);
+ EXPECT_EQ(status, wgpu::Status::Error);
}
DAWN_INSTANTIATE_TEST(BasicTests,
diff --git a/src/dawn/tests/end2end/ExperimentalSubgroupsTests.cpp b/src/dawn/tests/end2end/ExperimentalSubgroupsTests.cpp
index 37b9e86..ec569bf 100644
--- a/src/dawn/tests/end2end/ExperimentalSubgroupsTests.cpp
+++ b/src/dawn/tests/end2end/ExperimentalSubgroupsTests.cpp
@@ -90,7 +90,7 @@
wgpu::SupportedLimits limits{};
wgpu::DawnExperimentalSubgroupLimits subgroupLimits{};
limits.nextInChain = &subgroupLimits;
- EXPECT_TRUE(device.GetLimits(&limits));
+ EXPECT_EQ(device.GetLimits(&limits), wgpu::Status::Success);
uint32_t maxSubgroupSize = subgroupLimits.maxSubgroupSize;
EXPECT_TRUE(1 <= maxSubgroupSize && maxSubgroupSize <= 128);
// maxSubgroupSize should be a power of 2.
diff --git a/src/dawn/tests/unittests/validation/DeviceValidationTests.cpp b/src/dawn/tests/unittests/validation/DeviceValidationTests.cpp
index a6f04bc..f8179d5 100644
--- a/src/dawn/tests/unittests/validation/DeviceValidationTests.cpp
+++ b/src/dawn/tests/unittests/validation/DeviceValidationTests.cpp
@@ -92,7 +92,7 @@
descriptor.requiredLimits = &limits;
wgpu::SupportedLimits supportedLimits;
- EXPECT_TRUE(adapter.GetLimits(&supportedLimits));
+ EXPECT_EQ(adapter.GetLimits(&supportedLimits), wgpu::Status::Success);
// If we can support better than the default, test below the max.
if (supportedLimits.limits.maxBindGroups > 4u) {
@@ -157,7 +157,7 @@
descriptor.requiredLimits = &limits;
wgpu::SupportedLimits supportedLimits;
- EXPECT_TRUE(adapter.GetLimits(&supportedLimits));
+ EXPECT_EQ(adapter.GetLimits(&supportedLimits), wgpu::Status::Success);
// Test below the min.
limits.limits.minUniformBufferOffsetAlignment =
diff --git a/src/dawn/tests/unittests/wire/WireAdapterTests.cpp b/src/dawn/tests/unittests/wire/WireAdapterTests.cpp
index b865b3e..afcfb03 100644
--- a/src/dawn/tests/unittests/wire/WireAdapterTests.cpp
+++ b/src/dawn/tests/unittests/wire/WireAdapterTests.cpp
@@ -181,7 +181,7 @@
EXPECT_CALL(api, DeviceGetLimits(apiDevice, NotNull()))
.WillOnce(WithArg<1>(Invoke([&](WGPUSupportedLimits* limits) {
*reinterpret_cast<wgpu::SupportedLimits*>(limits) = fakeLimits;
- return true;
+ return WGPUStatus_Success;
})));
EXPECT_CALL(api, DeviceEnumerateFeatures(apiDevice, nullptr))
@@ -215,7 +215,7 @@
device = wgpu::Device::Acquire(cDevice);
wgpu::SupportedLimits limits;
- EXPECT_TRUE(device.GetLimits(&limits));
+ EXPECT_EQ(device.GetLimits(&limits), wgpu::Status::Success);
EXPECT_EQ(limits.limits.maxTextureDimension1D,
fakeLimits.limits.maxTextureDimension1D);
EXPECT_EQ(limits.limits.maxVertexAttributes, fakeLimits.limits.maxVertexAttributes);
@@ -355,7 +355,7 @@
EXPECT_CALL(api, DeviceGetLimits(apiDevice, NotNull()))
.WillOnce(WithArg<1>(Invoke([&](WGPUSupportedLimits* limits) {
*reinterpret_cast<wgpu::SupportedLimits*>(limits) = fakeLimits;
- return true;
+ return WGPUStatus_Success;
})));
EXPECT_CALL(api, DeviceEnumerateFeatures(apiDevice, nullptr))
diff --git a/src/dawn/tests/unittests/wire/WireInstanceTests.cpp b/src/dawn/tests/unittests/wire/WireInstanceTests.cpp
index 4d1b4d1..f92488f 100644
--- a/src/dawn/tests/unittests/wire/WireInstanceTests.cpp
+++ b/src/dawn/tests/unittests/wire/WireInstanceTests.cpp
@@ -145,12 +145,15 @@
EXPECT_CALL(api, AdapterHasFeature(apiAdapter, _)).WillRepeatedly(Return(false));
EXPECT_CALL(api, AdapterGetProperties(apiAdapter, NotNull()))
- .WillOnce(SetArgPointee<1>(fakeProperties));
+ .WillOnce(WithArg<1>(Invoke([&](WGPUAdapterProperties* properties) {
+ *properties = fakeProperties;
+ return WGPUStatus_Success;
+ })));
EXPECT_CALL(api, AdapterGetLimits(apiAdapter, NotNull()))
.WillOnce(WithArg<1>(Invoke([&](WGPUSupportedLimits* limits) {
*limits = fakeLimits;
- return true;
+ return WGPUStatus_Success;
})));
EXPECT_CALL(api, AdapterEnumerateFeatures(apiAdapter, nullptr))
@@ -186,7 +189,7 @@
EXPECT_EQ(properties.adapterType, fakeProperties.adapterType);
WGPUSupportedLimits limits = {};
- EXPECT_TRUE(wgpuAdapterGetLimits(adapter, &limits));
+ EXPECT_EQ(wgpuAdapterGetLimits(adapter, &limits), WGPUStatus_Success);
EXPECT_EQ(limits.limits.maxTextureDimension1D,
fakeLimits.limits.maxTextureDimension1D);
EXPECT_EQ(limits.limits.maxVertexAttributes, fakeLimits.limits.maxVertexAttributes);
@@ -268,7 +271,8 @@
fakeVkProperties;
break;
default:
- FAIL() << "Unexpected chain";
+ ADD_FAILURE() << "Unexpected chain";
+ return WGPUStatus_Error;
}
// update next pointer back to the original since it would be overwritten
// in the switch statement
@@ -276,12 +280,13 @@
chain = next;
}
+ return WGPUStatus_Success;
})));
EXPECT_CALL(api, AdapterGetLimits(apiAdapter, NotNull()))
.WillOnce(WithArg<1>(Invoke([&](WGPUSupportedLimits* limits) {
*limits = {};
- return true;
+ return WGPUStatus_Success;
})));
EXPECT_CALL(api, AdapterEnumerateFeatures(apiAdapter, nullptr))
@@ -372,12 +377,13 @@
properties->architecture = "";
properties->name = "";
properties->driverDescription = "";
+ return WGPUStatus_Success;
})));
EXPECT_CALL(api, AdapterGetLimits(apiAdapter, NotNull()))
.WillOnce(WithArg<1>(Invoke([&](WGPUSupportedLimits* limits) {
*limits = {};
- return true;
+ return WGPUStatus_Success;
})));
EXPECT_CALL(api, AdapterEnumerateFeatures(apiAdapter, nullptr))
diff --git a/src/dawn/tests/unittests/wire/WireTest.cpp b/src/dawn/tests/unittests/wire/WireTest.cpp
index dc02191..2cf9061 100644
--- a/src/dawn/tests/unittests/wire/WireTest.cpp
+++ b/src/dawn/tests/unittests/wire/WireTest.cpp
@@ -105,12 +105,13 @@
properties->architecture = "";
properties->name = "";
properties->driverDescription = "";
+ return WGPUStatus_Success;
})));
EXPECT_CALL(api, AdapterGetLimits(apiAdapter, NotNull()))
.WillOnce(WithArg<1>(Invoke([&](WGPUSupportedLimits* limits) {
*limits = {};
- return true;
+ return WGPUStatus_Success;
})));
EXPECT_CALL(api, AdapterEnumerateFeatures(apiAdapter, nullptr))
@@ -159,7 +160,7 @@
EXPECT_CALL(api, DeviceGetLimits(apiDevice, NotNull()))
.WillOnce(WithArg<1>(Invoke([&](WGPUSupportedLimits* limits) {
*limits = {};
- return true;
+ return WGPUStatus_Success;
})));
EXPECT_CALL(api, DeviceEnumerateFeatures(apiDevice, nullptr))
diff --git a/src/dawn/wire/client/Adapter.cpp b/src/dawn/wire/client/Adapter.cpp
index ccc3dc5..0da876c 100644
--- a/src/dawn/wire/client/Adapter.cpp
+++ b/src/dawn/wire/client/Adapter.cpp
@@ -137,7 +137,7 @@
return ObjectType::Adapter;
}
-bool Adapter::GetLimits(WGPUSupportedLimits* limits) const {
+WGPUStatus Adapter::GetLimits(WGPUSupportedLimits* limits) const {
return mLimitsAndFeatures.GetLimits(limits);
}
@@ -192,7 +192,7 @@
}
}
-void Adapter::GetProperties(WGPUAdapterProperties* properties) const {
+WGPUStatus Adapter::GetProperties(WGPUAdapterProperties* properties) const {
// Loop through the chained struct.
WGPUChainedStructOut* chain = properties->nextInChain;
while (chain != nullptr) {
@@ -251,6 +251,8 @@
properties->driverDescription = ptr;
memcpy(ptr, mProperties.driverDescription, driverDescriptionCLen);
ptr += driverDescriptionCLen;
+
+ return WGPUStatus_Success;
}
void Adapter::RequestDevice(const WGPUDeviceDescriptor* descriptor,
@@ -357,10 +359,10 @@
return nullptr;
}
-bool Adapter::GetFormatCapabilities(WGPUTextureFormat format,
- WGPUFormatCapabilities* capabilities) {
+WGPUStatus Adapter::GetFormatCapabilities(WGPUTextureFormat format,
+ WGPUFormatCapabilities* capabilities) {
dawn::ErrorLog() << "adapter.GetFormatCapabilities not supported with dawn_wire.";
- return false;
+ return WGPUStatus_Error;
}
} // namespace dawn::wire::client
diff --git a/src/dawn/wire/client/Adapter.h b/src/dawn/wire/client/Adapter.h
index 7a89cd1..bb23d0e 100644
--- a/src/dawn/wire/client/Adapter.h
+++ b/src/dawn/wire/client/Adapter.h
@@ -44,13 +44,13 @@
ObjectType GetObjectType() const override;
- bool GetLimits(WGPUSupportedLimits* limits) const;
+ WGPUStatus GetLimits(WGPUSupportedLimits* limits) const;
bool HasFeature(WGPUFeatureName feature) const;
size_t EnumerateFeatures(WGPUFeatureName* features) const;
void SetLimits(const WGPUSupportedLimits* limits);
void SetFeatures(const WGPUFeatureName* features, uint32_t featuresCount);
void SetProperties(const WGPUAdapterProperties* properties);
- void GetProperties(WGPUAdapterProperties* properties) const;
+ WGPUStatus GetProperties(WGPUAdapterProperties* properties) const;
void RequestDevice(const WGPUDeviceDescriptor* descriptor,
WGPURequestDeviceCallback callback,
void* userdata);
@@ -62,7 +62,8 @@
// Unimplementable. Only availale in dawn_native.
WGPUInstance GetInstance() const;
WGPUDevice CreateDevice(const WGPUDeviceDescriptor*);
- bool GetFormatCapabilities(WGPUTextureFormat format, WGPUFormatCapabilities* capabilities);
+ WGPUStatus GetFormatCapabilities(WGPUTextureFormat format,
+ WGPUFormatCapabilities* capabilities);
private:
LimitsAndFeatures mLimitsAndFeatures;
diff --git a/src/dawn/wire/client/Device.cpp b/src/dawn/wire/client/Device.cpp
index 6e132f3..5c94973 100644
--- a/src/dawn/wire/client/Device.cpp
+++ b/src/dawn/wire/client/Device.cpp
@@ -293,7 +293,7 @@
return refCount;
}
-bool Device::GetLimits(WGPUSupportedLimits* limits) const {
+WGPUStatus Device::GetLimits(WGPUSupportedLimits* limits) const {
return mLimitsAndFeatures.GetLimits(limits);
}
diff --git a/src/dawn/wire/client/Device.h b/src/dawn/wire/client/Device.h
index 28418ba..ff93c60 100644
--- a/src/dawn/wire/client/Device.h
+++ b/src/dawn/wire/client/Device.h
@@ -80,7 +80,7 @@
void HandleLogging(WGPULoggingType loggingType, const char* message);
void HandleDeviceLost(WGPUDeviceLostReason reason, const char* message);
- bool GetLimits(WGPUSupportedLimits* limits) const;
+ WGPUStatus GetLimits(WGPUSupportedLimits* limits) const;
bool HasFeature(WGPUFeatureName feature) const;
size_t EnumerateFeatures(WGPUFeatureName* features) const;
void SetLimits(const WGPUSupportedLimits* limits);
diff --git a/src/dawn/wire/client/Instance.cpp b/src/dawn/wire/client/Instance.cpp
index c4ed227..acfdc8c 100644
--- a/src/dawn/wire/client/Instance.cpp
+++ b/src/dawn/wire/client/Instance.cpp
@@ -366,14 +366,14 @@
// Free-standing API functions
-DAWN_WIRE_EXPORT WGPUBool wgpuDawnWireClientGetInstanceFeatures(WGPUInstanceFeatures* features) {
+DAWN_WIRE_EXPORT WGPUStatus wgpuDawnWireClientGetInstanceFeatures(WGPUInstanceFeatures* features) {
if (features->nextInChain != nullptr) {
- return false;
+ return WGPUStatus_Error;
}
features->timedWaitAnyEnable = false;
features->timedWaitAnyMaxCount = dawn::kTimedWaitAnyMaxCountDefault;
- return true;
+ return WGPUStatus_Success;
}
DAWN_WIRE_EXPORT WGPUInstance
diff --git a/src/dawn/wire/client/LimitsAndFeatures.cpp b/src/dawn/wire/client/LimitsAndFeatures.cpp
index 0fe29d5..74454a0 100644
--- a/src/dawn/wire/client/LimitsAndFeatures.cpp
+++ b/src/dawn/wire/client/LimitsAndFeatures.cpp
@@ -36,7 +36,7 @@
LimitsAndFeatures::~LimitsAndFeatures() = default;
-bool LimitsAndFeatures::GetLimits(WGPUSupportedLimits* limits) const {
+WGPUStatus LimitsAndFeatures::GetLimits(WGPUSupportedLimits* limits) const {
DAWN_ASSERT(limits != nullptr);
auto* originalNextInChain = limits->nextInChain;
*limits = mLimits;
@@ -55,12 +55,12 @@
}
default:
// Fail if unknown sType found.
- return false;
+ return WGPUStatus_Error;
}
// Restore the chain.
*chain = originalChainedStructOut;
}
- return true;
+ return WGPUStatus_Success;
}
bool LimitsAndFeatures::HasFeature(WGPUFeatureName feature) const {
diff --git a/src/dawn/wire/client/LimitsAndFeatures.h b/src/dawn/wire/client/LimitsAndFeatures.h
index 6c6e6c7..bb2ee95 100644
--- a/src/dawn/wire/client/LimitsAndFeatures.h
+++ b/src/dawn/wire/client/LimitsAndFeatures.h
@@ -38,7 +38,7 @@
LimitsAndFeatures();
~LimitsAndFeatures();
- bool GetLimits(WGPUSupportedLimits* limits) const;
+ WGPUStatus GetLimits(WGPUSupportedLimits* limits) const;
bool HasFeature(WGPUFeatureName feature) const;
size_t EnumerateFeatures(WGPUFeatureName* features) const;
diff --git a/src/dawn/wire/client/Surface.cpp b/src/dawn/wire/client/Surface.cpp
index d72592e..0979838 100644
--- a/src/dawn/wire/client/Surface.cpp
+++ b/src/dawn/wire/client/Surface.cpp
@@ -65,9 +65,11 @@
return WGPUTextureFormat_BGRA8Unorm;
}
-void Surface::GetCapabilities(WGPUAdapter adapter, WGPUSurfaceCapabilities* capabilities) const {
+WGPUStatus Surface::GetCapabilities(WGPUAdapter adapter,
+ WGPUSurfaceCapabilities* capabilities) const {
// TODO(dawn:2320): Implement this
dawn::ErrorLog() << "surface.GetCapabilities not supported yet with dawn_wire.";
+ return WGPUStatus_Error;
}
void Surface::GetCurrentTexture(WGPUSurfaceTexture* surfaceTexture) {
diff --git a/src/dawn/wire/client/Surface.h b/src/dawn/wire/client/Surface.h
index f153c63..a95a700 100644
--- a/src/dawn/wire/client/Surface.h
+++ b/src/dawn/wire/client/Surface.h
@@ -46,7 +46,7 @@
WGPUTextureFormat GetPreferredFormat(WGPUAdapter adapter) const;
- void GetCapabilities(WGPUAdapter adapter, WGPUSurfaceCapabilities* capabilities) const;
+ WGPUStatus GetCapabilities(WGPUAdapter adapter, WGPUSurfaceCapabilities* capabilities) const;
void GetCurrentTexture(WGPUSurfaceTexture* surfaceTexture);