tint/ast: Remove ast::DepthTexture and ast::DepthMultisampledTexture

Instead use ast::TypeName.

Bug: tint:1810
Change-Id: Id9fe641d193967cb27cea97e9c25b75c5fe2f1a2
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/119122
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Dan Sinclair <dsinclair@chromium.org>
Commit-Queue: Ben Clayton <bclayton@chromium.org>
diff --git a/src/tint/BUILD.gn b/src/tint/BUILD.gn
index 6eff6a8..99d7c91 100644
--- a/src/tint/BUILD.gn
+++ b/src/tint/BUILD.gn
@@ -260,8 +260,6 @@
     "ast/const.h",
     "ast/const_assert.h",
     "ast/continue_statement.h",
-    "ast/depth_multisampled_texture.h",
-    "ast/depth_texture.h",
     "ast/diagnostic_attribute.h",
     "ast/diagnostic_control.h",
     "ast/diagnostic_directive.h",
@@ -586,10 +584,6 @@
     "ast/const_assert.h",
     "ast/continue_statement.cc",
     "ast/continue_statement.h",
-    "ast/depth_multisampled_texture.cc",
-    "ast/depth_multisampled_texture.h",
-    "ast/depth_texture.cc",
-    "ast/depth_texture.h",
     "ast/diagnostic_attribute.cc",
     "ast/diagnostic_attribute.h",
     "ast/diagnostic_control.cc",
diff --git a/src/tint/CMakeLists.txt b/src/tint/CMakeLists.txt
index e146ff8..d3d3097 100644
--- a/src/tint/CMakeLists.txt
+++ b/src/tint/CMakeLists.txt
@@ -124,10 +124,6 @@
   ast/const_assert.h
   ast/continue_statement.cc
   ast/continue_statement.h
-  ast/depth_multisampled_texture.cc
-  ast/depth_multisampled_texture.h
-  ast/depth_texture.cc
-  ast/depth_texture.h
   ast/diagnostic_attribute.cc
   ast/diagnostic_attribute.h
   ast/diagnostic_control.cc
@@ -832,8 +828,6 @@
     ast/compound_assignment_statement_test.cc
     ast/const_assert_test.cc
     ast/continue_statement_test.cc
-    ast/depth_multisampled_texture_test.cc
-    ast/depth_texture_test.cc
     ast/diagnostic_attribute_test.cc
     ast/diagnostic_control_test.cc
     ast/diagnostic_directive_test.cc
diff --git a/src/tint/ast/depth_multisampled_texture.cc b/src/tint/ast/depth_multisampled_texture.cc
deleted file mode 100644
index 2ab3e8a..0000000
--- a/src/tint/ast/depth_multisampled_texture.cc
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2021 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "src/tint/ast/depth_multisampled_texture.h"
-
-#include "src/tint/program_builder.h"
-
-TINT_INSTANTIATE_TYPEINFO(tint::ast::DepthMultisampledTexture);
-
-namespace tint::ast {
-namespace {
-
-bool IsValidDepthDimension(type::TextureDimension dim) {
-    return dim == type::TextureDimension::k2d;
-}
-
-}  // namespace
-
-DepthMultisampledTexture::DepthMultisampledTexture(ProgramID pid,
-                                                   NodeID nid,
-                                                   const Source& src,
-                                                   type::TextureDimension d)
-    : Base(pid, nid, src, d) {
-    TINT_ASSERT(AST, IsValidDepthDimension(dim));
-}
-
-DepthMultisampledTexture::DepthMultisampledTexture(DepthMultisampledTexture&&) = default;
-
-DepthMultisampledTexture::~DepthMultisampledTexture() = default;
-
-std::string DepthMultisampledTexture::FriendlyName(const SymbolTable&) const {
-    std::ostringstream out;
-    out << "texture_depth_multisampled_" << dim;
-    return out.str();
-}
-
-const DepthMultisampledTexture* DepthMultisampledTexture::Clone(CloneContext* ctx) const {
-    auto src = ctx->Clone(source);
-    return ctx->dst->create<DepthMultisampledTexture>(src, dim);
-}
-
-}  // namespace tint::ast
diff --git a/src/tint/ast/depth_multisampled_texture.h b/src/tint/ast/depth_multisampled_texture.h
deleted file mode 100644
index 8986d49..0000000
--- a/src/tint/ast/depth_multisampled_texture.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2021 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef SRC_TINT_AST_DEPTH_MULTISAMPLED_TEXTURE_H_
-#define SRC_TINT_AST_DEPTH_MULTISAMPLED_TEXTURE_H_
-
-#include <string>
-
-#include "src/tint/ast/texture.h"
-#include "src/tint/type/texture_dimension.h"
-
-namespace tint::ast {
-
-/// A multisampled depth texture type.
-class DepthMultisampledTexture final : public Castable<DepthMultisampledTexture, Texture> {
-  public:
-    /// Constructor
-    /// @param pid the identifier of the program that owns this node
-    /// @param nid the unique node identifier
-    /// @param src the source of this node
-    /// @param dim the dimensionality of the texture
-    DepthMultisampledTexture(ProgramID pid,
-                             NodeID nid,
-                             const Source& src,
-                             type::TextureDimension dim);
-    /// Move constructor
-    DepthMultisampledTexture(DepthMultisampledTexture&&);
-    ~DepthMultisampledTexture() override;
-
-    /// @param symbols the program's symbol table
-    /// @returns the name for this type that closely resembles how it would be
-    /// declared in WGSL.
-    std::string FriendlyName(const SymbolTable& symbols) const override;
-
-    /// Clones this type and all transitive types using the `CloneContext` `ctx`.
-    /// @param ctx the clone context
-    /// @return the newly cloned type
-    const DepthMultisampledTexture* Clone(CloneContext* ctx) const override;
-};
-
-}  // namespace tint::ast
-
-#endif  // SRC_TINT_AST_DEPTH_MULTISAMPLED_TEXTURE_H_
diff --git a/src/tint/ast/depth_multisampled_texture_test.cc b/src/tint/ast/depth_multisampled_texture_test.cc
deleted file mode 100644
index 675e672..0000000
--- a/src/tint/ast/depth_multisampled_texture_test.cc
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2021 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "src/tint/ast/depth_multisampled_texture.h"
-
-#include "src/tint/ast/test_helper.h"
-
-namespace tint::ast {
-namespace {
-
-using AstDepthMultisampledTextureTest = TestHelper;
-
-TEST_F(AstDepthMultisampledTextureTest, Dim) {
-    auto* d = create<DepthMultisampledTexture>(type::TextureDimension::k2d);
-    EXPECT_EQ(d->dim, type::TextureDimension::k2d);
-}
-
-TEST_F(AstDepthMultisampledTextureTest, FriendlyName) {
-    auto* d = create<DepthMultisampledTexture>(type::TextureDimension::k2d);
-    EXPECT_EQ(d->FriendlyName(Symbols()), "texture_depth_multisampled_2d");
-}
-
-}  // namespace
-}  // namespace tint::ast
diff --git a/src/tint/ast/depth_texture.cc b/src/tint/ast/depth_texture.cc
deleted file mode 100644
index 199c0da..0000000
--- a/src/tint/ast/depth_texture.cc
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2020 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "src/tint/ast/depth_texture.h"
-
-#include "src/tint/program_builder.h"
-
-TINT_INSTANTIATE_TYPEINFO(tint::ast::DepthTexture);
-
-namespace tint::ast {
-namespace {
-
-bool IsValidDepthDimension(type::TextureDimension dim) {
-    return dim == type::TextureDimension::k2d || dim == type::TextureDimension::k2dArray ||
-           dim == type::TextureDimension::kCube || dim == type::TextureDimension::kCubeArray;
-}
-
-}  // namespace
-
-DepthTexture::DepthTexture(ProgramID pid, NodeID nid, const Source& src, type::TextureDimension d)
-    : Base(pid, nid, src, d) {
-    TINT_ASSERT(AST, IsValidDepthDimension(dim));
-}
-
-DepthTexture::DepthTexture(DepthTexture&&) = default;
-
-DepthTexture::~DepthTexture() = default;
-
-std::string DepthTexture::FriendlyName(const SymbolTable&) const {
-    std::ostringstream out;
-    out << "texture_depth_" << dim;
-    return out.str();
-}
-
-const DepthTexture* DepthTexture::Clone(CloneContext* ctx) const {
-    auto src = ctx->Clone(source);
-    return ctx->dst->create<DepthTexture>(src, dim);
-}
-
-}  // namespace tint::ast
diff --git a/src/tint/ast/depth_texture.h b/src/tint/ast/depth_texture.h
deleted file mode 100644
index e687612..0000000
--- a/src/tint/ast/depth_texture.h
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2020 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef SRC_TINT_AST_DEPTH_TEXTURE_H_
-#define SRC_TINT_AST_DEPTH_TEXTURE_H_
-
-#include <string>
-
-#include "src/tint/ast/texture.h"
-#include "src/tint/type/texture_dimension.h"
-
-namespace tint::ast {
-
-/// A depth texture type.
-class DepthTexture final : public Castable<DepthTexture, Texture> {
-  public:
-    /// Constructor
-    /// @param pid the identifier of the program that owns this node
-    /// @param nid the unique node identifier
-    /// @param src the source of this node
-    /// @param dim the dimensionality of the texture
-    DepthTexture(ProgramID pid, NodeID nid, const Source& src, type::TextureDimension dim);
-    /// Move constructor
-    DepthTexture(DepthTexture&&);
-    ~DepthTexture() override;
-
-    /// @param symbols the program's symbol table
-    /// @returns the name for this type that closely resembles how it would be
-    /// declared in WGSL.
-    std::string FriendlyName(const SymbolTable& symbols) const override;
-
-    /// Clones this type and all transitive types using the `CloneContext` `ctx`.
-    /// @param ctx the clone context
-    /// @return the newly cloned type
-    const DepthTexture* Clone(CloneContext* ctx) const override;
-};
-
-}  // namespace tint::ast
-
-#endif  // SRC_TINT_AST_DEPTH_TEXTURE_H_
diff --git a/src/tint/ast/depth_texture_test.cc b/src/tint/ast/depth_texture_test.cc
deleted file mode 100644
index e2a7b0e..0000000
--- a/src/tint/ast/depth_texture_test.cc
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2020 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "src/tint/ast/depth_texture.h"
-
-#include "src/tint/ast/test_helper.h"
-
-namespace tint::ast {
-namespace {
-
-using AstDepthTextureTest = TestHelper;
-
-TEST_F(AstDepthTextureTest, IsTexture) {
-    Texture* ty = create<DepthTexture>(type::TextureDimension::kCube);
-    EXPECT_TRUE(ty->Is<DepthTexture>());
-    EXPECT_FALSE(ty->Is<SampledTexture>());
-    EXPECT_FALSE(ty->Is<StorageTexture>());
-}
-
-TEST_F(AstDepthTextureTest, Dim) {
-    auto* d = create<DepthTexture>(type::TextureDimension::kCube);
-    EXPECT_EQ(d->dim, type::TextureDimension::kCube);
-}
-
-TEST_F(AstDepthTextureTest, FriendlyName) {
-    auto* d = create<DepthTexture>(type::TextureDimension::kCube);
-    EXPECT_EQ(d->FriendlyName(Symbols()), "texture_depth_cube");
-}
-
-}  // namespace
-}  // namespace tint::ast
diff --git a/src/tint/ast/multisampled_texture_test.cc b/src/tint/ast/multisampled_texture_test.cc
index adcb790..2b81a0a 100644
--- a/src/tint/ast/multisampled_texture_test.cc
+++ b/src/tint/ast/multisampled_texture_test.cc
@@ -16,7 +16,6 @@
 
 #include "src/tint/ast/alias.h"
 #include "src/tint/ast/array.h"
-#include "src/tint/ast/depth_texture.h"
 #include "src/tint/ast/matrix.h"
 #include "src/tint/ast/pointer.h"
 #include "src/tint/ast/sampled_texture.h"
@@ -34,7 +33,6 @@
 
 TEST_F(AstMultisampledTextureTest, IsTexture) {
     Texture* t = create<MultisampledTexture>(type::TextureDimension::kCube, ty.f32());
-    EXPECT_FALSE(t->Is<DepthTexture>());
     EXPECT_TRUE(t->Is<MultisampledTexture>());
     EXPECT_FALSE(t->Is<SampledTexture>());
     EXPECT_FALSE(t->Is<StorageTexture>());
diff --git a/src/tint/ast/sampled_texture_test.cc b/src/tint/ast/sampled_texture_test.cc
index f377d68..506b259 100644
--- a/src/tint/ast/sampled_texture_test.cc
+++ b/src/tint/ast/sampled_texture_test.cc
@@ -23,7 +23,6 @@
 
 TEST_F(AstSampledTextureTest, IsTexture) {
     Texture* t = create<SampledTexture>(type::TextureDimension::kCube, ty.f32());
-    EXPECT_FALSE(t->Is<DepthTexture>());
     EXPECT_TRUE(t->Is<SampledTexture>());
     EXPECT_FALSE(t->Is<StorageTexture>());
 }
diff --git a/src/tint/ast/storage_texture_test.cc b/src/tint/ast/storage_texture_test.cc
index 1183fd9..e03c4b3 100644
--- a/src/tint/ast/storage_texture_test.cc
+++ b/src/tint/ast/storage_texture_test.cc
@@ -26,7 +26,6 @@
     Texture* ty =
         create<StorageTexture>(type::TextureDimension::k2dArray, type::TexelFormat::kRgba32Float,
                                subtype, type::Access::kRead);
-    EXPECT_FALSE(ty->Is<DepthTexture>());
     EXPECT_FALSE(ty->Is<SampledTexture>());
     EXPECT_TRUE(ty->Is<StorageTexture>());
 }
diff --git a/src/tint/intrinsics.def b/src/tint/intrinsics.def
index 633aeb4..db589a1 100644
--- a/src/tint/intrinsics.def
+++ b/src/tint/intrinsics.def
@@ -170,6 +170,12 @@
   // https://www.w3.org/TR/WGSL/#sampler-type
   sampler
   sampler_comparison
+  // https://www.w3.org/TR/WGSL/#texture-depth
+  texture_depth_2d
+  texture_depth_2d_array
+  texture_depth_cube
+  texture_depth_cube_array
+  texture_depth_multisampled_2d
   // https://www.w3.org/TR/WGSL/#external-texture-type
   texture_external
 }
diff --git a/src/tint/program_builder.h b/src/tint/program_builder.h
index 77995f3..c24dc25 100644
--- a/src/tint/program_builder.h
+++ b/src/tint/program_builder.h
@@ -38,8 +38,6 @@
 #include "src/tint/ast/const.h"
 #include "src/tint/ast/const_assert.h"
 #include "src/tint/ast/continue_statement.h"
-#include "src/tint/ast/depth_multisampled_texture.h"
-#include "src/tint/ast/depth_texture.h"
 #include "src/tint/ast/diagnostic_attribute.h"
 #include "src/tint/ast/diagnostic_control.h"
 #include "src/tint/ast/diagnostic_directive.h"
@@ -980,33 +978,50 @@
         }
 
         /// @param dims the dimensionality of the texture
-        /// @returns the depth texture
-        const ast::DepthTexture* depth_texture(type::TextureDimension dims) const {
-            return builder->create<ast::DepthTexture>(dims);
+        /// @returns the depth texture typename
+        const ast::TypeName* depth_texture(type::TextureDimension dims) const {
+            return depth_texture(builder->source_, dims);
         }
 
         /// @param source the Source of the node
         /// @param dims the dimensionality of the texture
-        /// @returns the depth texture
-        const ast::DepthTexture* depth_texture(const Source& source,
-                                               type::TextureDimension dims) const {
-            return builder->create<ast::DepthTexture>(source, dims);
+        /// @returns the depth texture typename
+        const ast::TypeName* depth_texture(const Source& source,
+                                           type::TextureDimension dims) const {
+            switch (dims) {
+                case type::TextureDimension::k2d:
+                    return (*this)(source, "texture_depth_2d");
+                case type::TextureDimension::k2dArray:
+                    return (*this)(source, "texture_depth_2d_array");
+                case type::TextureDimension::kCube:
+                    return (*this)(source, "texture_depth_cube");
+                case type::TextureDimension::kCubeArray:
+                    return (*this)(source, "texture_depth_cube_array");
+                default:
+                    break;
+            }
+            TINT_ICE(ProgramBuilder, builder->Diagnostics())
+                << "invalid depth_texture dimensions: " << dims;
+            return nullptr;
         }
 
         /// @param dims the dimensionality of the texture
-        /// @returns the multisampled depth texture
-        const ast::DepthMultisampledTexture* depth_multisampled_texture(
-            type::TextureDimension dims) const {
-            return builder->create<ast::DepthMultisampledTexture>(dims);
+        /// @returns the multisampled depth texture typename
+        const ast::TypeName* depth_multisampled_texture(type::TextureDimension dims) const {
+            return depth_multisampled_texture(builder->source_, dims);
         }
 
         /// @param source the Source of the node
         /// @param dims the dimensionality of the texture
-        /// @returns the multisampled depth texture
-        const ast::DepthMultisampledTexture* depth_multisampled_texture(
-            const Source& source,
-            type::TextureDimension dims) const {
-            return builder->create<ast::DepthMultisampledTexture>(source, dims);
+        /// @returns the multisampled depth texture typename
+        const ast::TypeName* depth_multisampled_texture(const Source& source,
+                                                        type::TextureDimension dims) const {
+            if (dims == type::TextureDimension::k2d) {
+                return (*this)(source, "texture_depth_multisampled_2d");
+            }
+            TINT_ICE(ProgramBuilder, builder->Diagnostics())
+                << "invalid depth_multisampled_texture dimensions: " << dims;
+            return nullptr;
         }
 
         /// @param dims the dimensionality of the texture
diff --git a/src/tint/reader/wgsl/parser_impl_depth_texture_test.cc b/src/tint/reader/wgsl/parser_impl_depth_texture_test.cc
index dc8ddbf..e04bed3 100644
--- a/src/tint/reader/wgsl/parser_impl_depth_texture_test.cc
+++ b/src/tint/reader/wgsl/parser_impl_depth_texture_test.cc
@@ -33,9 +33,8 @@
     EXPECT_TRUE(t.matched);
     EXPECT_FALSE(t.errored);
     ASSERT_NE(t.value, nullptr);
-    ASSERT_TRUE(t->Is<ast::Texture>());
-    ASSERT_TRUE(t->Is<ast::DepthTexture>());
-    EXPECT_EQ(t->As<ast::Texture>()->dim, type::TextureDimension::k2d);
+    EXPECT_EQ(p->builder().Symbols().NameFor(t.value->As<ast::TypeName>()->name->symbol),
+              "texture_depth_2d");
     EXPECT_FALSE(p->has_error());
     EXPECT_EQ(t.value->source.range, (Source::Range{{1u, 1u}, {1u, 17u}}));
 }
@@ -46,9 +45,8 @@
     EXPECT_TRUE(t.matched);
     EXPECT_FALSE(t.errored);
     ASSERT_NE(t.value, nullptr);
-    ASSERT_TRUE(t->Is<ast::Texture>());
-    ASSERT_TRUE(t->Is<ast::DepthTexture>());
-    EXPECT_EQ(t->As<ast::Texture>()->dim, type::TextureDimension::k2dArray);
+    EXPECT_EQ(p->builder().Symbols().NameFor(t.value->As<ast::TypeName>()->name->symbol),
+              "texture_depth_2d_array");
     EXPECT_FALSE(p->has_error());
     EXPECT_EQ(t.value->source.range, (Source::Range{{1u, 1u}, {1u, 23u}}));
 }
@@ -59,9 +57,8 @@
     EXPECT_TRUE(t.matched);
     EXPECT_FALSE(t.errored);
     ASSERT_NE(t.value, nullptr);
-    ASSERT_TRUE(t->Is<ast::Texture>());
-    ASSERT_TRUE(t->Is<ast::DepthTexture>());
-    EXPECT_EQ(t->As<ast::Texture>()->dim, type::TextureDimension::kCube);
+    EXPECT_EQ(p->builder().Symbols().NameFor(t.value->As<ast::TypeName>()->name->symbol),
+              "texture_depth_cube");
     EXPECT_FALSE(p->has_error());
     EXPECT_EQ(t.value->source.range, (Source::Range{{1u, 1u}, {1u, 19u}}));
 }
@@ -72,9 +69,8 @@
     EXPECT_TRUE(t.matched);
     EXPECT_FALSE(t.errored);
     ASSERT_NE(t.value, nullptr);
-    ASSERT_TRUE(t->Is<ast::Texture>());
-    ASSERT_TRUE(t->Is<ast::DepthTexture>());
-    EXPECT_EQ(t->As<ast::Texture>()->dim, type::TextureDimension::kCubeArray);
+    EXPECT_EQ(p->builder().Symbols().NameFor(t.value->As<ast::TypeName>()->name->symbol),
+              "texture_depth_cube_array");
     EXPECT_FALSE(p->has_error());
     EXPECT_EQ(t.value->source.range, (Source::Range{{1u, 1u}, {1u, 25u}}));
 }
@@ -85,9 +81,8 @@
     EXPECT_TRUE(t.matched);
     EXPECT_FALSE(t.errored);
     ASSERT_NE(t.value, nullptr);
-    ASSERT_TRUE(t->Is<ast::Texture>());
-    ASSERT_TRUE(t->Is<ast::DepthMultisampledTexture>());
-    EXPECT_EQ(t->As<ast::Texture>()->dim, type::TextureDimension::k2d);
+    EXPECT_EQ(p->builder().Symbols().NameFor(t.value->As<ast::TypeName>()->name->symbol),
+              "texture_depth_multisampled_2d");
     EXPECT_FALSE(p->has_error());
     EXPECT_EQ(t.value->source.range, (Source::Range{{1u, 1u}, {1u, 30u}}));
 }
diff --git a/src/tint/reader/wgsl/parser_impl_texture_sampler_test.cc b/src/tint/reader/wgsl/parser_impl_texture_sampler_test.cc
index 90a2516..29d62c5 100644
--- a/src/tint/reader/wgsl/parser_impl_texture_sampler_test.cc
+++ b/src/tint/reader/wgsl/parser_impl_texture_sampler_test.cc
@@ -61,9 +61,8 @@
     EXPECT_TRUE(t.matched);
     EXPECT_FALSE(t.errored);
     ASSERT_NE(t.value, nullptr);
-    ASSERT_TRUE(t->Is<ast::Texture>());
-    ASSERT_TRUE(t->Is<ast::DepthTexture>());
-    EXPECT_EQ(t->As<ast::Texture>()->dim, type::TextureDimension::k2d);
+    EXPECT_EQ(p->builder().Symbols().NameFor(t.value->As<ast::TypeName>()->name->symbol),
+              "texture_depth_2d");
     EXPECT_EQ(t.value->source.range, (Source::Range{{1u, 1u}, {1u, 17u}}));
 }
 
diff --git a/src/tint/resolver/dependency_graph.cc b/src/tint/resolver/dependency_graph.cc
index 53f928b..9358335 100644
--- a/src/tint/resolver/dependency_graph.cc
+++ b/src/tint/resolver/dependency_graph.cc
@@ -29,8 +29,6 @@
 #include "src/tint/ast/compound_assignment_statement.h"
 #include "src/tint/ast/const.h"
 #include "src/tint/ast/continue_statement.h"
-#include "src/tint/ast/depth_multisampled_texture.h"
-#include "src/tint/ast/depth_texture.h"
 #include "src/tint/ast/diagnostic_attribute.h"
 #include "src/tint/ast/discard_statement.h"
 #include "src/tint/ast/for_loop_statement.h"
@@ -403,11 +401,7 @@
             [&](const ast::StorageTexture* tex) {  //
                 TraverseType(tex->type);
             },
-            [&](Default) {
-                if (!ty->IsAnyOf<ast::DepthTexture, ast::DepthMultisampledTexture>()) {
-                    UnhandledNode(diagnostics_, ty);
-                }
-            });
+            [&](Default) { UnhandledNode(diagnostics_, ty); });
     }
 
     /// Traverses the attribute list, performing symbol resolution and
diff --git a/src/tint/resolver/resolver.cc b/src/tint/resolver/resolver.cc
index 39f63e20..9d6f54c 100644
--- a/src/tint/resolver/resolver.cc
+++ b/src/tint/resolver/resolver.cc
@@ -28,7 +28,6 @@
 #include "src/tint/ast/break_statement.h"
 #include "src/tint/ast/call_statement.h"
 #include "src/tint/ast/continue_statement.h"
-#include "src/tint/ast/depth_texture.h"
 #include "src/tint/ast/disable_validation_attribute.h"
 #include "src/tint/ast/discard_statement.h"
 #include "src/tint/ast/for_loop_statement.h"
@@ -309,10 +308,6 @@
             }
             return nullptr;
         },
-        [&](const ast::DepthTexture* t) { return builder_->create<type::DepthTexture>(t->dim); },
-        [&](const ast::DepthMultisampledTexture* t) {
-            return builder_->create<type::DepthMultisampledTexture>(t->dim);
-        },
         [&](const ast::StorageTexture* t) -> type::StorageTexture* {
             if (auto* el = Type(t->type)) {
                 if (!validator_.StorageTexture(t)) {
@@ -2527,6 +2522,16 @@
             return builder_->create<type::Sampler>(type::SamplerKind::kSampler);
         case type::Builtin::kSamplerComparison:
             return builder_->create<type::Sampler>(type::SamplerKind::kComparisonSampler);
+        case type::Builtin::kTextureDepth2D:
+            return builder_->create<type::DepthTexture>(type::TextureDimension::k2d);
+        case type::Builtin::kTextureDepth2DArray:
+            return builder_->create<type::DepthTexture>(type::TextureDimension::k2dArray);
+        case type::Builtin::kTextureDepthCube:
+            return builder_->create<type::DepthTexture>(type::TextureDimension::kCube);
+        case type::Builtin::kTextureDepthCubeArray:
+            return builder_->create<type::DepthTexture>(type::TextureDimension::kCubeArray);
+        case type::Builtin::kTextureDepthMultisampled2D:
+            return builder_->create<type::DepthMultisampledTexture>(type::TextureDimension::k2d);
         case type::Builtin::kTextureExternal:
             return builder_->create<type::ExternalTexture>();
         case type::Builtin::kUndefined:
diff --git a/src/tint/resolver/validator.cc b/src/tint/resolver/validator.cc
index 0da542d..24a2bd7 100644
--- a/src/tint/resolver/validator.cc
+++ b/src/tint/resolver/validator.cc
@@ -25,7 +25,6 @@
 #include "src/tint/ast/break_statement.h"
 #include "src/tint/ast/call_statement.h"
 #include "src/tint/ast/continue_statement.h"
-#include "src/tint/ast/depth_texture.h"
 #include "src/tint/ast/disable_validation_attribute.h"
 #include "src/tint/ast/discard_statement.h"
 #include "src/tint/ast/for_loop_statement.h"
diff --git a/src/tint/transform/transform.cc b/src/tint/transform/transform.cc
index 2947b90..1b5b345 100644
--- a/src/tint/transform/transform.cc
+++ b/src/tint/transform/transform.cc
@@ -147,10 +147,10 @@
         return ctx.dst->create<ast::Atomic>(CreateASTTypeFor(ctx, a->Type()));
     }
     if (auto* t = ty->As<type::DepthTexture>()) {
-        return ctx.dst->create<ast::DepthTexture>(t->dim());
+        return ctx.dst->ty.depth_texture(t->dim());
     }
     if (auto* t = ty->As<type::DepthMultisampledTexture>()) {
-        return ctx.dst->create<ast::DepthMultisampledTexture>(t->dim());
+        return ctx.dst->ty.depth_multisampled_texture(t->dim());
     }
     if (ty->Is<type::ExternalTexture>()) {
         return ctx.dst->ty.external_texture();
diff --git a/src/tint/type/builtin.cc b/src/tint/type/builtin.cc
index 595a510..e8bf467 100644
--- a/src/tint/type/builtin.cc
+++ b/src/tint/type/builtin.cc
@@ -100,6 +100,21 @@
     if (str == "sampler_comparison") {
         return Builtin::kSamplerComparison;
     }
+    if (str == "texture_depth_2d") {
+        return Builtin::kTextureDepth2D;
+    }
+    if (str == "texture_depth_2d_array") {
+        return Builtin::kTextureDepth2DArray;
+    }
+    if (str == "texture_depth_cube") {
+        return Builtin::kTextureDepthCube;
+    }
+    if (str == "texture_depth_cube_array") {
+        return Builtin::kTextureDepthCubeArray;
+    }
+    if (str == "texture_depth_multisampled_2d") {
+        return Builtin::kTextureDepthMultisampled2D;
+    }
     if (str == "texture_external") {
         return Builtin::kTextureExternal;
     }
@@ -197,6 +212,16 @@
             return out << "sampler";
         case Builtin::kSamplerComparison:
             return out << "sampler_comparison";
+        case Builtin::kTextureDepth2D:
+            return out << "texture_depth_2d";
+        case Builtin::kTextureDepth2DArray:
+            return out << "texture_depth_2d_array";
+        case Builtin::kTextureDepthCube:
+            return out << "texture_depth_cube";
+        case Builtin::kTextureDepthCubeArray:
+            return out << "texture_depth_cube_array";
+        case Builtin::kTextureDepthMultisampled2D:
+            return out << "texture_depth_multisampled_2d";
         case Builtin::kTextureExternal:
             return out << "texture_external";
         case Builtin::kU32:
diff --git a/src/tint/type/builtin.h b/src/tint/type/builtin.h
index a996a72..8b73461 100644
--- a/src/tint/type/builtin.h
+++ b/src/tint/type/builtin.h
@@ -54,6 +54,11 @@
     kMat4X4H,
     kSampler,
     kSamplerComparison,
+    kTextureDepth2D,
+    kTextureDepth2DArray,
+    kTextureDepthCube,
+    kTextureDepthCubeArray,
+    kTextureDepthMultisampled2D,
     kTextureExternal,
     kU32,
     kVec2F,
@@ -105,6 +110,11 @@
     "mat4x4h",
     "sampler",
     "sampler_comparison",
+    "texture_depth_2d",
+    "texture_depth_2d_array",
+    "texture_depth_cube",
+    "texture_depth_cube_array",
+    "texture_depth_multisampled_2d",
     "texture_external",
     "u32",
     "vec2f",
diff --git a/src/tint/type/builtin_bench.cc b/src/tint/type/builtin_bench.cc
index 123012d..31fa29a 100644
--- a/src/tint/type/builtin_bench.cc
+++ b/src/tint/type/builtin_bench.cc
@@ -199,104 +199,139 @@
         "samplpLL_comparisI",
         "smplerfomparison",
         "sYmpURDr_comprison",
-        "texturh_external",
-        "teqtureuIIextnal",
-        "texture_externaH",
+        "texturh_depth_2d",
+        "teqtureuIIdep_2d",
+        "texture_depth_2H",
+        "texture_depth_2d",
+        "texre_depth_2Qvv",
+        "te66ue_depeh_2d",
+        "textue_d7pOh_2d",
+        "textureDDde0th_255_array",
+        "texture_IIepth_Hd_array",
+        "txture_depth_2d_array",
+        "texture_depth_2d_array",
+        "txture_depth_2r_array",
+        "tlxture_depth_2d_array",
+        "ttexturGdeth_2d_arrJJy",
+        "yexture_depth_cbe",
+        "texturedepth_cube",
+        "texture_IIeptBB_cube",
+        "texture_depth_cube",
+        "textKre_depth_c83TTe",
+        "texSnnYUUure_depth_cube",
+        "textuxe_5eptCCdZube",
+        "texturekkdepth_cube_arraq",
+        "exture_dppt00iicube5array",
+        "texIIurenndepth_cube_array",
+        "texture_depth_cube_array",
+        "ccextue_depth_cube_aKWa",
+        "texture_epth_cube_raKK",
+        "texture_depth_cube_a66ray",
+        "textEPPeKKdept_multisampled_2",
+        "texture_depth_mutisampledxx2d",
+        "texture_depth_qultisampled_2d",
+        "texture_depth_multisampled_2d",
+        "textureyydMMptr_mutisampleSS_2d",
+        "txture_depth_muluisampled2d",
+        "texSure_ept_mutisampled_2d",
+        "textu5e_externFFl",
+        "text44rrr_exterzal",
+        "texue_eWWtenal",
         "texture_external",
-        "texre_externaQvv",
-        "te66ue_external",
-        "textue_e7tOrnal",
-        "550DD",
-        "II3H",
-        "u3",
+        "textuXe_ZZxtJJrnal",
+        "textuPPe_eternal",
+        "texturc_external",
+        "ull62",
+        "93yy",
+        "u3KK",
         "u32",
-        "r2",
-        "u3l",
-        "uGt",
-        "ey2f",
+        "x_",
+        "K",
+        "kVz",
+        "veKSf",
         "vc2f",
-        "IIeBB2f",
+        "ec2VV",
         "vec2f",
-        "TTec338",
-        "veUUSS2nnd",
-        "vZx5CC",
-        "kkec2q",
-        "v005ih",
-        "vnIIc2h",
-        "vec2h",
-        "cceW",
-        "cKK",
-        "vec66h",
-        "vePPK",
-        "vexxi",
-        "qec2i",
-        "vec2i",
-        "veSyMMr",
-        "v2u",
-        "ec",
-        "5eFF2u",
-        "rrecz44",
-        "vWW",
-        "vec2u",
-        "XJecCZZ",
-        "vePP2",
-        "vec2c",
-        "ve6ll3f",
-        "vcyy99",
-        "Jec3KK",
-        "vec3f",
-        "_ex3",
-        "Ky3",
-        "zek3f",
-        "veKSh",
-        "vc3h",
-        "ec3VV",
-        "vec3h",
-        "IAAc3h",
+        "IAAc2f",
         "jbR",
         "veY4",
-        "ec3i",
+        "ec2h",
         "vc911",
-        "mmcci",
-        "vec3i",
-        "vJJci",
+        "mmcch",
+        "vec2h",
+        "vJJch",
         "lDDcUfC",
-        "vec3g",
+        "vec2g",
         "CCe",
-        "ec3u",
-        "vIc__u",
-        "vec3u",
+        "ec2i",
+        "vIc__i",
+        "vec2i",
         "ePPtt",
-        "v3dc3u",
-        "vcyyu",
-        "u4",
-        "v03nnf",
+        "v3dc2i",
+        "vcyyi",
+        "u2",
+        "v03nnu",
         "Cuuecnv",
-        "vec4f",
-        "vX4ll",
-        "vocppf",
-        "vwwc4",
+        "vec2u",
+        "vX2ll",
+        "vocppu",
+        "vwwc2",
         "veuug",
         "vaac",
-        "TRZccch",
-        "vec4h",
-        "vTc4O8",
-        "vem04h",
-        "meBB4h",
-        "Mpp4",
-        "OOe4i",
-        "veG4G",
-        "vec4i",
-        "11eHH4i",
+        "TRZcccf",
+        "vec3f",
+        "vTc3O8",
+        "vem03f",
+        "meBB3f",
+        "Mpp3",
+        "OOe3h",
+        "veG3G",
+        "vec3h",
+        "11eHH3h",
         "veFFe6",
-        "ve4",
-        "vKii4l",
-        "ec4u",
-        "v994IIv",
+        "ve3",
+        "vKii3l",
+        "ec3i",
+        "v993IIv",
+        "vec3i",
+        "veci",
+        "vechi",
+        "vczllPi",
+        "u",
+        "vffqq3",
+        "vJdd3u",
+        "vec3u",
+        "vecXX",
+        "ve32",
+        "Nyyc3u",
+        "vO4",
+        "PEruZ",
+        "vlc2edd",
+        "vec4f",
+        "ec9f",
+        "ve1II",
+        "veb4f",
+        "vi7",
+        "oec4ii",
+        "ec4",
+        "vec4h",
+        "veci",
+        "22ec",
+        "vGc4C",
+        "ffec48",
+        "c4i",
+        "JJecSSi",
+        "vec4i",
+        "94i",
+        "vbbJJ4TT",
+        "e66i",
+        "u664u",
+        "vW4u",
+        "v4u",
         "vec4u",
         "vecu",
-        "vechu",
-        "vczllPu",
+        "rec4u",
+        "2ec4B",
     };
     for (auto _ : state) {
         for (auto* str : kStrings) {
diff --git a/src/tint/type/builtin_test.cc b/src/tint/type/builtin_test.cc
index 18b5cc7..97f3164 100644
--- a/src/tint/type/builtin_test.cc
+++ b/src/tint/type/builtin_test.cc
@@ -67,6 +67,11 @@
     {"mat4x4h", Builtin::kMat4X4H},
     {"sampler", Builtin::kSampler},
     {"sampler_comparison", Builtin::kSamplerComparison},
+    {"texture_depth_2d", Builtin::kTextureDepth2D},
+    {"texture_depth_2d_array", Builtin::kTextureDepth2DArray},
+    {"texture_depth_cube", Builtin::kTextureDepthCube},
+    {"texture_depth_cube_array", Builtin::kTextureDepthCubeArray},
+    {"texture_depth_multisampled_2d", Builtin::kTextureDepthMultisampled2D},
     {"texture_external", Builtin::kTextureExternal},
     {"u32", Builtin::kU32},
     {"vec2f", Builtin::kVec2F},
@@ -156,48 +161,63 @@
     {"sWWpleq_compari44on", Builtin::kUndefined},
     {"sampler_compaisoOO", Builtin::kUndefined},
     {"smpeoo_coYparison", Builtin::kUndefined},
-    {"eture_eternal", Builtin::kUndefined},
-    {"texture_exeFnal", Builtin::kUndefined},
-    {"textureewternal", Builtin::kUndefined},
-    {"Gf", Builtin::kUndefined},
-    {"KK3q", Builtin::kUndefined},
-    {"umm2", Builtin::kUndefined},
-    {"vecf", Builtin::kUndefined},
-    {"qc2f", Builtin::kUndefined},
-    {"vecbb", Builtin::kUndefined},
-    {"iic2", Builtin::kUndefined},
-    {"vqOOh", Builtin::kUndefined},
-    {"vevvTTh", Builtin::kUndefined},
-    {"veFF2i", Builtin::kUndefined},
-    {"00PfQ", Builtin::kUndefined},
-    {"vec2P", Builtin::kUndefined},
-    {"vec77s", Builtin::kUndefined},
-    {"vecbbCu", Builtin::kUndefined},
-    {"vecXXu", Builtin::kUndefined},
-    {"CCOOec3", Builtin::kUndefined},
-    {"vs3u", Builtin::kUndefined},
-    {"Xec3f", Builtin::kUndefined},
-    {"ve3h", Builtin::kUndefined},
-    {"qq3", Builtin::kUndefined},
-    {"vec322", Builtin::kUndefined},
+    {"eture_dpth_2d", Builtin::kUndefined},
+    {"texture_detF_2d", Builtin::kUndefined},
+    {"texturedwpth_2d", Builtin::kUndefined},
+    {"teKuffe_Gepth_2d_arry", Builtin::kUndefined},
+    {"texture_dKKptq_2d_array", Builtin::kUndefined},
+    {"texture_depmmh32d_arraF", Builtin::kUndefined},
+    {"textur_depth_cube", Builtin::kUndefined},
+    {"texure_depqh_cube", Builtin::kUndefined},
+    {"texture_debth_cube", Builtin::kUndefined},
+    {"txture_deptii_cube_arry", Builtin::kUndefined},
+    {"textureqdepth_OOube_arry", Builtin::kUndefined},
+    {"texture_deTvvth_cube_array", Builtin::kUndefined},
+    {"texture_depth_multiFFampled_2d", Builtin::kUndefined},
+    {"textue_depthPmfl00isampled_Qd", Builtin::kUndefined},
+    {"textuPe_depth_multisampled_2d", Builtin::kUndefined},
+    {"texture_exernss77", Builtin::kUndefined},
+    {"texture_bbxternRRl", Builtin::kUndefined},
+    {"textureXXexternal", Builtin::kUndefined},
+    {"qOOO2", Builtin::kUndefined},
+    {"us", Builtin::kUndefined},
+    {"u3X", Builtin::kUndefined},
+    {"ve2f", Builtin::kUndefined},
+    {"qq2", Builtin::kUndefined},
+    {"vec222", Builtin::kUndefined},
     {"vezzXy", Builtin::kUndefined},
     {"ieVVP", Builtin::kUndefined},
-    {"venCi", Builtin::kUndefined},
-    {"vHc3Aq", Builtin::kUndefined},
-    {"ve3u", Builtin::kUndefined},
+    {"venCh", Builtin::kUndefined},
+    {"vHc2Aq", Builtin::kUndefined},
+    {"ve2i", Builtin::kUndefined},
     {"vefK", Builtin::kUndefined},
-    {"vgg4", Builtin::kUndefined},
-    {"vecf", Builtin::kUndefined},
-    {"4TNc4f", Builtin::kUndefined},
+    {"vgg2", Builtin::kUndefined},
+    {"vecu", Builtin::kUndefined},
+    {"4TNc2u", Builtin::kUndefined},
     {"ppec7l", Builtin::kUndefined},
-    {"zNe4h", Builtin::kUndefined},
-    {"uXXb4h", Builtin::kUndefined},
-    {"vec4", Builtin::kUndefined},
-    {"884K", Builtin::kUndefined},
-    {"vq9i", Builtin::kUndefined},
-    {"vec411", Builtin::kUndefined},
-    {"22ciiu", Builtin::kUndefined},
-    {"ec77u", Builtin::kUndefined},
+    {"zNe3f", Builtin::kUndefined},
+    {"uXXb3f", Builtin::kUndefined},
+    {"vec3", Builtin::kUndefined},
+    {"883K", Builtin::kUndefined},
+    {"vq9h", Builtin::kUndefined},
+    {"vec311", Builtin::kUndefined},
+    {"22ciii", Builtin::kUndefined},
+    {"ec77i", Builtin::kUndefined},
+    {"NN23u", Builtin::kUndefined},
+    {"vVVc3u", Builtin::kUndefined},
+    {"WW11w3u", Builtin::kUndefined},
+    {"vcwwf", Builtin::kUndefined},
+    {"vDc4f", Builtin::kUndefined},
+    {"vecK", Builtin::kUndefined},
+    {"f11r4PP", Builtin::kUndefined},
+    {"ve4h", Builtin::kUndefined},
+    {"vec4YY", Builtin::kUndefined},
+    {"vkktHH", Builtin::kUndefined},
+    {"rrec4i", Builtin::kUndefined},
+    {"vWWssi", Builtin::kUndefined},
+    {"veYu", Builtin::kUndefined},
+    {"eq4f", Builtin::kUndefined},
+    {"u22ec4u", Builtin::kUndefined},
 };
 
 using BuiltinParseTest = testing::TestWithParam<Case>;
diff --git a/src/tint/writer/wgsl/generator_impl.cc b/src/tint/writer/wgsl/generator_impl.cc
index 353e200..d99ecde 100644
--- a/src/tint/writer/wgsl/generator_impl.cc
+++ b/src/tint/writer/wgsl/generator_impl.cc
@@ -21,7 +21,6 @@
 #include "src/tint/ast/atomic.h"
 #include "src/tint/ast/bool_literal_expression.h"
 #include "src/tint/ast/call_statement.h"
-#include "src/tint/ast/depth_texture.h"
 #include "src/tint/ast/float_literal_expression.h"
 #include "src/tint/ast/id_attribute.h"
 #include "src/tint/ast/internal_attribute.h"
@@ -455,14 +454,6 @@
             out << "texture_";
             bool ok = Switch(
                 texture,
-                [&](const ast::DepthTexture*) {  //
-                    out << "depth_";
-                    return true;
-                },
-                [&](const ast::DepthMultisampledTexture*) {  //
-                    out << "depth_multisampled_";
-                    return true;
-                },
                 [&](const ast::SampledTexture*) {  //
                     /* nothing to emit */
                     return true;