diff --git a/dawn.json b/dawn.json
index 961e091..1ba4a24 100644
--- a/dawn.json
+++ b/dawn.json
@@ -812,7 +812,11 @@
                 ]
             },
             {
-                "name": "end pass"
+                "name": "end"
+            },
+            {
+                "name": "end pass",
+                "tags": ["deprecated"]
             },
             {
                 "name": "end pipeline statistics query",
@@ -1978,7 +1982,11 @@
                 ]
             },
             {
-                "name": "end pass"
+                "name": "end"
+            },
+            {
+                "name": "end pass",
+                "tags": ["deprecated"]
             },
             {
                 "name": "end pipeline statistics query",
diff --git a/src/dawn/native/ComputePassEncoder.cpp b/src/dawn/native/ComputePassEncoder.cpp
index 594fa2d..b06f3af 100644
--- a/src/dawn/native/ComputePassEncoder.cpp
+++ b/src/dawn/native/ComputePassEncoder.cpp
@@ -142,7 +142,7 @@
         return ObjectType::ComputePassEncoder;
     }
 
-    void ComputePassEncoder::APIEndPass() {
+    void ComputePassEncoder::APIEnd() {
         if (mEncodingContext->TryEncode(
                 this,
                 [&](CommandAllocator* allocator) -> MaybeError {
@@ -154,11 +154,16 @@
 
                     return {};
                 },
-                "encoding %s.EndPass().", this)) {
+                "encoding %s.End().", this)) {
             mEncodingContext->ExitComputePass(this, mUsageTracker.AcquireResourceUsage());
         }
     }
 
+    void ComputePassEncoder::APIEndPass() {
+        GetDevice()->EmitDeprecationWarning("endPass() has been deprecated. Use end() instead.");
+        APIEnd();
+    }
+
     void ComputePassEncoder::APIDispatch(uint32_t workgroupCountX,
                                          uint32_t workgroupCountY,
                                          uint32_t workgroupCountZ) {
diff --git a/src/dawn/native/ComputePassEncoder.h b/src/dawn/native/ComputePassEncoder.h
index b2fb97d..38a1fe1 100644
--- a/src/dawn/native/ComputePassEncoder.h
+++ b/src/dawn/native/ComputePassEncoder.h
@@ -38,7 +38,8 @@
 
         ObjectType GetType() const override;
 
-        void APIEndPass();
+        void APIEnd();
+        void APIEndPass();  // TODO(dawn:1286): Remove after deprecation period.
 
         void APIDispatch(uint32_t workgroupCountX,
                          uint32_t workgroupCountY = 1,
diff --git a/src/dawn/native/CopyTextureForBrowserHelper.cpp b/src/dawn/native/CopyTextureForBrowserHelper.cpp
index aee2244..4a55372 100644
--- a/src/dawn/native/CopyTextureForBrowserHelper.cpp
+++ b/src/dawn/native/CopyTextureForBrowserHelper.cpp
@@ -586,7 +586,7 @@
         passEncoder->APISetViewport(destination->origin.x, destination->origin.y, copySize->width,
                                     copySize->height, 0.0, 1.0);
         passEncoder->APIDraw(3);
-        passEncoder->APIEndPass();
+        passEncoder->APIEnd();
 
         // Finsh encoding.
         // TODO(dawn:723): change to not use AcquireRef for reentrant object creation.
diff --git a/src/dawn/native/IndirectDrawValidationEncoder.cpp b/src/dawn/native/IndirectDrawValidationEncoder.cpp
index 3e6850e..efabb22 100644
--- a/src/dawn/native/IndirectDrawValidationEncoder.cpp
+++ b/src/dawn/native/IndirectDrawValidationEncoder.cpp
@@ -376,7 +376,7 @@
                 passEncoder->APIDispatch(numDrawsRoundedUp);
             }
 
-            passEncoder->APIEndPass();
+            passEncoder->APIEnd();
         }
 
         return {};
diff --git a/src/dawn/native/QueryHelper.cpp b/src/dawn/native/QueryHelper.cpp
index de9b57d..8fb6103 100644
--- a/src/dawn/native/QueryHelper.cpp
+++ b/src/dawn/native/QueryHelper.cpp
@@ -211,7 +211,7 @@
         pass->APISetBindGroup(0, bindGroup.Get());
         pass->APIDispatch(
             static_cast<uint32_t>((timestamps->GetSize() / sizeof(uint64_t) + 7) / 8));
-        pass->APIEndPass();
+        pass->APIEnd();
 
         return {};
     }
diff --git a/src/dawn/native/RenderPassEncoder.cpp b/src/dawn/native/RenderPassEncoder.cpp
index 1f374e1..fd2a46e 100644
--- a/src/dawn/native/RenderPassEncoder.cpp
+++ b/src/dawn/native/RenderPassEncoder.cpp
@@ -108,7 +108,7 @@
         mCommandEncoder->TrackQueryAvailability(querySet, queryIndex);
     }
 
-    void RenderPassEncoder::APIEndPass() {
+    void RenderPassEncoder::APIEnd() {
         if (mEncodingContext->TryEncode(
                 this,
                 [&](CommandAllocator* allocator) -> MaybeError {
@@ -127,10 +127,15 @@
                                                               std::move(mIndirectDrawMetadata)));
                     return {};
                 },
-                "encoding %s.EndPass().", this)) {
+                "encoding %s.End().", this)) {
         }
     }
 
+    void RenderPassEncoder::APIEndPass() {
+        GetDevice()->EmitDeprecationWarning("endPass() has been deprecated. Use end() instead.");
+        APIEnd();
+    }
+
     void RenderPassEncoder::APISetStencilReference(uint32_t reference) {
         mEncodingContext->TryEncode(
             this,
diff --git a/src/dawn/native/RenderPassEncoder.h b/src/dawn/native/RenderPassEncoder.h
index da17181..d9ac1c2 100644
--- a/src/dawn/native/RenderPassEncoder.h
+++ b/src/dawn/native/RenderPassEncoder.h
@@ -43,7 +43,8 @@
 
         ObjectType GetType() const override;
 
-        void APIEndPass();
+        void APIEnd();
+        void APIEndPass();  // TODO(dawn:1286): Remove after deprecation period.
 
         void APISetStencilReference(uint32_t reference);
         void APISetBlendConstant(const Color* color);
diff --git a/src/dawn/node/binding/GPUComputePassEncoder.cpp b/src/dawn/node/binding/GPUComputePassEncoder.cpp
index 4bc3a5c..224dc03 100644
--- a/src/dawn/node/binding/GPUComputePassEncoder.cpp
+++ b/src/dawn/node/binding/GPUComputePassEncoder.cpp
@@ -50,6 +50,10 @@
         enc_.DispatchIndirect(*indirectBuffer.As<GPUBuffer>(), indirectOffset);
     }
 
+    void GPUComputePassEncoder::end(Napi::Env) {
+        enc_.End();
+    }
+
     void GPUComputePassEncoder::endPass(Napi::Env) {
         enc_.EndPass();
     }
diff --git a/src/dawn/node/binding/GPUComputePassEncoder.h b/src/dawn/node/binding/GPUComputePassEncoder.h
index d9ffd7e..01eab69 100644
--- a/src/dawn/node/binding/GPUComputePassEncoder.h
+++ b/src/dawn/node/binding/GPUComputePassEncoder.h
@@ -43,7 +43,8 @@
         void dispatchIndirect(Napi::Env,
                               interop::Interface<interop::GPUBuffer> indirectBuffer,
                               interop::GPUSize64 indirectOffset) override;
-        void endPass(Napi::Env) override;
+        void end(Napi::Env) override;
+        void endPass(Napi::Env) override;  // TODO(dawn:1286): Remove after deprecation period.
         void setBindGroup(Napi::Env,
                           interop::GPUIndex32 index,
                           interop::Interface<interop::GPUBindGroup> bindGroup,
diff --git a/src/dawn/node/binding/GPURenderPassEncoder.cpp b/src/dawn/node/binding/GPURenderPassEncoder.cpp
index 8308431..3fe4791 100644
--- a/src/dawn/node/binding/GPURenderPassEncoder.cpp
+++ b/src/dawn/node/binding/GPURenderPassEncoder.cpp
@@ -85,6 +85,10 @@
         enc_.ExecuteBundles(bundleCount, bundles);
     }
 
+    void GPURenderPassEncoder::end(Napi::Env) {
+        enc_.End();
+    }
+
     void GPURenderPassEncoder::endPass(Napi::Env) {
         enc_.EndPass();
     }
diff --git a/src/dawn/node/binding/GPURenderPassEncoder.h b/src/dawn/node/binding/GPURenderPassEncoder.h
index c40de79..3926052 100644
--- a/src/dawn/node/binding/GPURenderPassEncoder.h
+++ b/src/dawn/node/binding/GPURenderPassEncoder.h
@@ -53,7 +53,8 @@
         void executeBundles(
             Napi::Env,
             std::vector<interop::Interface<interop::GPURenderBundle>> bundles) override;
-        void endPass(Napi::Env) override;
+        void end(Napi::Env) override;
+        void endPass(Napi::Env) override;  // TODO(dawn:1286): Remove after deprecation period.
         void setBindGroup(Napi::Env,
                           interop::GPUIndex32 index,
                           interop::Interface<interop::GPUBindGroup> bindGroup,
diff --git a/src/tests/DawnTest.cpp b/src/tests/DawnTest.cpp
index 2affa5c..7f80af9 100644
--- a/src/tests/DawnTest.cpp
+++ b/src/tests/DawnTest.cpp
@@ -1231,7 +1231,7 @@
     pass.SetPipeline(pipeline);
     pass.SetBindGroup(0, bindGroup);
     pass.Dispatch(width, height);
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commands = commandEncoder.Finish();
     queue.Submit(1, &commands);
 
@@ -1413,7 +1413,7 @@
                                                   {{0, depthDataTexture.CreateView()}}));
     }
     pass.Draw(3);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = commandEncoder.Finish();
     queue.Submit(1, &commands);
diff --git a/src/tests/end2end/BindGroupTests.cpp b/src/tests/end2end/BindGroupTests.cpp
index 3405220..0b156de 100644
--- a/src/tests/end2end/BindGroupTests.cpp
+++ b/src/tests/end2end/BindGroupTests.cpp
@@ -35,7 +35,7 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, bindGroup);
         pass.Dispatch(1);
-        pass.EndPass();
+        pass.End();
         return encoder.Finish();
     }
 
@@ -220,7 +220,7 @@
     pass.SetPipeline(pipeline);
     pass.SetBindGroup(0, bindGroup);
     pass.Draw(3);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -326,7 +326,7 @@
     pass.SetPipeline(pipeline);
     pass.SetBindGroup(0, bindGroup);
     pass.Draw(3);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -414,7 +414,7 @@
     pass.SetBindGroup(0, bindGroups[0]);
     pass.SetBindGroup(1, bindGroups[1]);
     pass.Draw(3);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -477,7 +477,7 @@
         pass.SetPipeline(cp);
         pass.SetBindGroup(0, bindGroup0);
         pass.Dispatch(1);
-        pass.EndPass();
+        pass.End();
         cb = encoder.Finish();
         queue.Submit(1, &cb);
     }
@@ -508,7 +508,7 @@
         pass.SetBindGroup(1, bindGroup1);
         pass.SetBindGroup(2, bindGroup2);
         pass.Dispatch(1);
-        pass.EndPass();
+        pass.End();
         cb = encoder.Finish();
         queue.Submit(1, &cb);
     }
@@ -541,7 +541,7 @@
         pass.SetBindGroup(1, bindGroup1);
         pass.SetBindGroup(2, bindGroup2);
         pass.Dispatch(1);
-        pass.EndPass();
+        pass.End();
         cb = encoder.Finish();
         queue.Submit(1, &cb);
     }
@@ -582,7 +582,7 @@
 
     pass.SetPipeline(pipeline);
     pass.Draw(3);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -623,7 +623,7 @@
     pass.SetPipeline(pipeline);
     pass.Draw(3);
 
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -684,7 +684,7 @@
     pass.SetPipeline(pipeline);
     pass.Draw(3);
 
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -761,7 +761,7 @@
     pass.SetPipeline(pipeline1);
     pass.Draw(3);
 
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -867,7 +867,7 @@
     pass.SetBindGroup(1, storageBindGroup, 1, &dynamicOffset);
 
     pass.Draw(3);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -969,7 +969,7 @@
     // bind groups 0 and 1 should still be valid.
     pass.Draw(3);
 
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -1060,7 +1060,7 @@
     computePassEncoder.SetPipeline(pipeline);
     computePassEncoder.SetBindGroup(0, bindGroup, offsets.size(), offsets.data());
     computePassEncoder.Dispatch(1);
-    computePassEncoder.EndPass();
+    computePassEncoder.End();
 
     wgpu::CommandBuffer commands = commandEncoder.Finish();
     queue.Submit(1, &commands);
@@ -1142,7 +1142,7 @@
         computePassEncoder.SetPipeline(pipeline);
         computePassEncoder.SetBindGroup(0, bindGroup, offsets.size(), offsets.data());
         computePassEncoder.Dispatch(1);
-        computePassEncoder.EndPass();
+        computePassEncoder.End();
 
         wgpu::CommandBuffer commands = commandEncoder.Finish();
         queue.Submit(1, &commands);
@@ -1184,7 +1184,7 @@
     pass.SetPipeline(pipeline);
     pass.SetBindGroup(0, bindGroup);
     pass.Draw(3);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -1219,7 +1219,7 @@
     pass.SetPipeline(pipeline);
     pass.SetBindGroup(0, bindGroup, 1, &dynamicOffset);
     pass.Draw(3);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -1279,7 +1279,7 @@
             pass.SetPipeline(pipeline);
             pass.SetBindGroup(0, bindGroup);
             pass.Draw(3);
-            pass.EndPass();
+            pass.End();
 
             wgpu::CommandBuffer commands = encoder.Finish();
             queue.Submit(1, &commands);
@@ -1362,7 +1362,7 @@
     pass.SetPipeline(pipeline);
     pass.SetBindGroup(0, bg);
     pass.Dispatch(1);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -1416,7 +1416,7 @@
     pass.SetPipeline(renderPipeline);
     pass.SetBindGroup(0, utils::MakeBindGroup(device, bgl, {{0, storageBuffer}}));
     pass.Draw(3);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -1561,7 +1561,7 @@
     pass.SetPipeline(cp);
     pass.SetBindGroup(0, bg);
     pass.Dispatch(1, 1, 1);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = commandEncoder.Finish();
     queue.Submit(1, &commands);
diff --git a/src/tests/end2end/BufferZeroInitTests.cpp b/src/tests/end2end/BufferZeroInitTests.cpp
index c15b015..3810a70 100644
--- a/src/tests/end2end/BufferZeroInitTests.cpp
+++ b/src/tests/end2end/BufferZeroInitTests.cpp
@@ -109,7 +109,7 @@
                 {texture.CreateView(&viewDescriptor)});
             renderPassDescriptor.cColorAttachments[0].clearColor = color;
             wgpu::RenderPassEncoder renderPass = encoder.BeginRenderPass(&renderPassDescriptor);
-            renderPass.EndPass();
+            renderPass.End();
         }
 
         wgpu::CommandBuffer commandBuffer = encoder.Finish();
@@ -190,7 +190,7 @@
         computePass.SetBindGroup(0, bindGroup);
         computePass.SetPipeline(pipeline);
         computePass.Dispatch(1u);
-        computePass.EndPass();
+        computePass.End();
         wgpu::CommandBuffer commandBuffer = encoder.Finish();
 
         EXPECT_LAZY_CLEAR(1u, queue.Submit(1, &commandBuffer));
@@ -283,7 +283,7 @@
         renderPass.SetVertexBuffer(0, vertexBuffer, vertexBufferOffset, kVertexAttributeSize);
         renderPass.SetPipeline(renderPipeline);
         renderPass.Draw(1);
-        renderPass.EndPass();
+        renderPass.End();
 
         ExpectLazyClearSubmitAndCheckOutputs(encoder, vertexBuffer, vertexBufferSize,
                                              colorAttachment);
@@ -331,7 +331,7 @@
         renderPass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint16, indexBufferOffset,
                                   sizeof(uint32_t));
         renderPass.DrawIndexed(1);
-        renderPass.EndPass();
+        renderPass.End();
 
         ExpectLazyClearSubmitAndCheckOutputs(encoder, indexBuffer, indexBufferSize,
                                              colorAttachment);
@@ -373,7 +373,7 @@
         wgpu::RenderPassEncoder renderPass = encoder.BeginRenderPass(&renderPassDescriptor);
         renderPass.SetPipeline(renderPipeline);
         renderPass.DrawIndirect(indirectBuffer, indirectBufferOffset);
-        renderPass.EndPass();
+        renderPass.End();
 
         ExpectLazyClearSubmitAndCheckOutputs(encoder, indirectBuffer, bufferSize, colorAttachment);
     }
@@ -417,7 +417,7 @@
         renderPass.SetPipeline(renderPipeline);
         renderPass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint16);
         renderPass.DrawIndexedIndirect(indirectBuffer, indirectBufferOffset);
-        renderPass.EndPass();
+        renderPass.End();
 
         ExpectLazyClearSubmitAndCheckOutputs(encoder, indirectBuffer, bufferSize, colorAttachment);
     }
@@ -458,7 +458,7 @@
         computePass.SetBindGroup(0, bindGroup);
         computePass.SetPipeline(pipeline);
         computePass.DispatchIndirect(indirectBuffer, indirectBufferOffset);
-        computePass.EndPass();
+        computePass.End();
 
         ExpectLazyClearSubmitAndCheckOutputs(encoder, indirectBuffer, bufferSize, outputTexture);
     }
@@ -1227,7 +1227,7 @@
 
                 renderPass.SetPipeline(renderPipeline);
                 renderPass.DrawIndexed(1);
-                renderPass.EndPass();
+                renderPass.End();
 
                 wgpu::CommandBuffer commandBuffer = encoder.Finish();
 
diff --git a/src/tests/end2end/ClipSpaceTests.cpp b/src/tests/end2end/ClipSpaceTests.cpp
index 128348d..24ec1dc 100644
--- a/src/tests/end2end/ClipSpaceTests.cpp
+++ b/src/tests/end2end/ClipSpaceTests.cpp
@@ -84,7 +84,7 @@
     wgpu::RenderPassEncoder renderPass = commandEncoder.BeginRenderPass(&renderPassDescriptor);
     renderPass.SetPipeline(CreatePipelineForTest());
     renderPass.Draw(6);
-    renderPass.EndPass();
+    renderPass.End();
     wgpu::CommandBuffer commandBuffer = commandEncoder.Finish();
     queue.Submit(1, &commandBuffer);
 
diff --git a/src/tests/end2end/ColorStateTests.cpp b/src/tests/end2end/ColorStateTests.cpp
index ee4b3f3..6249d01 100644
--- a/src/tests/end2end/ColorStateTests.cpp
+++ b/src/tests/end2end/ColorStateTests.cpp
@@ -128,7 +128,7 @@
             pass.SetBindGroup(0, MakeBindGroupForColors(std::array<RGBA8, 1>({{triangle.color}})));
             pass.SetBlendConstant(&blendConstant);
             pass.Draw(3);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -756,7 +756,7 @@
             pass.SetPipeline(testPipeline);
             pass.SetBindGroup(0, MakeBindGroupForColors(std::array<RGBA8, 1>({{base}})));
             pass.Draw(3);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -891,7 +891,7 @@
             pass.SetBindGroup(0, MakeBindGroupForColors(
                                      std::array<RGBA8, 4>({{color0, color1, color2, color3}})));
             pass.Draw(3);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -967,7 +967,7 @@
             pass.SetBindGroup(
                 0, MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(255, 255, 255, 255)}})));
             pass.Draw(3);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -990,7 +990,7 @@
             pass.SetBindGroup(
                 0, MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(255, 255, 255, 255)}})));
             pass.Draw(3);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -1014,7 +1014,7 @@
             pass.SetBindGroup(
                 0, MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(255, 255, 255, 255)}})));
             pass.Draw(3);
-            pass.EndPass();
+            pass.End();
         }
         {
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
@@ -1026,7 +1026,7 @@
             pass.SetBindGroup(
                 0, MakeBindGroupForColors(std::array<RGBA8, 1>({{RGBA8(255, 255, 255, 255)}})));
             pass.Draw(3);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -1082,12 +1082,12 @@
 
         // Set a pipeline that will dirty the color write mask
         pass.SetPipeline(testPipeline);
-        pass.EndPass();
+        pass.End();
     }
     {
         // This renderpass' loadOp should clear all channels of the render attachment
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
-        pass.EndPass();
+        pass.End();
     }
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
diff --git a/src/tests/end2end/CompressedTextureFormatTests.cpp b/src/tests/end2end/CompressedTextureFormatTests.cpp
index ac80621..e238714 100644
--- a/src/tests/end2end/CompressedTextureFormatTests.cpp
+++ b/src/tests/end2end/CompressedTextureFormatTests.cpp
@@ -214,7 +214,7 @@
             pass.SetPipeline(renderPipeline);
             pass.SetBindGroup(0, bindGroup);
             pass.Draw(6);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/ComputeCopyStorageBufferTests.cpp b/src/tests/end2end/ComputeCopyStorageBufferTests.cpp
index 4c7ce9f..69fc8a8 100644
--- a/src/tests/end2end/ComputeCopyStorageBufferTests.cpp
+++ b/src/tests/end2end/ComputeCopyStorageBufferTests.cpp
@@ -75,7 +75,7 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, bindGroup);
         pass.Dispatch(kInstances);
-        pass.EndPass();
+        pass.End();
 
         commands = encoder.Finish();
     }
diff --git a/src/tests/end2end/ComputeDispatchTests.cpp b/src/tests/end2end/ComputeDispatchTests.cpp
index f56066d..5fb159e 100644
--- a/src/tests/end2end/ComputeDispatchTests.cpp
+++ b/src/tests/end2end/ComputeDispatchTests.cpp
@@ -101,7 +101,7 @@
             pass.SetPipeline(pipeline);
             pass.SetBindGroup(0, bindGroup);
             pass.Dispatch(x, y, z);
-            pass.EndPass();
+            pass.End();
 
             commands = encoder.Finish();
         }
@@ -160,7 +160,7 @@
             pass.SetPipeline(computePipelineForTest);
             pass.SetBindGroup(0, bindGroup);
             pass.DispatchIndirect(indirectBuffer, indirectOffset);
-            pass.EndPass();
+            pass.End();
 
             commands = encoder.Finish();
         }
diff --git a/src/tests/end2end/ComputeLayoutMemoryBufferTests.cpp b/src/tests/end2end/ComputeLayoutMemoryBufferTests.cpp
index 0b8b6c8..947b139 100644
--- a/src/tests/end2end/ComputeLayoutMemoryBufferTests.cpp
+++ b/src/tests/end2end/ComputeLayoutMemoryBufferTests.cpp
@@ -323,7 +323,7 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, bindGroup);
         pass.Dispatch(1);
-        pass.EndPass();
+        pass.End();
 
         commands = encoder.Finish();
     }
diff --git a/src/tests/end2end/ComputeSharedMemoryTests.cpp b/src/tests/end2end/ComputeSharedMemoryTests.cpp
index 1bc0d31..a796274 100644
--- a/src/tests/end2end/ComputeSharedMemoryTests.cpp
+++ b/src/tests/end2end/ComputeSharedMemoryTests.cpp
@@ -57,7 +57,7 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, bindGroup);
         pass.Dispatch(1);
-        pass.EndPass();
+        pass.End();
 
         commands = encoder.Finish();
     }
@@ -179,7 +179,7 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, bindGroup);
         pass.Dispatch(1);
-        pass.EndPass();
+        pass.End();
 
         commands = encoder.Finish();
     }
diff --git a/src/tests/end2end/ComputeStorageBufferBarrierTests.cpp b/src/tests/end2end/ComputeStorageBufferBarrierTests.cpp
index 8b3131d..ba8409a 100644
--- a/src/tests/end2end/ComputeStorageBufferBarrierTests.cpp
+++ b/src/tests/end2end/ComputeStorageBufferBarrierTests.cpp
@@ -59,7 +59,7 @@
     for (uint32_t i = 0; i < kIterations; ++i) {
         pass.Dispatch(kNumValues);
     }
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
 
@@ -124,7 +124,7 @@
         pass.SetBindGroup(0, bindGroups[1]);
         pass.Dispatch(kNumValues);
     }
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
 
@@ -190,7 +190,7 @@
         pass.SetBindGroup(0, bindGroups[1]);
         pass.Dispatch(kNumValues);
     }
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
 
@@ -256,7 +256,7 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, bindGroups[b]);
         pass.Dispatch(kNumValues / 4);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -324,7 +324,7 @@
         pass.SetBindGroup(0, bindGroups[b]);
         pass.Dispatch(kNumValues / 4);
     }
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -400,7 +400,7 @@
     pass.SetBindGroup(0, step3Group);
     pass.DispatchIndirect(buf, 0);
 
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
 
diff --git a/src/tests/end2end/CopyTests.cpp b/src/tests/end2end/CopyTests.cpp
index 17132de..a845ca1 100644
--- a/src/tests/end2end/CopyTests.cpp
+++ b/src/tests/end2end/CopyTests.cpp
@@ -1043,7 +1043,7 @@
     renderPass.cDepthStencilAttachmentInfo.depthLoadOp = wgpu::LoadOp::Clear;
     renderPass.cDepthStencilAttachmentInfo.depthStoreOp = wgpu::StoreOp::Store;
     wgpu::RenderPassEncoder renderPassEncoder = encoder.BeginRenderPass(&renderPass);
-    renderPassEncoder.EndPass();
+    renderPassEncoder.End();
 
     constexpr uint32_t kBufferCopyOffset = kTextureBytesPerRowAlignment;
     const uint32_t kBufferSize =
diff --git a/src/tests/end2end/CopyTextureForBrowserTests.cpp b/src/tests/end2end/CopyTextureForBrowserTests.cpp
index 2932674..aa83fbb 100644
--- a/src/tests/end2end/CopyTextureForBrowserTests.cpp
+++ b/src/tests/end2end/CopyTextureForBrowserTests.cpp
@@ -476,7 +476,7 @@
             pass.SetBindGroup(0, bindGroup);
             pass.Dispatch(dstSpec.textureSize.width,
                           dstSpec.textureSize.height);  // Verify dst texture content
-            pass.EndPass();
+            pass.End();
 
             testCommands = encoder.Finish();
         }
diff --git a/src/tests/end2end/CreatePipelineAsyncTests.cpp b/src/tests/end2end/CreatePipelineAsyncTests.cpp
index 959ff6c..476733f 100644
--- a/src/tests/end2end/CreatePipelineAsyncTests.cpp
+++ b/src/tests/end2end/CreatePipelineAsyncTests.cpp
@@ -53,7 +53,7 @@
             pass.SetPipeline(currentTask->computePipeline);
 
             pass.Dispatch(1);
-            pass.EndPass();
+            pass.End();
 
             commands = encoder.Finish();
         }
@@ -96,7 +96,7 @@
 
             renderPassEncoder.SetPipeline(currentTask->renderPipeline);
             renderPassEncoder.Draw(1);
-            renderPassEncoder.EndPass();
+            renderPassEncoder.End();
             commands = encoder.Finish();
         }
 
@@ -308,7 +308,7 @@
 
         renderPassEncoder.SetPipeline(task.renderPipeline);
         renderPassEncoder.Draw(1);
-        renderPassEncoder.EndPass();
+        renderPassEncoder.End();
         commands = encoder.Finish();
     }
 
@@ -700,7 +700,7 @@
         pass.SetVertexBuffer(0, vertexBuffer1);
         pass.SetVertexBuffer(1, vertexBuffer2);
         pass.Draw(1);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -773,7 +773,7 @@
         pass.SetStencilReference(1);
 
         pass.Draw(1);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -840,7 +840,7 @@
         pass.SetPipeline(task.renderPipeline);
 
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -942,7 +942,7 @@
         pass.SetPipeline(task.renderPipeline);
 
         pass.Draw(1);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/CullingTests.cpp b/src/tests/end2end/CullingTests.cpp
index fb5c4d1..27da015 100644
--- a/src/tests/end2end/CullingTests.cpp
+++ b/src/tests/end2end/CullingTests.cpp
@@ -82,7 +82,7 @@
         wgpu::RenderPassEncoder renderPass = commandEncoder.BeginRenderPass(&renderPassDescriptor);
         renderPass.SetPipeline(CreatePipelineForTest(frontFace, cullMode));
         renderPass.Draw(6);
-        renderPass.EndPass();
+        renderPass.End();
         wgpu::CommandBuffer commandBuffer = commandEncoder.Finish();
         queue.Submit(1, &commandBuffer);
 
diff --git a/src/tests/end2end/D3D12ResourceWrappingTests.cpp b/src/tests/end2end/D3D12ResourceWrappingTests.cpp
index d935ad4..dab828c 100644
--- a/src/tests/end2end/D3D12ResourceWrappingTests.cpp
+++ b/src/tests/end2end/D3D12ResourceWrappingTests.cpp
@@ -330,7 +330,7 @@
 
         wgpu::CommandEncoder encoder = wgpuDevice.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDescriptor);
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commands = encoder.Finish();
         wgpu::Queue queue = wgpuDevice.GetQueue();
diff --git a/src/tests/end2end/DebugMarkerTests.cpp b/src/tests/end2end/DebugMarkerTests.cpp
index 7e57df9..5fc3c84 100644
--- a/src/tests/end2end/DebugMarkerTests.cpp
+++ b/src/tests/end2end/DebugMarkerTests.cpp
@@ -31,14 +31,14 @@
         pass.PushDebugGroup("Event Start");
         pass.InsertDebugMarker("Marker");
         pass.PopDebugGroup();
-        pass.EndPass();
+        pass.End();
     }
     {
         wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
         pass.PushDebugGroup("Event Start");
         pass.InsertDebugMarker("Marker");
         pass.PopDebugGroup();
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/DeprecatedAPITests.cpp b/src/tests/end2end/DeprecatedAPITests.cpp
index 0cf934d..69a0e10 100644
--- a/src/tests/end2end/DeprecatedAPITests.cpp
+++ b/src/tests/end2end/DeprecatedAPITests.cpp
@@ -70,7 +70,25 @@
 
     EXPECT_DEPRECATION_WARNING(pass = encoder.BeginRenderPass(&renderPass.renderPassInfo));
 
-    pass.EndPass();
+    pass.End();
+}
+
+// Test that endPass() is deprecated for both render and compute passes.
+TEST_P(DeprecationTests, EndPass) {
+    wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
+
+    {
+        utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, 1, 1);
+        wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
+
+        EXPECT_DEPRECATION_WARNING(pass.EndPass());
+    }
+
+    {
+        wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
+
+        EXPECT_DEPRECATION_WARNING(pass.EndPass());
+    }
 }
 
 DAWN_INSTANTIATE_TEST(DeprecationTests,
diff --git a/src/tests/end2end/DepthBiasTests.cpp b/src/tests/end2end/DepthBiasTests.cpp
index 339d77e..d1c000e 100644
--- a/src/tests/end2end/DepthBiasTests.cpp
+++ b/src/tests/end2end/DepthBiasTests.cpp
@@ -116,7 +116,7 @@
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPassDesc);
         pass.SetPipeline(pipeline);
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commands = commandEncoder.Finish();
         queue.Submit(1, &commands);
diff --git a/src/tests/end2end/DepthStencilCopyTests.cpp b/src/tests/end2end/DepthStencilCopyTests.cpp
index 388e1da..c4496c3 100644
--- a/src/tests/end2end/DepthStencilCopyTests.cpp
+++ b/src/tests/end2end/DepthStencilCopyTests.cpp
@@ -161,7 +161,7 @@
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPassDesc);
         pass.SetPipeline(pipeline);
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commands = commandEncoder.Finish();
         queue.Submit(1, &commands);
@@ -197,7 +197,7 @@
         pass.SetPipeline(pipeline);
         pass.SetStencilReference(regionStencil);
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commands = commandEncoder.Finish();
         queue.Submit(1, &commands);
@@ -594,7 +594,7 @@
         passDescriptor.cDepthStencilAttachmentInfo.clearDepth = 0.7;
 
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&passDescriptor);
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commands = commandEncoder.Finish();
         queue.Submit(1, &commands);
@@ -654,7 +654,7 @@
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&passDescriptor);
         pass.SetPipeline(pipeline);
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commands = commandEncoder.Finish();
         queue.Submit(1, &commands);
diff --git a/src/tests/end2end/DepthStencilLoadOpTests.cpp b/src/tests/end2end/DepthStencilLoadOpTests.cpp
index d3e777f..dd5dbe9 100644
--- a/src/tests/end2end/DepthStencilLoadOpTests.cpp
+++ b/src/tests/end2end/DepthStencilLoadOpTests.cpp
@@ -188,7 +188,7 @@
                           GetParam().mFormat == wgpu::TextureFormat::Depth16Unorm);
 
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
-    encoder.BeginRenderPass(&renderPassDescriptors[0]).EndPass();
+    encoder.BeginRenderPass(&renderPassDescriptors[0]).End();
     wgpu::CommandBuffer commandBuffer = encoder.Finish();
     queue.Submit(1, &commandBuffer);
 
@@ -206,7 +206,7 @@
     DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel() && GetParam().mCheck == Check::CopyStencil);
 
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
-    encoder.BeginRenderPass(&renderPassDescriptors[1]).EndPass();
+    encoder.BeginRenderPass(&renderPassDescriptors[1]).End();
     wgpu::CommandBuffer commandBuffer = encoder.Finish();
     queue.Submit(1, &commandBuffer);
 
@@ -224,8 +224,8 @@
                           GetParam().mFormat == wgpu::TextureFormat::Depth16Unorm);
 
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
-    encoder.BeginRenderPass(&renderPassDescriptors[0]).EndPass();
-    encoder.BeginRenderPass(&renderPassDescriptors[1]).EndPass();
+    encoder.BeginRenderPass(&renderPassDescriptors[0]).End();
+    encoder.BeginRenderPass(&renderPassDescriptors[1]).End();
     wgpu::CommandBuffer commandBuffer = encoder.Finish();
     queue.Submit(1, &commandBuffer);
 
@@ -244,8 +244,8 @@
                           GetParam().mFormat == wgpu::TextureFormat::Depth16Unorm);
 
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
-    encoder.BeginRenderPass(&renderPassDescriptors[1]).EndPass();
-    encoder.BeginRenderPass(&renderPassDescriptors[0]).EndPass();
+    encoder.BeginRenderPass(&renderPassDescriptors[1]).End();
+    encoder.BeginRenderPass(&renderPassDescriptors[0]).End();
     wgpu::CommandBuffer commandBuffer = encoder.Finish();
     queue.Submit(1, &commandBuffer);
 
diff --git a/src/tests/end2end/DepthStencilSamplingTests.cpp b/src/tests/end2end/DepthStencilSamplingTests.cpp
index 36d7d98..78fa955 100644
--- a/src/tests/end2end/DepthStencilSamplingTests.cpp
+++ b/src/tests/end2end/DepthStencilSamplingTests.cpp
@@ -269,7 +269,7 @@
         passDescriptor.cDepthStencilAttachmentInfo.clearDepth = depthValue;
 
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&passDescriptor);
-        pass.EndPass();
+        pass.End();
     }
 
     void UpdateInputStencil(wgpu::CommandEncoder commandEncoder,
@@ -279,7 +279,7 @@
         passDescriptor.cDepthStencilAttachmentInfo.clearStencil = stencilValue;
 
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&passDescriptor);
-        pass.EndPass();
+        pass.End();
     }
 
     template <typename T, typename CheckBufferFn>
@@ -327,7 +327,7 @@
                 pass.SetPipeline(pipeline);
                 pass.SetBindGroup(0, bindGroup);
                 pass.Draw(1);
-                pass.EndPass();
+                pass.End();
             }
 
             wgpu::CommandBuffer commands = commandEncoder.Finish();
@@ -379,7 +379,7 @@
                 pass.SetPipeline(pipeline);
                 pass.SetBindGroup(0, bindGroup);
                 pass.Dispatch(1);
-                pass.EndPass();
+                pass.End();
             }
 
             wgpu::CommandBuffer commands = commandEncoder.Finish();
@@ -531,7 +531,7 @@
                 pass.SetPipeline(pipeline);
                 pass.SetBindGroup(0, bindGroup);
                 pass.Draw(1);
-                pass.EndPass();
+                pass.End();
             }
 
             wgpu::CommandBuffer commands = commandEncoder.Finish();
@@ -577,7 +577,7 @@
                 pass.SetPipeline(pipeline);
                 pass.SetBindGroup(0, bindGroup);
                 pass.Dispatch(1);
-                pass.EndPass();
+                pass.End();
             }
 
             wgpu::CommandBuffer commands = commandEncoder.Finish();
@@ -661,7 +661,7 @@
         passDescriptor.cDepthStencilAttachmentInfo.clearStencil = 31;
 
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&passDescriptor);
-        pass.EndPass();
+        pass.End();
 
         // Render into the output textures
         {
@@ -672,7 +672,7 @@
             pass.SetPipeline(pipeline);
             pass.SetBindGroup(0, bindGroup);
             pass.Draw(1);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = commandEncoder.Finish();
@@ -712,7 +712,7 @@
         passDescriptor.cDepthStencilAttachmentInfo.clearStencil = 31;
 
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&passDescriptor);
-        pass.EndPass();
+        pass.End();
 
         // Sample into the output buffers
         {
@@ -720,7 +720,7 @@
             pass.SetPipeline(pipeline);
             pass.SetBindGroup(0, bindGroup);
             pass.Dispatch(1);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = commandEncoder.Finish();
diff --git a/src/tests/end2end/DepthStencilStateTests.cpp b/src/tests/end2end/DepthStencilStateTests.cpp
index d36ae91..f6db23f 100644
--- a/src/tests/end2end/DepthStencilStateTests.cpp
+++ b/src/tests/end2end/DepthStencilStateTests.cpp
@@ -289,7 +289,7 @@
             // Clear the depthStencilView at the beginning
             {
                 pass = encoder.BeginRenderPass(&renderPass);
-                pass.EndPass();
+                pass.End();
             }
         } else {
             pass = encoder.BeginRenderPass(&renderPass);
@@ -336,12 +336,12 @@
             pass.Draw(6);
 
             if (isSingleEncoderMultiplePass) {
-                pass.EndPass();
+                pass.End();
             }
         }
 
         if (!isSingleEncoderMultiplePass) {
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/DestroyTests.cpp b/src/tests/end2end/DestroyTests.cpp
index e4d26dd..41475b6 100644
--- a/src/tests/end2end/DestroyTests.cpp
+++ b/src/tests/end2end/DestroyTests.cpp
@@ -58,7 +58,7 @@
              -1.0f, 1.0f, 0.0f, 1.0f, 1.0f, -1.0f, 0.0f, 1.0f, -1.0f, -1.0f, 0.0f, 1.0f});
 
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
-        encoder.BeginRenderPass(&renderPass.renderPassInfo).EndPass();
+        encoder.BeginRenderPass(&renderPass.renderPassInfo).End();
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
     }
@@ -74,7 +74,7 @@
             pass.SetPipeline(pipeline);
             pass.SetVertexBuffer(0, vertexBuffer);
             pass.Draw(3);
-            pass.EndPass();
+            pass.End();
         }
         wgpu::CommandBuffer commands = encoder.Finish();
         return commands;
diff --git a/src/tests/end2end/DrawIndexedIndirectTests.cpp b/src/tests/end2end/DrawIndexedIndirectTests.cpp
index 60f44ff..14383af 100644
--- a/src/tests/end2end/DrawIndexedIndirectTests.cpp
+++ b/src/tests/end2end/DrawIndexedIndirectTests.cpp
@@ -88,7 +88,7 @@
             pass.SetVertexBuffer(0, vertexBuffer);
             pass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint32, indexOffset);
             pass.DrawIndexedIndirect(indirectBuffer, indirectOffset);
-            pass.EndPass();
+            pass.End();
         }
 
         return encoder.Finish();
@@ -288,7 +288,7 @@
         pass.DrawIndexedIndirect(indirectBuffer, 0);
         pass.DrawIndexedIndirect(indirectBuffer, 20);
         pass.DrawIndexedIndirect(indirectBuffer, 40);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -313,7 +313,7 @@
         pass.SetIndexBuffer(CreateIndexBuffer({0, 1, 2, 0, 3, 1, 0, 2, 1}),
                             wgpu::IndexFormat::Uint32, 0);
         pass.DrawIndexedIndirect(indirectBuffer, 40);
-        pass.EndPass();
+        pass.End();
     }
     commands = encoder.Finish();
 
@@ -332,7 +332,7 @@
         pass.DrawIndexedIndirect(CreateIndirectBuffer({3, 1, 3, 0, 0}), 0);
         pass.DrawIndexedIndirect(CreateIndirectBuffer({10, 1, 0, 0, 0}), 0);
         pass.DrawIndexedIndirect(CreateIndirectBuffer({3, 1, 6, 0, 0}), 0);
-        pass.EndPass();
+        pass.End();
     }
     commands = encoder.Finish();
 
@@ -352,7 +352,7 @@
         pass.DrawIndexedIndirect(CreateIndirectBuffer({10, 1, 0, 0, 0}), 0);
         pass.SetIndexBuffer(CreateIndexBuffer({0, 3, 1}), wgpu::IndexFormat::Uint32, 0);
         pass.DrawIndexedIndirect(CreateIndirectBuffer({3, 1, 3, 0, 0}), 0);
-        pass.EndPass();
+        pass.End();
     }
     commands = encoder.Finish();
 
@@ -491,7 +491,7 @@
     {
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.ExecuteBundles(bundles.size(), bundles.data());
-        pass.EndPass();
+        pass.End();
     }
     wgpu::CommandBuffer commands = encoder.Finish();
 
@@ -531,7 +531,7 @@
         renderPass.renderPassInfo.cColorAttachments[0].loadOp = wgpu::LoadOp::Load;
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.ExecuteBundles(1, &bundle);
-        pass.EndPass();
+        pass.End();
 
         commands[0] = encoder.Finish();
     }
@@ -552,7 +552,7 @@
         renderPass.renderPassInfo.cColorAttachments[0].loadOp = wgpu::LoadOp::Clear;
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.ExecuteBundles(1, &bundle);
-        pass.EndPass();
+        pass.End();
 
         commands[1] = encoder.Finish();
     }
@@ -627,14 +627,14 @@
         pass.SetPipeline(computePipeline);
         pass.SetBindGroup(0, bindGroup);
         pass.Dispatch(1);
-        pass.EndPass();
+        pass.End();
     };
 
     auto encodeRenderPassToExecuteBundle = [&](wgpu::LoadOp colorLoadOp) {
         renderPass.renderPassInfo.cColorAttachments[0].loadOp = colorLoadOp;
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.ExecuteBundles(1, &bundle);
-        pass.EndPass();
+        pass.End();
     };
 
     encodeComputePassToUpdateFirstIndex(0);
diff --git a/src/tests/end2end/DrawIndexedTests.cpp b/src/tests/end2end/DrawIndexedTests.cpp
index a08e3fc..8406017 100644
--- a/src/tests/end2end/DrawIndexedTests.cpp
+++ b/src/tests/end2end/DrawIndexedTests.cpp
@@ -111,7 +111,7 @@
             pass.SetVertexBuffer(0, vertexBuffer);
             pass.SetIndexBuffer(curIndexBuffer, wgpu::IndexFormat::Uint32, bufferOffset);
             pass.DrawIndexed(indexCount, instanceCount, firstIndex, baseVertex, firstInstance);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/DrawIndirectTests.cpp b/src/tests/end2end/DrawIndirectTests.cpp
index 778c84c..9987311 100644
--- a/src/tests/end2end/DrawIndirectTests.cpp
+++ b/src/tests/end2end/DrawIndirectTests.cpp
@@ -76,7 +76,7 @@
             pass.SetPipeline(pipeline);
             pass.SetVertexBuffer(0, vertexBuffer);
             pass.DrawIndirect(indirectBuffer, indirectOffset);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/DrawTests.cpp b/src/tests/end2end/DrawTests.cpp
index efb3786..526023d 100644
--- a/src/tests/end2end/DrawTests.cpp
+++ b/src/tests/end2end/DrawTests.cpp
@@ -74,7 +74,7 @@
             pass.SetPipeline(pipeline);
             pass.SetVertexBuffer(0, vertexBuffer);
             pass.Draw(vertexCount, instanceCount, firstIndex, firstInstance);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/DynamicBufferOffsetTests.cpp b/src/tests/end2end/DynamicBufferOffsetTests.cpp
index 4d00066..bc5160b 100644
--- a/src/tests/end2end/DynamicBufferOffsetTests.cpp
+++ b/src/tests/end2end/DynamicBufferOffsetTests.cpp
@@ -220,7 +220,7 @@
     renderPassEncoder.SetPipeline(pipeline);
     renderPassEncoder.SetBindGroup(0, mBindGroups[0], offsets.size(), offsets.data());
     renderPassEncoder.Draw(3);
-    renderPassEncoder.EndPass();
+    renderPassEncoder.End();
     wgpu::CommandBuffer commands = commandEncoder.Finish();
     queue.Submit(1, &commands);
 
@@ -242,7 +242,7 @@
     renderPassEncoder.SetPipeline(pipeline);
     renderPassEncoder.SetBindGroup(0, mBindGroups[0], offsets.size(), offsets.data());
     renderPassEncoder.Draw(3);
-    renderPassEncoder.EndPass();
+    renderPassEncoder.End();
     wgpu::CommandBuffer commands = commandEncoder.Finish();
     queue.Submit(1, &commands);
 
@@ -263,7 +263,7 @@
     computePassEncoder.SetPipeline(pipeline);
     computePassEncoder.SetBindGroup(0, mBindGroups[0], offsets.size(), offsets.data());
     computePassEncoder.Dispatch(1);
-    computePassEncoder.EndPass();
+    computePassEncoder.End();
     wgpu::CommandBuffer commands = commandEncoder.Finish();
     queue.Submit(1, &commands);
 
@@ -283,7 +283,7 @@
     computePassEncoder.SetPipeline(pipeline);
     computePassEncoder.SetBindGroup(0, mBindGroups[0], offsets.size(), offsets.data());
     computePassEncoder.Dispatch(1);
-    computePassEncoder.EndPass();
+    computePassEncoder.End();
     wgpu::CommandBuffer commands = commandEncoder.Finish();
     queue.Submit(1, &commands);
 
@@ -311,7 +311,7 @@
     renderPassEncoder.SetPipeline(testPipeline);
     renderPassEncoder.SetBindGroup(1, mBindGroups[1]);
     renderPassEncoder.Draw(3);
-    renderPassEncoder.EndPass();
+    renderPassEncoder.End();
     wgpu::CommandBuffer commands = commandEncoder.Finish();
     queue.Submit(1, &commands);
 
@@ -341,7 +341,7 @@
     computePassEncoder.SetPipeline(testPipeline);
     computePassEncoder.SetBindGroup(1, mBindGroups[1]);
     computePassEncoder.Dispatch(1);
-    computePassEncoder.EndPass();
+    computePassEncoder.End();
     wgpu::CommandBuffer commands = commandEncoder.Finish();
     queue.Submit(1, &commands);
 
@@ -369,7 +369,7 @@
     renderPassEncoder.Draw(3);
     renderPassEncoder.SetBindGroup(0, mBindGroups[0], testOffsets.size(), testOffsets.data());
     renderPassEncoder.Draw(3);
-    renderPassEncoder.EndPass();
+    renderPassEncoder.End();
     wgpu::CommandBuffer commands = commandEncoder.Finish();
     queue.Submit(1, &commands);
 
@@ -393,7 +393,7 @@
     computePassEncoder.Dispatch(1);
     computePassEncoder.SetBindGroup(0, mBindGroups[0], testOffsets.size(), testOffsets.data());
     computePassEncoder.Dispatch(1);
-    computePassEncoder.EndPass();
+    computePassEncoder.End();
     wgpu::CommandBuffer commands = commandEncoder.Finish();
     queue.Submit(1, &commands);
 
@@ -563,7 +563,7 @@
     computePassEncoder.SetPipeline(pipeline);
     computePassEncoder.SetBindGroup(0, bindGroup, dynamicOffsets.size(), dynamicOffsets.data());
     computePassEncoder.Dispatch(1);
-    computePassEncoder.EndPass();
+    computePassEncoder.End();
     wgpu::CommandBuffer commands = commandEncoder.Finish();
     queue.Submit(1, &commands);
 
diff --git a/src/tests/end2end/EntryPointTests.cpp b/src/tests/end2end/EntryPointTests.cpp
index 1803888..8efa93b 100644
--- a/src/tests/end2end/EntryPointTests.cpp
+++ b/src/tests/end2end/EntryPointTests.cpp
@@ -50,7 +50,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetPipeline(pipeline);
         pass.Draw(1);
-        pass.EndPass();
+        pass.End();
     }
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -120,7 +120,7 @@
         pass.SetPipeline(write1);
         pass.SetBindGroup(0, group);
         pass.Dispatch(1);
-        pass.EndPass();
+        pass.End();
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
 
@@ -134,7 +134,7 @@
         pass.SetPipeline(write42);
         pass.SetBindGroup(0, group);
         pass.Dispatch(42);
-        pass.EndPass();
+        pass.End();
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
 
diff --git a/src/tests/end2end/ExternalTextureTests.cpp b/src/tests/end2end/ExternalTextureTests.cpp
index 0d5d35a..2211f20 100644
--- a/src/tests/end2end/ExternalTextureTests.cpp
+++ b/src/tests/end2end/ExternalTextureTests.cpp
@@ -96,7 +96,7 @@
         renderPass.cColorAttachments[0].clearColor = {0.0f, 1.0f, 0.0f, 1.0f};
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
@@ -136,7 +136,7 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, bindGroup);
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/FirstIndexOffsetTests.cpp b/src/tests/end2end/FirstIndexOffsetTests.cpp
index ca3e87e..be514ee 100644
--- a/src/tests/end2end/FirstIndexOffsetTests.cpp
+++ b/src/tests/end2end/FirstIndexOffsetTests.cpp
@@ -223,7 +223,7 @@
         default:
             FAIL();
     }
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
 
diff --git a/src/tests/end2end/GpuMemorySynchronizationTests.cpp b/src/tests/end2end/GpuMemorySynchronizationTests.cpp
index 8a62fbe..97d606f 100644
--- a/src/tests/end2end/GpuMemorySynchronizationTests.cpp
+++ b/src/tests/end2end/GpuMemorySynchronizationTests.cpp
@@ -104,7 +104,7 @@
         pass.SetPipeline(compute);
         pass.SetBindGroup(0, bindGroup);
         pass.Dispatch(1);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -134,7 +134,7 @@
         pass.SetPipeline(render);
         pass.SetBindGroup(0, bindGroup);
         pass.Draw(1);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -161,14 +161,14 @@
     pass0.SetPipeline(render);
     pass0.SetBindGroup(0, bindGroup0);
     pass0.Draw(1);
-    pass0.EndPass();
+    pass0.End();
 
     // Read that data in compute pass.
     wgpu::ComputePassEncoder pass1 = encoder.BeginComputePass();
     pass1.SetPipeline(compute);
     pass1.SetBindGroup(0, bindGroup1);
     pass1.Dispatch(1);
-    pass1.EndPass();
+    pass1.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -194,14 +194,14 @@
     pass0.SetPipeline(compute);
     pass0.SetBindGroup(0, bindGroup1);
     pass0.Dispatch(1);
-    pass0.EndPass();
+    pass0.End();
 
     // Read that data in render pass.
     wgpu::RenderPassEncoder pass1 = encoder.BeginRenderPass(&renderPass.renderPassInfo);
     pass1.SetPipeline(render);
     pass1.SetBindGroup(0, bindGroup0);
     pass1.Draw(1);
-    pass1.EndPass();
+    pass1.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -294,14 +294,14 @@
     pass0.SetPipeline(compute);
     pass0.SetBindGroup(0, computeBindGroup);
     pass0.Dispatch(1);
-    pass0.EndPass();
+    pass0.End();
 
     // Read that data in render pass.
     wgpu::RenderPassEncoder pass1 = encoder0.BeginRenderPass(&renderPass.renderPassInfo);
     pass1.SetPipeline(render);
     pass1.SetBindGroup(0, renderBindGroup);
     pass1.Draw(1);
-    pass1.EndPass();
+    pass1.End();
 
     wgpu::CommandBuffer commands = encoder0.Finish();
     queue.Submit(1, &commands);
@@ -327,7 +327,7 @@
     pass0.SetPipeline(compute);
     pass0.SetBindGroup(0, computeBindGroup);
     pass0.Dispatch(1);
-    pass0.EndPass();
+    pass0.End();
     cb[0] = encoder0.Finish();
 
     // Read that data in render pass.
@@ -336,7 +336,7 @@
     pass1.SetPipeline(render);
     pass1.SetBindGroup(0, renderBindGroup);
     pass1.Draw(1);
-    pass1.EndPass();
+    pass1.End();
 
     cb[1] = encoder1.Finish();
     queue.Submit(2, cb);
@@ -362,7 +362,7 @@
     pass0.SetPipeline(compute);
     pass0.SetBindGroup(0, computeBindGroup);
     pass0.Dispatch(1);
-    pass0.EndPass();
+    pass0.End();
     cb[0] = encoder0.Finish();
     queue.Submit(1, &cb[0]);
 
@@ -372,7 +372,7 @@
     pass1.SetPipeline(render);
     pass1.SetBindGroup(0, renderBindGroup);
     pass1.Draw(1);
-    pass1.EndPass();
+    pass1.End();
 
     cb[1] = encoder1.Finish();
     queue.Submit(1, &cb[1]);
@@ -466,7 +466,7 @@
     pass0.SetPipeline(cp);
     pass0.SetBindGroup(0, bindGroup0);
     pass0.Dispatch(1);
-    pass0.EndPass();
+    pass0.End();
 
     // Create pipeline, bind group, and reuse buffers in render pass.
     wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
@@ -511,7 +511,7 @@
     pass1.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint32, 0);
     pass1.SetBindGroup(0, bindGroup1);
     pass1.DrawIndexed(6);
-    pass1.EndPass();
+    pass1.End();
 
     wgpu::CommandBuffer commandBuffer = encoder.Finish();
     queue.Submit(1, &commandBuffer);
@@ -583,7 +583,7 @@
     pass0.SetPipeline(cp);
     pass0.SetBindGroup(0, bindGroup0);
     pass0.Dispatch(1);
-    pass0.EndPass();
+    pass0.End();
 
     // Create pipeline, bind group, and reuse the buffer in render pass.
     wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
@@ -629,7 +629,7 @@
     pass1.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, offsetof(Data, indices));
     pass1.SetBindGroup(0, bindGroup1);
     pass1.DrawIndexed(6);
-    pass1.EndPass();
+    pass1.End();
 
     wgpu::CommandBuffer commandBuffer = encoder.Finish();
     queue.Submit(1, &commandBuffer);
diff --git a/src/tests/end2end/IOSurfaceWrappingTests.cpp b/src/tests/end2end/IOSurfaceWrappingTests.cpp
index 3b46789..a48bd72 100644
--- a/src/tests/end2end/IOSurfaceWrappingTests.cpp
+++ b/src/tests/end2end/IOSurfaceWrappingTests.cpp
@@ -323,7 +323,7 @@
             pass.SetPipeline(pipeline);
             pass.SetBindGroup(0, bindGroup);
             pass.Draw(6);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -356,7 +356,7 @@
         // Execute commands to clear the ioSurface
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDescriptor);
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
diff --git a/src/tests/end2end/IndexFormatTests.cpp b/src/tests/end2end/IndexFormatTests.cpp
index 636af3b..5eea319 100644
--- a/src/tests/end2end/IndexFormatTests.cpp
+++ b/src/tests/end2end/IndexFormatTests.cpp
@@ -86,7 +86,7 @@
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint32);
         pass.DrawIndexed(3);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -113,7 +113,7 @@
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint16);
         pass.DrawIndexed(3);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -145,7 +145,7 @@
         pass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint32);
         pass.SetPipeline(pipeline32);
         pass.DrawIndexed(3);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -173,7 +173,7 @@
         pass.SetPipeline(pipeline);
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.DrawIndexed(3);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -203,7 +203,7 @@
         pass.SetPipeline(pipeline);
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.DrawIndexed(3);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -218,7 +218,7 @@
         pass.SetPipeline(pipeline);
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.DrawIndexed(3);
-        pass.EndPass();
+        pass.End();
     }
 
     commands = encoder.Finish();
@@ -280,7 +280,7 @@
         pass.SetVertexBuffer(0, mVertexBuffer);
         pass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint32);
         pass.DrawIndexed(7);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -315,7 +315,7 @@
         pass.SetVertexBuffer(0, mVertexBuffer);
         pass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint32);
         pass.DrawIndexed(7);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -351,7 +351,7 @@
         pass.SetVertexBuffer(0, mVertexBuffer);
         pass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint16);
         pass.DrawIndexed(7);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -405,7 +405,7 @@
         pass.SetVertexBuffer(0, mVertexBuffer);
         pass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint32);
         pass.DrawIndexed(5);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -434,7 +434,7 @@
         pass.SetVertexBuffer(0, mVertexBuffer);
         pass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint32);
         pass.DrawIndexed(5);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -461,7 +461,7 @@
         pass.SetVertexBuffer(0, mVertexBuffer);
         pass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint16);
         pass.DrawIndexed(5);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/MaxLimitTests.cpp b/src/tests/end2end/MaxLimitTests.cpp
index 0e46a9f..e72c39e 100644
--- a/src/tests/end2end/MaxLimitTests.cpp
+++ b/src/tests/end2end/MaxLimitTests.cpp
@@ -89,7 +89,7 @@
     pass.SetPipeline(pipeline);
     pass.SetBindGroup(0, bindGroup);
     pass.Dispatch(1);
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
 
@@ -223,7 +223,7 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, bindGroup);
         pass.Dispatch(1);
-        pass.EndPass();
+        pass.End();
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
 
diff --git a/src/tests/end2end/MultisampledRenderingTests.cpp b/src/tests/end2end/MultisampledRenderingTests.cpp
index eb17ca0..ee8322e 100644
--- a/src/tests/end2end/MultisampledRenderingTests.cpp
+++ b/src/tests/end2end/MultisampledRenderingTests.cpp
@@ -135,7 +135,7 @@
         renderPassEncoder.SetPipeline(pipeline);
         renderPassEncoder.SetBindGroup(0, bindGroup);
         renderPassEncoder.Draw(3);
-        renderPassEncoder.EndPass();
+        renderPassEncoder.End();
     }
 
     void EncodeRenderPassForTest(wgpu::CommandEncoder commandEncoder,
@@ -407,7 +407,7 @@
             kTestDepth);
 
         wgpu::RenderPassEncoder renderPassEncoder = commandEncoder.BeginRenderPass(&renderPass);
-        renderPassEncoder.EndPass();
+        renderPassEncoder.End();
     }
 
     wgpu::CommandBuffer commandBuffer = commandEncoder.Finish();
@@ -484,7 +484,7 @@
             kTestDepth);
 
         wgpu::RenderPassEncoder renderPassEncoder = commandEncoder.BeginRenderPass(&renderPass);
-        renderPassEncoder.EndPass();
+        renderPassEncoder.End();
     }
 
     wgpu::CommandBuffer commandBuffer = commandEncoder.Finish();
diff --git a/src/tests/end2end/MultisampledSamplingTests.cpp b/src/tests/end2end/MultisampledSamplingTests.cpp
index 17d52e4..162ba0f 100644
--- a/src/tests/end2end/MultisampledSamplingTests.cpp
+++ b/src/tests/end2end/MultisampledSamplingTests.cpp
@@ -205,7 +205,7 @@
             renderPassEncoder.SetVertexBuffer(0, vBuffer, kQuadNumBytes * sampleOffset,
                                               kQuadNumBytes);
             renderPassEncoder.Draw(4);
-            renderPassEncoder.EndPass();
+            renderPassEncoder.End();
 
             wgpu::ComputePassEncoder computePassEncoder = commandEncoder.BeginComputePass();
             computePassEncoder.SetPipeline(checkSamplePipeline);
@@ -216,7 +216,7 @@
                         {1, depthView},
                         {2, outputBuffer, alignedResultSize * sampleOffset, kResultSize}}));
             computePassEncoder.Dispatch(1);
-            computePassEncoder.EndPass();
+            computePassEncoder.End();
         }
     }
 
diff --git a/src/tests/end2end/OpArrayLengthTests.cpp b/src/tests/end2end/OpArrayLengthTests.cpp
index 8efc02a..ed5a08e 100644
--- a/src/tests/end2end/OpArrayLengthTests.cpp
+++ b/src/tests/end2end/OpArrayLengthTests.cpp
@@ -140,7 +140,7 @@
     pass.SetBindGroup(0, mBindGroup);
     pass.SetBindGroup(1, resultBindGroup);
     pass.Dispatch(1);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -189,7 +189,7 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, mBindGroup);
         pass.Draw(1);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -249,7 +249,7 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, mBindGroup);
         pass.Draw(1);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/PrimitiveStateTests.cpp b/src/tests/end2end/PrimitiveStateTests.cpp
index 10e06ea..0f1b54a 100644
--- a/src/tests/end2end/PrimitiveStateTests.cpp
+++ b/src/tests/end2end/PrimitiveStateTests.cpp
@@ -129,7 +129,7 @@
             pass.SetBindGroup(0, bindGroup);
             pass.Draw(1);
         }
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
diff --git a/src/tests/end2end/PrimitiveTopologyTests.cpp b/src/tests/end2end/PrimitiveTopologyTests.cpp
index a09b991..5b559be 100644
--- a/src/tests/end2end/PrimitiveTopologyTests.cpp
+++ b/src/tests/end2end/PrimitiveTopologyTests.cpp
@@ -207,7 +207,7 @@
             pass.SetPipeline(pipeline);
             pass.SetVertexBuffer(0, vertexBuffer);
             pass.Draw(6);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/QueryTests.cpp b/src/tests/end2end/QueryTests.cpp
index ebeb86b..5718d09 100644
--- a/src/tests/end2end/QueryTests.cpp
+++ b/src/tests/end2end/QueryTests.cpp
@@ -164,7 +164,7 @@
         pass.BeginOcclusionQuery(0);
         pass.Draw(3);
         pass.EndOcclusionQuery();
-        pass.EndPass();
+        pass.End();
 
         encoder.ResolveQuerySet(querySet, 0, kQueryCount, destination, 0);
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -193,7 +193,7 @@
         pass.BeginOcclusionQuery(0);
         pass.Draw(3);
         pass.EndOcclusionQuery();
-        pass.EndPass();
+        pass.End();
 
         encoder.ResolveQuerySet(querySet, 0, kQueryCount, destination, 0);
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -281,7 +281,7 @@
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
     pass.BeginOcclusionQuery(0);
     pass.EndOcclusionQuery();
-    pass.EndPass();
+    pass.End();
 
     // Begin occlusion with same query index with draw call
     wgpu::RenderPassEncoder rewritePass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
@@ -289,7 +289,7 @@
     rewritePass.BeginOcclusionQuery(0);
     rewritePass.Draw(3);
     rewritePass.EndOcclusionQuery();
-    rewritePass.EndPass();
+    rewritePass.End();
 
     encoder.ResolveQuerySet(querySet, 0, kQueryCount, destination, 0);
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -346,7 +346,7 @@
     pass.BeginOcclusionQuery(5);
     pass.Draw(3);
     pass.EndOcclusionQuery();
-    pass.EndPass();
+    pass.End();
 
     encoder.ResolveQuerySet(querySet, 0, kQueryCount, destination, 0);
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -403,7 +403,7 @@
     pass.BeginOcclusionQuery(0);
     pass.Draw(3);
     pass.EndOcclusionQuery();
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
 
@@ -601,7 +601,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.WriteTimestamp(querySet, 0);
         pass.WriteTimestamp(querySet, 1);
-        pass.EndPass();
+        pass.End();
         encoder.ResolveQuerySet(querySet, 0, kQueryCount, destination, 0);
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
@@ -623,7 +623,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.WriteTimestamp(querySet, 0);
         pass.WriteTimestamp(querySet, 1);
-        pass.EndPass();
+        pass.End();
         encoder.ResolveQuerySet(querySet, 0, kQueryCount, destination, 0);
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
@@ -645,7 +645,7 @@
         wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
         pass.WriteTimestamp(querySet, 0);
         pass.WriteTimestamp(querySet, 1);
-        pass.EndPass();
+        pass.End();
         encoder.ResolveQuerySet(querySet, 0, kQueryCount, destination, 0);
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
@@ -665,7 +665,7 @@
         wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
         pass.WriteTimestamp(querySet, 0);
         pass.WriteTimestamp(querySet, 1);
-        pass.EndPass();
+        pass.End();
 
         encoder.ResolveQuerySet(querySet, 0, kQueryCount, destination, 0);
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -685,7 +685,7 @@
         pass.WriteTimestamp(querySet, 1);
         pass.WriteTimestamp(querySet, 0);
         pass.WriteTimestamp(querySet, 1);
-        pass.EndPass();
+        pass.End();
 
         encoder.ResolveQuerySet(querySet, 0, kQueryCount, destination, 0);
         wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/ReadOnlyDepthStencilAttachmentTests.cpp b/src/tests/end2end/ReadOnlyDepthStencilAttachmentTests.cpp
index bfe6bf0..5c5df39 100644
--- a/src/tests/end2end/ReadOnlyDepthStencilAttachmentTests.cpp
+++ b/src/tests/end2end/ReadOnlyDepthStencilAttachmentTests.cpp
@@ -156,7 +156,7 @@
             passDescriptorInit.cDepthStencilAttachmentInfo.clearStencil = values->stencilInitValue;
         }
         wgpu::RenderPassEncoder passInit = commandEncoder.BeginRenderPass(&passDescriptorInit);
-        passInit.EndPass();
+        passInit.End();
 
         // Note that we can only select one single aspect for texture view used in bind group.
         wgpu::TextureViewDescriptor viewDesc = {};
@@ -198,7 +198,7 @@
             pass.SetStencilReference(values->stencilRefValue);
         }
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commands = commandEncoder.Finish();
         queue.Submit(1, &commands);
diff --git a/src/tests/end2end/RenderAttachmentTests.cpp b/src/tests/end2end/RenderAttachmentTests.cpp
index 9e4757a..45cdac9 100644
--- a/src/tests/end2end/RenderAttachmentTests.cpp
+++ b/src/tests/end2end/RenderAttachmentTests.cpp
@@ -68,7 +68,7 @@
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
     pass.SetPipeline(pipeline);
     pass.Draw(1);
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
 
diff --git a/src/tests/end2end/RenderBundleTests.cpp b/src/tests/end2end/RenderBundleTests.cpp
index f8ffa20..d0b8e32 100644
--- a/src/tests/end2end/RenderBundleTests.cpp
+++ b/src/tests/end2end/RenderBundleTests.cpp
@@ -108,7 +108,7 @@
 
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
     pass.ExecuteBundles(1, &renderBundle);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -149,7 +149,7 @@
 
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
     pass.ExecuteBundles(2, renderBundles);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -184,7 +184,7 @@
     pass.Draw(3, 1, 3);
 
     pass.ExecuteBundles(1, &renderBundle);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
diff --git a/src/tests/end2end/RenderPassLoadOpTests.cpp b/src/tests/end2end/RenderPassLoadOpTests.cpp
index dc91198..6880128 100644
--- a/src/tests/end2end/RenderPassLoadOpTests.cpp
+++ b/src/tests/end2end/RenderPassLoadOpTests.cpp
@@ -115,7 +115,7 @@
         renderPassDescriptor.cColorAttachments[0].clearColor = clearColor;
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder renderPass = encoder.BeginRenderPass(&renderPassDescriptor);
-        renderPass.EndPass();
+        renderPass.End();
 
         const uint64_t bufferSize = sizeof(T) * expectedPixelValue.size();
         wgpu::BufferDescriptor bufferDescriptor;
@@ -152,14 +152,14 @@
     utils::ComboRenderPassDescriptor renderPassClearZero({renderTargetView});
     auto commandsClearZeroEncoder = device.CreateCommandEncoder();
     auto clearZeroPass = commandsClearZeroEncoder.BeginRenderPass(&renderPassClearZero);
-    clearZeroPass.EndPass();
+    clearZeroPass.End();
     auto commandsClearZero = commandsClearZeroEncoder.Finish();
 
     utils::ComboRenderPassDescriptor renderPassClearGreen({renderTargetView});
     renderPassClearGreen.cColorAttachments[0].clearColor = {0.0f, 1.0f, 0.0f, 1.0f};
     auto commandsClearGreenEncoder = device.CreateCommandEncoder();
     auto clearGreenPass = commandsClearGreenEncoder.BeginRenderPass(&renderPassClearGreen);
-    clearGreenPass.EndPass();
+    clearGreenPass.End();
     auto commandsClearGreen = commandsClearGreenEncoder.Finish();
 
     queue.Submit(1, &commandsClearZero);
@@ -176,7 +176,7 @@
         auto encoder = device.CreateCommandEncoder();
         auto pass = encoder.BeginRenderPass(&renderPassLoad);
         blueQuad.Draw(&pass);
-        pass.EndPass();
+        pass.End();
         commandsLoad = encoder.Finish();
     }
 
diff --git a/src/tests/end2end/RenderPassTests.cpp b/src/tests/end2end/RenderPassTests.cpp
index 4a0e998..88f9031 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);
-        pass.EndPass();
+        pass.End();
     }
 
     {
@@ -101,7 +101,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetPipeline(pipeline);
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -154,7 +154,7 @@
         pass.Draw(3);
     }
 
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
diff --git a/src/tests/end2end/SamplerFilterAnisotropicTests.cpp b/src/tests/end2end/SamplerFilterAnisotropicTests.cpp
index 938ab88..59a9b6d 100644
--- a/src/tests/end2end/SamplerFilterAnisotropicTests.cpp
+++ b/src/tests/end2end/SamplerFilterAnisotropicTests.cpp
@@ -194,7 +194,7 @@
             pass.SetBindGroup(0, bindGroup);
             pass.SetVertexBuffer(0, vertexBuffer);
             pass.Draw(6);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/SamplerTests.cpp b/src/tests/end2end/SamplerTests.cpp
index 01d55e4..63add8e 100644
--- a/src/tests/end2end/SamplerTests.cpp
+++ b/src/tests/end2end/SamplerTests.cpp
@@ -139,7 +139,7 @@
             pass.SetPipeline(mPipeline);
             pass.SetBindGroup(0, bindGroup);
             pass.Draw(6);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/ScissorTests.cpp b/src/tests/end2end/ScissorTests.cpp
index 362acb2..6e0f108 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);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -85,7 +85,7 @@
         pass.SetPipeline(pipeline);
         pass.SetScissorRect(kX, kY, kW, kH);
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -110,7 +110,7 @@
         pass.SetPipeline(pipeline);
         pass.SetScissorRect(1, 1, 0, 0);
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -132,14 +132,14 @@
     {
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetScissorRect(1, 1, 1, 1);
-        pass.EndPass();
+        pass.End();
     }
     // RenderPass 2 draw a full quad, it shouldn't be scissored
     {
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetPipeline(pipeline);
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/ShaderFloat16Tests.cpp b/src/tests/end2end/ShaderFloat16Tests.cpp
index 4f60af7..293cfa8 100644
--- a/src/tests/end2end/ShaderFloat16Tests.cpp
+++ b/src/tests/end2end/ShaderFloat16Tests.cpp
@@ -162,7 +162,7 @@
     pass.SetPipeline(pipeline);
     pass.SetBindGroup(0, bindGroup);
     pass.Dispatch(1);
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
 
diff --git a/src/tests/end2end/ShaderTests.cpp b/src/tests/end2end/ShaderTests.cpp
index 41a6fab..b2a3127 100644
--- a/src/tests/end2end/ShaderTests.cpp
+++ b/src/tests/end2end/ShaderTests.cpp
@@ -92,7 +92,7 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, bindGroup);
         pass.Dispatch(1);
-        pass.EndPass();
+        pass.End();
 
         commands = encoder.Finish();
     }
@@ -457,7 +457,7 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, bindGroup);
         pass.Dispatch(1);
-        pass.EndPass();
+        pass.End();
 
         commands = encoder.Finish();
     }
@@ -513,7 +513,7 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, bindGroup);
         pass.Dispatch(1);
-        pass.EndPass();
+        pass.End();
 
         commands = encoder.Finish();
     }
@@ -565,7 +565,7 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, bindGroup);
         pass.Dispatch(1);
-        pass.EndPass();
+        pass.End();
 
         commands = encoder.Finish();
     }
@@ -661,7 +661,7 @@
         pass.SetBindGroup(0, bindGroup3);
         pass.Dispatch(1);
 
-        pass.EndPass();
+        pass.End();
 
         commands = encoder.Finish();
     }
@@ -725,7 +725,7 @@
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
     pass.SetPipeline(pipeline);
     pass.Draw(3);
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
 
diff --git a/src/tests/end2end/StorageTextureTests.cpp b/src/tests/end2end/StorageTextureTests.cpp
index d944bff..baa8747 100644
--- a/src/tests/end2end/StorageTextureTests.cpp
+++ b/src/tests/end2end/StorageTextureTests.cpp
@@ -480,7 +480,7 @@
         renderPassEncoder.SetBindGroup(0, bindGroup);
         renderPassEncoder.SetPipeline(pipeline);
         renderPassEncoder.Draw(1);
-        renderPassEncoder.EndPass();
+        renderPassEncoder.End();
 
         wgpu::CommandBuffer commandBuffer = encoder.Finish();
         queue.Submit(1, &commandBuffer);
@@ -514,7 +514,7 @@
         computeEncoder.SetBindGroup(0, bindGroup);
         computeEncoder.SetPipeline(pipeline);
         computeEncoder.Dispatch(1);
-        computeEncoder.EndPass();
+        computeEncoder.End();
 
         wgpu::CommandBuffer commandBuffer = encoder.Finish();
         queue.Submit(1, &commandBuffer);
@@ -543,7 +543,7 @@
         renderPassEncoder.SetBindGroup(0, bindGroup);
         renderPassEncoder.SetPipeline(pipeline);
         renderPassEncoder.Draw(1);
-        renderPassEncoder.EndPass();
+        renderPassEncoder.End();
         wgpu::CommandBuffer commandBuffer = encoder.Finish();
         queue.Submit(1, &commandBuffer);
     }
@@ -565,7 +565,7 @@
         computePassEncoder.SetBindGroup(0, bindGroup);
         computePassEncoder.SetPipeline(pipeline);
         computePassEncoder.Dispatch(1);
-        computePassEncoder.EndPass();
+        computePassEncoder.End();
         wgpu::CommandBuffer commandBuffer = encoder.Finish();
         queue.Submit(1, &commandBuffer);
     }
@@ -589,7 +589,7 @@
         computePassEncoder.SetBindGroup(0, bindGroup);
         computePassEncoder.SetPipeline(pipeline);
         computePassEncoder.Dispatch(1);
-        computePassEncoder.EndPass();
+        computePassEncoder.End();
         wgpu::CommandBuffer commandBuffer = encoder.Finish();
         queue.Submit(1, &commandBuffer);
     }
@@ -836,7 +836,7 @@
     pass.SetBindGroup(0, bindGroupB);
     pass.Dispatch(1);
 
-    pass.EndPass();
+    pass.End();
 
     wgpu::BufferDescriptor bufferDescriptor;
     bufferDescriptor.size = sizeof(uint32_t);
diff --git a/src/tests/end2end/SubresourceRenderAttachmentTests.cpp b/src/tests/end2end/SubresourceRenderAttachmentTests.cpp
index 2cf86f4..7f21430 100644
--- a/src/tests/end2end/SubresourceRenderAttachmentTests.cpp
+++ b/src/tests/end2end/SubresourceRenderAttachmentTests.cpp
@@ -71,7 +71,7 @@
 
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder passEncoder = commandEncoder.BeginRenderPass(&renderPass);
-        passEncoder.EndPass();
+        passEncoder.End();
         wgpu::CommandBuffer commands = commandEncoder.Finish();
         queue.Submit(1, &commands);
 
diff --git a/src/tests/end2end/SwapChainTests.cpp b/src/tests/end2end/SwapChainTests.cpp
index 526e5f2..9009590 100644
--- a/src/tests/end2end/SwapChainTests.cpp
+++ b/src/tests/end2end/SwapChainTests.cpp
@@ -74,7 +74,7 @@
 
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&desc);
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
diff --git a/src/tests/end2end/SwapChainValidationTests.cpp b/src/tests/end2end/SwapChainValidationTests.cpp
index 200c1b1..1fdd390 100644
--- a/src/tests/end2end/SwapChainValidationTests.cpp
+++ b/src/tests/end2end/SwapChainValidationTests.cpp
@@ -90,7 +90,7 @@
 
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDesc);
-        pass.EndPass();
+        pass.End();
 
         if (errorAtFinish) {
             ASSERT_DEVICE_ERROR(encoder.Finish());
@@ -264,7 +264,7 @@
     utils::ComboRenderPassDescriptor renderPassDesc({view, secondTexture.CreateView()});
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDesc);
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commands = encoder.Finish();
 
     queue.Submit(1, &commands);
diff --git a/src/tests/end2end/Texture3DTests.cpp b/src/tests/end2end/Texture3DTests.cpp
index 6d64326..3c3a2a7 100644
--- a/src/tests/end2end/Texture3DTests.cpp
+++ b/src/tests/end2end/Texture3DTests.cpp
@@ -102,7 +102,7 @@
     pass.SetPipeline(pipeline);
     pass.SetBindGroup(0, bindGroup);
     pass.Draw(6);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
diff --git a/src/tests/end2end/TextureFormatTests.cpp b/src/tests/end2end/TextureFormatTests.cpp
index e8c9659..1778963 100644
--- a/src/tests/end2end/TextureFormatTests.cpp
+++ b/src/tests/end2end/TextureFormatTests.cpp
@@ -244,7 +244,7 @@
         renderPass.SetPipeline(pipeline);
         renderPass.SetBindGroup(0, bindGroup);
         renderPass.Draw(3);
-        renderPass.EndPass();
+        renderPass.End();
 
         {
             wgpu::ImageCopyBuffer bufferView = utils::CreateImageCopyBuffer(readbackBuffer, 0, 256);
diff --git a/src/tests/end2end/TextureSubresourceTests.cpp b/src/tests/end2end/TextureSubresourceTests.cpp
index b5b3d5f..83fc0d3 100644
--- a/src/tests/end2end/TextureSubresourceTests.cpp
+++ b/src/tests/end2end/TextureSubresourceTests.cpp
@@ -80,7 +80,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDesc);
         pass.SetPipeline(rp);
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
     }
@@ -130,7 +130,7 @@
         pass.SetPipeline(rp);
         pass.SetBindGroup(0, bindGroup);
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
     }
diff --git a/src/tests/end2end/TextureViewTests.cpp b/src/tests/end2end/TextureViewTests.cpp
index 60f830d..cefc78a 100644
--- a/src/tests/end2end/TextureViewTests.cpp
+++ b/src/tests/end2end/TextureViewTests.cpp
@@ -186,7 +186,7 @@
             pass.SetPipeline(pipeline);
             pass.SetBindGroup(0, bindGroup);
             pass.Draw(6);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -518,7 +518,7 @@
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassInfo);
             pass.SetPipeline(oneColorPipeline);
             pass.Draw(6);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -773,7 +773,7 @@
     pass.SetPipeline(pipeline);
     pass.SetBindGroup(0, bg);
     pass.Draw(3);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
diff --git a/src/tests/end2end/TextureZeroInitTests.cpp b/src/tests/end2end/TextureZeroInitTests.cpp
index 29edad3..29b5551 100644
--- a/src/tests/end2end/TextureZeroInitTests.cpp
+++ b/src/tests/end2end/TextureZeroInitTests.cpp
@@ -209,7 +209,7 @@
     {
         // Texture's first usage is in BeginRenderPass's call to RecordRenderPass
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
-        pass.EndPass();
+        pass.End();
     }
     wgpu::CommandBuffer commands = encoder.Finish();
     EXPECT_LAZY_CLEAR(0u, queue.Submit(1, &commands));
@@ -253,7 +253,7 @@
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
     {
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
-        pass.EndPass();
+        pass.End();
     }
     wgpu::CommandBuffer commands = encoder.Finish();
     EXPECT_LAZY_CLEAR(0u, queue.Submit(1, &commands));
@@ -493,7 +493,7 @@
     auto pass = encoder.BeginRenderPass(&renderPassDescriptor);
     pass.SetPipeline(CreatePipelineForTest());
     pass.Draw(6);
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commandBuffer = encoder.Finish();
     // Expect 0 lazy clears, depth stencil texture will clear using loadop
     EXPECT_LAZY_CLEAR(0u, queue.Submit(1, &commandBuffer));
@@ -535,7 +535,7 @@
     auto pass = encoder.BeginRenderPass(&renderPassDescriptor);
     pass.SetPipeline(CreatePipelineForTest());
     pass.Draw(6);
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commandBuffer = encoder.Finish();
     // Expect 0 lazy clears, depth stencil texture will clear using loadop
     EXPECT_LAZY_CLEAR(0u, queue.Submit(1, &commandBuffer));
@@ -574,7 +574,7 @@
     auto pass = encoder.BeginRenderPass(&renderPassDescriptor);
     pass.SetPipeline(CreatePipelineForTest());
     pass.Draw(6);
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commandBuffer = encoder.Finish();
     // Expect 0 lazy clears, depth stencil texture will clear using loadop
     EXPECT_LAZY_CLEAR(0u, queue.Submit(1, &commandBuffer));
@@ -610,7 +610,7 @@
 
             wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
             auto pass = encoder.BeginRenderPass(&renderPassDescriptor);
-            pass.EndPass();
+            pass.End();
             wgpu::CommandBuffer commandBuffer = encoder.Finish();
             EXPECT_LAZY_CLEAR(0u, queue.Submit(1, &commandBuffer));
         }
@@ -643,7 +643,7 @@
             pass.SetPipeline(CreatePipelineForTest());
             pass.SetStencilReference(2);
             pass.Draw(6);
-            pass.EndPass();
+            pass.End();
             wgpu::CommandBuffer commandBuffer = encoder.Finish();
             // No lazy clear because depth will be cleared with a loadOp
             EXPECT_LAZY_CLEAR(0u, queue.Submit(1, &commandBuffer));
@@ -685,7 +685,7 @@
 
             wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
             auto pass = encoder.BeginRenderPass(&renderPassDescriptor);
-            pass.EndPass();
+            pass.End();
             wgpu::CommandBuffer commandBuffer = encoder.Finish();
             EXPECT_LAZY_CLEAR(0u, queue.Submit(1, &commandBuffer));
         }
@@ -717,7 +717,7 @@
             auto pass = encoder.BeginRenderPass(&renderPassDescriptor);
             pass.SetPipeline(CreatePipelineForTest(0.7));
             pass.Draw(6);
-            pass.EndPass();
+            pass.End();
             wgpu::CommandBuffer commandBuffer = encoder.Finish();
             // No lazy clear because stencil will clear using a loadOp.
             EXPECT_LAZY_CLEAR(0u, queue.Submit(1, &commandBuffer));
@@ -770,7 +770,7 @@
 
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         auto pass = encoder.BeginRenderPass(&renderPassDescriptor);
-        pass.EndPass();
+        pass.End();
         wgpu::CommandBuffer commandBuffer = encoder.Finish();
         EXPECT_LAZY_CLEAR(0u, queue.Submit(1, &commandBuffer));
     }
@@ -815,7 +815,7 @@
         auto pass = encoder.BeginRenderPass(&renderPassDescriptor);
         pass.SetPipeline(CreatePipelineForTest(0.3));
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
         wgpu::CommandBuffer commandBuffer = encoder.Finish();
         // No lazy clear because stencil will clear using a loadOp.
         EXPECT_LAZY_CLEAR(0u, queue.Submit(1, &commandBuffer));
@@ -837,7 +837,7 @@
 
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     EXPECT_LAZY_CLEAR(0u, queue.Submit(1, &commands));
@@ -881,7 +881,7 @@
     pass.SetPipeline(renderPipeline);
     pass.SetBindGroup(0, bindGroup);
     pass.Draw(6);
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commands = encoder.Finish();
     // Expect 1 lazy clear for sampled texture
     EXPECT_LAZY_CLEAR(1u, queue.Submit(1, &commands));
@@ -939,7 +939,7 @@
     pass.SetPipeline(renderPipeline);
     pass.SetBindGroup(0, bindGroup);
     pass.Draw(6);
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commands = encoder.Finish();
 
     // Expect the lazy clear for the sampled subresource.
@@ -1004,7 +1004,7 @@
     pass.SetPipeline(computePipeline);
     pass.SetBindGroup(0, bindGroup);
     pass.Dispatch(1);
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commands = encoder.Finish();
     EXPECT_LAZY_CLEAR(1u, queue.Submit(1, &commands));
 
@@ -1167,7 +1167,7 @@
     pass.SetPipeline(renderPipeline);
     pass.SetBindGroup(0, bindGroup);
     pass.Draw(6);
-    pass.EndPass();
+    pass.End();
     commands = encoder.Finish();
     // Expect 0 lazy clears, sample texture is initialized by copyBufferToTexture and render texture
     // is cleared by loadop
@@ -1221,7 +1221,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDescriptor);
         pass.SetPipeline(CreatePipelineForTest());
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
         wgpu::CommandBuffer commandBuffer = encoder.Finish();
         // Expect 0 lazy clears, depth stencil texture will clear using loadop
         EXPECT_LAZY_CLEAR(0u, queue.Submit(1, &commandBuffer));
@@ -1246,7 +1246,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDescriptor);
         pass.SetPipeline(CreatePipelineForTest());
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
         wgpu::CommandBuffer commandBuffer = encoder.Finish();
         // Expect 0 lazy clears, depth stencil texture will clear using loadop
         EXPECT_LAZY_CLEAR(0u, queue.Submit(1, &commandBuffer));
@@ -1314,7 +1314,7 @@
     pass.SetPipeline(renderPipeline);
     pass.SetBindGroup(0, bindGroup);
     pass.Draw(6);
-    pass.EndPass();
+    pass.End();
     commands = encoder.Finish();
     // Expect 1 lazy clears, because not all mips of the sample texture are initialized by
     // copyBufferToTexture.
@@ -1398,7 +1398,7 @@
     pass.SetPipeline(renderPipeline);
     pass.SetBindGroup(0, bindGroup);
     pass.Draw(6);
-    pass.EndPass();
+    pass.End();
     commands = encoder.Finish();
     // Expect 1 lazy clears, because not all array layers of the sample texture are initialized by
     // copyBufferToTexture.
@@ -1814,7 +1814,7 @@
                                      {{0, bcTexture.CreateView(&textureViewDescriptor)}});
             pass.SetBindGroup(0, bindGroup);
             pass.Draw(6);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/VertexFormatTests.cpp b/src/tests/end2end/VertexFormatTests.cpp
index 3901676..faeae42 100644
--- a/src/tests/end2end/VertexFormatTests.cpp
+++ b/src/tests/end2end/VertexFormatTests.cpp
@@ -400,7 +400,7 @@
             pass.SetPipeline(pipeline);
             pass.SetVertexBuffer(0, vertexBuffer);
             pass.Draw(3);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/VertexOnlyRenderPipelineTests.cpp b/src/tests/end2end/VertexOnlyRenderPipelineTests.cpp
index 2e615f3..8fdc8c4 100644
--- a/src/tests/end2end/VertexOnlyRenderPipelineTests.cpp
+++ b/src/tests/end2end/VertexOnlyRenderPipelineTests.cpp
@@ -153,7 +153,7 @@
         }
 
         auto pass = encoder.BeginRenderPass(&clearPass);
-        pass.EndPass();
+        pass.End();
     }
 
     // Render resource
@@ -194,7 +194,7 @@
             pass.SetVertexBuffer(0, vertexBuffer);
             // Draw the whole line
             pass.Draw(2, 1, 4, 0);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -230,7 +230,7 @@
             pass.SetVertexBuffer(0, vertexBuffer);
             // Draw the whole line
             pass.Draw(2, 1, 4, 0);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -271,7 +271,7 @@
         pass.SetVertexBuffer(0, vertexBuffer);
         // Draw the middle line
         pass.Draw(2, 1, 0, 0);
-        pass.EndPass();
+        pass.End();
     }
 
     // Use the depth pipeline to set the depth on the right
@@ -282,7 +282,7 @@
         pass.SetVertexBuffer(0, vertexBuffer);
         // Draw the right line
         pass.Draw(2, 1, 2, 0);
-        pass.EndPass();
+        pass.End();
     }
 
     // Use the complete pipeline to draw with depth and stencil tests
@@ -293,7 +293,7 @@
         pass.SetVertexBuffer(0, vertexBuffer);
         // Draw the full line with depth and stencil tests
         pass.Draw(2, 1, 4, 0);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/VertexStateTests.cpp b/src/tests/end2end/VertexStateTests.cpp
index bdd4681..d81a5ba 100644
--- a/src/tests/end2end/VertexStateTests.cpp
+++ b/src/tests/end2end/VertexStateTests.cpp
@@ -219,7 +219,7 @@
         }
 
         pass.Draw(triangles * 3, instances);
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
@@ -474,7 +474,7 @@
     pass.SetPipeline(instancePipeline);
     pass.Draw(3, 4);
 
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -526,7 +526,7 @@
     pass.SetPipeline(instancePipeline);
     pass.Draw(3, 4);
 
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
@@ -633,7 +633,7 @@
     pass.SetPipeline(pipeline);
     pass.SetVertexBuffer(0, vertexBuffer);
     pass.Draw(1);
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
 
@@ -685,7 +685,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetPipeline(pipeline);
         pass.Draw(1);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/VideoViewsTests.cpp b/src/tests/end2end/VideoViewsTests.cpp
index 4b8f208..c79bc5b 100644
--- a/src/tests/end2end/VideoViewsTests.cpp
+++ b/src/tests/end2end/VideoViewsTests.cpp
@@ -188,7 +188,7 @@
         pass.SetBindGroup(0, utils::MakeBindGroup(device, renderPipeline.GetBindGroupLayout(0),
                                                   {{0, sampler}, {1, textureView}}));
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -247,7 +247,7 @@
         pass.SetBindGroup(0, utils::MakeBindGroup(device, renderPipeline.GetBindGroupLayout(0),
                                                   {{0, sampler}, {1, textureView}}));
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -317,7 +317,7 @@
             0, utils::MakeBindGroup(device, renderPipeline.GetBindGroupLayout(0),
                                     {{0, sampler}, {1, lumaTextureView}, {2, chromaTextureView}}));
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/ViewportOrientationTests.cpp b/src/tests/end2end/ViewportOrientationTests.cpp
index b862549..aee8e5b 100644
--- a/src/tests/end2end/ViewportOrientationTests.cpp
+++ b/src/tests/end2end/ViewportOrientationTests.cpp
@@ -46,7 +46,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
         pass.SetPipeline(pipeline);
         pass.Draw(1);
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/end2end/ViewportTests.cpp b/src/tests/end2end/ViewportTests.cpp
index b6cf1e3..653cc8c 100644
--- a/src/tests/end2end/ViewportTests.cpp
+++ b/src/tests/end2end/ViewportTests.cpp
@@ -71,7 +71,7 @@
             pass.SetViewport(x, y, width, height, 0.0, 1.0);
         }
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
@@ -126,7 +126,7 @@
             pass.SetViewport(0, 0, 3, 1, minDepth, maxDepth);
         }
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
@@ -194,7 +194,7 @@
         pass.SetPipeline(pipeline);
         pass.SetViewport(0.0f, 0.0f, width, height, 0.0f, 1.0f);
         pass.Draw(6);
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
diff --git a/src/tests/perf_tests/DrawCallPerf.cpp b/src/tests/perf_tests/DrawCallPerf.cpp
index 4dfaf25..6b00e80 100644
--- a/src/tests/perf_tests/DrawCallPerf.cpp
+++ b/src/tests/perf_tests/DrawCallPerf.cpp
@@ -598,7 +598,7 @@
             break;
     }
 
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commandBuffer = commands.Finish();
     queue.Submit(1, &commandBuffer);
 }
diff --git a/src/tests/perf_tests/ShaderRobustnessPerf.cpp b/src/tests/perf_tests/ShaderRobustnessPerf.cpp
index 5e1c871..c683496 100644
--- a/src/tests/perf_tests/ShaderRobustnessPerf.cpp
+++ b/src/tests/perf_tests/ShaderRobustnessPerf.cpp
@@ -486,7 +486,7 @@
             pass.Dispatch(ceil(float(mDimBOuter) / float(kTileSize)),
                           ceil(float(mDimAOuter) / float(kTileSize)), 1);
         }
-        pass.EndPass();
+        pass.End();
 
         commands = encoder.Finish();
     }
diff --git a/src/tests/perf_tests/SubresourceTrackingPerf.cpp b/src/tests/perf_tests/SubresourceTrackingPerf.cpp
index b7bc73a..e5ce711 100644
--- a/src/tests/perf_tests/SubresourceTrackingPerf.cpp
+++ b/src/tests/perf_tests/SubresourceTrackingPerf.cpp
@@ -129,7 +129,7 @@
             pass.SetPipeline(mPipeline);
             pass.SetBindGroup(0, bindgroup);
             pass.Draw(3);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/unittests/native/CommandBufferEncodingTests.cpp b/src/tests/unittests/native/CommandBufferEncodingTests.cpp
index b99f19a..7cf38ae 100644
--- a/src/tests/unittests/native/CommandBufferEncodingTests.cpp
+++ b/src/tests/unittests/native/CommandBufferEncodingTests.cpp
@@ -142,7 +142,7 @@
     EXPECT_EQ(ToAPI(stateTracker->GetBindGroup(BindGroupIndex(1))), staticBG.Get());
     EXPECT_EQ(stateTracker->GetDynamicOffsets(BindGroupIndex(1)), emptyDynamicOffsets);
 
-    pass.EndPass();
+    pass.End();
 
     wgpu::CommandBuffer commandBuffer = encoder.Finish();
 
diff --git a/src/tests/unittests/validation/BindGroupValidationTests.cpp b/src/tests/unittests/validation/BindGroupValidationTests.cpp
index e9eb46f..b588094 100644
--- a/src/tests/unittests/validation/BindGroupValidationTests.cpp
+++ b/src/tests/unittests/validation/BindGroupValidationTests.cpp
@@ -1481,7 +1481,7 @@
             renderPassEncoder.SetBindGroup(0, bindGroup, count, offsets);
         }
         renderPassEncoder.Draw(3);
-        renderPassEncoder.EndPass();
+        renderPassEncoder.End();
         if (!expectation) {
             ASSERT_DEVICE_ERROR(commandEncoder.Finish());
         } else {
@@ -1502,7 +1502,7 @@
             computePassEncoder.SetBindGroup(0, bindGroup, count, offsets);
         }
         computePassEncoder.Dispatch(1);
-        computePassEncoder.EndPass();
+        computePassEncoder.End();
         if (!expectation) {
             ASSERT_DEVICE_ERROR(commandEncoder.Finish());
         } else {
@@ -1570,7 +1570,7 @@
         computePassEncoder.Dispatch(1);
         computePassEncoder.SetBindGroup(0, invalidGroup, 0, nullptr);
         computePassEncoder.Dispatch(1);
-        computePassEncoder.EndPass();
+        computePassEncoder.End();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
     {
@@ -1584,7 +1584,7 @@
         renderPassEncoder.Draw(3);
         renderPassEncoder.SetBindGroup(0, invalidGroup, 0, nullptr);
         renderPassEncoder.Draw(3);
-        renderPassEncoder.EndPass();
+        renderPassEncoder.End();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
 }
@@ -1753,7 +1753,7 @@
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         wgpu::ComputePassEncoder computePassEncoder = commandEncoder.BeginComputePass();
         computePassEncoder.SetBindGroup(0, bindGroup, offsets.size(), offsets.data());
-        computePassEncoder.EndPass();
+        computePassEncoder.End();
         commandEncoder.Finish();
     }
     {
@@ -1766,7 +1766,7 @@
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         wgpu::ComputePassEncoder computePassEncoder = commandEncoder.BeginComputePass();
         computePassEncoder.SetBindGroup(0, bindGroup, offsets.size(), offsets.data());
-        computePassEncoder.EndPass();
+        computePassEncoder.End();
         commandEncoder.Finish();
     }
     {
@@ -1777,7 +1777,7 @@
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         wgpu::ComputePassEncoder computePassEncoder = commandEncoder.BeginComputePass();
         computePassEncoder.SetBindGroup(0, bindGroup, offsets.size(), offsets.data());
-        computePassEncoder.EndPass();
+        computePassEncoder.End();
         commandEncoder.Finish();
     }
     {
@@ -1790,7 +1790,7 @@
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         wgpu::ComputePassEncoder computePassEncoder = commandEncoder.BeginComputePass();
         computePassEncoder.SetBindGroup(0, bindGroup, offsets.size(), offsets.data());
-        computePassEncoder.EndPass();
+        computePassEncoder.End();
         commandEncoder.Finish();
     }
     {
@@ -1801,7 +1801,7 @@
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         wgpu::ComputePassEncoder computePassEncoder = commandEncoder.BeginComputePass();
         computePassEncoder.SetBindGroup(0, bindGroup, offsets.size(), offsets.data());
-        computePassEncoder.EndPass();
+        computePassEncoder.End();
         commandEncoder.Finish();
     }
 }
@@ -1948,7 +1948,7 @@
     renderPassEncoder.SetPipeline(pipeline);
     renderPassEncoder.Draw(3);
 
-    renderPassEncoder.EndPass();
+    renderPassEncoder.End();
     commandEncoder.Finish();
 }
 
@@ -2008,7 +2008,7 @@
     // Bind group 1 persists even though it is not "inherited".
     renderPassEncoder.Draw(3);
 
-    renderPassEncoder.EndPass();
+    renderPassEncoder.End();
     commandEncoder.Finish();
 }
 
@@ -2250,7 +2250,7 @@
         }
         rp.SetPipeline(pipeline);
         rp.Draw(3);
-        rp.EndPass();
+        rp.End();
         if (!expectation) {
             ASSERT_DEVICE_ERROR(encoder.Finish());
         } else {
@@ -2269,7 +2269,7 @@
         }
         cp.SetPipeline(pipeline);
         cp.Dispatch(1);
-        cp.EndPass();
+        cp.End();
         if (!expectation) {
             ASSERT_DEVICE_ERROR(encoder.Finish());
         } else {
diff --git a/src/tests/unittests/validation/CommandBufferValidationTests.cpp b/src/tests/unittests/validation/CommandBufferValidationTests.cpp
index dd80765..4e17c1e 100644
--- a/src/tests/unittests/validation/CommandBufferValidationTests.cpp
+++ b/src/tests/unittests/validation/CommandBufferValidationTests.cpp
@@ -37,7 +37,7 @@
     {
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
 
@@ -59,8 +59,7 @@
             encoder.Finish(),
             HasSubstr("Command buffer recording ended before [RenderPassEncoder] was ended."));
         ASSERT_DEVICE_ERROR(
-            pass.EndPass(),
-            HasSubstr("Recording in an error or already ended [RenderPassEncoder]."));
+            pass.End(), HasSubstr("Recording in an error or already ended [RenderPassEncoder]."));
     }
 }
 
@@ -70,7 +69,7 @@
     {
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
 
@@ -92,8 +91,7 @@
             encoder.Finish(),
             HasSubstr("Command buffer recording ended before [ComputePassEncoder] was ended."));
         ASSERT_DEVICE_ERROR(
-            pass.EndPass(),
-            HasSubstr("Recording in an error or already ended [ComputePassEncoder]."));
+            pass.End(), HasSubstr("Recording in an error or already ended [ComputePassEncoder]."));
     }
 }
 
@@ -105,7 +103,7 @@
     {
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
 
@@ -113,8 +111,8 @@
     {
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
-        pass.EndPass();
-        pass.EndPass();
+        pass.End();
+        pass.End();
         ASSERT_DEVICE_ERROR(
             encoder.Finish(),
             HasSubstr("Recording in an error or already ended [RenderPassEncoder]."));
@@ -127,7 +125,7 @@
     {
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
 
@@ -135,8 +133,8 @@
     {
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
-        pass.EndPass();
-        pass.EndPass();
+        pass.End();
+        pass.End();
         ASSERT_DEVICE_ERROR(
             encoder.Finish(),
             HasSubstr("Recording in an error or already ended [ComputePassEncoder]."));
@@ -152,8 +150,8 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder renderPass = encoder.BeginRenderPass(&dummyRenderPass);
         wgpu::ComputePassEncoder computePass = encoder.BeginComputePass();
-        computePass.EndPass();
-        renderPass.EndPass();
+        computePass.End();
+        renderPass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -162,8 +160,8 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::ComputePassEncoder computePass1 = encoder.BeginComputePass();
         wgpu::ComputePassEncoder computePass2 = encoder.BeginComputePass();
-        computePass2.EndPass();
-        computePass1.EndPass();
+        computePass2.End();
+        computePass1.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 }
@@ -177,8 +175,8 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder renderPass1 = encoder.BeginRenderPass(&dummyRenderPass);
         wgpu::RenderPassEncoder renderPass2 = encoder.BeginRenderPass(&dummyRenderPass);
-        renderPass2.EndPass();
-        renderPass1.EndPass();
+        renderPass2.End();
+        renderPass1.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -187,8 +185,8 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::ComputePassEncoder computePass = encoder.BeginComputePass();
         wgpu::RenderPassEncoder renderPass = encoder.BeginRenderPass(&dummyRenderPass);
-        renderPass.EndPass();
-        computePass.EndPass();
+        renderPass.End();
+        computePass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 }
@@ -237,7 +235,7 @@
     {
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
 
@@ -264,7 +262,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         encoder.BeginRenderPass(&dummyRenderPass);
         wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(
             encoder.Finish(),
             HasSubstr("Command buffer recording ended before [RenderPassEncoder] was ended."));
@@ -309,7 +307,7 @@
     {
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
 
@@ -317,7 +315,7 @@
     {
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
-        pass.EndPass();
+        pass.End();
         dawn::native::FromAPI(encoder.Get())->Destroy();
         ASSERT_DEVICE_ERROR(encoder.Finish(), HasSubstr("Destroyed encoder cannot be finished."));
     }
@@ -326,7 +324,7 @@
     {
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
-        pass.EndPass();
+        pass.End();
         dawn::native::FromAPI(encoder.Get())->Destroy();
     }
 
@@ -335,7 +333,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         dawn::native::FromAPI(encoder.Get())->Destroy();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish(), HasSubstr("Destroyed encoder cannot be finished."));
     }
 
@@ -344,14 +342,14 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         dawn::native::FromAPI(encoder.Get())->Destroy();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
-        pass.EndPass();
+        pass.End();
     }
 
     // Destroying a finished encoder should not emit any errors.
     {
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
         dawn::native::FromAPI(encoder.Get())->Destroy();
     }
diff --git a/src/tests/unittests/validation/ComputeIndirectValidationTests.cpp b/src/tests/unittests/validation/ComputeIndirectValidationTests.cpp
index 681c7ce..5faca9c 100644
--- a/src/tests/unittests/validation/ComputeIndirectValidationTests.cpp
+++ b/src/tests/unittests/validation/ComputeIndirectValidationTests.cpp
@@ -55,7 +55,7 @@
         wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
         pass.SetPipeline(pipeline);
         pass.DispatchIndirect(indirectBuffer, indirectOffset);
-        pass.EndPass();
+        pass.End();
 
         ValidateExpectation(encoder, expectation);
     }
diff --git a/src/tests/unittests/validation/ComputeValidationTests.cpp b/src/tests/unittests/validation/ComputeValidationTests.cpp
index a971b4c..435c880 100644
--- a/src/tests/unittests/validation/ComputeValidationTests.cpp
+++ b/src/tests/unittests/validation/ComputeValidationTests.cpp
@@ -43,7 +43,7 @@
         wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
         pass.SetPipeline(pipeline);
         pass.Dispatch(x, y, z);
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
 
diff --git a/src/tests/unittests/validation/DebugMarkerValidationTests.cpp b/src/tests/unittests/validation/DebugMarkerValidationTests.cpp
index 857a774..c78020b 100644
--- a/src/tests/unittests/validation/DebugMarkerValidationTests.cpp
+++ b/src/tests/unittests/validation/DebugMarkerValidationTests.cpp
@@ -31,7 +31,7 @@
         pass.InsertDebugMarker("Marker");
         pass.PopDebugGroup();
         pass.PopDebugGroup();
-        pass.EndPass();
+        pass.End();
     }
 
     encoder.Finish();
@@ -48,7 +48,7 @@
         pass.PushDebugGroup("Event Start");
         pass.InsertDebugMarker("Marker");
         pass.PopDebugGroup();
-        pass.EndPass();
+        pass.End();
     }
 
     ASSERT_DEVICE_ERROR(encoder.Finish());
@@ -65,7 +65,7 @@
         pass.InsertDebugMarker("Marker");
         pass.PopDebugGroup();
         pass.PopDebugGroup();
-        pass.EndPass();
+        pass.End();
     }
 
     ASSERT_DEVICE_ERROR(encoder.Finish());
@@ -127,7 +127,7 @@
         pass.InsertDebugMarker("Marker");
         pass.PopDebugGroup();
         pass.PopDebugGroup();
-        pass.EndPass();
+        pass.End();
     }
 
     encoder.Finish();
@@ -142,7 +142,7 @@
         pass.PushDebugGroup("Event Start");
         pass.InsertDebugMarker("Marker");
         pass.PopDebugGroup();
-        pass.EndPass();
+        pass.End();
     }
 
     ASSERT_DEVICE_ERROR(encoder.Finish());
@@ -157,7 +157,7 @@
         pass.InsertDebugMarker("Marker");
         pass.PopDebugGroup();
         pass.PopDebugGroup();
-        pass.EndPass();
+        pass.End();
     }
 
     ASSERT_DEVICE_ERROR(encoder.Finish());
@@ -203,7 +203,7 @@
         pass.PushDebugGroup("Event Start");
         pass.InsertDebugMarker("Marker");
         pass.PopDebugGroup();
-        pass.EndPass();
+        pass.End();
     }
     encoder.PopDebugGroup();
     encoder.Finish();
@@ -217,7 +217,7 @@
         wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
         pass.InsertDebugMarker("Marker");
         pass.PopDebugGroup();
-        pass.EndPass();
+        pass.End();
     }
     ASSERT_DEVICE_ERROR(encoder.Finish());
 }
@@ -233,7 +233,7 @@
         pass.PushDebugGroup("Event Start");
         pass.InsertDebugMarker("Marker");
         pass.PopDebugGroup();
-        pass.EndPass();
+        pass.End();
     }
     encoder.PopDebugGroup();
     encoder.Finish();
@@ -249,7 +249,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.InsertDebugMarker("Marker");
         pass.PopDebugGroup();
-        pass.EndPass();
+        pass.End();
     }
     ASSERT_DEVICE_ERROR(encoder.Finish());
 }
diff --git a/src/tests/unittests/validation/DrawIndirectValidationTests.cpp b/src/tests/unittests/validation/DrawIndirectValidationTests.cpp
index c7d7517..ee3988e 100644
--- a/src/tests/unittests/validation/DrawIndirectValidationTests.cpp
+++ b/src/tests/unittests/validation/DrawIndirectValidationTests.cpp
@@ -85,7 +85,7 @@
         } else {
             pass.DrawIndirect(indirectBuffer, indirectOffset);
         }
-        pass.EndPass();
+        pass.End();
 
         ValidateExpectation(encoder, expectation);
     }
diff --git a/src/tests/unittests/validation/DrawVertexAndIndexBufferOOBValidationTests.cpp b/src/tests/unittests/validation/DrawVertexAndIndexBufferOOBValidationTests.cpp
index 9576290..cd8a19a 100644
--- a/src/tests/unittests/validation/DrawVertexAndIndexBufferOOBValidationTests.cpp
+++ b/src/tests/unittests/validation/DrawVertexAndIndexBufferOOBValidationTests.cpp
@@ -229,7 +229,7 @@
                                                   vertexBufferParam.offset, vertexBufferParam.size);
             }
             renderPassEncoder.Draw(vertexCount, instanceCount, firstVertex, firstInstance);
-            renderPassEncoder.EndPass();
+            renderPassEncoder.End();
 
             if (isSuccess) {
                 encoder.Finish();
@@ -261,7 +261,7 @@
             }
             renderPassEncoder.DrawIndexed(indexCount, instanceCount, firstIndex, baseVertex,
                                           firstInstance);
-            renderPassEncoder.EndPass();
+            renderPassEncoder.End();
 
             if (isSuccess) {
                 encoder.Finish();
@@ -679,7 +679,7 @@
                 renderPassEncoder.SetVertexBuffer(0, vertexBuffer3);
                 // It should be ok to draw 12 index
                 renderPassEncoder.DrawIndexed(12, 1, 0, 0, 0);
-                renderPassEncoder.EndPass();
+                renderPassEncoder.End();
 
                 // Expect success
                 encoder.Finish();
@@ -698,7 +698,7 @@
                 renderPassEncoder.SetVertexBuffer(0, vertexBuffer3);
                 // It should be index buffer OOB to draw 13 index
                 renderPassEncoder.DrawIndexed(13, 1, 0, 0, 0);
-                renderPassEncoder.EndPass();
+                renderPassEncoder.End();
 
                 // Expect failure
                 ASSERT_DEVICE_ERROR(encoder.Finish());
@@ -717,7 +717,7 @@
                 renderPassEncoder.SetVertexBuffer(0, vertexBuffer3);
                 // It should be ok to draw 11 index
                 renderPassEncoder.DrawIndexed(11, 1, 0, 0, 0);
-                renderPassEncoder.EndPass();
+                renderPassEncoder.End();
 
                 // Expect success
                 encoder.Finish();
@@ -736,7 +736,7 @@
                 renderPassEncoder.SetVertexBuffer(0, vertexBuffer3);
                 // It should be index buffer OOB to draw 12 index
                 renderPassEncoder.DrawIndexed(12, 1, 0, 0, 0);
-                renderPassEncoder.EndPass();
+                renderPassEncoder.End();
 
                 // Expect failure
                 ASSERT_DEVICE_ERROR(encoder.Finish());
diff --git a/src/tests/unittests/validation/DynamicStateCommandValidationTests.cpp b/src/tests/unittests/validation/DynamicStateCommandValidationTests.cpp
index eb2183d..dba6c17 100644
--- a/src/tests/unittests/validation/DynamicStateCommandValidationTests.cpp
+++ b/src/tests/unittests/validation/DynamicStateCommandValidationTests.cpp
@@ -32,7 +32,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&rp.renderPassInfo);
         pass.SetViewport(x, y, width, height, minDepth, maxDepth);
-        pass.EndPass();
+        pass.End();
 
         if (success) {
             encoder.Finish();
@@ -141,7 +141,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&rp.renderPassInfo);
         pass.SetScissorRect(x, y, width, height);
-        pass.EndPass();
+        pass.End();
 
         if (success) {
             encoder.Finish();
@@ -210,7 +210,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         constexpr wgpu::Color kTransparentBlack{0.0f, 0.0f, 0.0f, 0.0f};
         pass.SetBlendConstant(&kTransparentBlack);
-        pass.EndPass();
+        pass.End();
     }
     encoder.Finish();
 }
@@ -224,7 +224,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         constexpr wgpu::Color kAnyColorValue{-1.0f, 42.0f, -0.0f, 0.0f};
         pass.SetBlendConstant(&kAnyColorValue);
-        pass.EndPass();
+        pass.End();
     }
     encoder.Finish();
 }
@@ -239,7 +239,7 @@
     {
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetStencilReference(0);
-        pass.EndPass();
+        pass.End();
     }
     encoder.Finish();
 }
@@ -252,7 +252,7 @@
     {
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetStencilReference(0xFFFFFFFF);
-        pass.EndPass();
+        pass.End();
     }
     encoder.Finish();
 }
diff --git a/src/tests/unittests/validation/ExternalTextureTests.cpp b/src/tests/unittests/validation/ExternalTextureTests.cpp
index b05215f..8e3d423 100644
--- a/src/tests/unittests/validation/ExternalTextureTests.cpp
+++ b/src/tests/unittests/validation/ExternalTextureTests.cpp
@@ -241,7 +241,7 @@
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
             {
                 pass.SetBindGroup(0, bindGroup);
-                pass.EndPass();
+                pass.End();
             }
 
             wgpu::CommandBuffer commands = encoder.Finish();
@@ -256,7 +256,7 @@
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
             {
                 pass.SetBindGroup(0, bindGroup);
-                pass.EndPass();
+                pass.End();
             }
 
             wgpu::CommandBuffer commands = encoder.Finish();
@@ -292,7 +292,7 @@
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
             {
                 pass.SetBindGroup(0, bindGroup);
-                pass.EndPass();
+                pass.End();
             }
 
             wgpu::CommandBuffer commands = encoder.Finish();
@@ -307,7 +307,7 @@
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
             {
                 pass.SetBindGroup(0, bindGroup);
-                pass.EndPass();
+                pass.End();
             }
 
             wgpu::CommandBuffer commands = encoder.Finish();
@@ -338,7 +338,7 @@
             wgpu::ComputePassEncoder pass = encoder.BeginComputePass(&computePass);
             {
                 pass.SetBindGroup(0, bindGroup);
-                pass.EndPass();
+                pass.End();
             }
 
             wgpu::CommandBuffer commands = encoder.Finish();
@@ -353,7 +353,7 @@
             wgpu::ComputePassEncoder pass = encoder.BeginComputePass(&computePass);
             {
                 pass.SetBindGroup(0, bindGroup);
-                pass.EndPass();
+                pass.End();
             }
 
             wgpu::CommandBuffer commands = encoder.Finish();
@@ -384,7 +384,7 @@
             wgpu::ComputePassEncoder pass = encoder.BeginComputePass(&computePass);
             {
                 pass.SetBindGroup(0, bindGroup);
-                pass.EndPass();
+                pass.End();
             }
 
             wgpu::CommandBuffer commands = encoder.Finish();
@@ -398,7 +398,7 @@
             wgpu::ComputePassEncoder pass = encoder.BeginComputePass(&computePass);
             {
                 pass.SetBindGroup(0, bindGroup);
-                pass.EndPass();
+                pass.End();
             }
 
             wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/unittests/validation/IndexBufferValidationTests.cpp b/src/tests/unittests/validation/IndexBufferValidationTests.cpp
index c7602f0..68817b9 100644
--- a/src/tests/unittests/validation/IndexBufferValidationTests.cpp
+++ b/src/tests/unittests/validation/IndexBufferValidationTests.cpp
@@ -54,7 +54,7 @@
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
     pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Undefined);
-    pass.EndPass();
+    pass.End();
     ASSERT_DEVICE_ERROR(encoder.Finish());
 }
 
@@ -69,7 +69,7 @@
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
     pass.SetIndexBuffer(buffer, static_cast<wgpu::IndexFormat>(404));
-    pass.EndPass();
+    pass.End();
     ASSERT_DEVICE_ERROR(encoder.Finish());
 }
 
@@ -93,7 +93,7 @@
         pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 4, wgpu::kWholeSize);
         // Implicit size of zero
         pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 256, wgpu::kWholeSize);
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
 
@@ -102,7 +102,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 4, 256);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -111,7 +111,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 256 + 4, 0);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -238,7 +238,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint32);
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
     // Error case: using the copy buffer is an error.
@@ -246,7 +246,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetIndexBuffer(copyBuffer, wgpu::IndexFormat::Uint32);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -281,7 +281,7 @@
         pass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint32, 4);
         pass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint16, 0);
         pass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint16, 2);
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
 
@@ -290,7 +290,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint32, 2);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
     // Error case: index buffer offset isn't a multiple of 2 for IndexFormat::Uint16
@@ -298,7 +298,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetIndexBuffer(indexBuffer, wgpu::IndexFormat::Uint16, 1);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 }
diff --git a/src/tests/unittests/validation/LabelTests.cpp b/src/tests/unittests/validation/LabelTests.cpp
index 0e8a307..f05df01 100644
--- a/src/tests/unittests/validation/LabelTests.cpp
+++ b/src/tests/unittests/validation/LabelTests.cpp
@@ -190,7 +190,7 @@
         wgpu::ComputePassEncoder encoder = commandEncoder.BeginComputePass(&descriptor);
         std::string readbackLabel = dawn::native::GetObjectLabelForTesting(encoder.Get());
         ASSERT_TRUE(readbackLabel.empty());
-        encoder.EndPass();
+        encoder.End();
     }
 
     // Test setting a label through API
@@ -199,7 +199,7 @@
         encoder.SetLabel(label.c_str());
         std::string readbackLabel = dawn::native::GetObjectLabelForTesting(encoder.Get());
         ASSERT_EQ(label, readbackLabel);
-        encoder.EndPass();
+        encoder.End();
     }
 
     // Test setting a label through the descriptor.
@@ -208,7 +208,7 @@
         wgpu::ComputePassEncoder encoder = commandEncoder.BeginComputePass(&descriptor);
         std::string readbackLabel = dawn::native::GetObjectLabelForTesting(encoder.Get());
         ASSERT_EQ(label, readbackLabel);
-        encoder.EndPass();
+        encoder.End();
     }
 }
 
@@ -368,7 +368,7 @@
         wgpu::RenderPassEncoder encoder = commandEncoder.BeginRenderPass(&descriptor);
         std::string readbackLabel = dawn::native::GetObjectLabelForTesting(encoder.Get());
         ASSERT_TRUE(readbackLabel.empty());
-        encoder.EndPass();
+        encoder.End();
     }
 
     // Test setting a label through API
@@ -377,7 +377,7 @@
         encoder.SetLabel(label.c_str());
         std::string readbackLabel = dawn::native::GetObjectLabelForTesting(encoder.Get());
         ASSERT_EQ(label, readbackLabel);
-        encoder.EndPass();
+        encoder.End();
     }
 
     // Test setting a label through the descriptor.
@@ -386,7 +386,7 @@
         wgpu::RenderPassEncoder encoder = commandEncoder.BeginRenderPass(&descriptor);
         std::string readbackLabel = dawn::native::GetObjectLabelForTesting(encoder.Get());
         ASSERT_EQ(label, readbackLabel);
-        encoder.EndPass();
+        encoder.End();
     }
 }
 
diff --git a/src/tests/unittests/validation/MinimumBufferSizeValidationTests.cpp b/src/tests/unittests/validation/MinimumBufferSizeValidationTests.cpp
index 226e05d..60254db 100644
--- a/src/tests/unittests/validation/MinimumBufferSizeValidationTests.cpp
+++ b/src/tests/unittests/validation/MinimumBufferSizeValidationTests.cpp
@@ -288,7 +288,7 @@
             computePassEncoder.SetBindGroup(i, bindGroups[i]);
         }
         computePassEncoder.Dispatch(1);
-        computePassEncoder.EndPass();
+        computePassEncoder.End();
         if (!expectation) {
             ASSERT_DEVICE_ERROR(commandEncoder.Finish());
         } else {
@@ -309,7 +309,7 @@
             renderPassEncoder.SetBindGroup(i, bindGroups[i]);
         }
         renderPassEncoder.Draw(3);
-        renderPassEncoder.EndPass();
+        renderPassEncoder.End();
         if (!expectation) {
             ASSERT_DEVICE_ERROR(commandEncoder.Finish());
         } else {
diff --git a/src/tests/unittests/validation/PipelineAndPassCompatibilityTests.cpp b/src/tests/unittests/validation/PipelineAndPassCompatibilityTests.cpp
index 14ac2ab..8a582cd 100644
--- a/src/tests/unittests/validation/PipelineAndPassCompatibilityTests.cpp
+++ b/src/tests/unittests/validation/PipelineAndPassCompatibilityTests.cpp
@@ -94,7 +94,7 @@
                         CreatePipeline(kFormat, depthWriteInPipeline, stencilWriteInPipeline);
                     pass.SetPipeline(pipeline);
                     pass.Draw(3);
-                    pass.EndPass();
+                    pass.End();
                     if (depthStencilReadOnlyInPass &&
                         (depthWriteInPipeline || stencilWriteInPipeline)) {
                         ASSERT_DEVICE_ERROR(encoder.Finish());
@@ -163,7 +163,7 @@
                         kFormat, depthStencilReadOnlyInPass, depthStencilReadOnlyInPass);
                     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&passDescriptor);
                     pass.ExecuteBundles(1, &bundle);
-                    pass.EndPass();
+                    pass.End();
                     if (!depthStencilReadOnlyInPass || depthStencilReadOnlyInBundle) {
                         encoder.Finish();
                     } else {
diff --git a/src/tests/unittests/validation/QueryValidationTests.cpp b/src/tests/unittests/validation/QueryValidationTests.cpp
index 4c2b9fa..2e2bd5c 100644
--- a/src/tests/unittests/validation/QueryValidationTests.cpp
+++ b/src/tests/unittests/validation/QueryValidationTests.cpp
@@ -93,7 +93,7 @@
         pass.EndOcclusionQuery();
         pass.BeginOcclusionQuery(1);
         pass.EndOcclusionQuery();
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
 
@@ -104,7 +104,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassWithoutOcclusion);
         pass.BeginOcclusionQuery(0);
         pass.EndOcclusionQuery();
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -116,7 +116,7 @@
         renderPass.occlusionQuerySet = occlusionQuerySetOnOther;
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
 
         // Clear this out so we don't hold a reference. The query set
@@ -131,7 +131,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.BeginOcclusionQuery(0);
         pass.EndOcclusionQuery();
-        pass.EndPass();
+        pass.End();
         wgpu::CommandBuffer commands = encoder.Finish();
         wgpu::Queue queue = device.GetQueue();
         occlusionQuerySet.Destroy();
@@ -151,7 +151,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.BeginOcclusionQuery(2);
         pass.EndOcclusionQuery();
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -161,12 +161,12 @@
         wgpu::RenderPassEncoder pass0 = encoder.BeginRenderPass(&renderPass);
         pass0.BeginOcclusionQuery(0);
         pass0.EndOcclusionQuery();
-        pass0.EndPass();
+        pass0.End();
 
         wgpu::RenderPassEncoder pass1 = encoder.BeginRenderPass(&renderPass);
         pass1.BeginOcclusionQuery(0);
         pass1.EndOcclusionQuery();
-        pass1.EndPass();
+        pass1.End();
         encoder.Finish();
     }
 
@@ -178,7 +178,7 @@
         pass.EndOcclusionQuery();
         pass.BeginOcclusionQuery(0);
         pass.EndOcclusionQuery();
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 }
@@ -196,7 +196,7 @@
         pass.BeginOcclusionQuery(0);
         pass.BeginOcclusionQuery(1);
         pass.EndOcclusionQuery();
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -208,7 +208,7 @@
         pass.BeginOcclusionQuery(1);
         pass.EndOcclusionQuery();
         pass.EndOcclusionQuery();
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -217,7 +217,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.EndOcclusionQuery();
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 }
@@ -317,7 +317,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
         pass.WriteTimestamp(timestampQuerySet, 0);
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
 
@@ -326,7 +326,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
         pass.WriteTimestamp(occlusionQuerySet, 0);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -335,7 +335,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
         pass.WriteTimestamp(timestampQuerySet, 2);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -344,7 +344,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
         pass.WriteTimestamp(timestampQuerySet, 0);
-        pass.EndPass();
+        pass.End();
         wgpu::CommandBuffer commands = encoder.Finish();
 
         wgpu::Queue queue = device.GetQueue();
@@ -365,7 +365,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.WriteTimestamp(timestampQuerySet, 0);
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
 
@@ -374,7 +374,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.WriteTimestamp(occlusionQuerySet, 0);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -383,7 +383,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.WriteTimestamp(timestampQuerySet, 2);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -394,7 +394,7 @@
         encoder.WriteTimestamp(timestampQuerySet, 0);
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.WriteTimestamp(timestampQuerySet, 0);
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
 
@@ -403,10 +403,10 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass0 = encoder.BeginRenderPass(&renderPass);
         pass0.WriteTimestamp(timestampQuerySet, 0);
-        pass0.EndPass();
+        pass0.End();
         wgpu::RenderPassEncoder pass1 = encoder.BeginRenderPass(&renderPass);
         pass1.WriteTimestamp(timestampQuerySet, 0);
-        pass1.EndPass();
+        pass1.End();
         encoder.Finish();
     }
 
@@ -416,7 +416,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.WriteTimestamp(timestampQuerySet, 0);
         pass.WriteTimestamp(timestampQuerySet, 0);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -425,7 +425,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.WriteTimestamp(timestampQuerySet, 0);
-        pass.EndPass();
+        pass.End();
         wgpu::CommandBuffer commands = encoder.Finish();
 
         wgpu::Queue queue = device.GetQueue();
diff --git a/src/tests/unittests/validation/QueueSubmitValidationTests.cpp b/src/tests/unittests/validation/QueueSubmitValidationTests.cpp
index 93940fc..fd5c51d 100644
--- a/src/tests/unittests/validation/QueueSubmitValidationTests.cpp
+++ b/src/tests/unittests/validation/QueueSubmitValidationTests.cpp
@@ -251,7 +251,7 @@
             wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
             wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
             pass.SetBindGroup(1, unusedBG);
-            pass.EndPass();
+            pass.End();
             wgpu::CommandBuffer commands = encoder.Finish();
 
             if (destroy) {
@@ -277,7 +277,7 @@
             pass.SetBindGroup(1, usedBG);
             pass.SetPipeline(pipeline);
             pass.Dispatch(1);
-            pass.EndPass();
+            pass.End();
             wgpu::CommandBuffer commands = encoder.Finish();
 
             if (destroy) {
@@ -321,7 +321,7 @@
             wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
             wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
             pass.SetBindGroup(2, unusedBG);
-            pass.EndPass();
+            pass.End();
             wgpu::CommandBuffer commands = encoder.Finish();
 
             if (destroy) {
@@ -350,7 +350,7 @@
             pass.SetBindGroup(2, usedBG);
             pass.SetPipeline(pipeline);
             pass.Dispatch(1);
-            pass.EndPass();
+            pass.End();
             wgpu::CommandBuffer commands = encoder.Finish();
 
             if (destroy) {
diff --git a/src/tests/unittests/validation/RenderBundleValidationTests.cpp b/src/tests/unittests/validation/RenderBundleValidationTests.cpp
index 70a462d..22c581c 100644
--- a/src/tests/unittests/validation/RenderBundleValidationTests.cpp
+++ b/src/tests/unittests/validation/RenderBundleValidationTests.cpp
@@ -137,7 +137,7 @@
     wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
     wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
     pass.ExecuteBundles(1, &renderBundle);
-    pass.EndPass();
+    pass.End();
     commandEncoder.Finish();
 }
 
@@ -159,7 +159,7 @@
     wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
     wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
     pass.ExecuteBundles(1, &renderBundle);
-    pass.EndPass();
+    pass.End();
     ASSERT_DEVICE_ERROR(commandEncoder.Finish());
 }
 
@@ -170,7 +170,7 @@
     wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
     wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
     pass.ExecuteBundles(0, nullptr);
-    pass.EndPass();
+    pass.End();
     commandEncoder.Finish();
 }
 
@@ -193,7 +193,7 @@
     wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
     wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
     pass.ExecuteBundles(1, &renderBundle);
-    pass.EndPass();
+    pass.End();
     commandEncoder.Finish();
 }
 
@@ -279,7 +279,7 @@
         ASSERT_DEVICE_ERROR(wgpu::RenderBundle renderBundle = renderBundleEncoder.Finish());
 
         pass.ExecuteBundles(1, &renderBundle);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
 
@@ -298,7 +298,7 @@
         ASSERT_DEVICE_ERROR(wgpu::RenderBundle renderBundle = renderBundleEncoder.Finish());
 
         pass.ExecuteBundles(1, &renderBundle);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
 
@@ -317,7 +317,7 @@
         ASSERT_DEVICE_ERROR(wgpu::RenderBundle renderBundle = renderBundleEncoder.Finish());
 
         pass.ExecuteBundles(1, &renderBundle);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
 
@@ -336,7 +336,7 @@
         ASSERT_DEVICE_ERROR(wgpu::RenderBundle renderBundle = renderBundleEncoder.Finish());
 
         pass.ExecuteBundles(1, &renderBundle);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
 }
@@ -363,7 +363,7 @@
         pass.SetBindGroup(1, bg1);
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
 
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
@@ -382,7 +382,7 @@
         pass.SetPipeline(pipeline);
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
 
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
@@ -401,7 +401,7 @@
         pass.ExecuteBundles(1, &renderBundle);
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
 
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
@@ -420,7 +420,7 @@
         pass.SetBindGroup(0, bg0);
         pass.SetBindGroup(1, bg1);
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
 
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
@@ -448,7 +448,7 @@
         pass.SetBindGroup(1, bg1);
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
 
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
@@ -464,7 +464,7 @@
         pass.SetPipeline(pipeline);
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
 
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
@@ -480,7 +480,7 @@
         pass.ExecuteBundles(1, &renderBundle);
         pass.SetVertexBuffer(0, vertexBuffer);
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
 
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
@@ -496,7 +496,7 @@
         pass.SetBindGroup(0, bg0);
         pass.SetBindGroup(1, bg1);
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
 
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
@@ -513,7 +513,7 @@
         pass.ExecuteBundles(0, nullptr);
         pass.Draw(3);
 
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
 }
@@ -547,7 +547,7 @@
     wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
     wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
     pass.ExecuteBundles(2, renderBundles);
-    pass.EndPass();
+    pass.End();
     commandEncoder.Finish();
 }
 
@@ -572,7 +572,7 @@
     pass.ExecuteBundles(1, &renderBundle);
     pass.ExecuteBundles(1, &renderBundle);
     pass.ExecuteBundles(1, &renderBundle);
-    pass.EndPass();
+    pass.End();
     commandEncoder.Finish();
 }
 
@@ -725,7 +725,7 @@
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
         pass.ExecuteBundles(1, &renderBundle0);
         pass.ExecuteBundles(1, &renderBundle1);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
 
@@ -743,7 +743,7 @@
         pass.Draw(3);
 
         pass.ExecuteBundles(1, &renderBundle1);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
 
@@ -762,7 +762,7 @@
         pass.SetVertexBuffer(0, vertexStorageBuffer);
         pass.Draw(3);
 
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
 }
@@ -948,7 +948,7 @@
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
         pass.ExecuteBundles(1, &renderBundle);
-        pass.EndPass();
+        pass.End();
         commandEncoder.Finish();
     }
 
@@ -963,7 +963,7 @@
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
         pass.ExecuteBundles(1, &renderBundle);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
 
@@ -977,7 +977,7 @@
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
         pass.ExecuteBundles(1, &renderBundle);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
 }
@@ -1014,7 +1014,7 @@
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
         pass.ExecuteBundles(1, &renderBundle);
-        pass.EndPass();
+        pass.End();
         commandEncoder.Finish();
     }
 
@@ -1025,7 +1025,7 @@
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
         pass.ExecuteBundles(1, &renderBundle);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
 
@@ -1036,7 +1036,7 @@
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
         pass.ExecuteBundles(1, &renderBundle);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
 }
@@ -1068,7 +1068,7 @@
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
         pass.ExecuteBundles(1, &renderBundle);
-        pass.EndPass();
+        pass.End();
         commandEncoder.Finish();
     }
 
@@ -1079,7 +1079,7 @@
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPass);
         pass.ExecuteBundles(1, &renderBundle);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(commandEncoder.Finish());
     }
 }
diff --git a/src/tests/unittests/validation/RenderPassDescriptorValidationTests.cpp b/src/tests/unittests/validation/RenderPassDescriptorValidationTests.cpp
index 41c8549..917bd0b 100644
--- a/src/tests/unittests/validation/RenderPassDescriptorValidationTests.cpp
+++ b/src/tests/unittests/validation/RenderPassDescriptorValidationTests.cpp
@@ -37,7 +37,7 @@
         wgpu::CommandEncoder TestBeginRenderPass(const wgpu::RenderPassDescriptor* descriptor) {
             wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
             wgpu::RenderPassEncoder renderPassEncoder = commandEncoder.BeginRenderPass(descriptor);
-            renderPassEncoder.EndPass();
+            renderPassEncoder.End();
             return commandEncoder;
         }
     };
diff --git a/src/tests/unittests/validation/RenderPipelineValidationTests.cpp b/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
index 8d16f4d..8fda1bc 100644
--- a/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
+++ b/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
@@ -523,7 +523,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder renderPass = encoder.BeginRenderPass(&renderPassDescriptor);
         renderPass.SetPipeline(nonMultisampledPipeline);
-        renderPass.EndPass();
+        renderPass.End();
 
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
@@ -539,7 +539,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder renderPass = encoder.BeginRenderPass(&renderPassDescriptor);
         renderPass.SetPipeline(nonMultisampledPipelineWithDepthStencilOnly);
-        renderPass.EndPass();
+        renderPass.End();
 
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
@@ -556,7 +556,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder renderPass = encoder.BeginRenderPass(&renderPassDescriptor);
         renderPass.SetPipeline(multisampledPipeline);
-        renderPass.EndPass();
+        renderPass.End();
 
         encoder.Finish();
     }
@@ -572,7 +572,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder renderPass = encoder.BeginRenderPass(&renderPassDescriptor);
         renderPass.SetPipeline(multisampledPipelineWithDepthStencilOnly);
-        renderPass.EndPass();
+        renderPass.End();
 
         encoder.Finish();
     }
@@ -590,7 +590,7 @@
         wgpu::RenderPassEncoder renderPass =
             encoder.BeginRenderPass(&nonMultisampledRenderPassDescriptor);
         renderPass.SetPipeline(multisampledPipeline);
-        renderPass.EndPass();
+        renderPass.End();
 
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
@@ -606,7 +606,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder renderPass = encoder.BeginRenderPass(&renderPassDescriptor);
         renderPass.SetPipeline(multisampledPipelineWithDepthStencilOnly);
-        renderPass.EndPass();
+        renderPass.End();
 
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
@@ -652,7 +652,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder renderPass = encoder.BeginRenderPass(&renderPassDescriptor);
         renderPass.SetPipeline(vertexOnlyPipeline);
-        renderPass.EndPass();
+        renderPass.End();
 
         encoder.Finish();
     }
@@ -664,7 +664,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder renderPass = encoder.BeginRenderPass(&renderPassDescriptor);
         renderPass.SetPipeline(vertexOnlyPipeline);
-        renderPass.EndPass();
+        renderPass.End();
 
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
@@ -677,7 +677,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder renderPass = encoder.BeginRenderPass(&renderPassDescriptor);
         renderPass.SetPipeline(vertexOnlyPipeline);
-        renderPass.EndPass();
+        renderPass.End();
 
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
@@ -690,7 +690,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder renderPass = encoder.BeginRenderPass(&renderPassDescriptor);
         renderPass.SetPipeline(vertexOnlyPipeline);
-        renderPass.EndPass();
+        renderPass.End();
 
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
diff --git a/src/tests/unittests/validation/ResourceUsageTrackingTests.cpp b/src/tests/unittests/validation/ResourceUsageTrackingTests.cpp
index 98308db..69d7d1e 100644
--- a/src/tests/unittests/validation/ResourceUsageTrackingTests.cpp
+++ b/src/tests/unittests/validation/ResourceUsageTrackingTests.cpp
@@ -90,7 +90,7 @@
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
             pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32);
             pass.SetVertexBuffer(0, buffer);
-            pass.EndPass();
+            pass.End();
             encoder.Finish();
         }
 
@@ -110,7 +110,7 @@
             wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
             wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
             pass.SetBindGroup(0, bg);
-            pass.EndPass();
+            pass.End();
             encoder.Finish();
         }
     }
@@ -134,7 +134,7 @@
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
             pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32);
             pass.SetBindGroup(0, bg);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -159,7 +159,7 @@
                 wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
                 wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
                 pass.SetBindGroup(0, bg);
-                pass.EndPass();
+                pass.End();
                 encoder.Finish();
             }
 
@@ -171,7 +171,7 @@
                 pass.SetPipeline(cp);
                 pass.SetBindGroup(0, bg);
                 pass.Dispatch(1);
-                pass.EndPass();
+                pass.End();
                 ASSERT_DEVICE_ERROR(encoder.Finish());
             }
         }
@@ -198,7 +198,7 @@
             DummyRenderPass dummyRenderPass(device);
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
             pass.SetBindGroup(0, bg);
-            pass.EndPass();
+            pass.End();
             encoder.Finish();
         }
 
@@ -212,7 +212,7 @@
             pass.SetPipeline(cp);
             pass.SetBindGroup(0, bg);
             pass.Dispatch(1);
-            pass.EndPass();
+            pass.End();
             encoder.Finish();
         }
     }
@@ -240,12 +240,12 @@
             wgpu::RenderPassEncoder pass0 = encoder.BeginRenderPass(&dummyRenderPass);
             pass0.SetIndexBuffer(buffer0, wgpu::IndexFormat::Uint32);
             pass0.SetBindGroup(0, bg1);
-            pass0.EndPass();
+            pass0.End();
 
             wgpu::RenderPassEncoder pass1 = encoder.BeginRenderPass(&dummyRenderPass);
             pass1.SetIndexBuffer(buffer1, wgpu::IndexFormat::Uint32);
             pass1.SetBindGroup(0, bg0);
-            pass1.EndPass();
+            pass1.End();
 
             encoder.Finish();
         }
@@ -268,11 +268,11 @@
 
             wgpu::ComputePassEncoder pass0 = encoder.BeginComputePass();
             pass0.SetBindGroup(0, bg0);
-            pass0.EndPass();
+            pass0.End();
 
             wgpu::ComputePassEncoder pass1 = encoder.BeginComputePass();
             pass1.SetBindGroup(1, bg1);
-            pass1.EndPass();
+            pass1.End();
 
             encoder.Finish();
         }
@@ -295,12 +295,12 @@
 
             wgpu::ComputePassEncoder pass0 = encoder.BeginComputePass();
             pass0.SetBindGroup(0, bg0);
-            pass0.EndPass();
+            pass0.End();
 
             DummyRenderPass dummyRenderPass(device);
             wgpu::RenderPassEncoder pass1 = encoder.BeginRenderPass(&dummyRenderPass);
             pass1.SetBindGroup(1, bg1);
-            pass1.EndPass();
+            pass1.End();
 
             encoder.Finish();
         }
@@ -335,7 +335,7 @@
             pass.SetBindGroup(0, bg);
             pass.Draw(3);
 
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -369,7 +369,7 @@
             pass.SetBindGroup(0, bg1);
             pass.Dispatch(1);
 
-            pass.EndPass();
+            pass.End();
             encoder.Finish();
         }
     }
@@ -400,7 +400,7 @@
             pass.SetBindGroup(0, writeBG);
             pass.Draw(3);
 
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -430,7 +430,7 @@
             pass.SetBindGroup(1, writeBG);
             pass.Dispatch(1);
 
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
     }
@@ -458,7 +458,7 @@
             DummyRenderPass dummyRenderPass(device);
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
             pass.SetBindGroup(0, bg0);
-            pass.EndPass();
+            pass.End();
             encoder.Finish();
         }
 
@@ -473,7 +473,7 @@
             pass.SetBindGroup(0, bg1);
             pass.SetPipeline(cp);
             pass.Dispatch(1);
-            pass.EndPass();
+            pass.End();
 
             encoder.Finish();
         }
@@ -503,7 +503,7 @@
             pass.SetIndexBuffer(buffer0, wgpu::IndexFormat::Uint32);
             pass.SetIndexBuffer(buffer1, wgpu::IndexFormat::Uint32);
             pass.SetBindGroup(0, bg);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -515,7 +515,7 @@
             pass.SetIndexBuffer(buffer1, wgpu::IndexFormat::Uint32);
             pass.SetIndexBuffer(buffer0, wgpu::IndexFormat::Uint32);
             pass.SetBindGroup(0, bg);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -528,7 +528,7 @@
             pass.SetVertexBuffer(0, buffer0);
             pass.SetVertexBuffer(0, buffer1);
             pass.SetBindGroup(0, bg);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -540,7 +540,7 @@
             pass.SetVertexBuffer(0, buffer1);
             pass.SetVertexBuffer(0, buffer0);
             pass.SetBindGroup(0, bg);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
     }
@@ -573,7 +573,7 @@
                 pass.SetIndexBuffer(buffer0, wgpu::IndexFormat::Uint32);
                 pass.SetBindGroup(0, bg0);
                 pass.SetBindGroup(0, bg1);
-                pass.EndPass();
+                pass.End();
                 ASSERT_DEVICE_ERROR(encoder.Finish());
             }
 
@@ -585,7 +585,7 @@
                 pass.SetIndexBuffer(buffer0, wgpu::IndexFormat::Uint32);
                 pass.SetBindGroup(0, bg1);
                 pass.SetBindGroup(0, bg0);
-                pass.EndPass();
+                pass.End();
                 ASSERT_DEVICE_ERROR(encoder.Finish());
             }
         }
@@ -620,7 +620,7 @@
                 pass.SetBindGroup(1, readBG1);
                 pass.SetPipeline(cp);
                 pass.Dispatch(1);
-                pass.EndPass();
+                pass.End();
                 encoder.Finish();
             }
 
@@ -634,7 +634,7 @@
                 pass.SetBindGroup(1, readBG0);
                 pass.SetPipeline(cp);
                 pass.Dispatch(1);
-                pass.EndPass();
+                pass.End();
                 ASSERT_DEVICE_ERROR(encoder.Finish());
             }
         }
@@ -659,7 +659,7 @@
             DummyRenderPass dummyRenderPass(device);
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
             pass.SetBindGroup(0, bg);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -681,7 +681,7 @@
             pass.SetPipeline(cp);
             pass.SetBindGroup(0, bg);
             pass.Dispatch(1);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
     }
@@ -706,7 +706,7 @@
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
             pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32);
             pass.SetBindGroup(0, bg);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -731,7 +731,7 @@
             pass.SetPipeline(cp);
             pass.SetBindGroup(0, bg);
             pass.Dispatch(1);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
     }
@@ -783,7 +783,7 @@
             pass.SetBindGroup(1, bg1);
             pass.SetPipeline(rp);
             pass.Draw(3);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -810,7 +810,7 @@
             pass.SetBindGroup(1, bg1);
             pass.SetPipeline(cp);
             pass.Dispatch(1);
-            pass.EndPass();
+            pass.End();
             encoder.Finish();
         }
     }
@@ -837,7 +837,7 @@
             wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
             pass.SetBindGroup(0, bg);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -864,7 +864,7 @@
                 wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
                 wgpu::ComputePassEncoder pass = encoder.BeginComputePass();
                 pass.SetBindGroup(0, bg);
-                pass.EndPass();
+                pass.End();
                 encoder.Finish();
             }
 
@@ -876,7 +876,7 @@
                 pass.SetPipeline(cp);
                 pass.SetBindGroup(0, bg);
                 pass.Dispatch(1);
-                pass.EndPass();
+                pass.End();
                 ASSERT_DEVICE_ERROR(encoder.Finish());
             }
         }
@@ -909,7 +909,7 @@
             wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&passDescriptor);
             pass.SetBindGroup(0, bg);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -923,7 +923,7 @@
             wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&passDescriptor);
             pass.SetBindGroup(0, bg);
-            pass.EndPass();
+            pass.End();
             encoder.Finish();
         }
     }
@@ -951,7 +951,7 @@
                 wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
                 wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
                 pass.SetBindGroup(0, bg);
-                pass.EndPass();
+                pass.End();
                 ASSERT_DEVICE_ERROR(encoder.Finish());
             }
 
@@ -965,7 +965,7 @@
                 wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
                 pass.SetBindGroup(0, bg);
                 pass.SetBindGroup(1, bg1);
-                pass.EndPass();
+                pass.End();
                 encoder.Finish();
             }
         }
@@ -993,7 +993,7 @@
             pass.SetPipeline(cp);
             pass.SetBindGroup(0, bg);
             pass.Dispatch(1);
-            pass.EndPass();
+            pass.End();
             encoder.Finish();
         }
     }
@@ -1025,7 +1025,7 @@
 
             wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
-            pass.EndPass();
+            pass.End();
             encoder.Finish();
         }
 
@@ -1035,9 +1035,9 @@
 
             wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
             wgpu::RenderPassEncoder pass0 = encoder.BeginRenderPass(&renderPass);
-            pass0.EndPass();
+            pass0.End();
             wgpu::RenderPassEncoder pass1 = encoder.BeginRenderPass(&renderPass);
-            pass1.EndPass();
+            pass1.End();
             encoder.Finish();
         }
 
@@ -1047,7 +1047,7 @@
 
             wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -1057,7 +1057,7 @@
 
             wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
     }
@@ -1090,11 +1090,11 @@
 
             wgpu::RenderPassEncoder pass0 = encoder.BeginRenderPass(&renderPass0);
             pass0.SetBindGroup(0, bg0);
-            pass0.EndPass();
+            pass0.End();
 
             wgpu::RenderPassEncoder pass1 = encoder.BeginRenderPass(&renderPass1);
             pass1.SetBindGroup(0, bg1);
-            pass1.EndPass();
+            pass1.End();
 
             encoder.Finish();
         }
@@ -1120,11 +1120,11 @@
 
             wgpu::ComputePassEncoder pass0 = encoder.BeginComputePass();
             pass0.SetBindGroup(0, readBG);
-            pass0.EndPass();
+            pass0.End();
 
             wgpu::ComputePassEncoder pass1 = encoder.BeginComputePass();
             pass1.SetBindGroup(0, writeBG);
-            pass1.EndPass();
+            pass1.End();
 
             encoder.Finish();
         }
@@ -1151,12 +1151,12 @@
 
             wgpu::ComputePassEncoder pass0 = encoder.BeginComputePass();
             pass0.SetBindGroup(0, writeBG);
-            pass0.EndPass();
+            pass0.End();
 
             DummyRenderPass dummyRenderPass(device);
             wgpu::RenderPassEncoder pass1 = encoder.BeginRenderPass(&dummyRenderPass);
             pass1.SetBindGroup(0, readBG);
-            pass1.EndPass();
+            pass1.End();
 
             encoder.Finish();
         }
@@ -1198,7 +1198,7 @@
             pass.SetBindGroup(0, writeBG);
             pass.Draw(3);
 
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -1230,7 +1230,7 @@
             pass.SetBindGroup(0, writeBG);
             pass.Dispatch(1);
 
-            pass.EndPass();
+            pass.End();
             encoder.Finish();
         }
     }
@@ -1268,7 +1268,7 @@
             pass.SetBindGroup(1, writeBG);
             pass.Draw(3);
 
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -1296,7 +1296,7 @@
             pass.SetBindGroup(1, writeBG);
             pass.Dispatch(1);
 
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
     }
@@ -1322,7 +1322,7 @@
             encoder.CopyTextureToTexture(&srcView, &dstView, &copySize);
             utils::ComboRenderPassDescriptor renderPass({view1});
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
-            pass.EndPass();
+            pass.End();
             encoder.Finish();
         }
 
@@ -1341,7 +1341,7 @@
             pass.SetBindGroup(0, bg);
             pass.SetPipeline(cp);
             pass.Dispatch(1);
-            pass.EndPass();
+            pass.End();
             encoder.Finish();
         }
     }
@@ -1376,7 +1376,7 @@
                 wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
                 pass.SetBindGroup(0, bg0);
                 pass.SetBindGroup(0, bg1);
-                pass.EndPass();
+                pass.End();
                 ASSERT_DEVICE_ERROR(encoder.Finish());
             }
 
@@ -1387,7 +1387,7 @@
                 wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
                 pass.SetBindGroup(0, bg1);
                 pass.SetBindGroup(0, bg0);
-                pass.EndPass();
+                pass.End();
                 ASSERT_DEVICE_ERROR(encoder.Finish());
             }
         }
@@ -1427,7 +1427,7 @@
                 pass.SetBindGroup(1, readBG1);
                 pass.SetPipeline(cp);
                 pass.Dispatch(1);
-                pass.EndPass();
+                pass.End();
                 encoder.Finish();
             }
 
@@ -1442,7 +1442,7 @@
                 pass.SetBindGroup(1, readBG0);
                 pass.SetPipeline(cp);
                 pass.Dispatch(1);
-                pass.EndPass();
+                pass.End();
                 ASSERT_DEVICE_ERROR(encoder.Finish());
             }
         }
@@ -1471,7 +1471,7 @@
             DummyRenderPass dummyRenderPass(device);
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&dummyRenderPass);
             pass.SetBindGroup(0, bg);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -1494,7 +1494,7 @@
             pass.SetPipeline(cp);
             pass.SetBindGroup(0, bg);
             pass.Dispatch(1);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
     }
@@ -1524,7 +1524,7 @@
             wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
             pass.SetBindGroup(0, bg);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -1548,7 +1548,7 @@
             pass.SetPipeline(cp);
             pass.SetBindGroup(0, bg);
             pass.Dispatch(1);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
     }
@@ -1599,7 +1599,7 @@
             pass.SetBindGroup(1, writeBG);
             pass.SetPipeline(rp);
             pass.Draw(3);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -1615,7 +1615,7 @@
             pass.SetBindGroup(1, writeBG);
             pass.SetPipeline(cp);
             pass.Dispatch(1);
-            pass.EndPass();
+            pass.End();
             encoder.Finish();
         }
     }
@@ -1647,7 +1647,7 @@
             pass.SetPipeline(rp);
             pass.SetBindGroup(0, readBG);
             pass.DrawIndirect(buffer, 0);
-            pass.EndPass();
+            pass.End();
             encoder.Finish();
         }
 
@@ -1659,7 +1659,7 @@
             pass.SetPipeline(rp);
             pass.SetBindGroup(0, writeBG);
             pass.DrawIndirect(buffer, 0);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
 
@@ -1670,7 +1670,7 @@
             pass.SetPipeline(readCp);
             pass.SetBindGroup(0, readBG);
             pass.DispatchIndirect(buffer, 0);
-            pass.EndPass();
+            pass.End();
             encoder.Finish();
         }
 
@@ -1681,7 +1681,7 @@
             pass.SetPipeline(writeCp);
             pass.SetBindGroup(0, writeBG);
             pass.DispatchIndirect(buffer, 0);
-            pass.EndPass();
+            pass.End();
             ASSERT_DEVICE_ERROR(encoder.Finish());
         }
     }
diff --git a/src/tests/unittests/validation/StorageTextureValidationTests.cpp b/src/tests/unittests/validation/StorageTextureValidationTests.cpp
index 5b958dd..5258de0 100644
--- a/src/tests/unittests/validation/StorageTextureValidationTests.cpp
+++ b/src/tests/unittests/validation/StorageTextureValidationTests.cpp
@@ -712,7 +712,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder renderPassEncoder = encoder.BeginRenderPass(&renderPassDescriptor);
         renderPassEncoder.SetBindGroup(0, bindGroupWithStorageTexture);
-        renderPassEncoder.EndPass();
+        renderPassEncoder.End();
         encoder.Finish();
     }
 }
@@ -745,7 +745,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder renderPassEncoder = encoder.BeginRenderPass(&renderPassDescriptor);
         renderPassEncoder.SetBindGroup(0, bindGroup);
-        renderPassEncoder.EndPass();
+        renderPassEncoder.End();
         switch (storageTextureType) {
             case wgpu::StorageTextureAccess::WriteOnly:
                 ASSERT_DEVICE_ERROR(encoder.Finish());
@@ -777,7 +777,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder renderPassEncoder = encoder.BeginRenderPass(&renderPassDescriptor);
         renderPassEncoder.SetBindGroup(0, bindGroupWithStorageTexture);
-        renderPassEncoder.EndPass();
+        renderPassEncoder.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 }
@@ -804,7 +804,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::ComputePassEncoder computePassEncoder = encoder.BeginComputePass();
         computePassEncoder.SetBindGroup(0, bindGroup);
-        computePassEncoder.EndPass();
+        computePassEncoder.End();
         encoder.Finish();
     }
 }
diff --git a/src/tests/unittests/validation/TextureSubresourceTests.cpp b/src/tests/unittests/validation/TextureSubresourceTests.cpp
index ef4c90c..f6e38da 100644
--- a/src/tests/unittests/validation/TextureSubresourceTests.cpp
+++ b/src/tests/unittests/validation/TextureSubresourceTests.cpp
@@ -63,7 +63,7 @@
                 wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
                 wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDesc);
                 pass.SetBindGroup(0, bindGroup);
-                pass.EndPass();
+                pass.End();
                 encoder.Finish();
             }
 
@@ -76,7 +76,7 @@
                 wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
                 wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDesc);
                 pass.SetBindGroup(0, bindGroup);
-                pass.EndPass();
+                pass.End();
                 ASSERT_DEVICE_ERROR(encoder.Finish());
             }
 
@@ -93,11 +93,11 @@
                 wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
                 wgpu::RenderPassEncoder pass1 = encoder.BeginRenderPass(&renderPassDesc);
                 pass1.SetBindGroup(0, bindGroup1);
-                pass1.EndPass();
+                pass1.End();
 
                 wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDesc);
                 pass.SetBindGroup(0, bindGroup);
-                pass.EndPass();
+                pass.End();
 
                 encoder.Finish();
             }
diff --git a/src/tests/unittests/validation/TextureValidationTests.cpp b/src/tests/unittests/validation/TextureValidationTests.cpp
index 98625f3..138336d 100644
--- a/src/tests/unittests/validation/TextureValidationTests.cpp
+++ b/src/tests/unittests/validation/TextureValidationTests.cpp
@@ -556,7 +556,7 @@
         wgpu::CommandEncoder encoder_post_destroy = device.CreateCommandEncoder();
         {
             wgpu::RenderPassEncoder pass = encoder_post_destroy.BeginRenderPass(&renderPass);
-            pass.EndPass();
+            pass.End();
         }
         wgpu::CommandBuffer commands = encoder_post_destroy.Finish();
 
@@ -576,7 +576,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         {
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
-            pass.EndPass();
+            pass.End();
         }
         wgpu::CommandBuffer commands = encoder.Finish();
 
diff --git a/src/tests/unittests/validation/VertexBufferValidationTests.cpp b/src/tests/unittests/validation/VertexBufferValidationTests.cpp
index 4c3492a..cccc274 100644
--- a/src/tests/unittests/validation/VertexBufferValidationTests.cpp
+++ b/src/tests/unittests/validation/VertexBufferValidationTests.cpp
@@ -104,7 +104,7 @@
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetPipeline(pipeline1);
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
     }
     ASSERT_DEVICE_ERROR(encoder.Finish());
 
@@ -118,7 +118,7 @@
         pass.Draw(3);
         pass.SetPipeline(pipeline1);
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
     }
     encoder.Finish();
 }
@@ -143,14 +143,14 @@
         pass.SetVertexBuffer(0, vertexBuffer1);
         pass.SetVertexBuffer(1, vertexBuffer2);
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
     }
     {
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetPipeline(pipeline1);
         pass.SetVertexBuffer(0, vertexBuffer1);
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
     }
     encoder.Finish();
 
@@ -162,13 +162,13 @@
         pass.SetVertexBuffer(0, vertexBuffer1);
         pass.SetVertexBuffer(1, vertexBuffer2);
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
     }
     {
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetPipeline(pipeline1);
         pass.Draw(3);
-        pass.EndPass();
+        pass.End();
     }
     ASSERT_DEVICE_ERROR(encoder.Finish());
 }
@@ -184,7 +184,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetVertexBuffer(kMaxVertexBuffers - 1, buffer, 0);
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
 
@@ -193,7 +193,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetVertexBuffer(kMaxVertexBuffers, buffer, 0);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -233,7 +233,7 @@
         pass.SetVertexBuffer(0, buffer, 4, wgpu::kWholeSize);
         // Implicit size of zero
         pass.SetVertexBuffer(0, buffer, 256, wgpu::kWholeSize);
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
 
@@ -242,7 +242,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetVertexBuffer(0, buffer, 4, 256);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -251,7 +251,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetVertexBuffer(0, buffer, 256 + 4, 0);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -300,7 +300,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetVertexBuffer(0, vertexBuffer);
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
     // Error case: using the index buffer is an error.
@@ -308,7 +308,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetVertexBuffer(0, indexBuffer);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 
@@ -341,7 +341,7 @@
         pass.SetVertexBuffer(0, vertexBuffer, 0);
         pass.SetVertexBuffer(0, vertexBuffer, 4);
         pass.SetVertexBuffer(0, vertexBuffer, 12);
-        pass.EndPass();
+        pass.End();
         encoder.Finish();
     }
 
@@ -350,7 +350,7 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass);
         pass.SetVertexBuffer(0, vertexBuffer, 2);
-        pass.EndPass();
+        pass.End();
         ASSERT_DEVICE_ERROR(encoder.Finish());
     }
 }
diff --git a/src/tests/white_box/D3D12DescriptorHeapTests.cpp b/src/tests/white_box/D3D12DescriptorHeapTests.cpp
index 3825823..7f81819 100644
--- a/src/tests/white_box/D3D12DescriptorHeapTests.cpp
+++ b/src/tests/white_box/D3D12DescriptorHeapTests.cpp
@@ -159,7 +159,7 @@
             pass.Draw(3);
         }
 
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -211,7 +211,7 @@
             pass.Draw(3);
         }
 
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -493,7 +493,7 @@
             pass.Draw(3);
         }
 
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -539,7 +539,7 @@
             pass.SetPipeline(renderPipeline);
             pass.SetBindGroup(0, bindGroup);
             pass.Draw(3);
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -581,7 +581,7 @@
                 pass.Draw(3);
             }
 
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -642,7 +642,7 @@
         pass.SetBindGroup(0, bindGroups[0]);
         pass.Draw(3);
 
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
@@ -702,7 +702,7 @@
                 pass.Draw(3);
             }
 
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -723,7 +723,7 @@
             pass.SetBindGroup(0, bindGroups[0]);
             pass.Draw(3);
 
-            pass.EndPass();
+            pass.End();
         }
 
         wgpu::CommandBuffer commands = encoder.Finish();
@@ -767,7 +767,7 @@
 
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         auto pass = encoder.BeginRenderPass(&renderPassDesc);
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commandBuffer = encoder.Finish();
         queue.Submit(1, &commandBuffer);
@@ -877,7 +877,7 @@
             pass.Draw(3);
         }
 
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
diff --git a/src/tests/white_box/D3D12ResidencyTests.cpp b/src/tests/white_box/D3D12ResidencyTests.cpp
index c944aaf..2959953 100644
--- a/src/tests/white_box/D3D12ResidencyTests.cpp
+++ b/src/tests/white_box/D3D12ResidencyTests.cpp
@@ -394,7 +394,7 @@
             pass.Draw(3);
         }
 
-        pass.EndPass();
+        pass.End();
     }
 
     wgpu::CommandBuffer commands = encoder.Finish();
diff --git a/src/tests/white_box/EGLImageWrappingTests.cpp b/src/tests/white_box/EGLImageWrappingTests.cpp
index 46226ab..1d541d0 100644
--- a/src/tests/white_box/EGLImageWrappingTests.cpp
+++ b/src/tests/white_box/EGLImageWrappingTests.cpp
@@ -329,7 +329,7 @@
         // Execute commands to clear the eglImage
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDescriptor);
-        pass.EndPass();
+        pass.End();
 
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
diff --git a/src/tests/white_box/InternalStorageBufferBindingTests.cpp b/src/tests/white_box/InternalStorageBufferBindingTests.cpp
index dbad35e..a4f4a79 100644
--- a/src/tests/white_box/InternalStorageBufferBindingTests.cpp
+++ b/src/tests/white_box/InternalStorageBufferBindingTests.cpp
@@ -99,7 +99,7 @@
     for (uint32_t i = 0; i < kIterations; ++i) {
         pass.Dispatch(kNumValues);
     }
-    pass.EndPass();
+    pass.End();
     wgpu::CommandBuffer commands = encoder.Finish();
     queue.Submit(1, &commands);
 
diff --git a/src/tests/white_box/VulkanImageWrappingTests.cpp b/src/tests/white_box/VulkanImageWrappingTests.cpp
index d46531e..3b785f8 100644
--- a/src/tests/white_box/VulkanImageWrappingTests.cpp
+++ b/src/tests/white_box/VulkanImageWrappingTests.cpp
@@ -278,7 +278,7 @@
 
             wgpu::CommandEncoder encoder = dawnDevice.CreateCommandEncoder();
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPassDescriptor);
-            pass.EndPass();
+            pass.End();
 
             wgpu::CommandBuffer commands = encoder.Finish();
 
