Add the defaults for Draw and DrawIndexed

And updates all places in tests and examples where they could have been
used.

Bug: dawn:22
Change-Id: Ic36e3f1810037b5addeb9e971b1da28fdd1da183
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/18380
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
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();