Move EnumClassBitmasks from wgpu to dawn namespace
The EnumClassBitmasks is used by dawn/api_cpp.h that needs to be common.
Define a macro to export the operators from dawn to other various namespace.
BUG=dawn:1201
Change-Id: I20badd54e844fead6ecf12546a2c9e0afa2fd83f
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/71900
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Junwei Fu <junwei.fu@intel.com>
diff --git a/generator/templates/api_cpp.h b/generator/templates/api_cpp.h
index e351a0a..c70e827 100644
--- a/generator/templates/api_cpp.h
+++ b/generator/templates/api_cpp.h
@@ -46,14 +46,6 @@
{% endfor %}
- {% for type in by_category["bitmask"] %}
- template<>
- struct IsDawnBitmask<{{as_cppType(type.name)}}> {
- static constexpr bool enable = true;
- };
-
- {% endfor %}
-
{% for type in by_category["function pointer"] %}
using {{as_cppType(type.name)}} = {{as_cType(type.name)}};
{% endfor %}
@@ -242,6 +234,20 @@
};
{% endfor %}
+
+ // The operators of EnumClassBitmmasks in the dawn:: namespace need to be imported
+ // in the {{metadata.namespace}} namespace for Argument Dependent Lookup.
+ DAWN_IMPORT_BITMASK_OPERATORS
} // namespace {{metadata.namespace}}
+namespace dawn {
+ {% for type in by_category["bitmask"] %}
+ template<>
+ struct IsDawnBitmask<{{metadata.namespace}}::{{as_cppType(type.name)}}> {
+ static constexpr bool enable = true;
+ };
+
+ {% endfor %}
+} // namespace dawn
+
#endif // {{API}}_CPP_H_
diff --git a/src/dawn_native/EnumClassBitmasks.h b/src/dawn_native/EnumClassBitmasks.h
index 3227cd2..addaab9 100644
--- a/src/dawn_native/EnumClassBitmasks.h
+++ b/src/dawn_native/EnumClassBitmasks.h
@@ -19,8 +19,9 @@
namespace dawn_native {
- // EnumClassBitmmasks is a WebGPU helper in the wgpu:: namespace.
+ // EnumClassBitmmasks is a helper in the dawn:: namespace.
// Re-export it in the dawn_native namespace.
+ DAWN_IMPORT_BITMASK_OPERATORS
// Specify this for usage with EnumMaskIterator
template <typename T>
@@ -28,16 +29,6 @@
static constexpr unsigned value = 0;
};
- using wgpu::operator|;
- using wgpu::operator&;
- using wgpu::operator^;
- using wgpu::operator~;
- using wgpu::operator&=;
- using wgpu::operator|=;
- using wgpu::operator^=;
-
- using wgpu::HasZeroOrOneBits;
-
template <typename T>
constexpr bool HasOneBit(T value) {
return HasZeroOrOneBits(value) && value != T(0);
diff --git a/src/dawn_native/Format.h b/src/dawn_native/Format.h
index f2e83ff..2f604d3 100644
--- a/src/dawn_native/Format.h
+++ b/src/dawn_native/Format.h
@@ -129,13 +129,13 @@
} // namespace dawn_native
-namespace wgpu {
+namespace dawn {
template <>
struct IsDawnBitmask<dawn_native::SampleTypeBit> {
static constexpr bool enable = true;
};
-} // namespace wgpu
+} // namespace dawn
#endif // DAWNNATIVE_FORMAT_H_
diff --git a/src/dawn_native/Subresource.h b/src/dawn_native/Subresource.h
index 643b7bc..454e17c 100644
--- a/src/dawn_native/Subresource.h
+++ b/src/dawn_native/Subresource.h
@@ -100,13 +100,13 @@
} // namespace dawn_native
-namespace wgpu {
+namespace dawn {
template <>
struct IsDawnBitmask<dawn_native::Aspect> {
static constexpr bool enable = true;
};
-} // namespace wgpu
+} // namespace dawn
#endif // DAWNNATIVE_SUBRESOURCE_H_
diff --git a/src/include/dawn/EnumClassBitmasks.h b/src/include/dawn/EnumClassBitmasks.h
index 93d2be4..3947f00 100644
--- a/src/include/dawn/EnumClassBitmasks.h
+++ b/src/include/dawn/EnumClassBitmasks.h
@@ -17,7 +17,19 @@
#include <type_traits>
-namespace wgpu {
+// The operators in dawn:: namespace need be introduced into other namespaces with
+// using-declarations for C++ Argument Dependent Lookup to work.
+#define DAWN_IMPORT_BITMASK_OPERATORS \
+ using dawn::operator|; \
+ using dawn::operator&; \
+ using dawn::operator^; \
+ using dawn::operator~; \
+ using dawn::operator&=; \
+ using dawn::operator|=; \
+ using dawn::operator^=; \
+ using dawn::HasZeroOrOneBits;
+
+namespace dawn {
template <typename T>
struct IsDawnBitmask {
@@ -139,6 +151,6 @@
return (static_cast<Integral>(value) & (static_cast<Integral>(value) - 1)) == 0;
}
-} // namespace wgpu
+} // namespace dawn
#endif // DAWN_ENUM_CLASS_BITMASKS_H_
diff --git a/src/tests/end2end/FirstIndexOffsetTests.cpp b/src/tests/end2end/FirstIndexOffsetTests.cpp
index 7da6b28..5ab3ca3 100644
--- a/src/tests/end2end/FirstIndexOffsetTests.cpp
+++ b/src/tests/end2end/FirstIndexOffsetTests.cpp
@@ -34,12 +34,12 @@
Instance = 0x0000002,
};
-namespace wgpu {
+namespace dawn {
template <>
struct IsDawnBitmask<CheckIndex> {
static constexpr bool enable = true;
};
-} // namespace wgpu
+} // namespace dawn
class FirstIndexOffsetTests : public DawnTest {
public:
diff --git a/src/tests/unittests/EnumClassBitmasksTests.cpp b/src/tests/unittests/EnumClassBitmasksTests.cpp
index c87f09f..26849bd 100644
--- a/src/tests/unittests/EnumClassBitmasksTests.cpp
+++ b/src/tests/unittests/EnumClassBitmasksTests.cpp
@@ -16,7 +16,7 @@
#include "dawn/EnumClassBitmasks.h"
-namespace wgpu {
+namespace dawn {
enum class Color : uint32_t {
R = 1,
@@ -80,14 +80,14 @@
TEST(BitmaskTests, ZeroOrOneBits) {
Color zero = static_cast<Color>(0);
- ASSERT_TRUE(wgpu::HasZeroOrOneBits(zero));
- ASSERT_TRUE(wgpu::HasZeroOrOneBits(Color::R));
- ASSERT_TRUE(wgpu::HasZeroOrOneBits(Color::G));
- ASSERT_TRUE(wgpu::HasZeroOrOneBits(Color::B));
- ASSERT_TRUE(wgpu::HasZeroOrOneBits(Color::A));
- ASSERT_FALSE(wgpu::HasZeroOrOneBits(static_cast<Color>(Color::R | Color::G)));
- ASSERT_FALSE(wgpu::HasZeroOrOneBits(static_cast<Color>(Color::G | Color::B)));
- ASSERT_FALSE(wgpu::HasZeroOrOneBits(static_cast<Color>(Color::B | Color::A)));
+ ASSERT_TRUE(HasZeroOrOneBits(zero));
+ ASSERT_TRUE(HasZeroOrOneBits(Color::R));
+ ASSERT_TRUE(HasZeroOrOneBits(Color::G));
+ ASSERT_TRUE(HasZeroOrOneBits(Color::B));
+ ASSERT_TRUE(HasZeroOrOneBits(Color::A));
+ ASSERT_FALSE(HasZeroOrOneBits(static_cast<Color>(Color::R | Color::G)));
+ ASSERT_FALSE(HasZeroOrOneBits(static_cast<Color>(Color::G | Color::B)));
+ ASSERT_FALSE(HasZeroOrOneBits(static_cast<Color>(Color::B | Color::A)));
}
-} // namespace wgpu
+} // namespace dawn
diff --git a/src/tests/unittests/EnumMaskIteratorTests.cpp b/src/tests/unittests/EnumMaskIteratorTests.cpp
index 46c351d..d5e0bb5 100644
--- a/src/tests/unittests/EnumMaskIteratorTests.cpp
+++ b/src/tests/unittests/EnumMaskIteratorTests.cpp
@@ -31,14 +31,14 @@
} // namespace dawn_native
-namespace wgpu {
+namespace dawn {
template <>
struct IsDawnBitmask<dawn_native::TestAspect> {
static constexpr bool enable = true;
};
-} // namespace wgpu
+} // namespace dawn
namespace dawn_native {
diff --git a/src/tests/unittests/MathTests.cpp b/src/tests/unittests/MathTests.cpp
index cd2a50c..031c716 100644
--- a/src/tests/unittests/MathTests.cpp
+++ b/src/tests/unittests/MathTests.cpp
@@ -18,6 +18,7 @@
#include "dawn/EnumClassBitmasks.h"
#include <cmath>
+#include "dawn/webgpu_cpp.h"
namespace wgpu {
enum class TestEnum {
@@ -27,10 +28,12 @@
};
} // namespace wgpu
-template <>
-struct wgpu::IsDawnBitmask<wgpu::TestEnum> {
- static constexpr bool enable = true;
-};
+namespace dawn {
+ template <>
+ struct IsDawnBitmask<wgpu::TestEnum> {
+ static constexpr bool enable = true;
+ };
+} // namespace dawn
// Tests for ScanForward
TEST(Math, ScanForward) {