Default initialize all descriptors

Some dawn_unittests crash on some configurations because the
uninitialized |label| member crashed string serialization.
Default initialize all descriptors to avoid this problem.

Bug: none
Change-Id: I6ea1851ebb6f54690a28ba396e0beaa85d8670cc
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/16260
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@google.com>
Commit-Queue: Austin Eng <enga@chromium.org>
diff --git a/examples/CHelloTriangle.cpp b/examples/CHelloTriangle.cpp
index 0d36090..73c3cdf 100644
--- a/examples/CHelloTriangle.cpp
+++ b/examples/CHelloTriangle.cpp
@@ -29,9 +29,7 @@
     queue = wgpuDeviceCreateQueue(device);
 
     {
-        WGPUSwapChainDescriptor descriptor;
-        descriptor.nextInChain = nullptr;
-        descriptor.label = nullptr;
+        WGPUSwapChainDescriptor descriptor = {};
         descriptor.implementation = GetSwapChainImplementation();
         swapchain = wgpuDeviceCreateSwapChain(device, nullptr, &descriptor);
     }
@@ -58,28 +56,23 @@
         utils::CreateShaderModule(device, utils::SingleShaderStage::Fragment, fs).Release();
 
     {
-        WGPURenderPipelineDescriptor descriptor;
-        descriptor.label = nullptr;
-        descriptor.nextInChain = nullptr;
+        WGPURenderPipelineDescriptor descriptor = {};
 
-        descriptor.vertexStage.nextInChain = nullptr;
         descriptor.vertexStage.module = vsModule;
         descriptor.vertexStage.entryPoint = "main";
 
-        WGPUProgrammableStageDescriptor fragmentStage;
-        fragmentStage.nextInChain = nullptr;
+        WGPUProgrammableStageDescriptor fragmentStage = {};
         fragmentStage.module = fsModule;
         fragmentStage.entryPoint = "main";
         descriptor.fragmentStage = &fragmentStage;
 
         descriptor.sampleCount = 1;
 
-        WGPUBlendDescriptor blendDescriptor;
+        WGPUBlendDescriptor blendDescriptor = {};
         blendDescriptor.operation = WGPUBlendOperation_Add;
         blendDescriptor.srcFactor = WGPUBlendFactor_One;
         blendDescriptor.dstFactor = WGPUBlendFactor_One;
-        WGPUColorStateDescriptor colorStateDescriptor;
-        colorStateDescriptor.nextInChain = nullptr;
+        WGPUColorStateDescriptor colorStateDescriptor = {};
         colorStateDescriptor.format = swapChainFormat;
         colorStateDescriptor.alphaBlend = blendDescriptor;
         colorStateDescriptor.colorBlend = blendDescriptor;
@@ -88,22 +81,18 @@
         descriptor.colorStateCount = 1;
         descriptor.colorStates = &colorStateDescriptor;
 
-        WGPUPipelineLayoutDescriptor pl;
-        pl.nextInChain = nullptr;
-        pl.label = nullptr;
+        WGPUPipelineLayoutDescriptor pl = {};
         pl.bindGroupLayoutCount = 0;
         pl.bindGroupLayouts = nullptr;
         descriptor.layout = wgpuDeviceCreatePipelineLayout(device, &pl);
 
-        WGPUVertexStateDescriptor vertexState;
-        vertexState.nextInChain = nullptr;
+        WGPUVertexStateDescriptor vertexState = {};
         vertexState.indexFormat = WGPUIndexFormat_Uint32;
         vertexState.vertexBufferCount = 0;
         vertexState.vertexBuffers = nullptr;
         descriptor.vertexState = &vertexState;
 
-        WGPURasterizationStateDescriptor rasterizationState;
-        rasterizationState.nextInChain = nullptr;
+        WGPURasterizationStateDescriptor rasterizationState = {};
         rasterizationState.frontFace = WGPUFrontFace_CCW;
         rasterizationState.cullMode = WGPUCullMode_None;
         rasterizationState.depthBias = 0;
@@ -126,10 +115,8 @@
 
 void frame() {
     WGPUTextureView backbufferView = wgpuSwapChainGetCurrentTextureView(swapchain);
-    WGPURenderPassDescriptor renderpassInfo;
-    renderpassInfo.nextInChain = nullptr;
-    renderpassInfo.label = nullptr;
-    WGPURenderPassColorAttachmentDescriptor colorAttachment;
+    WGPURenderPassDescriptor renderpassInfo = {};
+    WGPURenderPassColorAttachmentDescriptor colorAttachment = {};
     {
         colorAttachment.attachment = backbufferView;
         colorAttachment.resolveTarget = nullptr;
diff --git a/src/fuzzers/DawnWireServerFuzzer.cpp b/src/fuzzers/DawnWireServerFuzzer.cpp
index 9e3cbd6..aa0da42 100644
--- a/src/fuzzers/DawnWireServerFuzzer.cpp
+++ b/src/fuzzers/DawnWireServerFuzzer.cpp
@@ -52,9 +52,7 @@
     WGPUSwapChain ErrorDeviceCreateSwapChain(WGPUDevice device,
                                              WGPUSurface surface,
                                              const WGPUSwapChainDescriptor*) {
-        WGPUSwapChainDescriptor desc;
-        desc.nextInChain = nullptr;
-        desc.label = nullptr;
+        WGPUSwapChainDescriptor desc = {};
         // A 0 implementation will trigger a swapchain creation error.
         desc.implementation = 0;
         return sOriginalDeviceCreateSwapChain(device, surface, &desc);
diff --git a/src/tests/end2end/BufferTests.cpp b/src/tests/end2end/BufferTests.cpp
index 427216b..e80747c 100644
--- a/src/tests/end2end/BufferTests.cpp
+++ b/src/tests/end2end/BufferTests.cpp
@@ -392,8 +392,7 @@
       }
 
       wgpu::CreateBufferMappedResult CreateBufferMapped(wgpu::BufferUsage usage, uint64_t size) {
-          wgpu::BufferDescriptor descriptor;
-          descriptor.nextInChain = nullptr;
+          wgpu::BufferDescriptor descriptor = {};
           descriptor.size = size;
           descriptor.usage = usage;
 
@@ -414,8 +413,7 @@
       template <WGPUBufferMapAsyncStatus expectedStatus = WGPUBufferMapAsyncStatus_Success>
       wgpu::CreateBufferMappedResult CreateBufferMappedAsyncAndWait(wgpu::BufferUsage usage,
                                                                     uint64_t size) {
-          wgpu::BufferDescriptor descriptor;
-          descriptor.nextInChain = nullptr;
+          wgpu::BufferDescriptor descriptor = {};
           descriptor.size = size;
           descriptor.usage = usage;
 
diff --git a/src/tests/end2end/DeviceLostTests.cpp b/src/tests/end2end/DeviceLostTests.cpp
index c450274..10afcd2 100644
--- a/src/tests/end2end/DeviceLostTests.cpp
+++ b/src/tests/end2end/DeviceLostTests.cpp
@@ -178,10 +178,9 @@
 TEST_P(DeviceLostTest, CreateComputePipelineFails) {
     SetCallbackAndLoseForTesting();
 
-    wgpu::ComputePipelineDescriptor descriptor;
+    wgpu::ComputePipelineDescriptor descriptor = {};
     descriptor.layout = nullptr;
     descriptor.computeStage.module = nullptr;
-    descriptor.nextInChain = nullptr;
     ASSERT_DEVICE_ERROR(device.CreateComputePipeline(&descriptor));
 }
 
@@ -218,8 +217,7 @@
 TEST_P(DeviceLostTest, CreateSwapChainFails) {
     SetCallbackAndLoseForTesting();
 
-    wgpu::SwapChainDescriptor descriptor;
-    descriptor.nextInChain = nullptr;
+    wgpu::SwapChainDescriptor descriptor = {};
     ASSERT_DEVICE_ERROR(device.CreateSwapChain(nullptr, &descriptor));
 }
 
diff --git a/src/tests/unittests/wire/WireArgumentTests.cpp b/src/tests/unittests/wire/WireArgumentTests.cpp
index f9c55b6..21d5aaf 100644
--- a/src/tests/unittests/wire/WireArgumentTests.cpp
+++ b/src/tests/unittests/wire/WireArgumentTests.cpp
@@ -48,8 +48,7 @@
 // Test that the wire is able to send arrays of numerical values
 TEST_F(WireArgumentTests, ValueArrayArgument) {
     // Create a bindgroup.
-    WGPUBindGroupLayoutDescriptor bglDescriptor;
-    bglDescriptor.nextInChain = nullptr;
+    WGPUBindGroupLayoutDescriptor bglDescriptor = {};
     bglDescriptor.bindingCount = 0;
     bglDescriptor.bindings = nullptr;
 
@@ -57,8 +56,7 @@
     WGPUBindGroupLayout apiBgl = api.GetNewBindGroupLayout();
     EXPECT_CALL(api, DeviceCreateBindGroupLayout(apiDevice, _)).WillOnce(Return(apiBgl));
 
-    WGPUBindGroupDescriptor bindGroupDescriptor;
-    bindGroupDescriptor.nextInChain = nullptr;
+    WGPUBindGroupDescriptor bindGroupDescriptor = {};
     bindGroupDescriptor.layout = bgl;
     bindGroupDescriptor.bindingCount = 0;
     bindGroupDescriptor.bindings = nullptr;
@@ -97,35 +95,31 @@
 // Test that the wire is able to send C strings
 TEST_F(WireArgumentTests, CStringArgument) {
     // Create shader module
-    WGPUShaderModuleDescriptor vertexDescriptor;
-    vertexDescriptor.nextInChain = nullptr;
+    WGPUShaderModuleDescriptor vertexDescriptor = {};
     vertexDescriptor.codeSize = 0;
     WGPUShaderModule vsModule = wgpuDeviceCreateShaderModule(device, &vertexDescriptor);
     WGPUShaderModule apiVsModule = api.GetNewShaderModule();
     EXPECT_CALL(api, DeviceCreateShaderModule(apiDevice, _)).WillOnce(Return(apiVsModule));
 
     // Create the color state descriptor
-    WGPUBlendDescriptor blendDescriptor;
+    WGPUBlendDescriptor blendDescriptor = {};
     blendDescriptor.operation = WGPUBlendOperation_Add;
     blendDescriptor.srcFactor = WGPUBlendFactor_One;
     blendDescriptor.dstFactor = WGPUBlendFactor_One;
-    WGPUColorStateDescriptor colorStateDescriptor;
-    colorStateDescriptor.nextInChain = nullptr;
+    WGPUColorStateDescriptor colorStateDescriptor = {};
     colorStateDescriptor.format = WGPUTextureFormat_RGBA8Unorm;
     colorStateDescriptor.alphaBlend = blendDescriptor;
     colorStateDescriptor.colorBlend = blendDescriptor;
     colorStateDescriptor.writeMask = WGPUColorWriteMask_All;
 
     // Create the input state
-    WGPUVertexStateDescriptor vertexState;
-    vertexState.nextInChain = nullptr;
+    WGPUVertexStateDescriptor vertexState = {};
     vertexState.indexFormat = WGPUIndexFormat_Uint32;
     vertexState.vertexBufferCount = 0;
     vertexState.vertexBuffers = nullptr;
 
     // Create the rasterization state
-    WGPURasterizationStateDescriptor rasterizationState;
-    rasterizationState.nextInChain = nullptr;
+    WGPURasterizationStateDescriptor rasterizationState = {};
     rasterizationState.frontFace = WGPUFrontFace_CCW;
     rasterizationState.cullMode = WGPUCullMode_None;
     rasterizationState.depthBias = 0;
@@ -133,14 +127,13 @@
     rasterizationState.depthBiasClamp = 0.0;
 
     // Create the depth-stencil state
-    WGPUStencilStateFaceDescriptor stencilFace;
+    WGPUStencilStateFaceDescriptor stencilFace = {};
     stencilFace.compare = WGPUCompareFunction_Always;
     stencilFace.failOp = WGPUStencilOperation_Keep;
     stencilFace.depthFailOp = WGPUStencilOperation_Keep;
     stencilFace.passOp = WGPUStencilOperation_Keep;
 
-    WGPUDepthStencilStateDescriptor depthStencilState;
-    depthStencilState.nextInChain = nullptr;
+    WGPUDepthStencilStateDescriptor depthStencilState = {};
     depthStencilState.format = WGPUTextureFormat_Depth24PlusStencil8;
     depthStencilState.depthWriteEnabled = false;
     depthStencilState.depthCompare = WGPUCompareFunction_Always;
@@ -150,8 +143,7 @@
     depthStencilState.stencilWriteMask = 0xff;
 
     // Create the pipeline layout
-    WGPUPipelineLayoutDescriptor layoutDescriptor;
-    layoutDescriptor.nextInChain = nullptr;
+    WGPUPipelineLayoutDescriptor layoutDescriptor = {};
     layoutDescriptor.bindGroupLayoutCount = 0;
     layoutDescriptor.bindGroupLayouts = nullptr;
     WGPUPipelineLayout layout = wgpuDeviceCreatePipelineLayout(device, &layoutDescriptor);
@@ -159,15 +151,12 @@
     EXPECT_CALL(api, DeviceCreatePipelineLayout(apiDevice, _)).WillOnce(Return(apiLayout));
 
     // Create pipeline
-    WGPURenderPipelineDescriptor pipelineDescriptor;
-    pipelineDescriptor.nextInChain = nullptr;
+    WGPURenderPipelineDescriptor pipelineDescriptor = {};
 
-    pipelineDescriptor.vertexStage.nextInChain = nullptr;
     pipelineDescriptor.vertexStage.module = vsModule;
     pipelineDescriptor.vertexStage.entryPoint = "main";
 
-    WGPUProgrammableStageDescriptor fragmentStage;
-    fragmentStage.nextInChain = nullptr;
+    WGPUProgrammableStageDescriptor fragmentStage = {};
     fragmentStage.module = vsModule;
     fragmentStage.entryPoint = "main";
     pipelineDescriptor.fragmentStage = &fragmentStage;
@@ -204,8 +193,7 @@
     WGPUCommandEncoder apiEncoder = api.GetNewCommandEncoder();
     EXPECT_CALL(api, DeviceCreateCommandEncoder(apiDevice, nullptr)).WillOnce(Return(apiEncoder));
 
-    WGPUBufferDescriptor descriptor;
-    descriptor.nextInChain = nullptr;
+    WGPUBufferDescriptor descriptor = {};
     descriptor.size = 8;
     descriptor.usage =
         static_cast<WGPUBufferUsage>(WGPUBufferUsage_CopySrc | WGPUBufferUsage_CopyDst);
@@ -262,8 +250,7 @@
 
 // Test that the wire is able to send structures that contain pure values (non-objects)
 TEST_F(WireArgumentTests, StructureOfValuesArgument) {
-    WGPUSamplerDescriptor descriptor;
-    descriptor.nextInChain = nullptr;
+    WGPUSamplerDescriptor descriptor = {};
     descriptor.magFilter = WGPUFilterMode_Linear;
     descriptor.minFilter = WGPUFilterMode_Nearest;
     descriptor.mipmapFilter = WGPUFilterMode_Linear;
@@ -296,8 +283,7 @@
 
 // Test that the wire is able to send structures that contain objects
 TEST_F(WireArgumentTests, StructureOfObjectArrayArgument) {
-    WGPUBindGroupLayoutDescriptor bglDescriptor;
-    bglDescriptor.nextInChain = nullptr;
+    WGPUBindGroupLayoutDescriptor bglDescriptor = {};
     bglDescriptor.bindingCount = 0;
     bglDescriptor.bindings = nullptr;
 
@@ -305,8 +291,7 @@
     WGPUBindGroupLayout apiBgl = api.GetNewBindGroupLayout();
     EXPECT_CALL(api, DeviceCreateBindGroupLayout(apiDevice, _)).WillOnce(Return(apiBgl));
 
-    WGPUPipelineLayoutDescriptor descriptor;
-    descriptor.nextInChain = nullptr;
+    WGPUPipelineLayoutDescriptor descriptor = {};
     descriptor.bindGroupLayoutCount = 1;
     descriptor.bindGroupLayouts = &bgl;
 
@@ -337,7 +322,7 @@
          WGPUBindingType_UniformBuffer, false, false, WGPUTextureViewDimension_2D,
          WGPUTextureComponentType_Float},
     };
-    WGPUBindGroupLayoutDescriptor bglDescriptor;
+    WGPUBindGroupLayoutDescriptor bglDescriptor = {};
     bglDescriptor.bindingCount = NUM_BINDINGS;
     bglDescriptor.bindings = bindings;
 
@@ -366,8 +351,7 @@
 TEST_F(WireArgumentTests, DISABLED_NullptrInArray) {
     WGPUBindGroupLayout nullBGL = nullptr;
 
-    WGPUPipelineLayoutDescriptor descriptor;
-    descriptor.nextInChain = nullptr;
+    WGPUPipelineLayoutDescriptor descriptor = {};
     descriptor.bindGroupLayoutCount = 1;
     descriptor.bindGroupLayouts = &nullBGL;
 
diff --git a/src/tests/unittests/wire/WireBufferMappingTests.cpp b/src/tests/unittests/wire/WireBufferMappingTests.cpp
index 69b1062..5bfc159 100644
--- a/src/tests/unittests/wire/WireBufferMappingTests.cpp
+++ b/src/tests/unittests/wire/WireBufferMappingTests.cpp
@@ -97,9 +97,7 @@
         mockCreateBufferMappedCallback =
             std::make_unique<StrictMock<MockBufferCreateMappedCallback>>();
 
-        WGPUBufferDescriptor descriptor;
-        descriptor.nextInChain = nullptr;
-        descriptor.label = nullptr;
+        WGPUBufferDescriptor descriptor = {};
         descriptor.size = kBufferSize;
 
         apiBuffer = api.GetNewBuffer();
@@ -498,9 +496,7 @@
 
 // Test successful CreateBufferMapped
 TEST_F(WireBufferMappingTests, CreateBufferMappedSuccess) {
-    WGPUBufferDescriptor descriptor;
-    descriptor.nextInChain = nullptr;
-    descriptor.label = nullptr;
+    WGPUBufferDescriptor descriptor = {};
     descriptor.size = 4;
 
     WGPUBuffer apiBuffer = api.GetNewBuffer();
@@ -526,9 +522,7 @@
 
 // Test that releasing after CreateBufferMapped does not call Unmap
 TEST_F(WireBufferMappingTests, ReleaseAfterCreateBufferMapped) {
-    WGPUBufferDescriptor descriptor;
-    descriptor.nextInChain = nullptr;
-    descriptor.label = nullptr;
+    WGPUBufferDescriptor descriptor = {};
     descriptor.size = 4;
 
     WGPUBuffer apiBuffer = api.GetNewBuffer();
@@ -554,9 +548,7 @@
 
 // Test that it is valid to map a buffer after CreateBufferMapped and Unmap
 TEST_F(WireBufferMappingTests, CreateBufferMappedThenMapSuccess) {
-    WGPUBufferDescriptor descriptor;
-    descriptor.nextInChain = nullptr;
-    descriptor.label = nullptr;
+    WGPUBufferDescriptor descriptor = {};
     descriptor.size = 4;
 
     WGPUBuffer apiBuffer = api.GetNewBuffer();
@@ -599,9 +591,7 @@
 
 // Test that it is invalid to map a buffer after CreateBufferMapped before Unmap
 TEST_F(WireBufferMappingTests, CreateBufferMappedThenMapFailure) {
-    WGPUBufferDescriptor descriptor;
-    descriptor.nextInChain = nullptr;
-    descriptor.label = nullptr;
+    WGPUBufferDescriptor descriptor = {};
     descriptor.size = 4;
 
     WGPUBuffer apiBuffer = api.GetNewBuffer();
@@ -641,9 +631,7 @@
 
 // Test successful CreateBufferMappedAsync
 TEST_F(WireBufferMappingTests, CreateBufferMappedAsyncSuccess) {
-    WGPUBufferDescriptor descriptor;
-    descriptor.nextInChain = nullptr;
-    descriptor.label = nullptr;
+    WGPUBufferDescriptor descriptor = {};
     descriptor.size = kBufferSize;
 
     WGPUCreateBufferMappedResult apiResult;
@@ -686,9 +674,7 @@
 
 // Test CreateBufferMappedAsync with map error
 TEST_F(WireBufferMappingTests, CreateBufferMappedAsyncMapError) {
-    WGPUBufferDescriptor descriptor;
-    descriptor.nextInChain = nullptr;
-    descriptor.label = nullptr;
+    WGPUBufferDescriptor descriptor = {};
 
     WGPUCreateBufferMappedResult apiResult;
     apiResult.buffer = apiBuffer;
@@ -720,9 +706,7 @@
 // Test that the CreateBufferMappedCallback isn't fired twice when unmap() is called inside the
 // callback
 TEST_F(WireBufferMappingTests, UnmapInsideCreateBufferMappedAsyncCallback) {
-    WGPUBufferDescriptor descriptor;
-    descriptor.nextInChain = nullptr;
-    descriptor.label = nullptr;
+    WGPUBufferDescriptor descriptor = {};
     descriptor.size = kBufferSize;
 
     WGPUCreateBufferMappedResult apiResult;
@@ -759,9 +743,7 @@
 // Test that the CreateBufferMappedCallback isn't fired twice when the buffer is deleted inside
 // the callback
 TEST_F(WireBufferMappingTests, ReleaseInsideCreateBufferMappedAsyncCallback) {
-    WGPUBufferDescriptor descriptor;
-    descriptor.nextInChain = nullptr;
-    descriptor.label = nullptr;
+    WGPUBufferDescriptor descriptor = {};
     descriptor.size = kBufferSize;
 
     WGPUCreateBufferMappedResult apiResult;
@@ -798,9 +780,7 @@
 // Test that the CreateBufferMappedCallback isn't fired twice when the buffer is destroyed inside
 // the callback
 TEST_F(WireBufferMappingTests, DestroyInsideCreateBufferMappedAsyncCallback) {
-    WGPUBufferDescriptor descriptor;
-    descriptor.nextInChain = nullptr;
-    descriptor.label = nullptr;
+    WGPUBufferDescriptor descriptor = {};
     descriptor.size = kBufferSize;
 
     WGPUCreateBufferMappedResult apiResult;
diff --git a/src/tests/unittests/wire/WireFenceTests.cpp b/src/tests/unittests/wire/WireFenceTests.cpp
index 59d2b26..0f186c5 100644
--- a/src/tests/unittests/wire/WireFenceTests.cpp
+++ b/src/tests/unittests/wire/WireFenceTests.cpp
@@ -50,9 +50,7 @@
             FlushClient();
         }
         {
-            WGPUFenceDescriptor descriptor;
-            descriptor.nextInChain = nullptr;
-            descriptor.label = nullptr;
+            WGPUFenceDescriptor descriptor = {};
             descriptor.initialValue = 1;
 
             apiFence = api.GetNewFence();
diff --git a/src/tests/unittests/wire/WireMemoryTransferServiceTests.cpp b/src/tests/unittests/wire/WireMemoryTransferServiceTests.cpp
index a4f085b..ebed585 100644
--- a/src/tests/unittests/wire/WireMemoryTransferServiceTests.cpp
+++ b/src/tests/unittests/wire/WireMemoryTransferServiceTests.cpp
@@ -155,9 +155,7 @@
     using ServerWriteHandle = server::MockMemoryTransferService::MockWriteHandle;
 
     std::pair<WGPUBuffer, WGPUBuffer> CreateBuffer() {
-        WGPUBufferDescriptor descriptor;
-        descriptor.nextInChain = nullptr;
-        descriptor.label = nullptr;
+        WGPUBufferDescriptor descriptor = {};
         descriptor.size = sizeof(mBufferContent);
 
         WGPUBuffer apiBuffer = api.GetNewBuffer();
@@ -171,9 +169,7 @@
     }
 
     std::pair<WGPUCreateBufferMappedResult, WGPUCreateBufferMappedResult> CreateBufferMapped() {
-        WGPUBufferDescriptor descriptor;
-        descriptor.nextInChain = nullptr;
-        descriptor.label = nullptr;
+        WGPUBufferDescriptor descriptor = {};
         descriptor.size = sizeof(mBufferContent);
 
         WGPUBuffer apiBuffer = api.GetNewBuffer();
@@ -193,9 +189,7 @@
     }
 
     WGPUCreateBufferMappedResult CreateBufferMappedAsync() {
-        WGPUBufferDescriptor descriptor;
-        descriptor.nextInChain = nullptr;
-        descriptor.label = nullptr;
+        WGPUBufferDescriptor descriptor = {};
         descriptor.size = sizeof(mBufferContent);
 
         wgpuDeviceCreateBufferMappedAsync(device, &descriptor, ToMockCreateBufferMappedCallback,
@@ -879,9 +873,7 @@
     // Mock a WriteHandle creation failure
     MockWriteHandleCreationFailure();
 
-    WGPUBufferDescriptor descriptor;
-    descriptor.nextInChain = nullptr;
-    descriptor.label = nullptr;
+    WGPUBufferDescriptor descriptor = {};
     descriptor.size = sizeof(mBufferContent);
 
     // Failed creation of a WriteHandle is a fatal failure. The client synchronously receives
@@ -1035,9 +1027,7 @@
     // Mock a WriteHandle creation failure
     MockWriteHandleCreationFailure();
 
-    WGPUBufferDescriptor descriptor;
-    descriptor.nextInChain = nullptr;
-    descriptor.label = nullptr;
+    WGPUBufferDescriptor descriptor = {};
     descriptor.size = sizeof(mBufferContent);
 
     WGPUCreateBufferMappedResult result = wgpuDeviceCreateBufferMapped(device, &descriptor);
@@ -1081,9 +1071,7 @@
     // Note: The handle is not serialized because sychronously opening it failed.
     EXPECT_CALL(clientMemoryTransferService, OnWriteHandleDestroy(clientHandle)).Times(1);
 
-    WGPUBufferDescriptor descriptor;
-    descriptor.nextInChain = nullptr;
-    descriptor.label = nullptr;
+    WGPUBufferDescriptor descriptor = {};
     descriptor.size = sizeof(mBufferContent);
 
     WGPUCreateBufferMappedResult result = wgpuDeviceCreateBufferMapped(device, &descriptor);
diff --git a/src/tests/unittests/wire/WireOptionalTests.cpp b/src/tests/unittests/wire/WireOptionalTests.cpp
index da888d0..20d2435 100644
--- a/src/tests/unittests/wire/WireOptionalTests.cpp
+++ b/src/tests/unittests/wire/WireOptionalTests.cpp
@@ -26,9 +26,7 @@
 
 // Test passing nullptr instead of objects - object as value version
 TEST_F(WireOptionalTests, OptionalObjectValue) {
-    WGPUBindGroupLayoutDescriptor bglDesc;
-    bglDesc.nextInChain = nullptr;
-    bglDesc.label = nullptr;
+    WGPUBindGroupLayoutDescriptor bglDesc = {};
     bglDesc.bindingCount = 0;
     WGPUBindGroupLayout bgl = wgpuDeviceCreateBindGroupLayout(device, &bglDesc);
 
@@ -43,9 +41,7 @@
     binding.textureView = nullptr;
     binding.buffer = nullptr;
 
-    WGPUBindGroupDescriptor bgDesc;
-    bgDesc.nextInChain = nullptr;
-    bgDesc.label = nullptr;
+    WGPUBindGroupDescriptor bgDesc = {};
     bgDesc.layout = bgl;
     bgDesc.bindingCount = 1;
     bgDesc.bindings = &binding;
@@ -69,36 +65,31 @@
 // Test that the wire is able to send optional pointers to structures
 TEST_F(WireOptionalTests, OptionalStructPointer) {
     // Create shader module
-    WGPUShaderModuleDescriptor vertexDescriptor;
-    vertexDescriptor.nextInChain = nullptr;
-    vertexDescriptor.label = nullptr;
+    WGPUShaderModuleDescriptor vertexDescriptor = {};
     vertexDescriptor.codeSize = 0;
     WGPUShaderModule vsModule = wgpuDeviceCreateShaderModule(device, &vertexDescriptor);
     WGPUShaderModule apiVsModule = api.GetNewShaderModule();
     EXPECT_CALL(api, DeviceCreateShaderModule(apiDevice, _)).WillOnce(Return(apiVsModule));
 
     // Create the color state descriptor
-    WGPUBlendDescriptor blendDescriptor;
+    WGPUBlendDescriptor blendDescriptor = {};
     blendDescriptor.operation = WGPUBlendOperation_Add;
     blendDescriptor.srcFactor = WGPUBlendFactor_One;
     blendDescriptor.dstFactor = WGPUBlendFactor_One;
-    WGPUColorStateDescriptor colorStateDescriptor;
-    colorStateDescriptor.nextInChain = nullptr;
+    WGPUColorStateDescriptor colorStateDescriptor = {};
     colorStateDescriptor.format = WGPUTextureFormat_RGBA8Unorm;
     colorStateDescriptor.alphaBlend = blendDescriptor;
     colorStateDescriptor.colorBlend = blendDescriptor;
     colorStateDescriptor.writeMask = WGPUColorWriteMask_All;
 
     // Create the input state
-    WGPUVertexStateDescriptor vertexState;
-    vertexState.nextInChain = nullptr;
+    WGPUVertexStateDescriptor vertexState = {};
     vertexState.indexFormat = WGPUIndexFormat_Uint32;
     vertexState.vertexBufferCount = 0;
     vertexState.vertexBuffers = nullptr;
 
     // Create the rasterization state
-    WGPURasterizationStateDescriptor rasterizationState;
-    rasterizationState.nextInChain = nullptr;
+    WGPURasterizationStateDescriptor rasterizationState = {};
     rasterizationState.frontFace = WGPUFrontFace_CCW;
     rasterizationState.cullMode = WGPUCullMode_None;
     rasterizationState.depthBias = 0;
@@ -106,14 +97,13 @@
     rasterizationState.depthBiasClamp = 0.0;
 
     // Create the depth-stencil state
-    WGPUStencilStateFaceDescriptor stencilFace;
+    WGPUStencilStateFaceDescriptor stencilFace = {};
     stencilFace.compare = WGPUCompareFunction_Always;
     stencilFace.failOp = WGPUStencilOperation_Keep;
     stencilFace.depthFailOp = WGPUStencilOperation_Keep;
     stencilFace.passOp = WGPUStencilOperation_Keep;
 
-    WGPUDepthStencilStateDescriptor depthStencilState;
-    depthStencilState.nextInChain = nullptr;
+    WGPUDepthStencilStateDescriptor depthStencilState = {};
     depthStencilState.format = WGPUTextureFormat_Depth24PlusStencil8;
     depthStencilState.depthWriteEnabled = false;
     depthStencilState.depthCompare = WGPUCompareFunction_Always;
@@ -123,9 +113,7 @@
     depthStencilState.stencilWriteMask = 0xff;
 
     // Create the pipeline layout
-    WGPUPipelineLayoutDescriptor layoutDescriptor;
-    layoutDescriptor.nextInChain = nullptr;
-    layoutDescriptor.label = nullptr;
+    WGPUPipelineLayoutDescriptor layoutDescriptor = {};
     layoutDescriptor.bindGroupLayoutCount = 0;
     layoutDescriptor.bindGroupLayouts = nullptr;
     WGPUPipelineLayout layout = wgpuDeviceCreatePipelineLayout(device, &layoutDescriptor);
@@ -133,16 +121,12 @@
     EXPECT_CALL(api, DeviceCreatePipelineLayout(apiDevice, _)).WillOnce(Return(apiLayout));
 
     // Create pipeline
-    WGPURenderPipelineDescriptor pipelineDescriptor;
-    pipelineDescriptor.nextInChain = nullptr;
-    pipelineDescriptor.label = nullptr;
+    WGPURenderPipelineDescriptor pipelineDescriptor = {};
 
-    pipelineDescriptor.vertexStage.nextInChain = nullptr;
     pipelineDescriptor.vertexStage.module = vsModule;
     pipelineDescriptor.vertexStage.entryPoint = "main";
 
-    WGPUProgrammableStageDescriptor fragmentStage;
-    fragmentStage.nextInChain = nullptr;
+    WGPUProgrammableStageDescriptor fragmentStage = {};
     fragmentStage.module = vsModule;
     fragmentStage.entryPoint = "main";
     pipelineDescriptor.fragmentStage = &fragmentStage;