Removed deprecated CreateRenderPipeline path

Renames all the RenderPipeline*2 stuff to simple RenderPipeline* but
keeps *2 definitionas around as typedefs and wrappers so that users can
migrate away from it.

Bug: dawn:22
Change-Id: If301d81a829bba0646c3a61068f2279932b191e0
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/51764
Commit-Queue: Brandon Jones <bajones@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
diff --git a/src/dawn_native/AttachmentState.cpp b/src/dawn_native/AttachmentState.cpp
index 7dce102..5878b44 100644
--- a/src/dawn_native/AttachmentState.cpp
+++ b/src/dawn_native/AttachmentState.cpp
@@ -34,19 +34,6 @@
     }
 
     AttachmentStateBlueprint::AttachmentStateBlueprint(const RenderPipelineDescriptor* descriptor)
-        : mSampleCount(descriptor->sampleCount) {
-        ASSERT(descriptor->colorStateCount <= kMaxColorAttachments);
-        for (ColorAttachmentIndex i(uint8_t(0));
-             i < ColorAttachmentIndex(static_cast<uint8_t>(descriptor->colorStateCount)); ++i) {
-            mColorAttachmentsSet.set(i);
-            mColorFormats[i] = descriptor->colorStates[static_cast<uint8_t>(i)].format;
-        }
-        if (descriptor->depthStencilState != nullptr) {
-            mDepthStencilFormat = descriptor->depthStencilState->format;
-        }
-    }
-
-    AttachmentStateBlueprint::AttachmentStateBlueprint(const RenderPipelineDescriptor2* descriptor)
         : mSampleCount(descriptor->multisample.count) {
         ASSERT(descriptor->fragment->targetCount <= kMaxColorAttachments);
         for (ColorAttachmentIndex i(uint8_t(0));
diff --git a/src/dawn_native/AttachmentState.h b/src/dawn_native/AttachmentState.h
index 891b158..ce8b8aa 100644
--- a/src/dawn_native/AttachmentState.h
+++ b/src/dawn_native/AttachmentState.h
@@ -38,7 +38,6 @@
         // Note: Descriptors must be validated before the AttachmentState is constructed.
         explicit AttachmentStateBlueprint(const RenderBundleEncoderDescriptor* descriptor);
         explicit AttachmentStateBlueprint(const RenderPipelineDescriptor* descriptor);
-        explicit AttachmentStateBlueprint(const RenderPipelineDescriptor2* descriptor);
         explicit AttachmentStateBlueprint(const RenderPassDescriptor* descriptor);
 
         AttachmentStateBlueprint(const AttachmentStateBlueprint& rhs);
diff --git a/src/dawn_native/CopyTextureForBrowserHelper.cpp b/src/dawn_native/CopyTextureForBrowserHelper.cpp
index 4ed5b7d..4a0e829 100644
--- a/src/dawn_native/CopyTextureForBrowserHelper.cpp
+++ b/src/dawn_native/CopyTextureForBrowserHelper.cpp
@@ -221,7 +221,7 @@
                 target.format = dstFormat;
 
                 // Create RenderPipeline.
-                RenderPipelineDescriptor2 renderPipelineDesc = {};
+                RenderPipelineDescriptor renderPipelineDesc = {};
 
                 // Generate the layout based on shader modules.
                 renderPipelineDesc.layout = nullptr;
diff --git a/src/dawn_native/Device.cpp b/src/dawn_native/Device.cpp
index 9363a15..f87c392 100644
--- a/src/dawn_native/Device.cpp
+++ b/src/dawn_native/Device.cpp
@@ -551,7 +551,7 @@
     }
 
     ResultOrError<Ref<RenderPipelineBase>> DeviceBase::GetOrCreateRenderPipeline(
-        const RenderPipelineDescriptor2* descriptor) {
+        const RenderPipelineDescriptor* descriptor) {
         RenderPipelineBase blueprint(this, descriptor);
 
         const size_t blueprintHash = blueprint.ComputeContentHash();
@@ -669,12 +669,6 @@
     }
 
     Ref<AttachmentState> DeviceBase::GetOrCreateAttachmentState(
-        const RenderPipelineDescriptor2* descriptor) {
-        AttachmentStateBlueprint blueprint(descriptor);
-        return GetOrCreateAttachmentState(&blueprint);
-    }
-
-    Ref<AttachmentState> DeviceBase::GetOrCreateAttachmentState(
         const RenderPassDescriptor* descriptor) {
         AttachmentStateBlueprint blueprint(descriptor);
         return GetOrCreateAttachmentState(&blueprint);
@@ -759,7 +753,7 @@
         }
         return result.Detach();
     }
-    void DeviceBase::APICreateRenderPipelineAsync(const RenderPipelineDescriptor2* descriptor,
+    void DeviceBase::APICreateRenderPipelineAsync(const RenderPipelineDescriptor* descriptor,
                                                   WGPUCreateRenderPipelineAsyncCallback callback,
                                                   void* userdata) {
         ResultOrError<Ref<RenderPipelineBase>> maybeResult =
@@ -787,112 +781,19 @@
     }
     RenderPipelineBase* DeviceBase::APICreateRenderPipeline(
         const RenderPipelineDescriptor* descriptor) {
-        // TODO: Enable this warning once the tests have been converted to either use the new
-        // format or expect the deprecation warning.
-        EmitDeprecationWarning(
-            "The format of RenderPipelineDescriptor has changed, and will soon require the "
-            "new structure. Please begin using CreateRenderPipeline2() instead.");
-
-        // Convert descriptor to the new format it before proceeding.
-        RenderPipelineDescriptor2 normalizedDescriptor;
-
-        normalizedDescriptor.label = descriptor->label;
-        normalizedDescriptor.layout = descriptor->layout;
-
-        normalizedDescriptor.vertex.module = descriptor->vertexStage.module;
-        normalizedDescriptor.vertex.entryPoint = descriptor->vertexStage.entryPoint;
-
-        normalizedDescriptor.primitive.topology = descriptor->primitiveTopology;
-
-        normalizedDescriptor.multisample.count = descriptor->sampleCount;
-        normalizedDescriptor.multisample.mask = descriptor->sampleMask;
-        normalizedDescriptor.multisample.alphaToCoverageEnabled =
-            descriptor->alphaToCoverageEnabled;
-
-        if (descriptor->vertexState) {
-            const VertexStateDescriptor* vertexState = descriptor->vertexState;
-            normalizedDescriptor.primitive.stripIndexFormat = vertexState->indexFormat;
-            normalizedDescriptor.vertex.bufferCount = vertexState->vertexBufferCount;
-            normalizedDescriptor.vertex.buffers = vertexState->vertexBuffers;
-        } else {
-            normalizedDescriptor.vertex.bufferCount = 0;
-            normalizedDescriptor.vertex.buffers = nullptr;
-        }
-
-        DepthStencilState depthStencil;
-        if (descriptor->depthStencilState) {
-            const DepthStencilStateDescriptor* depthStencilState = descriptor->depthStencilState;
-            normalizedDescriptor.depthStencil = &depthStencil;
-
-            depthStencil.format = depthStencilState->format;
-            depthStencil.depthWriteEnabled = depthStencilState->depthWriteEnabled;
-            depthStencil.depthCompare = depthStencilState->depthCompare;
-            depthStencil.stencilFront = depthStencilState->stencilFront;
-            depthStencil.stencilBack = depthStencilState->stencilBack;
-            depthStencil.stencilReadMask = depthStencilState->stencilReadMask;
-            depthStencil.stencilWriteMask = depthStencilState->stencilWriteMask;
-        }
-
-        if (descriptor->rasterizationState) {
-            const RasterizationStateDescriptor* rasterizationState = descriptor->rasterizationState;
-            normalizedDescriptor.primitive.frontFace = rasterizationState->frontFace;
-            normalizedDescriptor.primitive.cullMode = rasterizationState->cullMode;
-            depthStencil.depthBias = rasterizationState->depthBias;
-            depthStencil.depthBiasSlopeScale = rasterizationState->depthBiasSlopeScale;
-            depthStencil.depthBiasClamp = rasterizationState->depthBiasClamp;
-        }
-
-        FragmentState fragment;
-        std::vector<ColorTargetState> targets;
-        std::vector<BlendState> blendStates;
-        if (descriptor->fragmentStage) {
-            const ProgrammableStageDescriptor* fragmentStage = descriptor->fragmentStage;
-            normalizedDescriptor.fragment = &fragment;
-
-            fragment.module = fragmentStage->module;
-            fragment.entryPoint = fragmentStage->entryPoint;
-
-            targets.resize(descriptor->colorStateCount);
-            blendStates.resize(descriptor->colorStateCount);
-
-            for (uint32_t i = 0; i < descriptor->colorStateCount; ++i) {
-                const ColorStateDescriptor& colorState = descriptor->colorStates[i];
-                ColorTargetState& target = targets[i];
-                target.format = colorState.format;
-                target.writeMask = colorState.writeMask;
-
-                if (BlendEnabled(&colorState)) {
-                    BlendState* blend = &blendStates[i];
-                    target.blend = blend;
-
-                    blend->color.srcFactor = colorState.colorBlend.srcFactor;
-                    blend->color.dstFactor = colorState.colorBlend.dstFactor;
-                    blend->color.operation = colorState.colorBlend.operation;
-
-                    blend->alpha.srcFactor = colorState.alphaBlend.srcFactor;
-                    blend->alpha.dstFactor = colorState.alphaBlend.dstFactor;
-                    blend->alpha.operation = colorState.alphaBlend.operation;
-                }
-            }
-
-            fragment.targetCount = descriptor->colorStateCount;
-            fragment.targets = targets.data();
-        }
-
-        Ref<RenderPipelineBase> result;
-        if (ConsumedError(CreateRenderPipeline(&normalizedDescriptor), &result)) {
-            return RenderPipelineBase::MakeError(this);
-        }
-        return result.Detach();
-    }
-    RenderPipelineBase* DeviceBase::APICreateRenderPipeline2(
-        const RenderPipelineDescriptor2* descriptor) {
         Ref<RenderPipelineBase> result;
         if (ConsumedError(CreateRenderPipeline(descriptor), &result)) {
             return RenderPipelineBase::MakeError(this);
         }
         return result.Detach();
     }
+    RenderPipelineBase* DeviceBase::APICreateRenderPipeline2(
+        const RenderPipelineDescriptor* descriptor) {
+        EmitDeprecationWarning(
+            "CreateRenderPipeline2() has been deprecated. Please begin using "
+            "CreateRenderPipeline() instead.");
+        return APICreateRenderPipeline(descriptor);
+    }
     ShaderModuleBase* DeviceBase::APICreateShaderModule(const ShaderModuleDescriptor* descriptor) {
         Ref<ShaderModuleBase> result;
         ShaderModuleParseResult parseResult = {};
@@ -1212,14 +1113,14 @@
     }
 
     ResultOrError<Ref<RenderPipelineBase>> DeviceBase::CreateRenderPipeline(
-        const RenderPipelineDescriptor2* descriptor) {
+        const RenderPipelineDescriptor* descriptor) {
         DAWN_TRY(ValidateIsAlive());
         if (IsValidationEnabled()) {
             DAWN_TRY(ValidateRenderPipelineDescriptor(this, descriptor));
         }
 
         if (descriptor->layout == nullptr) {
-            RenderPipelineDescriptor2 descriptorWithDefaultLayout = *descriptor;
+            RenderPipelineDescriptor descriptorWithDefaultLayout = *descriptor;
 
             // Ref will keep the pipeline layout alive until the end of the function where
             // the pipeline will take another reference.
diff --git a/src/dawn_native/Device.h b/src/dawn_native/Device.h
index 600c2c1..7d96481 100644
--- a/src/dawn_native/Device.h
+++ b/src/dawn_native/Device.h
@@ -120,7 +120,7 @@
         void UncachePipelineLayout(PipelineLayoutBase* obj);
 
         ResultOrError<Ref<RenderPipelineBase>> GetOrCreateRenderPipeline(
-            const RenderPipelineDescriptor2* descriptor);
+            const RenderPipelineDescriptor* descriptor);
         void UncacheRenderPipeline(RenderPipelineBase* obj);
 
         ResultOrError<Ref<SamplerBase>> GetOrCreateSampler(const SamplerDescriptor* descriptor);
@@ -135,8 +135,6 @@
         Ref<AttachmentState> GetOrCreateAttachmentState(
             const RenderBundleEncoderDescriptor* descriptor);
         Ref<AttachmentState> GetOrCreateAttachmentState(const RenderPipelineDescriptor* descriptor);
-        Ref<AttachmentState> GetOrCreateAttachmentState(
-            const RenderPipelineDescriptor2* descriptor);
         Ref<AttachmentState> GetOrCreateAttachmentState(const RenderPassDescriptor* descriptor);
         void UncacheAttachmentState(AttachmentState* obj);
 
@@ -159,7 +157,7 @@
         ResultOrError<Ref<RenderBundleEncoder>> CreateRenderBundleEncoder(
             const RenderBundleEncoderDescriptor* descriptor);
         ResultOrError<Ref<RenderPipelineBase>> CreateRenderPipeline(
-            const RenderPipelineDescriptor2* descriptor);
+            const RenderPipelineDescriptor* descriptor);
         ResultOrError<Ref<SamplerBase>> CreateSampler(const SamplerDescriptor* descriptor);
         ResultOrError<Ref<ShaderModuleBase>> CreateShaderModule(
             const ShaderModuleDescriptor* descriptor,
@@ -182,13 +180,13 @@
         void APICreateComputePipelineAsync(const ComputePipelineDescriptor* descriptor,
                                            WGPUCreateComputePipelineAsyncCallback callback,
                                            void* userdata);
-        void APICreateRenderPipelineAsync(const RenderPipelineDescriptor2* descriptor,
+        void APICreateRenderPipelineAsync(const RenderPipelineDescriptor* descriptor,
                                           WGPUCreateRenderPipelineAsyncCallback callback,
                                           void* userdata);
         RenderBundleEncoder* APICreateRenderBundleEncoder(
             const RenderBundleEncoderDescriptor* descriptor);
         RenderPipelineBase* APICreateRenderPipeline(const RenderPipelineDescriptor* descriptor);
-        RenderPipelineBase* APICreateRenderPipeline2(const RenderPipelineDescriptor2* descriptor);
+        RenderPipelineBase* APICreateRenderPipeline2(const RenderPipelineDescriptor* descriptor);
         ExternalTextureBase* APICreateExternalTexture(const ExternalTextureDescriptor* descriptor);
         SamplerBase* APICreateSampler(const SamplerDescriptor* descriptor);
         ShaderModuleBase* APICreateShaderModule(const ShaderModuleDescriptor* descriptor);
@@ -304,7 +302,7 @@
         virtual ResultOrError<Ref<QuerySetBase>> CreateQuerySetImpl(
             const QuerySetDescriptor* descriptor) = 0;
         virtual ResultOrError<Ref<RenderPipelineBase>> CreateRenderPipelineImpl(
-            const RenderPipelineDescriptor2* descriptor) = 0;
+            const RenderPipelineDescriptor* descriptor) = 0;
         virtual ResultOrError<Ref<SamplerBase>> CreateSamplerImpl(
             const SamplerDescriptor* descriptor) = 0;
         virtual ResultOrError<Ref<ShaderModuleBase>> CreateShaderModuleImpl(
diff --git a/src/dawn_native/RenderPipeline.cpp b/src/dawn_native/RenderPipeline.cpp
index 5c55d24..5231119 100644
--- a/src/dawn_native/RenderPipeline.cpp
+++ b/src/dawn_native/RenderPipeline.cpp
@@ -316,7 +316,7 @@
     }
 
     MaybeError ValidateRenderPipelineDescriptor(DeviceBase* device,
-                                                const RenderPipelineDescriptor2* descriptor) {
+                                                const RenderPipelineDescriptor* descriptor) {
         if (descriptor->nextInChain != nullptr) {
             return DAWN_VALIDATION_ERROR("nextInChain must be nullptr");
         }
@@ -350,7 +350,7 @@
         return {};
     }
 
-    std::vector<StageAndDescriptor> GetStages(const RenderPipelineDescriptor2* descriptor) {
+    std::vector<StageAndDescriptor> GetStages(const RenderPipelineDescriptor* descriptor) {
         std::vector<StageAndDescriptor> stages;
         stages.push_back(
             {SingleShaderStage::Vertex, descriptor->vertex.module, descriptor->vertex.entryPoint});
@@ -372,19 +372,10 @@
                mDepthStencil->stencilFront.passOp != wgpu::StencilOperation::Keep;
     }
 
-    bool BlendEnabled(const ColorStateDescriptor* mColorState) {
-        return mColorState->alphaBlend.operation != wgpu::BlendOperation::Add ||
-               mColorState->alphaBlend.srcFactor != wgpu::BlendFactor::One ||
-               mColorState->alphaBlend.dstFactor != wgpu::BlendFactor::Zero ||
-               mColorState->colorBlend.operation != wgpu::BlendOperation::Add ||
-               mColorState->colorBlend.srcFactor != wgpu::BlendFactor::One ||
-               mColorState->colorBlend.dstFactor != wgpu::BlendFactor::Zero;
-    }
-
     // RenderPipelineBase
 
     RenderPipelineBase::RenderPipelineBase(DeviceBase* device,
-                                           const RenderPipelineDescriptor2* descriptor)
+                                           const RenderPipelineDescriptor* descriptor)
         : PipelineBase(device,
                        descriptor->layout,
                        {{SingleShaderStage::Vertex, descriptor->vertex.module,
diff --git a/src/dawn_native/RenderPipeline.h b/src/dawn_native/RenderPipeline.h
index bf36af5..b5cc820 100644
--- a/src/dawn_native/RenderPipeline.h
+++ b/src/dawn_native/RenderPipeline.h
@@ -30,9 +30,9 @@
     class DeviceBase;
 
     MaybeError ValidateRenderPipelineDescriptor(DeviceBase* device,
-                                                const RenderPipelineDescriptor2* descriptor);
+                                                const RenderPipelineDescriptor* descriptor);
 
-    std::vector<StageAndDescriptor> GetStages(const RenderPipelineDescriptor2* descriptor);
+    std::vector<StageAndDescriptor> GetStages(const RenderPipelineDescriptor* descriptor);
 
     size_t IndexFormatSize(wgpu::IndexFormat format);
 
@@ -40,8 +40,6 @@
 
     bool StencilTestEnabled(const DepthStencilState* mDepthStencil);
 
-    bool BlendEnabled(const ColorStateDescriptor* mColorState);
-
     struct VertexAttributeInfo {
         wgpu::VertexFormat format;
         uint64_t offset;
@@ -56,7 +54,7 @@
 
     class RenderPipelineBase : public PipelineBase {
       public:
-        RenderPipelineBase(DeviceBase* device, const RenderPipelineDescriptor2* descriptor);
+        RenderPipelineBase(DeviceBase* device, const RenderPipelineDescriptor* descriptor);
         ~RenderPipelineBase() override;
 
         static RenderPipelineBase* MakeError(DeviceBase* device);
diff --git a/src/dawn_native/d3d12/DeviceD3D12.cpp b/src/dawn_native/d3d12/DeviceD3D12.cpp
index 43c35cc..9b7ca6b 100644
--- a/src/dawn_native/d3d12/DeviceD3D12.cpp
+++ b/src/dawn_native/d3d12/DeviceD3D12.cpp
@@ -334,7 +334,7 @@
         return QuerySet::Create(this, descriptor);
     }
     ResultOrError<Ref<RenderPipelineBase>> Device::CreateRenderPipelineImpl(
-        const RenderPipelineDescriptor2* descriptor) {
+        const RenderPipelineDescriptor* descriptor) {
         return RenderPipeline::Create(this, descriptor);
     }
     ResultOrError<Ref<SamplerBase>> Device::CreateSamplerImpl(const SamplerDescriptor* descriptor) {
diff --git a/src/dawn_native/d3d12/DeviceD3D12.h b/src/dawn_native/d3d12/DeviceD3D12.h
index 915430c..aeeceb2 100644
--- a/src/dawn_native/d3d12/DeviceD3D12.h
+++ b/src/dawn_native/d3d12/DeviceD3D12.h
@@ -154,7 +154,7 @@
         ResultOrError<Ref<QuerySetBase>> CreateQuerySetImpl(
             const QuerySetDescriptor* descriptor) override;
         ResultOrError<Ref<RenderPipelineBase>> CreateRenderPipelineImpl(
-            const RenderPipelineDescriptor2* descriptor) override;
+            const RenderPipelineDescriptor* descriptor) override;
         ResultOrError<Ref<SamplerBase>> CreateSamplerImpl(
             const SamplerDescriptor* descriptor) override;
         ResultOrError<Ref<ShaderModuleBase>> CreateShaderModuleImpl(
diff --git a/src/dawn_native/d3d12/RenderPipelineD3D12.cpp b/src/dawn_native/d3d12/RenderPipelineD3D12.cpp
index 7571195..f19422f 100644
--- a/src/dawn_native/d3d12/RenderPipelineD3D12.cpp
+++ b/src/dawn_native/d3d12/RenderPipelineD3D12.cpp
@@ -326,13 +326,13 @@
 
     ResultOrError<Ref<RenderPipeline>> RenderPipeline::Create(
         Device* device,
-        const RenderPipelineDescriptor2* descriptor) {
+        const RenderPipelineDescriptor* descriptor) {
         Ref<RenderPipeline> pipeline = AcquireRef(new RenderPipeline(device, descriptor));
         DAWN_TRY(pipeline->Initialize(descriptor));
         return pipeline;
     }
 
-    MaybeError RenderPipeline::Initialize(const RenderPipelineDescriptor2* descriptor) {
+    MaybeError RenderPipeline::Initialize(const RenderPipelineDescriptor* descriptor) {
         Device* device = ToBackend(GetDevice());
         uint32_t compileFlags = 0;
 #if defined(_DEBUG)
diff --git a/src/dawn_native/d3d12/RenderPipelineD3D12.h b/src/dawn_native/d3d12/RenderPipelineD3D12.h
index bb82b8d..c99d0a1 100644
--- a/src/dawn_native/d3d12/RenderPipelineD3D12.h
+++ b/src/dawn_native/d3d12/RenderPipelineD3D12.h
@@ -28,7 +28,7 @@
       public:
         static ResultOrError<Ref<RenderPipeline>> Create(
             Device* device,
-            const RenderPipelineDescriptor2* descriptor);
+            const RenderPipelineDescriptor* descriptor);
         RenderPipeline() = delete;
 
         D3D12_PRIMITIVE_TOPOLOGY GetD3D12PrimitiveTopology() const;
@@ -39,7 +39,7 @@
       private:
         ~RenderPipeline() override;
         using RenderPipelineBase::RenderPipelineBase;
-        MaybeError Initialize(const RenderPipelineDescriptor2* descriptor);
+        MaybeError Initialize(const RenderPipelineDescriptor* descriptor);
         D3D12_INPUT_LAYOUT_DESC ComputeInputLayout(
             std::array<D3D12_INPUT_ELEMENT_DESC, kMaxVertexAttributes>* inputElementDescriptors);
 
diff --git a/src/dawn_native/metal/DeviceMTL.h b/src/dawn_native/metal/DeviceMTL.h
index 04e5f90..413ba5d 100644
--- a/src/dawn_native/metal/DeviceMTL.h
+++ b/src/dawn_native/metal/DeviceMTL.h
@@ -91,7 +91,7 @@
         ResultOrError<Ref<QuerySetBase>> CreateQuerySetImpl(
             const QuerySetDescriptor* descriptor) override;
         ResultOrError<Ref<RenderPipelineBase>> CreateRenderPipelineImpl(
-            const RenderPipelineDescriptor2* descriptor) override;
+            const RenderPipelineDescriptor* descriptor) override;
         ResultOrError<Ref<SamplerBase>> CreateSamplerImpl(
             const SamplerDescriptor* descriptor) override;
         ResultOrError<Ref<ShaderModuleBase>> CreateShaderModuleImpl(
diff --git a/src/dawn_native/metal/DeviceMTL.mm b/src/dawn_native/metal/DeviceMTL.mm
index dc95fc8..60159e4 100644
--- a/src/dawn_native/metal/DeviceMTL.mm
+++ b/src/dawn_native/metal/DeviceMTL.mm
@@ -146,7 +146,7 @@
         return QuerySet::Create(this, descriptor);
     }
     ResultOrError<Ref<RenderPipelineBase>> Device::CreateRenderPipelineImpl(
-        const RenderPipelineDescriptor2* descriptor) {
+        const RenderPipelineDescriptor* descriptor) {
         return RenderPipeline::Create(this, descriptor);
     }
     ResultOrError<Ref<SamplerBase>> Device::CreateSamplerImpl(const SamplerDescriptor* descriptor) {
diff --git a/src/dawn_native/metal/RenderPipelineMTL.h b/src/dawn_native/metal/RenderPipelineMTL.h
index 19ea284..43eebec 100644
--- a/src/dawn_native/metal/RenderPipelineMTL.h
+++ b/src/dawn_native/metal/RenderPipelineMTL.h
@@ -29,7 +29,7 @@
       public:
         static ResultOrError<Ref<RenderPipeline>> Create(
             Device* device,
-            const RenderPipelineDescriptor2* descriptor);
+            const RenderPipelineDescriptor* descriptor);
 
         MTLPrimitiveType GetMTLPrimitiveTopology() const;
         MTLWinding GetMTLFrontFace() const;
@@ -47,7 +47,7 @@
 
       private:
         using RenderPipelineBase::RenderPipelineBase;
-        MaybeError Initialize(const RenderPipelineDescriptor2* descriptor);
+        MaybeError Initialize(const RenderPipelineDescriptor* descriptor);
 
         MTLVertexDescriptor* MakeVertexDesc();
 
diff --git a/src/dawn_native/metal/RenderPipelineMTL.mm b/src/dawn_native/metal/RenderPipelineMTL.mm
index a79228c..fb596d4 100644
--- a/src/dawn_native/metal/RenderPipelineMTL.mm
+++ b/src/dawn_native/metal/RenderPipelineMTL.mm
@@ -321,13 +321,13 @@
     // static
     ResultOrError<Ref<RenderPipeline>> RenderPipeline::Create(
         Device* device,
-        const RenderPipelineDescriptor2* descriptor) {
+        const RenderPipelineDescriptor* descriptor) {
         Ref<RenderPipeline> pipeline = AcquireRef(new RenderPipeline(device, descriptor));
         DAWN_TRY(pipeline->Initialize(descriptor));
         return pipeline;
     }
 
-    MaybeError RenderPipeline::Initialize(const RenderPipelineDescriptor2* descriptor) {
+    MaybeError RenderPipeline::Initialize(const RenderPipelineDescriptor* descriptor) {
         mMtlPrimitiveTopology = MTLPrimitiveTopology(GetPrimitiveTopology());
         mMtlFrontFace = MTLFrontFace(GetFrontFace());
         mMtlCullMode = ToMTLCullMode(GetCullMode());
diff --git a/src/dawn_native/null/DeviceNull.cpp b/src/dawn_native/null/DeviceNull.cpp
index 70ac53c..9ffb21d 100644
--- a/src/dawn_native/null/DeviceNull.cpp
+++ b/src/dawn_native/null/DeviceNull.cpp
@@ -122,7 +122,7 @@
         return AcquireRef(new QuerySet(this, descriptor));
     }
     ResultOrError<Ref<RenderPipelineBase>> Device::CreateRenderPipelineImpl(
-        const RenderPipelineDescriptor2* descriptor) {
+        const RenderPipelineDescriptor* descriptor) {
         return AcquireRef(new RenderPipeline(this, descriptor));
     }
     ResultOrError<Ref<SamplerBase>> Device::CreateSamplerImpl(const SamplerDescriptor* descriptor) {
diff --git a/src/dawn_native/null/DeviceNull.h b/src/dawn_native/null/DeviceNull.h
index 6ee1422..17e7756 100644
--- a/src/dawn_native/null/DeviceNull.h
+++ b/src/dawn_native/null/DeviceNull.h
@@ -135,7 +135,7 @@
         ResultOrError<Ref<QuerySetBase>> CreateQuerySetImpl(
             const QuerySetDescriptor* descriptor) override;
         ResultOrError<Ref<RenderPipelineBase>> CreateRenderPipelineImpl(
-            const RenderPipelineDescriptor2* descriptor) override;
+            const RenderPipelineDescriptor* descriptor) override;
         ResultOrError<Ref<SamplerBase>> CreateSamplerImpl(
             const SamplerDescriptor* descriptor) override;
         ResultOrError<Ref<ShaderModuleBase>> CreateShaderModuleImpl(
diff --git a/src/dawn_native/opengl/DeviceGL.cpp b/src/dawn_native/opengl/DeviceGL.cpp
index 2963ad8..183875d 100644
--- a/src/dawn_native/opengl/DeviceGL.cpp
+++ b/src/dawn_native/opengl/DeviceGL.cpp
@@ -140,7 +140,7 @@
         return AcquireRef(new QuerySet(this, descriptor));
     }
     ResultOrError<Ref<RenderPipelineBase>> Device::CreateRenderPipelineImpl(
-        const RenderPipelineDescriptor2* descriptor) {
+        const RenderPipelineDescriptor* descriptor) {
         return AcquireRef(new RenderPipeline(this, descriptor));
     }
     ResultOrError<Ref<SamplerBase>> Device::CreateSamplerImpl(const SamplerDescriptor* descriptor) {
diff --git a/src/dawn_native/opengl/DeviceGL.h b/src/dawn_native/opengl/DeviceGL.h
index 6ee6de5..4e30a0e 100644
--- a/src/dawn_native/opengl/DeviceGL.h
+++ b/src/dawn_native/opengl/DeviceGL.h
@@ -90,7 +90,7 @@
         ResultOrError<Ref<QuerySetBase>> CreateQuerySetImpl(
             const QuerySetDescriptor* descriptor) override;
         ResultOrError<Ref<RenderPipelineBase>> CreateRenderPipelineImpl(
-            const RenderPipelineDescriptor2* descriptor) override;
+            const RenderPipelineDescriptor* descriptor) override;
         ResultOrError<Ref<SamplerBase>> CreateSamplerImpl(
             const SamplerDescriptor* descriptor) override;
         ResultOrError<Ref<ShaderModuleBase>> CreateShaderModuleImpl(
diff --git a/src/dawn_native/opengl/RenderPipelineGL.cpp b/src/dawn_native/opengl/RenderPipelineGL.cpp
index 2511786..4cd55dd 100644
--- a/src/dawn_native/opengl/RenderPipelineGL.cpp
+++ b/src/dawn_native/opengl/RenderPipelineGL.cpp
@@ -219,7 +219,7 @@
 
     }  // anonymous namespace
 
-    RenderPipeline::RenderPipeline(Device* device, const RenderPipelineDescriptor2* descriptor)
+    RenderPipeline::RenderPipeline(Device* device, const RenderPipelineDescriptor* descriptor)
         : RenderPipelineBase(device, descriptor),
           mVertexArrayObject(0),
           mGlPrimitiveTopology(GLPrimitiveTopology(GetPrimitiveTopology())) {
diff --git a/src/dawn_native/opengl/RenderPipelineGL.h b/src/dawn_native/opengl/RenderPipelineGL.h
index 0dc7f32..960b50b 100644
--- a/src/dawn_native/opengl/RenderPipelineGL.h
+++ b/src/dawn_native/opengl/RenderPipelineGL.h
@@ -29,7 +29,7 @@
 
     class RenderPipeline final : public RenderPipelineBase, public PipelineGL {
       public:
-        RenderPipeline(Device* device, const RenderPipelineDescriptor2* descriptor);
+        RenderPipeline(Device* device, const RenderPipelineDescriptor* descriptor);
 
         GLenum GetGLPrimitiveTopology() const;
         ityp::bitset<VertexAttributeLocation, kMaxVertexAttributes> GetAttributesUsingVertexBuffer(
diff --git a/src/dawn_native/vulkan/DeviceVk.cpp b/src/dawn_native/vulkan/DeviceVk.cpp
index df3324f..748b2c4 100644
--- a/src/dawn_native/vulkan/DeviceVk.cpp
+++ b/src/dawn_native/vulkan/DeviceVk.cpp
@@ -131,7 +131,7 @@
         return QuerySet::Create(this, descriptor);
     }
     ResultOrError<Ref<RenderPipelineBase>> Device::CreateRenderPipelineImpl(
-        const RenderPipelineDescriptor2* descriptor) {
+        const RenderPipelineDescriptor* descriptor) {
         return RenderPipeline::Create(this, descriptor);
     }
     ResultOrError<Ref<SamplerBase>> Device::CreateSamplerImpl(const SamplerDescriptor* descriptor) {
diff --git a/src/dawn_native/vulkan/DeviceVk.h b/src/dawn_native/vulkan/DeviceVk.h
index 31b31bc..376f15a 100644
--- a/src/dawn_native/vulkan/DeviceVk.h
+++ b/src/dawn_native/vulkan/DeviceVk.h
@@ -126,7 +126,7 @@
         ResultOrError<Ref<QuerySetBase>> CreateQuerySetImpl(
             const QuerySetDescriptor* descriptor) override;
         ResultOrError<Ref<RenderPipelineBase>> CreateRenderPipelineImpl(
-            const RenderPipelineDescriptor2* descriptor) override;
+            const RenderPipelineDescriptor* descriptor) override;
         ResultOrError<Ref<SamplerBase>> CreateSamplerImpl(
             const SamplerDescriptor* descriptor) override;
         ResultOrError<Ref<ShaderModuleBase>> CreateShaderModuleImpl(
diff --git a/src/dawn_native/vulkan/RenderPipelineVk.cpp b/src/dawn_native/vulkan/RenderPipelineVk.cpp
index 52e9e0f..fd29af1 100644
--- a/src/dawn_native/vulkan/RenderPipelineVk.cpp
+++ b/src/dawn_native/vulkan/RenderPipelineVk.cpp
@@ -330,13 +330,13 @@
     // static
     ResultOrError<Ref<RenderPipeline>> RenderPipeline::Create(
         Device* device,
-        const RenderPipelineDescriptor2* descriptor) {
+        const RenderPipelineDescriptor* descriptor) {
         Ref<RenderPipeline> pipeline = AcquireRef(new RenderPipeline(device, descriptor));
         DAWN_TRY(pipeline->Initialize(descriptor));
         return pipeline;
     }
 
-    MaybeError RenderPipeline::Initialize(const RenderPipelineDescriptor2* descriptor) {
+    MaybeError RenderPipeline::Initialize(const RenderPipelineDescriptor* descriptor) {
         Device* device = ToBackend(GetDevice());
 
         VkPipelineShaderStageCreateInfo shaderStages[2];
diff --git a/src/dawn_native/vulkan/RenderPipelineVk.h b/src/dawn_native/vulkan/RenderPipelineVk.h
index be61fa2..7dfc468 100644
--- a/src/dawn_native/vulkan/RenderPipelineVk.h
+++ b/src/dawn_native/vulkan/RenderPipelineVk.h
@@ -28,14 +28,14 @@
       public:
         static ResultOrError<Ref<RenderPipeline>> Create(
             Device* device,
-            const RenderPipelineDescriptor2* descriptor);
+            const RenderPipelineDescriptor* descriptor);
 
         VkPipeline GetHandle() const;
 
       private:
         ~RenderPipeline() override;
         using RenderPipelineBase::RenderPipelineBase;
-        MaybeError Initialize(const RenderPipelineDescriptor2* descriptor);
+        MaybeError Initialize(const RenderPipelineDescriptor* descriptor);
 
         struct PipelineVertexInputStateCreateInfoTemporaryAllocations {
             std::array<VkVertexInputBindingDescription, kMaxVertexBuffers> bindings;
diff --git a/src/dawn_wire/client/Device.cpp b/src/dawn_wire/client/Device.cpp
index b4b4679..3a9189e 100644
--- a/src/dawn_wire/client/Device.cpp
+++ b/src/dawn_wire/client/Device.cpp
@@ -277,7 +277,7 @@
         return true;
     }
 
-    void Device::CreateRenderPipelineAsync(WGPURenderPipelineDescriptor2 const* descriptor,
+    void Device::CreateRenderPipelineAsync(WGPURenderPipelineDescriptor const* descriptor,
                                            WGPUCreateRenderPipelineAsyncCallback callback,
                                            void* userdata) {
         if (client->IsDisconnected()) {
diff --git a/src/dawn_wire/client/Device.h b/src/dawn_wire/client/Device.h
index 5de8f77..c72200b 100644
--- a/src/dawn_wire/client/Device.h
+++ b/src/dawn_wire/client/Device.h
@@ -45,7 +45,7 @@
         void CreateComputePipelineAsync(WGPUComputePipelineDescriptor const* descriptor,
                                         WGPUCreateComputePipelineAsyncCallback callback,
                                         void* userdata);
-        void CreateRenderPipelineAsync(WGPURenderPipelineDescriptor2 const* descriptor,
+        void CreateRenderPipelineAsync(WGPURenderPipelineDescriptor const* descriptor,
                                        WGPUCreateRenderPipelineAsyncCallback callback,
                                        void* userdata);
 
diff --git a/src/dawn_wire/server/ServerDevice.cpp b/src/dawn_wire/server/ServerDevice.cpp
index 9ce6ce4..19e6298 100644
--- a/src/dawn_wire/server/ServerDevice.cpp
+++ b/src/dawn_wire/server/ServerDevice.cpp
@@ -149,11 +149,10 @@
         SerializeCommand(cmd);
     }
 
-    bool Server::DoDeviceCreateRenderPipelineAsync(
-        ObjectId deviceId,
-        uint64_t requestSerial,
-        ObjectHandle pipelineObjectHandle,
-        const WGPURenderPipelineDescriptor2* descriptor) {
+    bool Server::DoDeviceCreateRenderPipelineAsync(ObjectId deviceId,
+                                                   uint64_t requestSerial,
+                                                   ObjectHandle pipelineObjectHandle,
+                                                   const WGPURenderPipelineDescriptor* descriptor) {
         auto* device = DeviceObjects().Get(deviceId);
         if (device == nullptr) {
             return false;
diff --git a/src/tests/end2end/BindGroupTests.cpp b/src/tests/end2end/BindGroupTests.cpp
index 4913823..8408609 100644
--- a/src/tests/end2end/BindGroupTests.cpp
+++ b/src/tests/end2end/BindGroupTests.cpp
@@ -98,7 +98,7 @@
 
         wgpu::PipelineLayout pipelineLayout = MakeBasicPipelineLayout(bindGroupLayouts);
 
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
         pipelineDescriptor.layout = pipelineLayout;
         pipelineDescriptor.vertex.module = vsModule;
         pipelineDescriptor.cFragment.module = fsModule;
@@ -114,7 +114,7 @@
 
         pipelineDescriptor.cTargets[0].blend = &blend;
 
-        return device.CreateRenderPipeline2(&pipelineDescriptor);
+        return device.CreateRenderPipeline(&pipelineDescriptor);
     }
 };
 
@@ -184,12 +184,12 @@
             return fragmentUbo.color;
         })");
 
-    utils::ComboRenderPipelineDescriptor2 textureDescriptor;
+    utils::ComboRenderPipelineDescriptor textureDescriptor;
     textureDescriptor.vertex.module = vsModule;
     textureDescriptor.cFragment.module = fsModule;
     textureDescriptor.cTargets[0].format = renderPass.colorFormat;
 
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&textureDescriptor);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&textureDescriptor);
 
     struct Data {
         float transform[8];
@@ -260,12 +260,12 @@
             return textureSample(tex, samp, FragCoord.xy);
         })");
 
-    utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor pipelineDescriptor;
     pipelineDescriptor.vertex.module = vsModule;
     pipelineDescriptor.cFragment.module = fsModule;
     pipelineDescriptor.cTargets[0].format = renderPass.colorFormat;
 
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&pipelineDescriptor);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&pipelineDescriptor);
 
     constexpr float transform[] = {1.f, 0.f, 0.f, 1.f};
     wgpu::Buffer buffer = utils::CreateBufferFromData(device, &transform, sizeof(transform),
@@ -382,12 +382,12 @@
             return fragmentUbo1.color + fragmentUbo2.color;
         })");
 
-    utils::ComboRenderPipelineDescriptor2 textureDescriptor;
+    utils::ComboRenderPipelineDescriptor textureDescriptor;
     textureDescriptor.vertex.module = vsModule;
     textureDescriptor.cFragment.module = fsModule;
     textureDescriptor.cTargets[0].format = renderPass.colorFormat;
 
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&textureDescriptor);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&textureDescriptor);
 
     struct Data {
         float transform[4];
@@ -970,12 +970,12 @@
             return ubo1.color + 2.0 * ubo2.color + 4.0 * ubo3.color;
         })");
 
-    utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor pipelineDescriptor;
     pipelineDescriptor.vertex.module = vsModule;
     pipelineDescriptor.cFragment.module = fsModule;
     pipelineDescriptor.cTargets[0].format = renderPass.colorFormat;
 
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&pipelineDescriptor);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&pipelineDescriptor);
 
     wgpu::Buffer black =
         utils::CreateBufferFromData(device, wgpu::BufferUsage::Uniform, {0.f, 0.f, 0.f, 0.f});
@@ -1086,7 +1086,7 @@
 // This is a regression test for crbug.com/dawn/410 which tests that it can successfully compile and
 // execute the shader.
 TEST_P(BindGroupTests, ReadonlyStorage) {
-    utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor pipelineDescriptor;
 
     pipelineDescriptor.vertex.module = utils::CreateShaderModule(device, R"(
         [[stage(vertex)]]
@@ -1118,7 +1118,7 @@
 
     pipelineDescriptor.layout = utils::MakeBasicPipelineLayout(device, &bgl);
 
-    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline2(&pipelineDescriptor);
+    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline(&pipelineDescriptor);
 
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
diff --git a/src/tests/end2end/BufferZeroInitTests.cpp b/src/tests/end2end/BufferZeroInitTests.cpp
index bef92f6..d2ef631 100644
--- a/src/tests/end2end/BufferZeroInitTests.cpp
+++ b/src/tests/end2end/BufferZeroInitTests.cpp
@@ -213,7 +213,7 @@
             })");
 
         ASSERT(vertexBufferCount <= 1u);
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.primitive.topology = wgpu::PrimitiveTopology::PointList;
@@ -222,7 +222,7 @@
         descriptor.cBuffers[0].attributeCount = 1;
         descriptor.cAttributes[0].format = wgpu::VertexFormat::Float32x4;
         descriptor.cTargets[0].format = kColorAttachmentFormat;
-        return device.CreateRenderPipeline2(&descriptor);
+        return device.CreateRenderPipeline(&descriptor);
     }
 
     void ExpectLazyClearSubmitAndCheckOutputs(wgpu::CommandEncoder encoder,
diff --git a/src/tests/end2end/ClipSpaceTests.cpp b/src/tests/end2end/ClipSpaceTests.cpp
index d126f22..52cd95c 100644
--- a/src/tests/end2end/ClipSpaceTests.cpp
+++ b/src/tests/end2end/ClipSpaceTests.cpp
@@ -20,7 +20,7 @@
 class ClipSpaceTest : public DawnTest {
   protected:
     wgpu::RenderPipeline CreatePipelineForTest() {
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
 
         // Draw two triangles:
         // 1. The depth value of the top-left one is >= 0.5
@@ -47,7 +47,7 @@
         wgpu::DepthStencilState* depthStencil = pipelineDescriptor.EnableDepthStencil();
         depthStencil->depthCompare = wgpu::CompareFunction::LessEqual;
 
-        return device.CreateRenderPipeline2(&pipelineDescriptor);
+        return device.CreateRenderPipeline(&pipelineDescriptor);
     }
 
     wgpu::Texture Create2DTextureForTest(wgpu::TextureFormat format) {
diff --git a/src/tests/end2end/ColorStateTests.cpp b/src/tests/end2end/ColorStateTests.cpp
index 9e618fa..04881a3 100644
--- a/src/tests/end2end/ColorStateTests.cpp
+++ b/src/tests/end2end/ColorStateTests.cpp
@@ -68,20 +68,20 @@
                 }
             )");
 
-        utils::ComboRenderPipelineDescriptor2 baseDescriptor;
+        utils::ComboRenderPipelineDescriptor baseDescriptor;
         baseDescriptor.vertex.module = vsModule;
         baseDescriptor.cFragment.module = fsModule;
         baseDescriptor.cTargets[0].format = renderPass.colorFormat;
 
-        basePipeline = device.CreateRenderPipeline2(&baseDescriptor);
+        basePipeline = device.CreateRenderPipeline(&baseDescriptor);
 
-        utils::ComboRenderPipelineDescriptor2 testDescriptor;
+        utils::ComboRenderPipelineDescriptor testDescriptor;
         testDescriptor.vertex.module = vsModule;
         testDescriptor.cFragment.module = fsModule;
         testDescriptor.cTargets[0] = colorTargetState;
         testDescriptor.cTargets[0].format = renderPass.colorFormat;
 
-        testPipeline = device.CreateRenderPipeline2(&testDescriptor);
+        testPipeline = device.CreateRenderPipeline(&testDescriptor);
     }
 
     // Create a bind group to set the colors as a uniform buffer
@@ -810,14 +810,14 @@
         }
     )");
 
-    utils::ComboRenderPipelineDescriptor2 baseDescriptor;
+    utils::ComboRenderPipelineDescriptor baseDescriptor;
     baseDescriptor.vertex.module = vsModule;
     baseDescriptor.cFragment.module = fsModule;
     baseDescriptor.cFragment.targetCount = 4;
 
-    basePipeline = device.CreateRenderPipeline2(&baseDescriptor);
+    basePipeline = device.CreateRenderPipeline(&baseDescriptor);
 
-    utils::ComboRenderPipelineDescriptor2 testDescriptor;
+    utils::ComboRenderPipelineDescriptor testDescriptor;
     testDescriptor.vertex.module = vsModule;
     testDescriptor.cFragment.module = fsModule;
     testDescriptor.cFragment.targetCount = 4;
@@ -856,7 +856,7 @@
     testDescriptor.cTargets[1].blend = &blend1;
     testDescriptor.cTargets[3].blend = &blend3;
 
-    testPipeline = device.CreateRenderPipeline2(&testDescriptor);
+    testPipeline = device.CreateRenderPipeline(&testDescriptor);
 
     for (unsigned int c = 0; c < kColors.size(); ++c) {
         RGBA8 base = kColors[((c + 31) * 29) % kColors.size()];
@@ -917,14 +917,14 @@
         }
     )");
 
-    utils::ComboRenderPipelineDescriptor2 baseDescriptor;
+    utils::ComboRenderPipelineDescriptor baseDescriptor;
     baseDescriptor.vertex.module = vsModule;
     baseDescriptor.cFragment.module = fsModule;
     baseDescriptor.cTargets[0].format = renderPass.colorFormat;
 
-    basePipeline = device.CreateRenderPipeline2(&baseDescriptor);
+    basePipeline = device.CreateRenderPipeline(&baseDescriptor);
 
-    utils::ComboRenderPipelineDescriptor2 testDescriptor;
+    utils::ComboRenderPipelineDescriptor testDescriptor;
     testDescriptor.vertex.module = vsModule;
     testDescriptor.cFragment.module = fsModule;
     testDescriptor.cTargets[0].format = renderPass.colorFormat;
@@ -940,7 +940,7 @@
 
     testDescriptor.cTargets[0].blend = &blend;
 
-    testPipeline = device.CreateRenderPipeline2(&testDescriptor);
+    testPipeline = device.CreateRenderPipeline(&testDescriptor);
     constexpr wgpu::Color kWhite{1.0f, 1.0f, 1.0f, 1.0f};
 
     // Check that the initial blend color is (0,0,0,0)
@@ -1041,20 +1041,20 @@
         }
     )");
 
-    utils::ComboRenderPipelineDescriptor2 baseDescriptor;
+    utils::ComboRenderPipelineDescriptor baseDescriptor;
     baseDescriptor.vertex.module = vsModule;
     baseDescriptor.cFragment.module = fsModule;
     baseDescriptor.cTargets[0].format = renderPass.colorFormat;
 
-    basePipeline = device.CreateRenderPipeline2(&baseDescriptor);
+    basePipeline = device.CreateRenderPipeline(&baseDescriptor);
 
-    utils::ComboRenderPipelineDescriptor2 testDescriptor;
+    utils::ComboRenderPipelineDescriptor testDescriptor;
     testDescriptor.vertex.module = vsModule;
     testDescriptor.cFragment.module = fsModule;
     testDescriptor.cTargets[0].format = renderPass.colorFormat;
     testDescriptor.cTargets[0].writeMask = wgpu::ColorWriteMask::Red;
 
-    testPipeline = device.CreateRenderPipeline2(&testDescriptor);
+    testPipeline = device.CreateRenderPipeline(&testDescriptor);
 
     RGBA8 base(32, 64, 128, 192);
     RGBA8 expected(0, 0, 0, 0);
diff --git a/src/tests/end2end/CompressedTextureFormatTests.cpp b/src/tests/end2end/CompressedTextureFormatTests.cpp
index 8968332..96b704c 100644
--- a/src/tests/end2end/CompressedTextureFormatTests.cpp
+++ b/src/tests/end2end/CompressedTextureFormatTests.cpp
@@ -138,7 +138,7 @@
     wgpu::RenderPipeline CreateRenderPipelineForTest() {
         ASSERT(IsBCFormatSupported());
 
-        utils::ComboRenderPipelineDescriptor2 renderPipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor renderPipelineDescriptor;
         wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
             struct VertexOut {
                 [[location(0)]] texCoord : vec2 <f32>;
@@ -169,7 +169,7 @@
         renderPipelineDescriptor.cFragment.module = fsModule;
         renderPipelineDescriptor.cTargets[0].format = utils::BasicRenderPass::kDefaultColorFormat;
 
-        return device.CreateRenderPipeline2(&renderPipelineDescriptor);
+        return device.CreateRenderPipeline(&renderPipelineDescriptor);
     }
 
     // Run the given render pipeline and bind group and verify the pixels in the render target.
diff --git a/src/tests/end2end/CreatePipelineAsyncTests.cpp b/src/tests/end2end/CreatePipelineAsyncTests.cpp
index a37e647..44990e0 100644
--- a/src/tests/end2end/CreatePipelineAsyncTests.cpp
+++ b/src/tests/end2end/CreatePipelineAsyncTests.cpp
@@ -145,7 +145,7 @@
 TEST_P(CreatePipelineAsyncTest, BasicUseOfCreateRenderPipelineAsync) {
     constexpr wgpu::TextureFormat kRenderAttachmentFormat = wgpu::TextureFormat::RGBA8Unorm;
 
-    utils::ComboRenderPipelineDescriptor2 renderPipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor renderPipelineDescriptor;
     wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
         [[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
             return vec4<f32>(0.0, 0.0, 0.0, 1.0);
@@ -213,7 +213,7 @@
 
     constexpr wgpu::TextureFormat kRenderAttachmentFormat = wgpu::TextureFormat::Depth32Float;
 
-    utils::ComboRenderPipelineDescriptor2 renderPipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor renderPipelineDescriptor;
     wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
         [[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
             return vec4<f32>(0.0, 0.0, 0.0, 1.0);
@@ -275,7 +275,7 @@
 // Verify there is no error when the device is released before the callback of
 // CreateRenderPipelineAsync() is called.
 TEST_P(CreatePipelineAsyncTest, ReleaseDeviceBeforeCallbackOfCreateRenderPipelineAsync) {
-    utils::ComboRenderPipelineDescriptor2 renderPipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor renderPipelineDescriptor;
     wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
         [[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
             return vec4<f32>(0.0, 0.0, 0.0, 1.0);
diff --git a/src/tests/end2end/CullingTests.cpp b/src/tests/end2end/CullingTests.cpp
index 0b5a38d..7700e18 100644
--- a/src/tests/end2end/CullingTests.cpp
+++ b/src/tests/end2end/CullingTests.cpp
@@ -20,7 +20,7 @@
 class CullingTest : public DawnTest {
   protected:
     wgpu::RenderPipeline CreatePipelineForTest(wgpu::FrontFace frontFace, wgpu::CullMode cullMode) {
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
 
         // Draw two triangles with different winding orders:
         // 1. The top-left one is counterclockwise (CCW)
@@ -54,7 +54,7 @@
         pipelineDescriptor.primitive.frontFace = frontFace;
         pipelineDescriptor.primitive.cullMode = cullMode;
 
-        return device.CreateRenderPipeline2(&pipelineDescriptor);
+        return device.CreateRenderPipeline(&pipelineDescriptor);
     }
 
     wgpu::Texture Create2DTextureForTest(wgpu::TextureFormat format) {
diff --git a/src/tests/end2end/D3D12CachingTests.cpp b/src/tests/end2end/D3D12CachingTests.cpp
index d3328b1..fde7d6c 100644
--- a/src/tests/end2end/D3D12CachingTests.cpp
+++ b/src/tests/end2end/D3D12CachingTests.cpp
@@ -112,26 +112,26 @@
 
     // Store the WGSL shader into the cache.
     {
-        utils::ComboRenderPipelineDescriptor2 desc;
+        utils::ComboRenderPipelineDescriptor desc;
         desc.vertex.module = module;
         desc.vertex.entryPoint = "vertex_main";
         desc.cFragment.module = module;
         desc.cFragment.entryPoint = "fragment_main";
 
-        EXPECT_CACHE_HIT(0u, device.CreateRenderPipeline2(&desc));
+        EXPECT_CACHE_HIT(0u, device.CreateRenderPipeline(&desc));
     }
 
     EXPECT_EQ(mPersistentCache.mCache.size(), 0u);
 
     // Load the same WGSL shader from the cache.
     {
-        utils::ComboRenderPipelineDescriptor2 desc;
+        utils::ComboRenderPipelineDescriptor desc;
         desc.vertex.module = module;
         desc.vertex.entryPoint = "vertex_main";
         desc.cFragment.module = module;
         desc.cFragment.entryPoint = "fragment_main";
 
-        EXPECT_CACHE_HIT(0u, device.CreateRenderPipeline2(&desc));
+        EXPECT_CACHE_HIT(0u, device.CreateRenderPipeline(&desc));
     }
 
     EXPECT_EQ(mPersistentCache.mCache.size(), 0u);
@@ -153,20 +153,20 @@
 
     // Store the WGSL shader into the cache.
     {
-        utils::ComboRenderPipelineDescriptor2 desc;
+        utils::ComboRenderPipelineDescriptor desc;
         desc.vertex.module = module;
         desc.vertex.entryPoint = "vertex_main";
         desc.cFragment.module = module;
         desc.cFragment.entryPoint = "fragment_main";
 
-        EXPECT_CACHE_HIT(0u, device.CreateRenderPipeline2(&desc));
+        EXPECT_CACHE_HIT(0u, device.CreateRenderPipeline(&desc));
     }
 
     EXPECT_EQ(mPersistentCache.mCache.size(), 2u);
 
     // Load the same WGSL shader from the cache.
     {
-        utils::ComboRenderPipelineDescriptor2 desc;
+        utils::ComboRenderPipelineDescriptor desc;
         desc.vertex.module = module;
         desc.vertex.entryPoint = "vertex_main";
         desc.cFragment.module = module;
@@ -174,7 +174,7 @@
 
         // Cached HLSL shader calls LoadData twice (once to peek, again to get), so check 2 x
         // kNumOfShaders hits.
-        EXPECT_CACHE_HIT(4u, device.CreateRenderPipeline2(&desc));
+        EXPECT_CACHE_HIT(4u, device.CreateRenderPipeline(&desc));
     }
 
     EXPECT_EQ(mPersistentCache.mCache.size(), 2u);
@@ -191,12 +191,12 @@
   )");
 
     {
-        utils::ComboRenderPipelineDescriptor2 desc;
+        utils::ComboRenderPipelineDescriptor desc;
         desc.vertex.module = newModule;
         desc.vertex.entryPoint = "vertex_main";
         desc.cFragment.module = newModule;
         desc.cFragment.entryPoint = "fragment_main";
-        EXPECT_CACHE_HIT(0u, device.CreateRenderPipeline2(&desc));
+        EXPECT_CACHE_HIT(0u, device.CreateRenderPipeline(&desc));
     }
 
     // Cached HLSL shader calls LoadData twice (once to peek, again to get), so check 2 x
diff --git a/src/tests/end2end/D3D12VideoViewsTests.cpp b/src/tests/end2end/D3D12VideoViewsTests.cpp
index 5b28d96..00a9de3 100644
--- a/src/tests/end2end/D3D12VideoViewsTests.cpp
+++ b/src/tests/end2end/D3D12VideoViewsTests.cpp
@@ -293,7 +293,7 @@
     viewDesc.aspect = wgpu::TextureAspect::Plane0Only;
     wgpu::TextureView textureView = wgpuTexture.CreateView(&viewDesc);
 
-    utils::ComboRenderPipelineDescriptor2 renderPipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor renderPipelineDescriptor;
     renderPipelineDescriptor.vertex.module = GetTestVertexShaderModule();
 
     renderPipelineDescriptor.cFragment.module = utils::CreateShaderModule(device, R"(
@@ -311,7 +311,7 @@
     renderPipelineDescriptor.cTargets[0].format = renderPass.colorFormat;
     renderPipelineDescriptor.primitive.topology = wgpu::PrimitiveTopology::TriangleList;
 
-    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline2(&renderPipelineDescriptor);
+    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline(&renderPipelineDescriptor);
 
     wgpu::Sampler sampler = device.CreateSampler();
 
@@ -344,7 +344,7 @@
     viewDesc.aspect = wgpu::TextureAspect::Plane1Only;
     wgpu::TextureView textureView = wgpuTexture.CreateView(&viewDesc);
 
-    utils::ComboRenderPipelineDescriptor2 renderPipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor renderPipelineDescriptor;
     renderPipelineDescriptor.vertex.module = GetTestVertexShaderModule();
 
     renderPipelineDescriptor.cFragment.module = utils::CreateShaderModule(device, R"(
@@ -363,7 +363,7 @@
     renderPipelineDescriptor.cTargets[0].format = renderPass.colorFormat;
     renderPipelineDescriptor.primitive.topology = wgpu::PrimitiveTopology::TriangleList;
 
-    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline2(&renderPipelineDescriptor);
+    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline(&renderPipelineDescriptor);
 
     wgpu::Sampler sampler = device.CreateSampler();
 
@@ -404,7 +404,7 @@
     chromaViewDesc.aspect = wgpu::TextureAspect::Plane1Only;
     wgpu::TextureView chromaTextureView = wgpuTexture.CreateView(&chromaViewDesc);
 
-    utils::ComboRenderPipelineDescriptor2 renderPipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor renderPipelineDescriptor;
     renderPipelineDescriptor.vertex.module = GetTestVertexShaderModule();
 
     renderPipelineDescriptor.cFragment.module = utils::CreateShaderModule(device, R"(
@@ -424,7 +424,7 @@
         device, kYUVImageDataWidthInTexels, kYUVImageDataHeightInTexels);
     renderPipelineDescriptor.cTargets[0].format = renderPass.colorFormat;
 
-    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline2(&renderPipelineDescriptor);
+    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline(&renderPipelineDescriptor);
 
     wgpu::Sampler sampler = device.CreateSampler();
 
diff --git a/src/tests/end2end/DeprecatedAPITests.cpp b/src/tests/end2end/DeprecatedAPITests.cpp
index ce3a8a0..573d095 100644
--- a/src/tests/end2end/DeprecatedAPITests.cpp
+++ b/src/tests/end2end/DeprecatedAPITests.cpp
@@ -230,40 +230,40 @@
                 }
             )");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.cTargets[0].blend = &descriptor.cBlends[0];
 
         descriptor.cBlends[0].color.srcFactor = blendFactor;
         if (deprecated) {
-            EXPECT_DEPRECATION_WARNING(device.CreateRenderPipeline2(&descriptor));
+            EXPECT_DEPRECATION_WARNING(device.CreateRenderPipeline(&descriptor));
         } else {
-            device.CreateRenderPipeline2(&descriptor);
+            device.CreateRenderPipeline(&descriptor);
         }
         descriptor.cBlends[0].color.srcFactor = wgpu::BlendFactor::One;
 
         descriptor.cBlends[0].color.dstFactor = blendFactor;
         if (deprecated) {
-            EXPECT_DEPRECATION_WARNING(device.CreateRenderPipeline2(&descriptor));
+            EXPECT_DEPRECATION_WARNING(device.CreateRenderPipeline(&descriptor));
         } else {
-            device.CreateRenderPipeline2(&descriptor);
+            device.CreateRenderPipeline(&descriptor);
         }
         descriptor.cBlends[0].color.dstFactor = wgpu::BlendFactor::Zero;
 
         descriptor.cBlends[0].alpha.srcFactor = blendFactor;
         if (deprecated) {
-            EXPECT_DEPRECATION_WARNING(device.CreateRenderPipeline2(&descriptor));
+            EXPECT_DEPRECATION_WARNING(device.CreateRenderPipeline(&descriptor));
         } else {
-            device.CreateRenderPipeline2(&descriptor);
+            device.CreateRenderPipeline(&descriptor);
         }
         descriptor.cBlends[0].alpha.srcFactor = wgpu::BlendFactor::One;
 
         descriptor.cBlends[0].alpha.dstFactor = blendFactor;
         if (deprecated) {
-            EXPECT_DEPRECATION_WARNING(device.CreateRenderPipeline2(&descriptor));
+            EXPECT_DEPRECATION_WARNING(device.CreateRenderPipeline(&descriptor));
         } else {
-            device.CreateRenderPipeline2(&descriptor);
+            device.CreateRenderPipeline(&descriptor);
         }
         descriptor.cBlends[0].alpha.dstFactor = wgpu::BlendFactor::Zero;
     }
diff --git a/src/tests/end2end/DepthBiasTests.cpp b/src/tests/end2end/DepthBiasTests.cpp
index 348b82a..2c07dc9 100644
--- a/src/tests/end2end/DepthBiasTests.cpp
+++ b/src/tests/end2end/DepthBiasTests.cpp
@@ -95,7 +95,7 @@
         renderPassDesc.cDepthStencilAttachmentInfo.clearDepth = depthClear;
 
         // Create a render pipeline to render the quad
-        utils::ComboRenderPipelineDescriptor2 renderPipelineDesc;
+        utils::ComboRenderPipelineDescriptor renderPipelineDesc;
 
         renderPipelineDesc.vertex.module = vertexModule;
         renderPipelineDesc.cFragment.module = fragmentModule;
@@ -109,7 +109,7 @@
             depthStencil->depthCompare = wgpu::CompareFunction::Greater;
         }
 
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&renderPipelineDesc);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&renderPipelineDesc);
 
         // Draw the quad (two triangles)
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
diff --git a/src/tests/end2end/DepthStencilCopyTests.cpp b/src/tests/end2end/DepthStencilCopyTests.cpp
index 9e0562b..a6cd449 100644
--- a/src/tests/end2end/DepthStencilCopyTests.cpp
+++ b/src/tests/end2end/DepthStencilCopyTests.cpp
@@ -66,7 +66,7 @@
         return device.CreateTexture(&texDescriptor);
     }
 
-    void PopulatePipelineDescriptorWriteDepth(utils::ComboRenderPipelineDescriptor2* desc,
+    void PopulatePipelineDescriptorWriteDepth(utils::ComboRenderPipelineDescriptor* desc,
                                               wgpu::TextureFormat format,
                                               float regionDepth) {
         desc->vertex.module = mVertexModule;
@@ -96,11 +96,11 @@
         utils::ComboRenderPassDescriptor renderPassDesc({}, texture.CreateView(&viewDesc));
         renderPassDesc.cDepthStencilAttachmentInfo.clearDepth = clearDepth;
 
-        utils::ComboRenderPipelineDescriptor2 renderPipelineDesc;
+        utils::ComboRenderPipelineDescriptor renderPipelineDesc;
         PopulatePipelineDescriptorWriteDepth(&renderPipelineDesc, wgpu::TextureFormat::Depth32Float,
                                              regionDepth);
 
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&renderPipelineDesc);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&renderPipelineDesc);
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = commandEncoder.BeginRenderPass(&renderPassDesc);
         pass.SetPipeline(pipeline);
@@ -128,12 +128,12 @@
         renderPassDesc.cDepthStencilAttachmentInfo.clearDepth = clearDepth;
         renderPassDesc.cDepthStencilAttachmentInfo.clearStencil = clearStencil;
 
-        utils::ComboRenderPipelineDescriptor2 renderPipelineDesc;
+        utils::ComboRenderPipelineDescriptor renderPipelineDesc;
         PopulatePipelineDescriptorWriteDepth(&renderPipelineDesc,
                                              wgpu::TextureFormat::Depth24PlusStencil8, regionDepth);
         renderPipelineDesc.cDepthStencil.stencilFront.passOp = wgpu::StencilOperation::Replace;
 
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&renderPipelineDesc);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&renderPipelineDesc);
 
         // Draw the quad (two triangles)
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
@@ -233,7 +233,7 @@
         commandEncoder.CopyBufferToTexture(&bufferCopy, &textureCopy, &depthDataDesc.size);
 
         // Pipeline for a full screen quad.
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
 
         pipelineDescriptor.vertex.module = utils::CreateShaderModule(device, R"(
             [[stage(vertex)]]
@@ -283,7 +283,7 @@
         passDescriptor.cDepthStencilAttachmentInfo.depthLoadOp = wgpu::LoadOp::Load;
         passDescriptor.cDepthStencilAttachmentInfo.stencilLoadOp = wgpu::LoadOp::Load;
 
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&pipelineDescriptor);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&pipelineDescriptor);
 
         // Bind the depth data texture.
         wgpu::BindGroup bindGroup = utils::MakeBindGroup(device, pipeline.GetBindGroupLayout(0),
@@ -642,7 +642,7 @@
         wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
         // Create a render pipline which decrements the stencil value for passing fragments.
         // A quad is drawn in the bottom left.
-        utils::ComboRenderPipelineDescriptor2 renderPipelineDesc;
+        utils::ComboRenderPipelineDescriptor renderPipelineDesc;
         renderPipelineDesc.vertex.module = mVertexModule;
         renderPipelineDesc.cFragment.module = utils::CreateShaderModule(device, R"(
             [[stage(fragment)]] fn main() {
@@ -652,7 +652,7 @@
         depthStencil->stencilFront.passOp = wgpu::StencilOperation::DecrementClamp;
         renderPipelineDesc.cFragment.targetCount = 0;
 
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&renderPipelineDesc);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&renderPipelineDesc);
 
         // Create a render pass which loads the stencil. We want to load the values we
         // copied in. Also load the canary depth values so they're not lost.
diff --git a/src/tests/end2end/DepthStencilSamplingTests.cpp b/src/tests/end2end/DepthStencilSamplingTests.cpp
index 41f83ca..9ecbbbe 100644
--- a/src/tests/end2end/DepthStencilSamplingTests.cpp
+++ b/src/tests/end2end/DepthStencilSamplingTests.cpp
@@ -70,7 +70,7 @@
                 return vec4<f32>(0.0, 0.0, 0.0, 1.0);
             })");
 
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
 
         std::ostringstream shaderSource;
         std::ostringstream shaderOutputStruct;
@@ -117,7 +117,7 @@
         pipelineDescriptor.primitive.topology = wgpu::PrimitiveTopology::PointList;
         pipelineDescriptor.cFragment.targetCount = static_cast<uint32_t>(aspects.size());
 
-        return device.CreateRenderPipeline2(&pipelineDescriptor);
+        return device.CreateRenderPipeline(&pipelineDescriptor);
     }
 
     wgpu::ComputePipeline CreateSamplingComputePipeline(std::vector<TestAspect> aspects,
@@ -199,14 +199,14 @@
                      {1, wgpu::ShaderStage::Fragment, wgpu::TextureSampleType::Depth},
                      {2, wgpu::ShaderStage::Fragment, wgpu::BufferBindingType::Uniform}});
 
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
         pipelineDescriptor.vertex.module = vsModule;
         pipelineDescriptor.cFragment.module = fsModule;
         pipelineDescriptor.layout = utils::MakeBasicPipelineLayout(device, &bgl);
         pipelineDescriptor.primitive.topology = wgpu::PrimitiveTopology::PointList;
         pipelineDescriptor.cTargets[0].format = wgpu::TextureFormat::R32Float;
 
-        return device.CreateRenderPipeline2(&pipelineDescriptor);
+        return device.CreateRenderPipeline(&pipelineDescriptor);
     }
 
     wgpu::ComputePipeline CreateComparisonComputePipeline() {
diff --git a/src/tests/end2end/DepthStencilStateTests.cpp b/src/tests/end2end/DepthStencilStateTests.cpp
index 5e41332..6e79a76 100644
--- a/src/tests/end2end/DepthStencilStateTests.cpp
+++ b/src/tests/end2end/DepthStencilStateTests.cpp
@@ -290,7 +290,7 @@
 
             // Create a pipeline for the triangles with the test spec's depth stencil state
 
-            utils::ComboRenderPipelineDescriptor2 descriptor;
+            utils::ComboRenderPipelineDescriptor descriptor;
             descriptor.vertex.module = vsModule;
             descriptor.cFragment.module = fsModule;
             wgpu::DepthStencilState* depthStencil = descriptor.EnableDepthStencil();
@@ -298,7 +298,7 @@
             depthStencil->format = wgpu::TextureFormat::Depth24PlusStencil8;
             descriptor.primitive.frontFace = test.frontFace;
 
-            wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&descriptor);
+            wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&descriptor);
 
             // Create a bind group for the data
             wgpu::BindGroup bindGroup = utils::MakeBindGroup(
@@ -732,12 +732,12 @@
     };
 
     for (wgpu::TextureFormat depthStencilFormat : kDepthStencilFormats) {
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.EnableDepthStencil(depthStencilFormat);
 
-        device.CreateRenderPipeline2(&descriptor);
+        device.CreateRenderPipeline(&descriptor);
     }
 }
 
diff --git a/src/tests/end2end/DestroyTests.cpp b/src/tests/end2end/DestroyTests.cpp
index b497e1c..19ef4b5 100644
--- a/src/tests/end2end/DestroyTests.cpp
+++ b/src/tests/end2end/DestroyTests.cpp
@@ -38,7 +38,7 @@
                   return vec4<f32>(0.0, 1.0, 0.0, 1.0);
               })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.primitive.topology = wgpu::PrimitiveTopology::TriangleList;
@@ -48,7 +48,7 @@
         descriptor.cAttributes[0].format = wgpu::VertexFormat::Float32x4;
         descriptor.cTargets[0].format = renderPass.colorFormat;
 
-        pipeline = device.CreateRenderPipeline2(&descriptor);
+        pipeline = device.CreateRenderPipeline(&descriptor);
 
         vertexBuffer = utils::CreateBufferFromData<float>(
             device, wgpu::BufferUsage::Vertex,
diff --git a/src/tests/end2end/DeviceLostTests.cpp b/src/tests/end2end/DeviceLostTests.cpp
index db6e28a..eb59ca0 100644
--- a/src/tests/end2end/DeviceLostTests.cpp
+++ b/src/tests/end2end/DeviceLostTests.cpp
@@ -177,8 +177,8 @@
 TEST_P(DeviceLostTest, CreateRenderPipelineFails) {
     SetCallbackAndLoseForTesting();
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
-    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+    utils::ComboRenderPipelineDescriptor descriptor;
+    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
 }
 
 // Tests that CreateSampler fails when device is lost
diff --git a/src/tests/end2end/DrawIndexedIndirectTests.cpp b/src/tests/end2end/DrawIndexedIndirectTests.cpp
index 0fc1211..44b8c07 100644
--- a/src/tests/end2end/DrawIndexedIndirectTests.cpp
+++ b/src/tests/end2end/DrawIndexedIndirectTests.cpp
@@ -37,7 +37,7 @@
                 return vec4<f32>(0.0, 1.0, 0.0, 1.0);
             })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.primitive.topology = wgpu::PrimitiveTopology::TriangleStrip;
@@ -48,7 +48,7 @@
         descriptor.cAttributes[0].format = wgpu::VertexFormat::Float32x4;
         descriptor.cTargets[0].format = renderPass.colorFormat;
 
-        pipeline = device.CreateRenderPipeline2(&descriptor);
+        pipeline = device.CreateRenderPipeline(&descriptor);
 
         vertexBuffer = utils::CreateBufferFromData<float>(
             device, wgpu::BufferUsage::Vertex,
diff --git a/src/tests/end2end/DrawIndexedTests.cpp b/src/tests/end2end/DrawIndexedTests.cpp
index e055e26..d94c095 100644
--- a/src/tests/end2end/DrawIndexedTests.cpp
+++ b/src/tests/end2end/DrawIndexedTests.cpp
@@ -37,7 +37,7 @@
                 return vec4<f32>(0.0, 1.0, 0.0, 1.0);
             })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.primitive.topology = wgpu::PrimitiveTopology::TriangleStrip;
@@ -48,7 +48,7 @@
         descriptor.cAttributes[0].format = wgpu::VertexFormat::Float32x4;
         descriptor.cTargets[0].format = renderPass.colorFormat;
 
-        pipeline = device.CreateRenderPipeline2(&descriptor);
+        pipeline = device.CreateRenderPipeline(&descriptor);
 
         vertexBuffer = utils::CreateBufferFromData<float>(
             device, wgpu::BufferUsage::Vertex,
diff --git a/src/tests/end2end/DrawIndirectTests.cpp b/src/tests/end2end/DrawIndirectTests.cpp
index 8cb9e57..dee14b6 100644
--- a/src/tests/end2end/DrawIndirectTests.cpp
+++ b/src/tests/end2end/DrawIndirectTests.cpp
@@ -37,7 +37,7 @@
                 return vec4<f32>(0.0, 1.0, 0.0, 1.0);
             })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.primitive.topology = wgpu::PrimitiveTopology::TriangleStrip;
@@ -48,7 +48,7 @@
         descriptor.cAttributes[0].format = wgpu::VertexFormat::Float32x4;
         descriptor.cTargets[0].format = renderPass.colorFormat;
 
-        pipeline = device.CreateRenderPipeline2(&descriptor);
+        pipeline = device.CreateRenderPipeline(&descriptor);
 
         vertexBuffer = utils::CreateBufferFromData<float>(
             device, wgpu::BufferUsage::Vertex,
diff --git a/src/tests/end2end/DrawTests.cpp b/src/tests/end2end/DrawTests.cpp
index eefd43e..251e999 100644
--- a/src/tests/end2end/DrawTests.cpp
+++ b/src/tests/end2end/DrawTests.cpp
@@ -37,7 +37,7 @@
                 return vec4<f32>(0.0, 1.0, 0.0, 1.0);
             })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.primitive.topology = wgpu::PrimitiveTopology::TriangleList;
@@ -47,7 +47,7 @@
         descriptor.cAttributes[0].format = wgpu::VertexFormat::Float32x4;
         descriptor.cTargets[0].format = renderPass.colorFormat;
 
-        pipeline = device.CreateRenderPipeline2(&descriptor);
+        pipeline = device.CreateRenderPipeline(&descriptor);
 
         vertexBuffer = utils::CreateBufferFromData<float>(
             device, wgpu::BufferUsage::Vertex,
diff --git a/src/tests/end2end/DynamicBufferOffsetTests.cpp b/src/tests/end2end/DynamicBufferOffsetTests.cpp
index c200f84..33de9ef 100644
--- a/src/tests/end2end/DynamicBufferOffsetTests.cpp
+++ b/src/tests/end2end/DynamicBufferOffsetTests.cpp
@@ -152,7 +152,7 @@
 
         wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, fs.str().c_str());
 
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
         pipelineDescriptor.vertex.module = vsModule;
         pipelineDescriptor.cFragment.module = fsModule;
         pipelineDescriptor.cTargets[0].format = wgpu::TextureFormat::RGBA8Unorm;
@@ -166,7 +166,7 @@
         pipelineLayoutDescriptor.bindGroupLayouts = mBindGroupLayouts;
         pipelineDescriptor.layout = device.CreatePipelineLayout(&pipelineLayoutDescriptor);
 
-        return device.CreateRenderPipeline2(&pipelineDescriptor);
+        return device.CreateRenderPipeline(&pipelineDescriptor);
     }
 
     wgpu::ComputePipeline CreateComputePipeline(bool isInheritedPipeline = false) {
diff --git a/src/tests/end2end/EntryPointTests.cpp b/src/tests/end2end/EntryPointTests.cpp
index 0c4dedc..037d6ed 100644
--- a/src/tests/end2end/EntryPointTests.cpp
+++ b/src/tests/end2end/EntryPointTests.cpp
@@ -34,14 +34,14 @@
     )");
 
     // Create a point pipeline from the module.
-    utils::ComboRenderPipelineDescriptor2 desc;
+    utils::ComboRenderPipelineDescriptor desc;
     desc.vertex.module = module;
     desc.vertex.entryPoint = "vertex_main";
     desc.cFragment.module = module;
     desc.cFragment.entryPoint = "fragment_main";
     desc.cTargets[0].format = wgpu::TextureFormat::RGBA8Unorm;
     desc.primitive.topology = wgpu::PrimitiveTopology::PointList;
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&desc);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&desc);
 
     // Render the point and check that it was rendered.
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, 1, 1);
diff --git a/src/tests/end2end/FirstIndexOffsetTests.cpp b/src/tests/end2end/FirstIndexOffsetTests.cpp
index 680cd17..bdbe91a 100644
--- a/src/tests/end2end/FirstIndexOffsetTests.cpp
+++ b/src/tests/end2end/FirstIndexOffsetTests.cpp
@@ -145,7 +145,7 @@
 
     constexpr uint32_t kComponentsPerVertex = 4;
 
-    utils::ComboRenderPipelineDescriptor2 pipelineDesc;
+    utils::ComboRenderPipelineDescriptor pipelineDesc;
     pipelineDesc.vertex.module = utils::CreateShaderModule(device, vertexShader.c_str());
     pipelineDesc.cFragment.module = utils::CreateShaderModule(device, fragmentShader.c_str());
     pipelineDesc.primitive.topology = wgpu::PrimitiveTopology::PointList;
@@ -155,7 +155,7 @@
     pipelineDesc.cAttributes[0].format = wgpu::VertexFormat::Float32x4;
     pipelineDesc.cTargets[0].format = renderPass.colorFormat;
 
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&pipelineDesc);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&pipelineDesc);
 
     std::vector<float> vertexData(firstVertex * kComponentsPerVertex);
     vertexData.insert(vertexData.end(), {0, 0, 0, 1});
diff --git a/src/tests/end2end/GpuMemorySynchronizationTests.cpp b/src/tests/end2end/GpuMemorySynchronizationTests.cpp
index 674eb6f..82e0420 100644
--- a/src/tests/end2end/GpuMemorySynchronizationTests.cpp
+++ b/src/tests/end2end/GpuMemorySynchronizationTests.cpp
@@ -72,13 +72,13 @@
                 return vec4<f32>(f32(data.i) / 255.0, 0.0, 0.0, 1.0);
             })");
 
-        utils::ComboRenderPipelineDescriptor2 rpDesc;
+        utils::ComboRenderPipelineDescriptor rpDesc;
         rpDesc.vertex.module = vsModule;
         rpDesc.cFragment.module = fsModule;
         rpDesc.primitive.topology = wgpu::PrimitiveTopology::PointList;
         rpDesc.cTargets[0].format = colorFormat;
 
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&rpDesc);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&rpDesc);
 
         wgpu::BindGroup bindGroup =
             utils::MakeBindGroup(device, pipeline.GetBindGroupLayout(0), {{0, buffer}});
@@ -347,13 +347,13 @@
                 return vec4<f32>(contents.color, 0.0, 0.0, 1.0);
             })");
 
-        utils::ComboRenderPipelineDescriptor2 rpDesc;
+        utils::ComboRenderPipelineDescriptor rpDesc;
         rpDesc.vertex.module = vsModule;
         rpDesc.cFragment.module = fsModule;
         rpDesc.primitive.topology = wgpu::PrimitiveTopology::PointList;
         rpDesc.cTargets[0].format = colorFormat;
 
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&rpDesc);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&rpDesc);
 
         wgpu::BindGroup bindGroup =
             utils::MakeBindGroup(device, pipeline.GetBindGroupLayout(0), {{0, mBuffer}});
@@ -589,7 +589,7 @@
 
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
-    utils::ComboRenderPipelineDescriptor2 rpDesc;
+    utils::ComboRenderPipelineDescriptor rpDesc;
     rpDesc.vertex.module = vsModule;
     rpDesc.cFragment.module = fsModule;
     rpDesc.primitive.topology = wgpu::PrimitiveTopology::TriangleList;
@@ -599,7 +599,7 @@
     rpDesc.cAttributes[0].format = wgpu::VertexFormat::Float32x4;
     rpDesc.cTargets[0].format = renderPass.colorFormat;
 
-    wgpu::RenderPipeline rp = device.CreateRenderPipeline2(&rpDesc);
+    wgpu::RenderPipeline rp = device.CreateRenderPipeline(&rpDesc);
 
     wgpu::BindGroup bindGroup1 = utils::MakeBindGroup(device, rp.GetBindGroupLayout(0),
                                                       {{0, uniformBuffer}, {1, storageBuffer}});
@@ -704,7 +704,7 @@
 
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
-    utils::ComboRenderPipelineDescriptor2 rpDesc;
+    utils::ComboRenderPipelineDescriptor rpDesc;
     rpDesc.vertex.module = vsModule;
     rpDesc.cFragment.module = fsModule;
     rpDesc.primitive.topology = wgpu::PrimitiveTopology::TriangleList;
@@ -714,7 +714,7 @@
     rpDesc.cAttributes[0].format = wgpu::VertexFormat::Float32x4;
     rpDesc.cTargets[0].format = renderPass.colorFormat;
 
-    wgpu::RenderPipeline rp = device.CreateRenderPipeline2(&rpDesc);
+    wgpu::RenderPipeline rp = device.CreateRenderPipeline(&rpDesc);
 
     wgpu::BindGroup bindGroup1 =
         utils::MakeBindGroup(device, rp.GetBindGroupLayout(0),
diff --git a/src/tests/end2end/IOSurfaceWrappingTests.cpp b/src/tests/end2end/IOSurfaceWrappingTests.cpp
index df9417c..23a4fc0 100644
--- a/src/tests/end2end/IOSurfaceWrappingTests.cpp
+++ b/src/tests/end2end/IOSurfaceWrappingTests.cpp
@@ -287,12 +287,12 @@
                 }
             )");
 
-            utils::ComboRenderPipelineDescriptor2 descriptor;
+            utils::ComboRenderPipelineDescriptor descriptor;
             descriptor.vertex.module = vs;
             descriptor.cFragment.module = fs;
             descriptor.cTargets[0].format = wgpu::TextureFormat::RGBA8Unorm;
 
-            pipeline = device.CreateRenderPipeline2(&descriptor);
+            pipeline = device.CreateRenderPipeline(&descriptor);
         }
 
         // The bindgroup containing the texture view for the ioSurface as well as the sampler.
diff --git a/src/tests/end2end/IndexFormatTests.cpp b/src/tests/end2end/IndexFormatTests.cpp
index ae4a12e..22b1d49 100644
--- a/src/tests/end2end/IndexFormatTests.cpp
+++ b/src/tests/end2end/IndexFormatTests.cpp
@@ -51,7 +51,7 @@
                 return vec4<f32>(0.0, 1.0, 0.0, 1.0);
             })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.primitive.topology = primitiveTopology;
@@ -62,7 +62,7 @@
         descriptor.cAttributes[0].format = wgpu::VertexFormat::Float32x4;
         descriptor.cTargets[0].format = renderPass.colorFormat;
 
-        return device.CreateRenderPipeline2(&descriptor);
+        return device.CreateRenderPipeline(&descriptor);
     }
 };
 
diff --git a/src/tests/end2end/MultisampledRenderingTests.cpp b/src/tests/end2end/MultisampledRenderingTests.cpp
index c252e75..0022162 100644
--- a/src/tests/end2end/MultisampledRenderingTests.cpp
+++ b/src/tests/end2end/MultisampledRenderingTests.cpp
@@ -218,7 +218,7 @@
                                                      uint32_t sampleMask = 0xFFFFFFFF,
                                                      bool alphaToCoverageEnabled = false,
                                                      bool flipTriangle = false) {
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
 
         // Draw a bottom-right triangle. In standard 4xMSAA pattern, for the pixels on diagonal,
         // only two of the samples will be touched.
@@ -269,7 +269,7 @@
             pipelineDescriptor.cTargets[i].format = kColorFormat;
         }
 
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&pipelineDescriptor);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&pipelineDescriptor);
         return pipeline;
     }
 
diff --git a/src/tests/end2end/MultisampledSamplingTests.cpp b/src/tests/end2end/MultisampledSamplingTests.cpp
index 5fec69f..055f2c1 100644
--- a/src/tests/end2end/MultisampledSamplingTests.cpp
+++ b/src/tests/end2end/MultisampledSamplingTests.cpp
@@ -51,7 +51,7 @@
         DawnTest::SetUp();
 
         {
-            utils::ComboRenderPipelineDescriptor2 desc;
+            utils::ComboRenderPipelineDescriptor desc;
 
             desc.vertex.module = utils::CreateShaderModule(device, R"(
                 [[stage(vertex)]]
@@ -87,7 +87,7 @@
 
             desc.primitive.topology = wgpu::PrimitiveTopology::TriangleStrip;
 
-            drawPipeline = device.CreateRenderPipeline2(&desc);
+            drawPipeline = device.CreateRenderPipeline(&desc);
         }
         {
             wgpu::ComputePipelineDescriptor desc = {};
diff --git a/src/tests/end2end/ObjectCachingTests.cpp b/src/tests/end2end/ObjectCachingTests.cpp
index 630437c..35f3528 100644
--- a/src/tests/end2end/ObjectCachingTests.cpp
+++ b/src/tests/end2end/ObjectCachingTests.cpp
@@ -207,7 +207,7 @@
     EXPECT_NE(pl.Get(), otherPl.Get());
     EXPECT_EQ(pl.Get() == samePl.Get(), !UsesWire());
 
-    utils::ComboRenderPipelineDescriptor2 desc;
+    utils::ComboRenderPipelineDescriptor desc;
     desc.vertex.module = utils::CreateShaderModule(device, R"(
         [[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
             return vec4<f32>(0.0, 0.0, 0.0, 0.0);
@@ -217,13 +217,13 @@
         })");
 
     desc.layout = pl;
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&desc);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&desc);
 
     desc.layout = samePl;
-    wgpu::RenderPipeline samePipeline = device.CreateRenderPipeline2(&desc);
+    wgpu::RenderPipeline samePipeline = device.CreateRenderPipeline(&desc);
 
     desc.layout = otherPl;
-    wgpu::RenderPipeline otherPipeline = device.CreateRenderPipeline2(&desc);
+    wgpu::RenderPipeline otherPipeline = device.CreateRenderPipeline(&desc);
 
     EXPECT_NE(pipeline.Get(), otherPipeline.Get());
     EXPECT_EQ(pipeline.Get() == samePipeline.Get(), !UsesWire());
@@ -247,19 +247,19 @@
     EXPECT_NE(module.Get(), otherModule.Get());
     EXPECT_EQ(module.Get() == sameModule.Get(), !UsesWire());
 
-    utils::ComboRenderPipelineDescriptor2 desc;
+    utils::ComboRenderPipelineDescriptor desc;
     desc.cFragment.module = utils::CreateShaderModule(device, R"(
             [[stage(fragment)]] fn main() {
             })");
 
     desc.vertex.module = module;
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&desc);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&desc);
 
     desc.vertex.module = sameModule;
-    wgpu::RenderPipeline samePipeline = device.CreateRenderPipeline2(&desc);
+    wgpu::RenderPipeline samePipeline = device.CreateRenderPipeline(&desc);
 
     desc.vertex.module = otherModule;
-    wgpu::RenderPipeline otherPipeline = device.CreateRenderPipeline2(&desc);
+    wgpu::RenderPipeline otherPipeline = device.CreateRenderPipeline(&desc);
 
     EXPECT_NE(pipeline.Get(), otherPipeline.Get());
     EXPECT_EQ(pipeline.Get() == samePipeline.Get(), !UsesWire());
@@ -281,20 +281,20 @@
     EXPECT_NE(module.Get(), otherModule.Get());
     EXPECT_EQ(module.Get() == sameModule.Get(), !UsesWire());
 
-    utils::ComboRenderPipelineDescriptor2 desc;
+    utils::ComboRenderPipelineDescriptor desc;
     desc.vertex.module = utils::CreateShaderModule(device, R"(
         [[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
             return vec4<f32>(0.0, 0.0, 0.0, 0.0);
         })");
 
     desc.cFragment.module = module;
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&desc);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&desc);
 
     desc.cFragment.module = sameModule;
-    wgpu::RenderPipeline samePipeline = device.CreateRenderPipeline2(&desc);
+    wgpu::RenderPipeline samePipeline = device.CreateRenderPipeline(&desc);
 
     desc.cFragment.module = otherModule;
-    wgpu::RenderPipeline otherPipeline = device.CreateRenderPipeline2(&desc);
+    wgpu::RenderPipeline otherPipeline = device.CreateRenderPipeline(&desc);
 
     EXPECT_NE(pipeline.Get(), otherPipeline.Get());
     EXPECT_EQ(pipeline.Get() == samePipeline.Get(), !UsesWire());
diff --git a/src/tests/end2end/OpArrayLengthTests.cpp b/src/tests/end2end/OpArrayLengthTests.cpp
index f8f13e0..3f362f6 100644
--- a/src/tests/end2end/OpArrayLengthTests.cpp
+++ b/src/tests/end2end/OpArrayLengthTests.cpp
@@ -180,13 +180,13 @@
         })")
                                                                         .c_str());
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.vertex.module = vsModule;
     descriptor.cFragment.module = fsModule;
     descriptor.primitive.topology = wgpu::PrimitiveTopology::PointList;
     descriptor.cTargets[0].format = renderPass.colorFormat;
     descriptor.layout = utils::MakeBasicPipelineLayout(device, &mBindGroupLayout);
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&descriptor);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&descriptor);
 
     // "Draw" the lengths to the texture.
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
@@ -241,13 +241,13 @@
             return color;
         })");
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.vertex.module = vsModule;
     descriptor.cFragment.module = fsModule;
     descriptor.primitive.topology = wgpu::PrimitiveTopology::PointList;
     descriptor.cTargets[0].format = renderPass.colorFormat;
     descriptor.layout = utils::MakeBasicPipelineLayout(device, &mBindGroupLayout);
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&descriptor);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&descriptor);
 
     // "Draw" the lengths to the texture.
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
diff --git a/src/tests/end2end/PrimitiveStateTests.cpp b/src/tests/end2end/PrimitiveStateTests.cpp
index 6b67390..8fc5c78 100644
--- a/src/tests/end2end/PrimitiveStateTests.cpp
+++ b/src/tests/end2end/PrimitiveStateTests.cpp
@@ -109,7 +109,7 @@
                                                               wgpu::BufferUsage::Uniform);
 
             // Create a pipeline for the triangles with the test spec's params.
-            utils::ComboRenderPipelineDescriptor2 descriptor;
+            utils::ComboRenderPipelineDescriptor descriptor;
             descriptor.primitive.nextInChain = test.depthClampingState;
             descriptor.primitive.topology = wgpu::PrimitiveTopology::PointList;
             descriptor.vertex.module = vsModule;
@@ -119,7 +119,7 @@
             depthStencil->depthCompare = test.depthCompareFunction;
             depthStencil->format = wgpu::TextureFormat::Depth24PlusStencil8;
 
-            wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&descriptor);
+            wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&descriptor);
 
             // Create a bind group for the data
             wgpu::BindGroup bindGroup = utils::MakeBindGroup(
diff --git a/src/tests/end2end/PrimitiveTopologyTests.cpp b/src/tests/end2end/PrimitiveTopologyTests.cpp
index adb7dc6..c8ca16a 100644
--- a/src/tests/end2end/PrimitiveTopologyTests.cpp
+++ b/src/tests/end2end/PrimitiveTopologyTests.cpp
@@ -183,7 +183,7 @@
     // locations
     void DoTest(wgpu::PrimitiveTopology primitiveTopology,
                 const std::vector<LocationSpec>& locationSpecs) {
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
 
@@ -199,7 +199,7 @@
         descriptor.cAttributes[0].format = wgpu::VertexFormat::Float32x4;
         descriptor.cTargets[0].format = renderPass.colorFormat;
 
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&descriptor);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&descriptor);
 
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         {
diff --git a/src/tests/end2end/QueryTests.cpp b/src/tests/end2end/QueryTests.cpp
index bd88483..bd3a6ec 100644
--- a/src/tests/end2end/QueryTests.cpp
+++ b/src/tests/end2end/QueryTests.cpp
@@ -95,11 +95,11 @@
                 return vec4<f32>(0.0, 1.0, 0.0, 1.0);
             })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
 
-        pipeline = device.CreateRenderPipeline2(&descriptor);
+        pipeline = device.CreateRenderPipeline(&descriptor);
     }
 
     struct ScissorRect {
@@ -129,7 +129,7 @@
                                                 OcclusionExpectation::Result expected) {
         constexpr uint32_t kQueryCount = 1;
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
 
@@ -143,7 +143,7 @@
         depthStencil->stencilBack.compare =
             stencilTestEnabled ? wgpu::CompareFunction::Never : wgpu::CompareFunction::Always;
 
-        wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline2(&descriptor);
+        wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline(&descriptor);
 
         wgpu::Texture renderTarget = CreateRenderTexture(wgpu::TextureFormat::RGBA8Unorm);
         wgpu::TextureView renderTargetView = renderTarget.CreateView();
diff --git a/src/tests/end2end/RenderBundleTests.cpp b/src/tests/end2end/RenderBundleTests.cpp
index d1ddb16..723002b 100644
--- a/src/tests/end2end/RenderBundleTests.cpp
+++ b/src/tests/end2end/RenderBundleTests.cpp
@@ -47,7 +47,7 @@
                 return fragmentUniformBuffer.color;
             })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.primitive.topology = wgpu::PrimitiveTopology::TriangleList;
@@ -57,7 +57,7 @@
         descriptor.cAttributes[0].format = wgpu::VertexFormat::Float32x4;
         descriptor.cTargets[0].format = renderPass.colorFormat;
 
-        pipeline = device.CreateRenderPipeline2(&descriptor);
+        pipeline = device.CreateRenderPipeline(&descriptor);
 
         float colors0[] = {kColors[0].r / 255.f, kColors[0].g / 255.f, kColors[0].b / 255.f,
                            kColors[0].a / 255.f};
diff --git a/src/tests/end2end/RenderPassLoadOpTests.cpp b/src/tests/end2end/RenderPassLoadOpTests.cpp
index f6dc853..07c14e8 100644
--- a/src/tests/end2end/RenderPassLoadOpTests.cpp
+++ b/src/tests/end2end/RenderPassLoadOpTests.cpp
@@ -33,12 +33,12 @@
     }
 
     void Draw(wgpu::RenderPassEncoder* pass) {
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.layout = pipelineLayout;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
 
-        auto renderPipeline = device.CreateRenderPipeline2(&descriptor);
+        auto renderPipeline = device.CreateRenderPipeline(&descriptor);
 
         pass->SetPipeline(renderPipeline);
         pass->Draw(6, 1, 0, 0);
diff --git a/src/tests/end2end/RenderPassTests.cpp b/src/tests/end2end/RenderPassTests.cpp
index 896f3d5..12d4fe5 100644
--- a/src/tests/end2end/RenderPassTests.cpp
+++ b/src/tests/end2end/RenderPassTests.cpp
@@ -42,13 +42,13 @@
                 return vec4<f32>(0.0, 0.0, 1.0, 1.0);
             })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = mVSModule;
         descriptor.cFragment.module = fsModule;
         descriptor.primitive.topology = wgpu::PrimitiveTopology::TriangleList;
         descriptor.cTargets[0].format = kFormat;
 
-        pipeline = device.CreateRenderPipeline2(&descriptor);
+        pipeline = device.CreateRenderPipeline(&descriptor);
     }
 
     wgpu::Texture CreateDefault2DTexture() {
@@ -140,14 +140,14 @@
         wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
             [[stage(fragment)]] fn main() {
             })");
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = mVSModule;
         descriptor.cFragment.module = fsModule;
         descriptor.primitive.topology = wgpu::PrimitiveTopology::TriangleList;
         descriptor.cTargets[0].format = kFormat;
 
         wgpu::RenderPipeline pipelineWithNoFragmentOutput =
-            device.CreateRenderPipeline2(&descriptor);
+            device.CreateRenderPipeline(&descriptor);
 
         pass.SetPipeline(pipelineWithNoFragmentOutput);
         pass.Draw(3);
diff --git a/src/tests/end2end/SamplerFilterAnisotropicTests.cpp b/src/tests/end2end/SamplerFilterAnisotropicTests.cpp
index 79c4bd9..b0f11ea 100644
--- a/src/tests/end2end/SamplerFilterAnisotropicTests.cpp
+++ b/src/tests/end2end/SamplerFilterAnisotropicTests.cpp
@@ -76,7 +76,7 @@
                 return textureSample(texture0, sampler0, input.uv);
             })");
 
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
         pipelineDescriptor.vertex.module = vsModule;
         pipelineDescriptor.cFragment.module = fsModule;
         pipelineDescriptor.cBuffers[0].attributeCount = 2;
@@ -88,7 +88,7 @@
         pipelineDescriptor.cBuffers[0].arrayStride = 6 * sizeof(float);
         pipelineDescriptor.cTargets[0].format = mRenderPass.colorFormat;
 
-        mPipeline = device.CreateRenderPipeline2(&pipelineDescriptor);
+        mPipeline = device.CreateRenderPipeline(&pipelineDescriptor);
         mBindGroupLayout = mPipeline.GetBindGroupLayout(0);
 
         InitTexture();
diff --git a/src/tests/end2end/SamplerTests.cpp b/src/tests/end2end/SamplerTests.cpp
index 4c53ecd..77bf89d 100644
--- a/src/tests/end2end/SamplerTests.cpp
+++ b/src/tests/end2end/SamplerTests.cpp
@@ -76,12 +76,12 @@
                 return textureSample(texture0, sampler0, FragCoord.xy / vec2<f32>(2.0, 2.0));
             })");
 
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
         pipelineDescriptor.vertex.module = vsModule;
         pipelineDescriptor.cFragment.module = fsModule;
         pipelineDescriptor.cTargets[0].format = mRenderPass.colorFormat;
 
-        mPipeline = device.CreateRenderPipeline2(&pipelineDescriptor);
+        mPipeline = device.CreateRenderPipeline(&pipelineDescriptor);
         mBindGroupLayout = mPipeline.GetBindGroupLayout(0);
 
         wgpu::TextureDescriptor descriptor;
diff --git a/src/tests/end2end/ScissorTests.cpp b/src/tests/end2end/ScissorTests.cpp
index b3bcf39..3edf298 100644
--- a/src/tests/end2end/ScissorTests.cpp
+++ b/src/tests/end2end/ScissorTests.cpp
@@ -39,12 +39,12 @@
                 return vec4<f32>(0.0, 1.0, 0.0, 1.0);
             })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.cTargets[0].format = format;
 
-        return device.CreateRenderPipeline2(&descriptor);
+        return device.CreateRenderPipeline(&descriptor);
     }
 };
 
diff --git a/src/tests/end2end/ShaderTests.cpp b/src/tests/end2end/ShaderTests.cpp
index bbdab96..380d39f 100644
--- a/src/tests/end2end/ShaderTests.cpp
+++ b/src/tests/end2end/ShaderTests.cpp
@@ -116,10 +116,10 @@
 })";
     wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, fragmentShader.c_str());
 
-    utils::ComboRenderPipelineDescriptor2 rpDesc;
+    utils::ComboRenderPipelineDescriptor rpDesc;
     rpDesc.vertex.module = vsModule;
     rpDesc.cFragment.module = fsModule;
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&rpDesc);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&rpDesc);
 }
 
 // Tests that a vertex shader using struct function parameters and return values for shader stage
@@ -152,7 +152,7 @@
 })";
     wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, fragmentShader.c_str());
 
-    utils::ComboRenderPipelineDescriptor2 rpDesc;
+    utils::ComboRenderPipelineDescriptor rpDesc;
     rpDesc.vertex.module = vsModule;
     rpDesc.cFragment.module = fsModule;
     rpDesc.vertex.bufferCount = 1;
@@ -162,7 +162,7 @@
     rpDesc.cAttributes[0].format = wgpu::VertexFormat::Float32x3;
     rpDesc.cAttributes[1].shaderLocation = 1;
     rpDesc.cAttributes[1].format = wgpu::VertexFormat::Float32x4;
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&rpDesc);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&rpDesc);
 }
 
 // Tests that shaders using struct function parameters and return values for shader stage I/O
@@ -200,7 +200,7 @@
 })";
     wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, fragmentShader.c_str());
 
-    utils::ComboRenderPipelineDescriptor2 rpDesc;
+    utils::ComboRenderPipelineDescriptor rpDesc;
     rpDesc.vertex.module = vsModule;
     rpDesc.cFragment.module = fsModule;
     rpDesc.vertex.bufferCount = 1;
@@ -210,7 +210,7 @@
     rpDesc.cAttributes[0].format = wgpu::VertexFormat::Float32x3;
     rpDesc.cAttributes[1].shaderLocation = 1;
     rpDesc.cAttributes[1].format = wgpu::VertexFormat::Float32x4;
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&rpDesc);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&rpDesc);
 }
 
 // Tests that shaders I/O structs that us compatible locations but are not sorted by hand can link.
@@ -247,7 +247,7 @@
 })";
     wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, fragmentShader.c_str());
 
-    utils::ComboRenderPipelineDescriptor2 rpDesc;
+    utils::ComboRenderPipelineDescriptor rpDesc;
     rpDesc.vertex.module = vsModule;
     rpDesc.cFragment.module = fsModule;
     rpDesc.vertex.bufferCount = 1;
@@ -257,7 +257,7 @@
     rpDesc.cAttributes[0].format = wgpu::VertexFormat::Float32x3;
     rpDesc.cAttributes[1].shaderLocation = 1;
     rpDesc.cAttributes[1].format = wgpu::VertexFormat::Float32x4;
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&rpDesc);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&rpDesc);
 }
 
 // Tests that shaders I/O structs can be shared between vertex and fragment shaders.
@@ -290,7 +290,7 @@
 })";
     wgpu::ShaderModule shaderModule = utils::CreateShaderModule(device, shader.c_str());
 
-    utils::ComboRenderPipelineDescriptor2 rpDesc;
+    utils::ComboRenderPipelineDescriptor rpDesc;
     rpDesc.vertex.module = shaderModule;
     rpDesc.vertex.entryPoint = "vertexMain";
     rpDesc.cFragment.module = shaderModule;
@@ -302,7 +302,7 @@
     rpDesc.cAttributes[0].format = wgpu::VertexFormat::Float32x3;
     rpDesc.cAttributes[1].shaderLocation = 1;
     rpDesc.cAttributes[1].format = wgpu::VertexFormat::Float32x4;
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&rpDesc);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&rpDesc);
 }
 
 DAWN_INSTANTIATE_TEST(ShaderTests,
diff --git a/src/tests/end2end/StorageTextureTests.cpp b/src/tests/end2end/StorageTextureTests.cpp
index e6a1744a..9c82c72 100644
--- a/src/tests/end2end/StorageTextureTests.cpp
+++ b/src/tests/end2end/StorageTextureTests.cpp
@@ -474,12 +474,12 @@
         wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, vertexShader);
         wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, fragmentShader);
 
-        utils::ComboRenderPipelineDescriptor2 desc;
+        utils::ComboRenderPipelineDescriptor desc;
         desc.vertex.module = vsModule;
         desc.cFragment.module = fsModule;
         desc.cTargets[0].format = kRenderAttachmentFormat;
         desc.primitive.topology = wgpu::PrimitiveTopology::PointList;
-        return device.CreateRenderPipeline2(&desc);
+        return device.CreateRenderPipeline(&desc);
     }
 
     void CheckDrawsGreen(const char* vertexShader,
diff --git a/src/tests/end2end/SwapChainValidationTests.cpp b/src/tests/end2end/SwapChainValidationTests.cpp
index 16c98f6..8eeaf4e 100644
--- a/src/tests/end2end/SwapChainValidationTests.cpp
+++ b/src/tests/end2end/SwapChainValidationTests.cpp
@@ -220,7 +220,7 @@
 
 // Check that returned view is of the current format / usage / dimension / size / sample count
 TEST_P(SwapChainValidationTests, ReturnedViewCharacteristics) {
-    utils::ComboRenderPipelineDescriptor2 pipelineDesc;
+    utils::ComboRenderPipelineDescriptor pipelineDesc;
     pipelineDesc.vertex.module = utils::CreateShaderModule(device, R"(
         [[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
             return vec4<f32>(0.0, 0.0, 0.0, 1.0);
@@ -235,7 +235,7 @@
     // Validation will check that the format of the view matches this format.
     pipelineDesc.cTargets[0].format = wgpu::TextureFormat::BGRA8Unorm;
     pipelineDesc.cTargets[1].format = wgpu::TextureFormat::R8Unorm;
-    device.CreateRenderPipeline2(&pipelineDesc);
+    device.CreateRenderPipeline(&pipelineDesc);
 
     // Create a second texture to be used as render pass attachment. Validation will check that the
     // size of the view matches the size of this texture.
diff --git a/src/tests/end2end/TextureFormatTests.cpp b/src/tests/end2end/TextureFormatTests.cpp
index 8899e39..59fa6df 100644
--- a/src/tests/end2end/TextureFormatTests.cpp
+++ b/src/tests/end2end/TextureFormatTests.cpp
@@ -140,7 +140,7 @@
     // bindgroup and output its decompressed values to the render target.
     wgpu::RenderPipeline CreateSamplePipeline(FormatTestInfo sampleFormatInfo,
                                               FormatTestInfo renderFormatInfo) {
-        utils::ComboRenderPipelineDescriptor2 desc;
+        utils::ComboRenderPipelineDescriptor desc;
 
         wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
             [[stage(vertex)]]
@@ -174,7 +174,7 @@
         desc.cFragment.module = fsModule;
         desc.cTargets[0].format = renderFormatInfo.format;
 
-        return device.CreateRenderPipeline2(&desc);
+        return device.CreateRenderPipeline(&desc);
     }
 
     // The sampling test uploads the sample data in a texture with the sampleFormatInfo.format.
diff --git a/src/tests/end2end/TextureSubresourceTests.cpp b/src/tests/end2end/TextureSubresourceTests.cpp
index 3f37b0f..e585d0b 100644
--- a/src/tests/end2end/TextureSubresourceTests.cpp
+++ b/src/tests/end2end/TextureSubresourceTests.cpp
@@ -65,13 +65,13 @@
                 return vec4<f32>(1.0, 0.0, 0.0, 1.0);
             })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.primitive.topology = wgpu::PrimitiveTopology::TriangleList;
         descriptor.cTargets[0].format = kFormat;
 
-        wgpu::RenderPipeline rp = device.CreateRenderPipeline2(&descriptor);
+        wgpu::RenderPipeline rp = device.CreateRenderPipeline(&descriptor);
 
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
 
@@ -109,7 +109,7 @@
                 return textureSample(tex, samp, FragCoord.xy / vec2<f32>(4.0, 4.0));
             })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.primitive.topology = wgpu::PrimitiveTopology::TriangleList;
@@ -117,7 +117,7 @@
 
         wgpu::Sampler sampler = device.CreateSampler();
 
-        wgpu::RenderPipeline rp = device.CreateRenderPipeline2(&descriptor);
+        wgpu::RenderPipeline rp = device.CreateRenderPipeline(&descriptor);
         wgpu::BindGroupLayout bgl = rp.GetBindGroupLayout(0);
         wgpu::BindGroup bindGroup =
             utils::MakeBindGroup(device, bgl, {{0, sampler}, {1, samplerView}});
diff --git a/src/tests/end2end/TextureViewTests.cpp b/src/tests/end2end/TextureViewTests.cpp
index 1b137f7..229c862 100644
--- a/src/tests/end2end/TextureViewTests.cpp
+++ b/src/tests/end2end/TextureViewTests.cpp
@@ -170,12 +170,12 @@
     void Verify(const wgpu::TextureView& textureView, const char* fragmentShader, int expected) {
         wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, fragmentShader);
 
-        utils::ComboRenderPipelineDescriptor2 textureDescriptor;
+        utils::ComboRenderPipelineDescriptor textureDescriptor;
         textureDescriptor.vertex.module = mVSModule;
         textureDescriptor.cFragment.module = fsModule;
         textureDescriptor.cTargets[0].format = mRenderPass.colorFormat;
 
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&textureDescriptor);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&textureDescriptor);
 
         wgpu::BindGroup bindGroup = utils::MakeBindGroup(device, pipeline.GetBindGroupLayout(0),
                                                          {{0, mSampler}, {1, textureView}});
@@ -503,12 +503,12 @@
         wgpu::ShaderModule oneColorFsModule =
             utils::CreateShaderModule(device, oneColorFragmentShader);
 
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
         pipelineDescriptor.vertex.module = vsModule;
         pipelineDescriptor.cFragment.module = oneColorFsModule;
         pipelineDescriptor.cTargets[0].format = kDefaultFormat;
 
-        wgpu::RenderPipeline oneColorPipeline = device.CreateRenderPipeline2(&pipelineDescriptor);
+        wgpu::RenderPipeline oneColorPipeline = device.CreateRenderPipeline(&pipelineDescriptor);
 
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         {
diff --git a/src/tests/end2end/TextureZeroInitTests.cpp b/src/tests/end2end/TextureZeroInitTests.cpp
index 2459ce1..938c9ec 100644
--- a/src/tests/end2end/TextureZeroInitTests.cpp
+++ b/src/tests/end2end/TextureZeroInitTests.cpp
@@ -66,7 +66,7 @@
         return descriptor;
     }
     wgpu::RenderPipeline CreatePipelineForTest(float depth = 0.f) {
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
         pipelineDescriptor.vertex.module = CreateBasicVertexShaderForTest(depth);
         const char* fs = R"(
             ;
@@ -79,7 +79,7 @@
         depthStencil->depthCompare = wgpu::CompareFunction::Equal;
         depthStencil->stencilFront.compare = wgpu::CompareFunction::Equal;
 
-        return device.CreateRenderPipeline2(&pipelineDescriptor);
+        return device.CreateRenderPipeline(&pipelineDescriptor);
     }
     wgpu::ShaderModule CreateBasicVertexShaderForTest(float depth = 0.f) {
         std::string source = R"(
@@ -857,11 +857,11 @@
     wgpu::Texture renderTexture = device.CreateTexture(&renderTextureDescriptor);
 
     // Create render pipeline
-    utils::ComboRenderPipelineDescriptor2 renderPipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor renderPipelineDescriptor;
     renderPipelineDescriptor.cTargets[0].format = kColorFormat;
     renderPipelineDescriptor.vertex.module = CreateBasicVertexShaderForTest();
     renderPipelineDescriptor.cFragment.module = CreateSampledTextureFragmentShaderForTest();
-    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline2(&renderPipelineDescriptor);
+    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline(&renderPipelineDescriptor);
 
     // Create bindgroup
     wgpu::BindGroup bindGroup = utils::MakeBindGroup(device, renderPipeline.GetBindGroupLayout(0),
@@ -916,11 +916,11 @@
     wgpu::TextureView sampleView = texture.CreateView(&viewDesc);
 
     // Create render pipeline
-    utils::ComboRenderPipelineDescriptor2 renderPipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor renderPipelineDescriptor;
     renderPipelineDescriptor.cTargets[0].format = wgpu::TextureFormat::RGBA8Unorm;
     renderPipelineDescriptor.vertex.module = CreateBasicVertexShaderForTest();
     renderPipelineDescriptor.cFragment.module = CreateSampledTextureFragmentShaderForTest();
-    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline2(&renderPipelineDescriptor);
+    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline(&renderPipelineDescriptor);
 
     wgpu::BindGroup bindGroup =
         utils::MakeBindGroup(device, renderPipeline.GetBindGroupLayout(0), {{0, sampleView}});
@@ -1142,11 +1142,11 @@
     EXPECT_LAZY_CLEAR(0u, queue.Submit(1, &commands));
 
     // Create render pipeline
-    utils::ComboRenderPipelineDescriptor2 renderPipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor renderPipelineDescriptor;
     renderPipelineDescriptor.vertex.module = CreateBasicVertexShaderForTest();
     renderPipelineDescriptor.cFragment.module = CreateSampledTextureFragmentShaderForTest();
     renderPipelineDescriptor.cTargets[0].format = kColorFormat;
-    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline2(&renderPipelineDescriptor);
+    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline(&renderPipelineDescriptor);
 
     // Create bindgroup
     wgpu::BindGroup bindGroup = utils::MakeBindGroup(device, renderPipeline.GetBindGroupLayout(0),
@@ -1288,11 +1288,11 @@
     EXPECT_LAZY_CLEAR(0u, queue.Submit(1, &commands));
 
     // Create render pipeline
-    utils::ComboRenderPipelineDescriptor2 renderPipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor renderPipelineDescriptor;
     renderPipelineDescriptor.vertex.module = CreateBasicVertexShaderForTest();
     renderPipelineDescriptor.cFragment.module = CreateSampledTextureFragmentShaderForTest();
     renderPipelineDescriptor.cTargets[0].format = kColorFormat;
-    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline2(&renderPipelineDescriptor);
+    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline(&renderPipelineDescriptor);
 
     // Create bindgroup
     wgpu::BindGroup bindGroup = utils::MakeBindGroup(device, renderPipeline.GetBindGroupLayout(0),
@@ -1365,11 +1365,11 @@
     EXPECT_LAZY_CLEAR(0u, queue.Submit(1, &commands));
 
     // Create render pipeline
-    utils::ComboRenderPipelineDescriptor2 renderPipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor renderPipelineDescriptor;
     renderPipelineDescriptor.vertex.module = CreateBasicVertexShaderForTest();
     renderPipelineDescriptor.cFragment.module = CreateSampledTextureFragmentShaderForTest();
     renderPipelineDescriptor.cTargets[0].format = kColorFormat;
-    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline2(&renderPipelineDescriptor);
+    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline(&renderPipelineDescriptor);
 
     // Only sample from the uninitialized first layer.
     wgpu::TextureViewDescriptor textureViewDescriptor;
@@ -1789,12 +1789,12 @@
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         {
             wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
-            utils::ComboRenderPipelineDescriptor2 renderPipelineDescriptor;
+            utils::ComboRenderPipelineDescriptor renderPipelineDescriptor;
             renderPipelineDescriptor.cTargets[0].format = kColorFormat;
             renderPipelineDescriptor.vertex.module = CreateBasicVertexShaderForTest();
             renderPipelineDescriptor.cFragment.module = CreateSampledTextureFragmentShaderForTest();
             wgpu::RenderPipeline renderPipeline =
-                device.CreateRenderPipeline2(&renderPipelineDescriptor);
+                device.CreateRenderPipeline(&renderPipelineDescriptor);
             pass.SetPipeline(renderPipeline);
 
             wgpu::TextureViewDescriptor textureViewDescriptor = CreateTextureViewDescriptor(
diff --git a/src/tests/end2end/VertexBufferRobustnessTests.cpp b/src/tests/end2end/VertexBufferRobustnessTests.cpp
index 1bc99ee..7d49b05 100644
--- a/src/tests/end2end/VertexBufferRobustnessTests.cpp
+++ b/src/tests/end2end/VertexBufferRobustnessTests.cpp
@@ -63,7 +63,7 @@
 
         utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, 1, 1);
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.primitive.topology = wgpu::PrimitiveTopology::PointList;
@@ -72,7 +72,7 @@
         descriptor.cTargets[0].format = renderPass.colorFormat;
         renderPass.renderPassInfo.cColorAttachments[0].clearColor = {0, 0, 0, 1};
 
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&descriptor);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&descriptor);
 
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
         wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
diff --git a/src/tests/end2end/VertexFormatTests.cpp b/src/tests/end2end/VertexFormatTests.cpp
index 2d2a6a5..2e0ecc3 100644
--- a/src/tests/end2end/VertexFormatTests.cpp
+++ b/src/tests/end2end/VertexFormatTests.cpp
@@ -362,7 +362,7 @@
             strideBytes += (4 - strideBytes % 4);
         }
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.vertex.bufferCount = 1;
@@ -371,7 +371,7 @@
         descriptor.cAttributes[0].format = format;
         descriptor.cTargets[0].format = renderPass.colorFormat;
 
-        return device.CreateRenderPipeline2(&descriptor);
+        return device.CreateRenderPipeline(&descriptor);
     }
 
     template <typename VertexType, typename ExpectedType>
diff --git a/src/tests/end2end/VertexStateTests.cpp b/src/tests/end2end/VertexStateTests.cpp
index 36b9fd8..09f7f02 100644
--- a/src/tests/end2end/VertexStateTests.cpp
+++ b/src/tests/end2end/VertexStateTests.cpp
@@ -66,7 +66,7 @@
         VertexFormat format;
         InputStepMode step;
     };
-    wgpu::RenderPipeline MakeTestPipeline(const wgpu::VertexStateDescriptor& vertexState,
+    wgpu::RenderPipeline MakeTestPipeline(const utils::ComboVertexStateDescriptor& vertexState,
                                           int multiplier,
                                           const std::vector<ShaderTestSpec>& testSpec) {
         std::ostringstream vs;
@@ -144,14 +144,14 @@
             }
         )");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.vertex.bufferCount = vertexState.vertexBufferCount;
-        descriptor.vertex.buffers = vertexState.vertexBuffers;
+        descriptor.vertex.buffers = &vertexState.cVertexBuffers[0];
         descriptor.cTargets[0].format = renderPass.colorFormat;
 
-        return device.CreateRenderPipeline2(&descriptor);
+        return device.CreateRenderPipeline(&descriptor);
     }
 
     struct VertexAttributeSpec {
@@ -580,7 +580,7 @@
     wgpu::Buffer vertexBuffer =
         utils::CreateBufferFromData(device, &data, sizeof(data), wgpu::BufferUsage::Vertex);
 
-    utils::ComboRenderPipelineDescriptor2 pipelineDesc;
+    utils::ComboRenderPipelineDescriptor pipelineDesc;
     pipelineDesc.vertex.module = utils::CreateShaderModule(device, R"(
         struct VertexIn {
             [[location(0)]] attr0 : vec4<f32>;
@@ -623,7 +623,7 @@
     pipelineDesc.cTargets[0].format = renderPass.colorFormat;
     pipelineDesc.primitive.topology = wgpu::PrimitiveTopology::PointList;
 
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&pipelineDesc);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&pipelineDesc);
 
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
     wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
@@ -668,14 +668,14 @@
             return vec4<f32>(0.0, 1.0, 0.0, 1.0);
         })");
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.vertex.module = vsModule;
     descriptor.cFragment.module = fsModule;
     descriptor.primitive.topology = wgpu::PrimitiveTopology::PointList;
     descriptor.vertex.bufferCount = 0;
     descriptor.vertex.buffers = nullptr;
 
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&descriptor);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&descriptor);
 
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
     {
diff --git a/src/tests/end2end/ViewportOrientationTests.cpp b/src/tests/end2end/ViewportOrientationTests.cpp
index 2f62f42..284e2d8 100644
--- a/src/tests/end2end/ViewportOrientationTests.cpp
+++ b/src/tests/end2end/ViewportOrientationTests.cpp
@@ -33,13 +33,13 @@
             return vec4<f32>(0.0, 1.0, 0.0, 1.0);
         })");
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.vertex.module = vsModule;
     descriptor.cFragment.module = fsModule;
     descriptor.primitive.topology = wgpu::PrimitiveTopology::PointList;
     descriptor.cTargets[0].format = renderPass.colorFormat;
 
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&descriptor);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&descriptor);
 
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
     {
diff --git a/src/tests/end2end/ViewportTests.cpp b/src/tests/end2end/ViewportTests.cpp
index 68bb1f4..4ac203a 100644
--- a/src/tests/end2end/ViewportTests.cpp
+++ b/src/tests/end2end/ViewportTests.cpp
@@ -57,11 +57,11 @@
                           uint32_t height,
                           bool doViewportCall = true) {
         // Create a pipeline that will draw a white quad.
-        utils::ComboRenderPipelineDescriptor2 pipelineDesc;
+        utils::ComboRenderPipelineDescriptor pipelineDesc;
         pipelineDesc.vertex.module = mQuadVS;
         pipelineDesc.cFragment.module = mQuadFS;
         pipelineDesc.cTargets[0].format = wgpu::TextureFormat::RGBA8Unorm;
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&pipelineDesc);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&pipelineDesc);
 
         // Render the quad with the viewport call.
         utils::BasicRenderPass rp = utils::CreateBasicRenderPass(device, kWidth, kHeight);
@@ -91,7 +91,7 @@
 
     void TestViewportDepth(float minDepth, float maxDepth, bool doViewportCall = true) {
         // Create a pipeline drawing 3 points at depth 1.0, 0.5 and 0.0.
-        utils::ComboRenderPipelineDescriptor2 pipelineDesc;
+        utils::ComboRenderPipelineDescriptor pipelineDesc;
         pipelineDesc.vertex.module = utils::CreateShaderModule(device, R"(
             let points : array<vec3<f32>, 3> = array<vec3<f32>, 3>(
                 vec3<f32>(-0.9, 0.0, 1.0),
@@ -108,7 +108,7 @@
         wgpu::DepthStencilState* depthStencil =
             pipelineDesc.EnableDepthStencil(wgpu::TextureFormat::Depth32Float);
         depthStencil->depthWriteEnabled = true;
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&pipelineDesc);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&pipelineDesc);
 
         // Create the texture that will store the post-viewport-transform depth.
         wgpu::TextureDescriptor depthDesc;
@@ -182,11 +182,11 @@
 
 // Test that a draw with an empty viewport doesn't draw anything.
 TEST_P(ViewportTest, EmptyViewport) {
-    utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor pipelineDescriptor;
     pipelineDescriptor.cTargets[0].format = wgpu::TextureFormat::RGBA8Unorm;
     pipelineDescriptor.vertex.module = mQuadVS;
     pipelineDescriptor.cFragment.module = mQuadFS;
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&pipelineDescriptor);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&pipelineDescriptor);
 
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, 1, 1);
 
diff --git a/src/tests/perf_tests/DrawCallPerf.cpp b/src/tests/perf_tests/DrawCallPerf.cpp
index 8875e3b..74e5f37 100644
--- a/src/tests/perf_tests/DrawCallPerf.cpp
+++ b/src/tests/perf_tests/DrawCallPerf.cpp
@@ -347,7 +347,7 @@
     }
 
     // Setup the base render pipeline descriptor.
-    utils::ComboRenderPipelineDescriptor2 renderPipelineDesc;
+    utils::ComboRenderPipelineDescriptor renderPipelineDesc;
     renderPipelineDesc.vertex.bufferCount = 1;
     renderPipelineDesc.cBuffers[0].arrayStride = 4 * sizeof(float);
     renderPipelineDesc.cBuffers[0].attributeCount = 1;
@@ -369,7 +369,7 @@
     renderPipelineDesc.layout = pipelineLayout;
     renderPipelineDesc.vertex.module = vsModule;
     renderPipelineDesc.cFragment.module = fsModule;
-    mPipelines[0] = device.CreateRenderPipeline2(&renderPipelineDesc);
+    mPipelines[0] = device.CreateRenderPipeline(&renderPipelineDesc);
 
     // If the test is using a dynamic pipeline, create the second pipeline.
     if (GetParam().pipelineType == Pipeline::Dynamic) {
@@ -396,7 +396,7 @@
         // Create the pipeline.
         renderPipelineDesc.layout = pipelineLayout;
         renderPipelineDesc.cFragment.module = fsModule;
-        mPipelines[1] = device.CreateRenderPipeline2(&renderPipelineDesc);
+        mPipelines[1] = device.CreateRenderPipeline(&renderPipelineDesc);
 
         // Create the buffer and bind group to bind to the constant bind group layout slot.
         constexpr float kConstantData[] = {0.01, 0.02, 0.03};
diff --git a/src/tests/perf_tests/SubresourceTrackingPerf.cpp b/src/tests/perf_tests/SubresourceTrackingPerf.cpp
index 8b65ba4..c238a49 100644
--- a/src/tests/perf_tests/SubresourceTrackingPerf.cpp
+++ b/src/tests/perf_tests/SubresourceTrackingPerf.cpp
@@ -68,7 +68,7 @@
         uploadTexDesc.usage = wgpu::TextureUsage::CopySrc;
         mUploadTexture = device.CreateTexture(&uploadTexDesc);
 
-        utils::ComboRenderPipelineDescriptor2 pipelineDesc;
+        utils::ComboRenderPipelineDescriptor pipelineDesc;
         pipelineDesc.vertex.module = utils::CreateShaderModule(device, R"(
             [[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
                 return vec4<f32>(1.0, 0.0, 0.0, 1.0);
@@ -81,7 +81,7 @@
                 return vec4<f32>(1.0, 0.0, 0.0, 1.0);
             }
         )");
-        mPipeline = device.CreateRenderPipeline2(&pipelineDesc);
+        mPipeline = device.CreateRenderPipeline(&pipelineDesc);
     }
 
   private:
diff --git a/src/tests/unittests/validation/BindGroupValidationTests.cpp b/src/tests/unittests/validation/BindGroupValidationTests.cpp
index f7ca6b8..6a8b6de 100644
--- a/src/tests/unittests/validation/BindGroupValidationTests.cpp
+++ b/src/tests/unittests/validation/BindGroupValidationTests.cpp
@@ -1101,13 +1101,13 @@
                 [[stage(fragment)]] fn main() {
                 })");
 
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
         pipelineDescriptor.vertex.module = vsModule;
         pipelineDescriptor.cFragment.module = fsModule;
         wgpu::PipelineLayout pipelineLayout =
             utils::MakeBasicPipelineLayout(device, &mBindGroupLayout);
         pipelineDescriptor.layout = pipelineLayout;
-        return device.CreateRenderPipeline2(&pipelineDescriptor);
+        return device.CreateRenderPipeline(&pipelineDescriptor);
     }
 
     wgpu::ComputePipeline CreateComputePipeline() {
@@ -1561,11 +1561,11 @@
 
         wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, ss.str().c_str());
 
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
         pipelineDescriptor.vertex.module = mVsModule;
         pipelineDescriptor.cFragment.module = fsModule;
         pipelineDescriptor.layout = pipelineLayout;
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&pipelineDescriptor);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&pipelineDescriptor);
 
         return std::make_tuple(bindGroupLayouts, pipeline);
     }
@@ -1700,12 +1700,12 @@
         wgpu::PipelineLayoutDescriptor descriptor;
         descriptor.bindGroupLayoutCount = bindGroupLayout.size();
         descriptor.bindGroupLayouts = bindGroupLayout.data();
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
         pipelineDescriptor.vertex.module = vsModule;
         pipelineDescriptor.cFragment.module = fsModule;
         wgpu::PipelineLayout pipelineLayout = device.CreatePipelineLayout(&descriptor);
         pipelineDescriptor.layout = pipelineLayout;
-        return device.CreateRenderPipeline2(&pipelineDescriptor);
+        return device.CreateRenderPipeline(&pipelineDescriptor);
     }
 
     wgpu::RenderPipeline CreateRenderPipeline(std::vector<wgpu::BindGroupLayout> bindGroupLayouts) {
@@ -2070,13 +2070,13 @@
 
         wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, fragmentSource);
 
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
         pipelineDescriptor.vertex.module = vsModule;
         pipelineDescriptor.cFragment.module = fsModule;
         wgpu::PipelineLayout pipelineLayout =
             utils::MakeBasicPipelineLayout(device, bindGroupLayout);
         pipelineDescriptor.layout = pipelineLayout;
-        return device.CreateRenderPipeline2(&pipelineDescriptor);
+        return device.CreateRenderPipeline(&pipelineDescriptor);
     }
 };
 
diff --git a/src/tests/unittests/validation/DrawIndirectValidationTests.cpp b/src/tests/unittests/validation/DrawIndirectValidationTests.cpp
index edb73a1..1e70fb9 100644
--- a/src/tests/unittests/validation/DrawIndirectValidationTests.cpp
+++ b/src/tests/unittests/validation/DrawIndirectValidationTests.cpp
@@ -36,12 +36,12 @@
         // Set up render pipeline
         wgpu::PipelineLayout pipelineLayout = utils::MakeBasicPipelineLayout(device, nullptr);
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.layout = pipelineLayout;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
 
-        pipeline = device.CreateRenderPipeline2(&descriptor);
+        pipeline = device.CreateRenderPipeline(&descriptor);
     }
 
     void ValidateExpectation(wgpu::CommandEncoder encoder, utils::Expectation expectation) {
diff --git a/src/tests/unittests/validation/GetBindGroupLayoutValidationTests.cpp b/src/tests/unittests/validation/GetBindGroupLayoutValidationTests.cpp
index 95ee2cd..f673148 100644
--- a/src/tests/unittests/validation/GetBindGroupLayoutValidationTests.cpp
+++ b/src/tests/unittests/validation/GetBindGroupLayoutValidationTests.cpp
@@ -27,12 +27,12 @@
 
         wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, shader);
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.layout = nullptr;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
 
-        return device.CreateRenderPipeline2(&descriptor);
+        return device.CreateRenderPipeline(&descriptor);
     }
 };
 
@@ -73,12 +73,12 @@
             var pos_s : mat4x4<f32> = storage3.pos;
         })");
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.layout = nullptr;
     descriptor.vertex.module = vsModule;
     descriptor.cFragment.module = fsModule;
 
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&descriptor);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&descriptor);
 
     // The same value is returned for the same index.
     EXPECT_EQ(pipeline.GetBindGroupLayout(0).Get(), pipeline.GetBindGroupLayout(0).Get());
@@ -491,12 +491,12 @@
             var pos : vec4<f32> = uniforms.pos;
         })");
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.layout = nullptr;
     descriptor.vertex.module = vsModule;
     descriptor.cFragment.module = fsModule;
 
-    device.CreateRenderPipeline2(&descriptor);
+    device.CreateRenderPipeline(&descriptor);
 }
 
 // Test that minBufferSize is set on the BGL and that the max of the min buffer sizes is used.
@@ -563,14 +563,14 @@
     binding.buffer.minBindingSize = 64;
     wgpu::BindGroupLayout bgl64 = device.CreateBindGroupLayout(&desc);
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.layout = nullptr;
 
     // Check with both stages using 4 bytes.
     {
         descriptor.vertex.module = vsModule4;
         descriptor.cFragment.module = fsModule4;
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&descriptor);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&descriptor);
         EXPECT_EQ(pipeline.GetBindGroupLayout(0).Get(), bgl4.Get());
     }
 
@@ -578,7 +578,7 @@
     {
         descriptor.vertex.module = vsModule64;
         descriptor.cFragment.module = fsModule4;
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&descriptor);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&descriptor);
         EXPECT_EQ(pipeline.GetBindGroupLayout(0).Get(), bgl64.Get());
     }
 
@@ -586,7 +586,7 @@
     {
         descriptor.vertex.module = vsModule4;
         descriptor.cFragment.module = fsModule64;
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&descriptor);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&descriptor);
         EXPECT_EQ(pipeline.GetBindGroupLayout(0).Get(), bgl64.Get());
     }
 }
@@ -629,14 +629,14 @@
     desc.entryCount = 1;
     desc.entries = &binding;
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.layout = nullptr;
 
     // Check with only the vertex shader using the sampler
     {
         descriptor.vertex.module = vsModuleSampler;
         descriptor.cFragment.module = fsModuleNoSampler;
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&descriptor);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&descriptor);
 
         binding.visibility = wgpu::ShaderStage::Vertex;
         EXPECT_EQ(pipeline.GetBindGroupLayout(0).Get(), device.CreateBindGroupLayout(&desc).Get());
@@ -646,7 +646,7 @@
     {
         descriptor.vertex.module = vsModuleNoSampler;
         descriptor.cFragment.module = fsModuleSampler;
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&descriptor);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&descriptor);
 
         binding.visibility = wgpu::ShaderStage::Fragment;
         EXPECT_EQ(pipeline.GetBindGroupLayout(0).Get(), device.CreateBindGroupLayout(&desc).Get());
@@ -656,7 +656,7 @@
     {
         descriptor.vertex.module = vsModuleSampler;
         descriptor.cFragment.module = fsModuleSampler;
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&descriptor);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&descriptor);
 
         binding.visibility = wgpu::ShaderStage::Fragment | wgpu::ShaderStage::Vertex;
         EXPECT_EQ(pipeline.GetBindGroupLayout(0).Get(), device.CreateBindGroupLayout(&desc).Get());
@@ -686,12 +686,12 @@
             var pos : vec4<f32> = ssbo.pos;
         })");
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.layout = nullptr;
     descriptor.vertex.module = vsModule;
     descriptor.cFragment.module = fsModule;
 
-    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
 }
 
 // Test it is invalid to have conflicting binding texture multisampling in the shaders.
@@ -711,12 +711,12 @@
             textureDimensions(myTexture);
         })");
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.layout = nullptr;
     descriptor.vertex.module = vsModule;
     descriptor.cFragment.module = fsModule;
 
-    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
 }
 
 // Test it is invalid to have conflicting binding texture dimension in the shaders.
@@ -736,12 +736,12 @@
             textureDimensions(myTexture);
         })");
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.layout = nullptr;
     descriptor.vertex.module = vsModule;
     descriptor.cFragment.module = fsModule;
 
-    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
 }
 
 // Test it is invalid to have conflicting binding texture component type in the shaders.
@@ -761,12 +761,12 @@
             textureDimensions(myTexture);
         })");
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.layout = nullptr;
     descriptor.vertex.module = vsModule;
     descriptor.cFragment.module = fsModule;
 
-    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
 }
 
 // Test it is an error to query an out of range bind group layout.
@@ -853,12 +853,12 @@
         [[stage(fragment)]] fn main() {
         })");
 
-    utils::ComboRenderPipelineDescriptor2 pipelineDesc;
+    utils::ComboRenderPipelineDescriptor pipelineDesc;
     pipelineDesc.layout = pipelineLayout;
     pipelineDesc.vertex.module = vsModule;
     pipelineDesc.cFragment.module = fsModule;
 
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&pipelineDesc);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&pipelineDesc);
 
     EXPECT_EQ(pipeline.GetBindGroupLayout(0).Get(), bindGroupLayout.Get());
 
diff --git a/src/tests/unittests/validation/IndexBufferValidationTests.cpp b/src/tests/unittests/validation/IndexBufferValidationTests.cpp
index fd23ce5..27f7b21 100644
--- a/src/tests/unittests/validation/IndexBufferValidationTests.cpp
+++ b/src/tests/unittests/validation/IndexBufferValidationTests.cpp
@@ -32,14 +32,14 @@
                 return vec4<f32>(0.0, 1.0, 0.0, 1.0);
             })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.primitive.topology = primitiveTopology;
         descriptor.primitive.stripIndexFormat = format;
         descriptor.cTargets[0].format = wgpu::TextureFormat::RGBA8Unorm;
 
-        return device.CreateRenderPipeline2(&descriptor);
+        return device.CreateRenderPipeline(&descriptor);
     }
 };
 
diff --git a/src/tests/unittests/validation/MinimumBufferSizeValidationTests.cpp b/src/tests/unittests/validation/MinimumBufferSizeValidationTests.cpp
index 7338045..de4ec17 100644
--- a/src/tests/unittests/validation/MinimumBufferSizeValidationTests.cpp
+++ b/src/tests/unittests/validation/MinimumBufferSizeValidationTests.cpp
@@ -192,7 +192,7 @@
 
         wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, fragShader.c_str());
 
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
         pipelineDescriptor.vertex.module = vsModule;
         pipelineDescriptor.cFragment.module = fsModule;
         pipelineDescriptor.layout = nullptr;
@@ -203,7 +203,7 @@
             pipelineDescriptor.layout = device.CreatePipelineLayout(&descriptor);
         }
 
-        return device.CreateRenderPipeline2(&pipelineDescriptor);
+        return device.CreateRenderPipeline(&pipelineDescriptor);
     }
 
     // Creates render pipeline with default layout
diff --git a/src/tests/unittests/validation/QueueSubmitValidationTests.cpp b/src/tests/unittests/validation/QueueSubmitValidationTests.cpp
index cff2c82..3969252 100644
--- a/src/tests/unittests/validation/QueueSubmitValidationTests.cpp
+++ b/src/tests/unittests/validation/QueueSubmitValidationTests.cpp
@@ -184,7 +184,7 @@
                 return vec4<f32>(0.0, 1.0, 0.0, 1.0);
             })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         device.CreateRenderPipelineAsync(&descriptor, callback, &callbackData);
diff --git a/src/tests/unittests/validation/RenderBundleValidationTests.cpp b/src/tests/unittests/validation/RenderBundleValidationTests.cpp
index c5984e7..11277b2 100644
--- a/src/tests/unittests/validation/RenderBundleValidationTests.cpp
+++ b/src/tests/unittests/validation/RenderBundleValidationTests.cpp
@@ -66,9 +66,9 @@
 
             pipelineLayout = device.CreatePipelineLayout(&pipelineLayoutDesc);
 
-            utils::ComboRenderPipelineDescriptor2 descriptor;
+            utils::ComboRenderPipelineDescriptor descriptor;
             InitializeRenderPipelineDescriptor(&descriptor);
-            pipeline = device.CreateRenderPipeline2(&descriptor);
+            pipeline = device.CreateRenderPipeline(&descriptor);
 
             float data[8];
             wgpu::Buffer buffer = utils::CreateBufferFromData(device, data, 8 * sizeof(float),
@@ -98,7 +98,7 @@
                                               {1, vertexStorageBuffer, 0, sizeof(kVertices)}});
         }
 
-        void InitializeRenderPipelineDescriptor(utils::ComboRenderPipelineDescriptor2* descriptor) {
+        void InitializeRenderPipelineDescriptor(utils::ComboRenderPipelineDescriptor* descriptor) {
             descriptor->layout = pipelineLayout;
             descriptor->vertex.module = vsModule;
             descriptor->cFragment.module = fsModule;
@@ -729,7 +729,7 @@
     renderBundleDesc.cColorFormats[1] = wgpu::TextureFormat::RG16Float;
     renderBundleDesc.cColorFormats[2] = wgpu::TextureFormat::R16Sint;
 
-    auto SetupRenderPipelineDescForTest = [this](utils::ComboRenderPipelineDescriptor2* desc) {
+    auto SetupRenderPipelineDescForTest = [this](utils::ComboRenderPipelineDescriptor* desc) {
         InitializeRenderPipelineDescriptor(desc);
         desc->cFragment.targetCount = 3;
         desc->cTargets[0].format = wgpu::TextureFormat::RGBA8Unorm;
@@ -739,38 +739,38 @@
 
     // Test the success case.
     {
-        utils::ComboRenderPipelineDescriptor2 desc;
+        utils::ComboRenderPipelineDescriptor desc;
         SetupRenderPipelineDescForTest(&desc);
 
         wgpu::RenderBundleEncoder renderBundleEncoder =
             device.CreateRenderBundleEncoder(&renderBundleDesc);
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&desc);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&desc);
         renderBundleEncoder.SetPipeline(pipeline);
         renderBundleEncoder.Finish();
     }
 
     // Test the failure case for mismatched format types.
     {
-        utils::ComboRenderPipelineDescriptor2 desc;
+        utils::ComboRenderPipelineDescriptor desc;
         SetupRenderPipelineDescForTest(&desc);
         desc.cTargets[1].format = wgpu::TextureFormat::RGBA8Unorm;
 
         wgpu::RenderBundleEncoder renderBundleEncoder =
             device.CreateRenderBundleEncoder(&renderBundleDesc);
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&desc);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&desc);
         renderBundleEncoder.SetPipeline(pipeline);
         ASSERT_DEVICE_ERROR(renderBundleEncoder.Finish());
     }
 
     // Test the failure case for missing format
     {
-        utils::ComboRenderPipelineDescriptor2 desc;
+        utils::ComboRenderPipelineDescriptor desc;
         SetupRenderPipelineDescForTest(&desc);
         desc.cFragment.targetCount = 2;
 
         wgpu::RenderBundleEncoder renderBundleEncoder =
             device.CreateRenderBundleEncoder(&renderBundleDesc);
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&desc);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&desc);
         renderBundleEncoder.SetPipeline(pipeline);
         ASSERT_DEVICE_ERROR(renderBundleEncoder.Finish());
     }
@@ -783,7 +783,7 @@
     renderBundleDesc.cColorFormats[0] = wgpu::TextureFormat::RGBA8Unorm;
     renderBundleDesc.depthStencilFormat = wgpu::TextureFormat::Depth24PlusStencil8;
 
-    auto SetupRenderPipelineDescForTest = [this](utils::ComboRenderPipelineDescriptor2* desc) {
+    auto SetupRenderPipelineDescForTest = [this](utils::ComboRenderPipelineDescriptor* desc) {
         InitializeRenderPipelineDescriptor(desc);
         desc->cFragment.targetCount = 1;
         desc->cTargets[0].format = wgpu::TextureFormat::RGBA8Unorm;
@@ -791,39 +791,39 @@
 
     // Test the success case.
     {
-        utils::ComboRenderPipelineDescriptor2 desc;
+        utils::ComboRenderPipelineDescriptor desc;
         SetupRenderPipelineDescForTest(&desc);
         desc.EnableDepthStencil(wgpu::TextureFormat::Depth24PlusStencil8);
 
         wgpu::RenderBundleEncoder renderBundleEncoder =
             device.CreateRenderBundleEncoder(&renderBundleDesc);
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&desc);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&desc);
         renderBundleEncoder.SetPipeline(pipeline);
         renderBundleEncoder.Finish();
     }
 
     // Test the failure case for mismatched format.
     {
-        utils::ComboRenderPipelineDescriptor2 desc;
+        utils::ComboRenderPipelineDescriptor desc;
         SetupRenderPipelineDescForTest(&desc);
         desc.EnableDepthStencil(wgpu::TextureFormat::Depth24Plus);
 
         wgpu::RenderBundleEncoder renderBundleEncoder =
             device.CreateRenderBundleEncoder(&renderBundleDesc);
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&desc);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&desc);
         renderBundleEncoder.SetPipeline(pipeline);
         ASSERT_DEVICE_ERROR(renderBundleEncoder.Finish());
     }
 
     // Test the failure case for missing format.
     {
-        utils::ComboRenderPipelineDescriptor2 desc;
+        utils::ComboRenderPipelineDescriptor desc;
         SetupRenderPipelineDescForTest(&desc);
         desc.depthStencil = nullptr;
 
         wgpu::RenderBundleEncoder renderBundleEncoder =
             device.CreateRenderBundleEncoder(&renderBundleDesc);
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&desc);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&desc);
         renderBundleEncoder.SetPipeline(pipeline);
         ASSERT_DEVICE_ERROR(renderBundleEncoder.Finish());
     }
@@ -836,7 +836,7 @@
     renderBundleDesc.cColorFormats[0] = wgpu::TextureFormat::RGBA8Unorm;
     renderBundleDesc.sampleCount = 4;
 
-    utils::ComboRenderPipelineDescriptor2 renderPipelineDesc;
+    utils::ComboRenderPipelineDescriptor renderPipelineDesc;
     InitializeRenderPipelineDescriptor(&renderPipelineDesc);
     renderPipelineDesc.cFragment.targetCount = 1;
     renderPipelineDesc.cTargets[0].format = wgpu::TextureFormat::RGBA8Unorm;
@@ -846,7 +846,7 @@
     {
         wgpu::RenderBundleEncoder renderBundleEncoder =
             device.CreateRenderBundleEncoder(&renderBundleDesc);
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&renderPipelineDesc);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&renderPipelineDesc);
         renderBundleEncoder.SetPipeline(pipeline);
         renderBundleEncoder.Finish();
     }
@@ -857,7 +857,7 @@
 
         wgpu::RenderBundleEncoder renderBundleEncoder =
             device.CreateRenderBundleEncoder(&renderBundleDesc);
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&renderPipelineDesc);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&renderPipelineDesc);
         renderBundleEncoder.SetPipeline(pipeline);
         ASSERT_DEVICE_ERROR(renderBundleEncoder.Finish());
     }
diff --git a/src/tests/unittests/validation/RenderPipelineValidationTests.cpp b/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
index ba23b63..37f156f 100644
--- a/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
+++ b/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
@@ -45,36 +45,11 @@
 TEST_F(RenderPipelineValidationTest, CreationSuccess) {
     {
         // New format
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
 
-        device.CreateRenderPipeline2(&descriptor);
-    }
-    {
-        // Deprecated format
-        utils::ComboRenderPipelineDescriptor descriptor(device);
-        descriptor.vertexStage.module = vsModule;
-        descriptor.cFragmentStage.module = fsModule;
-
-        EXPECT_DEPRECATION_WARNING(device.CreateRenderPipeline(&descriptor));
-    }
-    {
-        // Vertex input should be optional
-        utils::ComboRenderPipelineDescriptor descriptor(device);
-        descriptor.vertexStage.module = vsModule;
-        descriptor.cFragmentStage.module = fsModule;
-        descriptor.vertexState = nullptr;
-
-        EXPECT_DEPRECATION_WARNING(device.CreateRenderPipeline(&descriptor));
-    }
-    {
-        // Rasterization state should be optional
-        utils::ComboRenderPipelineDescriptor descriptor(device);
-        descriptor.vertexStage.module = vsModule;
-        descriptor.cFragmentStage.module = fsModule;
-        descriptor.rasterizationState = nullptr;
-        EXPECT_DEPRECATION_WARNING(device.CreateRenderPipeline(&descriptor));
+        device.CreateRenderPipeline(&descriptor);
     }
 }
 
@@ -82,49 +57,49 @@
 TEST_F(RenderPipelineValidationTest, DepthBiasParameterNotBeNaN) {
     // Control case, depth bias parameters in ComboRenderPipeline default to 0 which is finite
     {
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.EnableDepthStencil();
-        device.CreateRenderPipeline2(&descriptor);
+        device.CreateRenderPipeline(&descriptor);
     }
 
     // Infinite depth bias clamp is valid
     {
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         wgpu::DepthStencilState* depthStencil = descriptor.EnableDepthStencil();
         depthStencil->depthBiasClamp = INFINITY;
-        device.CreateRenderPipeline2(&descriptor);
+        device.CreateRenderPipeline(&descriptor);
     }
     // NAN depth bias clamp is invalid
     {
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         wgpu::DepthStencilState* depthStencil = descriptor.EnableDepthStencil();
         depthStencil->depthBiasClamp = NAN;
-        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
     }
 
     // Infinite depth bias slope is valid
     {
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         wgpu::DepthStencilState* depthStencil = descriptor.EnableDepthStencil();
         depthStencil->depthBiasSlopeScale = INFINITY;
-        device.CreateRenderPipeline2(&descriptor);
+        device.CreateRenderPipeline(&descriptor);
     }
     // NAN depth bias slope is invalid
     {
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         wgpu::DepthStencilState* depthStencil = descriptor.EnableDepthStencil();
         depthStencil->depthBiasSlopeScale = NAN;
-        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
     }
 }
 
@@ -132,21 +107,21 @@
 TEST_F(RenderPipelineValidationTest, ColorTargetStateRequired) {
     {
         // This one succeeds because attachment 0 is the color attachment
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.cFragment.targetCount = 1;
 
-        device.CreateRenderPipeline2(&descriptor);
+        device.CreateRenderPipeline(&descriptor);
     }
 
     {  // Fail because lack of color target states (and depth/stencil state)
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.cFragment.targetCount = 0;
 
-        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
     }
 }
 
@@ -154,22 +129,22 @@
 TEST_F(RenderPipelineValidationTest, NonRenderableFormat) {
     {
         // Succeeds because RGBA8Unorm is renderable
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.cTargets[0].format = wgpu::TextureFormat::RGBA8Unorm;
 
-        device.CreateRenderPipeline2(&descriptor);
+        device.CreateRenderPipeline(&descriptor);
     }
 
     {
         // Fails because RG11B10Ufloat is non-renderable
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.cTargets[0].format = wgpu::TextureFormat::RG11B10Ufloat;
 
-        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
     }
 }
 
@@ -183,7 +158,7 @@
 
     for (size_t i = 0; i < kNumTextureFormatBaseType; ++i) {
         for (size_t j = 0; j < kNumTextureFormatBaseType; ++j) {
-            utils::ComboRenderPipelineDescriptor2 descriptor;
+            utils::ComboRenderPipelineDescriptor descriptor;
             descriptor.vertex.module = vsModule;
             descriptor.cTargets[0].format = kColorFormats[j];
 
@@ -198,9 +173,9 @@
             descriptor.cFragment.module = utils::CreateShaderModule(device, stream.str().c_str());
 
             if (i == j) {
-                device.CreateRenderPipeline2(&descriptor);
+                device.CreateRenderPipeline(&descriptor);
             } else {
-                ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+                ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
             }
         }
     }
@@ -209,21 +184,21 @@
 /// Tests that the sample count of the render pipeline must be valid.
 TEST_F(RenderPipelineValidationTest, SampleCount) {
     {
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.multisample.count = 4;
 
-        device.CreateRenderPipeline2(&descriptor);
+        device.CreateRenderPipeline(&descriptor);
     }
 
     {
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.multisample.count = 3;
 
-        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
     }
 }
 
@@ -242,29 +217,29 @@
     baseTextureDescriptor.dimension = wgpu::TextureDimension::e2D;
     baseTextureDescriptor.usage = wgpu::TextureUsage::RenderAttachment;
 
-    utils::ComboRenderPipelineDescriptor2 nonMultisampledPipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor nonMultisampledPipelineDescriptor;
     nonMultisampledPipelineDescriptor.multisample.count = 1;
     nonMultisampledPipelineDescriptor.vertex.module = vsModule;
     nonMultisampledPipelineDescriptor.cFragment.module = fsModule;
     wgpu::RenderPipeline nonMultisampledPipeline =
-        device.CreateRenderPipeline2(&nonMultisampledPipelineDescriptor);
+        device.CreateRenderPipeline(&nonMultisampledPipelineDescriptor);
 
     nonMultisampledPipelineDescriptor.cFragment.targetCount = 0;
     nonMultisampledPipelineDescriptor.EnableDepthStencil();
     wgpu::RenderPipeline nonMultisampledPipelineWithDepthStencilOnly =
-        device.CreateRenderPipeline2(&nonMultisampledPipelineDescriptor);
+        device.CreateRenderPipeline(&nonMultisampledPipelineDescriptor);
 
-    utils::ComboRenderPipelineDescriptor2 multisampledPipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor multisampledPipelineDescriptor;
     multisampledPipelineDescriptor.multisample.count = kMultisampledCount;
     multisampledPipelineDescriptor.vertex.module = vsModule;
     multisampledPipelineDescriptor.cFragment.module = fsModule;
     wgpu::RenderPipeline multisampledPipeline =
-        device.CreateRenderPipeline2(&multisampledPipelineDescriptor);
+        device.CreateRenderPipeline(&multisampledPipelineDescriptor);
 
     multisampledPipelineDescriptor.cFragment.targetCount = 0;
     multisampledPipelineDescriptor.EnableDepthStencil();
     wgpu::RenderPipeline multisampledPipelineWithDepthStencilOnly =
-        device.CreateRenderPipeline2(&multisampledPipelineDescriptor);
+        device.CreateRenderPipeline(&multisampledPipelineDescriptor);
 
     // It is not allowed to use multisampled render pass and non-multisampled render pipeline.
     {
@@ -371,23 +346,23 @@
 // when the alphaToCoverage mode is enabled.
 TEST_F(RenderPipelineValidationTest, AlphaToCoverageAndSampleCount) {
     {
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.multisample.count = 4;
         descriptor.multisample.alphaToCoverageEnabled = true;
 
-        device.CreateRenderPipeline2(&descriptor);
+        device.CreateRenderPipeline(&descriptor);
     }
 
     {
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         descriptor.multisample.count = 1;
         descriptor.multisample.alphaToCoverageEnabled = true;
 
-        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
     }
 }
 
@@ -403,7 +378,7 @@
 
     for (size_t i = 0; i < kNumTextureComponentType; ++i) {
         for (size_t j = 0; j < kNumTextureComponentType; ++j) {
-            utils::ComboRenderPipelineDescriptor2 descriptor;
+            utils::ComboRenderPipelineDescriptor descriptor;
             descriptor.vertex.module = vsModule;
 
             std::ostringstream stream;
@@ -421,9 +396,9 @@
             descriptor.layout = utils::MakeBasicPipelineLayout(device, &bgl);
 
             if (i == j) {
-                device.CreateRenderPipeline2(&descriptor);
+                device.CreateRenderPipeline(&descriptor);
             } else {
-                ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+                ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
             }
         }
     }
@@ -452,7 +427,7 @@
 
     for (size_t i = 0; i < kNumTextureViewDimensions; ++i) {
         for (size_t j = 0; j < kNumTextureViewDimensions; ++j) {
-            utils::ComboRenderPipelineDescriptor2 descriptor;
+            utils::ComboRenderPipelineDescriptor descriptor;
             descriptor.vertex.module = vsModule;
 
             std::ostringstream stream;
@@ -470,9 +445,9 @@
             descriptor.layout = utils::MakeBasicPipelineLayout(device, &bgl);
 
             if (i == j) {
-                device.CreateRenderPipeline2(&descriptor);
+                device.CreateRenderPipeline(&descriptor);
             } else {
-                ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+                ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
             }
         }
     }
@@ -491,11 +466,11 @@
             return vec4<f32>();
         })");
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.layout = nullptr;
     descriptor.vertex.module = vsModuleWithStorageBuffer;
     descriptor.cFragment.module = fsModule;
-    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
 }
 
 // Tests that strip primitive topologies require an index format
@@ -516,7 +491,7 @@
 
     for (wgpu::PrimitiveTopology primitiveTopology : kStripTopologyTypes) {
         for (wgpu::IndexFormat indexFormat : kIndexFormatTypes) {
-            utils::ComboRenderPipelineDescriptor2 descriptor;
+            utils::ComboRenderPipelineDescriptor descriptor;
             descriptor.vertex.module = vsModule;
             descriptor.cFragment.module = fsModule;
             descriptor.primitive.topology = primitiveTopology;
@@ -525,17 +500,17 @@
             if (indexFormat == wgpu::IndexFormat::Undefined) {
                 // Fail because the index format is undefined and the primitive
                 // topology is a strip type.
-                ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+                ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
             } else {
                 // Succeeds because the index format is given.
-                device.CreateRenderPipeline2(&descriptor);
+                device.CreateRenderPipeline(&descriptor);
             }
         }
     }
 
     for (wgpu::PrimitiveTopology primitiveTopology : kListTopologyTypes) {
         for (wgpu::IndexFormat indexFormat : kIndexFormatTypes) {
-            utils::ComboRenderPipelineDescriptor2 descriptor;
+            utils::ComboRenderPipelineDescriptor descriptor;
             descriptor.vertex.module = vsModule;
             descriptor.cFragment.module = fsModule;
             descriptor.primitive.topology = primitiveTopology;
@@ -544,9 +519,9 @@
             if (indexFormat == wgpu::IndexFormat::Undefined) {
                 // Succeeds even when the index format is undefined because the
                 // primitive topology isn't a strip type.
-                device.CreateRenderPipeline2(&descriptor);
+                device.CreateRenderPipeline(&descriptor);
             } else {
-                ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+                ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
             }
         }
     }
@@ -555,39 +530,39 @@
 // Test that specifying a clampDepth value results in an error if the feature is not enabled.
 TEST_F(RenderPipelineValidationTest, ClampDepthWithoutExtension) {
     {
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         wgpu::PrimitiveDepthClampingState clampingState;
         clampingState.clampDepth = true;
         descriptor.primitive.nextInChain = &clampingState;
-        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
     }
     {
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         wgpu::PrimitiveDepthClampingState clampingState;
         clampingState.clampDepth = false;
         descriptor.primitive.nextInChain = &clampingState;
-        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
     }
 }
 
 // Test that depthStencil.depthCompare must not be undefiend.
 TEST_F(RenderPipelineValidationTest, DepthCompareUndefinedIsError) {
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.vertex.module = vsModule;
     descriptor.cFragment.module = fsModule;
     descriptor.EnableDepthStencil(wgpu::TextureFormat::Depth32Float);
 
     // Control case: Always is valid.
     descriptor.cDepthStencil.depthCompare = wgpu::CompareFunction::Always;
-    device.CreateRenderPipeline2(&descriptor);
+    device.CreateRenderPipeline(&descriptor);
 
     // Error case: Undefined is invalid.
     descriptor.cDepthStencil.depthCompare = wgpu::CompareFunction::Undefined;
-    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
 }
 
 // Test that the entryPoint names must be present for the correct stage in the shader module.
@@ -602,24 +577,24 @@
         }
     )");
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.vertex.module = module;
     descriptor.vertex.entryPoint = "vertex_main";
     descriptor.cFragment.module = module;
     descriptor.cFragment.entryPoint = "fragment_main";
 
     // Success case.
-    device.CreateRenderPipeline2(&descriptor);
+    device.CreateRenderPipeline(&descriptor);
 
     // Test for the vertex stage entryPoint name.
     {
         // The entryPoint name doesn't exist in the module.
         descriptor.vertex.entryPoint = "main";
-        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
 
         // The entryPoint name exists, but not for the correct stage.
         descriptor.vertex.entryPoint = "fragment_main";
-        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
     }
 
     descriptor.vertex.entryPoint = "vertex_main";
@@ -628,11 +603,11 @@
     {
         // The entryPoint name doesn't exist in the module.
         descriptor.cFragment.entryPoint = "main";
-        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
 
         // The entryPoint name exists, but not for the correct stage.
         descriptor.cFragment.entryPoint = "vertex_main";
-        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
     }
 }
 
@@ -649,7 +624,7 @@
         }
     )");
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.vertex.module = module;
     descriptor.cFragment.module = fsModule;
 
@@ -662,20 +637,20 @@
     // Success cases, the attribute used by the entryPoint is declared in the pipeline.
     descriptor.vertex.entryPoint = "vertex0";
     descriptor.cAttributes[0].shaderLocation = 0;
-    device.CreateRenderPipeline2(&descriptor);
+    device.CreateRenderPipeline(&descriptor);
 
     descriptor.vertex.entryPoint = "vertex1";
     descriptor.cAttributes[0].shaderLocation = 1;
-    device.CreateRenderPipeline2(&descriptor);
+    device.CreateRenderPipeline(&descriptor);
 
     // Error cases, the attribute used by the entryPoint isn't declared in the pipeline.
     descriptor.vertex.entryPoint = "vertex1";
     descriptor.cAttributes[0].shaderLocation = 0;
-    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
 
     descriptor.vertex.entryPoint = "vertex0";
     descriptor.cAttributes[0].shaderLocation = 1;
-    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
 }
 
 // Test that fragment output validation is for the correct entryPoint
@@ -689,27 +664,27 @@
         }
     )");
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.vertex.module = vsModule;
     descriptor.cFragment.module = module;
 
     // Success case, the component type matches between the pipeline and the entryPoint
     descriptor.cFragment.entryPoint = "fragmentFloat";
     descriptor.cTargets[0].format = wgpu::TextureFormat::RGBA32Float;
-    device.CreateRenderPipeline2(&descriptor);
+    device.CreateRenderPipeline(&descriptor);
 
     descriptor.cFragment.entryPoint = "fragmentUint";
     descriptor.cTargets[0].format = wgpu::TextureFormat::RGBA32Uint;
-    device.CreateRenderPipeline2(&descriptor);
+    device.CreateRenderPipeline(&descriptor);
 
     // Error case, the component type doesn't match between the pipeline and the entryPoint
     descriptor.cFragment.entryPoint = "fragmentUint";
     descriptor.cTargets[0].format = wgpu::TextureFormat::RGBA32Float;
-    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
 
     descriptor.cFragment.entryPoint = "fragmentFloat";
     descriptor.cTargets[0].format = wgpu::TextureFormat::RGBA32Uint;
-    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
 }
 
 // Test that fragment output validation is for the correct entryPoint
@@ -738,27 +713,27 @@
         device, {{1, wgpu::ShaderStage::Vertex, wgpu::BufferBindingType::Uniform}});
     wgpu::PipelineLayout layout1 = utils::MakeBasicPipelineLayout(device, &bgl1);
 
-    utils::ComboRenderPipelineDescriptor2 descriptor;
+    utils::ComboRenderPipelineDescriptor descriptor;
     descriptor.vertex.module = module;
     descriptor.cFragment.module = fsModule;
 
     // Success case, the BGL matches the bindings used by the entryPoint
     descriptor.vertex.entryPoint = "vertex0";
     descriptor.layout = layout0;
-    device.CreateRenderPipeline2(&descriptor);
+    device.CreateRenderPipeline(&descriptor);
 
     descriptor.vertex.entryPoint = "vertex1";
     descriptor.layout = layout1;
-    device.CreateRenderPipeline2(&descriptor);
+    device.CreateRenderPipeline(&descriptor);
 
     // Error case, the BGL doesn't match the bindings used by the entryPoint
     descriptor.vertex.entryPoint = "vertex1";
     descriptor.layout = layout0;
-    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
 
     descriptor.vertex.entryPoint = "vertex0";
     descriptor.layout = layout1;
-    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+    ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
 }
 
 class DepthClampingValidationTest : public RenderPipelineValidationTest {
@@ -773,21 +748,21 @@
 // Tests that specifying a clampDepth value succeeds if the extension is enabled.
 TEST_F(DepthClampingValidationTest, Success) {
     {
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         wgpu::PrimitiveDepthClampingState clampingState;
         clampingState.clampDepth = true;
         descriptor.primitive.nextInChain = &clampingState;
-        device.CreateRenderPipeline2(&descriptor);
+        device.CreateRenderPipeline(&descriptor);
     }
     {
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
         wgpu::PrimitiveDepthClampingState clampingState;
         clampingState.clampDepth = false;
         descriptor.primitive.nextInChain = &clampingState;
-        device.CreateRenderPipeline2(&descriptor);
+        device.CreateRenderPipeline(&descriptor);
     }
 }
diff --git a/src/tests/unittests/validation/ResourceUsageTrackingTests.cpp b/src/tests/unittests/validation/ResourceUsageTrackingTests.cpp
index 10bec0a..a1ed2ea 100644
--- a/src/tests/unittests/validation/ResourceUsageTrackingTests.cpp
+++ b/src/tests/unittests/validation/ResourceUsageTrackingTests.cpp
@@ -54,11 +54,11 @@
             wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
                 [[stage(fragment)]] fn main() {
                 })");
-            utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+            utils::ComboRenderPipelineDescriptor pipelineDescriptor;
             pipelineDescriptor.vertex.module = vsModule;
             pipelineDescriptor.cFragment.module = fsModule;
             pipelineDescriptor.layout = utils::MakeBasicPipelineLayout(device, nullptr);
-            return device.CreateRenderPipeline2(&pipelineDescriptor);
+            return device.CreateRenderPipeline(&pipelineDescriptor);
         }
 
         wgpu::ComputePipeline CreateNoOpComputePipeline(std::vector<wgpu::BindGroupLayout> bgls) {
@@ -765,11 +765,11 @@
                 [[group(0), binding(0)]] var<storage> rBuffer : [[access(read)]] RBuffer;
                 [[stage(fragment)]] fn main() {
                 })");
-            utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+            utils::ComboRenderPipelineDescriptor pipelineDescriptor;
             pipelineDescriptor.vertex.module = vsModule;
             pipelineDescriptor.cFragment.module = fsModule;
             pipelineDescriptor.layout = utils::MakeBasicPipelineLayout(device, &bgl0);
-            wgpu::RenderPipeline rp = device.CreateRenderPipeline2(&pipelineDescriptor);
+            wgpu::RenderPipeline rp = device.CreateRenderPipeline(&pipelineDescriptor);
 
             // Resource in bg1 conflicts with resources used in bg0. However, bindings in bg1 is
             // not used in pipeline. But we still track this binding.
@@ -1511,11 +1511,11 @@
                 [[group(0), binding(0)]] var tex : [[access(read)]] texture_storage_2d<rgba8unorm>;
                 [[stage(fragment)]] fn main() {
                 })");
-            utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+            utils::ComboRenderPipelineDescriptor pipelineDescriptor;
             pipelineDescriptor.vertex.module = vsModule;
             pipelineDescriptor.cFragment.module = fsModule;
             pipelineDescriptor.layout = utils::MakeBasicPipelineLayout(device, &readBGL);
-            wgpu::RenderPipeline rp = device.CreateRenderPipeline2(&pipelineDescriptor);
+            wgpu::RenderPipeline rp = device.CreateRenderPipeline(&pipelineDescriptor);
 
             // Texture binding in readBG conflicts with texture binding in writeBG. The binding
             // in writeBG is not used in pipeline. But we still track this binding.
diff --git a/src/tests/unittests/validation/StorageTextureValidationTests.cpp b/src/tests/unittests/validation/StorageTextureValidationTests.cpp
index 0069e05..6827015 100644
--- a/src/tests/unittests/validation/StorageTextureValidationTests.cpp
+++ b/src/tests/unittests/validation/StorageTextureValidationTests.cpp
@@ -127,11 +127,11 @@
                 return textureLoad(image0, vec2<i32>(i32(VertexIndex), 0));
             })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.layout = nullptr;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = mDefaultFSModule;
-        device.CreateRenderPipeline2(&descriptor);
+        device.CreateRenderPipeline(&descriptor);
     }
 
     // Read-only storage textures can be declared in a fragment shader.
@@ -144,11 +144,11 @@
                 return textureLoad(image0, vec2<i32>(FragCoord.xy));
             })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.layout = nullptr;
         descriptor.vertex.module = mDefaultVSModule;
         descriptor.cFragment.module = fsModule;
-        device.CreateRenderPipeline2(&descriptor);
+        device.CreateRenderPipeline(&descriptor);
     }
 
     // Write-only storage textures cannot be declared in a vertex shader.
@@ -159,11 +159,11 @@
                 textureStore(image0, vec2<i32>(i32(vertex_index), 0), vec4<f32>(1.0, 0.0, 0.0, 1.0));
             })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.layout = nullptr;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = mDefaultFSModule;
-        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+        ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
     }
 
     // Write-only storage textures can be declared in a fragment shader.
@@ -174,11 +174,11 @@
                 textureStore(image0, vec2<i32>(position.xy), vec4<f32>(1.0, 0.0, 0.0, 1.0));
             })");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.layout = nullptr;
         descriptor.vertex.module = mDefaultVSModule;
         descriptor.cFragment.module = fsModule;
-        device.CreateRenderPipeline2(&descriptor);
+        device.CreateRenderPipeline(&descriptor);
     }
 }
 
diff --git a/src/tests/unittests/validation/UnsafeAPIValidationTests.cpp b/src/tests/unittests/validation/UnsafeAPIValidationTests.cpp
index 29816c8..6eebeb0 100644
--- a/src/tests/unittests/validation/UnsafeAPIValidationTests.cpp
+++ b/src/tests/unittests/validation/UnsafeAPIValidationTests.cpp
@@ -64,14 +64,14 @@
     bundleDesc.colorFormatsCount = 1;
     bundleDesc.cColorFormats[0] = renderPass.attachmentFormat;
 
-    utils::ComboRenderPipelineDescriptor2 desc;
+    utils::ComboRenderPipelineDescriptor desc;
     desc.vertex.module = utils::CreateShaderModule(
         device,
         R"([[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
             return vec4<f32>();
         })");
     desc.cFragment.module = utils::CreateShaderModule(device, "[[stage(fragment)]] fn main() {}");
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&desc);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&desc);
 
     // Control cases: DrawIndirect and DrawIndexed are allowed inside a render pass.
     {
diff --git a/src/tests/unittests/validation/VertexBufferValidationTests.cpp b/src/tests/unittests/validation/VertexBufferValidationTests.cpp
index c7163b6..bcc8825 100644
--- a/src/tests/unittests/validation/VertexBufferValidationTests.cpp
+++ b/src/tests/unittests/validation/VertexBufferValidationTests.cpp
@@ -68,7 +68,7 @@
 
     wgpu::RenderPipeline MakeRenderPipeline(const wgpu::ShaderModule& vsModule,
                                             unsigned int bufferCount) {
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.cFragment.module = fsModule;
 
@@ -80,7 +80,7 @@
         }
         descriptor.vertex.bufferCount = bufferCount;
 
-        return device.CreateRenderPipeline2(&descriptor);
+        return device.CreateRenderPipeline(&descriptor);
     }
 
     wgpu::ShaderModule fsModule;
diff --git a/src/tests/unittests/validation/VertexStateValidationTests.cpp b/src/tests/unittests/validation/VertexStateValidationTests.cpp
index 9682b64..9e264a9 100644
--- a/src/tests/unittests/validation/VertexStateValidationTests.cpp
+++ b/src/tests/unittests/validation/VertexStateValidationTests.cpp
@@ -29,7 +29,7 @@
             }
         )");
 
-        utils::ComboRenderPipelineDescriptor2 descriptor;
+        utils::ComboRenderPipelineDescriptor descriptor;
         descriptor.vertex.module = vsModule;
         descriptor.vertex.bufferCount = state.vertexBufferCount;
         descriptor.vertex.buffers = &state.cVertexBuffers[0];
@@ -37,9 +37,9 @@
         descriptor.cTargets[0].format = wgpu::TextureFormat::RGBA8Unorm;
 
         if (!success) {
-            ASSERT_DEVICE_ERROR(device.CreateRenderPipeline2(&descriptor));
+            ASSERT_DEVICE_ERROR(device.CreateRenderPipeline(&descriptor));
         } else {
-            device.CreateRenderPipeline2(&descriptor);
+            device.CreateRenderPipeline(&descriptor);
         }
     }
 
diff --git a/src/tests/unittests/wire/WireArgumentTests.cpp b/src/tests/unittests/wire/WireArgumentTests.cpp
index 401f9b8..a72e8ef 100644
--- a/src/tests/unittests/wire/WireArgumentTests.cpp
+++ b/src/tests/unittests/wire/WireArgumentTests.cpp
@@ -101,38 +101,26 @@
     EXPECT_CALL(api, DeviceCreateShaderModule(apiDevice, _)).WillOnce(Return(apiVsModule));
 
     // Create the color state descriptor
-    WGPUBlendDescriptor blendDescriptor = {};
-    blendDescriptor.operation = WGPUBlendOperation_Add;
-    blendDescriptor.srcFactor = WGPUBlendFactor_One;
-    blendDescriptor.dstFactor = WGPUBlendFactor_One;
-    WGPUColorStateDescriptor colorStateDescriptor = {};
-    colorStateDescriptor.format = WGPUTextureFormat_RGBA8Unorm;
-    colorStateDescriptor.alphaBlend = blendDescriptor;
-    colorStateDescriptor.colorBlend = blendDescriptor;
-    colorStateDescriptor.writeMask = WGPUColorWriteMask_All;
-
-    // Create the input state
-    WGPUVertexStateDescriptor vertexState = {};
-    vertexState.indexFormat = WGPUIndexFormat_Uint32;
-    vertexState.vertexBufferCount = 0;
-    vertexState.vertexBuffers = nullptr;
-
-    // Create the rasterization state
-    WGPURasterizationStateDescriptor rasterizationState = {};
-    rasterizationState.frontFace = WGPUFrontFace_CCW;
-    rasterizationState.cullMode = WGPUCullMode_None;
-    rasterizationState.depthBias = 0;
-    rasterizationState.depthBiasSlopeScale = 0.0;
-    rasterizationState.depthBiasClamp = 0.0;
+    WGPUBlendComponent blendComponent = {};
+    blendComponent.operation = WGPUBlendOperation_Add;
+    blendComponent.srcFactor = WGPUBlendFactor_One;
+    blendComponent.dstFactor = WGPUBlendFactor_One;
+    WGPUBlendState blendState = {};
+    blendState.alpha = blendComponent;
+    blendState.color = blendComponent;
+    WGPUColorTargetState colorTargetState = {};
+    colorTargetState.format = WGPUTextureFormat_RGBA8Unorm;
+    colorTargetState.blend = &blendState;
+    colorTargetState.writeMask = WGPUColorWriteMask_All;
 
     // Create the depth-stencil state
-    WGPUStencilStateFaceDescriptor stencilFace = {};
+    WGPUStencilFaceState stencilFace = {};
     stencilFace.compare = WGPUCompareFunction_Always;
     stencilFace.failOp = WGPUStencilOperation_Keep;
     stencilFace.depthFailOp = WGPUStencilOperation_Keep;
     stencilFace.passOp = WGPUStencilOperation_Keep;
 
-    WGPUDepthStencilStateDescriptor depthStencilState = {};
+    WGPUDepthStencilState depthStencilState = {};
     depthStencilState.format = WGPUTextureFormat_Depth24PlusStencil8;
     depthStencilState.depthWriteEnabled = false;
     depthStencilState.depthCompare = WGPUCompareFunction_Always;
@@ -140,6 +128,9 @@
     depthStencilState.stencilFront = stencilFace;
     depthStencilState.stencilReadMask = 0xff;
     depthStencilState.stencilWriteMask = 0xff;
+    depthStencilState.depthBias = 0;
+    depthStencilState.depthBiasSlopeScale = 0.0;
+    depthStencilState.depthBiasClamp = 0.0;
 
     // Create the pipeline layout
     WGPUPipelineLayoutDescriptor layoutDescriptor = {};
@@ -152,25 +143,26 @@
     // Create pipeline
     WGPURenderPipelineDescriptor pipelineDescriptor = {};
 
-    pipelineDescriptor.vertexStage.module = vsModule;
-    pipelineDescriptor.vertexStage.entryPoint = "main";
+    pipelineDescriptor.vertex.module = vsModule;
+    pipelineDescriptor.vertex.entryPoint = "main";
+    pipelineDescriptor.vertex.bufferCount = 0;
+    pipelineDescriptor.vertex.buffers = nullptr;
 
-    WGPUProgrammableStageDescriptor fragmentStage = {};
-    fragmentStage.module = vsModule;
-    fragmentStage.entryPoint = "main";
-    pipelineDescriptor.fragmentStage = &fragmentStage;
+    WGPUFragmentState fragment = {};
+    fragment.module = vsModule;
+    fragment.entryPoint = "main";
+    fragment.targetCount = 1;
+    fragment.targets = &colorTargetState;
+    pipelineDescriptor.fragment = &fragment;
 
-    pipelineDescriptor.colorStateCount = 1;
-    pipelineDescriptor.colorStates = &colorStateDescriptor;
-
-    pipelineDescriptor.sampleCount = 1;
-    pipelineDescriptor.sampleMask = 0xFFFFFFFF;
-    pipelineDescriptor.alphaToCoverageEnabled = false;
+    pipelineDescriptor.multisample.count = 1;
+    pipelineDescriptor.multisample.mask = 0xFFFFFFFF;
+    pipelineDescriptor.multisample.alphaToCoverageEnabled = false;
     pipelineDescriptor.layout = layout;
-    pipelineDescriptor.vertexState = &vertexState;
-    pipelineDescriptor.primitiveTopology = WGPUPrimitiveTopology_TriangleList;
-    pipelineDescriptor.rasterizationState = &rasterizationState;
-    pipelineDescriptor.depthStencilState = &depthStencilState;
+    pipelineDescriptor.primitive.topology = WGPUPrimitiveTopology_TriangleList;
+    pipelineDescriptor.primitive.frontFace = WGPUFrontFace_CCW;
+    pipelineDescriptor.primitive.cullMode = WGPUCullMode_None;
+    pipelineDescriptor.depthStencil = &depthStencilState;
 
     wgpuDeviceCreateRenderPipeline(device, &pipelineDescriptor);
 
@@ -178,7 +170,7 @@
     EXPECT_CALL(api,
                 DeviceCreateRenderPipeline(
                     apiDevice, MatchesLambda([](const WGPURenderPipelineDescriptor* desc) -> bool {
-                        return desc->vertexStage.entryPoint == std::string("main");
+                        return desc->vertex.entryPoint == std::string("main");
                     })))
         .WillOnce(Return(apiDummyPipeline));
 
diff --git a/src/tests/unittests/wire/WireCreatePipelineAsyncTests.cpp b/src/tests/unittests/wire/WireCreatePipelineAsyncTests.cpp
index c06d1bb..a30b74c 100644
--- a/src/tests/unittests/wire/WireCreatePipelineAsyncTests.cpp
+++ b/src/tests/unittests/wire/WireCreatePipelineAsyncTests.cpp
@@ -157,7 +157,7 @@
     WGPUShaderModule apiVsModule = api.GetNewShaderModule();
     EXPECT_CALL(api, DeviceCreateShaderModule(apiDevice, _)).WillOnce(Return(apiVsModule));
 
-    WGPURenderPipelineDescriptor2 pipelineDescriptor{};
+    WGPURenderPipelineDescriptor pipelineDescriptor{};
     pipelineDescriptor.vertex.module = vsModule;
     pipelineDescriptor.vertex.entryPoint = "main";
 
@@ -190,7 +190,7 @@
     WGPUShaderModule apiVsModule = api.GetNewShaderModule();
     EXPECT_CALL(api, DeviceCreateShaderModule(apiDevice, _)).WillOnce(Return(apiVsModule));
 
-    WGPURenderPipelineDescriptor2 pipelineDescriptor{};
+    WGPURenderPipelineDescriptor pipelineDescriptor{};
     pipelineDescriptor.vertex.module = vsModule;
     pipelineDescriptor.vertex.entryPoint = "main";
 
@@ -228,7 +228,7 @@
     fragment.module = vsModule;
     fragment.entryPoint = "main";
 
-    WGPURenderPipelineDescriptor2 pipelineDescriptor{};
+    WGPURenderPipelineDescriptor pipelineDescriptor{};
     pipelineDescriptor.vertex.module = vsModule;
     pipelineDescriptor.vertex.entryPoint = "main";
     pipelineDescriptor.fragment = &fragment;
@@ -289,7 +289,7 @@
     fragment.module = vsModule;
     fragment.entryPoint = "main";
 
-    WGPURenderPipelineDescriptor2 pipelineDescriptor{};
+    WGPURenderPipelineDescriptor pipelineDescriptor{};
     pipelineDescriptor.vertex.module = vsModule;
     pipelineDescriptor.vertex.entryPoint = "main";
     pipelineDescriptor.fragment = &fragment;
@@ -335,7 +335,7 @@
     WGPUShaderModule apiModule = api.GetNewShaderModule();
     EXPECT_CALL(api, DeviceCreateShaderModule(apiDevice, _)).WillOnce(Return(apiModule));
 
-    WGPURenderPipelineDescriptor2 pipelineDescriptor{};
+    WGPURenderPipelineDescriptor pipelineDescriptor{};
     pipelineDescriptor.vertex.module = module;
     pipelineDescriptor.vertex.entryPoint = "main";
 
diff --git a/src/tests/unittests/wire/WireExtensionTests.cpp b/src/tests/unittests/wire/WireExtensionTests.cpp
index ac8d7ce..dabab2c 100644
--- a/src/tests/unittests/wire/WireExtensionTests.cpp
+++ b/src/tests/unittests/wire/WireExtensionTests.cpp
@@ -37,15 +37,15 @@
     clientExt.chain.next = nullptr;
     clientExt.clampDepth = true;
 
-    WGPURenderPipelineDescriptor2 renderPipelineDesc = {};
+    WGPURenderPipelineDescriptor renderPipelineDesc = {};
     renderPipelineDesc.vertex.module = shaderModule;
     renderPipelineDesc.vertex.entryPoint = "main";
     renderPipelineDesc.primitive.nextInChain = &clientExt.chain;
 
-    wgpuDeviceCreateRenderPipeline2(device, &renderPipelineDesc);
-    EXPECT_CALL(api, DeviceCreateRenderPipeline2(apiDevice, NotNull()))
+    wgpuDeviceCreateRenderPipeline(device, &renderPipelineDesc);
+    EXPECT_CALL(api, DeviceCreateRenderPipeline(apiDevice, NotNull()))
         .WillOnce(Invoke([&](Unused,
-                             const WGPURenderPipelineDescriptor2* serverDesc) -> WGPURenderPipeline {
+                             const WGPURenderPipelineDescriptor* serverDesc) -> WGPURenderPipeline {
             const auto* ext = reinterpret_cast<const WGPUPrimitiveDepthClampingState*>(
                 serverDesc->primitive.nextInChain);
             EXPECT_EQ(ext->chain.sType, clientExt.chain.sType);
@@ -75,15 +75,15 @@
     clientExt1.chain.next = &clientExt2.chain;
     clientExt1.clampDepth = true;
 
-    WGPURenderPipelineDescriptor2 renderPipelineDesc = {};
+    WGPURenderPipelineDescriptor renderPipelineDesc = {};
     renderPipelineDesc.vertex.module = shaderModule;
     renderPipelineDesc.vertex.entryPoint = "main";
     renderPipelineDesc.primitive.nextInChain = &clientExt1.chain;
 
-    wgpuDeviceCreateRenderPipeline2(device, &renderPipelineDesc);
-    EXPECT_CALL(api, DeviceCreateRenderPipeline2(apiDevice, NotNull()))
+    wgpuDeviceCreateRenderPipeline(device, &renderPipelineDesc);
+    EXPECT_CALL(api, DeviceCreateRenderPipeline(apiDevice, NotNull()))
         .WillOnce(Invoke([&](Unused,
-                             const WGPURenderPipelineDescriptor2* serverDesc) -> WGPURenderPipeline {
+                             const WGPURenderPipelineDescriptor* serverDesc) -> WGPURenderPipeline {
             const auto* ext1 = reinterpret_cast<const WGPUPrimitiveDepthClampingState*>(
                 serverDesc->primitive.nextInChain);
             EXPECT_EQ(ext1->chain.sType, clientExt1.chain.sType);
@@ -104,10 +104,10 @@
     clientExt2.chain.next = &clientExt1.chain;
     clientExt1.chain.next = nullptr;
 
-    wgpuDeviceCreateRenderPipeline2(device, &renderPipelineDesc);
-    EXPECT_CALL(api, DeviceCreateRenderPipeline2(apiDevice, NotNull()))
+    wgpuDeviceCreateRenderPipeline(device, &renderPipelineDesc);
+    EXPECT_CALL(api, DeviceCreateRenderPipeline(apiDevice, NotNull()))
         .WillOnce(Invoke([&](Unused,
-                             const WGPURenderPipelineDescriptor2* serverDesc) -> WGPURenderPipeline {
+                             const WGPURenderPipelineDescriptor* serverDesc) -> WGPURenderPipeline {
             const auto* ext2 = reinterpret_cast<const WGPUPrimitiveDepthClampingState*>(
                 serverDesc->primitive.nextInChain);
             EXPECT_EQ(ext2->chain.sType, clientExt2.chain.sType);
@@ -136,19 +136,19 @@
     clientExt.chain.sType = WGPUSType_Invalid;
     clientExt.chain.next = nullptr;
 
-    WGPURenderPipelineDescriptor2 renderPipelineDesc = {};
+    WGPURenderPipelineDescriptor renderPipelineDesc = {};
     renderPipelineDesc.vertex.module = shaderModule;
     renderPipelineDesc.vertex.entryPoint = "main";
     renderPipelineDesc.primitive.nextInChain = &clientExt.chain;
 
-    wgpuDeviceCreateRenderPipeline2(device, &renderPipelineDesc);
-    EXPECT_CALL(api, DeviceCreateRenderPipeline2(apiDevice, NotNull()))
-        .WillOnce(Invoke([&](Unused,
-                             const WGPURenderPipelineDescriptor2* serverDesc) -> WGPURenderPipeline {
-            EXPECT_EQ(serverDesc->primitive.nextInChain->sType, WGPUSType_Invalid);
-            EXPECT_EQ(serverDesc->primitive.nextInChain->next, nullptr);
-            return api.GetNewRenderPipeline();
-        }));
+    wgpuDeviceCreateRenderPipeline(device, &renderPipelineDesc);
+    EXPECT_CALL(api, DeviceCreateRenderPipeline(apiDevice, NotNull()))
+        .WillOnce(Invoke(
+            [&](Unused, const WGPURenderPipelineDescriptor* serverDesc) -> WGPURenderPipeline {
+                EXPECT_EQ(serverDesc->primitive.nextInChain->sType, WGPUSType_Invalid);
+                EXPECT_EQ(serverDesc->primitive.nextInChain->next, nullptr);
+                return api.GetNewRenderPipeline();
+            }));
     FlushClient();
 }
 
@@ -164,19 +164,19 @@
     clientExt.chain.sType = static_cast<WGPUSType>(-1);
     clientExt.chain.next = nullptr;
 
-    WGPURenderPipelineDescriptor2 renderPipelineDesc = {};
+    WGPURenderPipelineDescriptor renderPipelineDesc = {};
     renderPipelineDesc.vertex.module = shaderModule;
     renderPipelineDesc.vertex.entryPoint = "main";
     renderPipelineDesc.primitive.nextInChain = &clientExt.chain;
 
-    wgpuDeviceCreateRenderPipeline2(device, &renderPipelineDesc);
-    EXPECT_CALL(api, DeviceCreateRenderPipeline2(apiDevice, NotNull()))
-        .WillOnce(Invoke([&](Unused,
-                             const WGPURenderPipelineDescriptor2* serverDesc) -> WGPURenderPipeline {
-            EXPECT_EQ(serverDesc->primitive.nextInChain->sType, WGPUSType_Invalid);
-            EXPECT_EQ(serverDesc->primitive.nextInChain->next, nullptr);
-            return api.GetNewRenderPipeline();
-        }));
+    wgpuDeviceCreateRenderPipeline(device, &renderPipelineDesc);
+    EXPECT_CALL(api, DeviceCreateRenderPipeline(apiDevice, NotNull()))
+        .WillOnce(Invoke(
+            [&](Unused, const WGPURenderPipelineDescriptor* serverDesc) -> WGPURenderPipeline {
+                EXPECT_EQ(serverDesc->primitive.nextInChain->sType, WGPUSType_Invalid);
+                EXPECT_EQ(serverDesc->primitive.nextInChain->next, nullptr);
+                return api.GetNewRenderPipeline();
+            }));
     FlushClient();
 }
 
@@ -198,15 +198,15 @@
     clientExt1.chain.next = &clientExt2.chain;
     clientExt1.clampDepth = true;
 
-    WGPURenderPipelineDescriptor2 renderPipelineDesc = {};
+    WGPURenderPipelineDescriptor renderPipelineDesc = {};
     renderPipelineDesc.vertex.module = shaderModule;
     renderPipelineDesc.vertex.entryPoint = "main";
     renderPipelineDesc.primitive.nextInChain = &clientExt1.chain;
 
-    wgpuDeviceCreateRenderPipeline2(device, &renderPipelineDesc);
-    EXPECT_CALL(api, DeviceCreateRenderPipeline2(apiDevice, NotNull()))
+    wgpuDeviceCreateRenderPipeline(device, &renderPipelineDesc);
+    EXPECT_CALL(api, DeviceCreateRenderPipeline(apiDevice, NotNull()))
         .WillOnce(Invoke([&](Unused,
-                             const WGPURenderPipelineDescriptor2* serverDesc) -> WGPURenderPipeline {
+                             const WGPURenderPipelineDescriptor* serverDesc) -> WGPURenderPipeline {
             const auto* ext = reinterpret_cast<const WGPUPrimitiveDepthClampingState*>(
                 serverDesc->primitive.nextInChain);
             EXPECT_EQ(ext->chain.sType, clientExt1.chain.sType);
@@ -223,10 +223,10 @@
     clientExt2.chain.next = &clientExt1.chain;
     clientExt1.chain.next = nullptr;
 
-    wgpuDeviceCreateRenderPipeline2(device, &renderPipelineDesc);
-    EXPECT_CALL(api, DeviceCreateRenderPipeline2(apiDevice, NotNull()))
+    wgpuDeviceCreateRenderPipeline(device, &renderPipelineDesc);
+    EXPECT_CALL(api, DeviceCreateRenderPipeline(apiDevice, NotNull()))
         .WillOnce(Invoke([&](Unused,
-                             const WGPURenderPipelineDescriptor2* serverDesc) -> WGPURenderPipeline {
+                             const WGPURenderPipelineDescriptor* serverDesc) -> WGPURenderPipeline {
             EXPECT_EQ(serverDesc->primitive.nextInChain->sType, WGPUSType_Invalid);
 
             const auto* ext = reinterpret_cast<const WGPUPrimitiveDepthClampingState*>(
diff --git a/src/tests/unittests/wire/WireOptionalTests.cpp b/src/tests/unittests/wire/WireOptionalTests.cpp
index 503d91d..012f01d 100644
--- a/src/tests/unittests/wire/WireOptionalTests.cpp
+++ b/src/tests/unittests/wire/WireOptionalTests.cpp
@@ -71,38 +71,26 @@
     EXPECT_CALL(api, DeviceCreateShaderModule(apiDevice, _)).WillOnce(Return(apiVsModule));
 
     // Create the color state descriptor
-    WGPUBlendDescriptor blendDescriptor = {};
-    blendDescriptor.operation = WGPUBlendOperation_Add;
-    blendDescriptor.srcFactor = WGPUBlendFactor_One;
-    blendDescriptor.dstFactor = WGPUBlendFactor_One;
-    WGPUColorStateDescriptor colorStateDescriptor = {};
-    colorStateDescriptor.format = WGPUTextureFormat_RGBA8Unorm;
-    colorStateDescriptor.alphaBlend = blendDescriptor;
-    colorStateDescriptor.colorBlend = blendDescriptor;
-    colorStateDescriptor.writeMask = WGPUColorWriteMask_All;
-
-    // Create the input state
-    WGPUVertexStateDescriptor vertexState = {};
-    vertexState.indexFormat = WGPUIndexFormat_Uint32;
-    vertexState.vertexBufferCount = 0;
-    vertexState.vertexBuffers = nullptr;
-
-    // Create the rasterization state
-    WGPURasterizationStateDescriptor rasterizationState = {};
-    rasterizationState.frontFace = WGPUFrontFace_CCW;
-    rasterizationState.cullMode = WGPUCullMode_None;
-    rasterizationState.depthBias = 0;
-    rasterizationState.depthBiasSlopeScale = 0.0;
-    rasterizationState.depthBiasClamp = 0.0;
+    WGPUBlendComponent blendComponent = {};
+    blendComponent.operation = WGPUBlendOperation_Add;
+    blendComponent.srcFactor = WGPUBlendFactor_One;
+    blendComponent.dstFactor = WGPUBlendFactor_One;
+    WGPUBlendState blendState = {};
+    blendState.alpha = blendComponent;
+    blendState.color = blendComponent;
+    WGPUColorTargetState colorTargetState = {};
+    colorTargetState.format = WGPUTextureFormat_RGBA8Unorm;
+    colorTargetState.blend = &blendState;
+    colorTargetState.writeMask = WGPUColorWriteMask_All;
 
     // Create the depth-stencil state
-    WGPUStencilStateFaceDescriptor stencilFace = {};
+    WGPUStencilFaceState stencilFace = {};
     stencilFace.compare = WGPUCompareFunction_Always;
     stencilFace.failOp = WGPUStencilOperation_Keep;
     stencilFace.depthFailOp = WGPUStencilOperation_Keep;
     stencilFace.passOp = WGPUStencilOperation_Keep;
 
-    WGPUDepthStencilStateDescriptor depthStencilState = {};
+    WGPUDepthStencilState depthStencilState = {};
     depthStencilState.format = WGPUTextureFormat_Depth24PlusStencil8;
     depthStencilState.depthWriteEnabled = false;
     depthStencilState.depthCompare = WGPUCompareFunction_Always;
@@ -110,6 +98,9 @@
     depthStencilState.stencilFront = stencilFace;
     depthStencilState.stencilReadMask = 0xff;
     depthStencilState.stencilWriteMask = 0xff;
+    depthStencilState.depthBias = 0;
+    depthStencilState.depthBiasSlopeScale = 0.0;
+    depthStencilState.depthBiasClamp = 0.0;
 
     // Create the pipeline layout
     WGPUPipelineLayoutDescriptor layoutDescriptor = {};
@@ -122,27 +113,28 @@
     // Create pipeline
     WGPURenderPipelineDescriptor pipelineDescriptor = {};
 
-    pipelineDescriptor.vertexStage.module = vsModule;
-    pipelineDescriptor.vertexStage.entryPoint = "main";
+    pipelineDescriptor.vertex.module = vsModule;
+    pipelineDescriptor.vertex.entryPoint = "main";
+    pipelineDescriptor.vertex.bufferCount = 0;
+    pipelineDescriptor.vertex.buffers = nullptr;
 
-    WGPUProgrammableStageDescriptor fragmentStage = {};
-    fragmentStage.module = vsModule;
-    fragmentStage.entryPoint = "main";
-    pipelineDescriptor.fragmentStage = &fragmentStage;
+    WGPUFragmentState fragment = {};
+    fragment.module = vsModule;
+    fragment.entryPoint = "main";
+    fragment.targetCount = 1;
+    fragment.targets = &colorTargetState;
+    pipelineDescriptor.fragment = &fragment;
 
-    pipelineDescriptor.colorStateCount = 1;
-    pipelineDescriptor.colorStates = &colorStateDescriptor;
-
-    pipelineDescriptor.sampleCount = 1;
-    pipelineDescriptor.sampleMask = 0xFFFFFFFF;
-    pipelineDescriptor.alphaToCoverageEnabled = false;
+    pipelineDescriptor.multisample.count = 1;
+    pipelineDescriptor.multisample.mask = 0xFFFFFFFF;
+    pipelineDescriptor.multisample.alphaToCoverageEnabled = false;
     pipelineDescriptor.layout = layout;
-    pipelineDescriptor.vertexState = &vertexState;
-    pipelineDescriptor.primitiveTopology = WGPUPrimitiveTopology_TriangleList;
-    pipelineDescriptor.rasterizationState = &rasterizationState;
+    pipelineDescriptor.primitive.topology = WGPUPrimitiveTopology_TriangleList;
+    pipelineDescriptor.primitive.frontFace = WGPUFrontFace_CCW;
+    pipelineDescriptor.primitive.cullMode = WGPUCullMode_None;
 
-    // First case: depthStencilState is not null.
-    pipelineDescriptor.depthStencilState = &depthStencilState;
+    // First case: depthStencil is not null.
+    pipelineDescriptor.depthStencil = &depthStencilState;
     wgpuDeviceCreateRenderPipeline(device, &pipelineDescriptor);
 
     WGPURenderPipeline apiDummyPipeline = api.GetNewRenderPipeline();
@@ -150,35 +142,35 @@
         api,
         DeviceCreateRenderPipeline(
             apiDevice, MatchesLambda([](const WGPURenderPipelineDescriptor* desc) -> bool {
-                return desc->depthStencilState != nullptr &&
-                       desc->depthStencilState->nextInChain == nullptr &&
-                       desc->depthStencilState->depthWriteEnabled == false &&
-                       desc->depthStencilState->depthCompare == WGPUCompareFunction_Always &&
-                       desc->depthStencilState->stencilBack.compare == WGPUCompareFunction_Always &&
-                       desc->depthStencilState->stencilBack.failOp == WGPUStencilOperation_Keep &&
-                       desc->depthStencilState->stencilBack.depthFailOp ==
-                           WGPUStencilOperation_Keep &&
-                       desc->depthStencilState->stencilBack.passOp == WGPUStencilOperation_Keep &&
-                       desc->depthStencilState->stencilFront.compare ==
-                           WGPUCompareFunction_Always &&
-                       desc->depthStencilState->stencilFront.failOp == WGPUStencilOperation_Keep &&
-                       desc->depthStencilState->stencilFront.depthFailOp ==
-                           WGPUStencilOperation_Keep &&
-                       desc->depthStencilState->stencilFront.passOp == WGPUStencilOperation_Keep &&
-                       desc->depthStencilState->stencilReadMask == 0xff &&
-                       desc->depthStencilState->stencilWriteMask == 0xff;
+                return desc->depthStencil != nullptr &&
+                       desc->depthStencil->nextInChain == nullptr &&
+                       desc->depthStencil->depthWriteEnabled == false &&
+                       desc->depthStencil->depthCompare == WGPUCompareFunction_Always &&
+                       desc->depthStencil->stencilBack.compare == WGPUCompareFunction_Always &&
+                       desc->depthStencil->stencilBack.failOp == WGPUStencilOperation_Keep &&
+                       desc->depthStencil->stencilBack.depthFailOp == WGPUStencilOperation_Keep &&
+                       desc->depthStencil->stencilBack.passOp == WGPUStencilOperation_Keep &&
+                       desc->depthStencil->stencilFront.compare == WGPUCompareFunction_Always &&
+                       desc->depthStencil->stencilFront.failOp == WGPUStencilOperation_Keep &&
+                       desc->depthStencil->stencilFront.depthFailOp == WGPUStencilOperation_Keep &&
+                       desc->depthStencil->stencilFront.passOp == WGPUStencilOperation_Keep &&
+                       desc->depthStencil->stencilReadMask == 0xff &&
+                       desc->depthStencil->stencilWriteMask == 0xff &&
+                       desc->depthStencil->depthBias == 0 &&
+                       desc->depthStencil->depthBiasSlopeScale == 0.0 &&
+                       desc->depthStencil->depthBiasClamp == 0.0;
             })))
         .WillOnce(Return(apiDummyPipeline));
 
     FlushClient();
 
-    // Second case: depthStencilState is null.
-    pipelineDescriptor.depthStencilState = nullptr;
+    // Second case: depthStencil is null.
+    pipelineDescriptor.depthStencil = nullptr;
     wgpuDeviceCreateRenderPipeline(device, &pipelineDescriptor);
     EXPECT_CALL(api,
                 DeviceCreateRenderPipeline(
                     apiDevice, MatchesLambda([](const WGPURenderPipelineDescriptor* desc) -> bool {
-                        return desc->depthStencilState == nullptr;
+                        return desc->depthStencil == nullptr;
                     })))
         .WillOnce(Return(apiDummyPipeline));
 
diff --git a/src/tests/white_box/D3D12DescriptorHeapTests.cpp b/src/tests/white_box/D3D12DescriptorHeapTests.cpp
index ffd2ccc..479e2b7 100644
--- a/src/tests/white_box/D3D12DescriptorHeapTests.cpp
+++ b/src/tests/white_box/D3D12DescriptorHeapTests.cpp
@@ -126,14 +126,14 @@
     DAWN_SKIP_TEST_IF(!mD3DDevice->IsToggleEnabled(
         dawn_native::Toggle::UseD3D12SmallShaderVisibleHeapForTesting));
 
-    utils::ComboRenderPipelineDescriptor2 renderPipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor renderPipelineDescriptor;
 
     // Fill in a view heap with "view only" bindgroups (1x view per group) by creating a
     // view bindgroup each draw. After HEAP_SIZE + 1 draws, the heaps must switch over.
     renderPipelineDescriptor.vertex.module = mSimpleVSModule;
     renderPipelineDescriptor.cFragment.module = mSimpleFSModule;
 
-    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline2(&renderPipelineDescriptor);
+    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline(&renderPipelineDescriptor);
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
     Device* d3dDevice = reinterpret_cast<Device*>(device.Get());
@@ -170,7 +170,7 @@
 
 // Verify the shader visible sampler heaps does not switch over within a single submit.
 TEST_P(D3D12DescriptorHeapTests, NoSwitchOverSamplerHeap) {
-    utils::ComboRenderPipelineDescriptor2 renderPipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor renderPipelineDescriptor;
 
     // Fill in a sampler heap with "sampler only" bindgroups (1x sampler per group) by creating a
     // sampler bindgroup each draw. After HEAP_SIZE + 1 draws, the heaps WILL NOT switch over
@@ -187,7 +187,7 @@
                 return vec4<f32>(0.0, 0.0, 0.0, 0.0);
             })");
 
-    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline2(&renderPipelineDescriptor);
+    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline(&renderPipelineDescriptor);
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
     wgpu::Sampler sampler = device.CreateSampler();
@@ -440,7 +440,7 @@
     utils::BasicRenderPass renderPass =
         MakeRenderPass(kRTSize, kRTSize, wgpu::TextureFormat::R32Float);
 
-    utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor pipelineDescriptor;
     pipelineDescriptor.vertex.module = mSimpleVSModule;
 
     pipelineDescriptor.cFragment.module = utils::CreateShaderModule(device, R"(
@@ -464,7 +464,7 @@
     pipelineDescriptor.cTargets[0].format = wgpu::TextureFormat::R32Float;
     pipelineDescriptor.cTargets[0].blend = &blend;
 
-    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline2(&pipelineDescriptor);
+    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline(&pipelineDescriptor);
 
     const uint32_t heapSize =
         mD3DDevice->GetViewShaderVisibleDescriptorAllocator()->GetShaderVisibleHeapSizeForTesting();
@@ -514,16 +514,14 @@
     // TODO(crbug.com/dawn/742): Test output is wrong with D3D12 + WARP.
     DAWN_SKIP_TEST_IF(IsD3D12() && IsWARP());
 
-    utils::ComboRenderPipelineDescriptor renderPipelineDescriptor(device);
-
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
-    utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor pipelineDescriptor;
     pipelineDescriptor.vertex.module = mSimpleVSModule;
     pipelineDescriptor.cFragment.module = mSimpleFSModule;
     pipelineDescriptor.cTargets[0].format = renderPass.colorFormat;
 
-    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline2(&pipelineDescriptor);
+    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline(&pipelineDescriptor);
 
     // Encode the first descriptor and submit.
     {
@@ -603,12 +601,12 @@
 
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
-    utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor pipelineDescriptor;
     pipelineDescriptor.vertex.module = mSimpleVSModule;
     pipelineDescriptor.cFragment.module = mSimpleFSModule;
     pipelineDescriptor.cTargets[0].format = renderPass.colorFormat;
 
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&pipelineDescriptor);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&pipelineDescriptor);
 
     std::array<float, 4> redColor = {1, 0, 0, 1};
     wgpu::Buffer firstUniformBuffer = utils::CreateBufferFromData(
@@ -664,12 +662,12 @@
 
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
 
-    utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor pipelineDescriptor;
     pipelineDescriptor.vertex.module = mSimpleVSModule;
     pipelineDescriptor.cFragment.module = mSimpleFSModule;
     pipelineDescriptor.cTargets[0].format = renderPass.colorFormat;
 
-    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&pipelineDescriptor);
+    wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&pipelineDescriptor);
 
     // Encode heap worth of descriptors plus one more.
     std::array<float, 4> redColor = {1, 0, 0, 1};
@@ -776,7 +774,7 @@
     }
 
     {
-        utils::ComboRenderPipelineDescriptor2 pipelineDescriptor;
+        utils::ComboRenderPipelineDescriptor pipelineDescriptor;
 
         pipelineDescriptor.vertex.module = utils::CreateShaderModule(device, R"(
             [[block]] struct U {
@@ -811,7 +809,7 @@
         utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
         pipelineDescriptor.cTargets[0].format = renderPass.colorFormat;
 
-        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&pipelineDescriptor);
+        wgpu::RenderPipeline pipeline = device.CreateRenderPipeline(&pipelineDescriptor);
 
         // Encode a heap worth of descriptors |kNumOfHeaps| times.
         constexpr float dummy = 0.0f;
diff --git a/src/tests/white_box/D3D12ResidencyTests.cpp b/src/tests/white_box/D3D12ResidencyTests.cpp
index 804d933..e22dc73 100644
--- a/src/tests/white_box/D3D12ResidencyTests.cpp
+++ b/src/tests/white_box/D3D12ResidencyTests.cpp
@@ -334,7 +334,7 @@
     // unknown file: error: SEH exception with code 0x87d thrown in the test body.
     DAWN_SKIP_TEST_IF(IsD3D12() && IsWARP() && IsBackendValidationEnabled());
 
-    utils::ComboRenderPipelineDescriptor2 renderPipelineDescriptor;
+    utils::ComboRenderPipelineDescriptor renderPipelineDescriptor;
 
     // Fill in a view heap with "view only" bindgroups (1x view per group) by creating a
     // view bindgroup each draw. After HEAP_SIZE + 1 draws, the heaps must switch over.
@@ -360,7 +360,7 @@
                 return colorBuffer.color;
             })");
 
-    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline2(&renderPipelineDescriptor);
+    wgpu::RenderPipeline renderPipeline = device.CreateRenderPipeline(&renderPipelineDescriptor);
     constexpr uint32_t kSize = 512;
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kSize, kSize);
 
diff --git a/src/utils/ComboRenderPipelineDescriptor.cpp b/src/utils/ComboRenderPipelineDescriptor.cpp
index c1ecb5b..6b48bb2 100644
--- a/src/utils/ComboRenderPipelineDescriptor.cpp
+++ b/src/utils/ComboRenderPipelineDescriptor.cpp
@@ -21,10 +21,7 @@
     // For creating deprecated render pipeline descriptors
 
     ComboVertexStateDescriptor::ComboVertexStateDescriptor() {
-        wgpu::VertexStateDescriptor* descriptor = this;
-
-        descriptor->indexFormat = wgpu::IndexFormat::Undefined;
-        descriptor->vertexBufferCount = 0;
+        vertexBufferCount = 0;
 
         // Fill the default values for vertexBuffers and vertexAttributes in buffers.
         wgpu::VertexAttributeDescriptor vertexAttribute;
@@ -46,79 +43,11 @@
         // &cAttributes[2]. Likewise, if cVertexBuffers[1] has 3 attributes, then
         // cVertexBuffers[2].attributes should point to &cAttributes[5].
         cVertexBuffers[0].attributes = &cAttributes[0];
-        descriptor->vertexBuffers = &cVertexBuffers[0];
     }
 
-    ComboRenderPipelineDescriptor::ComboRenderPipelineDescriptor(const wgpu::Device& device) {
+    ComboRenderPipelineDescriptor::ComboRenderPipelineDescriptor() {
         wgpu::RenderPipelineDescriptor* descriptor = this;
 
-        descriptor->primitiveTopology = wgpu::PrimitiveTopology::TriangleList;
-        descriptor->sampleCount = 1;
-
-        // Set defaults for the vertex stage descriptor.
-        { vertexStage.entryPoint = "main"; }
-
-        // Set defaults for the fragment stage desriptor.
-        {
-            descriptor->fragmentStage = &cFragmentStage;
-            cFragmentStage.entryPoint = "main";
-        }
-
-        // Set defaults for the input state descriptors.
-        descriptor->vertexState = &cVertexState;
-
-        // Set defaults for the rasterization state descriptor.
-        {
-            cRasterizationState.frontFace = wgpu::FrontFace::CCW;
-            cRasterizationState.cullMode = wgpu::CullMode::None;
-
-            cRasterizationState.depthBias = 0;
-            cRasterizationState.depthBiasSlopeScale = 0.0;
-            cRasterizationState.depthBiasClamp = 0.0;
-            descriptor->rasterizationState = &cRasterizationState;
-        }
-
-        // Set defaults for the color state descriptors.
-        {
-            descriptor->colorStateCount = 1;
-            descriptor->colorStates = cColorStates.data();
-
-            wgpu::BlendDescriptor blend;
-            blend.operation = wgpu::BlendOperation::Add;
-            blend.srcFactor = wgpu::BlendFactor::One;
-            blend.dstFactor = wgpu::BlendFactor::Zero;
-            wgpu::ColorStateDescriptor colorStateDescriptor;
-            colorStateDescriptor.format = wgpu::TextureFormat::RGBA8Unorm;
-            colorStateDescriptor.alphaBlend = blend;
-            colorStateDescriptor.colorBlend = blend;
-            colorStateDescriptor.writeMask = wgpu::ColorWriteMask::All;
-            for (uint32_t i = 0; i < kMaxColorAttachments; ++i) {
-                cColorStates[i] = colorStateDescriptor;
-            }
-        }
-
-        // Set defaults for the depth stencil state descriptors.
-        {
-            wgpu::StencilStateFaceDescriptor stencilFace;
-            stencilFace.compare = wgpu::CompareFunction::Always;
-            stencilFace.failOp = wgpu::StencilOperation::Keep;
-            stencilFace.depthFailOp = wgpu::StencilOperation::Keep;
-            stencilFace.passOp = wgpu::StencilOperation::Keep;
-
-            cDepthStencilState.format = wgpu::TextureFormat::Depth24PlusStencil8;
-            cDepthStencilState.depthWriteEnabled = false;
-            cDepthStencilState.depthCompare = wgpu::CompareFunction::Always;
-            cDepthStencilState.stencilBack = stencilFace;
-            cDepthStencilState.stencilFront = stencilFace;
-            cDepthStencilState.stencilReadMask = 0xff;
-            cDepthStencilState.stencilWriteMask = 0xff;
-            descriptor->depthStencilState = nullptr;
-        }
-    }
-
-    ComboRenderPipelineDescriptor2::ComboRenderPipelineDescriptor2() {
-        wgpu::RenderPipelineDescriptor2* descriptor = this;
-
         // Set defaults for the vertex state.
         {
             wgpu::VertexState* vertex = &descriptor->vertex;
@@ -208,7 +137,7 @@
         }
     }
 
-    wgpu::DepthStencilState* ComboRenderPipelineDescriptor2::EnableDepthStencil(
+    wgpu::DepthStencilState* ComboRenderPipelineDescriptor::EnableDepthStencil(
         wgpu::TextureFormat format) {
         this->depthStencil = &cDepthStencil;
         cDepthStencil.format = format;
diff --git a/src/utils/ComboRenderPipelineDescriptor.h b/src/utils/ComboRenderPipelineDescriptor.h
index 0624169..ade8375 100644
--- a/src/utils/ComboRenderPipelineDescriptor.h
+++ b/src/utils/ComboRenderPipelineDescriptor.h
@@ -23,8 +23,7 @@
 
 namespace utils {
 
-    // For creating deprecated render pipeline descriptors
-    class ComboVertexStateDescriptor : public wgpu::VertexStateDescriptor {
+    class ComboVertexStateDescriptor {
       public:
         ComboVertexStateDescriptor();
 
@@ -33,37 +32,21 @@
         ComboVertexStateDescriptor(ComboVertexStateDescriptor&&) = delete;
         ComboVertexStateDescriptor& operator=(ComboVertexStateDescriptor&&) = delete;
 
+        uint32_t vertexBufferCount;
         std::array<wgpu::VertexBufferLayoutDescriptor, kMaxVertexBuffers> cVertexBuffers;
         std::array<wgpu::VertexAttributeDescriptor, kMaxVertexAttributes> cAttributes;
     };
 
+    // For creating the new style of render pipeline descriptors
     class ComboRenderPipelineDescriptor : public wgpu::RenderPipelineDescriptor {
       public:
-        ComboRenderPipelineDescriptor(const wgpu::Device& device);
+        ComboRenderPipelineDescriptor();
 
         ComboRenderPipelineDescriptor(const ComboRenderPipelineDescriptor&) = delete;
         ComboRenderPipelineDescriptor& operator=(const ComboRenderPipelineDescriptor&) = delete;
         ComboRenderPipelineDescriptor(ComboRenderPipelineDescriptor&&) = delete;
         ComboRenderPipelineDescriptor& operator=(ComboRenderPipelineDescriptor&&) = delete;
 
-        wgpu::ProgrammableStageDescriptor cFragmentStage;
-
-        ComboVertexStateDescriptor cVertexState;
-        wgpu::RasterizationStateDescriptor cRasterizationState;
-        std::array<wgpu::ColorStateDescriptor, kMaxColorAttachments> cColorStates;
-        wgpu::DepthStencilStateDescriptor cDepthStencilState;
-    };
-
-    // For creating the new style of render pipeline descriptors
-    class ComboRenderPipelineDescriptor2 : public wgpu::RenderPipelineDescriptor2 {
-      public:
-        ComboRenderPipelineDescriptor2();
-
-        ComboRenderPipelineDescriptor2(const ComboRenderPipelineDescriptor2&) = delete;
-        ComboRenderPipelineDescriptor2& operator=(const ComboRenderPipelineDescriptor2&) = delete;
-        ComboRenderPipelineDescriptor2(ComboRenderPipelineDescriptor2&&) = delete;
-        ComboRenderPipelineDescriptor2& operator=(ComboRenderPipelineDescriptor2&&) = delete;
-
         wgpu::DepthStencilState* EnableDepthStencil(
             wgpu::TextureFormat format = wgpu::TextureFormat::Depth24PlusStencil8);