diff --git a/src/backend/CMakeLists.txt b/src/backend/CMakeLists.txt
index 5a0635d..1bb4190 100644
--- a/src/backend/CMakeLists.txt
+++ b/src/backend/CMakeLists.txt
@@ -249,8 +249,8 @@
         ${D3D12_DIR}/PipelineLayoutD3D12.h
         ${D3D12_DIR}/QueueD3D12.cpp
         ${D3D12_DIR}/QueueD3D12.h
-        ${D3D12_DIR}/RenderPassInfoD3D12.cpp
-        ${D3D12_DIR}/RenderPassInfoD3D12.h
+        ${D3D12_DIR}/RenderPassDescriptorD3D12.cpp
+        ${D3D12_DIR}/RenderPassDescriptorD3D12.h
         ${D3D12_DIR}/RenderPipelineD3D12.cpp
         ${D3D12_DIR}/RenderPipelineD3D12.h
         ${D3D12_DIR}/ResourceAllocator.cpp
@@ -318,8 +318,8 @@
         ${VULKAN_DIR}/PipelineLayoutVk.h
         ${VULKAN_DIR}/RenderPassCache.cpp
         ${VULKAN_DIR}/RenderPassCache.h
-        ${VULKAN_DIR}/RenderPassInfoVk.cpp
-        ${VULKAN_DIR}/RenderPassInfoVk.h
+        ${VULKAN_DIR}/RenderPassDescriptorVk.cpp
+        ${VULKAN_DIR}/RenderPassDescriptorVk.h
         ${VULKAN_DIR}/RenderPipelineVk.cpp
         ${VULKAN_DIR}/RenderPipelineVk.h
         ${VULKAN_DIR}/SamplerVk.cpp
@@ -379,8 +379,8 @@
     ${BACKEND_DIR}/PipelineLayout.h
     ${BACKEND_DIR}/Queue.cpp
     ${BACKEND_DIR}/Queue.h
-    ${BACKEND_DIR}/RenderPassInfo.cpp
-    ${BACKEND_DIR}/RenderPassInfo.h
+    ${BACKEND_DIR}/RenderPassDescriptor.cpp
+    ${BACKEND_DIR}/RenderPassDescriptor.h
     ${BACKEND_DIR}/RefCounted.cpp
     ${BACKEND_DIR}/RefCounted.h
     ${BACKEND_DIR}/Sampler.cpp
diff --git a/src/backend/CommandBuffer.cpp b/src/backend/CommandBuffer.cpp
index 747fa92..2ee9c1f 100644
--- a/src/backend/CommandBuffer.cpp
+++ b/src/backend/CommandBuffer.cpp
@@ -368,7 +368,7 @@
 
                 case Command::BeginRenderPass: {
                     BeginRenderPassCmd* cmd = mIterator.NextCommand<BeginRenderPassCmd>();
-                    RenderPassInfoBase* info = cmd->info.Get();
+                    RenderPassDescriptorBase* info = cmd->info.Get();
                     if (!mState->BeginRenderPass(info)) {
                         return false;
                     }
@@ -578,7 +578,7 @@
         mAllocator.Allocate<BeginComputePassCmd>(Command::BeginComputePass);
     }
 
-    void CommandBufferBuilder::BeginRenderPass(RenderPassInfoBase* info) {
+    void CommandBufferBuilder::BeginRenderPass(RenderPassDescriptorBase* info) {
         BeginRenderPassCmd* cmd = mAllocator.Allocate<BeginRenderPassCmd>(Command::BeginRenderPass);
         new (cmd) BeginRenderPassCmd;
         cmd->info = info;
diff --git a/src/backend/CommandBuffer.h b/src/backend/CommandBuffer.h
index 4375cd6..23f17e2 100644
--- a/src/backend/CommandBuffer.h
+++ b/src/backend/CommandBuffer.h
@@ -62,7 +62,7 @@
 
         // NXT API
         void BeginComputePass();
-        void BeginRenderPass(RenderPassInfoBase* info);
+        void BeginRenderPass(RenderPassDescriptorBase* info);
         void CopyBufferToBuffer(BufferBase* source,
                                 uint32_t sourceOffset,
                                 BufferBase* destination,
diff --git a/src/backend/CommandBufferStateTracker.cpp b/src/backend/CommandBufferStateTracker.cpp
index fe4822f..81971f9 100644
--- a/src/backend/CommandBufferStateTracker.cpp
+++ b/src/backend/CommandBufferStateTracker.cpp
@@ -21,7 +21,7 @@
 #include "backend/Forward.h"
 #include "backend/InputState.h"
 #include "backend/PipelineLayout.h"
-#include "backend/RenderPassInfo.h"
+#include "backend/RenderPassDescriptor.h"
 #include "backend/RenderPipeline.h"
 #include "backend/Texture.h"
 #include "common/Assert.h"
@@ -166,7 +166,7 @@
         return true;
     }
 
-    bool CommandBufferStateTracker::BeginRenderPass(RenderPassInfoBase* info) {
+    bool CommandBufferStateTracker::BeginRenderPass(RenderPassDescriptorBase* info) {
         if (mAspects[VALIDATION_ASPECT_COMPUTE_PASS]) {
             mBuilder->HandleError("Cannot begin a render pass while a compute pass is active");
             return false;
diff --git a/src/backend/CommandBufferStateTracker.h b/src/backend/CommandBufferStateTracker.h
index c2af36f..85d2901 100644
--- a/src/backend/CommandBufferStateTracker.h
+++ b/src/backend/CommandBufferStateTracker.h
@@ -42,7 +42,7 @@
         // State-modifying methods
         bool BeginComputePass();
         bool EndComputePass();
-        bool BeginRenderPass(RenderPassInfoBase* info);
+        bool BeginRenderPass(RenderPassDescriptorBase* info);
         bool EndRenderPass();
         bool SetComputePipeline(ComputePipelineBase* pipeline);
         bool SetRenderPipeline(RenderPipelineBase* pipeline);
@@ -106,7 +106,7 @@
         std::map<BufferBase*, nxt::BufferUsageBit> mMostRecentBufferUsages;
         std::map<TextureBase*, nxt::TextureUsageBit> mMostRecentTextureUsages;
 
-        RenderPassInfoBase* mCurrentRenderPass = nullptr;
+        RenderPassDescriptorBase* mCurrentRenderPass = nullptr;
     };
 }  // namespace backend
 
diff --git a/src/backend/Commands.h b/src/backend/Commands.h
index e90397c..2d70a1a 100644
--- a/src/backend/Commands.h
+++ b/src/backend/Commands.h
@@ -15,7 +15,7 @@
 #ifndef BACKEND_COMMANDS_H_
 #define BACKEND_COMMANDS_H_
 
-#include "backend/RenderPassInfo.h"
+#include "backend/RenderPassDescriptor.h"
 #include "backend/Texture.h"
 
 #include "nxt/nxtcpp.h"
@@ -53,7 +53,7 @@
     struct BeginComputePassCmd {};
 
     struct BeginRenderPassCmd {
-        Ref<RenderPassInfoBase> info;
+        Ref<RenderPassDescriptorBase> info;
     };
 
     struct BufferCopyLocation {
diff --git a/src/backend/Device.cpp b/src/backend/Device.cpp
index 8a02c56..9576d94 100644
--- a/src/backend/Device.cpp
+++ b/src/backend/Device.cpp
@@ -24,7 +24,7 @@
 #include "backend/InputState.h"
 #include "backend/PipelineLayout.h"
 #include "backend/Queue.h"
-#include "backend/RenderPassInfo.h"
+#include "backend/RenderPassDescriptor.h"
 #include "backend/RenderPipeline.h"
 #include "backend/Sampler.h"
 #include "backend/ShaderModule.h"
@@ -124,8 +124,8 @@
     QueueBuilder* DeviceBase::CreateQueueBuilder() {
         return new QueueBuilder(this);
     }
-    RenderPassInfoBuilder* DeviceBase::CreateRenderPassInfoBuilder() {
-        return new RenderPassInfoBuilder(this);
+    RenderPassDescriptorBuilder* DeviceBase::CreateRenderPassDescriptorBuilder() {
+        return new RenderPassDescriptorBuilder(this);
     }
     RenderPipelineBuilder* DeviceBase::CreateRenderPipelineBuilder() {
         return new RenderPipelineBuilder(this);
diff --git a/src/backend/Device.h b/src/backend/Device.h
index df23d22..b076c2e 100644
--- a/src/backend/Device.h
+++ b/src/backend/Device.h
@@ -46,7 +46,8 @@
         virtual InputStateBase* CreateInputState(InputStateBuilder* builder) = 0;
         virtual PipelineLayoutBase* CreatePipelineLayout(PipelineLayoutBuilder* builder) = 0;
         virtual QueueBase* CreateQueue(QueueBuilder* builder) = 0;
-        virtual RenderPassInfoBase* CreateRenderPassInfo(RenderPassInfoBuilder* builder) = 0;
+        virtual RenderPassDescriptorBase* CreateRenderPassDescriptor(
+            RenderPassDescriptorBuilder* builder) = 0;
         virtual RenderPipelineBase* CreateRenderPipeline(RenderPipelineBuilder* builder) = 0;
         virtual SamplerBase* CreateSampler(SamplerBuilder* builder) = 0;
         virtual ShaderModuleBase* CreateShaderModule(ShaderModuleBuilder* builder) = 0;
@@ -85,7 +86,7 @@
         InputStateBuilder* CreateInputStateBuilder();
         PipelineLayoutBuilder* CreatePipelineLayoutBuilder();
         QueueBuilder* CreateQueueBuilder();
-        RenderPassInfoBuilder* CreateRenderPassInfoBuilder();
+        RenderPassDescriptorBuilder* CreateRenderPassDescriptorBuilder();
         RenderPipelineBuilder* CreateRenderPipelineBuilder();
         SamplerBuilder* CreateSamplerBuilder();
         ShaderModuleBuilder* CreateShaderModuleBuilder();
diff --git a/src/backend/Forward.h b/src/backend/Forward.h
index 418dd68..1cab93f 100644
--- a/src/backend/Forward.h
+++ b/src/backend/Forward.h
@@ -41,8 +41,8 @@
     class PipelineLayoutBuilder;
     class QueueBase;
     class QueueBuilder;
-    class RenderPassInfoBase;
-    class RenderPassInfoBuilder;
+    class RenderPassDescriptorBase;
+    class RenderPassDescriptorBuilder;
     class RenderPipelineBase;
     class RenderPipelineBuilder;
     class SamplerBase;
diff --git a/src/backend/RenderPassInfo.cpp b/src/backend/RenderPassDescriptor.cpp
similarity index 68%
rename from src/backend/RenderPassInfo.cpp
rename to src/backend/RenderPassDescriptor.cpp
index 1bf0903..bfd55d2 100644
--- a/src/backend/RenderPassInfo.cpp
+++ b/src/backend/RenderPassDescriptor.cpp
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "backend/RenderPassInfo.h"
+#include "backend/RenderPassDescriptor.h"
 
 #include "backend/Device.h"
 #include "backend/Texture.h"
@@ -21,9 +21,9 @@
 
 namespace backend {
 
-    // RenderPassInfo
+    // RenderPassDescriptor
 
-    RenderPassInfoBase::RenderPassInfoBase(RenderPassInfoBuilder* builder)
+    RenderPassDescriptorBase::RenderPassDescriptorBase(RenderPassDescriptorBuilder* builder)
         : mColorAttachmentsSet(builder->mColorAttachmentsSet),
           mColorAttachments(builder->mColorAttachments),
           mDepthStencilAttachmentSet(builder->mDepthStencilAttachmentSet),
@@ -32,15 +32,15 @@
           mHeight(builder->mHeight) {
     }
 
-    std::bitset<kMaxColorAttachments> RenderPassInfoBase::GetColorAttachmentMask() const {
+    std::bitset<kMaxColorAttachments> RenderPassDescriptorBase::GetColorAttachmentMask() const {
         return mColorAttachmentsSet;
     }
 
-    bool RenderPassInfoBase::HasDepthStencilAttachment() const {
+    bool RenderPassDescriptorBase::HasDepthStencilAttachment() const {
         return mDepthStencilAttachmentSet;
     }
 
-    const RenderPassColorAttachmentInfo& RenderPassInfoBase::GetColorAttachment(
+    const RenderPassColorAttachmentInfo& RenderPassDescriptorBase::GetColorAttachment(
         uint32_t attachment) const {
         ASSERT(attachment < kMaxColorAttachments);
         ASSERT(mColorAttachmentsSet[attachment]);
@@ -48,40 +48,41 @@
         return mColorAttachments[attachment];
     }
 
-    RenderPassColorAttachmentInfo& RenderPassInfoBase::GetColorAttachment(uint32_t attachment) {
+    RenderPassColorAttachmentInfo& RenderPassDescriptorBase::GetColorAttachment(
+        uint32_t attachment) {
         ASSERT(attachment < kMaxColorAttachments);
         ASSERT(mColorAttachmentsSet[attachment]);
 
         return mColorAttachments[attachment];
     }
 
-    const RenderPassDepthStencilAttachmentInfo& RenderPassInfoBase::GetDepthStencilAttachment()
-        const {
+    const RenderPassDepthStencilAttachmentInfo&
+    RenderPassDescriptorBase::GetDepthStencilAttachment() const {
         ASSERT(mDepthStencilAttachmentSet);
 
         return mDepthStencilAttachment;
     }
 
-    RenderPassDepthStencilAttachmentInfo& RenderPassInfoBase::GetDepthStencilAttachment() {
+    RenderPassDepthStencilAttachmentInfo& RenderPassDescriptorBase::GetDepthStencilAttachment() {
         ASSERT(mDepthStencilAttachmentSet);
 
         return mDepthStencilAttachment;
     }
 
-    uint32_t RenderPassInfoBase::GetWidth() const {
+    uint32_t RenderPassDescriptorBase::GetWidth() const {
         return mWidth;
     }
 
-    uint32_t RenderPassInfoBase::GetHeight() const {
+    uint32_t RenderPassDescriptorBase::GetHeight() const {
         return mHeight;
     }
 
-    // RenderPassInfoBuilder
+    // RenderPassDescriptorBuilder
 
-    RenderPassInfoBuilder::RenderPassInfoBuilder(DeviceBase* device) : Builder(device) {
+    RenderPassDescriptorBuilder::RenderPassDescriptorBuilder(DeviceBase* device) : Builder(device) {
     }
 
-    RenderPassInfoBase* RenderPassInfoBuilder::GetResultImpl() {
+    RenderPassDescriptorBase* RenderPassDescriptorBuilder::GetResultImpl() {
         auto CheckOrSetSize = [this](const TextureViewBase* attachment) -> bool {
             if (this->mWidth == 0) {
                 ASSERT(this->mHeight == 0);
@@ -120,12 +121,12 @@
             return nullptr;
         }
 
-        return mDevice->CreateRenderPassInfo(this);
+        return mDevice->CreateRenderPassDescriptor(this);
     }
 
-    void RenderPassInfoBuilder::SetColorAttachment(uint32_t attachment,
-                                                   TextureViewBase* textureView,
-                                                   nxt::LoadOp loadOp) {
+    void RenderPassDescriptorBuilder::SetColorAttachment(uint32_t attachment,
+                                                         TextureViewBase* textureView,
+                                                         nxt::LoadOp loadOp) {
         if (attachment >= kMaxColorAttachments) {
             HandleError("Setting color attachment out of bounds");
             return;
@@ -141,11 +142,11 @@
         mColorAttachments[attachment].view = textureView;
     }
 
-    void RenderPassInfoBuilder::SetColorAttachmentClearColor(uint32_t attachment,
-                                                             float clearR,
-                                                             float clearG,
-                                                             float clearB,
-                                                             float clearA) {
+    void RenderPassDescriptorBuilder::SetColorAttachmentClearColor(uint32_t attachment,
+                                                                   float clearR,
+                                                                   float clearG,
+                                                                   float clearB,
+                                                                   float clearA) {
         if (attachment >= kMaxColorAttachments) {
             HandleError("Setting color attachment out of bounds");
             return;
@@ -157,9 +158,9 @@
         mColorAttachments[attachment].clearColor[3] = clearA;
     }
 
-    void RenderPassInfoBuilder::SetDepthStencilAttachment(TextureViewBase* textureView,
-                                                          nxt::LoadOp depthLoadOp,
-                                                          nxt::LoadOp stencilLoadOp) {
+    void RenderPassDescriptorBuilder::SetDepthStencilAttachment(TextureViewBase* textureView,
+                                                                nxt::LoadOp depthLoadOp,
+                                                                nxt::LoadOp stencilLoadOp) {
         if (!TextureFormatHasDepthOrStencil(textureView->GetTexture()->GetFormat())) {
             HandleError("Using color texture as depth stencil attachment");
             return;
@@ -171,8 +172,8 @@
         mDepthStencilAttachment.view = textureView;
     }
 
-    void RenderPassInfoBuilder::SetDepthStencilAttachmentClearValue(float clearDepth,
-                                                                    uint32_t clearStencil) {
+    void RenderPassDescriptorBuilder::SetDepthStencilAttachmentClearValue(float clearDepth,
+                                                                          uint32_t clearStencil) {
         mDepthStencilAttachment.clearDepth = clearDepth;
         mDepthStencilAttachment.clearStencil = clearStencil;
     }
diff --git a/src/backend/RenderPassInfo.h b/src/backend/RenderPassDescriptor.h
similarity index 84%
rename from src/backend/RenderPassInfo.h
rename to src/backend/RenderPassDescriptor.h
index 09962d4..956138a 100644
--- a/src/backend/RenderPassInfo.h
+++ b/src/backend/RenderPassDescriptor.h
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef BACKEND_RENDERPASSINFO_H_
-#define BACKEND_RENDERPASSINFO_H_
+#ifndef BACKEND_RENDERPASSDESCRIPTOR_H_
+#define BACKEND_RENDERPASSDESCRIPTOR_H_
 
 #include "backend/Builder.h"
 #include "backend/Forward.h"
@@ -42,12 +42,12 @@
         Ref<TextureViewBase> view;
     };
 
-    // RenderPassInfo contains the list of attachments for a renderpass along with data such as the
-    // load operation and the clear values for the attachments.
+    // RenderPassDescriptor contains the list of attachments for a renderpass along with data such
+    // as the load operation and the clear values for the attachments.
 
-    class RenderPassInfoBase : public RefCounted {
+    class RenderPassDescriptorBase : public RefCounted {
       public:
-        RenderPassInfoBase(RenderPassInfoBuilder* builder);
+        RenderPassDescriptorBase(RenderPassDescriptorBuilder* builder);
 
         std::bitset<kMaxColorAttachments> GetColorAttachmentMask() const;
         bool HasDepthStencilAttachment() const;
@@ -72,12 +72,12 @@
         uint32_t mHeight;
     };
 
-    class RenderPassInfoBuilder : public Builder<RenderPassInfoBase> {
+    class RenderPassDescriptorBuilder : public Builder<RenderPassDescriptorBase> {
       public:
-        RenderPassInfoBuilder(DeviceBase* device);
+        RenderPassDescriptorBuilder(DeviceBase* device);
 
         // NXT API
-        RenderPassInfoBase* GetResultImpl() override;
+        RenderPassDescriptorBase* GetResultImpl() override;
         void SetColorAttachment(uint32_t attachment,
                                 TextureViewBase* textureView,
                                 nxt::LoadOp loadOp);
@@ -92,7 +92,7 @@
         void SetDepthStencilAttachmentClearValue(float clearDepth, uint32_t clearStencil);
 
       private:
-        friend class RenderPassInfoBase;
+        friend class RenderPassDescriptorBase;
 
         std::bitset<kMaxColorAttachments> mColorAttachmentsSet;
         std::array<RenderPassColorAttachmentInfo, kMaxColorAttachments> mColorAttachments;
diff --git a/src/backend/RenderPipeline.cpp b/src/backend/RenderPipeline.cpp
index a3aeba5..2392d5a 100644
--- a/src/backend/RenderPipeline.cpp
+++ b/src/backend/RenderPipeline.cpp
@@ -18,7 +18,7 @@
 #include "backend/DepthStencilState.h"
 #include "backend/Device.h"
 #include "backend/InputState.h"
-#include "backend/RenderPassInfo.h"
+#include "backend/RenderPassDescriptor.h"
 #include "backend/Texture.h"
 #include "common/BitSetIterator.h"
 
@@ -102,7 +102,7 @@
         return mDepthStencilFormat;
     }
 
-    bool RenderPipelineBase::IsCompatibleWith(const RenderPassInfoBase* renderPass) const {
+    bool RenderPipelineBase::IsCompatibleWith(const RenderPassDescriptorBase* renderPass) const {
         // TODO(cwallez@chromium.org): This is called on every SetPipeline command. Optimize it for
         // example by caching some "attachment compatibility" object that would make the
         // compatibility check a single pointer comparison.
diff --git a/src/backend/RenderPipeline.h b/src/backend/RenderPipeline.h
index ad08d18..fe77f7f 100644
--- a/src/backend/RenderPipeline.h
+++ b/src/backend/RenderPipeline.h
@@ -44,7 +44,7 @@
 
         // A pipeline can be used in a render pass if its attachment info matches the actual
         // attachments in the render pass. This returns whether it is the case.
-        bool IsCompatibleWith(const RenderPassInfoBase* renderPass) const;
+        bool IsCompatibleWith(const RenderPassDescriptorBase* renderPass) const;
 
       private:
         Ref<DepthStencilStateBase> mDepthStencilState;
diff --git a/src/backend/ToBackend.h b/src/backend/ToBackend.h
index 2478e53..62288b1 100644
--- a/src/backend/ToBackend.h
+++ b/src/backend/ToBackend.h
@@ -84,8 +84,8 @@
     };
 
     template <typename BackendTraits>
-    struct ToBackendTraits<RenderPassInfoBase, BackendTraits> {
-        using BackendType = typename BackendTraits::RenderPassInfoType;
+    struct ToBackendTraits<RenderPassDescriptorBase, BackendTraits> {
+        using BackendType = typename BackendTraits::RenderPassDescriptorType;
     };
 
     template <typename BackendTraits>
diff --git a/src/backend/d3d12/CommandBufferD3D12.cpp b/src/backend/d3d12/CommandBufferD3D12.cpp
index c106537..5df4209 100644
--- a/src/backend/d3d12/CommandBufferD3D12.cpp
+++ b/src/backend/d3d12/CommandBufferD3D12.cpp
@@ -23,7 +23,7 @@
 #include "backend/d3d12/DescriptorHeapAllocator.h"
 #include "backend/d3d12/InputStateD3D12.h"
 #include "backend/d3d12/PipelineLayoutD3D12.h"
-#include "backend/d3d12/RenderPassInfoD3D12.h"
+#include "backend/d3d12/RenderPassDescriptorD3D12.h"
 #include "backend/d3d12/RenderPipelineD3D12.h"
 #include "backend/d3d12/ResourceAllocator.h"
 #include "backend/d3d12/SamplerD3D12.h"
@@ -265,9 +265,9 @@
                 case Command::BeginRenderPass: {
                     BeginRenderPassCmd* beginRenderPassCmd =
                         mCommands.NextCommand<BeginRenderPassCmd>();
-                    RenderPassInfo* info = ToBackend(beginRenderPassCmd->info.Get());
+                    RenderPassDescriptor* info = ToBackend(beginRenderPassCmd->info.Get());
 
-                    RenderPassInfo::OMSetRenderTargetArgs args =
+                    RenderPassDescriptor::OMSetRenderTargetArgs args =
                         info->GetSubpassOMSetRenderTargetArgs();
                     if (args.dsv.ptr) {
                         commandList->OMSetRenderTargets(args.numRTVs, args.RTVs.data(), FALSE,
diff --git a/src/backend/d3d12/D3D12Backend.cpp b/src/backend/d3d12/D3D12Backend.cpp
index eea2af5..97a6ea1 100644
--- a/src/backend/d3d12/D3D12Backend.cpp
+++ b/src/backend/d3d12/D3D12Backend.cpp
@@ -27,7 +27,7 @@
 #include "backend/d3d12/NativeSwapChainImplD3D12.h"
 #include "backend/d3d12/PipelineLayoutD3D12.h"
 #include "backend/d3d12/QueueD3D12.h"
-#include "backend/d3d12/RenderPassInfoD3D12.h"
+#include "backend/d3d12/RenderPassDescriptorD3D12.h"
 #include "backend/d3d12/RenderPipelineD3D12.h"
 #include "backend/d3d12/ResourceAllocator.h"
 #include "backend/d3d12/ResourceUploader.h"
@@ -291,8 +291,9 @@
     QueueBase* Device::CreateQueue(QueueBuilder* builder) {
         return new Queue(this, builder);
     }
-    RenderPassInfoBase* Device::CreateRenderPassInfo(RenderPassInfoBuilder* builder) {
-        return new RenderPassInfo(this, builder);
+    RenderPassDescriptorBase* Device::CreateRenderPassDescriptor(
+        RenderPassDescriptorBuilder* builder) {
+        return new RenderPassDescriptor(this, builder);
     }
     RenderPipelineBase* Device::CreateRenderPipeline(RenderPipelineBuilder* builder) {
         return new RenderPipeline(builder);
diff --git a/src/backend/d3d12/D3D12Backend.h b/src/backend/d3d12/D3D12Backend.h
index fd13777..4d5514f 100644
--- a/src/backend/d3d12/D3D12Backend.h
+++ b/src/backend/d3d12/D3D12Backend.h
@@ -37,7 +37,7 @@
     class InputState;
     class PipelineLayout;
     class Queue;
-    class RenderPassInfo;
+    class RenderPassDescriptor;
     class RenderPipeline;
     class Sampler;
     class ShaderModule;
@@ -64,7 +64,7 @@
         using InputStateType = InputState;
         using PipelineLayoutType = PipelineLayout;
         using QueueType = Queue;
-        using RenderPassInfoType = RenderPassInfo;
+        using RenderPassDescriptorType = RenderPassDescriptor;
         using RenderPipelineType = RenderPipeline;
         using SamplerType = Sampler;
         using ShaderModuleType = ShaderModule;
@@ -97,7 +97,8 @@
         InputStateBase* CreateInputState(InputStateBuilder* builder) override;
         PipelineLayoutBase* CreatePipelineLayout(PipelineLayoutBuilder* builder) override;
         QueueBase* CreateQueue(QueueBuilder* builder) override;
-        RenderPassInfoBase* CreateRenderPassInfo(RenderPassInfoBuilder* builder) override;
+        RenderPassDescriptorBase* CreateRenderPassDescriptor(
+            RenderPassDescriptorBuilder* builder) override;
         RenderPipelineBase* CreateRenderPipeline(RenderPipelineBuilder* builder) override;
         SamplerBase* CreateSampler(SamplerBuilder* builder) override;
         ShaderModuleBase* CreateShaderModule(ShaderModuleBuilder* builder) override;
diff --git a/src/backend/d3d12/GeneratedCodeIncludes.h b/src/backend/d3d12/GeneratedCodeIncludes.h
index d54873a..c02e291 100644
--- a/src/backend/d3d12/GeneratedCodeIncludes.h
+++ b/src/backend/d3d12/GeneratedCodeIncludes.h
@@ -23,7 +23,7 @@
 #include "backend/d3d12/InputStateD3D12.h"
 #include "backend/d3d12/PipelineLayoutD3D12.h"
 #include "backend/d3d12/QueueD3D12.h"
-#include "backend/d3d12/RenderPassInfoD3D12.h"
+#include "backend/d3d12/RenderPassDescriptorD3D12.h"
 #include "backend/d3d12/RenderPipelineD3D12.h"
 #include "backend/d3d12/SamplerD3D12.h"
 #include "backend/d3d12/ShaderModuleD3D12.h"
diff --git a/src/backend/d3d12/RenderPassInfoD3D12.cpp b/src/backend/d3d12/RenderPassDescriptorD3D12.cpp
similarity index 85%
rename from src/backend/d3d12/RenderPassInfoD3D12.cpp
rename to src/backend/d3d12/RenderPassDescriptorD3D12.cpp
index c4a9b8e..6481b36 100644
--- a/src/backend/d3d12/RenderPassInfoD3D12.cpp
+++ b/src/backend/d3d12/RenderPassDescriptorD3D12.cpp
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "backend/d3d12/RenderPassInfoD3D12.h"
+#include "backend/d3d12/RenderPassDescriptorD3D12.h"
 
 #include "backend/d3d12/D3D12Backend.h"
 #include "backend/d3d12/TextureD3D12.h"
@@ -20,8 +20,8 @@
 
 namespace backend { namespace d3d12 {
 
-    RenderPassInfo::RenderPassInfo(Device* device, RenderPassInfoBuilder* builder)
-        : RenderPassInfoBase(builder), mDevice(device) {
+    RenderPassDescriptor::RenderPassDescriptor(Device* device, RenderPassDescriptorBuilder* builder)
+        : RenderPassDescriptorBase(builder), mDevice(device) {
         // Get and fill an RTV heap with the color attachments
         uint32_t colorAttachmentCount = static_cast<uint32_t>(GetColorAttachmentMask().count());
         if (colorAttachmentCount != 0) {
@@ -53,7 +53,8 @@
         }
     }
 
-    RenderPassInfo::OMSetRenderTargetArgs RenderPassInfo::GetSubpassOMSetRenderTargetArgs() {
+    RenderPassDescriptor::OMSetRenderTargetArgs
+    RenderPassDescriptor::GetSubpassOMSetRenderTargetArgs() {
         OMSetRenderTargetArgs args = {};
 
         size_t rtvIndex = 0;
@@ -70,11 +71,11 @@
         return args;
     }
 
-    D3D12_CPU_DESCRIPTOR_HANDLE RenderPassInfo::GetRTVDescriptor(uint32_t attachmentSlot) {
+    D3D12_CPU_DESCRIPTOR_HANDLE RenderPassDescriptor::GetRTVDescriptor(uint32_t attachmentSlot) {
         return mRtvHeap.GetCPUHandle(attachmentSlot);
     }
 
-    D3D12_CPU_DESCRIPTOR_HANDLE RenderPassInfo::GetDSVDescriptor() {
+    D3D12_CPU_DESCRIPTOR_HANDLE RenderPassDescriptor::GetDSVDescriptor() {
         return mDsvHeap.GetCPUHandle(0);
     }
 
diff --git a/src/backend/d3d12/RenderPassInfoD3D12.h b/src/backend/d3d12/RenderPassDescriptorD3D12.h
similarity index 80%
rename from src/backend/d3d12/RenderPassInfoD3D12.h
rename to src/backend/d3d12/RenderPassDescriptorD3D12.h
index fcd7011..46313ea 100644
--- a/src/backend/d3d12/RenderPassInfoD3D12.h
+++ b/src/backend/d3d12/RenderPassDescriptorD3D12.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef BACKEND_D3D12_RENDERPASSINFOD3D12_H_
-#define BACKEND_D3D12_RENDERPASSINFOD3D12_H_
+#ifndef BACKEND_D3D12_RENDERPASSDESCRIPTORD3D12_H_
+#define BACKEND_D3D12_RENDERPASSDESCRIPTORD3D12_H_
 
-#include "backend/RenderPassInfo.h"
+#include "backend/RenderPassDescriptor.h"
 
 #include "backend/d3d12/DescriptorHeapAllocator.h"
 #include "backend/d3d12/d3d12_platform.h"
@@ -28,7 +28,7 @@
 
     class Device;
 
-    class RenderPassInfo : public RenderPassInfoBase {
+    class RenderPassDescriptor : public RenderPassDescriptorBase {
       public:
         struct OMSetRenderTargetArgs {
             unsigned int numRTVs = 0;
@@ -36,7 +36,7 @@
             D3D12_CPU_DESCRIPTOR_HANDLE dsv = {};
         };
 
-        RenderPassInfo(Device* device, RenderPassInfoBuilder* builder);
+        RenderPassDescriptor(Device* device, RenderPassDescriptorBuilder* builder);
         OMSetRenderTargetArgs GetSubpassOMSetRenderTargetArgs();
         D3D12_CPU_DESCRIPTOR_HANDLE GetRTVDescriptor(uint32_t attachmentSlot);
         D3D12_CPU_DESCRIPTOR_HANDLE GetDSVDescriptor();
@@ -49,4 +49,4 @@
 
 }}  // namespace backend::d3d12
 
-#endif  // BACKEND_D3D12_RENDERPASSINFOD3D12_H_
+#endif  // BACKEND_D3D12_RENDERPASSDESCRIPTORD3D12_H_
diff --git a/src/backend/metal/CommandBufferMTL.mm b/src/backend/metal/CommandBufferMTL.mm
index e26efbd..e4a6ac0 100644
--- a/src/backend/metal/CommandBufferMTL.mm
+++ b/src/backend/metal/CommandBufferMTL.mm
@@ -64,7 +64,7 @@
                 compute = nil;  // This will be autoreleased.
             }
 
-            void BeginRenderPass(id<MTLCommandBuffer> commandBuffer, RenderPassInfo* info) {
+            void BeginRenderPass(id<MTLCommandBuffer> commandBuffer, RenderPassDescriptor* info) {
                 if (render != nil) {
                     [render endEncoding];
                     render = nil;  // This will be autoreleased.
@@ -172,7 +172,7 @@
                     BeginRenderPassCmd* beginRenderPassCmd =
                         mCommands.NextCommand<BeginRenderPassCmd>();
 
-                    RenderPassInfo* info = ToBackend(beginRenderPassCmd->info.Get());
+                    RenderPassDescriptor* info = ToBackend(beginRenderPassCmd->info.Get());
 
                     encoders.EnsureNoBlitEncoder();
                     encoders.BeginRenderPass(commandBuffer, info);
diff --git a/src/backend/metal/MetalBackend.h b/src/backend/metal/MetalBackend.h
index 2b0e330..a61cc77 100644
--- a/src/backend/metal/MetalBackend.h
+++ b/src/backend/metal/MetalBackend.h
@@ -21,7 +21,7 @@
 #include "backend/BindGroupLayout.h"
 #include "backend/Device.h"
 #include "backend/Queue.h"
-#include "backend/RenderPassInfo.h"
+#include "backend/RenderPassDescriptor.h"
 #include "backend/ToBackend.h"
 #include "common/Serial.h"
 
@@ -44,7 +44,7 @@
     class InputState;
     class PipelineLayout;
     class Queue;
-    class RenderPassInfo;
+    class RenderPassDescriptor;
     class RenderPipeline;
     class Sampler;
     class ShaderModule;
@@ -65,7 +65,7 @@
         using InputStateType = InputState;
         using PipelineLayoutType = PipelineLayout;
         using QueueType = Queue;
-        using RenderPassInfoType = RenderPassInfo;
+        using RenderPassDescriptorType = RenderPassDescriptor;
         using RenderPipelineType = RenderPipeline;
         using SamplerType = Sampler;
         using ShaderModuleType = ShaderModule;
@@ -98,7 +98,8 @@
         InputStateBase* CreateInputState(InputStateBuilder* builder) override;
         PipelineLayoutBase* CreatePipelineLayout(PipelineLayoutBuilder* builder) override;
         QueueBase* CreateQueue(QueueBuilder* builder) override;
-        RenderPassInfoBase* CreateRenderPassInfo(RenderPassInfoBuilder* builder) override;
+        RenderPassDescriptorBase* CreateRenderPassDescriptor(
+            RenderPassDescriptorBuilder* builder) override;
         RenderPipelineBase* CreateRenderPipeline(RenderPipelineBuilder* builder) override;
         SamplerBase* CreateSampler(SamplerBuilder* builder) override;
         ShaderModuleBase* CreateShaderModule(ShaderModuleBuilder* builder) override;
@@ -154,10 +155,10 @@
         id<MTLCommandQueue> mCommandQueue = nil;
     };
 
-    class RenderPassInfo : public RenderPassInfoBase {
+    class RenderPassDescriptor : public RenderPassDescriptorBase {
       public:
-        RenderPassInfo(RenderPassInfoBuilder* builder);
-        ~RenderPassInfo();
+        RenderPassDescriptor(RenderPassDescriptorBuilder* builder);
+        ~RenderPassDescriptor();
     };
 
 }}  // namespace backend::metal
diff --git a/src/backend/metal/MetalBackend.mm b/src/backend/metal/MetalBackend.mm
index 40d5ce9..0c9bf49 100644
--- a/src/backend/metal/MetalBackend.mm
+++ b/src/backend/metal/MetalBackend.mm
@@ -110,8 +110,9 @@
     QueueBase* Device::CreateQueue(QueueBuilder* builder) {
         return new Queue(builder);
     }
-    RenderPassInfoBase* Device::CreateRenderPassInfo(RenderPassInfoBuilder* builder) {
-        return new RenderPassInfo(builder);
+    RenderPassDescriptorBase* Device::CreateRenderPassDescriptor(
+        RenderPassDescriptorBuilder* builder) {
+        return new RenderPassDescriptor(builder);
     }
     RenderPipelineBase* Device::CreateRenderPipeline(RenderPipelineBuilder* builder) {
         return new RenderPipeline(builder);
@@ -229,10 +230,11 @@
 
     // RenderPass
 
-    RenderPassInfo::RenderPassInfo(RenderPassInfoBuilder* builder) : RenderPassInfoBase(builder) {
+    RenderPassDescriptor::RenderPassDescriptor(RenderPassDescriptorBuilder* builder)
+        : RenderPassDescriptorBase(builder) {
     }
 
-    RenderPassInfo::~RenderPassInfo() {
+    RenderPassDescriptor::~RenderPassDescriptor() {
     }
 
 }}  // namespace backend::metal
diff --git a/src/backend/null/NullBackend.cpp b/src/backend/null/NullBackend.cpp
index beefc9e..55ea703 100644
--- a/src/backend/null/NullBackend.cpp
+++ b/src/backend/null/NullBackend.cpp
@@ -69,8 +69,9 @@
     QueueBase* Device::CreateQueue(QueueBuilder* builder) {
         return new Queue(builder);
     }
-    RenderPassInfoBase* Device::CreateRenderPassInfo(RenderPassInfoBuilder* builder) {
-        return new RenderPassInfo(builder);
+    RenderPassDescriptorBase* Device::CreateRenderPassDescriptor(
+        RenderPassDescriptorBuilder* builder) {
+        return new RenderPassDescriptor(builder);
     }
     RenderPipelineBase* Device::CreateRenderPipeline(RenderPipelineBuilder* builder) {
         return new RenderPipeline(builder);
diff --git a/src/backend/null/NullBackend.h b/src/backend/null/NullBackend.h
index 217bb12..28366e0 100644
--- a/src/backend/null/NullBackend.h
+++ b/src/backend/null/NullBackend.h
@@ -28,7 +28,7 @@
 #include "backend/InputState.h"
 #include "backend/PipelineLayout.h"
 #include "backend/Queue.h"
-#include "backend/RenderPassInfo.h"
+#include "backend/RenderPassDescriptor.h"
 #include "backend/RenderPipeline.h"
 #include "backend/Sampler.h"
 #include "backend/ShaderModule.h"
@@ -50,7 +50,7 @@
     using InputState = InputStateBase;
     using PipelineLayout = PipelineLayoutBase;
     class Queue;
-    using RenderPassInfo = RenderPassInfoBase;
+    using RenderPassDescriptor = RenderPassDescriptorBase;
     using RenderPipeline = RenderPipelineBase;
     using Sampler = SamplerBase;
     using ShaderModule = ShaderModuleBase;
@@ -71,7 +71,7 @@
         using InputStateType = InputState;
         using PipelineLayoutType = PipelineLayout;
         using QueueType = Queue;
-        using RenderPassInfoType = RenderPassInfo;
+        using RenderPassDescriptorType = RenderPassDescriptor;
         using RenderPipelineType = RenderPipeline;
         using SamplerType = Sampler;
         using ShaderModuleType = ShaderModule;
@@ -106,7 +106,8 @@
         InputStateBase* CreateInputState(InputStateBuilder* builder) override;
         PipelineLayoutBase* CreatePipelineLayout(PipelineLayoutBuilder* builder) override;
         QueueBase* CreateQueue(QueueBuilder* builder) override;
-        RenderPassInfoBase* CreateRenderPassInfo(RenderPassInfoBuilder* builder) override;
+        RenderPassDescriptorBase* CreateRenderPassDescriptor(
+            RenderPassDescriptorBuilder* builder) override;
         RenderPipelineBase* CreateRenderPipeline(RenderPipelineBuilder* builder) override;
         SamplerBase* CreateSampler(SamplerBuilder* builder) override;
         ShaderModuleBase* CreateShaderModule(ShaderModuleBuilder* builder) override;
diff --git a/src/backend/opengl/CommandBufferGL.cpp b/src/backend/opengl/CommandBufferGL.cpp
index 4859c26..5343f40 100644
--- a/src/backend/opengl/CommandBufferGL.cpp
+++ b/src/backend/opengl/CommandBufferGL.cpp
@@ -265,7 +265,7 @@
 
                 case Command::BeginRenderPass: {
                     auto* cmd = mCommands.NextCommand<BeginRenderPassCmd>();
-                    RenderPassInfo* info = ToBackend(cmd->info.Get());
+                    RenderPassDescriptor* info = ToBackend(cmd->info.Get());
 
                     pushConstants.OnBeginPass();
                     inputBuffers.OnBeginPass();
diff --git a/src/backend/opengl/OpenGLBackend.cpp b/src/backend/opengl/OpenGLBackend.cpp
index c0456c4..f4a2ae4 100644
--- a/src/backend/opengl/OpenGLBackend.cpp
+++ b/src/backend/opengl/OpenGLBackend.cpp
@@ -79,8 +79,9 @@
     QueueBase* Device::CreateQueue(QueueBuilder* builder) {
         return new Queue(builder);
     }
-    RenderPassInfoBase* Device::CreateRenderPassInfo(RenderPassInfoBuilder* builder) {
-        return new RenderPassInfo(builder);
+    RenderPassDescriptorBase* Device::CreateRenderPassDescriptor(
+        RenderPassDescriptorBuilder* builder) {
+        return new RenderPassDescriptor(builder);
     }
     RenderPipelineBase* Device::CreateRenderPipeline(RenderPipelineBuilder* builder) {
         return new RenderPipeline(builder);
@@ -126,9 +127,10 @@
         }
     }
 
-    // RenderPassInfo
+    // RenderPassDescriptor
 
-    RenderPassInfo::RenderPassInfo(RenderPassInfoBuilder* builder) : RenderPassInfoBase(builder) {
+    RenderPassDescriptor::RenderPassDescriptor(RenderPassDescriptorBuilder* builder)
+        : RenderPassDescriptorBase(builder) {
     }
 
 }}  // namespace backend::opengl
diff --git a/src/backend/opengl/OpenGLBackend.h b/src/backend/opengl/OpenGLBackend.h
index 2c2299e..f62d03b 100644
--- a/src/backend/opengl/OpenGLBackend.h
+++ b/src/backend/opengl/OpenGLBackend.h
@@ -25,7 +25,7 @@
 #include "backend/Device.h"
 #include "backend/InputState.h"
 #include "backend/Queue.h"
-#include "backend/RenderPassInfo.h"
+#include "backend/RenderPassDescriptor.h"
 #include "backend/ToBackend.h"
 
 #include "glad/glad.h"
@@ -45,7 +45,7 @@
     class PersistentPipelineState;
     class PipelineLayout;
     class Queue;
-    class RenderPassInfo;
+    class RenderPassDescriptor;
     class RenderPipeline;
     class Sampler;
     class ShaderModule;
@@ -66,7 +66,7 @@
         using InputStateType = InputState;
         using PipelineLayoutType = PipelineLayout;
         using QueueType = Queue;
-        using RenderPassInfoType = RenderPassInfo;
+        using RenderPassDescriptorType = RenderPassDescriptor;
         using RenderPipelineType = RenderPipeline;
         using SamplerType = Sampler;
         using ShaderModuleType = ShaderModule;
@@ -94,7 +94,8 @@
         InputStateBase* CreateInputState(InputStateBuilder* builder) override;
         PipelineLayoutBase* CreatePipelineLayout(PipelineLayoutBuilder* builder) override;
         QueueBase* CreateQueue(QueueBuilder* builder) override;
-        RenderPassInfoBase* CreateRenderPassInfo(RenderPassInfoBuilder* builder) override;
+        RenderPassDescriptorBase* CreateRenderPassDescriptor(
+            RenderPassDescriptorBuilder* builder) override;
         RenderPipelineBase* CreateRenderPipeline(RenderPipelineBuilder* builder) override;
         SamplerBase* CreateSampler(SamplerBuilder* builder) override;
         ShaderModuleBase* CreateShaderModule(ShaderModuleBuilder* builder) override;
@@ -123,9 +124,9 @@
         void Submit(uint32_t numCommands, CommandBuffer* const* commands);
     };
 
-    class RenderPassInfo : public RenderPassInfoBase {
+    class RenderPassDescriptor : public RenderPassDescriptorBase {
       public:
-        RenderPassInfo(RenderPassInfoBuilder* builder);
+        RenderPassDescriptor(RenderPassDescriptorBuilder* builder);
     };
 
 }}  // namespace backend::opengl
diff --git a/src/backend/vulkan/CommandBufferVk.cpp b/src/backend/vulkan/CommandBufferVk.cpp
index b85012f..f465827 100644
--- a/src/backend/vulkan/CommandBufferVk.cpp
+++ b/src/backend/vulkan/CommandBufferVk.cpp
@@ -19,7 +19,7 @@
 #include "backend/vulkan/BufferVk.h"
 #include "backend/vulkan/ComputePipelineVk.h"
 #include "backend/vulkan/PipelineLayoutVk.h"
-#include "backend/vulkan/RenderPassInfoVk.h"
+#include "backend/vulkan/RenderPassDescriptorVk.h"
 #include "backend/vulkan/RenderPipelineVk.h"
 #include "backend/vulkan/TextureVk.h"
 #include "backend/vulkan/VulkanBackend.h"
@@ -183,7 +183,7 @@
 
                 case Command::BeginRenderPass: {
                     BeginRenderPassCmd* cmd = mCommands.NextCommand<BeginRenderPassCmd>();
-                    RenderPassInfo* info = ToBackend(cmd->info.Get());
+                    RenderPassDescriptor* info = ToBackend(cmd->info.Get());
 
                     // NXT has an implicit transition to color attachment on render passes.
                     // Transition the attachments now before we start the render pass.
diff --git a/src/backend/vulkan/GeneratedCodeIncludes.h b/src/backend/vulkan/GeneratedCodeIncludes.h
index 18e96e7..7af9d70 100644
--- a/src/backend/vulkan/GeneratedCodeIncludes.h
+++ b/src/backend/vulkan/GeneratedCodeIncludes.h
@@ -21,7 +21,7 @@
 #include "backend/vulkan/DepthStencilStateVk.h"
 #include "backend/vulkan/InputStateVk.h"
 #include "backend/vulkan/PipelineLayoutVk.h"
-#include "backend/vulkan/RenderPassInfoVk.h"
+#include "backend/vulkan/RenderPassDescriptorVk.h"
 #include "backend/vulkan/RenderPipelineVk.h"
 #include "backend/vulkan/SamplerVk.h"
 #include "backend/vulkan/ShaderModuleVk.h"
diff --git a/src/backend/vulkan/RenderPassInfoVk.cpp b/src/backend/vulkan/RenderPassDescriptorVk.cpp
similarity index 93%
rename from src/backend/vulkan/RenderPassInfoVk.cpp
rename to src/backend/vulkan/RenderPassDescriptorVk.cpp
index 4f046f5..02d4337 100644
--- a/src/backend/vulkan/RenderPassInfoVk.cpp
+++ b/src/backend/vulkan/RenderPassDescriptorVk.cpp
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "backend/vulkan/RenderPassInfoVk.h"
+#include "backend/vulkan/RenderPassDescriptorVk.h"
 
 #include "backend/vulkan/FencedDeleter.h"
 #include "backend/vulkan/RenderPassCache.h"
@@ -22,11 +22,11 @@
 
 namespace backend { namespace vulkan {
 
-    RenderPassInfo::RenderPassInfo(RenderPassInfoBuilder* builder)
-        : RenderPassInfoBase(builder), mDevice(ToBackend(builder->GetDevice())) {
+    RenderPassDescriptor::RenderPassDescriptor(RenderPassDescriptorBuilder* builder)
+        : RenderPassDescriptorBase(builder), mDevice(ToBackend(builder->GetDevice())) {
     }
 
-    void RenderPassInfo::RecordBeginRenderPass(VkCommandBuffer commands) {
+    void RenderPassDescriptor::RecordBeginRenderPass(VkCommandBuffer commands) {
         // Query a VkRenderPass from the cache
         VkRenderPass renderPass = VK_NULL_HANDLE;
         {
diff --git a/src/backend/vulkan/RenderPassInfoVk.h b/src/backend/vulkan/RenderPassDescriptorVk.h
similarity index 74%
rename from src/backend/vulkan/RenderPassInfoVk.h
rename to src/backend/vulkan/RenderPassDescriptorVk.h
index dcbba41..4955b16 100644
--- a/src/backend/vulkan/RenderPassInfoVk.h
+++ b/src/backend/vulkan/RenderPassDescriptorVk.h
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef BACKEND_VULKAN_RENDERPASSINFOVK_H_
-#define BACKEND_VULKAN_RENDERPASSINFOVK_H_
+#ifndef BACKEND_VULKAN_RENDERPASSDESCRIPTORVK_H_
+#define BACKEND_VULKAN_RENDERPASSDESCRIPTORVK_H_
 
-#include "backend/RenderPassInfo.h"
+#include "backend/RenderPassDescriptor.h"
 
 #include "common/vulkan_platform.h"
 
@@ -23,9 +23,9 @@
 
     class Device;
 
-    class RenderPassInfo : public RenderPassInfoBase {
+    class RenderPassDescriptor : public RenderPassDescriptorBase {
       public:
-        RenderPassInfo(RenderPassInfoBuilder* builder);
+        RenderPassDescriptor(RenderPassDescriptorBuilder* builder);
 
         // Compute all the arguments for, and record the vkCmdBeginRenderPass command.
         void RecordBeginRenderPass(VkCommandBuffer commands);
@@ -36,4 +36,4 @@
 
 }}  // namespace backend::vulkan
 
-#endif  // BACKEND_VULKAN_RENDERPASSINFOVK_H_
+#endif  // BACKEND_VULKAN_RENDERPASSDESCRIPTORVK_H_
diff --git a/src/backend/vulkan/RenderPipelineVk.cpp b/src/backend/vulkan/RenderPipelineVk.cpp
index 03548a0..37add1e 100644
--- a/src/backend/vulkan/RenderPipelineVk.cpp
+++ b/src/backend/vulkan/RenderPipelineVk.cpp
@@ -20,7 +20,7 @@
 #include "backend/vulkan/InputStateVk.h"
 #include "backend/vulkan/PipelineLayoutVk.h"
 #include "backend/vulkan/RenderPassCache.h"
-#include "backend/vulkan/RenderPassInfoVk.h"
+#include "backend/vulkan/RenderPassDescriptorVk.h"
 #include "backend/vulkan/ShaderModuleVk.h"
 #include "backend/vulkan/VulkanBackend.h"
 
diff --git a/src/backend/vulkan/VulkanBackend.cpp b/src/backend/vulkan/VulkanBackend.cpp
index e661f7b..49f0d87 100644
--- a/src/backend/vulkan/VulkanBackend.cpp
+++ b/src/backend/vulkan/VulkanBackend.cpp
@@ -28,7 +28,7 @@
 #include "backend/vulkan/NativeSwapChainImplVk.h"
 #include "backend/vulkan/PipelineLayoutVk.h"
 #include "backend/vulkan/RenderPassCache.h"
-#include "backend/vulkan/RenderPassInfoVk.h"
+#include "backend/vulkan/RenderPassDescriptorVk.h"
 #include "backend/vulkan/RenderPipelineVk.h"
 #include "backend/vulkan/SamplerVk.h"
 #include "backend/vulkan/ShaderModuleVk.h"
@@ -246,8 +246,9 @@
     QueueBase* Device::CreateQueue(QueueBuilder* builder) {
         return new Queue(builder);
     }
-    RenderPassInfoBase* Device::CreateRenderPassInfo(RenderPassInfoBuilder* builder) {
-        return new RenderPassInfo(builder);
+    RenderPassDescriptorBase* Device::CreateRenderPassDescriptor(
+        RenderPassDescriptorBuilder* builder) {
+        return new RenderPassDescriptor(builder);
     }
     RenderPipelineBase* Device::CreateRenderPipeline(RenderPipelineBuilder* builder) {
         return new RenderPipeline(builder);
diff --git a/src/backend/vulkan/VulkanBackend.h b/src/backend/vulkan/VulkanBackend.h
index a6844bf..c0daf1a 100644
--- a/src/backend/vulkan/VulkanBackend.h
+++ b/src/backend/vulkan/VulkanBackend.h
@@ -42,7 +42,7 @@
     class InputState;
     class PipelineLayout;
     class Queue;
-    class RenderPassInfo;
+    class RenderPassDescriptor;
     class RenderPipeline;
     class Sampler;
     class ShaderModule;
@@ -69,7 +69,7 @@
         using InputStateType = InputState;
         using PipelineLayoutType = PipelineLayout;
         using QueueType = Queue;
-        using RenderPassInfoType = RenderPassInfo;
+        using RenderPassDescriptorType = RenderPassDescriptor;
         using RenderPipelineType = RenderPipeline;
         using SamplerType = Sampler;
         using ShaderModuleType = ShaderModule;
@@ -122,7 +122,8 @@
         InputStateBase* CreateInputState(InputStateBuilder* builder) override;
         PipelineLayoutBase* CreatePipelineLayout(PipelineLayoutBuilder* builder) override;
         QueueBase* CreateQueue(QueueBuilder* builder) override;
-        RenderPassInfoBase* CreateRenderPassInfo(RenderPassInfoBuilder* builder) override;
+        RenderPassDescriptorBase* CreateRenderPassDescriptor(
+            RenderPassDescriptorBuilder* builder) override;
         RenderPipelineBase* CreateRenderPipeline(RenderPipelineBuilder* builder) override;
         SamplerBase* CreateSampler(SamplerBuilder* builder) override;
         ShaderModuleBase* CreateShaderModule(ShaderModuleBuilder* builder) override;
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
index ea448e7..19ddae6 100644
--- a/src/tests/CMakeLists.txt
+++ b/src/tests/CMakeLists.txt
@@ -50,7 +50,7 @@
     ${VALIDATION_TESTS_DIR}/DynamicStateCommandValidationTests.cpp
     ${VALIDATION_TESTS_DIR}/InputStateValidationTests.cpp
     ${VALIDATION_TESTS_DIR}/PushConstantsValidationTests.cpp
-    ${VALIDATION_TESTS_DIR}/RenderPassInfoValidationTests.cpp
+    ${VALIDATION_TESTS_DIR}/RenderPassDescriptorValidationTests.cpp
     ${VALIDATION_TESTS_DIR}/RenderPipelineValidationTests.cpp
     ${VALIDATION_TESTS_DIR}/UsageValidationTests.cpp
     ${VALIDATION_TESTS_DIR}/VertexBufferValidationTests.cpp
diff --git a/src/tests/end2end/BlendStateTests.cpp b/src/tests/end2end/BlendStateTests.cpp
index 12ef510..1a7be71 100644
--- a/src/tests/end2end/BlendStateTests.cpp
+++ b/src/tests/end2end/BlendStateTests.cpp
@@ -707,7 +707,7 @@
         renderTargetViews[i] = renderTargets[i].CreateTextureViewBuilder().GetResult();
     }
 
-    nxt::RenderPassInfo renderpass = device.CreateRenderPassInfoBuilder()
+    nxt::RenderPassDescriptor renderpass = device.CreateRenderPassDescriptorBuilder()
         .SetColorAttachment(0, renderTargetViews[0], nxt::LoadOp::Clear)
         .SetColorAttachment(1, renderTargetViews[1], nxt::LoadOp::Clear)
         .SetColorAttachment(2, renderTargetViews[2], nxt::LoadOp::Clear)
diff --git a/src/tests/end2end/DepthStencilStateTests.cpp b/src/tests/end2end/DepthStencilStateTests.cpp
index e7b798f..f236aed 100644
--- a/src/tests/end2end/DepthStencilStateTests.cpp
+++ b/src/tests/end2end/DepthStencilStateTests.cpp
@@ -46,7 +46,7 @@
 
             depthTextureView = depthTexture.CreateTextureViewBuilder().GetResult();
 
-            renderpass = device.CreateRenderPassInfoBuilder()
+            renderpass = device.CreateRenderPassDescriptorBuilder()
                 .SetColorAttachment(0, renderTargetView, nxt::LoadOp::Clear)
                 .SetDepthStencilAttachment(depthTextureView, nxt::LoadOp::Clear, nxt::LoadOp::Clear)
                 .GetResult();
@@ -247,7 +247,7 @@
             DoTest(testParams, expected, expected);
         }
 
-        nxt::RenderPassInfo renderpass;
+        nxt::RenderPassDescriptor renderpass;
         nxt::Texture renderTarget;
         nxt::Texture depthTexture;
         nxt::TextureView renderTargetView;
diff --git a/src/tests/end2end/RenderPassLoadOpTests.cpp b/src/tests/end2end/RenderPassLoadOpTests.cpp
index cf07f7c..59c9ae5 100644
--- a/src/tests/end2end/RenderPassLoadOpTests.cpp
+++ b/src/tests/end2end/RenderPassLoadOpTests.cpp
@@ -111,7 +111,7 @@
 
     // Part 1: clear once, check to make sure it's cleared
 
-    auto renderPassClearZero = device.CreateRenderPassInfoBuilder()
+    auto renderPassClearZero = device.CreateRenderPassDescriptorBuilder()
         .SetColorAttachment(0, renderTargetView, nxt::LoadOp::Clear)
         .SetColorAttachmentClearColor(0, 0.0f, 0.0f, 0.0f, 0.0f)
         .GetResult();
@@ -123,7 +123,7 @@
         .EndRenderPass()
         .GetResult();
 
-    auto renderPassClearGreen = device.CreateRenderPassInfoBuilder()
+    auto renderPassClearGreen = device.CreateRenderPassDescriptorBuilder()
         .SetColorAttachment(0, renderTargetView, nxt::LoadOp::Clear)
         .SetColorAttachmentClearColor(0, 0.0f, 1.0f, 0.0f, 1.0f)
         .GetResult();
@@ -143,7 +143,7 @@
 
     // Part 2: draw a blue quad into the right half of the render target, and check result
 
-    auto renderPassLoad = device.CreateRenderPassInfoBuilder()
+    auto renderPassLoad = device.CreateRenderPassDescriptorBuilder()
         .SetColorAttachment(0, renderTargetView, nxt::LoadOp::Load)
         .GetResult();
 
diff --git a/src/tests/unittests/validation/RenderPassInfoValidationTests.cpp b/src/tests/unittests/validation/RenderPassDescriptorValidationTests.cpp
similarity index 80%
rename from src/tests/unittests/validation/RenderPassInfoValidationTests.cpp
rename to src/tests/unittests/validation/RenderPassDescriptorValidationTests.cpp
index 9138fd9..11314f9 100644
--- a/src/tests/unittests/validation/RenderPassInfoValidationTests.cpp
+++ b/src/tests/unittests/validation/RenderPassDescriptorValidationTests.cpp
@@ -18,7 +18,7 @@
 
 namespace {
 
-class RenderPassInfoValidationTest : public ValidationTest {
+class RenderPassDescriptorValidationTest : public ValidationTest {
 };
 
 nxt::TextureView Create2DAttachment(nxt::Device& device, uint32_t width, uint32_t height, nxt::TextureFormat format) {
@@ -36,42 +36,42 @@
 }
 
 // A render pass with no attachments isn't valid
-TEST_F(RenderPassInfoValidationTest, Empty) {
-    AssertWillBeError(device.CreateRenderPassInfoBuilder())
+TEST_F(RenderPassDescriptorValidationTest, Empty) {
+    AssertWillBeError(device.CreateRenderPassDescriptorBuilder())
         .GetResult();
 }
 
 // A render pass with only one color or one depth attachment is ok
-TEST_F(RenderPassInfoValidationTest, OneAttachment) {
+TEST_F(RenderPassDescriptorValidationTest, OneAttachment) {
     // One color attachment
     {
         nxt::TextureView color = Create2DAttachment(device, 1, 1, nxt::TextureFormat::R8G8B8A8Unorm);
-        AssertWillBeSuccess(device.CreateRenderPassInfoBuilder())
+        AssertWillBeSuccess(device.CreateRenderPassDescriptorBuilder())
             .SetColorAttachment(0, color, nxt::LoadOp::Clear)
             .GetResult();
     }
     // One depth-stencil attachment
     {
         nxt::TextureView depthStencil = Create2DAttachment(device, 1, 1, nxt::TextureFormat::D32FloatS8Uint);
-        AssertWillBeSuccess(device.CreateRenderPassInfoBuilder())
+        AssertWillBeSuccess(device.CreateRenderPassDescriptorBuilder())
             .SetDepthStencilAttachment(depthStencil, nxt::LoadOp::Clear, nxt::LoadOp::Clear)
             .GetResult();
     }
 }
 
 // Test OOB color attachment indices are handled
-TEST_F(RenderPassInfoValidationTest, ColorAttachmentOutOfBounds) {
+TEST_F(RenderPassDescriptorValidationTest, ColorAttachmentOutOfBounds) {
     // For setting the color attachment, control case
     {
         nxt::TextureView color = Create2DAttachment(device, 1, 1, nxt::TextureFormat::R8G8B8A8Unorm);
-        AssertWillBeSuccess(device.CreateRenderPassInfoBuilder())
+        AssertWillBeSuccess(device.CreateRenderPassDescriptorBuilder())
             .SetColorAttachment(kMaxColorAttachments - 1, color, nxt::LoadOp::Clear)
             .GetResult();
     }
     // For setting the color attachment, OOB
     {
         nxt::TextureView color = Create2DAttachment(device, 1, 1, nxt::TextureFormat::R8G8B8A8Unorm);
-        AssertWillBeError(device.CreateRenderPassInfoBuilder())
+        AssertWillBeError(device.CreateRenderPassDescriptorBuilder())
             .SetColorAttachment(kMaxColorAttachments, color, nxt::LoadOp::Clear)
             .GetResult();
     }
@@ -79,14 +79,14 @@
     nxt::TextureView color = Create2DAttachment(device, 1, 1, nxt::TextureFormat::R8G8B8A8Unorm);
     // For setting the clear color, control case
     {
-        AssertWillBeSuccess(device.CreateRenderPassInfoBuilder())
+        AssertWillBeSuccess(device.CreateRenderPassDescriptorBuilder())
             .SetColorAttachment(0, color, nxt::LoadOp::Clear)
             .SetColorAttachmentClearColor(kMaxColorAttachments - 1, 0.0f, 0.0f, 0.0f, 0.0f)
             .GetResult();
     }
     // For setting the clear color, OOB
     {
-        AssertWillBeError(device.CreateRenderPassInfoBuilder())
+        AssertWillBeError(device.CreateRenderPassDescriptorBuilder())
             .SetColorAttachment(0, color, nxt::LoadOp::Clear)
             .SetColorAttachmentClearColor(kMaxColorAttachments, 0.0f, 0.0f, 0.0f, 0.0f)
             .GetResult();
@@ -94,12 +94,12 @@
 }
 
 // Test setting a clear value without an attachment and vice-versa is ok.
-TEST_F(RenderPassInfoValidationTest, ClearAndAttachmentMismatchIsOk) {
+TEST_F(RenderPassDescriptorValidationTest, ClearAndAttachmentMismatchIsOk) {
     nxt::TextureView color = Create2DAttachment(device, 1, 1, nxt::TextureFormat::R8G8B8A8Unorm);
 
     // For cleared attachment 0 doesn't get a color, clear color for 1 is unused
     {
-        AssertWillBeSuccess(device.CreateRenderPassInfoBuilder())
+        AssertWillBeSuccess(device.CreateRenderPassDescriptorBuilder())
             .SetColorAttachment(0, color, nxt::LoadOp::Clear)
             .SetColorAttachmentClearColor(1, 0.0f, 0.0f, 0.0f, 0.0f)
             .GetResult();
@@ -107,13 +107,13 @@
     // Clear depth stencil doesn't get values
     {
         nxt::TextureView depthStencil = Create2DAttachment(device, 1, 1, nxt::TextureFormat::D32FloatS8Uint);
-        AssertWillBeSuccess(device.CreateRenderPassInfoBuilder())
+        AssertWillBeSuccess(device.CreateRenderPassDescriptorBuilder())
             .SetDepthStencilAttachment(depthStencil, nxt::LoadOp::Clear, nxt::LoadOp::Clear)
             .GetResult();
     }
     // Clear values for depth-stencil when it isn't used
     {
-        AssertWillBeSuccess(device.CreateRenderPassInfoBuilder())
+        AssertWillBeSuccess(device.CreateRenderPassDescriptorBuilder())
             .SetColorAttachment(0, color, nxt::LoadOp::Clear)
             .SetDepthStencilAttachmentClearValue(0.0f, 0)
             .GetResult();
@@ -121,7 +121,7 @@
 }
 
 // Attachments must have the same size
-TEST_F(RenderPassInfoValidationTest, SizeMustMatch) {
+TEST_F(RenderPassDescriptorValidationTest, SizeMustMatch) {
     nxt::TextureView color1x1A = Create2DAttachment(device, 1, 1, nxt::TextureFormat::R8G8B8A8Unorm);
     nxt::TextureView color1x1B = Create2DAttachment(device, 1, 1, nxt::TextureFormat::R8G8B8A8Unorm);
     nxt::TextureView color2x2 = Create2DAttachment(device, 2, 2, nxt::TextureFormat::R8G8B8A8Unorm);
@@ -130,7 +130,7 @@
 
     // Control case: all the same size (1x1)
     {
-        AssertWillBeSuccess(device.CreateRenderPassInfoBuilder())
+        AssertWillBeSuccess(device.CreateRenderPassDescriptorBuilder())
             .SetColorAttachment(0, color1x1A, nxt::LoadOp::Clear)
             .SetColorAttachment(1, color1x1B, nxt::LoadOp::Clear)
             .SetDepthStencilAttachment(depthStencil1x1, nxt::LoadOp::Clear, nxt::LoadOp::Clear)
@@ -139,7 +139,7 @@
 
     // One of the color attachments has a different size
     {
-        AssertWillBeError(device.CreateRenderPassInfoBuilder())
+        AssertWillBeError(device.CreateRenderPassDescriptorBuilder())
             .SetColorAttachment(0, color1x1A, nxt::LoadOp::Clear)
             .SetColorAttachment(1, color2x2, nxt::LoadOp::Clear)
             .SetDepthStencilAttachment(depthStencil1x1, nxt::LoadOp::Clear, nxt::LoadOp::Clear)
@@ -148,7 +148,7 @@
 
     // The depth stencil attachment has a different size
     {
-        AssertWillBeError(device.CreateRenderPassInfoBuilder())
+        AssertWillBeError(device.CreateRenderPassDescriptorBuilder())
             .SetColorAttachment(0, color1x1A, nxt::LoadOp::Clear)
             .SetColorAttachment(1, color1x1B, nxt::LoadOp::Clear)
             .SetDepthStencilAttachment(depthStencil2x2, nxt::LoadOp::Clear, nxt::LoadOp::Clear)
@@ -157,20 +157,20 @@
 }
 
 // Attachments formats must match whether they are used for color or depth-stencil
-TEST_F(RenderPassInfoValidationTest, FormatMismatch) {
+TEST_F(RenderPassDescriptorValidationTest, FormatMismatch) {
     nxt::TextureView color = Create2DAttachment(device, 1, 1, nxt::TextureFormat::R8G8B8A8Unorm);
     nxt::TextureView depthStencil = Create2DAttachment(device, 1, 1, nxt::TextureFormat::D32FloatS8Uint);
 
     // Using depth-stencil for color
     {
-        AssertWillBeError(device.CreateRenderPassInfoBuilder())
+        AssertWillBeError(device.CreateRenderPassDescriptorBuilder())
             .SetColorAttachment(0, depthStencil, nxt::LoadOp::Clear)
             .GetResult();
     }
 
     // Using color for depth-stencil
     {
-        AssertWillBeError(device.CreateRenderPassInfoBuilder())
+        AssertWillBeError(device.CreateRenderPassDescriptorBuilder())
             .SetDepthStencilAttachment(color, nxt::LoadOp::Clear, nxt::LoadOp::Clear)
             .GetResult();
     }
diff --git a/src/tests/unittests/validation/RenderPipelineValidationTests.cpp b/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
index 4a88345..5c14e09 100644
--- a/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
+++ b/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
@@ -54,7 +54,7 @@
             return builder;
         }
 
-        nxt::RenderPassInfo renderpass;
+        nxt::RenderPassDescriptor renderpass;
         nxt::ShaderModule vsModule;
         nxt::ShaderModule fsModule;
         nxt::InputState inputState;
diff --git a/src/tests/unittests/validation/ValidationTest.cpp b/src/tests/unittests/validation/ValidationTest.cpp
index 3c2a6501..07dab31 100644
--- a/src/tests/unittests/validation/ValidationTest.cpp
+++ b/src/tests/unittests/validation/ValidationTest.cpp
@@ -69,7 +69,7 @@
     return mError;
 }
 
-nxt::RenderPassInfo ValidationTest::CreateSimpleRenderPass() {
+nxt::RenderPassDescriptor ValidationTest::CreateSimpleRenderPass() {
         auto colorBuffer = device.CreateTextureBuilder()
             .SetDimension(nxt::TextureDimension::e2D)
             .SetExtent(640, 480, 1)
@@ -81,7 +81,7 @@
         auto colorView = colorBuffer.CreateTextureViewBuilder()
             .GetResult();
 
-        return device.CreateRenderPassInfoBuilder()
+        return device.CreateRenderPassDescriptorBuilder()
             .SetColorAttachment(0, colorView, nxt::LoadOp::Clear)
             .GetResult();
 }
@@ -130,7 +130,7 @@
 
     nxt::TextureView view = AssertWillBeSuccess(dummy.attachment.CreateTextureViewBuilder()).GetResult();
 
-    dummy.renderPass = AssertWillBeSuccess(device.CreateRenderPassInfoBuilder())
+    dummy.renderPass = AssertWillBeSuccess(device.CreateRenderPassDescriptorBuilder())
         .SetColorAttachment(0, view, nxt::LoadOp::Clear)
         .GetResult();
 
diff --git a/src/tests/unittests/validation/ValidationTest.h b/src/tests/unittests/validation/ValidationTest.h
index 708d4d2..2984350 100644
--- a/src/tests/unittests/validation/ValidationTest.h
+++ b/src/tests/unittests/validation/ValidationTest.h
@@ -48,12 +48,12 @@
         void StartExpectDeviceError();
         bool EndExpectDeviceError();
 
-        nxt::RenderPassInfo CreateSimpleRenderPass();
+        nxt::RenderPassDescriptor CreateSimpleRenderPass();
 
         // Helper functions to create objects to test validation.
 
         struct DummyRenderPass {
-            nxt::RenderPassInfo renderPass;
+            nxt::RenderPassDescriptor renderPass;
             nxt::Texture attachment;
             nxt::TextureFormat attachmentFormat;
             uint32_t width;
diff --git a/src/tests/unittests/validation/VertexBufferValidationTests.cpp b/src/tests/unittests/validation/VertexBufferValidationTests.cpp
index 90fdd21..2547834 100644
--- a/src/tests/unittests/validation/VertexBufferValidationTests.cpp
+++ b/src/tests/unittests/validation/VertexBufferValidationTests.cpp
@@ -86,7 +86,7 @@
                 .GetResult();
         }
 
-        nxt::RenderPassInfo renderpass;
+        nxt::RenderPassDescriptor renderpass;
         nxt::ShaderModule fsModule;
 };
 
diff --git a/src/utils/NXTHelpers.cpp b/src/utils/NXTHelpers.cpp
index c195163..7edcc9a 100644
--- a/src/utils/NXTHelpers.cpp
+++ b/src/utils/NXTHelpers.cpp
@@ -130,7 +130,7 @@
                            .GetResult();
 
         nxt::TextureView colorView = result.color.CreateTextureViewBuilder().GetResult();
-        result.renderPassInfo = device.CreateRenderPassInfoBuilder()
+        result.renderPassInfo = device.CreateRenderPassDescriptorBuilder()
                                     .SetColorAttachment(0, colorView, nxt::LoadOp::Clear)
                                     .GetResult();
 
diff --git a/src/utils/NXTHelpers.h b/src/utils/NXTHelpers.h
index 351804a..e2a9bc7 100644
--- a/src/utils/NXTHelpers.h
+++ b/src/utils/NXTHelpers.h
@@ -42,7 +42,7 @@
         uint32_t height;
         nxt::Texture color;
         nxt::TextureFormat colorFormat;
-        nxt::RenderPassInfo renderPassInfo;
+        nxt::RenderPassDescriptor renderPassInfo;
     };
     BasicRenderPass CreateBasicRenderPass(const nxt::Device& device,
                                           uint32_t width,
