diff --git a/dawn.json b/dawn.json
index 08516b3..d53239f 100644
--- a/dawn.json
+++ b/dawn.json
@@ -956,19 +956,19 @@
                 "name": "draw",
                 "args": [
                     {"name": "vertex count", "type": "uint32_t"},
-                    {"name": "instance count", "type": "uint32_t"},
-                    {"name": "first vertex", "type": "uint32_t"},
-                    {"name": "first instance", "type": "uint32_t"}
+                    {"name": "instance count", "type": "uint32_t", "default": "1"},
+                    {"name": "first vertex", "type": "uint32_t", "default": "0"},
+                    {"name": "first instance", "type": "uint32_t",  "default": "0"}
                 ]
             },
             {
                 "name": "draw indexed",
                 "args": [
                     {"name": "index count", "type": "uint32_t"},
-                    {"name": "instance count", "type": "uint32_t"},
-                    {"name": "first index", "type": "uint32_t"},
-                    {"name": "base vertex", "type": "int32_t"},
-                    {"name": "first instance", "type": "uint32_t"}
+                    {"name": "instance count", "type": "uint32_t", "default": "1"},
+                    {"name": "first index", "type": "uint32_t", "default": "0"},
+                    {"name": "base vertex", "type": "int32_t", "default": "0"},
+                    {"name": "first instance", "type": "uint32_t", "default": "0"}
                 ]
             },
             {
@@ -1102,19 +1102,19 @@
                 "name": "draw",
                 "args": [
                     {"name": "vertex count", "type": "uint32_t"},
-                    {"name": "instance count", "type": "uint32_t"},
-                    {"name": "first vertex", "type": "uint32_t"},
-                    {"name": "first instance", "type": "uint32_t"}
+                    {"name": "instance count", "type": "uint32_t", "default": "1"},
+                    {"name": "first vertex", "type": "uint32_t", "default": "0"},
+                    {"name": "first instance", "type": "uint32_t",  "default": "0"}
                 ]
             },
             {
                 "name": "draw indexed",
                 "args": [
                     {"name": "index count", "type": "uint32_t"},
-                    {"name": "instance count", "type": "uint32_t"},
-                    {"name": "first index", "type": "uint32_t"},
-                    {"name": "base vertex", "type": "int32_t"},
-                    {"name": "first instance", "type": "uint32_t"}
+                    {"name": "instance count", "type": "uint32_t", "default": "1"},
+                    {"name": "first index", "type": "uint32_t", "default": "0"},
+                    {"name": "base vertex", "type": "int32_t", "default": "0"},
+                    {"name": "first instance", "type": "uint32_t", "default": "0"}
                 ]
             },
             {
diff --git a/examples/Animometer.cpp b/examples/Animometer.cpp
index 1cc5eaa..6657f51 100644
--- a/examples/Animometer.cpp
+++ b/examples/Animometer.cpp
@@ -161,7 +161,7 @@
         for (size_t i = 0; i < kNumTriangles; i++) {
             uint32_t offset = i * sizeof(ShaderData);
             pass.SetBindGroup(0, bindGroup, 1, &offset);
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
         }
 
         pass.EndPass();
diff --git a/examples/ComputeBoids.cpp b/examples/ComputeBoids.cpp
index 1495387..a446762 100644
--- a/examples/ComputeBoids.cpp
+++ b/examples/ComputeBoids.cpp
@@ -279,7 +279,7 @@
         pass.SetPipeline(renderPipeline);
         pass.SetVertexBuffer(0, bufferDst);
         pass.SetVertexBuffer(1, modelBuffer);
-        pass.Draw(3, kNumParticles, 0, 0);
+        pass.Draw(3, kNumParticles);
         pass.EndPass();
     }
 
diff --git a/examples/CppHelloTriangle.cpp b/examples/CppHelloTriangle.cpp
index 05e7a5c..78e0cb8 100644
--- a/examples/CppHelloTriangle.cpp
+++ b/examples/CppHelloTriangle.cpp
@@ -163,7 +163,7 @@
         pass.SetBindGroup(0, bindGroup);
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.SetIndexBuffer(indexBuffer);
-        pass.DrawIndexed(3, 1, 0, 0, 0);
+        pass.DrawIndexed(3);
         pass.EndPass();
     }
 
diff --git a/examples/CubeReflection.cpp b/examples/CubeReflection.cpp
index 2102783..b07f1a1 100644
--- a/examples/CubeReflection.cpp
+++ b/examples/CubeReflection.cpp
@@ -274,18 +274,18 @@
         pass.SetBindGroup(0, bindGroup[0]);
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.SetIndexBuffer(indexBuffer);
-        pass.DrawIndexed(36, 1, 0, 0, 0);
+        pass.DrawIndexed(36);
 
         pass.SetStencilReference(0x1);
         pass.SetPipeline(planePipeline);
         pass.SetBindGroup(0, bindGroup[0]);
         pass.SetVertexBuffer(0, planeBuffer);
-        pass.DrawIndexed(6, 1, 0, 0, 0);
+        pass.DrawIndexed(6);
 
         pass.SetPipeline(reflectionPipeline);
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.SetBindGroup(0, bindGroup[1]);
-        pass.DrawIndexed(36, 1, 0, 0, 0);
+        pass.DrawIndexed(36);
 
         pass.EndPass();
     }
diff --git a/examples/ManualSwapChainTest.cpp b/examples/ManualSwapChainTest.cpp
index b72672c..acd0d87 100644
--- a/examples/ManualSwapChainTest.cpp
+++ b/examples/ManualSwapChainTest.cpp
@@ -140,7 +140,7 @@
 
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&desc);
         pass.SetPipeline(trianglePipeline);
-        pass.Draw(3, 1, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
     } else {
         data->clearCycle -= 1.0 / 60.f;
diff --git a/src/tests/end2end/BindGroupTests.cpp b/src/tests/end2end/BindGroupTests.cpp
index daa6151..b7e147f 100644
--- a/src/tests/end2end/BindGroupTests.cpp
+++ b/src/tests/end2end/BindGroupTests.cpp
@@ -211,7 +211,7 @@
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
     pass.SetPipeline(pipeline);
     pass.SetBindGroup(0, bindGroup);
-    pass.Draw(3, 1, 0, 0);
+    pass.Draw(3);
     pass.EndPass();
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -316,7 +316,7 @@
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
     pass.SetPipeline(pipeline);
     pass.SetBindGroup(0, bindGroup);
-    pass.Draw(3, 1, 0, 0);
+    pass.Draw(3);
     pass.EndPass();
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -400,7 +400,7 @@
     pass.SetPipeline(pipeline);
     pass.SetBindGroup(0, bindGroups[0]);
     pass.SetBindGroup(1, bindGroups[1]);
-    pass.Draw(3, 1, 0, 0);
+    pass.Draw(3);
     pass.EndPass();
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -446,10 +446,10 @@
     pass.SetBindGroup(1, bindGroup);
     pass.SetBindGroup(2, bindGroup);
     pass.SetBindGroup(3, bindGroup);
-    pass.Draw(3, 1, 0, 0);
+    pass.Draw(3);
 
     pass.SetPipeline(pipeline);
-    pass.Draw(3, 1, 0, 0);
+    pass.Draw(3);
     pass.EndPass();
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -489,7 +489,7 @@
     // Set the bind group, then the pipeline, and draw.
     pass.SetBindGroup(0, bindGroup);
     pass.SetPipeline(pipeline);
-    pass.Draw(3, 1, 0, 0);
+    pass.Draw(3);
 
     pass.EndPass();
 
@@ -550,7 +550,7 @@
 
     // Set the pipeline and draw.
     pass.SetPipeline(pipeline);
-    pass.Draw(3, 1, 0, 0);
+    pass.Draw(3);
 
     pass.EndPass();
 
@@ -627,7 +627,7 @@
     // Both bind groups match the pipeline.
     // They should persist and not need to be bound again.
     pass.SetPipeline(pipeline1);
-    pass.Draw(3, 1, 0, 0);
+    pass.Draw(3);
 
     pass.EndPass();
 
@@ -721,7 +721,7 @@
     dynamicOffset = color2Offset;
     pass.SetBindGroup(2, storageBindGroup, 1, &dynamicOffset);
 
-    pass.Draw(3, 1, 0, 0);
+    pass.Draw(3);
 
     // Set the pipeline to (uniform, storage, storage)
     //  - The first bind group should persist (inherited on some backends)
@@ -734,7 +734,7 @@
     dynamicOffset = color3Offset;
     pass.SetBindGroup(1, storageBindGroup, 1, &dynamicOffset);
 
-    pass.Draw(3, 1, 0, 0);
+    pass.Draw(3);
     pass.EndPass();
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -773,7 +773,7 @@
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
     pass.SetPipeline(pipeline);
     pass.SetBindGroup(0, bindGroup);
-    pass.Draw(3, 1, 0, 0);
+    pass.Draw(3);
     pass.EndPass();
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -831,7 +831,7 @@
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
             pass.SetPipeline(pipeline);
             pass.SetBindGroup(0, bindGroup);
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
             pass.EndPass();
 
             wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/ClipSpaceTests.cpp b/src/tests/end2end/ClipSpaceTests.cpp
index 856a5ae..77f503e 100644
--- a/src/tests/end2end/ClipSpaceTests.cpp
+++ b/src/tests/end2end/ClipSpaceTests.cpp
@@ -89,7 +89,7 @@
     wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
     wgpu::RenderPassEncoder renderPass = commandEncoder.BeginRenderPass(&renderPassDescriptor);
     renderPass.SetPipeline(CreatePipelineForTest());
-    renderPass.Draw(6, 1, 0, 0);
+    renderPass.Draw(6);
     renderPass.EndPass();
     wgpu::CommandBuffer commandBuffer = commandEncoder.Finish();
     wgpu::Queue queue = device.CreateQueue();
diff --git a/src/tests/end2end/ColorStateTests.cpp b/src/tests/end2end/ColorStateTests.cpp
index ac6c802..d8bcbbc 100644
--- a/src/tests/end2end/ColorStateTests.cpp
+++ b/src/tests/end2end/ColorStateTests.cpp
@@ -109,13 +109,13 @@
             // First use the base pipeline to draw a triangle with no blending
             pass.SetPipeline(basePipeline);
             pass.SetBindGroup(0, MakeBindGroupForColors(std::array<RGBA8, 1>({{base}})));
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
 
             // 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}})));
             pass.SetBlendColor(&blendColor);
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
             pass.EndPass();
         }
 
@@ -726,7 +726,7 @@
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
             pass.SetPipeline(testPipeline);
             pass.SetBindGroup(0, MakeBindGroupForColors(std::array<RGBA8, 1>({{base}})));
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
             pass.EndPass();
         }
 
@@ -842,12 +842,12 @@
             pass.SetPipeline(basePipeline);
             pass.SetBindGroup(
                 0, MakeBindGroupForColors(std::array<RGBA8, 4>({{base, base, base, base}})));
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
 
             pass.SetPipeline(testPipeline);
             pass.SetBindGroup(0, MakeBindGroupForColors(
                                      std::array<RGBA8, 4>({{color0, color1, color2, color3}})));
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
             pass.EndPass();
         }
 
@@ -915,11 +915,11 @@
             pass.SetPipeline(basePipeline);
             pass.SetBindGroup(0,
                               MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(0, 0, 0, 0)}})));
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
             pass.SetPipeline(testPipeline);
             pass.SetBindGroup(
                 0, MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(255, 255, 255, 255)}})));
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
             pass.EndPass();
         }
 
@@ -937,12 +937,12 @@
             pass.SetPipeline(basePipeline);
             pass.SetBindGroup(0,
                               MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(0, 0, 0, 0)}})));
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
             pass.SetPipeline(testPipeline);
             pass.SetBlendColor(&kWhite);
             pass.SetBindGroup(
                 0, MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(255, 255, 255, 255)}})));
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
             pass.EndPass();
         }
 
@@ -961,12 +961,12 @@
             pass.SetPipeline(basePipeline);
             pass.SetBindGroup(0,
                               MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(0, 0, 0, 0)}})));
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
             pass.SetPipeline(testPipeline);
             pass.SetBlendColor(&kWhite);
             pass.SetBindGroup(
                 0, MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(255, 255, 255, 255)}})));
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
             pass.EndPass();
         }
         {
@@ -974,11 +974,11 @@
             pass.SetPipeline(basePipeline);
             pass.SetBindGroup(0,
                               MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(0, 0, 0, 0)}})));
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
             pass.SetPipeline(testPipeline);
             pass.SetBindGroup(
                 0, MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(255, 255, 255, 255)}})));
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
             pass.EndPass();
         }
 
@@ -1031,7 +1031,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetPipeline(basePipeline);
         pass.SetBindGroup(0, MakeBindGroupForColors(std::array<RGBA8, 1>({{base}})));
-        pass.Draw(3, 1, 0, 0);
+        pass.Draw(3);
 
         // Set a pipeline that will dirty the color write mask
         pass.SetPipeline(testPipeline);
diff --git a/src/tests/end2end/CompressedTextureFormatTests.cpp b/src/tests/end2end/CompressedTextureFormatTests.cpp
index 41c492a..85208fe 100644
--- a/src/tests/end2end/CompressedTextureFormatTests.cpp
+++ b/src/tests/end2end/CompressedTextureFormatTests.cpp
@@ -180,7 +180,7 @@
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
             pass.SetPipeline(renderPipeline);
             pass.SetBindGroup(0, bindGroup);
-            pass.Draw(6, 1, 0, 0);
+            pass.Draw(6);
             pass.EndPass();
         }
 
diff --git a/src/tests/end2end/CullingTests.cpp b/src/tests/end2end/CullingTests.cpp
index 6d2cfab..9be2b98 100644
--- a/src/tests/end2end/CullingTests.cpp
+++ b/src/tests/end2end/CullingTests.cpp
@@ -84,7 +84,7 @@
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder renderPass = commandEncoder.BeginRenderPass(&renderPassDescriptor);
         renderPass.SetPipeline(CreatePipelineForTest(frontFace, cullMode));
-        renderPass.Draw(6, 1, 0, 0);
+        renderPass.Draw(6);
         renderPass.EndPass();
         wgpu::CommandBuffer commandBuffer = commandEncoder.Finish();
         wgpu::Queue queue = device.CreateQueue();
diff --git a/src/tests/end2end/DepthStencilStateTests.cpp b/src/tests/end2end/DepthStencilStateTests.cpp
index 7625f42..f0c3023 100644
--- a/src/tests/end2end/DepthStencilStateTests.cpp
+++ b/src/tests/end2end/DepthStencilStateTests.cpp
@@ -288,7 +288,7 @@
                 pass.SetStencilReference(test.stencil);  // Set the stencil reference
                 pass.SetBindGroup(
                     0, bindGroup);  // Set the bind group which contains color and depth data
-                pass.Draw(6, 1, 0, 0);
+                pass.Draw(6);
             }
             pass.EndPass();
 
diff --git a/src/tests/end2end/DestroyTests.cpp b/src/tests/end2end/DestroyTests.cpp
index 27bbd17..c2c47ee 100644
--- a/src/tests/end2end/DestroyTests.cpp
+++ b/src/tests/end2end/DestroyTests.cpp
@@ -76,7 +76,7 @@
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
             pass.SetPipeline(pipeline);
             pass.SetVertexBuffer(0, vertexBuffer);
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
             pass.EndPass();
         }
         wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/DynamicBufferOffsetTests.cpp b/src/tests/end2end/DynamicBufferOffsetTests.cpp
index 8478456..7d8c534 100644
--- a/src/tests/end2end/DynamicBufferOffsetTests.cpp
+++ b/src/tests/end2end/DynamicBufferOffsetTests.cpp
@@ -221,7 +221,7 @@
         commandEncoder.BeginRenderPass(&renderPass.renderPassInfo);
     renderPassEncoder.SetPipeline(pipeline);
     renderPassEncoder.SetBindGroup(0, mBindGroups[0], offsets.size(), offsets.data());
-    renderPassEncoder.Draw(3, 1, 0, 0);
+    renderPassEncoder.Draw(3);
     renderPassEncoder.EndPass();
     wgpu::CommandBuffer commands = commandEncoder.Finish();
     queue.Submit(1, &commands);
@@ -243,7 +243,7 @@
         commandEncoder.BeginRenderPass(&renderPass.renderPassInfo);
     renderPassEncoder.SetPipeline(pipeline);
     renderPassEncoder.SetBindGroup(0, mBindGroups[0], offsets.size(), offsets.data());
-    renderPassEncoder.Draw(3, 1, 0, 0);
+    renderPassEncoder.Draw(3);
     renderPassEncoder.EndPass();
     wgpu::CommandBuffer commands = commandEncoder.Finish();
     queue.Submit(1, &commands);
@@ -309,10 +309,10 @@
         commandEncoder.BeginRenderPass(&renderPass.renderPassInfo);
     renderPassEncoder.SetPipeline(pipeline);
     renderPassEncoder.SetBindGroup(0, mBindGroups[0], offsets.size(), offsets.data());
-    renderPassEncoder.Draw(3, 1, 0, 0);
+    renderPassEncoder.Draw(3);
     renderPassEncoder.SetPipeline(testPipeline);
     renderPassEncoder.SetBindGroup(1, mBindGroups[1]);
-    renderPassEncoder.Draw(3, 1, 0, 0);
+    renderPassEncoder.Draw(3);
     renderPassEncoder.EndPass();
     wgpu::CommandBuffer commands = commandEncoder.Finish();
     queue.Submit(1, &commands);
@@ -368,9 +368,9 @@
         commandEncoder.BeginRenderPass(&renderPass.renderPassInfo);
     renderPassEncoder.SetPipeline(pipeline);
     renderPassEncoder.SetBindGroup(0, mBindGroups[0], offsets.size(), offsets.data());
-    renderPassEncoder.Draw(3, 1, 0, 0);
+    renderPassEncoder.Draw(3);
     renderPassEncoder.SetBindGroup(0, mBindGroups[0], testOffsets.size(), testOffsets.data());
-    renderPassEncoder.Draw(3, 1, 0, 0);
+    renderPassEncoder.Draw(3);
     renderPassEncoder.EndPass();
     wgpu::CommandBuffer commands = commandEncoder.Finish();
     queue.Submit(1, &commands);
diff --git a/src/tests/end2end/GpuMemorySynchronizationTests.cpp b/src/tests/end2end/GpuMemorySynchronizationTests.cpp
index edc5994..a246244 100644
--- a/src/tests/end2end/GpuMemorySynchronizationTests.cpp
+++ b/src/tests/end2end/GpuMemorySynchronizationTests.cpp
@@ -144,7 +144,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetPipeline(render);
         pass.SetBindGroup(0, bindGroup);
-        pass.Draw(1, 1, 0, 0);
+        pass.Draw(1);
         pass.EndPass();
     }
 
@@ -176,7 +176,7 @@
     wgpu::RenderPassEncoder pass0 = encoder.BeginRenderPass(&renderPass.renderPassInfo);
     pass0.SetPipeline(render);
     pass0.SetBindGroup(0, bindGroup0);
-    pass0.Draw(1, 1, 0, 0);
+    pass0.Draw(1);
     pass0.EndPass();
 
     // Read that data in compute pass.
@@ -221,7 +221,7 @@
     wgpu::RenderPassEncoder pass1 = encoder.BeginRenderPass(&renderPass.renderPassInfo);
     pass1.SetPipeline(render);
     pass1.SetBindGroup(0, bindGroup0);
-    pass1.Draw(1, 1, 0, 0);
+    pass1.Draw(1);
     pass1.EndPass();
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -325,7 +325,7 @@
     wgpu::RenderPassEncoder pass1 = encoder0.BeginRenderPass(&renderPass.renderPassInfo);
     pass1.SetPipeline(render);
     pass1.SetBindGroup(0, renderBindGroup);
-    pass1.Draw(1, 1, 0, 0);
+    pass1.Draw(1);
     pass1.EndPass();
 
     wgpu::CommandBuffer commands = encoder0.Finish();
@@ -364,7 +364,7 @@
     wgpu::RenderPassEncoder pass1 = encoder1.BeginRenderPass(&renderPass.renderPassInfo);
     pass1.SetPipeline(render);
     pass1.SetBindGroup(0, renderBindGroup);
-    pass1.Draw(1, 1, 0, 0);
+    pass1.Draw(1);
     pass1.EndPass();
 
     cb[1] = encoder1.Finish();
@@ -404,7 +404,7 @@
     wgpu::RenderPassEncoder pass1 = encoder1.BeginRenderPass(&renderPass.renderPassInfo);
     pass1.SetPipeline(render);
     pass1.SetBindGroup(0, renderBindGroup);
-    pass1.Draw(1, 1, 0, 0);
+    pass1.Draw(1);
     pass1.EndPass();
 
     cb[1] = encoder1.Finish();
@@ -550,7 +550,7 @@
     pass1.SetVertexBuffer(0, vertexBuffer);
     pass1.SetIndexBuffer(indexBuffer, 0);
     pass1.SetBindGroup(0, bindGroup1);
-    pass1.DrawIndexed(6, 1, 0, 0, 0);
+    pass1.DrawIndexed(6);
     pass1.EndPass();
 
     wgpu::CommandBuffer commandBuffer = encoder.Finish();
@@ -674,7 +674,7 @@
     pass1.SetVertexBuffer(0, buffer);
     pass1.SetIndexBuffer(buffer, offsetof(Data, indices));
     pass1.SetBindGroup(0, bindGroup1);
-    pass1.DrawIndexed(6, 1, 0, 0, 0);
+    pass1.DrawIndexed(6);
     pass1.EndPass();
 
     wgpu::CommandBuffer commandBuffer = encoder.Finish();
diff --git a/src/tests/end2end/IOSurfaceWrappingTests.cpp b/src/tests/end2end/IOSurfaceWrappingTests.cpp
index 29d5fda..22dce4d 100644
--- a/src/tests/end2end/IOSurfaceWrappingTests.cpp
+++ b/src/tests/end2end/IOSurfaceWrappingTests.cpp
@@ -318,7 +318,7 @@
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
             pass.SetPipeline(pipeline);
             pass.SetBindGroup(0, bindGroup);
-            pass.Draw(6, 1, 0, 0);
+            pass.Draw(6);
             pass.EndPass();
         }
 
diff --git a/src/tests/end2end/IndexFormatTests.cpp b/src/tests/end2end/IndexFormatTests.cpp
index 5b93aad..4437260 100644
--- a/src/tests/end2end/IndexFormatTests.cpp
+++ b/src/tests/end2end/IndexFormatTests.cpp
@@ -80,7 +80,7 @@
         pass.SetPipeline(pipeline);
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.SetIndexBuffer(indexBuffer);
-        pass.DrawIndexed(3, 1, 0, 0, 0);
+        pass.DrawIndexed(3);
         pass.EndPass();
     }
 
@@ -107,7 +107,7 @@
         pass.SetPipeline(pipeline);
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.SetIndexBuffer(indexBuffer);
-        pass.DrawIndexed(3, 1, 0, 0, 0);
+        pass.DrawIndexed(3);
         pass.EndPass();
     }
 
@@ -157,7 +157,7 @@
         pass.SetPipeline(pipeline);
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.SetIndexBuffer(indexBuffer);
-        pass.DrawIndexed(7, 1, 0, 0, 0);
+        pass.DrawIndexed(7);
         pass.EndPass();
     }
 
@@ -199,7 +199,7 @@
         pass.SetPipeline(pipeline);
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.SetIndexBuffer(indexBuffer);
-        pass.DrawIndexed(7, 1, 0, 0, 0);
+        pass.DrawIndexed(7);
         pass.EndPass();
     }
 
@@ -235,7 +235,7 @@
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.SetIndexBuffer(indexBuffer);
         pass.SetPipeline(pipeline32);
-        pass.DrawIndexed(3, 1, 0, 0, 0);
+        pass.DrawIndexed(3);
         pass.EndPass();
     }
 
@@ -265,7 +265,7 @@
         pass.SetIndexBuffer(indexBuffer);
         pass.SetPipeline(pipeline);
         pass.SetVertexBuffer(0, vertexBuffer);
-        pass.DrawIndexed(3, 1, 0, 0, 0);
+        pass.DrawIndexed(3);
         pass.EndPass();
     }
 
diff --git a/src/tests/end2end/MultisampledRenderingTests.cpp b/src/tests/end2end/MultisampledRenderingTests.cpp
index cce14cb..7d2aba6 100644
--- a/src/tests/end2end/MultisampledRenderingTests.cpp
+++ b/src/tests/end2end/MultisampledRenderingTests.cpp
@@ -112,7 +112,7 @@
         wgpu::RenderPassEncoder renderPassEncoder = commandEncoder.BeginRenderPass(&renderPass);
         renderPassEncoder.SetPipeline(pipeline);
         renderPassEncoder.SetBindGroup(0, bindGroup);
-        renderPassEncoder.Draw(3, 1, 0, 0);
+        renderPassEncoder.Draw(3);
         renderPassEncoder.EndPass();
     }
 
diff --git a/src/tests/end2end/OpArrayLengthTests.cpp b/src/tests/end2end/OpArrayLengthTests.cpp
index b3cf19d..e2bf52b 100644
--- a/src/tests/end2end/OpArrayLengthTests.cpp
+++ b/src/tests/end2end/OpArrayLengthTests.cpp
@@ -190,7 +190,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, mBindGroup);
-        pass.Draw(1, 1, 0, 0);
+        pass.Draw(1);
         pass.EndPass();
     }
 
@@ -251,7 +251,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, mBindGroup);
-        pass.Draw(1, 1, 0, 0);
+        pass.Draw(1);
         pass.EndPass();
     }
 
diff --git a/src/tests/end2end/PrimitiveTopologyTests.cpp b/src/tests/end2end/PrimitiveTopologyTests.cpp
index add9d29..7710b12 100644
--- a/src/tests/end2end/PrimitiveTopologyTests.cpp
+++ b/src/tests/end2end/PrimitiveTopologyTests.cpp
@@ -200,7 +200,7 @@
                 wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
                 pass.SetPipeline(pipeline);
                 pass.SetVertexBuffer(0, vertexBuffer);
-                pass.Draw(6, 1, 0, 0);
+                pass.Draw(6);
                 pass.EndPass();
             }
 
diff --git a/src/tests/end2end/RenderBundleTests.cpp b/src/tests/end2end/RenderBundleTests.cpp
index e603044..5ee766e 100644
--- a/src/tests/end2end/RenderBundleTests.cpp
+++ b/src/tests/end2end/RenderBundleTests.cpp
@@ -103,7 +103,7 @@
     renderBundleEncoder.SetPipeline(pipeline);
     renderBundleEncoder.SetVertexBuffer(0, vertexBuffer);
     renderBundleEncoder.SetBindGroup(0, bindGroups[0]);
-    renderBundleEncoder.Draw(6, 1, 0, 0);
+    renderBundleEncoder.Draw(6);
 
     wgpu::RenderBundle renderBundle = renderBundleEncoder.Finish();
 
@@ -133,7 +133,7 @@
         renderBundleEncoder.SetPipeline(pipeline);
         renderBundleEncoder.SetVertexBuffer(0, vertexBuffer);
         renderBundleEncoder.SetBindGroup(0, bindGroups[0]);
-        renderBundleEncoder.Draw(3, 1, 0, 0);
+        renderBundleEncoder.Draw(3);
 
         renderBundles[0] = renderBundleEncoder.Finish();
     }
@@ -143,7 +143,7 @@
         renderBundleEncoder.SetPipeline(pipeline);
         renderBundleEncoder.SetVertexBuffer(0, vertexBuffer);
         renderBundleEncoder.SetBindGroup(0, bindGroups[1]);
-        renderBundleEncoder.Draw(3, 1, 3, 0);
+        renderBundleEncoder.Draw(3, 1, 3);
 
         renderBundles[1] = renderBundleEncoder.Finish();
     }
@@ -172,7 +172,7 @@
     renderBundleEncoder.SetPipeline(pipeline);
     renderBundleEncoder.SetVertexBuffer(0, vertexBuffer);
     renderBundleEncoder.SetBindGroup(0, bindGroups[0]);
-    renderBundleEncoder.Draw(3, 1, 0, 0);
+    renderBundleEncoder.Draw(3);
 
     wgpu::RenderBundle renderBundle = renderBundleEncoder.Finish();
 
@@ -184,7 +184,7 @@
     pass.SetPipeline(pipeline);
     pass.SetVertexBuffer(0, vertexBuffer);
     pass.SetBindGroup(0, bindGroups[1]);
-    pass.Draw(3, 1, 3, 0);
+    pass.Draw(3, 1, 3);
 
     pass.ExecuteBundles(1, &renderBundle);
     pass.EndPass();
diff --git a/src/tests/end2end/RenderPassTests.cpp b/src/tests/end2end/RenderPassTests.cpp
index 87ac6c2..a7fe522 100644
--- a/src/tests/end2end/RenderPassTests.cpp
+++ b/src/tests/end2end/RenderPassTests.cpp
@@ -89,7 +89,7 @@
 
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetPipeline(pipeline);
-        pass.Draw(3, 1, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
     }
 
@@ -101,7 +101,7 @@
 
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetPipeline(pipeline);
-        pass.Draw(3, 1, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
     }
 
@@ -133,7 +133,7 @@
     {
         // First we draw a blue triangle in the bottom left of renderTarget.
         pass.SetPipeline(pipeline);
-        pass.Draw(3, 1, 0, 0);
+        pass.Draw(3);
     }
 
     {
@@ -153,7 +153,7 @@
             device.CreateRenderPipeline(&descriptor);
 
         pass.SetPipeline(pipelineWithNoFragmentOutput);
-        pass.Draw(3, 1, 0, 0);
+        pass.Draw(3);
     }
 
     pass.EndPass();
diff --git a/src/tests/end2end/SamplerTests.cpp b/src/tests/end2end/SamplerTests.cpp
index de6f1e0..82958d5 100644
--- a/src/tests/end2end/SamplerTests.cpp
+++ b/src/tests/end2end/SamplerTests.cpp
@@ -143,7 +143,7 @@
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&mRenderPass.renderPassInfo);
             pass.SetPipeline(mPipeline);
             pass.SetBindGroup(0, bindGroup);
-            pass.Draw(6, 1, 0, 0);
+            pass.Draw(6);
             pass.EndPass();
         }
 
diff --git a/src/tests/end2end/ScissorTests.cpp b/src/tests/end2end/ScissorTests.cpp
index c4f30d3..f674303 100644
--- a/src/tests/end2end/ScissorTests.cpp
+++ b/src/tests/end2end/ScissorTests.cpp
@@ -57,7 +57,7 @@
     {
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetPipeline(pipeline);
-        pass.Draw(6, 1, 0, 0);
+        pass.Draw(6);
         pass.EndPass();
     }
 
@@ -80,7 +80,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetPipeline(pipeline);
         pass.SetScissorRect(0, 0, 200, 200);
-        pass.Draw(6, 1, 0, 0);
+        pass.Draw(6);
         pass.EndPass();
     }
 
@@ -108,7 +108,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetPipeline(pipeline);
         pass.SetScissorRect(kX, kY, kW, kH);
-        pass.Draw(6, 1, 0, 0);
+        pass.Draw(6);
         pass.EndPass();
     }
 
@@ -139,7 +139,7 @@
     {
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetPipeline(pipeline);
-        pass.Draw(6, 1, 0, 0);
+        pass.Draw(6);
         pass.EndPass();
     }
 
diff --git a/src/tests/end2end/TextureFormatTests.cpp b/src/tests/end2end/TextureFormatTests.cpp
index 61f80e3..da3b57a 100644
--- a/src/tests/end2end/TextureFormatTests.cpp
+++ b/src/tests/end2end/TextureFormatTests.cpp
@@ -278,7 +278,7 @@
         wgpu::RenderPassEncoder renderPass = encoder.BeginRenderPass(&renderPassDesc);
         renderPass.SetPipeline(pipeline);
         renderPass.SetBindGroup(0, bindGroup);
-        renderPass.Draw(3, 1, 0, 0);
+        renderPass.Draw(3);
         renderPass.EndPass();
 
         {
diff --git a/src/tests/end2end/TextureViewTests.cpp b/src/tests/end2end/TextureViewTests.cpp
index 4e93487..8303988 100644
--- a/src/tests/end2end/TextureViewTests.cpp
+++ b/src/tests/end2end/TextureViewTests.cpp
@@ -171,7 +171,7 @@
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&mRenderPass.renderPassInfo);
             pass.SetPipeline(pipeline);
             pass.SetBindGroup(0, bindGroup);
-            pass.Draw(6, 1, 0, 0);
+            pass.Draw(6);
             pass.EndPass();
         }
 
@@ -507,7 +507,7 @@
         {
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassInfo);
             pass.SetPipeline(oneColorPipeline);
-            pass.Draw(6, 1, 0, 0);
+            pass.Draw(6);
             pass.EndPass();
         }
 
diff --git a/src/tests/end2end/TextureZeroInitTests.cpp b/src/tests/end2end/TextureZeroInitTests.cpp
index 53ad9fb..c5b15ba 100644
--- a/src/tests/end2end/TextureZeroInitTests.cpp
+++ b/src/tests/end2end/TextureZeroInitTests.cpp
@@ -399,7 +399,7 @@
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
     auto pass = encoder.BeginRenderPass(&renderPassDescriptor);
     pass.SetPipeline(CreatePipelineForTest());
-    pass.Draw(6, 1, 0, 0);
+    pass.Draw(6);
     pass.EndPass();
     wgpu::CommandBuffer commandBuffer = encoder.Finish();
     // Expect 0 lazy clears, depth stencil texture will clear using loadop
@@ -441,7 +441,7 @@
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
     auto pass = encoder.BeginRenderPass(&renderPassDescriptor);
     pass.SetPipeline(CreatePipelineForTest());
-    pass.Draw(6, 1, 0, 0);
+    pass.Draw(6);
     pass.EndPass();
     wgpu::CommandBuffer commandBuffer = encoder.Finish();
     // Expect 0 lazy clears, depth stencil texture will clear using loadop
@@ -480,7 +480,7 @@
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
     auto pass = encoder.BeginRenderPass(&renderPassDescriptor);
     pass.SetPipeline(CreatePipelineForTest());
-    pass.Draw(6, 1, 0, 0);
+    pass.Draw(6);
     pass.EndPass();
     wgpu::CommandBuffer commandBuffer = encoder.Finish();
     // Expect 0 lazy clears, depth stencil texture will clear using loadop
@@ -550,7 +550,7 @@
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDesc);
     pass.SetPipeline(renderPipeline);
     pass.SetBindGroup(0, bindGroup);
-    pass.Draw(6, 1, 0, 0);
+    pass.Draw(6);
     pass.EndPass();
     wgpu::CommandBuffer commands = encoder.Finish();
     // Expect 1 lazy clear for sampled texture
@@ -767,7 +767,7 @@
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDesc);
     pass.SetPipeline(renderPipeline);
     pass.SetBindGroup(0, bindGroup);
-    pass.Draw(6, 1, 0, 0);
+    pass.Draw(6);
     pass.EndPass();
     commands = encoder.Finish();
     // Expect 0 lazy clears, sample texture is initialized by copyBufferToTexture and render texture
@@ -821,7 +821,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDescriptor);
         pass.SetPipeline(CreatePipelineForTest());
-        pass.Draw(6, 1, 0, 0);
+        pass.Draw(6);
         pass.EndPass();
         wgpu::CommandBuffer commandBuffer = encoder.Finish();
         // Expect 0 lazy clears, depth stencil texture will clear using loadop
@@ -846,7 +846,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDescriptor);
         pass.SetPipeline(CreatePipelineForTest());
-        pass.Draw(6, 1, 0, 0);
+        pass.Draw(6);
         pass.EndPass();
         wgpu::CommandBuffer commandBuffer = encoder.Finish();
         // Expect 0 lazy clears, depth stencil texture will clear using loadop
@@ -916,7 +916,7 @@
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDesc);
     pass.SetPipeline(renderPipeline);
     pass.SetBindGroup(0, bindGroup);
-    pass.Draw(6, 1, 0, 0);
+    pass.Draw(6);
     pass.EndPass();
     commands = encoder.Finish();
     // Expect 1 lazy clears, because not all mips of the sample texture are initialized by
@@ -998,7 +998,7 @@
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDesc);
     pass.SetPipeline(renderPipeline);
     pass.SetBindGroup(0, bindGroup);
-    pass.Draw(6, 1, 0, 0);
+    pass.Draw(6);
     pass.EndPass();
     commands = encoder.Finish();
     // Expect 1 lazy clears, because not all array layers of the sample texture are initialized by
diff --git a/src/tests/end2end/VertexFormatTests.cpp b/src/tests/end2end/VertexFormatTests.cpp
index c805b3a..8802d0c 100644
--- a/src/tests/end2end/VertexFormatTests.cpp
+++ b/src/tests/end2end/VertexFormatTests.cpp
@@ -383,7 +383,7 @@
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
             pass.SetPipeline(pipeline);
             pass.SetVertexBuffer(0, vertexBuffer);
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
             pass.EndPass();
         }
 
diff --git a/src/tests/end2end/VertexStateTests.cpp b/src/tests/end2end/VertexStateTests.cpp
index 0528242..330cbd5 100644
--- a/src/tests/end2end/VertexStateTests.cpp
+++ b/src/tests/end2end/VertexStateTests.cpp
@@ -204,7 +204,7 @@
             pass.SetVertexBuffer(buffer.location, *buffer.buffer);
         }
 
-        pass.Draw(triangles * 3, instances, 0, 0);
+        pass.Draw(triangles * 3, instances);
         pass.EndPass();
 
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -441,7 +441,7 @@
     pass.SetVertexBuffer(1, buffer);
 
     pass.SetPipeline(instancePipeline);
-    pass.Draw(1 * 3, 4, 0, 0);
+    pass.Draw(3, 4);
 
     pass.EndPass();
 
@@ -486,10 +486,10 @@
     pass.SetVertexBuffer(1, buffer);
 
     pass.SetPipeline(vertexPipeline);
-    pass.Draw(1 * 3, 1, 0, 0);
+    pass.Draw(3);
 
     pass.SetPipeline(instancePipeline);
-    pass.Draw(1 * 3, 4, 0, 0);
+    pass.Draw(3, 4);
 
     pass.EndPass();
 
@@ -565,7 +565,7 @@
     {
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetPipeline(pipeline);
-        pass.Draw(1, 1, 0, 0);
+        pass.Draw(1);
         pass.EndPass();
     }
 
diff --git a/src/tests/end2end/ViewportOrientationTests.cpp b/src/tests/end2end/ViewportOrientationTests.cpp
index 75651a6..b592c21 100644
--- a/src/tests/end2end/ViewportOrientationTests.cpp
+++ b/src/tests/end2end/ViewportOrientationTests.cpp
@@ -51,7 +51,7 @@
     {
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetPipeline(pipeline);
-        pass.Draw(1, 1, 0, 0);
+        pass.Draw(1);
         pass.EndPass();
     }
 
diff --git a/src/tests/end2end/ViewportTests.cpp b/src/tests/end2end/ViewportTests.cpp
index b03f57d..bf53591 100644
--- a/src/tests/end2end/ViewportTests.cpp
+++ b/src/tests/end2end/ViewportTests.cpp
@@ -127,7 +127,7 @@
                 renderPass1.SetViewport(viewport.x, viewport.y, viewport.width, viewport.height,
                                         viewport.minDepth, viewport.maxDepth);
             }
-            renderPass1.Draw(6, 1, 0, 0);
+            renderPass1.Draw(6);
             renderPass1.EndPass();
         }
 
@@ -147,7 +147,7 @@
             wgpu::RenderPassEncoder renderPass2 =
                 commandEncoder.BeginRenderPass(&renderPassDescriptor2);
             renderPass2.SetPipeline(CreatePipelineForTest(wgpu::CompareFunction::Greater));
-            renderPass2.Draw(6, 1, 0, 0);
+            renderPass2.Draw(6);
             renderPass2.EndPass();
         }
 
diff --git a/src/tests/perf_tests/DrawCallPerf.cpp b/src/tests/perf_tests/DrawCallPerf.cpp
index d8eede9..6809c03 100644
--- a/src/tests/perf_tests/DrawCallPerf.cpp
+++ b/src/tests/perf_tests/DrawCallPerf.cpp
@@ -550,7 +550,7 @@
                 UNREACHABLE();
                 break;
         }
-        pass.Draw(3, 1, 0, 0);
+        pass.Draw(3);
     }
 }
 
diff --git a/src/tests/unittests/validation/BindGroupValidationTests.cpp b/src/tests/unittests/validation/BindGroupValidationTests.cpp
index 2c441d6..b741e14 100644
--- a/src/tests/unittests/validation/BindGroupValidationTests.cpp
+++ b/src/tests/unittests/validation/BindGroupValidationTests.cpp
@@ -816,7 +816,7 @@
         wgpu::RenderPassEncoder renderPassEncoder = commandEncoder.BeginRenderPass(&renderPass);
         renderPassEncoder.SetPipeline(renderPipeline);
         renderPassEncoder.SetBindGroup(0, bindGroup, count, offsets);
-        renderPassEncoder.Draw(3, 1, 0, 0);
+        renderPassEncoder.Draw(3);
         renderPassEncoder.EndPass();
         if (!expectation) {
             ASSERT_DEVICE_ERROR(commandEncoder.Finish());
@@ -1124,7 +1124,7 @@
     renderPassEncoder.SetBindGroup(0, bindGroup0);
     renderPassEncoder.SetBindGroup(1, bindGroup1);
     renderPassEncoder.SetPipeline(pipeline);
-    renderPassEncoder.Draw(3, 1, 0, 0);
+    renderPassEncoder.Draw(3);
 
     renderPassEncoder.EndPass();
     commandEncoder.Finish();
@@ -1182,13 +1182,13 @@
     renderPassEncoder.SetPipeline(pipelineA);
     renderPassEncoder.SetBindGroup(0, bindGroupA0);
     renderPassEncoder.SetBindGroup(1, bindGroupA1);
-    renderPassEncoder.Draw(3, 1, 0, 0);
+    renderPassEncoder.Draw(3);
 
     renderPassEncoder.SetPipeline(pipelineB);
     renderPassEncoder.SetBindGroup(0, bindGroupB0);
     // This draw is valid.
     // Bind group 1 persists even though it is not "inherited".
-    renderPassEncoder.Draw(3, 1, 0, 0);
+    renderPassEncoder.Draw(3);
 
     renderPassEncoder.EndPass();
     commandEncoder.Finish();
diff --git a/src/tests/unittests/validation/RenderBundleValidationTests.cpp b/src/tests/unittests/validation/RenderBundleValidationTests.cpp
index 3a4eb97..657e693 100644
--- a/src/tests/unittests/validation/RenderBundleValidationTests.cpp
+++ b/src/tests/unittests/validation/RenderBundleValidationTests.cpp
@@ -160,7 +160,7 @@
     renderBundleEncoder.SetBindGroup(0, bg0);
     renderBundleEncoder.SetBindGroup(1, bg1);
     renderBundleEncoder.SetVertexBuffer(0, vertexBuffer);
-    renderBundleEncoder.Draw(3, 0, 0, 0);
+    renderBundleEncoder.Draw(3);
     wgpu::RenderBundle renderBundle = renderBundleEncoder.Finish();
 
     wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
@@ -248,7 +248,7 @@
         renderBundleEncoder.SetBindGroup(0, bg0);
         renderBundleEncoder.SetBindGroup(1, bg1);
         renderBundleEncoder.SetVertexBuffer(0, vertexBuffer);
-        renderBundleEncoder.Draw(3, 0, 0, 0);
+        renderBundleEncoder.Draw(3);
         ASSERT_DEVICE_ERROR(wgpu::RenderBundle renderBundle = renderBundleEncoder.Finish());
 
         pass.ExecuteBundles(1, &renderBundle);
@@ -267,7 +267,7 @@
 
         renderBundleEncoder.SetPipeline(pipeline);
         renderBundleEncoder.SetVertexBuffer(0, vertexBuffer);
-        renderBundleEncoder.Draw(3, 0, 0, 0);
+        renderBundleEncoder.Draw(3);
         ASSERT_DEVICE_ERROR(wgpu::RenderBundle renderBundle = renderBundleEncoder.Finish());
 
         pass.ExecuteBundles(1, &renderBundle);
@@ -286,7 +286,7 @@
         pass.SetBindGroup(1, bg1);
 
         renderBundleEncoder.SetVertexBuffer(0, vertexBuffer);
-        renderBundleEncoder.Draw(3, 0, 0, 0);
+        renderBundleEncoder.Draw(3);
         ASSERT_DEVICE_ERROR(wgpu::RenderBundle renderBundle = renderBundleEncoder.Finish());
 
         pass.ExecuteBundles(1, &renderBundle);
@@ -305,7 +305,7 @@
         renderBundleEncoder.SetPipeline(pipeline);
         renderBundleEncoder.SetBindGroup(0, bg0);
         renderBundleEncoder.SetBindGroup(1, bg1);
-        renderBundleEncoder.Draw(3, 0, 0, 0);
+        renderBundleEncoder.Draw(3);
         ASSERT_DEVICE_ERROR(wgpu::RenderBundle renderBundle = renderBundleEncoder.Finish());
 
         pass.ExecuteBundles(1, &renderBundle);
@@ -335,7 +335,7 @@
         pass.SetBindGroup(0, bg0);
         pass.SetBindGroup(1, bg1);
         pass.SetVertexBuffer(0, vertexBuffer);
-        pass.Draw(3, 0, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
 
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
@@ -354,7 +354,7 @@
         pass.ExecuteBundles(1, &renderBundle);
         pass.SetPipeline(pipeline);
         pass.SetVertexBuffer(0, vertexBuffer);
-        pass.Draw(3, 0, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
 
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
@@ -373,7 +373,7 @@
 
         pass.ExecuteBundles(1, &renderBundle);
         pass.SetVertexBuffer(0, vertexBuffer);
-        pass.Draw(3, 0, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
 
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
@@ -392,7 +392,7 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, bg0);
         pass.SetBindGroup(1, bg1);
-        pass.Draw(3, 0, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
 
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
@@ -420,7 +420,7 @@
         pass.SetBindGroup(0, bg0);
         pass.SetBindGroup(1, bg1);
         pass.SetVertexBuffer(0, vertexBuffer);
-        pass.Draw(3, 0, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
 
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
@@ -436,7 +436,7 @@
         pass.ExecuteBundles(1, &renderBundle);
         pass.SetPipeline(pipeline);
         pass.SetVertexBuffer(0, vertexBuffer);
-        pass.Draw(3, 0, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
 
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
@@ -452,7 +452,7 @@
         pass.SetBindGroup(1, bg1);
         pass.ExecuteBundles(1, &renderBundle);
         pass.SetVertexBuffer(0, vertexBuffer);
-        pass.Draw(3, 0, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
 
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
@@ -468,7 +468,7 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, bg0);
         pass.SetBindGroup(1, bg1);
-        pass.Draw(3, 0, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
 
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
@@ -484,7 +484,7 @@
         pass.SetBindGroup(1, bg1);
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.ExecuteBundles(0, nullptr);
-        pass.Draw(3, 0, 0, 0);
+        pass.Draw(3);
 
         pass.EndPass();
         commandEncoder.Finish();
@@ -506,7 +506,7 @@
     renderBundleEncoder0.SetBindGroup(0, bg0);
     renderBundleEncoder0.SetBindGroup(1, bg1);
     renderBundleEncoder0.SetVertexBuffer(0, vertexBuffer);
-    renderBundleEncoder0.Draw(3, 1, 0, 0);
+    renderBundleEncoder0.Draw(3);
     renderBundles[0] = renderBundleEncoder0.Finish();
 
     wgpu::RenderBundleEncoder renderBundleEncoder1 = device.CreateRenderBundleEncoder(&desc);
@@ -514,7 +514,7 @@
     renderBundleEncoder1.SetBindGroup(0, bg0);
     renderBundleEncoder1.SetBindGroup(1, bg1);
     renderBundleEncoder1.SetVertexBuffer(0, vertexBuffer);
-    renderBundleEncoder1.Draw(3, 1, 0, 0);
+    renderBundleEncoder1.Draw(3);
     renderBundles[1] = renderBundleEncoder1.Finish();
 
     wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
@@ -537,7 +537,7 @@
     renderBundleEncoder.SetBindGroup(0, bg0);
     renderBundleEncoder.SetBindGroup(1, bg1);
     renderBundleEncoder.SetVertexBuffer(0, vertexBuffer);
-    renderBundleEncoder.Draw(3, 1, 0, 0);
+    renderBundleEncoder.Draw(3);
     wgpu::RenderBundle renderBundle = renderBundleEncoder.Finish();
 
     wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
@@ -617,7 +617,7 @@
         renderBundleEncoder.SetBindGroup(0, bg0);
         renderBundleEncoder.SetBindGroup(1, bg1Vertex);
         renderBundleEncoder.SetVertexBuffer(0, vertexBuffer);
-        renderBundleEncoder.Draw(3, 0, 0, 0);
+        renderBundleEncoder.Draw(3);
         renderBundle0 = renderBundleEncoder.Finish();
     }
 
@@ -628,7 +628,7 @@
         renderBundleEncoder.SetBindGroup(0, bg0);
         renderBundleEncoder.SetBindGroup(1, bg1);
         renderBundleEncoder.SetVertexBuffer(0, vertexStorageBuffer);
-        renderBundleEncoder.Draw(3, 0, 0, 0);
+        renderBundleEncoder.Draw(3);
         renderBundle1 = renderBundleEncoder.Finish();
     }
 
@@ -640,7 +640,7 @@
         renderBundleEncoder.SetBindGroup(0, bg0);
         renderBundleEncoder.SetBindGroup(1, bg1Vertex);
         renderBundleEncoder.SetVertexBuffer(0, vertexStorageBuffer);
-        renderBundleEncoder.Draw(3, 0, 0, 0);
+        renderBundleEncoder.Draw(3);
         ASSERT_DEVICE_ERROR(renderBundleEncoder.Finish());
     }
 
@@ -668,7 +668,7 @@
         pass.SetBindGroup(0, bg0);
         pass.SetBindGroup(1, bg1Vertex);
         pass.SetVertexBuffer(0, vertexBuffer);
-        pass.Draw(3, 0, 0, 0);
+        pass.Draw(3);
 
         pass.ExecuteBundles(1, &renderBundle1);
         pass.EndPass();
@@ -688,7 +688,7 @@
         pass.SetBindGroup(0, bg0);
         pass.SetBindGroup(1, bg1);
         pass.SetVertexBuffer(0, vertexStorageBuffer);
-        pass.Draw(3, 0, 0, 0);
+        pass.Draw(3);
 
         pass.EndPass();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
diff --git a/src/tests/unittests/validation/RenderPassValidationTests.cpp b/src/tests/unittests/validation/RenderPassValidationTests.cpp
index d0ee909..1fd973a 100644
--- a/src/tests/unittests/validation/RenderPassValidationTests.cpp
+++ b/src/tests/unittests/validation/RenderPassValidationTests.cpp
@@ -82,7 +82,7 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, bg1);
         pass.SetBindGroup(1, bg2);
-        pass.Draw(3, 0, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
         commandEncoder.Finish();
     }
@@ -90,7 +90,7 @@
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
         pass.SetPipeline(pipeline);
-        pass.Draw(3, 0, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
@@ -99,7 +99,7 @@
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(1, bg2);
-        pass.Draw(3, 0, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
@@ -108,7 +108,7 @@
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, bg1);
-        pass.Draw(3, 0, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
diff --git a/src/tests/unittests/validation/ResourceUsageTrackingTests.cpp b/src/tests/unittests/validation/ResourceUsageTrackingTests.cpp
index c80f412..fb034c6 100644
--- a/src/tests/unittests/validation/ResourceUsageTrackingTests.cpp
+++ b/src/tests/unittests/validation/ResourceUsageTrackingTests.cpp
@@ -232,10 +232,10 @@
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
 
             pass.SetIndexBuffer(buffer);
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
 
             pass.SetBindGroup(0, bg);
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
 
             pass.EndPass();
             ASSERT_DEVICE_ERROR(encoder.Finish());
diff --git a/src/tests/unittests/validation/VertexBufferValidationTests.cpp b/src/tests/unittests/validation/VertexBufferValidationTests.cpp
index b7790ff..65417df 100644
--- a/src/tests/unittests/validation/VertexBufferValidationTests.cpp
+++ b/src/tests/unittests/validation/VertexBufferValidationTests.cpp
@@ -101,7 +101,7 @@
     {
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetPipeline(pipeline1);
-        pass.Draw(3, 1, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
     }
     ASSERT_DEVICE_ERROR(encoder.Finish());
@@ -113,9 +113,9 @@
         pass.SetPipeline(pipeline2);
         pass.SetVertexBuffer(0, vertexBuffer1);
         pass.SetVertexBuffer(1, vertexBuffer2);
-        pass.Draw(3, 1, 0, 0);
+        pass.Draw(3);
         pass.SetPipeline(pipeline1);
-        pass.Draw(3, 1, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
     }
     encoder.Finish();
@@ -139,14 +139,14 @@
         pass.SetPipeline(pipeline2);
         pass.SetVertexBuffer(0, vertexBuffer1);
         pass.SetVertexBuffer(1, vertexBuffer2);
-        pass.Draw(3, 1, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
     }
     {
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetPipeline(pipeline1);
         pass.SetVertexBuffer(0, vertexBuffer1);
-        pass.Draw(3, 1, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
     }
     encoder.Finish();
@@ -158,13 +158,13 @@
         pass.SetPipeline(pipeline2);
         pass.SetVertexBuffer(0, vertexBuffer1);
         pass.SetVertexBuffer(1, vertexBuffer2);
-        pass.Draw(3, 1, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
     }
     {
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetPipeline(pipeline1);
-        pass.Draw(3, 1, 0, 0);
+        pass.Draw(3);
         pass.EndPass();
     }
     ASSERT_DEVICE_ERROR(encoder.Finish());
diff --git a/src/tests/white_box/D3D12DescriptorHeapTests.cpp b/src/tests/white_box/D3D12DescriptorHeapTests.cpp
index decec9c..4431f01 100644
--- a/src/tests/white_box/D3D12DescriptorHeapTests.cpp
+++ b/src/tests/white_box/D3D12DescriptorHeapTests.cpp
@@ -136,7 +136,7 @@
         for (uint32_t i = 0; i < samplerHeapSize + 1; ++i) {
             pass.SetBindGroup(0, utils::MakeBindGroup(device, renderPipeline.GetBindGroupLayout(0),
                                                       {{0, sampler}}));
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
         }
 
         pass.EndPass();
@@ -313,7 +313,7 @@
 
         for (uint32_t i = 0; i < numOfEncodedBindGroups; ++i) {
             pass.SetBindGroup(0, bindGroups[i]);
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
         }
 
         pass.EndPass();
@@ -360,7 +360,7 @@
 
             pass.SetPipeline(renderPipeline);
             pass.SetBindGroup(0, bindGroup);
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
             pass.EndPass();
         }
 
@@ -399,7 +399,7 @@
 
             for (uint32_t i = 0; i < heapSize; ++i) {
                 pass.SetBindGroup(0, bindGroups[i]);
-                pass.Draw(3, 1, 0, 0);
+                pass.Draw(3);
             }
 
             pass.EndPass();
@@ -455,12 +455,12 @@
         // Encode a heap worth of descriptors plus one more.
         for (uint32_t i = 0; i < heapSize + 1; ++i) {
             pass.SetBindGroup(0, bindGroups[i]);
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
         }
 
         // Re-encode the first bindgroup again.
         pass.SetBindGroup(0, bindGroups[0]);
-        pass.Draw(3, 1, 0, 0);
+        pass.Draw(3);
 
         pass.EndPass();
     }
@@ -518,7 +518,7 @@
 
             for (uint32_t i = 0; i < heapSize + 1; ++i) {
                 pass.SetBindGroup(0, bindGroups[i]);
-                pass.Draw(3, 1, 0, 0);
+                pass.Draw(3);
             }
 
             pass.EndPass();
@@ -540,7 +540,7 @@
             pass.SetPipeline(pipeline);
 
             pass.SetBindGroup(0, bindGroups[0]);
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
 
             pass.EndPass();
         }
@@ -672,7 +672,7 @@
 
         for (uint32_t i = 0; i < kNumOfHeaps * bindGroupsPerHeap; ++i) {
             pass.SetBindGroup(0, bindGroups[i % kNumOfBindGroups]);
-            pass.Draw(3, 1, 0, 0);
+            pass.Draw(3);
         }
 
         pass.EndPass();
