diff --git a/src/dawn/native/opengl/CommandBufferGL.cpp b/src/dawn/native/opengl/CommandBufferGL.cpp
index e2a5891..e1f6122 100644
--- a/src/dawn/native/opengl/CommandBufferGL.cpp
+++ b/src/dawn/native/opengl/CommandBufferGL.cpp
@@ -415,7 +415,7 @@
                 },
                 [&](const TextureBindingInfo&) -> MaybeError {
                     TextureView* view = ToBackend(group->GetBindingAsTextureView(bindingIndex));
-                    GLuint handle = view->GetTextureHandle();
+                    GLuint handle = view->GetHandle();
                     GLenum target = view->GetGLTarget();
                     FlatBindingIndex viewIndex = indices[bindingIndex];
 
@@ -477,7 +477,7 @@
                 [&](const StorageTextureBindingInfo& layout) -> MaybeError {
                     TextureView* view = ToBackend(group->GetBindingAsTextureView(bindingIndex));
                     Texture* texture = ToBackend(view->GetTexture());
-                    GLuint handle = texture->GetTextureHandle();
+                    GLuint handle = texture->GetHandle();
                     FlatBindingIndex imageIndex = indices[bindingIndex];
 
                     GLenum access;
@@ -961,7 +961,7 @@
                 DAWN_TRY(texture->EnsureSubresourceContentInitialized(gl, subresources));
                 // The only way to move data from a texture to a buffer in GL is via
                 // glReadPixels with a pack buffer. Create a temporary FBO for the copy.
-                DAWN_GL_TRY(gl, BindTexture(target, texture->GetTextureHandle()));
+                DAWN_GL_TRY(gl, BindTexture(target, texture->GetHandle()));
 
                 GLuint readFBO = 0;
                 DAWN_GL_TRY(gl, GenFramebuffers(1, &readFBO));
@@ -1010,9 +1010,9 @@
                     case wgpu::TextureDimension::e2D: {
                         if (target == GL_TEXTURE_2D) {
                             DAWN_ASSERT(texture->GetArrayLayers() == 1);
-                            DAWN_GL_TRY(gl, FramebufferTexture2D(
-                                                GL_READ_FRAMEBUFFER, glAttachment, target,
-                                                texture->GetTextureHandle(), src.mipLevel));
+                            DAWN_GL_TRY(
+                                gl, FramebufferTexture2D(GL_READ_FRAMEBUFFER, glAttachment, target,
+                                                         texture->GetHandle(), src.mipLevel));
                             DAWN_GL_TRY(gl, ReadPixels(dchecked_cast<uint32_t>(src.origin.x),
                                                        dchecked_cast<uint32_t>(src.origin.y),
                                                        dchecked_cast<uint32_t>(copySize.width),
@@ -1026,10 +1026,10 @@
                             for (TexelCount z{0u}; z < copySize.depthOrArrayLayers; ++z) {
                                 GLenum cubeMapTarget = GL_TEXTURE_CUBE_MAP_POSITIVE_X +
                                                        dchecked_cast<uint32_t>(z + src.origin.z);
-                                DAWN_GL_TRY(gl, FramebufferTexture2D(GL_READ_FRAMEBUFFER,
-                                                                     glAttachment, cubeMapTarget,
-                                                                     texture->GetTextureHandle(),
-                                                                     src.mipLevel));
+                                DAWN_GL_TRY(
+                                    gl, FramebufferTexture2D(GL_READ_FRAMEBUFFER, glAttachment,
+                                                             cubeMapTarget, texture->GetHandle(),
+                                                             src.mipLevel));
                                 DAWN_GL_TRY(gl, ReadPixels(dchecked_cast<uint32_t>(src.origin.x),
                                                            dchecked_cast<uint32_t>(src.origin.y),
                                                            dchecked_cast<uint32_t>(copySize.width),
@@ -1047,10 +1047,10 @@
                         const uint64_t bytesPerImage =
                             blockInfo.ToBytes(dst.blocksPerRow * dst.rowsPerImage);
                         for (TexelCount z{0u}; z < copySize.depthOrArrayLayers; ++z) {
-                            DAWN_GL_TRY(gl, FramebufferTextureLayer(
-                                                GL_READ_FRAMEBUFFER, glAttachment,
-                                                texture->GetTextureHandle(), src.mipLevel,
-                                                dchecked_cast<uint32_t>(src.origin.z + z)));
+                            DAWN_GL_TRY(
+                                gl, FramebufferTextureLayer(
+                                        GL_READ_FRAMEBUFFER, glAttachment, texture->GetHandle(),
+                                        src.mipLevel, dchecked_cast<uint32_t>(src.origin.z + z)));
                             DAWN_GL_TRY(gl, ReadPixels(dchecked_cast<uint32_t>(src.origin.x),
                                                        dchecked_cast<uint32_t>(src.origin.y),
                                                        dchecked_cast<uint32_t>(copySize.width),
@@ -1104,9 +1104,9 @@
                 } else {
                     DAWN_TRY(dstTexture->EnsureSubresourceContentInitialized(gl, dstRange));
                 }
-                DAWN_TRY(CopyImageSubData(gl, src.aspect, srcTexture->GetTextureHandle(),
+                DAWN_TRY(CopyImageSubData(gl, src.aspect, srcTexture->GetHandle(),
                                           srcTexture->GetGLTarget(), src.mipLevel,
-                                          src.origin.ToOrigin3D(), dstTexture->GetTextureHandle(),
+                                          src.origin.ToOrigin3D(), dstTexture->GetHandle(),
                                           dstTexture->GetGLTarget(), dst.mipLevel,
                                           dst.origin.ToOrigin3D(), copySize.ToExtent3D()));
                 break;
@@ -1728,7 +1728,7 @@
     GLenum target = texture->GetGLTarget();
     data = DAWN_UNSAFE_TODO(static_cast<const uint8_t*>(data) + dataLayout.offset);
     DAWN_GL_TRY(gl, ActiveTexture(GL_TEXTURE0));
-    DAWN_GL_TRY(gl, BindTexture(target, texture->GetTextureHandle()));
+    DAWN_GL_TRY(gl, BindTexture(target, texture->GetHandle()));
     const TypedTexelBlockInfo& blockInfo = GetBlockInfo(destination);
     const BlockExtent3D blockCopySize = blockInfo.ToBlock(copySize);
     const uint64_t bytesPerImage = dataLayout.rowsPerImage * dataLayout.bytesPerRow;
diff --git a/src/dawn/native/opengl/PhysicalDeviceGL.cpp b/src/dawn/native/opengl/PhysicalDeviceGL.cpp
index 1f66c9f..426e011 100644
--- a/src/dawn/native/opengl/PhysicalDeviceGL.cpp
+++ b/src/dawn/native/opengl/PhysicalDeviceGL.cpp
@@ -310,8 +310,6 @@
     if (SupportTextureComponentSwizzle()) {
         EnableFeature(Feature::TextureComponentSwizzle);
     }
-
-    EnableFeature(Feature::TransientAttachments);
 }
 
 namespace {
diff --git a/src/dawn/native/opengl/TextureGL.cpp b/src/dawn/native/opengl/TextureGL.cpp
index 8e749b9..f97f4f1 100644
--- a/src/dawn/native/opengl/TextureGL.cpp
+++ b/src/dawn/native/opengl/TextureGL.cpp
@@ -262,49 +262,28 @@
     // Wrap the handle in a Texture class early so that it is deleted if initialization fails
     Ref<Texture> texture = AcquireRef(new Texture(device, descriptor, 0, OwnsHandle::Yes));
 
-    if (texture->IsRenderbuffer()) {
-        DAWN_TRY(device->EnqueueGL([texture](const OpenGLFunctions& gl) -> MaybeError {
-            DAWN_GL_TRY(gl, GenRenderbuffers(1, &texture->mRenderbufferHandle));
+    bool clear = device->IsToggleEnabled(Toggle::NonzeroClearResourcesOnCreationForTesting);
+    DAWN_TRY(device->EnqueueGL([texture, clear](const OpenGLFunctions& gl) -> MaybeError {
+        DAWN_GL_TRY(gl, GenTextures(1, &texture->mHandle));
 
-            const GLFormat& glFormat = texture->GetGLFormat();
+        GLenum target = texture->GetGLTarget();
+        uint32_t levels = texture->GetNumMipLevels();
+        const GLFormat& glFormat = texture->GetGLFormat();
 
-            DAWN_GL_TRY(gl, BindRenderbuffer(GL_RENDERBUFFER, texture->mRenderbufferHandle));
-            auto width = texture->GetBaseSize().width;
-            auto height = texture->GetBaseSize().height;
-            if (texture->GetSampleCount() > 1) {
-                DAWN_GL_TRY(
-                    gl, RenderbufferStorageMultisample(GL_RENDERBUFFER, texture->GetSampleCount(),
-                                                       glFormat.internalFormat, width, height));
-            } else {
-                DAWN_GL_TRY(gl, RenderbufferStorage(GL_RENDERBUFFER, glFormat.internalFormat, width,
-                                                    height));
-            }
-            return {};
-        }));
-    } else {
-        bool clear = device->IsToggleEnabled(Toggle::NonzeroClearResourcesOnCreationForTesting);
-        DAWN_TRY(device->EnqueueGL([texture, clear](const OpenGLFunctions& gl) -> MaybeError {
-            DAWN_GL_TRY(gl, GenTextures(1, &texture->mTextureHandle));
+        DAWN_GL_TRY(gl, BindTexture(target, texture->mHandle));
+        DAWN_TRY(AllocateTexture(gl, target, texture->GetSampleCount(), levels, glFormat,
+                                 texture->GetBaseSize()));
 
-            GLenum target = texture->GetGLTarget();
-            uint32_t levels = texture->GetNumMipLevels();
-            const GLFormat& glFormat = texture->GetGLFormat();
+        // The texture is not complete if it uses mipmapping and not all levels up to
+        // MAX_LEVEL have been defined.
+        DAWN_GL_TRY(gl, TexParameteri(target, GL_TEXTURE_MAX_LEVEL, levels - 1));
 
-            DAWN_GL_TRY(gl, BindTexture(target, texture->mTextureHandle));
-            DAWN_TRY(AllocateTexture(gl, target, texture->GetSampleCount(), levels, glFormat,
-                                     texture->GetBaseSize()));
-
-            // The texture is not complete if it uses mipmapping and not all levels up to
-            // MAX_LEVEL have been defined.
-            DAWN_GL_TRY(gl, TexParameteri(target, GL_TEXTURE_MAX_LEVEL, levels - 1));
-
-            if (clear) {
-                DAWN_TRY(texture->ClearTexture(gl, texture->GetAllSubresources(),
-                                               TextureBase::ClearValue::NonZero));
-            }
-            return {};
-        }));
-    }
+        if (clear) {
+            DAWN_TRY(texture->ClearTexture(gl, texture->GetAllSubresources(),
+                                           TextureBase::ClearValue::NonZero));
+        }
+        return {};
+    }));
     return std::move(texture);
 }
 
@@ -317,7 +296,7 @@
     Ref<Texture> texture = AcquireRef(new Texture(device, descriptor, 0, OwnsHandle::Yes));
     DAWN_TRY(device->EnqueueGL([texture, memory = Ref<SharedTextureMemory>(memory)](
                                    const OpenGLFunctions& gl) -> MaybeError {
-        DAWN_TRY_ASSIGN(texture->mTextureHandle, memory->GenerateGLTexture(gl));
+        DAWN_TRY_ASSIGN(texture->mHandle, memory->GenerateGLTexture(gl));
         return {};
     }));
 
@@ -327,53 +306,30 @@
 
 Texture::Texture(Device* device,
                  const UnpackedPtr<TextureDescriptor>& descriptor,
-                 GLuint textureHandle,
+                 GLuint handle,
                  OwnsHandle ownsHandle)
-    : TextureBase(device, descriptor),
-      mTextureHandle(textureHandle),
-      mRenderbufferHandle(0),
-      mOwnsHandle(ownsHandle) {
+    : TextureBase(device, descriptor), mHandle(handle), mOwnsHandle(ownsHandle) {
     mTarget = TargetForTextureViewDimension(GetCompatibilityTextureBindingViewDimension(),
                                             descriptor->sampleCount);
 }
 
 Texture::~Texture() {}
 
-bool Texture::IsRenderbuffer() const {
-    return ((GetUsage() & wgpu::TextureUsage::TransientAttachment) != 0);
-}
-
 void Texture::DestroyImpl(DestroyReason reason) {
     TextureBase::DestroyImpl(reason);
     if (mOwnsHandle == OwnsHandle::Yes) {
-        if (IsRenderbuffer()) {
-            IgnoreErrors(ToBackend(GetDevice())
-                             ->EnqueueDestroyGL(
-                                 this, &Texture::GetRenderbufferHandle, reason,
-                                 [](const OpenGLFunctions& gl, GLuint handle) -> MaybeError {
-                                     DAWN_GL_TRY_IGNORE_ERRORS(gl, DeleteRenderbuffers(1, &handle));
-                                     return {};
-                                 }));
-        } else {
-            IgnoreErrors(ToBackend(GetDevice())
-                             ->EnqueueDestroyGL(
-                                 this, &Texture::GetTextureHandle, reason,
-                                 [](const OpenGLFunctions& gl, GLuint handle) -> MaybeError {
-                                     DAWN_GL_TRY_IGNORE_ERRORS(gl, DeleteTextures(1, &handle));
-                                     return {};
-                                 }));
-        }
+        IgnoreErrors(
+            ToBackend(GetDevice())
+                ->EnqueueDestroyGL(this, &Texture::GetHandle, reason,
+                                   [](const OpenGLFunctions& gl, GLuint handle) -> MaybeError {
+                                       DAWN_GL_TRY_IGNORE_ERRORS(gl, DeleteTextures(1, &handle));
+                                       return {};
+                                   }));
     }
 }
 
-GLuint Texture::GetTextureHandle() const {
-    DAWN_ASSERT(mTextureHandle != 0 && !IsRenderbuffer());
-    return mTextureHandle;
-}
-
-GLuint Texture::GetRenderbufferHandle() const {
-    DAWN_ASSERT(mRenderbufferHandle != 0 && IsRenderbuffer());
-    return mRenderbufferHandle;
+GLuint Texture::GetHandle() const {
+    return mHandle;
 }
 
 GLenum Texture::GetGLTarget() const {
@@ -387,7 +343,6 @@
 MaybeError Texture::ClearTexture(const OpenGLFunctions& gl,
                                  const SubresourceRange& range,
                                  TextureBase::ClearValue clearValue) {
-    DAWN_ASSERT(!IsRenderbuffer());
     Device* device = ToBackend(GetDevice());
 
     uint8_t clearColor = (clearValue == TextureBase::ClearValue::Zero) ? 0 : 1;
@@ -452,7 +407,7 @@
                         continue;
                     }
                     DAWN_TRY(FramebufferTextureHelper(gl, mTarget, GL_DRAW_FRAMEBUFFER, attachment,
-                                                      GetTextureHandle(), level, layer));
+                                                      GetHandle(), level, layer));
                     DAWN_TRY(DoClear(aspectsToClear));
                 }
             }
@@ -500,14 +455,13 @@
                         continue;
                     }
                     if (gl.IsAtLeastGL(4, 4)) {
-                        DAWN_GL_TRY(
-                            gl, ClearTexSubImage(mTextureHandle, static_cast<GLint>(level), 0, 0,
-                                                 static_cast<GLint>(layer), mipSize.width,
-                                                 mipSize.height, mipSize.depthOrArrayLayers,
-                                                 glFormat.format, glFormat.type,
-                                                 clearValue == TextureBase::ClearValue::Zero
-                                                     ? kClearColorDataBytes0.data()
-                                                     : kClearColorDataBytes255.data()));
+                        DAWN_GL_TRY(gl, ClearTexSubImage(mHandle, static_cast<GLint>(level), 0, 0,
+                                                         static_cast<GLint>(layer), mipSize.width,
+                                                         mipSize.height, mipSize.depthOrArrayLayers,
+                                                         glFormat.format, glFormat.type,
+                                                         clearValue == TextureBase::ClearValue::Zero
+                                                             ? kClearColorDataBytes0.data()
+                                                             : kClearColorDataBytes255.data()));
                         continue;
                     }
 
@@ -558,13 +512,12 @@
                                 .depthOrArrayLayers;
                         for (GLint z = 0; z < static_cast<GLint>(depth); ++z) {
                             DAWN_GL_TRY(gl, FramebufferTextureLayer(GL_DRAW_FRAMEBUFFER, attachment,
-                                                                    GetTextureHandle(), level, z));
+                                                                    GetHandle(), level, z));
                             DAWN_TRY(DoClear());
                         }
                     } else {
                         DAWN_TRY(FramebufferTextureHelper(gl, mTarget, GL_DRAW_FRAMEBUFFER,
-                                                          attachment, GetTextureHandle(), level,
-                                                          layer));
+                                                          attachment, GetHandle(), level, layer));
                         DAWN_TRY(DoClear());
                     }
 
@@ -693,24 +646,19 @@
                  ->EnqueueGL([view, texture = Ref<Texture>(ToBackend(texture))](
                                  const OpenGLFunctions& gl) -> MaybeError {
                      if (texture->IsDestroyed()) {
-                         view->mTextureHandle = 0;
-                         view->mRenderbufferHandle = 0;
+                         view->mHandle = 0;
                      } else if (view->mOwnsHandle == OwnsHandle::Yes) {
                          GLuint handle = 0;
                          DAWN_ASSERT(gl.IsAtLeastGL(4, 3));
                          DAWN_GL_TRY(gl, GenTextures(1, &handle));
-                         DAWN_GL_TRY(
-                             gl, TextureView(handle, view->GetGLTarget(),
-                                             texture->GetTextureHandle(), view->GetInternalFormat(),
-                                             view->GetBaseMipLevel(), view->GetLevelCount(),
-                                             view->GetBaseArrayLayer(), view->GetLayerCount()));
-                         view->mTextureHandle = handle;
+                         DAWN_GL_TRY(gl,
+                                     TextureView(handle, view->GetGLTarget(), texture->GetHandle(),
+                                                 view->GetInternalFormat(), view->GetBaseMipLevel(),
+                                                 view->GetLevelCount(), view->GetBaseArrayLayer(),
+                                                 view->GetLayerCount()));
+                         view->mHandle = handle;
                      } else {
-                         if (texture->IsRenderbuffer()) {
-                             view->mRenderbufferHandle = texture->GetRenderbufferHandle();
-                         } else {
-                             view->mTextureHandle = texture->GetTextureHandle();
-                         }
+                         view->mHandle = texture->GetHandle();
                      }
                      return {};
                  }));
@@ -729,7 +677,7 @@
     if (mOwnsHandle == OwnsHandle::Yes) {
         IgnoreErrors(
             ToBackend(GetDevice())
-                ->EnqueueDestroyGL(this, &TextureView::GetTextureHandle, reason,
+                ->EnqueueDestroyGL(this, &TextureView::GetHandle, reason,
                                    [](const OpenGLFunctions& gl, GLuint handle) -> MaybeError {
                                        DAWN_GL_TRY_IGNORE_ERRORS(gl, DeleteTextures(1, &handle));
                                        return {};
@@ -737,14 +685,9 @@
     }
 }
 
-GLuint TextureView::GetTextureHandle() const {
-    DAWN_ASSERT(mTextureHandle != 0);
-    return mTextureHandle;
-}
-
-GLuint TextureView::GetRenderbufferHandle() const {
-    DAWN_ASSERT(mRenderbufferHandle != 0);
-    return mRenderbufferHandle;
+GLuint TextureView::GetHandle() const {
+    DAWN_ASSERT(mHandle != 0);
+    return mHandle;
 }
 
 GLenum TextureView::GetGLTarget() const {
@@ -758,16 +701,6 @@
     DAWN_ASSERT(depthSlice <
                 static_cast<GLuint>(GetSingleSubresourceVirtualSize().depthOrArrayLayers));
 
-    if (ToBackend(GetTexture())->IsRenderbuffer()) {
-        DAWN_ASSERT(GetDimension() == wgpu::TextureViewDimension::e2D);
-        DAWN_ASSERT(GetBaseMipLevel() == 0 && GetLevelCount() == 1);
-        DAWN_ASSERT(GetBaseArrayLayer() == 0 && GetLayerCount() == 1);
-
-        GLuint handle = ToBackend(GetTexture())->GetRenderbufferHandle();
-        DAWN_GL_TRY(gl, FramebufferRenderbuffer(target, attachment, GL_RENDERBUFFER, handle));
-        return {};
-    }
-
     // Use the base texture where possible to minimize the amount of copying required on GLES.
     bool useOwnView = GetFormat().format != GetTexture()->GetFormat().format &&
                       !GetTexture()->GetFormat().HasDepthOrStencil();
@@ -777,14 +710,14 @@
     if (useOwnView) {
         // Use our own texture handle and target which points to a subset of the texture's
         // subresources.
-        textureHandle = GetTextureHandle();
+        textureHandle = GetHandle();
         textarget = GetGLTarget();
         mipLevel = 0;
         arrayLayer = 0;
     } else {
         // Use the texture's handle and target, with the view's base mip level and base array
 
-        textureHandle = ToBackend(GetTexture())->GetTextureHandle();
+        textureHandle = ToBackend(GetTexture())->GetHandle();
         textarget = ToBackend(GetTexture())->GetGLTarget();
         mipLevel = GetBaseMipLevel();
         // We have validated that the depthSlice in render pass's colorAttachments must be undefined
diff --git a/src/dawn/native/opengl/TextureGL.h b/src/dawn/native/opengl/TextureGL.h
index 04cefe0..3fd3604 100644
--- a/src/dawn/native/opengl/TextureGL.h
+++ b/src/dawn/native/opengl/TextureGL.h
@@ -56,8 +56,7 @@
             GLuint handle,
             OwnsHandle ownsHandle);
 
-    GLuint GetTextureHandle() const;
-    GLuint GetRenderbufferHandle() const;
+    GLuint GetHandle() const;
     GLenum GetGLTarget() const;
     const GLFormat& GetGLFormat() const;
 
@@ -65,7 +64,6 @@
                                                    const SubresourceRange& range);
 
     MaybeError SynchronizeTextureBeforeUse();
-    bool IsRenderbuffer() const;
 
   private:
     ~Texture() override;
@@ -75,8 +73,7 @@
                             const SubresourceRange& range,
                             TextureBase::ClearValue clearValue);
 
-    GLuint mTextureHandle;
-    GLuint mRenderbufferHandle;
+    GLuint mHandle;
     OwnsHandle mOwnsHandle = OwnsHandle::No;
     GLenum mTarget;
 };
@@ -87,8 +84,7 @@
         TextureBase* texture,
         const UnpackedPtr<TextureViewDescriptor>& descriptor);
 
-    GLuint GetTextureHandle() const;
-    GLuint GetRenderbufferHandle() const;
+    GLuint GetHandle() const;
     GLenum GetGLTarget() const;
     MaybeError BindToFramebuffer(const OpenGLFunctions& gl,
                                  GLenum target,
@@ -102,8 +98,8 @@
     void DestroyImpl(DestroyReason reason) override;
     GLenum GetInternalFormat() const;
 
-    GLuint mTextureHandle;
-    GLuint mRenderbufferHandle;
+    // TODO(crbug.com/dawn/1355): Delete this handle on texture destroy.
+    GLuint mHandle;
     GLenum mTarget;
     OwnsHandle mOwnsHandle = OwnsHandle::No;
 };
diff --git a/src/dawn/tests/end2end/ArchTierLimitsExhaustive.cpp b/src/dawn/tests/end2end/ArchTierLimitsExhaustive.cpp
index 4932041..8bb5c63 100644
--- a/src/dawn/tests/end2end/ArchTierLimitsExhaustive.cpp
+++ b/src/dawn/tests/end2end/ArchTierLimitsExhaustive.cpp
@@ -514,8 +514,8 @@
 AddDevice({1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1}, "Vulkan_Qualcomm_R__Adreno_TM__X1_85_GPU");
 
 // SwiftShader
-AddDevice({0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, "OpenGLES_ANGLE__Google__Vulkan_1_3_0__SwiftShader_Device__Subzero___0x0000C0DE____SwiftShader_driver_5_0_0__compat");
-AddDevice({0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, "OpenGLES_ANGLE__Google__Vulkan_1_3_0__SwiftShader_Device__Subzero___0x0000C0DE____SwiftShader_driver_5_0_0__compat");
+AddDevice({0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, "OpenGLES_ANGLE__Google__Vulkan_1_3_0__SwiftShader_Device__Subzero___0x0000C0DE____SwiftShader_driver_5_0_0__compat");
+AddDevice({0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, "OpenGLES_ANGLE__Google__Vulkan_1_3_0__SwiftShader_Device__Subzero___0x0000C0DE____SwiftShader_driver_5_0_0__compat");
     }
     // clang-format on
 
diff --git a/webgpu-cts/compat-expectations.txt b/webgpu-cts/compat-expectations.txt
index e7f020c..84e326b 100644
--- a/webgpu-cts/compat-expectations.txt
+++ b/webgpu-cts/compat-expectations.txt
@@ -353,25 +353,6 @@
 # Generates GL_OUT_OF_MEMORY
 crbug.com/361372970 [ android arm ] webgpu:api,validation,image_copy,layout_related:copy_end_overflows_u64:method="WriteTexture" [ Failure ]
 
-# BGRA failure on Pixel 6 with TransientAttachments enabled
-crbug.com/527930338 [ android-pixel-6 ] webgpu:api,operation,render_pass,resolve:render_pass_resolve:colorFormat="bgra8unorm";separateResolvePass=false;storeOperation="discard" [ Failure ]
-
-# BGRA failure on Pixel 6 with TransientAttachments enabled
-# Unexpectedly passing validation where it should fail
-crbug.com/527930338 [ android-pixel-6 ] webgpu:api,validation,createTexture:sampleCount,valid_sampleCount_with_other_parameter_varies:dimension="2d";format="bgra8unorm" [ Failure ]
-crbug.com/527930338 [ android-pixel-6 ] webgpu:api,validation,createTexture:texture_usage:dimension="2d";format="bgra8unorm" [ Failure ]
-crbug.com/527930338 [ android-pixel-6 ] webgpu:api,validation,createTexture:texture_usage:dimension="_undef_";format="bgra8unorm" [ Failure ]
-
-# Failures on Pixel 10 with TransientAttachments enabled
-crbug.com/527930338 [ android-pixel-10 ] webgpu:api,operation,render_pass,resolve:render_pass_resolve:colorFormat="bgra8unorm";separateResolvePass=false;storeOperation="discard" [ Failure ]
-crbug.com/527930338 [ android-pixel-10 ] webgpu:api,operation,render_pass,resolve:render_pass_resolve:colorFormat="r16float";separateResolvePass=false;storeOperation="discard" [ Failure ]
-crbug.com/527930338 [ android-pixel-10 ] webgpu:api,operation,render_pass,resolve:render_pass_resolve:colorFormat="r8unorm";separateResolvePass=false;storeOperation="discard" [ Failure ]
-crbug.com/527930338 [ android-pixel-10 ] webgpu:api,operation,render_pass,resolve:render_pass_resolve:colorFormat="rg16float";separateResolvePass=false;storeOperation="discard" [ Failure ]
-crbug.com/527930338 [ android-pixel-10 ] webgpu:api,operation,render_pass,resolve:render_pass_resolve:colorFormat="rg8unorm";separateResolvePass=false;storeOperation="discard" [ Failure ]
-crbug.com/527930338 [ android-pixel-10 ] webgpu:api,operation,render_pass,resolve:render_pass_resolve:colorFormat="rgb10a2unorm";separateResolvePass=false;storeOperation="discard" [ Failure ]
-crbug.com/527930338 [ android-pixel-10 ] webgpu:api,operation,render_pass,resolve:render_pass_resolve:colorFormat="rgba8unorm";separateResolvePass=false;storeOperation="discard" [ Failure ]
-crbug.com/527930338 [ android-pixel-10 ] webgpu:api,operation,render_pass,resolve:render_pass_resolve:colorFormat="rgba8unorm-srgb";separateResolvePass=false;storeOperation="discard" [ Failure ]
-
 # Flaky memory_sync failures on Intel
 crbug.com/42241023 [ intel-0x9bc5 linux ] webgpu:api,operation,memory_sync,buffer,multiple_buffers:ww:boundary="command-buffer";writeOps=["storage","b2b-copy"];contexts=["render-bundle-encoder","command-encoder"] [ Failure ]
 crbug.com/42241023 [ intel-0x9bc5 linux ] webgpu:api,operation,memory_sync,buffer,multiple_buffers:ww:boundary="command-buffer";writeOps=["storage","b2b-copy"];contexts=["render-pass-encoder","command-encoder"] [ Failure ]
