Renumber webgpu.h enums to reserve 0 except for undefined

Bug: 42241166
Change-Id: I3955c8c2ea92c584aeab5eb04edc5effe331a7be
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/192867
Reviewed-by: Loko Kung <lokokung@google.com>
Commit-Queue: Austin Eng <enga@chromium.org>
diff --git a/generator/templates/dawn/wire/WireCmd.cpp b/generator/templates/dawn/wire/WireCmd.cpp
index 0c122d2..0ff5801 100644
--- a/generator/templates/dawn/wire/WireCmd.cpp
+++ b/generator/templates/dawn/wire/WireCmd.cpp
@@ -566,8 +566,6 @@
                         break;
                     }
                 {% endfor %}
-                // Explicitly list the Invalid enum. MSVC complains about no case labels.
-                case WGPUSType_Invalid:
                 default:
                     // Invalid enum. Reserve space just for the transfer header (sType and hasNext).
                     result += WireAlignSizeof<WGPUChainedStructTransfer>();
@@ -602,18 +600,16 @@
                         chainedStruct = chainedStruct->next;
                     } break;
                 {% endfor %}
-                // Explicitly list the Invalid enum. MSVC complains about no case labels.
-                case WGPUSType_Invalid:
                 default: {
                     // Invalid enum. Serialize just the transfer header with Invalid as the sType.
                     // TODO(crbug.com/dawn/369): Unknown sTypes are silently discarded.
-                    if (chainedStruct->sType != WGPUSType_Invalid) {
+                    if (chainedStruct->sType != WGPUSType(0)) {
                         dawn::WarningLog() << "Unknown sType " << chainedStruct->sType << " discarded.";
                     }
 
                     WGPUChainedStructTransfer* transfer;
                     WIRE_TRY(buffer->Next(&transfer));
-                    transfer->sType = WGPUSType_Invalid;
+                    transfer->sType = WGPUSType(0);
                     transfer->hasNext = chainedStruct->next != nullptr;
 
                     // Still move on in case there are valid structs after this.
@@ -658,12 +654,10 @@
                         hasNext = transfer->chain.hasNext;
                     } break;
                 {% endfor %}
-                // Explicitly list the Invalid enum. MSVC complains about no case labels.
-                case WGPUSType_Invalid:
                 default: {
                     // Invalid enum. Deserialize just the transfer header with Invalid as the sType.
                     // TODO(crbug.com/dawn/369): Unknown sTypes are silently discarded.
-                    if (sType != WGPUSType_Invalid) {
+                    if (sType != WGPUSType(0)) {
                         dawn::WarningLog() << "Unknown sType " << sType << " discarded.";
                     }
 
@@ -672,7 +666,7 @@
 
                     {{ChainedStruct}}* outStruct;
                     WIRE_TRY(GetSpace(allocator, 1u, &outStruct));
-                    outStruct->sType = WGPUSType_Invalid;
+                    outStruct->sType = WGPUSType(0);
                     outStruct->next = nullptr;
 
                     // Still move on in case there are valid structs after this.
diff --git a/src/dawn/dawn.json b/src/dawn/dawn.json
index d96372b..3f1bf5d 100644
--- a/src/dawn/dawn.json
+++ b/src/dawn/dawn.json
@@ -108,11 +108,11 @@
         "category": "enum",
         "emscripten_no_enum_table": true,
         "values": [
-            {"value": 0, "name": "success"},
-            {"value": 1, "name": "instance dropped"},
-            {"value": 2, "name": "unavailable"},
-            {"value": 3, "name": "error"},
-            {"value": 4, "name": "unknown"}
+            {"value": 1, "name": "success"},
+            {"value": 2, "name": "instance dropped"},
+            {"value": 3, "name": "unavailable"},
+            {"value": 4, "name": "error"},
+            {"value": 5, "name": "unknown"}
         ]
     },
     "adapter": {
@@ -734,27 +734,27 @@
         "category": "enum",
         "emscripten_no_enum_table": true,
         "values": [
-            {"value": 0, "name": "success"},
-            {"value": 1, "name": "instance dropped"},
-            {"value": 2, "name": "validation error"},
-            {"value": 3, "name": "unknown"},
-            {"value": 4, "name": "device lost"},
-            {"value": 5, "name": "destroyed before callback"},
-            {"value": 6, "name": "unmapped before callback"},
-            {"value": 7, "name": "mapping already pending"},
-            {"value": 8, "name": "offset out of range"},
-            {"value": 9, "name": "size out of range"}
+            {"value": 1, "name": "success"},
+            {"value": 2, "name": "instance dropped"},
+            {"value": 3, "name": "validation error"},
+            {"value": 4, "name": "unknown"},
+            {"value": 5, "name": "device lost"},
+            {"value": 6, "name": "destroyed before callback"},
+            {"value": 7, "name": "unmapped before callback"},
+            {"value": 8, "name": "mapping already pending"},
+            {"value": 9, "name": "offset out of range"},
+            {"value": 10, "name": "size out of range"}
         ]
     },
     "map async status": {
         "category": "enum",
         "emscripten_no_enum_table": true,
         "values": [
-            {"value": 0, "name": "success"},
-            {"value": 1, "name": "instance dropped"},
-            {"value": 2, "name": "error"},
-            {"value": 3, "name": "aborted"},
-            {"value": 4, "name": "unknown"}
+            {"value": 1, "name": "success"},
+            {"value": 2, "name": "instance dropped"},
+            {"value": 3, "name": "error"},
+            {"value": 4, "name": "aborted"},
+            {"value": 5, "name": "unknown"}
         ]
     },
     "buffer map state": {
@@ -1019,11 +1019,11 @@
     "compilation info request status": {
         "category": "enum",
         "values": [
-            {"value": 0, "name": "success"},
-            {"value": 1, "name": "instance dropped"},
-            {"value": 2, "name": "error"},
-            {"value": 3, "name": "device lost"},
-            {"value": 4, "name": "unknown"}
+            {"value": 1, "name": "success"},
+            {"value": 2, "name": "instance dropped"},
+            {"value": 3, "name": "error"},
+            {"value": 4, "name": "device lost"},
+            {"value": 5, "name": "unknown"}
         ]
     },
     "compilation message": {
@@ -1131,11 +1131,11 @@
     "composite alpha mode": {
         "category": "enum",
         "values": [
-            {"value": 0, "name": "auto"},
-            {"value": 1, "name": "opaque"},
-            {"value": 2, "name": "premultiplied"},
-            {"value": 3, "name": "unpremultiplied"},
-            {"value": 4, "name": "inherit"}
+            {"value": 1, "name": "auto"},
+            {"value": 2, "name": "opaque"},
+            {"value": 3, "name": "premultiplied"},
+            {"value": 4, "name": "unpremultiplied"},
+            {"value": 5, "name": "inherit"}
         ]
     },
     "compute pass timestamp writes": {
@@ -1246,13 +1246,13 @@
         "category": "enum",
         "emscripten_no_enum_table": true,
         "values": [
-            {"value": 0, "name": "success"},
-            {"value": 1, "name": "instance dropped"},
-            {"value": 2, "name": "validation error"},
-            {"value": 3, "name": "internal error"},
-            {"value": 4, "name": "device lost"},
-            {"value": 5, "name": "device destroyed"},
-            {"value": 6, "name": "unknown"}
+            {"value": 1, "name": "success"},
+            {"value": 2, "name": "instance dropped"},
+            {"value": 3, "name": "validation error"},
+            {"value": 4, "name": "internal error"},
+            {"value": 5, "name": "device lost"},
+            {"value": 6, "name": "device destroyed"},
+            {"value": 7, "name": "unknown"}
         ]
     },
     "create render pipeline async callback": {
@@ -1727,8 +1727,8 @@
         "category": "enum",
         "emscripten_no_enum_table": true,
         "values": [
-            {"value": 0, "name": "success"},
-            {"value": 1, "name": "instance dropped"}
+            {"value": 1, "name": "success"},
+            {"value": 2, "name": "instance dropped"}
         ]
     },
     "pop error scope callback": {
@@ -1846,12 +1846,12 @@
         "category": "enum",
         "emscripten_no_enum_table": true,
         "values": [
-            {"value": 0, "name": "no error"},
-            {"value": 1, "name": "validation"},
-            {"value": 2, "name": "out of memory"},
-            {"value": 3, "name": "internal"},
-            {"value": 4, "name": "unknown"},
-            {"value": 5, "name": "device lost"}
+            {"value": 1, "name": "no error"},
+            {"value": 2, "name": "validation"},
+            {"value": 3, "name": "out of memory"},
+            {"value": 4, "name": "internal"},
+            {"value": 5, "name": "unknown"},
+            {"value": 6, "name": "device lost"}
         ]
     },
     "logging type": {
@@ -1910,10 +1910,10 @@
         "tags": ["dawn"],
         "_comment": "ANGLEs are clockwise rotation degrees and not trigonometric.",
         "values": [
-            {"value": 0, "name": "rotate 0 degrees"},
-            {"value": 1, "name": "rotate 90 degrees"},
-            {"value": 2, "name": "rotate 180 degrees"},
-            {"value": 3, "name": "rotate 270 degrees"}
+            {"value": 1, "name": "rotate 0 degrees"},
+            {"value": 2, "name": "rotate 90 degrees"},
+            {"value": 3, "name": "rotate 180 degrees"},
+            {"value": 4, "name": "rotate 270 degrees"}
         ]
     },
     "external texture descriptor": {
@@ -1943,8 +1943,8 @@
     "status": {
         "category": "enum",
         "values": [
-            {"value": 0, "name": "success"},
-            {"value": 1, "name": "error"}
+            {"value": 1, "name": "success"},
+            {"value": 2, "name": "error"}
         ]
     },
     "shared buffer memory": {
@@ -2629,12 +2629,12 @@
         "_comment": "TODO(crbug.com/dawn/2053): This could possibly be [[nodiscard]].",
         "emscripten_no_enum_table": true,
         "values": [
-            {"value": 0, "name": "success"},
-            {"value": 1, "name": "timed out"},
-            {"value": 2, "name": "unsupported timeout"},
-            {"value": 3, "name": "unsupported count"},
-            {"value": 4, "name": "unsupported mixed sources"},
-            {"value": 5, "name": "unknown"}
+            {"value": 1, "name": "success"},
+            {"value": 2, "name": "timed out"},
+            {"value": 3, "name": "unsupported timeout"},
+            {"value": 4, "name": "unsupported count"},
+            {"value": 5, "name": "unsupported mixed sources"},
+            {"value": 6, "name": "unknown"}
         ]
     },
     "future wait info": {
@@ -2807,10 +2807,10 @@
         "category": "enum",
         "emscripten_no_enum_table": true,
         "values": [
-            {"value": 0, "name": "fifo"},
-            {"value": 1, "name": "fifo relaxed"},
-            {"value": 2, "name": "immediate"},
-            {"value": 3, "name": "mailbox"}
+            {"value": 1, "name": "fifo"},
+            {"value": 2, "name": "fifo relaxed"},
+            {"value": 3, "name": "immediate"},
+            {"value": 4, "name": "mailbox"}
         ]
     },
     "programmable stage descriptor": {
@@ -3007,11 +3007,11 @@
         "category": "enum",
         "emscripten_no_enum_table": true,
         "values": [
-            {"value": 0, "name": "success"},
-            {"value": 1, "name": "instance dropped"},
-            {"value": 2, "name": "error"},
-            {"value": 3, "name": "unknown"},
-            {"value": 4, "name": "device lost"}
+            {"value": 1, "name": "success"},
+            {"value": 2, "name": "instance dropped"},
+            {"value": 3, "name": "error"},
+            {"value": 4, "name": "unknown"},
+            {"value": 5, "name": "device lost"}
         ]
     },
 
@@ -3458,10 +3458,10 @@
         "category": "enum",
         "emscripten_no_enum_table": true,
         "values": [
-            {"value": 0, "name": "success"},
-            {"value": 1, "name": "instance dropped"},
-            {"value": 2, "name": "error"},
-            {"value": 3, "name": "unknown"}
+            {"value": 1, "name": "success"},
+            {"value": 2, "name": "instance dropped"},
+            {"value": 3, "name": "error"},
+            {"value": 4, "name": "unknown"}
         ]
     },
 
@@ -3918,7 +3918,6 @@
         "category": "enum",
         "emscripten_no_enum_table": true,
         "values": [
-            {"value": 0, "name": "invalid", "valid": false},
             {"value": 1, "name": "surface descriptor from metal layer", "tags": ["native"]},
             {"value": 2, "name": "surface descriptor from windows HWND", "tags": ["native"]},
             {"value": 3, "name": "surface descriptor from xlib window", "tags": ["native"]},
@@ -4058,13 +4057,13 @@
     "surface get current texture status": {
         "category": "enum",
         "values": [
-            {"value": 0, "name": "success"},
-            {"value": 1, "name": "timeout"},
-            {"value": 2, "name": "outdated"},
-            {"value": 3, "name": "lost"},
-            {"value": 4, "name": "out of memory"},
-            {"value": 5, "name": "device lost"},
-            {"value": 6, "name": "error"}
+            {"value": 1, "name": "success"},
+            {"value": 2, "name": "timeout"},
+            {"value": 3, "name": "outdated"},
+            {"value": 4, "name": "lost"},
+            {"value": 5, "name": "out of memory"},
+            {"value": 6, "name": "device lost"},
+            {"value": 7, "name": "error"}
         ]
     },
     "texture aspect": {
diff --git a/src/dawn/native/ChainUtils.h b/src/dawn/native/ChainUtils.h
index a22ceeb..7594137 100644
--- a/src/dawn/native/ChainUtils.h
+++ b/src/dawn/native/ChainUtils.h
@@ -308,7 +308,7 @@
 ResultOrError<wgpu::SType> UnpackedPtr<T>::ValidateBranches() const {
     using Validator = detail::BranchesValidator<UnpackedPtr<T>, Branches...>;
 
-    wgpu::SType match = wgpu::SType::Invalid;
+    wgpu::SType match = wgpu::SType(0u);
     if (Validator::Validate(*this, mBitset, match)) {
         return match;
     }
diff --git a/src/dawn/native/ShaderModule.cpp b/src/dawn/native/ShaderModule.cpp
index 719b7b2..5b62e47 100644
--- a/src/dawn/native/ShaderModule.cpp
+++ b/src/dawn/native/ShaderModule.cpp
@@ -1097,7 +1097,7 @@
                     (descriptor.ValidateBranches<
                         Branch<ShaderModuleWGSLDescriptor, ShaderModuleCompilationOptions>>()));
 #endif
-    DAWN_ASSERT(moduleType != wgpu::SType::Invalid);
+    DAWN_ASSERT(moduleType != wgpu::SType(0u));
 
     ScopedTintICEHandler scopedICEHandler(device);
 
diff --git a/src/dawn/tests/end2end/WindowSurfaceTests.cpp b/src/dawn/tests/end2end/WindowSurfaceTests.cpp
index 0112f7c..5c03f04 100644
--- a/src/dawn/tests/end2end/WindowSurfaceTests.cpp
+++ b/src/dawn/tests/end2end/WindowSurfaceTests.cpp
@@ -119,7 +119,7 @@
 // Test that a chained descriptor with a garbage sType produces an error.
 TEST_F(WindowSurfaceInstanceTests, BadChainedDescriptors) {
     wgpu::ChainedStruct chainedDescriptor;
-    chainedDescriptor.sType = wgpu::SType::Invalid;  // The default but we set it for clarity.
+    chainedDescriptor.sType = wgpu::SType(0u);  // The default but we set it for clarity.
 
     wgpu::SurfaceDescriptor descriptor;
     descriptor.nextInChain = &chainedDescriptor;
diff --git a/src/dawn/tests/unittests/validation/BindGroupValidationTests.cpp b/src/dawn/tests/unittests/validation/BindGroupValidationTests.cpp
index 91dee40..8239de7 100644
--- a/src/dawn/tests/unittests/validation/BindGroupValidationTests.cpp
+++ b/src/dawn/tests/unittests/validation/BindGroupValidationTests.cpp
@@ -154,7 +154,7 @@
 
     // Check that nextInChain != nullptr is an error.
     wgpu::ChainedStruct chainedDescriptor;
-    chainedDescriptor.sType = wgpu::SType::Invalid;
+    chainedDescriptor.sType = wgpu::SType(0u);
     descriptor.nextInChain = &chainedDescriptor;
     ASSERT_DEVICE_ERROR(device.CreateBindGroup(&descriptor));
 }
diff --git a/src/dawn/tests/unittests/wire/WireExtensionTests.cpp b/src/dawn/tests/unittests/wire/WireExtensionTests.cpp
index f0215f1..6487eb6 100644
--- a/src/dawn/tests/unittests/wire/WireExtensionTests.cpp
+++ b/src/dawn/tests/unittests/wire/WireExtensionTests.cpp
@@ -149,7 +149,7 @@
     FlushClient();
 
     WGPUPrimitiveDepthClipControl clientExt = {};
-    clientExt.chain.sType = WGPUSType_Invalid;
+    clientExt.chain.sType = WGPUSType(0);
     clientExt.chain.next = nullptr;
 
     WGPURenderPipelineDescriptor renderPipelineDesc = {};
@@ -160,7 +160,7 @@
     EXPECT_CALL(api, DeviceCreateRenderPipeline(apiDevice, NotNull()))
         .WillOnce(Invoke(
             [&](Unused, const WGPURenderPipelineDescriptor* serverDesc) -> WGPURenderPipeline {
-                EXPECT_EQ(serverDesc->primitive.nextInChain->sType, WGPUSType_Invalid);
+                EXPECT_EQ(serverDesc->primitive.nextInChain->sType, WGPUSType(0));
                 EXPECT_EQ(serverDesc->primitive.nextInChain->next, nullptr);
                 return api.GetNewRenderPipeline();
             }));
@@ -187,7 +187,7 @@
     EXPECT_CALL(api, DeviceCreateRenderPipeline(apiDevice, NotNull()))
         .WillOnce(Invoke(
             [&](Unused, const WGPURenderPipelineDescriptor* serverDesc) -> WGPURenderPipeline {
-                EXPECT_EQ(serverDesc->primitive.nextInChain->sType, WGPUSType_Invalid);
+                EXPECT_EQ(serverDesc->primitive.nextInChain->sType, WGPUSType(0));
                 EXPECT_EQ(serverDesc->primitive.nextInChain->next, nullptr);
                 return api.GetNewRenderPipeline();
             }));
@@ -204,7 +204,7 @@
     FlushClient();
 
     WGPUPrimitiveDepthClipControl clientExt2 = {};
-    clientExt2.chain.sType = WGPUSType_Invalid;
+    clientExt2.chain.sType = WGPUSType(0);
     clientExt2.chain.next = nullptr;
 
     WGPUPrimitiveDepthClipControl clientExt1 = {};
@@ -225,7 +225,7 @@
                 EXPECT_EQ(ext->chain.sType, clientExt1.chain.sType);
                 EXPECT_EQ(ext->unclippedDepth, true);
 
-                EXPECT_EQ(ext->chain.next->sType, WGPUSType_Invalid);
+                EXPECT_EQ(ext->chain.next->sType, WGPUSType(0));
                 EXPECT_EQ(ext->chain.next->next, nullptr);
                 return api.GetNewRenderPipeline();
             }));
@@ -240,7 +240,7 @@
     EXPECT_CALL(api, DeviceCreateRenderPipeline(apiDevice, NotNull()))
         .WillOnce(Invoke(
             [&](Unused, const WGPURenderPipelineDescriptor* serverDesc) -> WGPURenderPipeline {
-                EXPECT_EQ(serverDesc->primitive.nextInChain->sType, WGPUSType_Invalid);
+                EXPECT_EQ(serverDesc->primitive.nextInChain->sType, WGPUSType(0));
 
                 const auto* ext = reinterpret_cast<const WGPUPrimitiveDepthClipControl*>(
                     serverDesc->primitive.nextInChain->next);