Make Dawn's feature name casing match WebGPU (- instead of _)

Bug: dawn:550
Change-Id: I1017b4a2e93a75925e8762f2d09ace9a8d5d7b49
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/65802
Reviewed-by: François Beaufort <beaufort.francois@gmail.com>
Reviewed-by: François Beaufort <fbeaufort@google.com>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn_native/Features.cpp b/src/dawn_native/Features.cpp
index 7b0e8a9..2ec7ec3 100644
--- a/src/dawn_native/Features.cpp
+++ b/src/dawn_native/Features.cpp
@@ -32,7 +32,7 @@
 
         static constexpr FeatureEnumAndInfoList kFeatureNameAndInfoList = {
             {{Feature::TextureCompressionBC,
-              {"texture_compression_bc", "Support Block Compressed (BC) texture formats",
+              {"texture-compression-bc", "Support Block Compressed (BC) texture formats",
                "https://bugs.chromium.org/p/dawn/issues/detail?id=42"},
               &WGPUDeviceProperties::textureCompressionBC},
              {Feature::TextureCompressionETC2,
@@ -48,20 +48,20 @@
                "https://bugs.chromium.org/p/dawn/issues/detail?id=955"},
               &WGPUDeviceProperties::textureCompressionASTC},
              {Feature::ShaderFloat16,
-              {"shader_float16",
+              {"shader-float16",
                "Support 16bit float arithmetic and declarations in uniform and storage buffers",
                "https://bugs.chromium.org/p/dawn/issues/detail?id=426"},
               &WGPUDeviceProperties::shaderFloat16},
              {Feature::PipelineStatisticsQuery,
-              {"pipeline_statistics_query", "Support Pipeline Statistics Query",
+              {"pipeline-statistics-query", "Support Pipeline Statistics Query",
                "https://bugs.chromium.org/p/dawn/issues/detail?id=434"},
               &WGPUDeviceProperties::pipelineStatisticsQuery},
              {Feature::TimestampQuery,
-              {"timestamp_query", "Support Timestamp Query",
+              {"timestamp-query", "Support Timestamp Query",
                "https://bugs.chromium.org/p/dawn/issues/detail?id=434"},
               &WGPUDeviceProperties::timestampQuery},
              {Feature::DepthClamping,
-              {"depth_clamping", "Clamp depth to [0, 1] in NDC space instead of clipping",
+              {"depth-clamping", "Clamp depth to [0, 1] in NDC space instead of clipping",
                "https://bugs.chromium.org/p/dawn/issues/detail?id=716"},
               &WGPUDeviceProperties::depthClamping},
              {Feature::DawnInternalUsages,
@@ -72,7 +72,7 @@
                "dawn_internal_usages.md"},
               &WGPUDeviceProperties::dawnInternalUsages},
              {Feature::MultiPlanarFormats,
-              {"multiplanar_formats",
+              {"multiplanar-formats",
                "Import and use multi-planar texture formats with per plane views",
                "https://bugs.chromium.org/p/dawn/issues/detail?id=551"},
               &WGPUDeviceProperties::multiPlanarFormats}}};
@@ -145,6 +145,23 @@
         if (iter != mFeatureNameToEnumMap.cend()) {
             return kFeatureNameAndInfoList[static_cast<size_t>(iter->second)].feature;
         }
+
+        // TODO(dawn:550): Remove this fallback logic when Chromium is updated.
+        constexpr std::array<std::pair<const char*, const char*>, 6>
+            kReplacementsForDeprecatedNames = {{
+                {"texture_compression_bc", "texture-compression-bc"},
+                {"depth_clamping", "depth-clamping"},
+                {"pipeline_statistics_query", "pipeline-statistics-query"},
+                {"shader_float16", "shader-float16"},
+                {"timestamp_query", "timestamp-query"},
+                {"multiplanar_formats", "multiplanar-formats"},
+            }};
+        for (const auto& replacement : kReplacementsForDeprecatedNames) {
+            if (strcmp(featureName, replacement.first) == 0) {
+                return FeatureNameToEnum(replacement.second);
+            }
+        }
+
         return Feature::InvalidEnum;
     }
 
diff --git a/src/dawn_native/Format.h b/src/dawn_native/Format.h
index f509cfe..1e27987 100644
--- a/src/dawn_native/Format.h
+++ b/src/dawn_native/Format.h
@@ -26,7 +26,7 @@
 
 // About multi-planar formats.
 //
-// Dawn supports additional multi-planar formats when the multiplanar_formats extension is enabled.
+// Dawn supports additional multi-planar formats when the multiplanar-formats extension is enabled.
 // When enabled, Dawn treats planar data as sub-resources (ie. 1 sub-resource == 1 view == 1 plane).
 // A multi-planar format name encodes the channel mapping and order of planes. For example,
 // R8BG8Biplanar420Unorm is YUV 4:2:0 where Plane 0 = R8, and Plane 1 = BG8.
diff --git a/src/dawn_node/binding/GPUAdapter.cpp b/src/dawn_node/binding/GPUAdapter.cpp
index d7b1d14..82fc7b1 100644
--- a/src/dawn_node/binding/GPUAdapter.cpp
+++ b/src/dawn_node/binding/GPUAdapter.cpp
@@ -109,16 +109,16 @@
         for (auto required : descriptor.requiredFeatures) {
             switch (required) {
                 case interop::GPUFeatureName::kDepthClamping:
-                    desc.requiredFeatures.emplace_back("depth_clamping");
+                    desc.requiredFeatures.emplace_back("depth-clamping");
                     continue;
                 case interop::GPUFeatureName::kPipelineStatisticsQuery:
-                    desc.requiredFeatures.emplace_back("pipeline_statistics_query");
+                    desc.requiredFeatures.emplace_back("pipeline-statistics-query");
                     continue;
                 case interop::GPUFeatureName::kTextureCompressionBc:
-                    desc.requiredFeatures.emplace_back("texture_compression_bc");
+                    desc.requiredFeatures.emplace_back("texture-compression-bc");
                     continue;
                 case interop::GPUFeatureName::kTimestampQuery:
-                    desc.requiredFeatures.emplace_back("timestamp_query");
+                    desc.requiredFeatures.emplace_back("timestamp-query");
                     continue;
                 case interop::GPUFeatureName::kDepth24UnormStencil8:
                 case interop::GPUFeatureName::kDepth32FloatStencil8:
diff --git a/src/tests/end2end/BufferZeroInitTests.cpp b/src/tests/end2end/BufferZeroInitTests.cpp
index f37ac91..dc414c6 100644
--- a/src/tests/end2end/BufferZeroInitTests.cpp
+++ b/src/tests/end2end/BufferZeroInitTests.cpp
@@ -48,8 +48,8 @@
   protected:
     std::vector<const char*> GetRequiredFeatures() override {
         std::vector<const char*> requiredFeatures = {};
-        if (SupportsFeatures({"timestamp_query"})) {
-            requiredFeatures.push_back("timestamp_query");
+        if (SupportsFeatures({"timestamp-query"})) {
+            requiredFeatures.push_back("timestamp-query");
         }
         return requiredFeatures;
     }
@@ -1315,7 +1315,7 @@
     DAWN_SUPPRESS_TEST_IF(IsMetal() && IsAMD());
 
     // Skip if timestamp feature is not supported on device
-    DAWN_TEST_UNSUPPORTED_IF(!SupportsFeatures({"timestamp_query"}));
+    DAWN_TEST_UNSUPPORTED_IF(!SupportsFeatures({"timestamp-query"}));
 
     // crbug.com/dawn/940: Does not work on Mac 11.0+. Backend validation changed.
     DAWN_TEST_UNSUPPORTED_IF(IsMacOS() && !IsMacOS(10));
diff --git a/src/tests/end2end/CompressedTextureFormatTests.cpp b/src/tests/end2end/CompressedTextureFormatTests.cpp
index c756743..0d0f769 100644
--- a/src/tests/end2end/CompressedTextureFormatTests.cpp
+++ b/src/tests/end2end/CompressedTextureFormatTests.cpp
@@ -42,9 +42,9 @@
   protected:
     std::vector<const char*> GetRequiredFeatures() override {
         const wgpu::TextureFormat format = GetParam().mTextureFormat;
-        if (utils::IsBCTextureFormat(format) && SupportsFeatures({"texture_compression_bc"})) {
+        if (utils::IsBCTextureFormat(format) && SupportsFeatures({"texture-compression-bc"})) {
             mIsFormatSupported = true;
-            return {"texture_compression_bc"};
+            return {"texture-compression-bc"};
         }
         if (utils::IsETC2TextureFormat(format) && SupportsFeatures({"texture-compression-etc2"})) {
             mIsFormatSupported = true;
@@ -1150,11 +1150,11 @@
 class CompressedTextureFormatSpecificTest : public DawnTest {
   protected:
     std::vector<const char*> GetRequiredFeatures() override {
-        mIsBCFormatSupported = SupportsFeatures({"texture_compression_bc"});
+        mIsBCFormatSupported = SupportsFeatures({"texture-compression-bc"});
 
         std::vector<const char*> features;
         if (mIsBCFormatSupported) {
-            features.emplace_back("texture_compression_bc");
+            features.emplace_back("texture-compression-bc");
         }
         return features;
     }
diff --git a/src/tests/end2end/D3D12VideoViewsTests.cpp b/src/tests/end2end/D3D12VideoViewsTests.cpp
index 6d793e9..28a7e39 100644
--- a/src/tests/end2end/D3D12VideoViewsTests.cpp
+++ b/src/tests/end2end/D3D12VideoViewsTests.cpp
@@ -69,12 +69,12 @@
         }
 
         std::vector<const char*> GetRequiredFeatures() override {
-            mIsMultiPlanarFormatsSupported = SupportsFeatures({"multiplanar_formats"});
+            mIsMultiPlanarFormatsSupported = SupportsFeatures({"multiplanar-formats"});
             if (!mIsMultiPlanarFormatsSupported) {
                 return {};
             }
 
-            return {"multiplanar_formats"};
+            return {"multiplanar-formats"};
         }
 
         bool IsMultiPlanarFormatsSupported() const {
diff --git a/src/tests/end2end/NonzeroTextureCreationTests.cpp b/src/tests/end2end/NonzeroTextureCreationTests.cpp
index c00cceb..494e03b 100644
--- a/src/tests/end2end/NonzeroTextureCreationTests.cpp
+++ b/src/tests/end2end/NonzeroTextureCreationTests.cpp
@@ -77,15 +77,15 @@
 
         std::vector<const char*> GetRequiredFeatures() override {
             if (GetParam().mFormat == wgpu::TextureFormat::BC1RGBAUnorm &&
-                SupportsFeatures({"texture_compression_bc"})) {
-                return {"texture_compression_bc"};
+                SupportsFeatures({"texture-compression-bc"})) {
+                return {"texture-compression-bc"};
             }
             return {};
         }
 
         void Run() {
             DAWN_TEST_UNSUPPORTED_IF(GetParam().mFormat == wgpu::TextureFormat::BC1RGBAUnorm &&
-                                     !SupportsFeatures({"texture_compression_bc"}));
+                                     !SupportsFeatures({"texture-compression-bc"}));
 
             // TODO(crbug.com/dawn/667): Work around the fact that some platforms do not support
             // reading from Snorm textures.
diff --git a/src/tests/end2end/PrimitiveStateTests.cpp b/src/tests/end2end/PrimitiveStateTests.cpp
index 1bc48bb..c9a4c16 100644
--- a/src/tests/end2end/PrimitiveStateTests.cpp
+++ b/src/tests/end2end/PrimitiveStateTests.cpp
@@ -24,7 +24,7 @@
   protected:
     void SetUp() override {
         DawnTest::SetUp();
-        DAWN_TEST_UNSUPPORTED_IF(!SupportsFeatures({"depth_clamping"}));
+        DAWN_TEST_UNSUPPORTED_IF(!SupportsFeatures({"depth-clamping"}));
 
         wgpu::TextureDescriptor renderTargetDescriptor;
         renderTargetDescriptor.size = {kRTSize, kRTSize};
@@ -69,8 +69,8 @@
 
     std::vector<const char*> GetRequiredFeatures() override {
         std::vector<const char*> requiredFeatures = {};
-        if (SupportsFeatures({"depth_clamping"})) {
-            requiredFeatures.push_back("depth_clamping");
+        if (SupportsFeatures({"depth-clamping"})) {
+            requiredFeatures.push_back("depth-clamping");
         }
         return requiredFeatures;
     }
diff --git a/src/tests/end2end/QueryTests.cpp b/src/tests/end2end/QueryTests.cpp
index 20bd392..6a6708d 100644
--- a/src/tests/end2end/QueryTests.cpp
+++ b/src/tests/end2end/QueryTests.cpp
@@ -454,13 +454,13 @@
         DawnTest::SetUp();
 
         // Skip all tests if pipeline statistics feature is not supported
-        DAWN_TEST_UNSUPPORTED_IF(!SupportsFeatures({"pipeline_statistics_query"}));
+        DAWN_TEST_UNSUPPORTED_IF(!SupportsFeatures({"pipeline-statistics-query"}));
     }
 
     std::vector<const char*> GetRequiredFeatures() override {
         std::vector<const char*> requiredFeatures = {};
-        if (SupportsFeatures({"pipeline_statistics_query"})) {
-            requiredFeatures.push_back("pipeline_statistics_query");
+        if (SupportsFeatures({"pipeline-statistics-query"})) {
+            requiredFeatures.push_back("pipeline-statistics-query");
         }
 
         return requiredFeatures;
@@ -523,13 +523,13 @@
         DawnTest::SetUp();
 
         // Skip all tests if timestamp feature is not supported
-        DAWN_TEST_UNSUPPORTED_IF(!SupportsFeatures({"timestamp_query"}));
+        DAWN_TEST_UNSUPPORTED_IF(!SupportsFeatures({"timestamp-query"}));
     }
 
     std::vector<const char*> GetRequiredFeatures() override {
         std::vector<const char*> requiredFeatures = {};
-        if (SupportsFeatures({"timestamp_query"})) {
-            requiredFeatures.push_back("timestamp_query");
+        if (SupportsFeatures({"timestamp-query"})) {
+            requiredFeatures.push_back("timestamp-query");
         }
         return requiredFeatures;
     }
diff --git a/src/tests/end2end/ShaderFloat16Tests.cpp b/src/tests/end2end/ShaderFloat16Tests.cpp
index cc16086..f675b29 100644
--- a/src/tests/end2end/ShaderFloat16Tests.cpp
+++ b/src/tests/end2end/ShaderFloat16Tests.cpp
@@ -20,12 +20,12 @@
 class ShaderFloat16Tests : public DawnTest {
   protected:
     std::vector<const char*> GetRequiredFeatures() override {
-        mIsShaderFloat16Supported = SupportsFeatures({"shader_float16"});
+        mIsShaderFloat16Supported = SupportsFeatures({"shader-float16"});
         if (!mIsShaderFloat16Supported) {
             return {};
         }
 
-        return {"shader_float16"};
+        return {"shader-float16"};
     }
 
     bool IsShaderFloat16Supported() const {
diff --git a/src/tests/end2end/TextureZeroInitTests.cpp b/src/tests/end2end/TextureZeroInitTests.cpp
index 07799b5..fd22849 100644
--- a/src/tests/end2end/TextureZeroInitTests.cpp
+++ b/src/tests/end2end/TextureZeroInitTests.cpp
@@ -1720,12 +1720,12 @@
     }
 
     std::vector<const char*> GetRequiredFeatures() override {
-        mIsBCFormatSupported = SupportsFeatures({"texture_compression_bc"});
+        mIsBCFormatSupported = SupportsFeatures({"texture-compression-bc"});
         if (!mIsBCFormatSupported) {
             return {};
         }
 
-        return {"texture_compression_bc"};
+        return {"texture-compression-bc"};
     }
 
     bool IsBCFormatSupported() const {
diff --git a/src/tests/unittests/validation/CopyCommandsValidationTests.cpp b/src/tests/unittests/validation/CopyCommandsValidationTests.cpp
index c6e166a..a086e14 100644
--- a/src/tests/unittests/validation/CopyCommandsValidationTests.cpp
+++ b/src/tests/unittests/validation/CopyCommandsValidationTests.cpp
@@ -2047,7 +2047,7 @@
   protected:
     WGPUDevice CreateTestDevice() override {
         dawn_native::DeviceDescriptor descriptor;
-        descriptor.requiredFeatures = {"texture_compression_bc", "texture-compression-etc2",
+        descriptor.requiredFeatures = {"texture-compression-bc", "texture-compression-etc2",
                                        "texture-compression-astc"};
         return adapter.CreateDevice(&descriptor);
     }
diff --git a/src/tests/unittests/validation/QueryValidationTests.cpp b/src/tests/unittests/validation/QueryValidationTests.cpp
index c877a36..7f2d0c2 100644
--- a/src/tests/unittests/validation/QueryValidationTests.cpp
+++ b/src/tests/unittests/validation/QueryValidationTests.cpp
@@ -226,7 +226,7 @@
   protected:
     WGPUDevice CreateTestDevice() override {
         dawn_native::DeviceDescriptor descriptor;
-        descriptor.requiredFeatures.push_back("timestamp_query");
+        descriptor.requiredFeatures.push_back("timestamp-query");
         descriptor.forceDisabledToggles.push_back("disallow_unsafe_apis");
         return adapter.CreateDevice(&descriptor);
     }
@@ -430,7 +430,7 @@
   protected:
     WGPUDevice CreateTestDevice() override {
         dawn_native::DeviceDescriptor descriptor;
-        descriptor.requiredFeatures.push_back("pipeline_statistics_query");
+        descriptor.requiredFeatures.push_back("pipeline-statistics-query");
         // TODO(crbug.com/1177506): Pipeline statistic query is an unsafe API, disable disallowing
         // unsafe APIs to test it.
         descriptor.forceDisabledToggles.push_back("disallow_unsafe_apis");
diff --git a/src/tests/unittests/validation/QueueWriteTextureValidationTests.cpp b/src/tests/unittests/validation/QueueWriteTextureValidationTests.cpp
index 6efdb0e..cbe8bb8 100644
--- a/src/tests/unittests/validation/QueueWriteTextureValidationTests.cpp
+++ b/src/tests/unittests/validation/QueueWriteTextureValidationTests.cpp
@@ -558,7 +558,7 @@
       protected:
         WGPUDevice CreateTestDevice() override {
             dawn_native::DeviceDescriptor descriptor;
-            descriptor.requiredFeatures = {"texture_compression_bc", "texture-compression-etc2",
+            descriptor.requiredFeatures = {"texture-compression-bc", "texture-compression-etc2",
                                            "texture-compression-astc"};
             return adapter.CreateDevice(&descriptor);
         }
diff --git a/src/tests/unittests/validation/RenderPipelineValidationTests.cpp b/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
index 911cd50..da8f66c 100644
--- a/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
+++ b/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
@@ -1125,7 +1125,7 @@
   protected:
     WGPUDevice CreateTestDevice() override {
         dawn_native::DeviceDescriptor descriptor;
-        descriptor.requiredFeatures = {"depth_clamping"};
+        descriptor.requiredFeatures = {"depth-clamping"};
         return adapter.CreateDevice(&descriptor);
     }
 };
diff --git a/src/tests/unittests/validation/TextureValidationTests.cpp b/src/tests/unittests/validation/TextureValidationTests.cpp
index 56b4990..e9180a9 100644
--- a/src/tests/unittests/validation/TextureValidationTests.cpp
+++ b/src/tests/unittests/validation/TextureValidationTests.cpp
@@ -569,7 +569,7 @@
       protected:
         WGPUDevice CreateTestDevice() override {
             dawn_native::DeviceDescriptor descriptor;
-            descriptor.requiredFeatures = {"texture_compression_bc", "texture-compression-etc2",
+            descriptor.requiredFeatures = {"texture-compression-bc", "texture-compression-etc2",
                                            "texture-compression-astc"};
             return adapter.CreateDevice(&descriptor);
         }
diff --git a/src/tests/unittests/validation/UnsafeAPIValidationTests.cpp b/src/tests/unittests/validation/UnsafeAPIValidationTests.cpp
index 6e22dcc..7bb9e19 100644
--- a/src/tests/unittests/validation/UnsafeAPIValidationTests.cpp
+++ b/src/tests/unittests/validation/UnsafeAPIValidationTests.cpp
@@ -110,8 +110,8 @@
   protected:
     WGPUDevice CreateTestDevice() override {
         dawn_native::DeviceDescriptor descriptor;
-        descriptor.requiredFeatures.push_back("pipeline_statistics_query");
-        descriptor.requiredFeatures.push_back("timestamp_query");
+        descriptor.requiredFeatures.push_back("pipeline-statistics-query");
+        descriptor.requiredFeatures.push_back("timestamp-query");
         descriptor.forceEnabledToggles.push_back("disallow_unsafe_apis");
         return adapter.CreateDevice(&descriptor);
     }
diff --git a/src/tests/unittests/validation/VideoViewsValidationTests.cpp b/src/tests/unittests/validation/VideoViewsValidationTests.cpp
index b799901..7c8c5f5 100644
--- a/src/tests/unittests/validation/VideoViewsValidationTests.cpp
+++ b/src/tests/unittests/validation/VideoViewsValidationTests.cpp
@@ -22,7 +22,7 @@
       protected:
         WGPUDevice CreateTestDevice() override {
             dawn_native::DeviceDescriptor descriptor;
-            descriptor.requiredFeatures = {"multiplanar_formats"};
+            descriptor.requiredFeatures = {"multiplanar-formats"};
             return adapter.CreateDevice(&descriptor);
         }
 
diff --git a/src/tests/white_box/D3D12ResourceHeapTests.cpp b/src/tests/white_box/D3D12ResourceHeapTests.cpp
index 5586082..e944ce2 100644
--- a/src/tests/white_box/D3D12ResourceHeapTests.cpp
+++ b/src/tests/white_box/D3D12ResourceHeapTests.cpp
@@ -27,12 +27,12 @@
     }
 
     std::vector<const char*> GetRequiredFeatures() override {
-        mIsBCFormatSupported = SupportsFeatures({"texture_compression_bc"});
+        mIsBCFormatSupported = SupportsFeatures({"texture-compression-bc"});
         if (!mIsBCFormatSupported) {
             return {};
         }
 
-        return {"texture_compression_bc"};
+        return {"texture-compression-bc"};
     }
 
     bool IsBCFormatSupported() const {