diff --git a/dawn.json b/dawn.json
index 5470a27..48f56a5 100644
--- a/dawn.json
+++ b/dawn.json
@@ -395,8 +395,8 @@
                 "args": [
                     {"name": "group index", "type": "uint32_t"},
                     {"name": "group", "type": "bind group"},
-                    {"name": "dynamic offset count", "type": "uint32_t"},
-                    {"name": "dynamic offsets", "type": "uint64_t", "annotation": "const*", "length": "dynamic offset count"}
+                    {"name": "dynamic offset count", "type": "uint32_t", "default": "0"},
+                    {"name": "dynamic offsets", "type": "uint64_t", "annotation": "const*", "length": "dynamic offset count", "optional": true}
                 ]
             },
             {
@@ -826,8 +826,8 @@
                 "args": [
                     {"name": "group index", "type": "uint32_t"},
                     {"name": "group", "type": "bind group"},
-                    {"name": "dynamic offset count", "type": "uint32_t"},
-                    {"name": "dynamic offsets", "type": "uint64_t", "annotation": "const*", "length": "dynamic offset count"}
+                    {"name": "dynamic offset count", "type": "uint32_t", "default": "0"},
+                    {"name": "dynamic offsets", "type": "uint64_t", "annotation": "const*", "length": "dynamic offset count", "optional": true}
                 ]
             },
             {
@@ -973,8 +973,8 @@
                 "args": [
                     {"name": "group index", "type": "uint32_t"},
                     {"name": "group", "type": "bind group"},
-                    {"name": "dynamic offset count", "type": "uint32_t"},
-                    {"name": "dynamic offsets", "type": "uint64_t", "annotation": "const*", "length": "dynamic offset count"}
+                    {"name": "dynamic offset count", "type": "uint32_t", "default": "0"},
+                    {"name": "dynamic offsets", "type": "uint64_t", "annotation": "const*", "length": "dynamic offset count", "optional": true}
                 ]
             },
             {
diff --git a/examples/ComputeBoids.cpp b/examples/ComputeBoids.cpp
index c01dd24..41f2d64 100644
--- a/examples/ComputeBoids.cpp
+++ b/examples/ComputeBoids.cpp
@@ -269,7 +269,7 @@
     {
         dawn::ComputePassEncoder pass = encoder.BeginComputePass();
         pass.SetPipeline(updatePipeline);
-        pass.SetBindGroup(0, updateBGs[i], 0, nullptr);
+        pass.SetBindGroup(0, updateBGs[i]);
         pass.Dispatch(kNumParticles, 1, 1);
         pass.EndPass();
     }
diff --git a/examples/CppHelloTriangle.cpp b/examples/CppHelloTriangle.cpp
index 937c006..c9331c1 100644
--- a/examples/CppHelloTriangle.cpp
+++ b/examples/CppHelloTriangle.cpp
@@ -161,7 +161,7 @@
     {
         dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(0, bindGroup, 0, nullptr);
+        pass.SetBindGroup(0, bindGroup);
         pass.SetVertexBuffers(0, 1, &vertexBuffer, vertexBufferOffsets);
         pass.SetIndexBuffer(indexBuffer, 0);
         pass.DrawIndexed(3, 1, 0, 0, 0);
diff --git a/examples/CubeReflection.cpp b/examples/CubeReflection.cpp
index b48eb1b..a6c2321 100644
--- a/examples/CubeReflection.cpp
+++ b/examples/CubeReflection.cpp
@@ -272,20 +272,20 @@
     {
         dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(0, bindGroup[0], 0, nullptr);
+        pass.SetBindGroup(0, bindGroup[0]);
         pass.SetVertexBuffers(0, 1, &vertexBuffer, vertexBufferOffsets);
         pass.SetIndexBuffer(indexBuffer, 0);
         pass.DrawIndexed(36, 1, 0, 0, 0);
 
         pass.SetStencilReference(0x1);
         pass.SetPipeline(planePipeline);
-        pass.SetBindGroup(0, bindGroup[0], 0, nullptr);
+        pass.SetBindGroup(0, bindGroup[0]);
         pass.SetVertexBuffers(0, 1, &planeBuffer, vertexBufferOffsets);
         pass.DrawIndexed(6, 1, 0, 0, 0);
 
         pass.SetPipeline(reflectionPipeline);
         pass.SetVertexBuffers(0, 1, &vertexBuffer, vertexBufferOffsets);
-        pass.SetBindGroup(0, bindGroup[1], 0, nullptr);
+        pass.SetBindGroup(0, bindGroup[1]);
         pass.DrawIndexed(36, 1, 0, 0, 0);
 
         pass.EndPass();
diff --git a/src/tests/end2end/BindGroupTests.cpp b/src/tests/end2end/BindGroupTests.cpp
index dbae686..fc8949b 100644
--- a/src/tests/end2end/BindGroupTests.cpp
+++ b/src/tests/end2end/BindGroupTests.cpp
@@ -28,7 +28,7 @@
         dawn::CommandEncoder encoder = device.CreateCommandEncoder();
         dawn::ComputePassEncoder pass = encoder.BeginComputePass();
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(0, bindGroup, 0, nullptr);
+        pass.SetBindGroup(0, bindGroup);
         pass.Dispatch(1, 1, 1);
         pass.EndPass();
         return encoder.Finish();
@@ -219,7 +219,7 @@
     dawn::CommandEncoder encoder = device.CreateCommandEncoder();
     dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
     pass.SetPipeline(pipeline);
-    pass.SetBindGroup(0, bindGroup, 0, nullptr);
+    pass.SetBindGroup(0, bindGroup);
     pass.Draw(3, 1, 0, 0);
     pass.EndPass();
 
@@ -335,7 +335,7 @@
     encoder.CopyBufferToTexture(&bufferCopyView, &textureCopyView, &copySize);
     dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
     pass.SetPipeline(pipeline);
-    pass.SetBindGroup(0, bindGroup, 0, nullptr);
+    pass.SetBindGroup(0, bindGroup);
     pass.Draw(3, 1, 0, 0);
     pass.EndPass();
 
@@ -431,8 +431,8 @@
     dawn::CommandEncoder encoder = device.CreateCommandEncoder();
     dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
     pass.SetPipeline(pipeline);
-    pass.SetBindGroup(0, bindGroups[0], 0, nullptr);
-    pass.SetBindGroup(1, bindGroups[1], 0, nullptr);
+    pass.SetBindGroup(0, bindGroups[0]);
+    pass.SetBindGroup(1, bindGroups[1]);
     pass.Draw(3, 1, 0, 0);
     pass.EndPass();
 
@@ -473,10 +473,10 @@
     dawn::BindGroup bindGroup =
         utils::MakeBindGroup(device, layout, {{0, uniformBuffer, 0, sizeof(color)}});
 
-    pass.SetBindGroup(0, bindGroup, 0, nullptr);
-    pass.SetBindGroup(1, bindGroup, 0, nullptr);
-    pass.SetBindGroup(2, bindGroup, 0, nullptr);
-    pass.SetBindGroup(3, bindGroup, 0, nullptr);
+    pass.SetBindGroup(0, bindGroup);
+    pass.SetBindGroup(1, bindGroup);
+    pass.SetBindGroup(2, bindGroup);
+    pass.SetBindGroup(3, bindGroup);
     pass.Draw(3, 1, 0, 0);
 
     pass.SetPipeline(pipeline);
@@ -518,7 +518,7 @@
         utils::MakeBindGroup(device, layout, {{0, uniformBuffer, 0, sizeof(color)}});
 
     // Set the bind group, then the pipeline, and draw.
-    pass.SetBindGroup(0, bindGroup, 0, nullptr);
+    pass.SetBindGroup(0, bindGroup);
     pass.SetPipeline(pipeline);
     pass.Draw(3, 1, 0, 0);
 
diff --git a/src/tests/end2end/ColorStateTests.cpp b/src/tests/end2end/ColorStateTests.cpp
index 62dfee4..18bae35 100644
--- a/src/tests/end2end/ColorStateTests.cpp
+++ b/src/tests/end2end/ColorStateTests.cpp
@@ -116,12 +116,12 @@
             dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
             // First use the base pipeline to draw a triangle with no blending
             pass.SetPipeline(basePipeline);
-            pass.SetBindGroup(0, MakeBindGroupForColors(std::array<RGBA8, 1>({{base}})), 0, nullptr);
+            pass.SetBindGroup(0, MakeBindGroupForColors(std::array<RGBA8, 1>({{base}})));
             pass.Draw(3, 1, 0, 0);
 
             // Then use the test pipeline to draw the test triangle with blending
             pass.SetPipeline(testPipeline);
-            pass.SetBindGroup(0, MakeBindGroupForColors(std::array<RGBA8, 1>({{triangle.color}})), 0, nullptr);
+            pass.SetBindGroup(0, MakeBindGroupForColors(std::array<RGBA8, 1>({{triangle.color}})));
             pass.SetBlendColor(&blendColor);
             pass.Draw(3, 1, 0, 0);
             pass.EndPass();
@@ -735,7 +735,7 @@
         {
             dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
             pass.SetPipeline(testPipeline);
-            pass.SetBindGroup(0, MakeBindGroupForColors(std::array<RGBA8, 1>({{base}})), 0, nullptr);
+            pass.SetBindGroup(0, MakeBindGroupForColors(std::array<RGBA8, 1>({{base}})));
             pass.Draw(3, 1, 0, 0);
             pass.EndPass();
         }
@@ -853,12 +853,12 @@
             dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
             pass.SetPipeline(basePipeline);
             pass.SetBindGroup(
-                0, MakeBindGroupForColors(std::array<RGBA8, 4>({{base, base, base, base}})), 0, nullptr);
+                0, MakeBindGroupForColors(std::array<RGBA8, 4>({{base, base, base, base}})));
             pass.Draw(3, 1, 0, 0);
 
             pass.SetPipeline(testPipeline);
             pass.SetBindGroup(0, MakeBindGroupForColors(
-                                     std::array<RGBA8, 4>({{color0, color1, color2, color3}})), 0, nullptr);
+                                     std::array<RGBA8, 4>({{color0, color1, color2, color3}})));
             pass.Draw(3, 1, 0, 0);
             pass.EndPass();
         }
@@ -928,11 +928,11 @@
             dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
             pass.SetPipeline(basePipeline);
             pass.SetBindGroup(0,
-                              MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(0, 0, 0, 0)}})), 0, nullptr);
+                              MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(0, 0, 0, 0)}})));
             pass.Draw(3, 1, 0, 0);
             pass.SetPipeline(testPipeline);
             pass.SetBindGroup(
-                0, MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(255, 255, 255, 255)}})), 0, nullptr);
+                0, MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(255, 255, 255, 255)}})));
             pass.Draw(3, 1, 0, 0);
             pass.EndPass();
         }
@@ -950,12 +950,12 @@
             dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
             pass.SetPipeline(basePipeline);
             pass.SetBindGroup(0,
-                              MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(0, 0, 0, 0)}})), 0, nullptr);
+                              MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(0, 0, 0, 0)}})));
             pass.Draw(3, 1, 0, 0);
             pass.SetPipeline(testPipeline);
             pass.SetBlendColor(&kWhite);
             pass.SetBindGroup(
-                0, MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(255, 255, 255, 255)}})), 0, nullptr);
+                0, MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(255, 255, 255, 255)}})));
             pass.Draw(3, 1, 0, 0);
             pass.EndPass();
         }
@@ -974,12 +974,12 @@
             dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
             pass.SetPipeline(basePipeline);
             pass.SetBindGroup(0,
-                              MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(0, 0, 0, 0)}})), 0, nullptr);
+                              MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(0, 0, 0, 0)}})));
             pass.Draw(3, 1, 0, 0);
             pass.SetPipeline(testPipeline);
             pass.SetBlendColor(&kWhite);
             pass.SetBindGroup(
-                0, MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(255, 255, 255, 255)}})), 0, nullptr);
+                0, MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(255, 255, 255, 255)}})));
             pass.Draw(3, 1, 0, 0);
             pass.EndPass();
         }
@@ -987,11 +987,11 @@
             dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
             pass.SetPipeline(basePipeline);
             pass.SetBindGroup(0,
-                              MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(0, 0, 0, 0)}})), 0, nullptr);
+                              MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(0, 0, 0, 0)}})));
             pass.Draw(3, 1, 0, 0);
             pass.SetPipeline(testPipeline);
             pass.SetBindGroup(
-                0, MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(255, 255, 255, 255)}})), 0, nullptr);
+                0, MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(255, 255, 255, 255)}})));
             pass.Draw(3, 1, 0, 0);
             pass.EndPass();
         }
@@ -1046,7 +1046,7 @@
         // Clear the output attachment to |base|
         dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetPipeline(basePipeline);
-        pass.SetBindGroup(0, MakeBindGroupForColors(std::array<RGBA8, 1>({{base}})), 0, nullptr);
+        pass.SetBindGroup(0, MakeBindGroupForColors(std::array<RGBA8, 1>({{base}})));
         pass.Draw(3, 1, 0, 0);
 
         // Set a pipeline that will dirty the color write mask
diff --git a/src/tests/end2end/CompressedTextureFormatTests.cpp b/src/tests/end2end/CompressedTextureFormatTests.cpp
index 1a332b8..3208481 100644
--- a/src/tests/end2end/CompressedTextureFormatTests.cpp
+++ b/src/tests/end2end/CompressedTextureFormatTests.cpp
@@ -188,7 +188,7 @@
         {
             dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
             pass.SetPipeline(renderPipeline);
-            pass.SetBindGroup(0, bindGroup, 0, nullptr);
+            pass.SetBindGroup(0, bindGroup);
             pass.Draw(6, 1, 0, 0);
             pass.EndPass();
         }
diff --git a/src/tests/end2end/ComputeCopyStorageBufferTests.cpp b/src/tests/end2end/ComputeCopyStorageBufferTests.cpp
index 6ade49a..0e8020a 100644
--- a/src/tests/end2end/ComputeCopyStorageBufferTests.cpp
+++ b/src/tests/end2end/ComputeCopyStorageBufferTests.cpp
@@ -80,7 +80,7 @@
         dawn::CommandEncoder encoder = device.CreateCommandEncoder();
         dawn::ComputePassEncoder pass = encoder.BeginComputePass();
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(0, bindGroup, 0, nullptr);
+        pass.SetBindGroup(0, bindGroup);
         pass.Dispatch(kInstances, 1, 1);
         pass.EndPass();
 
diff --git a/src/tests/end2end/ComputeIndirectTests.cpp b/src/tests/end2end/ComputeIndirectTests.cpp
index 60fe850..1b77c00 100644
--- a/src/tests/end2end/ComputeIndirectTests.cpp
+++ b/src/tests/end2end/ComputeIndirectTests.cpp
@@ -90,7 +90,7 @@
         dawn::CommandEncoder encoder = device.CreateCommandEncoder();
         dawn::ComputePassEncoder pass = encoder.BeginComputePass();
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(0, bindGroup, 0, nullptr);
+        pass.SetBindGroup(0, bindGroup);
         pass.DispatchIndirect(indirectBuffer, indirectOffset);
         pass.EndPass();
 
diff --git a/src/tests/end2end/ComputeSharedMemoryTests.cpp b/src/tests/end2end/ComputeSharedMemoryTests.cpp
index 80bfec8..61337a6 100644
--- a/src/tests/end2end/ComputeSharedMemoryTests.cpp
+++ b/src/tests/end2end/ComputeSharedMemoryTests.cpp
@@ -61,7 +61,7 @@
         dawn::CommandEncoder encoder = device.CreateCommandEncoder();
         dawn::ComputePassEncoder pass = encoder.BeginComputePass();
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(0, bindGroup, 0, nullptr);
+        pass.SetBindGroup(0, bindGroup);
         pass.Dispatch(1, 1, 1);
         pass.EndPass();
 
diff --git a/src/tests/end2end/DepthStencilStateTests.cpp b/src/tests/end2end/DepthStencilStateTests.cpp
index 93de654..c287d7e 100644
--- a/src/tests/end2end/DepthStencilStateTests.cpp
+++ b/src/tests/end2end/DepthStencilStateTests.cpp
@@ -285,7 +285,8 @@
 
                 pass.SetPipeline(pipeline);
                 pass.SetStencilReference(test.stencil);  // Set the stencil reference
-                pass.SetBindGroup(0, bindGroup, 0, nullptr);         // Set the bind group which contains color and depth data
+                pass.SetBindGroup(
+                    0, bindGroup);  // Set the bind group which contains color and depth data
                 pass.Draw(6, 1, 0, 0);
             }
             pass.EndPass();
diff --git a/src/tests/end2end/DynamicBufferOffsetTests.cpp b/src/tests/end2end/DynamicBufferOffsetTests.cpp
index cd1723a..dfd8f11 100644
--- a/src/tests/end2end/DynamicBufferOffsetTests.cpp
+++ b/src/tests/end2end/DynamicBufferOffsetTests.cpp
@@ -311,7 +311,7 @@
     renderPassEncoder.SetBindGroup(0, mBindGroups[0], offsets.size(), offsets.data());
     renderPassEncoder.Draw(3, 1, 0, 0);
     renderPassEncoder.SetPipeline(testPipeline);
-    renderPassEncoder.SetBindGroup(1, mBindGroups[1], 0, nullptr);
+    renderPassEncoder.SetBindGroup(1, mBindGroups[1]);
     renderPassEncoder.Draw(3, 1, 0, 0);
     renderPassEncoder.EndPass();
     dawn::CommandBuffer commands = commandEncoder.Finish();
@@ -341,7 +341,7 @@
     computePassEncoder.SetBindGroup(0, mBindGroups[0], offsets.size(), offsets.data());
     computePassEncoder.Dispatch(1, 1, 1);
     computePassEncoder.SetPipeline(testPipeline);
-    computePassEncoder.SetBindGroup(1, mBindGroups[1], 0, nullptr);
+    computePassEncoder.SetBindGroup(1, mBindGroups[1]);
     computePassEncoder.Dispatch(1, 1, 1);
     computePassEncoder.EndPass();
     dawn::CommandBuffer commands = commandEncoder.Finish();
diff --git a/src/tests/end2end/IOSurfaceWrappingTests.cpp b/src/tests/end2end/IOSurfaceWrappingTests.cpp
index 9b33101..176c6d2 100644
--- a/src/tests/end2end/IOSurfaceWrappingTests.cpp
+++ b/src/tests/end2end/IOSurfaceWrappingTests.cpp
@@ -317,7 +317,7 @@
         {
             dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
             pass.SetPipeline(pipeline);
-            pass.SetBindGroup(0, bindGroup, 0, nullptr);
+            pass.SetBindGroup(0, bindGroup);
             pass.Draw(6, 1, 0, 0);
             pass.EndPass();
         }
diff --git a/src/tests/end2end/MultisampledRenderingTests.cpp b/src/tests/end2end/MultisampledRenderingTests.cpp
index ec979c2..e662acc 100644
--- a/src/tests/end2end/MultisampledRenderingTests.cpp
+++ b/src/tests/end2end/MultisampledRenderingTests.cpp
@@ -112,7 +112,7 @@
 
         dawn::RenderPassEncoder renderPassEncoder = commandEncoder.BeginRenderPass(&renderPass);
         renderPassEncoder.SetPipeline(pipeline);
-        renderPassEncoder.SetBindGroup(0, bindGroup, 0, nullptr);
+        renderPassEncoder.SetBindGroup(0, bindGroup);
         renderPassEncoder.Draw(3, 1, 0, 0);
         renderPassEncoder.EndPass();
     }
diff --git a/src/tests/end2end/OpArrayLengthTests.cpp b/src/tests/end2end/OpArrayLengthTests.cpp
index 1d8ac40..8a02b75 100644
--- a/src/tests/end2end/OpArrayLengthTests.cpp
+++ b/src/tests/end2end/OpArrayLengthTests.cpp
@@ -133,8 +133,8 @@
     dawn::CommandEncoder encoder = device.CreateCommandEncoder();
     dawn::ComputePassEncoder pass = encoder.BeginComputePass();
     pass.SetPipeline(pipeline);
-    pass.SetBindGroup(0, mBindGroup, 0, nullptr);
-    pass.SetBindGroup(1, resultBindGroup, 0, nullptr);
+    pass.SetBindGroup(0, mBindGroup);
+    pass.SetBindGroup(1, resultBindGroup);
     pass.Dispatch(1, 1, 1);
     pass.EndPass();
 
@@ -189,7 +189,7 @@
     {
         dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(0, mBindGroup, 0, nullptr);
+        pass.SetBindGroup(0, mBindGroup);
         pass.Draw(1, 1, 0, 0);
         pass.EndPass();
     }
@@ -250,7 +250,7 @@
     {
         dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(0, mBindGroup, 0, nullptr);
+        pass.SetBindGroup(0, mBindGroup);
         pass.Draw(1, 1, 0, 0);
         pass.EndPass();
     }
diff --git a/src/tests/end2end/RenderBundleTests.cpp b/src/tests/end2end/RenderBundleTests.cpp
index 5c78a9a..3675cf9 100644
--- a/src/tests/end2end/RenderBundleTests.cpp
+++ b/src/tests/end2end/RenderBundleTests.cpp
@@ -111,7 +111,7 @@
     uint64_t zeroOffset = 0;
     renderBundleEncoder.SetPipeline(pipeline);
     renderBundleEncoder.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
-    renderBundleEncoder.SetBindGroup(0, bindGroups[0], 0, nullptr);
+    renderBundleEncoder.SetBindGroup(0, bindGroups[0]);
     renderBundleEncoder.Draw(6, 1, 0, 0);
 
     dawn::RenderBundle renderBundle = renderBundleEncoder.Finish();
@@ -142,7 +142,7 @@
 
         renderBundleEncoder.SetPipeline(pipeline);
         renderBundleEncoder.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
-        renderBundleEncoder.SetBindGroup(0, bindGroups[0], 0, nullptr);
+        renderBundleEncoder.SetBindGroup(0, bindGroups[0]);
         renderBundleEncoder.Draw(3, 1, 0, 0);
 
         renderBundles[0] = renderBundleEncoder.Finish();
@@ -152,7 +152,7 @@
 
         renderBundleEncoder.SetPipeline(pipeline);
         renderBundleEncoder.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
-        renderBundleEncoder.SetBindGroup(0, bindGroups[1], 0, nullptr);
+        renderBundleEncoder.SetBindGroup(0, bindGroups[1]);
         renderBundleEncoder.Draw(3, 1, 3, 0);
 
         renderBundles[1] = renderBundleEncoder.Finish();
@@ -182,7 +182,7 @@
     uint64_t zeroOffset = 0;
     renderBundleEncoder.SetPipeline(pipeline);
     renderBundleEncoder.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
-    renderBundleEncoder.SetBindGroup(0, bindGroups[0], 0, nullptr);
+    renderBundleEncoder.SetBindGroup(0, bindGroups[0]);
     renderBundleEncoder.Draw(3, 1, 0, 0);
 
     dawn::RenderBundle renderBundle = renderBundleEncoder.Finish();
@@ -194,7 +194,7 @@
 
     pass.SetPipeline(pipeline);
     pass.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
-    pass.SetBindGroup(0, bindGroups[1], 0, nullptr);
+    pass.SetBindGroup(0, bindGroups[1]);
     pass.Draw(3, 1, 3, 0);
 
     pass.ExecuteBundles(1, &renderBundle);
diff --git a/src/tests/end2end/SamplerTests.cpp b/src/tests/end2end/SamplerTests.cpp
index 3ab4579..5cf4666 100644
--- a/src/tests/end2end/SamplerTests.cpp
+++ b/src/tests/end2end/SamplerTests.cpp
@@ -142,7 +142,7 @@
         {
             dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&mRenderPass.renderPassInfo);
             pass.SetPipeline(mPipeline);
-            pass.SetBindGroup(0, bindGroup, 0, nullptr);
+            pass.SetBindGroup(0, bindGroup);
             pass.Draw(6, 1, 0, 0);
             pass.EndPass();
         }
diff --git a/src/tests/end2end/TextureFormatTests.cpp b/src/tests/end2end/TextureFormatTests.cpp
index d2acc6b..1aa316d 100644
--- a/src/tests/end2end/TextureFormatTests.cpp
+++ b/src/tests/end2end/TextureFormatTests.cpp
@@ -298,7 +298,7 @@
         utils::ComboRenderPassDescriptor renderPassDesc({renderTarget.CreateView()});
         dawn::RenderPassEncoder renderPass = encoder.BeginRenderPass(&renderPassDesc);
         renderPass.SetPipeline(pipeline);
-        renderPass.SetBindGroup(0, bindGroup, 0, nullptr);
+        renderPass.SetBindGroup(0, bindGroup);
         renderPass.Draw(3, 1, 0, 0);
         renderPass.EndPass();
 
diff --git a/src/tests/end2end/TextureViewTests.cpp b/src/tests/end2end/TextureViewTests.cpp
index 688bd11..40add9f 100644
--- a/src/tests/end2end/TextureViewTests.cpp
+++ b/src/tests/end2end/TextureViewTests.cpp
@@ -178,7 +178,7 @@
         {
             dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&mRenderPass.renderPassInfo);
             pass.SetPipeline(pipeline);
-            pass.SetBindGroup(0, bindGroup, 0, nullptr);
+            pass.SetBindGroup(0, bindGroup);
             pass.Draw(6, 1, 0, 0);
             pass.EndPass();
         }
diff --git a/src/tests/end2end/TextureZeroInitTests.cpp b/src/tests/end2end/TextureZeroInitTests.cpp
index 40f069b..2ae0a6d 100644
--- a/src/tests/end2end/TextureZeroInitTests.cpp
+++ b/src/tests/end2end/TextureZeroInitTests.cpp
@@ -475,7 +475,7 @@
     renderPassDesc.cColorAttachments[0].loadOp = dawn::LoadOp::Clear;
     dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDesc);
     pass.SetPipeline(renderPipeline);
-    pass.SetBindGroup(0, bindGroup, 0, nullptr);
+    pass.SetBindGroup(0, bindGroup);
     pass.Draw(6, 1, 0, 0);
     pass.EndPass();
     dawn::CommandBuffer commands = encoder.Finish();
@@ -544,7 +544,7 @@
     dawn::CommandEncoder encoder = device.CreateCommandEncoder();
     dawn::ComputePassEncoder pass = encoder.BeginComputePass();
     pass.SetPipeline(computePipeline);
-    pass.SetBindGroup(0, bindGroup, 0, nullptr);
+    pass.SetBindGroup(0, bindGroup);
     pass.Dispatch(1, 1, 1);
     pass.EndPass();
     dawn::CommandBuffer commands = encoder.Finish();
@@ -692,7 +692,7 @@
     renderPassDesc.cColorAttachments[0].storeOp = dawn::StoreOp::Clear;
     dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDesc);
     pass.SetPipeline(renderPipeline);
-    pass.SetBindGroup(0, bindGroup, 0, nullptr);
+    pass.SetBindGroup(0, bindGroup);
     pass.Draw(6, 1, 0, 0);
     pass.EndPass();
     commands = encoder.Finish();
diff --git a/src/tests/unittests/validation/BindGroupValidationTests.cpp b/src/tests/unittests/validation/BindGroupValidationTests.cpp
index 06fe90b..a59f315 100644
--- a/src/tests/unittests/validation/BindGroupValidationTests.cpp
+++ b/src/tests/unittests/validation/BindGroupValidationTests.cpp
@@ -983,8 +983,8 @@
     dawn::CommandEncoder commandEncoder = device.CreateCommandEncoder();
     dawn::RenderPassEncoder renderPassEncoder = commandEncoder.BeginRenderPass(&renderPass);
 
-    renderPassEncoder.SetBindGroup(0, bindGroup0, 0, nullptr);
-    renderPassEncoder.SetBindGroup(1, bindGroup1, 0, nullptr);
+    renderPassEncoder.SetBindGroup(0, bindGroup0);
+    renderPassEncoder.SetBindGroup(1, bindGroup1);
     renderPassEncoder.SetPipeline(pipeline);
     renderPassEncoder.Draw(3, 1, 0, 0);
 
@@ -1042,12 +1042,12 @@
     dawn::RenderPassEncoder renderPassEncoder = commandEncoder.BeginRenderPass(&renderPass);
 
     renderPassEncoder.SetPipeline(pipelineA);
-    renderPassEncoder.SetBindGroup(0, bindGroupA0, 0, nullptr);
-    renderPassEncoder.SetBindGroup(1, bindGroupA1, 0, nullptr);
+    renderPassEncoder.SetBindGroup(0, bindGroupA0);
+    renderPassEncoder.SetBindGroup(1, bindGroupA1);
     renderPassEncoder.Draw(3, 1, 0, 0);
 
     renderPassEncoder.SetPipeline(pipelineB);
-    renderPassEncoder.SetBindGroup(0, bindGroupB0, 0, nullptr);
+    renderPassEncoder.SetBindGroup(0, bindGroupB0);
     // This draw is valid.
     // Bind group 1 persists even though it is not "inherited".
     renderPassEncoder.Draw(3, 1, 0, 0);
diff --git a/src/tests/unittests/validation/CommandBufferValidationTests.cpp b/src/tests/unittests/validation/CommandBufferValidationTests.cpp
index 45d32da..402beb1 100644
--- a/src/tests/unittests/validation/CommandBufferValidationTests.cpp
+++ b/src/tests/unittests/validation/CommandBufferValidationTests.cpp
@@ -219,7 +219,7 @@
     DummyRenderPass dummyRenderPass(device);
     dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
     pass.SetIndexBuffer(buffer, 0);
-    pass.SetBindGroup(0, bg, 0, nullptr);
+    pass.SetBindGroup(0, bg);
     pass.EndPass();
     ASSERT_DEVICE_ERROR(encoder.Finish());
 }
@@ -249,7 +249,7 @@
     // Use the texture as both sampeld and output attachment in the same pass
     dawn::CommandEncoder encoder = device.CreateCommandEncoder();
     dawn::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
-    pass.SetBindGroup(0, bg, 0, nullptr);
+    pass.SetBindGroup(0, bg);
     pass.EndPass();
     ASSERT_DEVICE_ERROR(encoder.Finish());
 }
diff --git a/src/tests/unittests/validation/RenderBundleValidationTests.cpp b/src/tests/unittests/validation/RenderBundleValidationTests.cpp
index 0ac4fda..0cbaa56 100644
--- a/src/tests/unittests/validation/RenderBundleValidationTests.cpp
+++ b/src/tests/unittests/validation/RenderBundleValidationTests.cpp
@@ -158,8 +158,8 @@
 
     dawn::RenderBundleEncoder renderBundleEncoder = device.CreateRenderBundleEncoder(&desc);
     renderBundleEncoder.SetPipeline(pipeline);
-    renderBundleEncoder.SetBindGroup(0, bg0, 0, nullptr);
-    renderBundleEncoder.SetBindGroup(1, bg1, 0, nullptr);
+    renderBundleEncoder.SetBindGroup(0, bg0);
+    renderBundleEncoder.SetBindGroup(1, bg1);
     renderBundleEncoder.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
     renderBundleEncoder.Draw(3, 0, 0, 0);
     dawn::RenderBundle renderBundle = renderBundleEncoder.Finish();
@@ -246,8 +246,8 @@
 
         pass.SetPipeline(pipeline);
 
-        renderBundleEncoder.SetBindGroup(0, bg0, 0, nullptr);
-        renderBundleEncoder.SetBindGroup(1, bg1, 0, nullptr);
+        renderBundleEncoder.SetBindGroup(0, bg0);
+        renderBundleEncoder.SetBindGroup(1, bg1);
         renderBundleEncoder.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
         renderBundleEncoder.Draw(3, 0, 0, 0);
         ASSERT_DEVICE_ERROR(dawn::RenderBundle renderBundle = renderBundleEncoder.Finish());
@@ -263,8 +263,8 @@
         dawn::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
         dawn::RenderBundleEncoder renderBundleEncoder = device.CreateRenderBundleEncoder(&desc);
 
-        pass.SetBindGroup(0, bg0, 0, nullptr);
-        pass.SetBindGroup(1, bg1, 0, nullptr);
+        pass.SetBindGroup(0, bg0);
+        pass.SetBindGroup(1, bg1);
 
         renderBundleEncoder.SetPipeline(pipeline);
         renderBundleEncoder.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
@@ -283,8 +283,8 @@
         dawn::RenderBundleEncoder renderBundleEncoder = device.CreateRenderBundleEncoder(&desc);
 
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(0, bg0, 0, nullptr);
-        pass.SetBindGroup(1, bg1, 0, nullptr);
+        pass.SetBindGroup(0, bg0);
+        pass.SetBindGroup(1, bg1);
 
         renderBundleEncoder.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
         renderBundleEncoder.Draw(3, 0, 0, 0);
@@ -304,8 +304,8 @@
         pass.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
 
         renderBundleEncoder.SetPipeline(pipeline);
-        renderBundleEncoder.SetBindGroup(0, bg0, 0, nullptr);
-        renderBundleEncoder.SetBindGroup(1, bg1, 0, nullptr);
+        renderBundleEncoder.SetBindGroup(0, bg0);
+        renderBundleEncoder.SetBindGroup(1, bg1);
         renderBundleEncoder.Draw(3, 0, 0, 0);
         ASSERT_DEVICE_ERROR(dawn::RenderBundle renderBundle = renderBundleEncoder.Finish());
 
@@ -333,8 +333,8 @@
         dawn::RenderBundle renderBundle = renderBundleEncoder.Finish();
 
         pass.ExecuteBundles(1, &renderBundle);
-        pass.SetBindGroup(0, bg0, 0, nullptr);
-        pass.SetBindGroup(1, bg1, 0, nullptr);
+        pass.SetBindGroup(0, bg0);
+        pass.SetBindGroup(1, bg1);
         pass.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
         pass.Draw(3, 0, 0, 0);
         pass.EndPass();
@@ -348,8 +348,8 @@
         dawn::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
 
         dawn::RenderBundleEncoder renderBundleEncoder = device.CreateRenderBundleEncoder(&desc);
-        renderBundleEncoder.SetBindGroup(0, bg0, 0, nullptr);
-        renderBundleEncoder.SetBindGroup(1, bg1, 0, nullptr);
+        renderBundleEncoder.SetBindGroup(0, bg0);
+        renderBundleEncoder.SetBindGroup(1, bg1);
         dawn::RenderBundle renderBundle = renderBundleEncoder.Finish();
 
         pass.ExecuteBundles(1, &renderBundle);
@@ -368,8 +368,8 @@
 
         dawn::RenderBundleEncoder renderBundleEncoder = device.CreateRenderBundleEncoder(&desc);
         renderBundleEncoder.SetPipeline(pipeline);
-        renderBundleEncoder.SetBindGroup(0, bg0, 0, nullptr);
-        renderBundleEncoder.SetBindGroup(1, bg1, 0, nullptr);
+        renderBundleEncoder.SetBindGroup(0, bg0);
+        renderBundleEncoder.SetBindGroup(1, bg1);
         dawn::RenderBundle renderBundle = renderBundleEncoder.Finish();
 
         pass.ExecuteBundles(1, &renderBundle);
@@ -391,8 +391,8 @@
 
         pass.ExecuteBundles(1, &renderBundle);
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(0, bg0, 0, nullptr);
-        pass.SetBindGroup(1, bg1, 0, nullptr);
+        pass.SetBindGroup(0, bg0);
+        pass.SetBindGroup(1, bg1);
         pass.Draw(3, 0, 0, 0);
         pass.EndPass();
 
@@ -418,8 +418,8 @@
 
         pass.SetPipeline(pipeline);
         pass.ExecuteBundles(1, &renderBundle);
-        pass.SetBindGroup(0, bg0, 0, nullptr);
-        pass.SetBindGroup(1, bg1, 0, nullptr);
+        pass.SetBindGroup(0, bg0);
+        pass.SetBindGroup(1, bg1);
         pass.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
         pass.Draw(3, 0, 0, 0);
         pass.EndPass();
@@ -432,8 +432,8 @@
         dawn::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         dawn::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
 
-        pass.SetBindGroup(0, bg0, 0, nullptr);
-        pass.SetBindGroup(1, bg1, 0, nullptr);
+        pass.SetBindGroup(0, bg0);
+        pass.SetBindGroup(1, bg1);
         pass.ExecuteBundles(1, &renderBundle);
         pass.SetPipeline(pipeline);
         pass.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
@@ -449,8 +449,8 @@
         dawn::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
 
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(0, bg0, 0, nullptr);
-        pass.SetBindGroup(1, bg1, 0, nullptr);
+        pass.SetBindGroup(0, bg0);
+        pass.SetBindGroup(1, bg1);
         pass.ExecuteBundles(1, &renderBundle);
         pass.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
         pass.Draw(3, 0, 0, 0);
@@ -467,8 +467,8 @@
         pass.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
         pass.ExecuteBundles(1, &renderBundle);
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(0, bg0, 0, nullptr);
-        pass.SetBindGroup(1, bg1, 0, nullptr);
+        pass.SetBindGroup(0, bg0);
+        pass.SetBindGroup(1, bg1);
         pass.Draw(3, 0, 0, 0);
         pass.EndPass();
 
@@ -481,8 +481,8 @@
         dawn::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
 
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(0, bg0, 0, nullptr);
-        pass.SetBindGroup(1, bg1, 0, nullptr);
+        pass.SetBindGroup(0, bg0);
+        pass.SetBindGroup(1, bg1);
         pass.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
         pass.ExecuteBundles(0, nullptr);
         pass.Draw(3, 0, 0, 0);
@@ -504,16 +504,16 @@
 
     dawn::RenderBundleEncoder renderBundleEncoder0 = device.CreateRenderBundleEncoder(&desc);
     renderBundleEncoder0.SetPipeline(pipeline);
-    renderBundleEncoder0.SetBindGroup(0, bg0, 0, nullptr);
-    renderBundleEncoder0.SetBindGroup(1, bg1, 0, nullptr);
+    renderBundleEncoder0.SetBindGroup(0, bg0);
+    renderBundleEncoder0.SetBindGroup(1, bg1);
     renderBundleEncoder0.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
     renderBundleEncoder0.Draw(3, 1, 0, 0);
     renderBundles[0] = renderBundleEncoder0.Finish();
 
     dawn::RenderBundleEncoder renderBundleEncoder1 = device.CreateRenderBundleEncoder(&desc);
     renderBundleEncoder1.SetPipeline(pipeline);
-    renderBundleEncoder1.SetBindGroup(0, bg0, 0, nullptr);
-    renderBundleEncoder1.SetBindGroup(1, bg1, 0, nullptr);
+    renderBundleEncoder1.SetBindGroup(0, bg0);
+    renderBundleEncoder1.SetBindGroup(1, bg1);
     renderBundleEncoder1.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
     renderBundleEncoder1.Draw(3, 1, 0, 0);
     renderBundles[1] = renderBundleEncoder1.Finish();
@@ -535,8 +535,8 @@
 
     dawn::RenderBundleEncoder renderBundleEncoder = device.CreateRenderBundleEncoder(&desc);
     renderBundleEncoder.SetPipeline(pipeline);
-    renderBundleEncoder.SetBindGroup(0, bg0, 0, nullptr);
-    renderBundleEncoder.SetBindGroup(1, bg1, 0, nullptr);
+    renderBundleEncoder.SetBindGroup(0, bg0);
+    renderBundleEncoder.SetBindGroup(1, bg1);
     renderBundleEncoder.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
     renderBundleEncoder.Draw(3, 1, 0, 0);
     dawn::RenderBundle renderBundle = renderBundleEncoder.Finish();
@@ -615,8 +615,8 @@
     {
         dawn::RenderBundleEncoder renderBundleEncoder = device.CreateRenderBundleEncoder(&desc);
         renderBundleEncoder.SetPipeline(pipeline);
-        renderBundleEncoder.SetBindGroup(0, bg0, 0, nullptr);
-        renderBundleEncoder.SetBindGroup(1, bg1Vertex, 0, nullptr);
+        renderBundleEncoder.SetBindGroup(0, bg0);
+        renderBundleEncoder.SetBindGroup(1, bg1Vertex);
         renderBundleEncoder.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
         renderBundleEncoder.Draw(3, 0, 0, 0);
         renderBundle0 = renderBundleEncoder.Finish();
@@ -626,8 +626,8 @@
     {
         dawn::RenderBundleEncoder renderBundleEncoder = device.CreateRenderBundleEncoder(&desc);
         renderBundleEncoder.SetPipeline(pipeline);
-        renderBundleEncoder.SetBindGroup(0, bg0, 0, nullptr);
-        renderBundleEncoder.SetBindGroup(1, bg1, 0, nullptr);
+        renderBundleEncoder.SetBindGroup(0, bg0);
+        renderBundleEncoder.SetBindGroup(1, bg1);
         renderBundleEncoder.SetVertexBuffers(0, 1, &vertexStorageBuffer, &zeroOffset);
         renderBundleEncoder.Draw(3, 0, 0, 0);
         renderBundle1 = renderBundleEncoder.Finish();
@@ -638,8 +638,8 @@
     {
         dawn::RenderBundleEncoder renderBundleEncoder = device.CreateRenderBundleEncoder(&desc);
         renderBundleEncoder.SetPipeline(pipeline);
-        renderBundleEncoder.SetBindGroup(0, bg0, 0, nullptr);
-        renderBundleEncoder.SetBindGroup(1, bg1Vertex, 0, nullptr);
+        renderBundleEncoder.SetBindGroup(0, bg0);
+        renderBundleEncoder.SetBindGroup(1, bg1Vertex);
         renderBundleEncoder.SetVertexBuffers(0, 1, &vertexStorageBuffer, &zeroOffset);
         renderBundleEncoder.Draw(3, 0, 0, 0);
         ASSERT_DEVICE_ERROR(renderBundleEncoder.Finish());
@@ -666,8 +666,8 @@
         dawn::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
 
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(0, bg0, 0, nullptr);
-        pass.SetBindGroup(1, bg1Vertex, 0, nullptr);
+        pass.SetBindGroup(0, bg0);
+        pass.SetBindGroup(1, bg1Vertex);
         pass.SetVertexBuffers(0, 1, &vertexBuffer, &zeroOffset);
         pass.Draw(3, 0, 0, 0);
 
@@ -686,8 +686,8 @@
         pass.ExecuteBundles(1, &renderBundle0);
 
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(0, bg0, 0, nullptr);
-        pass.SetBindGroup(1, bg1, 0, nullptr);
+        pass.SetBindGroup(0, bg0);
+        pass.SetBindGroup(1, bg1);
         pass.SetVertexBuffers(0, 1, &vertexStorageBuffer, &zeroOffset);
         pass.Draw(3, 0, 0, 0);
 
diff --git a/src/tests/unittests/validation/RenderPassValidationTests.cpp b/src/tests/unittests/validation/RenderPassValidationTests.cpp
index 9c237cc..8197fdf 100644
--- a/src/tests/unittests/validation/RenderPassValidationTests.cpp
+++ b/src/tests/unittests/validation/RenderPassValidationTests.cpp
@@ -80,8 +80,8 @@
         dawn::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         dawn::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(0, bg1, 0, nullptr);
-        pass.SetBindGroup(1, bg2, 0, nullptr);
+        pass.SetBindGroup(0, bg1);
+        pass.SetBindGroup(1, bg2);
         pass.Draw(3, 0, 0, 0);
         pass.EndPass();
         commandEncoder.Finish();
@@ -98,7 +98,7 @@
         dawn::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         dawn::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(1, bg2, 0, nullptr);
+        pass.SetBindGroup(1, bg2);
         pass.Draw(3, 0, 0, 0);
         pass.EndPass();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
@@ -107,7 +107,7 @@
         dawn::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         dawn::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
         pass.SetPipeline(pipeline);
-        pass.SetBindGroup(0, bg1, 0, nullptr);
+        pass.SetBindGroup(0, bg1);
         pass.Draw(3, 0, 0, 0);
         pass.EndPass();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
