diff --git a/src/tint/BUILD.gn b/src/tint/BUILD.gn
index 58749a7..0c8adbb 100644
--- a/src/tint/BUILD.gn
+++ b/src/tint/BUILD.gn
@@ -701,6 +701,8 @@
     "builtin/builtin_value.h",
     "builtin/extension.cc",
     "builtin/extension.h",
+    "builtin/texel_format.cc",
+    "builtin/texel_format.h",
   ]
   deps = [ ":libtint_base_src" ]
 }
@@ -758,8 +760,6 @@
     "type/storage_texture.h",
     "type/struct.cc",
     "type/struct.h",
-    "type/texel_format.cc",
-    "type/texel_format.h",
     "type/texture.cc",
     "type/texture.h",
     "type/texture_dimension.cc",
@@ -1298,6 +1298,7 @@
       "builtin/address_space_test.cc",
       "builtin/builtin_value_test.cc",
       "builtin/extension_test.cc",
+      "builtin/texel_format_test.cc",
     ]
     deps = [ ":libtint_builtins_src" ]
   }
@@ -1432,7 +1433,6 @@
       "type/sampler_test.cc",
       "type/storage_texture_test.cc",
       "type/struct_test.cc",
-      "type/texel_format_test.cc",
       "type/texture_test.cc",
       "type/type_test.cc",
       "type/u32_test.cc",
@@ -1509,6 +1509,7 @@
 
     deps = [
       ":libtint_base_src",
+      ":libtint_builtins_src",
       ":libtint_transform_src",
       ":libtint_unittests_ast_helper",
       ":libtint_wgsl_reader_src",
diff --git a/src/tint/CMakeLists.txt b/src/tint/CMakeLists.txt
index 83ee256..45926f5 100644
--- a/src/tint/CMakeLists.txt
+++ b/src/tint/CMakeLists.txt
@@ -552,13 +552,13 @@
 tint_generated(builtin/address_space BENCH TEST)
 tint_generated(builtin/builtin_value BENCH TEST)
 tint_generated(builtin/extension BENCH TEST)
+tint_generated(builtin/texel_format BENCH TEST)
 tint_generated(ast/diagnostic_control BENCH TEST)
 tint_generated(ast/interpolate_attribute BENCH TEST)
 tint_generated(resolver/init_conv_intrinsic)
 tint_generated(sem/builtin_type)
 tint_generated(sem/parameter_usage)
 tint_generated(type/builtin BENCH TEST)
-tint_generated(type/texel_format BENCH TEST)
 
 if(UNIX)
   list(APPEND TINT_LIB_SRCS diagnostic/printer_posix.cc)
diff --git a/src/tint/ast/builtin_texture_helper_test.cc b/src/tint/ast/builtin_texture_helper_test.cc
index 7b55d69..c4aefcf 100644
--- a/src/tint/ast/builtin_texture_helper_test.cc
+++ b/src/tint/ast/builtin_texture_helper_test.cc
@@ -14,6 +14,7 @@
 
 #include "src/tint/ast/builtin_texture_helper_test.h"
 
+#include "src/tint/builtin/texel_format.h"
 #include "src/tint/type/depth_texture.h"
 #include "src/tint/type/multisampled_texture.h"
 #include "src/tint/type/sampled_texture.h"
@@ -56,7 +57,7 @@
 TextureOverloadCase::TextureOverloadCase(ValidTextureOverload o,
                                          const char* d,
                                          tint::builtin::Access acc,
-                                         type::TexelFormat fmt,
+                                         tint::builtin::TexelFormat fmt,
                                          type::TextureDimension dims,
                                          TextureDataType datatype,
                                          const char* f,
@@ -405,7 +406,7 @@
             ValidTextureOverload::kDimensionsStorageWO1d,
             "textureDimensions(t : texture_storage_1d<rgba32float>) -> u32",
             tint::builtin::Access::kWrite,
-            type::TexelFormat::kRgba32Float,
+            tint::builtin::TexelFormat::kRgba32Float,
             type::TextureDimension::k1d,
             TextureDataType::kF32,
             "textureDimensions",
@@ -415,7 +416,7 @@
             ValidTextureOverload::kDimensionsStorageWO2d,
             "textureDimensions(t : texture_storage_2d<rgba32float>) -> vec2<u32>",
             tint::builtin::Access::kWrite,
-            type::TexelFormat::kRgba32Float,
+            tint::builtin::TexelFormat::kRgba32Float,
             type::TextureDimension::k2d,
             TextureDataType::kF32,
             "textureDimensions",
@@ -425,7 +426,7 @@
             ValidTextureOverload::kDimensionsStorageWO2dArray,
             "textureDimensions(t : texture_storage_2d_array<rgba32float>) -> vec2<u32>",
             tint::builtin::Access::kWrite,
-            type::TexelFormat::kRgba32Float,
+            tint::builtin::TexelFormat::kRgba32Float,
             type::TextureDimension::k2dArray,
             TextureDataType::kF32,
             "textureDimensions",
@@ -435,7 +436,7 @@
             ValidTextureOverload::kDimensionsStorageWO3d,
             "textureDimensions(t : texture_storage_3d<rgba32float>) -> vec3<u32>",
             tint::builtin::Access::kWrite,
-            type::TexelFormat::kRgba32Float,
+            tint::builtin::TexelFormat::kRgba32Float,
             type::TextureDimension::k3d,
             TextureDataType::kF32,
             "textureDimensions",
@@ -828,7 +829,7 @@
             ValidTextureOverload::kNumLayersStorageWO2dArray,
             "textureNumLayers(t : texture_storage_2d_array<rgba32float>) -> u32",
             tint::builtin::Access::kWrite,
-            type::TexelFormat::kRgba32Float,
+            tint::builtin::TexelFormat::kRgba32Float,
             type::TextureDimension::k2dArray,
             TextureDataType::kF32,
             "textureNumLayers",
@@ -2328,7 +2329,7 @@
             "             coords : i32,\n"
             "             value  : vec4<T>)",
             tint::builtin::Access::kWrite,
-            type::TexelFormat::kRgba32Float,
+            tint::builtin::TexelFormat::kRgba32Float,
             type::TextureDimension::k1d,
             TextureDataType::kF32,
             "textureStore",
@@ -2344,7 +2345,7 @@
             "             coords : vec2<i32>,\n"
             "             value  : vec4<T>)",
             tint::builtin::Access::kWrite,
-            type::TexelFormat::kRgba32Float,
+            tint::builtin::TexelFormat::kRgba32Float,
             type::TextureDimension::k2d,
             TextureDataType::kF32,
             "textureStore",
@@ -2361,7 +2362,7 @@
             "             array_index : u32,\n"
             "             value       : vec4<T>)",
             tint::builtin::Access::kWrite,
-            type::TexelFormat::kRgba32Float,
+            tint::builtin::TexelFormat::kRgba32Float,
             type::TextureDimension::k2dArray,
             TextureDataType::kF32,
             "textureStore",
@@ -2378,7 +2379,7 @@
             "             coords : vec3<u32>,\n"
             "             value  : vec4<T>)",
             tint::builtin::Access::kWrite,
-            type::TexelFormat::kRgba32Float,
+            tint::builtin::TexelFormat::kRgba32Float,
             type::TextureDimension::k3d,
             TextureDataType::kF32,
             "textureStore",
diff --git a/src/tint/ast/builtin_texture_helper_test.h b/src/tint/ast/builtin_texture_helper_test.h
index 46f1442..609928a 100644
--- a/src/tint/ast/builtin_texture_helper_test.h
+++ b/src/tint/ast/builtin_texture_helper_test.h
@@ -18,6 +18,7 @@
 #include <vector>
 
 #include "src/tint/builtin/access.h"
+#include "src/tint/builtin/texel_format.h"
 #include "src/tint/program_builder.h"
 #include "src/tint/type/storage_texture.h"
 #include "src/tint/type/texture_dimension.h"
@@ -208,7 +209,7 @@
     TextureOverloadCase(ValidTextureOverload,
                         const char*,
                         tint::builtin::Access,
-                        type::TexelFormat,
+                        tint::builtin::TexelFormat,
                         type::TextureDimension,
                         TextureDataType,
                         const char*,
@@ -248,7 +249,7 @@
     tint::builtin::Access const access = tint::builtin::Access::kReadWrite;
     /// The image format for the storage texture
     /// Used only when texture_kind is kStorage
-    type::TexelFormat const texel_format = type::TexelFormat::kUndefined;
+    tint::builtin::TexelFormat const texel_format = tint::builtin::TexelFormat::kUndefined;
     /// The dimensions of the texture parameter
     type::TextureDimension const texture_dimension;
     /// The data type of the texture parameter
diff --git a/src/tint/type/texel_format.cc b/src/tint/builtin/texel_format.cc
similarity index 96%
rename from src/tint/type/texel_format.cc
rename to src/tint/builtin/texel_format.cc
index ebf2fc0..dc4bbfe 100644
--- a/src/tint/type/texel_format.cc
+++ b/src/tint/builtin/texel_format.cc
@@ -15,14 +15,14 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/type/texel_format.cc.tmpl
+//   src/tint/builtin/texel_format.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/type/texel_format.h"
+#include "src/tint/builtin/texel_format.h"
 
-namespace tint::type {
+namespace tint::builtin {
 
 /// ParseTexelFormat parses a TexelFormat from a string.
 /// @param str the string to parse
@@ -124,4 +124,4 @@
     return out << "<unknown>";
 }
 
-}  // namespace tint::type
+}  // namespace tint::builtin
diff --git a/src/tint/type/texel_format.cc.tmpl b/src/tint/builtin/texel_format.cc.tmpl
similarity index 84%
rename from src/tint/type/texel_format.cc.tmpl
rename to src/tint/builtin/texel_format.cc.tmpl
index 716ff69..d67fc90 100644
--- a/src/tint/type/texel_format.cc.tmpl
+++ b/src/tint/builtin/texel_format.cc.tmpl
@@ -11,12 +11,12 @@
 {{- Import "src/tint/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "texel_format") -}}
 
-#include "src/tint/type/texel_format.h"
+#include "src/tint/builtin/texel_format.h"
 
-namespace tint::type {
+namespace tint::builtin {
 
 {{ Eval "ParseEnum" $enum}}
 
 {{ Eval "EnumOStream" $enum}}
 
-}  // namespace tint::type
+}  // namespace tint::builtin
diff --git a/src/tint/type/texel_format.h b/src/tint/builtin/texel_format.h
similarity index 89%
rename from src/tint/type/texel_format.h
rename to src/tint/builtin/texel_format.h
index a4c8e92..9611e62 100644
--- a/src/tint/type/texel_format.h
+++ b/src/tint/builtin/texel_format.h
@@ -15,17 +15,17 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/type/texel_format.h.tmpl
+//   src/tint/builtin/texel_format.h.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#ifndef SRC_TINT_TYPE_TEXEL_FORMAT_H_
-#define SRC_TINT_TYPE_TEXEL_FORMAT_H_
+#ifndef SRC_TINT_BUILTIN_TEXEL_FORMAT_H_
+#define SRC_TINT_BUILTIN_TEXEL_FORMAT_H_
 
 #include <ostream>
 
-namespace tint::type {
+namespace tint::builtin {
 
 /// Enumerator of texel formats
 enum class TexelFormat {
@@ -65,6 +65,6 @@
     "rgba32uint", "rgba8sint",   "rgba8snorm", "rgba8uint",  "rgba8unorm",
 };
 
-}  // namespace tint::type
+}  // namespace tint::builtin
 
-#endif  // SRC_TINT_TYPE_TEXEL_FORMAT_H_
+#endif  // SRC_TINT_BUILTIN_TEXEL_FORMAT_H_
diff --git a/src/tint/type/texel_format.h.tmpl b/src/tint/builtin/texel_format.h.tmpl
similarity index 75%
rename from src/tint/type/texel_format.h.tmpl
rename to src/tint/builtin/texel_format.h.tmpl
index 837c226..a3a9e31 100644
--- a/src/tint/type/texel_format.h.tmpl
+++ b/src/tint/builtin/texel_format.h.tmpl
@@ -11,16 +11,16 @@
 {{- Import "src/tint/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "texel_format") -}}
 
-#ifndef SRC_TINT_TYPE_TEXEL_FORMAT_H_
-#define SRC_TINT_TYPE_TEXEL_FORMAT_H_
+#ifndef SRC_TINT_BUILTIN_TEXEL_FORMAT_H_
+#define SRC_TINT_BUILTIN_TEXEL_FORMAT_H_
 
 #include <ostream>
 
-namespace tint::type {
+namespace tint::builtin {
 
 /// Enumerator of texel formats
 {{ Eval "DeclareEnum" $enum}}
 
-}  // namespace tint::type
+}  // namespace tint::builtin
 
-#endif  // SRC_TINT_TYPE_TEXEL_FORMAT_H_
+#endif  // SRC_TINT_BUILTIN_TEXEL_FORMAT_H_
diff --git a/src/tint/type/texel_format_bench.cc b/src/tint/builtin/texel_format_bench.cc
similarity index 95%
rename from src/tint/type/texel_format_bench.cc
rename to src/tint/builtin/texel_format_bench.cc
index 6a0ea27..5d202ea 100644
--- a/src/tint/type/texel_format_bench.cc
+++ b/src/tint/builtin/texel_format_bench.cc
@@ -15,18 +15,18 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/type/texel_format_bench.cc.tmpl
+//   src/tint/builtin/texel_format_bench.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/type/texel_format.h"
+#include "src/tint/builtin/texel_format.h"
 
 #include <array>
 
 #include "benchmark/benchmark.h"
 
-namespace tint::type {
+namespace tint::builtin {
 namespace {
 
 void TexelFormatParser(::benchmark::State& state) {
@@ -67,4 +67,4 @@
 BENCHMARK(TexelFormatParser);
 
 }  // namespace
-}  // namespace tint::type
+}  // namespace tint::builtin
diff --git a/src/tint/type/texel_format_bench.cc.tmpl b/src/tint/builtin/texel_format_bench.cc.tmpl
similarity index 85%
rename from src/tint/type/texel_format_bench.cc.tmpl
rename to src/tint/builtin/texel_format_bench.cc.tmpl
index 2561dac..ac7249a 100644
--- a/src/tint/type/texel_format_bench.cc.tmpl
+++ b/src/tint/builtin/texel_format_bench.cc.tmpl
@@ -11,16 +11,16 @@
 {{- Import "src/tint/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "texel_format") -}}
 
-#include "src/tint/type/texel_format.h"
+#include "src/tint/builtin/texel_format.h"
 
 #include <array>
 
 #include "benchmark/benchmark.h"
 
-namespace tint::type {
+namespace tint::builtin {
 namespace {
 
 {{ Eval "BenchmarkParseEnum" $enum }}
 
 }  // namespace
-}  // namespace tint::type
+}  // namespace tint::builtin
diff --git a/src/tint/type/texel_format_test.cc b/src/tint/builtin/texel_format_test.cc
similarity index 96%
rename from src/tint/type/texel_format_test.cc
rename to src/tint/builtin/texel_format_test.cc
index c7bc0e4..453224c 100644
--- a/src/tint/type/texel_format_test.cc
+++ b/src/tint/builtin/texel_format_test.cc
@@ -15,19 +15,20 @@
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by tools/src/cmd/gen
 // using the template:
-//   src/tint/type/texel_format_test.cc.tmpl
+//   src/tint/builtin/texel_format_test.cc.tmpl
 //
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-#include "src/tint/type/texel_format.h"
+#include "src/tint/builtin/texel_format.h"
+
+#include <gtest/gtest.h>
 
 #include <string>
 
-#include "src/tint/type/test_helper.h"
 #include "src/tint/utils/string.h"
 
-namespace tint::type {
+namespace tint::builtin {
 namespace {
 
 namespace parse_print_tests {
@@ -106,4 +107,4 @@
 }  // namespace parse_print_tests
 
 }  // namespace
-}  // namespace tint::type
+}  // namespace tint::builtin
diff --git a/src/tint/type/texel_format_test.cc.tmpl b/src/tint/builtin/texel_format_test.cc.tmpl
similarity index 82%
rename from src/tint/type/texel_format_test.cc.tmpl
rename to src/tint/builtin/texel_format_test.cc.tmpl
index e7a0e59..8babb9b 100644
--- a/src/tint/type/texel_format_test.cc.tmpl
+++ b/src/tint/builtin/texel_format_test.cc.tmpl
@@ -11,17 +11,18 @@
 {{- Import "src/tint/templates/enums.tmpl.inc" -}}
 {{- $enum := (Sem.Enum "texel_format") -}}
 
-#include "src/tint/type/texel_format.h"
+#include "src/tint/builtin/texel_format.h"
+
+#include <gtest/gtest.h>
 
 #include <string>
 
-#include "src/tint/type/test_helper.h"
 #include "src/tint/utils/string.h"
 
-namespace tint::type {
+namespace tint::builtin {
 namespace {
 
 {{ Eval "TestParsePrintEnum" $enum}}
 
 }  // namespace
-}  // namespace tint::type
+}  // namespace tint::builtin
diff --git a/src/tint/inspector/inspector_test.cc b/src/tint/inspector/inspector_test.cc
index 44e13b0..13197bd 100644
--- a/src/tint/inspector/inspector_test.cc
+++ b/src/tint/inspector/inspector_test.cc
@@ -112,7 +112,7 @@
                                                                  public testing::Test {};
 
 typedef std::tuple<type::TextureDimension, ResourceBinding::TextureDimension> DimensionParams;
-typedef std::tuple<type::TexelFormat, ResourceBinding::TexelFormat, ResourceBinding::SampledKind>
+typedef std::tuple<builtin::TexelFormat, ResourceBinding::TexelFormat, ResourceBinding::SampledKind>
     TexelFormatParams;
 typedef std::tuple<DimensionParams, TexelFormatParams> GetStorageTextureTestParams;
 class InspectorGetStorageTextureResourceBindingsTestWithParam
@@ -1812,7 +1812,7 @@
          });
 
     auto st_type =
-        MakeStorageTextureTypes(type::TextureDimension::k2d, type::TexelFormat::kR32Uint);
+        MakeStorageTextureTypes(type::TextureDimension::k2d, builtin::TexelFormat::kR32Uint);
     AddStorageTexture("st_var", st_type, 4, 0);
     MakeStorageTextureBodyFunction("st_func", "st_var", ty.vec2<u32>(), utils::Empty);
 
@@ -2972,7 +2972,7 @@
     ResourceBinding::TextureDimension expected_dim;
     std::tie(dim, expected_dim) = dim_params;
 
-    type::TexelFormat format;
+    builtin::TexelFormat format;
     ResourceBinding::TexelFormat expected_format;
     ResourceBinding::SampledKind expected_kind;
     std::tie(format, expected_format, expected_kind) = format_params;
@@ -3028,52 +3028,52 @@
                                                      ResourceBinding::TextureDimension::k2dArray),
                                      std::make_tuple(type::TextureDimension::k3d,
                                                      ResourceBinding::TextureDimension::k3d)),
-                     testing::Values(std::make_tuple(type::TexelFormat::kR32Float,
+                     testing::Values(std::make_tuple(builtin::TexelFormat::kR32Float,
                                                      ResourceBinding::TexelFormat::kR32Float,
                                                      ResourceBinding::SampledKind::kFloat),
-                                     std::make_tuple(type::TexelFormat::kR32Sint,
+                                     std::make_tuple(builtin::TexelFormat::kR32Sint,
                                                      ResourceBinding::TexelFormat::kR32Sint,
                                                      ResourceBinding::SampledKind::kSInt),
-                                     std::make_tuple(type::TexelFormat::kR32Uint,
+                                     std::make_tuple(builtin::TexelFormat::kR32Uint,
                                                      ResourceBinding::TexelFormat::kR32Uint,
                                                      ResourceBinding::SampledKind::kUInt),
-                                     std::make_tuple(type::TexelFormat::kRg32Float,
+                                     std::make_tuple(builtin::TexelFormat::kRg32Float,
                                                      ResourceBinding::TexelFormat::kRg32Float,
                                                      ResourceBinding::SampledKind::kFloat),
-                                     std::make_tuple(type::TexelFormat::kRg32Sint,
+                                     std::make_tuple(builtin::TexelFormat::kRg32Sint,
                                                      ResourceBinding::TexelFormat::kRg32Sint,
                                                      ResourceBinding::SampledKind::kSInt),
-                                     std::make_tuple(type::TexelFormat::kRg32Uint,
+                                     std::make_tuple(builtin::TexelFormat::kRg32Uint,
                                                      ResourceBinding::TexelFormat::kRg32Uint,
                                                      ResourceBinding::SampledKind::kUInt),
-                                     std::make_tuple(type::TexelFormat::kRgba16Float,
+                                     std::make_tuple(builtin::TexelFormat::kRgba16Float,
                                                      ResourceBinding::TexelFormat::kRgba16Float,
                                                      ResourceBinding::SampledKind::kFloat),
-                                     std::make_tuple(type::TexelFormat::kRgba16Sint,
+                                     std::make_tuple(builtin::TexelFormat::kRgba16Sint,
                                                      ResourceBinding::TexelFormat::kRgba16Sint,
                                                      ResourceBinding::SampledKind::kSInt),
-                                     std::make_tuple(type::TexelFormat::kRgba16Uint,
+                                     std::make_tuple(builtin::TexelFormat::kRgba16Uint,
                                                      ResourceBinding::TexelFormat::kRgba16Uint,
                                                      ResourceBinding::SampledKind::kUInt),
-                                     std::make_tuple(type::TexelFormat::kRgba32Float,
+                                     std::make_tuple(builtin::TexelFormat::kRgba32Float,
                                                      ResourceBinding::TexelFormat::kRgba32Float,
                                                      ResourceBinding::SampledKind::kFloat),
-                                     std::make_tuple(type::TexelFormat::kRgba32Sint,
+                                     std::make_tuple(builtin::TexelFormat::kRgba32Sint,
                                                      ResourceBinding::TexelFormat::kRgba32Sint,
                                                      ResourceBinding::SampledKind::kSInt),
-                                     std::make_tuple(type::TexelFormat::kRgba32Uint,
+                                     std::make_tuple(builtin::TexelFormat::kRgba32Uint,
                                                      ResourceBinding::TexelFormat::kRgba32Uint,
                                                      ResourceBinding::SampledKind::kUInt),
-                                     std::make_tuple(type::TexelFormat::kRgba8Sint,
+                                     std::make_tuple(builtin::TexelFormat::kRgba8Sint,
                                                      ResourceBinding::TexelFormat::kRgba8Sint,
                                                      ResourceBinding::SampledKind::kSInt),
-                                     std::make_tuple(type::TexelFormat::kRgba8Snorm,
+                                     std::make_tuple(builtin::TexelFormat::kRgba8Snorm,
                                                      ResourceBinding::TexelFormat::kRgba8Snorm,
                                                      ResourceBinding::SampledKind::kFloat),
-                                     std::make_tuple(type::TexelFormat::kRgba8Uint,
+                                     std::make_tuple(builtin::TexelFormat::kRgba8Uint,
                                                      ResourceBinding::TexelFormat::kRgba8Uint,
                                                      ResourceBinding::SampledKind::kUInt),
-                                     std::make_tuple(type::TexelFormat::kRgba8Unorm,
+                                     std::make_tuple(builtin::TexelFormat::kRgba8Unorm,
                                                      ResourceBinding::TexelFormat::kRgba8Unorm,
                                                      ResourceBinding::SampledKind::kFloat))));
 
diff --git a/src/tint/inspector/resource_binding.cc b/src/tint/inspector/resource_binding.cc
index 91e5daf..9b0dc83 100644
--- a/src/tint/inspector/resource_binding.cc
+++ b/src/tint/inspector/resource_binding.cc
@@ -71,43 +71,43 @@
 }
 
 ResourceBinding::TexelFormat TypeTexelFormatToResourceBindingTexelFormat(
-    const type::TexelFormat& image_format) {
+    const builtin::TexelFormat& image_format) {
     switch (image_format) {
-        case type::TexelFormat::kBgra8Unorm:
+        case builtin::TexelFormat::kBgra8Unorm:
             return ResourceBinding::TexelFormat::kBgra8Unorm;
-        case type::TexelFormat::kR32Uint:
+        case builtin::TexelFormat::kR32Uint:
             return ResourceBinding::TexelFormat::kR32Uint;
-        case type::TexelFormat::kR32Sint:
+        case builtin::TexelFormat::kR32Sint:
             return ResourceBinding::TexelFormat::kR32Sint;
-        case type::TexelFormat::kR32Float:
+        case builtin::TexelFormat::kR32Float:
             return ResourceBinding::TexelFormat::kR32Float;
-        case type::TexelFormat::kRgba8Unorm:
+        case builtin::TexelFormat::kRgba8Unorm:
             return ResourceBinding::TexelFormat::kRgba8Unorm;
-        case type::TexelFormat::kRgba8Snorm:
+        case builtin::TexelFormat::kRgba8Snorm:
             return ResourceBinding::TexelFormat::kRgba8Snorm;
-        case type::TexelFormat::kRgba8Uint:
+        case builtin::TexelFormat::kRgba8Uint:
             return ResourceBinding::TexelFormat::kRgba8Uint;
-        case type::TexelFormat::kRgba8Sint:
+        case builtin::TexelFormat::kRgba8Sint:
             return ResourceBinding::TexelFormat::kRgba8Sint;
-        case type::TexelFormat::kRg32Uint:
+        case builtin::TexelFormat::kRg32Uint:
             return ResourceBinding::TexelFormat::kRg32Uint;
-        case type::TexelFormat::kRg32Sint:
+        case builtin::TexelFormat::kRg32Sint:
             return ResourceBinding::TexelFormat::kRg32Sint;
-        case type::TexelFormat::kRg32Float:
+        case builtin::TexelFormat::kRg32Float:
             return ResourceBinding::TexelFormat::kRg32Float;
-        case type::TexelFormat::kRgba16Uint:
+        case builtin::TexelFormat::kRgba16Uint:
             return ResourceBinding::TexelFormat::kRgba16Uint;
-        case type::TexelFormat::kRgba16Sint:
+        case builtin::TexelFormat::kRgba16Sint:
             return ResourceBinding::TexelFormat::kRgba16Sint;
-        case type::TexelFormat::kRgba16Float:
+        case builtin::TexelFormat::kRgba16Float:
             return ResourceBinding::TexelFormat::kRgba16Float;
-        case type::TexelFormat::kRgba32Uint:
+        case builtin::TexelFormat::kRgba32Uint:
             return ResourceBinding::TexelFormat::kRgba32Uint;
-        case type::TexelFormat::kRgba32Sint:
+        case builtin::TexelFormat::kRgba32Sint:
             return ResourceBinding::TexelFormat::kRgba32Sint;
-        case type::TexelFormat::kRgba32Float:
+        case builtin::TexelFormat::kRgba32Float:
             return ResourceBinding::TexelFormat::kRgba32Float;
-        case type::TexelFormat::kUndefined:
+        case builtin::TexelFormat::kUndefined:
             return ResourceBinding::TexelFormat::kNone;
     }
     return ResourceBinding::TexelFormat::kNone;
diff --git a/src/tint/inspector/resource_binding.h b/src/tint/inspector/resource_binding.h
index 4c1e0c7..69e1832 100644
--- a/src/tint/inspector/resource_binding.h
+++ b/src/tint/inspector/resource_binding.h
@@ -17,7 +17,7 @@
 
 #include <cstdint>
 
-#include "src/tint/type/texel_format.h"
+#include "src/tint/builtin/texel_format.h"
 #include "src/tint/type/texture_dimension.h"
 #include "src/tint/type/type.h"
 
@@ -116,12 +116,12 @@
 /// @returns the publicly visible equivalent
 ResourceBinding::SampledKind BaseTypeToSampledKind(const type::Type* base_type);
 
-/// Convert from internal type::TexelFormat to public
+/// Convert from internal builtin::TexelFormat to public
 /// ResourceBinding::TexelFormat
 /// @param image_format internal value to convert from
 /// @returns the publicly visible equivalent
 ResourceBinding::TexelFormat TypeTexelFormatToResourceBindingTexelFormat(
-    const type::TexelFormat& image_format);
+    const builtin::TexelFormat& image_format);
 
 }  // namespace tint::inspector
 
diff --git a/src/tint/inspector/test_inspector_builder.cc b/src/tint/inspector/test_inspector_builder.cc
index b1c8dd4..ad576b9 100644
--- a/src/tint/inspector/test_inspector_builder.cc
+++ b/src/tint/inspector/test_inspector_builder.cc
@@ -279,7 +279,7 @@
 }
 
 ast::Type InspectorBuilder::MakeStorageTextureTypes(type::TextureDimension dim,
-                                                    type::TexelFormat format) {
+                                                    builtin::TexelFormat format) {
     return ty.storage_texture(dim, format, builtin::Access::kWrite);
 }
 
diff --git a/src/tint/inspector/test_inspector_builder.h b/src/tint/inspector/test_inspector_builder.h
index 7056738..0fa21b7 100644
--- a/src/tint/inspector/test_inspector_builder.h
+++ b/src/tint/inspector/test_inspector_builder.h
@@ -290,7 +290,7 @@
     /// @param dim the texture dimension of the storage texture
     /// @param format the texel format of the storage texture
     /// @returns the storage texture type
-    ast::Type MakeStorageTextureTypes(type::TextureDimension dim, type::TexelFormat format);
+    ast::Type MakeStorageTextureTypes(type::TextureDimension dim, builtin::TexelFormat format);
 
     /// Adds a storage texture variable to the program
     /// @param name the name of the variable
diff --git a/src/tint/program_builder.h b/src/tint/program_builder.h
index 4444428..1d3ccf6 100644
--- a/src/tint/program_builder.h
+++ b/src/tint/program_builder.h
@@ -1389,7 +1389,7 @@
         /// @param access the access control of the texture
         /// @returns the storage texture
         ast::Type storage_texture(type::TextureDimension dims,
-                                  type::TexelFormat format,
+                                  builtin::TexelFormat format,
                                   builtin::Access access) const {
             return storage_texture(builder->source_, dims, format, access);
         }
@@ -1401,7 +1401,7 @@
         /// @returns the storage texture
         ast::Type storage_texture(const Source& source,
                                   type::TextureDimension dims,
-                                  type::TexelFormat format,
+                                  builtin::TexelFormat format,
                                   builtin::Access access) const {
             switch (dims) {
                 case type::TextureDimension::k1d:
diff --git a/src/tint/reader/spirv/enum_converter.cc b/src/tint/reader/spirv/enum_converter.cc
index 1aeaf88..b4bca3b 100644
--- a/src/tint/reader/spirv/enum_converter.cc
+++ b/src/tint/reader/spirv/enum_converter.cc
@@ -130,53 +130,53 @@
     return type::TextureDimension::kNone;
 }
 
-type::TexelFormat EnumConverter::ToTexelFormat(spv::ImageFormat fmt) {
+builtin::TexelFormat EnumConverter::ToTexelFormat(spv::ImageFormat fmt) {
     switch (fmt) {
         case spv::ImageFormat::Unknown:
-            return type::TexelFormat::kUndefined;
+            return builtin::TexelFormat::kUndefined;
 
         // 8 bit channels
         case spv::ImageFormat::Rgba8:
-            return type::TexelFormat::kRgba8Unorm;
+            return builtin::TexelFormat::kRgba8Unorm;
         case spv::ImageFormat::Rgba8Snorm:
-            return type::TexelFormat::kRgba8Snorm;
+            return builtin::TexelFormat::kRgba8Snorm;
         case spv::ImageFormat::Rgba8ui:
-            return type::TexelFormat::kRgba8Uint;
+            return builtin::TexelFormat::kRgba8Uint;
         case spv::ImageFormat::Rgba8i:
-            return type::TexelFormat::kRgba8Sint;
+            return builtin::TexelFormat::kRgba8Sint;
 
         // 16 bit channels
         case spv::ImageFormat::Rgba16ui:
-            return type::TexelFormat::kRgba16Uint;
+            return builtin::TexelFormat::kRgba16Uint;
         case spv::ImageFormat::Rgba16i:
-            return type::TexelFormat::kRgba16Sint;
+            return builtin::TexelFormat::kRgba16Sint;
         case spv::ImageFormat::Rgba16f:
-            return type::TexelFormat::kRgba16Float;
+            return builtin::TexelFormat::kRgba16Float;
 
         // 32 bit channels
         case spv::ImageFormat::R32ui:
-            return type::TexelFormat::kR32Uint;
+            return builtin::TexelFormat::kR32Uint;
         case spv::ImageFormat::R32i:
-            return type::TexelFormat::kR32Sint;
+            return builtin::TexelFormat::kR32Sint;
         case spv::ImageFormat::R32f:
-            return type::TexelFormat::kR32Float;
+            return builtin::TexelFormat::kR32Float;
         case spv::ImageFormat::Rg32ui:
-            return type::TexelFormat::kRg32Uint;
+            return builtin::TexelFormat::kRg32Uint;
         case spv::ImageFormat::Rg32i:
-            return type::TexelFormat::kRg32Sint;
+            return builtin::TexelFormat::kRg32Sint;
         case spv::ImageFormat::Rg32f:
-            return type::TexelFormat::kRg32Float;
+            return builtin::TexelFormat::kRg32Float;
         case spv::ImageFormat::Rgba32ui:
-            return type::TexelFormat::kRgba32Uint;
+            return builtin::TexelFormat::kRgba32Uint;
         case spv::ImageFormat::Rgba32i:
-            return type::TexelFormat::kRgba32Sint;
+            return builtin::TexelFormat::kRgba32Sint;
         case spv::ImageFormat::Rgba32f:
-            return type::TexelFormat::kRgba32Float;
+            return builtin::TexelFormat::kRgba32Float;
         default:
             break;
     }
     Fail() << "invalid image format: " << int(fmt);
-    return type::TexelFormat::kUndefined;
+    return builtin::TexelFormat::kUndefined;
 }
 
 }  // namespace tint::reader::spirv
diff --git a/src/tint/reader/spirv/enum_converter.h b/src/tint/reader/spirv/enum_converter.h
index 12b50af..9a2a7b4 100644
--- a/src/tint/reader/spirv/enum_converter.h
+++ b/src/tint/reader/spirv/enum_converter.h
@@ -73,13 +73,13 @@
     /// On failure, logs an error and returns kNone
     /// @param fmt the SPIR-V format
     /// @returns a Tint AST format
-    type::TexelFormat ToTexelFormat(spv::ImageFormat fmt);
+    builtin::TexelFormat ToTexelFormat(spv::ImageFormat fmt);
 
     /// Converts a SPIR-V Image Format to a TexelFormat
     /// On failure, logs an error and returns kNone
     /// @param fmt the SPIR-V format
     /// @returns a Tint AST format
-    type::TexelFormat ToTexelFormat(SpvImageFormat fmt) {
+    builtin::TexelFormat ToTexelFormat(SpvImageFormat fmt) {
         return ToTexelFormat(static_cast<spv::ImageFormat>(fmt));
     }
 
diff --git a/src/tint/reader/spirv/enum_converter_test.cc b/src/tint/reader/spirv/enum_converter_test.cc
index c5da495..407b121 100644
--- a/src/tint/reader/spirv/enum_converter_test.cc
+++ b/src/tint/reader/spirv/enum_converter_test.cc
@@ -293,7 +293,7 @@
 struct TexelFormatCase {
     spv::ImageFormat format;
     bool expect_success;
-    type::TexelFormat expected;
+    builtin::TexelFormat expected;
 };
 inline std::ostream& operator<<(std::ostream& out, TexelFormatCase ifc) {
     out << "TexelFormatCase{ spv::ImageFormat:::" << int(ifc.format)
@@ -335,52 +335,52 @@
     SpvImageFormatTest,
     testing::Values(
         // Unknown.  This is used for sampled images.
-        TexelFormatCase{spv::ImageFormat::Unknown, true, type::TexelFormat::kUndefined},
+        TexelFormatCase{spv::ImageFormat::Unknown, true, builtin::TexelFormat::kUndefined},
         // 8 bit channels
-        TexelFormatCase{spv::ImageFormat::Rgba8, true, type::TexelFormat::kRgba8Unorm},
-        TexelFormatCase{spv::ImageFormat::Rgba8Snorm, true, type::TexelFormat::kRgba8Snorm},
-        TexelFormatCase{spv::ImageFormat::Rgba8ui, true, type::TexelFormat::kRgba8Uint},
-        TexelFormatCase{spv::ImageFormat::Rgba8i, true, type::TexelFormat::kRgba8Sint},
+        TexelFormatCase{spv::ImageFormat::Rgba8, true, builtin::TexelFormat::kRgba8Unorm},
+        TexelFormatCase{spv::ImageFormat::Rgba8Snorm, true, builtin::TexelFormat::kRgba8Snorm},
+        TexelFormatCase{spv::ImageFormat::Rgba8ui, true, builtin::TexelFormat::kRgba8Uint},
+        TexelFormatCase{spv::ImageFormat::Rgba8i, true, builtin::TexelFormat::kRgba8Sint},
         // 16 bit channels
-        TexelFormatCase{spv::ImageFormat::Rgba16ui, true, type::TexelFormat::kRgba16Uint},
-        TexelFormatCase{spv::ImageFormat::Rgba16i, true, type::TexelFormat::kRgba16Sint},
-        TexelFormatCase{spv::ImageFormat::Rgba16f, true, type::TexelFormat::kRgba16Float},
+        TexelFormatCase{spv::ImageFormat::Rgba16ui, true, builtin::TexelFormat::kRgba16Uint},
+        TexelFormatCase{spv::ImageFormat::Rgba16i, true, builtin::TexelFormat::kRgba16Sint},
+        TexelFormatCase{spv::ImageFormat::Rgba16f, true, builtin::TexelFormat::kRgba16Float},
         // 32 bit channels
         // ... 1 channel
-        TexelFormatCase{spv::ImageFormat::R32ui, true, type::TexelFormat::kR32Uint},
-        TexelFormatCase{spv::ImageFormat::R32i, true, type::TexelFormat::kR32Sint},
-        TexelFormatCase{spv::ImageFormat::R32f, true, type::TexelFormat::kR32Float},
+        TexelFormatCase{spv::ImageFormat::R32ui, true, builtin::TexelFormat::kR32Uint},
+        TexelFormatCase{spv::ImageFormat::R32i, true, builtin::TexelFormat::kR32Sint},
+        TexelFormatCase{spv::ImageFormat::R32f, true, builtin::TexelFormat::kR32Float},
         // ... 2 channels
-        TexelFormatCase{spv::ImageFormat::Rg32ui, true, type::TexelFormat::kRg32Uint},
-        TexelFormatCase{spv::ImageFormat::Rg32i, true, type::TexelFormat::kRg32Sint},
-        TexelFormatCase{spv::ImageFormat::Rg32f, true, type::TexelFormat::kRg32Float},
+        TexelFormatCase{spv::ImageFormat::Rg32ui, true, builtin::TexelFormat::kRg32Uint},
+        TexelFormatCase{spv::ImageFormat::Rg32i, true, builtin::TexelFormat::kRg32Sint},
+        TexelFormatCase{spv::ImageFormat::Rg32f, true, builtin::TexelFormat::kRg32Float},
         // ... 4 channels
-        TexelFormatCase{spv::ImageFormat::Rgba32ui, true, type::TexelFormat::kRgba32Uint},
-        TexelFormatCase{spv::ImageFormat::Rgba32i, true, type::TexelFormat::kRgba32Sint},
-        TexelFormatCase{spv::ImageFormat::Rgba32f, true, type::TexelFormat::kRgba32Float}));
+        TexelFormatCase{spv::ImageFormat::Rgba32ui, true, builtin::TexelFormat::kRgba32Uint},
+        TexelFormatCase{spv::ImageFormat::Rgba32i, true, builtin::TexelFormat::kRgba32Sint},
+        TexelFormatCase{spv::ImageFormat::Rgba32f, true, builtin::TexelFormat::kRgba32Float}));
 
 INSTANTIATE_TEST_SUITE_P(
     EnumConverterBad,
     SpvImageFormatTest,
     testing::Values(
         // Scanning in order from the SPIR-V spec.
-        TexelFormatCase{spv::ImageFormat::Rg16f, false, type::TexelFormat::kUndefined},
-        TexelFormatCase{spv::ImageFormat::R11fG11fB10f, false, type::TexelFormat::kUndefined},
-        TexelFormatCase{spv::ImageFormat::R16f, false, type::TexelFormat::kUndefined},
-        TexelFormatCase{spv::ImageFormat::Rgb10A2, false, type::TexelFormat::kUndefined},
-        TexelFormatCase{spv::ImageFormat::Rg16, false, type::TexelFormat::kUndefined},
-        TexelFormatCase{spv::ImageFormat::Rg8, false, type::TexelFormat::kUndefined},
-        TexelFormatCase{spv::ImageFormat::R16, false, type::TexelFormat::kUndefined},
-        TexelFormatCase{spv::ImageFormat::R8, false, type::TexelFormat::kUndefined},
-        TexelFormatCase{spv::ImageFormat::Rgba16Snorm, false, type::TexelFormat::kUndefined},
-        TexelFormatCase{spv::ImageFormat::Rg16Snorm, false, type::TexelFormat::kUndefined},
-        TexelFormatCase{spv::ImageFormat::Rg8Snorm, false, type::TexelFormat::kUndefined},
-        TexelFormatCase{spv::ImageFormat::Rg16i, false, type::TexelFormat::kUndefined},
-        TexelFormatCase{spv::ImageFormat::Rg8i, false, type::TexelFormat::kUndefined},
-        TexelFormatCase{spv::ImageFormat::R8i, false, type::TexelFormat::kUndefined},
-        TexelFormatCase{spv::ImageFormat::Rgb10a2ui, false, type::TexelFormat::kUndefined},
-        TexelFormatCase{spv::ImageFormat::Rg16ui, false, type::TexelFormat::kUndefined},
-        TexelFormatCase{spv::ImageFormat::Rg8ui, false, type::TexelFormat::kUndefined}));
+        TexelFormatCase{spv::ImageFormat::Rg16f, false, builtin::TexelFormat::kUndefined},
+        TexelFormatCase{spv::ImageFormat::R11fG11fB10f, false, builtin::TexelFormat::kUndefined},
+        TexelFormatCase{spv::ImageFormat::R16f, false, builtin::TexelFormat::kUndefined},
+        TexelFormatCase{spv::ImageFormat::Rgb10A2, false, builtin::TexelFormat::kUndefined},
+        TexelFormatCase{spv::ImageFormat::Rg16, false, builtin::TexelFormat::kUndefined},
+        TexelFormatCase{spv::ImageFormat::Rg8, false, builtin::TexelFormat::kUndefined},
+        TexelFormatCase{spv::ImageFormat::R16, false, builtin::TexelFormat::kUndefined},
+        TexelFormatCase{spv::ImageFormat::R8, false, builtin::TexelFormat::kUndefined},
+        TexelFormatCase{spv::ImageFormat::Rgba16Snorm, false, builtin::TexelFormat::kUndefined},
+        TexelFormatCase{spv::ImageFormat::Rg16Snorm, false, builtin::TexelFormat::kUndefined},
+        TexelFormatCase{spv::ImageFormat::Rg8Snorm, false, builtin::TexelFormat::kUndefined},
+        TexelFormatCase{spv::ImageFormat::Rg16i, false, builtin::TexelFormat::kUndefined},
+        TexelFormatCase{spv::ImageFormat::Rg8i, false, builtin::TexelFormat::kUndefined},
+        TexelFormatCase{spv::ImageFormat::R8i, false, builtin::TexelFormat::kUndefined},
+        TexelFormatCase{spv::ImageFormat::Rgb10a2ui, false, builtin::TexelFormat::kUndefined},
+        TexelFormatCase{spv::ImageFormat::Rg16ui, false, builtin::TexelFormat::kUndefined},
+        TexelFormatCase{spv::ImageFormat::Rg8ui, false, builtin::TexelFormat::kUndefined}));
 
 }  // namespace
 }  // namespace tint::reader::spirv
diff --git a/src/tint/reader/spirv/parser_impl.cc b/src/tint/reader/spirv/parser_impl.cc
index a34d14a..b4e23b8 100644
--- a/src/tint/reader/spirv/parser_impl.cc
+++ b/src/tint/reader/spirv/parser_impl.cc
@@ -2529,7 +2529,7 @@
         } else {
             const auto access = builtin::Access::kWrite;
             const auto format = enum_converter_.ToTexelFormat(image_type->format());
-            if (format == type::TexelFormat::kUndefined) {
+            if (format == builtin::TexelFormat::kUndefined) {
                 return nullptr;
             }
             ast_handle_type = ty_.StorageTexture(dim, format, access);
@@ -2546,28 +2546,28 @@
     return ast_handle_type;
 }
 
-const Type* ParserImpl::GetComponentTypeForFormat(type::TexelFormat format) {
+const Type* ParserImpl::GetComponentTypeForFormat(builtin::TexelFormat format) {
     switch (format) {
-        case type::TexelFormat::kR32Uint:
-        case type::TexelFormat::kRgba8Uint:
-        case type::TexelFormat::kRg32Uint:
-        case type::TexelFormat::kRgba16Uint:
-        case type::TexelFormat::kRgba32Uint:
+        case builtin::TexelFormat::kR32Uint:
+        case builtin::TexelFormat::kRgba8Uint:
+        case builtin::TexelFormat::kRg32Uint:
+        case builtin::TexelFormat::kRgba16Uint:
+        case builtin::TexelFormat::kRgba32Uint:
             return ty_.U32();
 
-        case type::TexelFormat::kR32Sint:
-        case type::TexelFormat::kRgba8Sint:
-        case type::TexelFormat::kRg32Sint:
-        case type::TexelFormat::kRgba16Sint:
-        case type::TexelFormat::kRgba32Sint:
+        case builtin::TexelFormat::kR32Sint:
+        case builtin::TexelFormat::kRgba8Sint:
+        case builtin::TexelFormat::kRg32Sint:
+        case builtin::TexelFormat::kRgba16Sint:
+        case builtin::TexelFormat::kRgba32Sint:
             return ty_.I32();
 
-        case type::TexelFormat::kRgba8Unorm:
-        case type::TexelFormat::kRgba8Snorm:
-        case type::TexelFormat::kR32Float:
-        case type::TexelFormat::kRg32Float:
-        case type::TexelFormat::kRgba16Float:
-        case type::TexelFormat::kRgba32Float:
+        case builtin::TexelFormat::kRgba8Unorm:
+        case builtin::TexelFormat::kRgba8Snorm:
+        case builtin::TexelFormat::kR32Float:
+        case builtin::TexelFormat::kRg32Float:
+        case builtin::TexelFormat::kRgba16Float:
+        case builtin::TexelFormat::kRgba32Float:
             return ty_.F32();
         default:
             break;
@@ -2576,30 +2576,30 @@
     return nullptr;
 }
 
-unsigned ParserImpl::GetChannelCountForFormat(type::TexelFormat format) {
+unsigned ParserImpl::GetChannelCountForFormat(builtin::TexelFormat format) {
     switch (format) {
-        case type::TexelFormat::kR32Float:
-        case type::TexelFormat::kR32Sint:
-        case type::TexelFormat::kR32Uint:
+        case builtin::TexelFormat::kR32Float:
+        case builtin::TexelFormat::kR32Sint:
+        case builtin::TexelFormat::kR32Uint:
             // One channel
             return 1;
 
-        case type::TexelFormat::kRg32Float:
-        case type::TexelFormat::kRg32Sint:
-        case type::TexelFormat::kRg32Uint:
+        case builtin::TexelFormat::kRg32Float:
+        case builtin::TexelFormat::kRg32Sint:
+        case builtin::TexelFormat::kRg32Uint:
             // Two channels
             return 2;
 
-        case type::TexelFormat::kRgba16Float:
-        case type::TexelFormat::kRgba16Sint:
-        case type::TexelFormat::kRgba16Uint:
-        case type::TexelFormat::kRgba32Float:
-        case type::TexelFormat::kRgba32Sint:
-        case type::TexelFormat::kRgba32Uint:
-        case type::TexelFormat::kRgba8Sint:
-        case type::TexelFormat::kRgba8Snorm:
-        case type::TexelFormat::kRgba8Uint:
-        case type::TexelFormat::kRgba8Unorm:
+        case builtin::TexelFormat::kRgba16Float:
+        case builtin::TexelFormat::kRgba16Sint:
+        case builtin::TexelFormat::kRgba16Uint:
+        case builtin::TexelFormat::kRgba32Float:
+        case builtin::TexelFormat::kRgba32Sint:
+        case builtin::TexelFormat::kRgba32Uint:
+        case builtin::TexelFormat::kRgba8Sint:
+        case builtin::TexelFormat::kRgba8Snorm:
+        case builtin::TexelFormat::kRgba8Uint:
+        case builtin::TexelFormat::kRgba8Unorm:
             // Four channels
             return 4;
 
@@ -2610,7 +2610,7 @@
     return 0;
 }
 
-const Type* ParserImpl::GetTexelTypeForFormat(type::TexelFormat format) {
+const Type* ParserImpl::GetTexelTypeForFormat(builtin::TexelFormat format) {
     const auto* component_type = GetComponentTypeForFormat(format);
     if (!component_type) {
         return nullptr;
diff --git a/src/tint/reader/spirv/parser_impl.h b/src/tint/reader/spirv/parser_impl.h
index 12b852a..cd88b15 100644
--- a/src/tint/reader/spirv/parser_impl.h
+++ b/src/tint/reader/spirv/parser_impl.h
@@ -690,19 +690,19 @@
     /// format.
     /// @param format image texel format
     /// @returns the component type, one of f32, i32, u32
-    const Type* GetComponentTypeForFormat(type::TexelFormat format);
+    const Type* GetComponentTypeForFormat(builtin::TexelFormat format);
 
     /// Returns the number of channels in the given image format.
     /// @param format image texel format
     /// @returns the number of channels in the format
-    unsigned GetChannelCountForFormat(type::TexelFormat format);
+    unsigned GetChannelCountForFormat(builtin::TexelFormat format);
 
     /// Returns the texel type corresponding to the given image format.
     /// This the WGSL type used for the texel parameter to textureStore.
     /// It's always a 4-element vector.
     /// @param format image texel format
     /// @returns the texel format
-    const Type* GetTexelTypeForFormat(type::TexelFormat format);
+    const Type* GetTexelTypeForFormat(builtin::TexelFormat format);
 
     /// Returns the SPIR-V instruction with the given ID, or nullptr.
     /// @param id the SPIR-V result ID
diff --git a/src/tint/reader/spirv/parser_type.cc b/src/tint/reader/spirv/parser_type.cc
index acfaa88..0d4c58a 100644
--- a/src/tint/reader/spirv/parser_type.cc
+++ b/src/tint/reader/spirv/parser_type.cc
@@ -269,7 +269,7 @@
     return b.ty.sampled_texture(dims, type->Build(b));
 }
 
-StorageTexture::StorageTexture(type::TextureDimension d, type::TexelFormat f, builtin::Access a)
+StorageTexture::StorageTexture(type::TextureDimension d, builtin::TexelFormat f, builtin::Access a)
     : Base(d), format(f), access(a) {}
 StorageTexture::StorageTexture(const StorageTexture&) = default;
 
@@ -529,7 +529,7 @@
 }
 
 const spirv::StorageTexture* TypeManager::StorageTexture(type::TextureDimension dims,
-                                                         type::TexelFormat fmt,
+                                                         builtin::TexelFormat fmt,
                                                          builtin::Access access) {
     return state->storage_textures_.Get(dims, fmt, access);
 }
diff --git a/src/tint/reader/spirv/parser_type.h b/src/tint/reader/spirv/parser_type.h
index 54991dc..8623be5 100644
--- a/src/tint/reader/spirv/parser_type.h
+++ b/src/tint/reader/spirv/parser_type.h
@@ -22,10 +22,10 @@
 #include "src/tint/ast/type.h"
 #include "src/tint/builtin/access.h"
 #include "src/tint/builtin/address_space.h"
+#include "src/tint/builtin/texel_format.h"
 #include "src/tint/castable.h"
 #include "src/tint/symbol.h"
 #include "src/tint/type/sampler_kind.h"
-#include "src/tint/type/texel_format.h"
 #include "src/tint/type/texture_dimension.h"
 #include "src/tint/utils/block_allocator.h"
 
@@ -434,7 +434,7 @@
     /// @param d the texture dimensions
     /// @param f the storage image format
     /// @param a the access control
-    StorageTexture(type::TextureDimension d, type::TexelFormat f, builtin::Access a);
+    StorageTexture(type::TextureDimension d, builtin::TexelFormat f, builtin::Access a);
 
     /// Copy constructor
     /// @param other the other type to copy
@@ -450,7 +450,7 @@
 #endif  // NDEBUG
 
     /// the storage image format
-    type::TexelFormat const format;
+    builtin::TexelFormat const format;
 
     /// the access control
     builtin::Access const access;
@@ -615,7 +615,7 @@
     /// @return a StorageTexture type. Repeated calls with the same arguments will
     /// return the same pointer.
     const spirv::StorageTexture* StorageTexture(type::TextureDimension d,
-                                                type::TexelFormat f,
+                                                builtin::TexelFormat f,
                                                 builtin::Access a);
 
   private:
diff --git a/src/tint/reader/spirv/parser_type_test.cc b/src/tint/reader/spirv/parser_type_test.cc
index 68492bb..2dd3cca 100644
--- a/src/tint/reader/spirv/parser_type_test.cc
+++ b/src/tint/reader/spirv/parser_type_test.cc
@@ -43,9 +43,9 @@
               ty.MultisampledTexture(type::TextureDimension::k2d, ty.I32()));
     EXPECT_EQ(ty.SampledTexture(type::TextureDimension::k2d, ty.I32()),
               ty.SampledTexture(type::TextureDimension::k2d, ty.I32()));
-    EXPECT_EQ(ty.StorageTexture(type::TextureDimension::k2d, type::TexelFormat::kR32Uint,
+    EXPECT_EQ(ty.StorageTexture(type::TextureDimension::k2d, builtin::TexelFormat::kR32Uint,
                                 builtin::Access::kRead),
-              ty.StorageTexture(type::TextureDimension::k2d, type::TexelFormat::kR32Uint,
+              ty.StorageTexture(type::TextureDimension::k2d, builtin::TexelFormat::kR32Uint,
                                 builtin::Access::kRead));
 }
 
@@ -80,17 +80,17 @@
               ty.SampledTexture(type::TextureDimension::k3d, ty.I32()));
     EXPECT_NE(ty.SampledTexture(type::TextureDimension::k2d, ty.I32()),
               ty.SampledTexture(type::TextureDimension::k2d, ty.U32()));
-    EXPECT_NE(ty.StorageTexture(type::TextureDimension::k2d, type::TexelFormat::kR32Uint,
+    EXPECT_NE(ty.StorageTexture(type::TextureDimension::k2d, builtin::TexelFormat::kR32Uint,
                                 builtin::Access::kRead),
-              ty.StorageTexture(type::TextureDimension::k3d, type::TexelFormat::kR32Uint,
+              ty.StorageTexture(type::TextureDimension::k3d, builtin::TexelFormat::kR32Uint,
                                 builtin::Access::kRead));
-    EXPECT_NE(ty.StorageTexture(type::TextureDimension::k2d, type::TexelFormat::kR32Uint,
+    EXPECT_NE(ty.StorageTexture(type::TextureDimension::k2d, builtin::TexelFormat::kR32Uint,
                                 builtin::Access::kRead),
-              ty.StorageTexture(type::TextureDimension::k2d, type::TexelFormat::kR32Sint,
+              ty.StorageTexture(type::TextureDimension::k2d, builtin::TexelFormat::kR32Sint,
                                 builtin::Access::kRead));
-    EXPECT_NE(ty.StorageTexture(type::TextureDimension::k2d, type::TexelFormat::kR32Uint,
+    EXPECT_NE(ty.StorageTexture(type::TextureDimension::k2d, builtin::TexelFormat::kR32Uint,
                                 builtin::Access::kRead),
-              ty.StorageTexture(type::TextureDimension::k2d, type::TexelFormat::kR32Uint,
+              ty.StorageTexture(type::TextureDimension::k2d, builtin::TexelFormat::kR32Uint,
                                 builtin::Access::kWrite));
 }
 
diff --git a/src/tint/resolver/assignment_validation_test.cc b/src/tint/resolver/assignment_validation_test.cc
index b549daf..1d0cd27 100644
--- a/src/tint/resolver/assignment_validation_test.cc
+++ b/src/tint/resolver/assignment_validation_test.cc
@@ -231,7 +231,7 @@
     // a = b;
 
     auto make_type = [&] {
-        return ty.storage_texture(type::TextureDimension::k1d, type::TexelFormat::kRgba8Unorm,
+        return ty.storage_texture(type::TextureDimension::k1d, builtin::TexelFormat::kRgba8Unorm,
                                   builtin::Access::kWrite);
     };
 
diff --git a/src/tint/resolver/builtin_test.cc b/src/tint/resolver/builtin_test.cc
index 0193596..5f4e5be 100644
--- a/src/tint/resolver/builtin_test.cc
+++ b/src/tint/resolver/builtin_test.cc
@@ -2083,7 +2083,7 @@
 struct TextureTestParams {
     type::TextureDimension dim;
     Texture type = Texture::kF32;
-    type::TexelFormat format = type::TexelFormat::kR32Float;
+    builtin::TexelFormat format = builtin::TexelFormat::kR32Float;
 };
 inline std::ostream& operator<<(std::ostream& out, TextureTestParams data) {
     out << data.dim << "_" << data.type;
diff --git a/src/tint/resolver/dependency_graph.cc b/src/tint/resolver/dependency_graph.cc
index 7fddf16..66ca071 100644
--- a/src/tint/resolver/dependency_graph.cc
+++ b/src/tint/resolver/dependency_graph.cc
@@ -484,7 +484,7 @@
                 graph_.resolved_identifiers.Add(from, ResolvedIdentifier(addr));
                 return;
             }
-            if (auto fmt = type::ParseTexelFormat(s); fmt != type::TexelFormat::kUndefined) {
+            if (auto fmt = builtin::ParseTexelFormat(s); fmt != builtin::TexelFormat::kUndefined) {
                 graph_.resolved_identifiers.Add(from, ResolvedIdentifier(fmt));
                 return;
             }
@@ -868,7 +868,7 @@
     if (auto addr = AddressSpace(); addr != builtin::AddressSpace::kUndefined) {
         return "address space '" + utils::ToString(addr) + "'";
     }
-    if (auto fmt = TexelFormat(); fmt != type::TexelFormat::kUndefined) {
+    if (auto fmt = TexelFormat(); fmt != builtin::TexelFormat::kUndefined) {
         return "texel format '" + utils::ToString(fmt) + "'";
     }
     TINT_UNREACHABLE(Resolver, diagnostics) << "unhandled ResolvedIdentifier";
diff --git a/src/tint/resolver/dependency_graph.h b/src/tint/resolver/dependency_graph.h
index 9cf8819..6c9d4e8 100644
--- a/src/tint/resolver/dependency_graph.h
+++ b/src/tint/resolver/dependency_graph.h
@@ -20,11 +20,11 @@
 
 #include "src/tint/ast/module.h"
 #include "src/tint/builtin/access.h"
+#include "src/tint/builtin/texel_format.h"
 #include "src/tint/diagnostic/diagnostic.h"
 #include "src/tint/sem/builtin_type.h"
 #include "src/tint/symbol_table.h"
 #include "src/tint/type/builtin.h"
-#include "src/tint/type/texel_format.h"
 #include "src/tint/utils/hashmap.h"
 
 namespace tint::resolver {
@@ -38,7 +38,7 @@
 /// - builtin::Access
 /// - builtin::AddressSpace
 /// - type::Builtin
-/// - type::TexelFormat
+/// - builtin::TexelFormat
 class ResolvedIdentifier {
   public:
     ResolvedIdentifier() = default;
@@ -95,13 +95,13 @@
         return type::Builtin::kUndefined;
     }
 
-    /// @return the texel format if the ResolvedIdentifier holds type::TexelFormat, otherwise
-    /// type::TexelFormat::kUndefined
-    type::TexelFormat TexelFormat() const {
-        if (auto n = std::get_if<type::TexelFormat>(&value_)) {
+    /// @return the texel format if the ResolvedIdentifier holds builtin::TexelFormat, otherwise
+    /// builtin::TexelFormat::kUndefined
+    builtin::TexelFormat TexelFormat() const {
+        if (auto n = std::get_if<builtin::TexelFormat>(&value_)) {
             return *n;
         }
-        return type::TexelFormat::kUndefined;
+        return builtin::TexelFormat::kUndefined;
     }
 
     /// @param value the value to compare the ResolvedIdentifier to
@@ -133,7 +133,7 @@
                  builtin::Access,
                  builtin::AddressSpace,
                  type::Builtin,
-                 type::TexelFormat>
+                 builtin::TexelFormat>
         value_;
 };
 
diff --git a/src/tint/resolver/dependency_graph_test.cc b/src/tint/resolver/dependency_graph_test.cc
index 03d1a69..8b91d1e 100644
--- a/src/tint/resolver/dependency_graph_test.cc
+++ b/src/tint/resolver/dependency_graph_test.cc
@@ -1501,7 +1501,7 @@
 }  // namespace resolve_to_address_space
 
 ////////////////////////////////////////////////////////////////////////////////
-// Resolve to type::TexelFormat tests
+// Resolve to builtin::TexelFormat tests
 ////////////////////////////////////////////////////////////////////////////////
 namespace resolve_to_texel_format {
 
@@ -1519,7 +1519,7 @@
 
     auto resolved = Build().resolved_identifiers.Get(ident);
     ASSERT_TRUE(resolved);
-    EXPECT_EQ(resolved->TexelFormat(), type::ParseTexelFormat(name))
+    EXPECT_EQ(resolved->TexelFormat(), builtin::ParseTexelFormat(name))
         << resolved->String(Symbols(), Diagnostics());
 }
 
@@ -1571,17 +1571,17 @@
 INSTANTIATE_TEST_SUITE_P(Types,
                          ResolverDependencyGraphResolveToTexelFormat,
                          testing::Combine(testing::ValuesIn(kTypeUseKinds),
-                                          testing::ValuesIn(type::kTexelFormatStrings)));
+                                          testing::ValuesIn(builtin::kTexelFormatStrings)));
 
 INSTANTIATE_TEST_SUITE_P(Values,
                          ResolverDependencyGraphResolveToTexelFormat,
                          testing::Combine(testing::ValuesIn(kValueUseKinds),
-                                          testing::ValuesIn(type::kTexelFormatStrings)));
+                                          testing::ValuesIn(builtin::kTexelFormatStrings)));
 
 INSTANTIATE_TEST_SUITE_P(Functions,
                          ResolverDependencyGraphResolveToTexelFormat,
                          testing::Combine(testing::ValuesIn(kFuncUseKinds),
-                                          testing::ValuesIn(type::kTexelFormatStrings)));
+                                          testing::ValuesIn(builtin::kTexelFormatStrings)));
 
 }  // namespace resolve_to_texel_format
 
@@ -1735,8 +1735,8 @@
     GlobalVar(Sym(), ty.depth_multisampled_texture(type::TextureDimension::k2d));
     GlobalVar(Sym(), ty.external_texture());
     GlobalVar(Sym(), ty.multisampled_texture(type::TextureDimension::k2d, T));
-    GlobalVar(Sym(), ty.storage_texture(type::TextureDimension::k2d, type::TexelFormat::kR32Float,
-                                        builtin::Access::kRead));
+    GlobalVar(Sym(), ty.storage_texture(type::TextureDimension::k2d,
+                                        builtin::TexelFormat::kR32Float, builtin::Access::kRead));
     GlobalVar(Sym(), ty.sampler(type::SamplerKind::kSampler));
 
     GlobalVar(Sym(), ty.i32(), utils::Vector{Binding(V), Group(V)});
diff --git a/src/tint/resolver/expression_kind_test.cc b/src/tint/resolver/expression_kind_test.cc
index c3b14f2..681b5c3 100644
--- a/src/tint/resolver/expression_kind_test.cc
+++ b/src/tint/resolver/expression_kind_test.cc
@@ -184,9 +184,9 @@
             sym = Sym("rgba8unorm");
             check_expr = [](const sem::Expression* expr) {
                 ASSERT_NE(expr, nullptr);
-                auto* enum_expr = expr->As<sem::BuiltinEnumExpression<type::TexelFormat>>();
+                auto* enum_expr = expr->As<sem::BuiltinEnumExpression<builtin::TexelFormat>>();
                 ASSERT_NE(enum_expr, nullptr);
-                EXPECT_EQ(enum_expr->Value(), type::TexelFormat::kRgba8Unorm);
+                EXPECT_EQ(enum_expr->Value(), builtin::TexelFormat::kRgba8Unorm);
             };
             break;
         }
diff --git a/src/tint/resolver/intrinsic_table.cc b/src/tint/resolver/intrinsic_table.cc
index febd610..d9a9185 100644
--- a/src/tint/resolver/intrinsic_table.cc
+++ b/src/tint/resolver/intrinsic_table.cc
@@ -328,7 +328,7 @@
 // TODO(bclayton): See if we can move more of this hand-rolled code to the
 // template
 ////////////////////////////////////////////////////////////////////////////////
-using TexelFormat = type::TexelFormat;
+using TexelFormat = builtin::TexelFormat;
 using Access = builtin::Access;
 using AddressSpace = builtin::AddressSpace;
 using ParameterUsage = sem::ParameterUsage;
diff --git a/src/tint/resolver/intrinsic_table_test.cc b/src/tint/resolver/intrinsic_table_test.cc
index d1b5530..5aee480 100644
--- a/src/tint/resolver/intrinsic_table_test.cc
+++ b/src/tint/resolver/intrinsic_table_test.cc
@@ -414,9 +414,9 @@
     auto* i32 = create<type::I32>();
     auto* vec2_i32 = create<type::Vector>(i32, 2u);
     auto* vec4_f32 = create<type::Vector>(f32, 4u);
-    auto* subtype = type::StorageTexture::SubtypeFor(type::TexelFormat::kR32Float, Types());
+    auto* subtype = type::StorageTexture::SubtypeFor(builtin::TexelFormat::kR32Float, Types());
     auto* tex =
-        create<type::StorageTexture>(type::TextureDimension::k2d, type::TexelFormat::kR32Float,
+        create<type::StorageTexture>(type::TextureDimension::k2d, builtin::TexelFormat::kR32Float,
                                      builtin::Access::kWrite, subtype);
 
     auto result = table->Lookup(BuiltinType::kTextureStore, utils::Vector{tex, vec2_i32, vec4_f32},
diff --git a/src/tint/resolver/resolver.cc b/src/tint/resolver/resolver.cc
index a664334..ba318fa 100644
--- a/src/tint/resolver/resolver.cc
+++ b/src/tint/resolver/resolver.cc
@@ -89,7 +89,7 @@
 
 TINT_INSTANTIATE_TYPEINFO(tint::sem::BuiltinEnumExpression<tint::builtin::Access>);
 TINT_INSTANTIATE_TYPEINFO(tint::sem::BuiltinEnumExpression<tint::builtin::AddressSpace>);
-TINT_INSTANTIATE_TYPEINFO(tint::sem::BuiltinEnumExpression<tint::type::TexelFormat>);
+TINT_INSTANTIATE_TYPEINFO(tint::sem::BuiltinEnumExpression<tint::builtin::TexelFormat>);
 
 namespace tint::resolver {
 namespace {
@@ -1502,7 +1502,7 @@
     return sem_.AsAddressSpace(Expression(expr));
 }
 
-sem::BuiltinEnumExpression<type::TexelFormat>* Resolver::TexelFormatExpression(
+sem::BuiltinEnumExpression<builtin::TexelFormat>* Resolver::TexelFormatExpression(
     const ast::Expression* expr) {
     return sem_.AsTexelFormat(Expression(expr));
 }
@@ -2987,8 +2987,8 @@
             expr, current_statement_, addr);
     }
 
-    if (auto fmt = resolved->TexelFormat(); fmt != type::TexelFormat::kUndefined) {
-        return builder_->create<sem::BuiltinEnumExpression<type::TexelFormat>>(
+    if (auto fmt = resolved->TexelFormat(); fmt != builtin::TexelFormat::kUndefined) {
+        return builder_->create<sem::BuiltinEnumExpression<builtin::TexelFormat>>(
             expr, current_statement_, fmt);
     }
 
diff --git a/src/tint/resolver/resolver.h b/src/tint/resolver/resolver.h
index b94467d..aa688c3 100644
--- a/src/tint/resolver/resolver.h
+++ b/src/tint/resolver/resolver.h
@@ -145,10 +145,11 @@
     sem::BuiltinEnumExpression<builtin::AddressSpace>* AddressSpaceExpression(
         const ast::Expression* expr);
 
-    /// @returns the call of Expression() cast to a sem::BuiltinEnumExpression<type::TexelFormat>.
-    /// If the sem::Expression is not a sem::BuiltinEnumExpression<type::TexelFormat>, then an error
-    /// diagnostic is raised and nullptr is returned.
-    sem::BuiltinEnumExpression<type::TexelFormat>* TexelFormatExpression(
+    /// @returns the call of Expression() cast to a
+    /// sem::BuiltinEnumExpression<builtin::TexelFormat>. If the sem::Expression is not a
+    /// sem::BuiltinEnumExpression<builtin::TexelFormat>, then an error diagnostic is raised and
+    /// nullptr is returned.
+    sem::BuiltinEnumExpression<builtin::TexelFormat>* TexelFormatExpression(
         const ast::Expression* expr);
 
     /// @returns the call of Expression() cast to a sem::BuiltinEnumExpression<builtin::Access>*.
diff --git a/src/tint/resolver/sem_helper.cc b/src/tint/resolver/sem_helper.cc
index 87f506b..3379ad2 100644
--- a/src/tint/resolver/sem_helper.cc
+++ b/src/tint/resolver/sem_helper.cc
@@ -84,7 +84,7 @@
                          std::string(wanted),
                      addr->Declaration()->source);
         },
-        [&](const sem::BuiltinEnumExpression<type::TexelFormat>* fmt) {
+        [&](const sem::BuiltinEnumExpression<builtin::TexelFormat>* fmt) {
             AddError("cannot use texel format '" + utils::ToString(fmt->Value()) + "' as " +
                          std::string(wanted),
                      fmt->Declaration()->source);
diff --git a/src/tint/resolver/sem_helper.h b/src/tint/resolver/sem_helper.h
index 9aedcd1..e8940d1 100644
--- a/src/tint/resolver/sem_helper.h
+++ b/src/tint/resolver/sem_helper.h
@@ -120,11 +120,11 @@
 
     /// @param expr the semantic node
     /// @returns nullptr if @p expr is nullptr, or @p expr cast to
-    /// sem::BuiltinEnumExpression<type::TexelFormat> if the cast is successful, otherwise an error
-    /// diagnostic is raised.
-    sem::BuiltinEnumExpression<type::TexelFormat>* AsTexelFormat(sem::Expression* expr) const {
+    /// sem::BuiltinEnumExpression<builtin::TexelFormat> if the cast is successful, otherwise an
+    /// error diagnostic is raised.
+    sem::BuiltinEnumExpression<builtin::TexelFormat>* AsTexelFormat(sem::Expression* expr) const {
         if (TINT_LIKELY(expr)) {
-            auto* enum_expr = expr->As<sem::BuiltinEnumExpression<type::TexelFormat>>();
+            auto* enum_expr = expr->As<sem::BuiltinEnumExpression<builtin::TexelFormat>>();
             if (TINT_LIKELY(enum_expr)) {
                 return enum_expr;
             }
diff --git a/src/tint/resolver/side_effects_test.cc b/src/tint/resolver/side_effects_test.cc
index 88c51ef..6f23ed3 100644
--- a/src/tint/resolver/side_effects_test.cc
+++ b/src/tint/resolver/side_effects_test.cc
@@ -17,6 +17,7 @@
 #include "gtest/gtest.h"
 #include "src/tint/builtin/address_space.h"
 #include "src/tint/builtin/extension.h"
+#include "src/tint/builtin/texel_format.h"
 #include "src/tint/resolver/resolver_test_helper.h"
 #include "src/tint/sem/index_accessor_expression.h"
 #include "src/tint/sem/member_accessor_expression.h"
@@ -191,10 +192,11 @@
                   Group(0_a), Binding(AInt(next_binding++)));
         GlobalVar("t2d_multi", ty.multisampled_texture(type::TextureDimension::k2d, ty.f32()),
                   Group(0_a), Binding(AInt(next_binding++)));
-        GlobalVar("tstorage2d",
-                  ty.storage_texture(type::TextureDimension::k2d, type::TexelFormat::kR32Float,
-                                     tint::builtin::Access::kWrite),
-                  Group(0_a), Binding(AInt(next_binding++)));
+        GlobalVar(
+            "tstorage2d",
+            ty.storage_texture(type::TextureDimension::k2d, tint::builtin::TexelFormat::kR32Float,
+                               tint::builtin::Access::kWrite),
+            Group(0_a), Binding(AInt(next_binding++)));
         GlobalVar("s2d", ty.sampler(type::SamplerKind::kSampler), Group(0_a),
                   Binding(AInt(next_binding++)));
         GlobalVar("scomp", ty.sampler(type::SamplerKind::kComparisonSampler), Group(0_a),
diff --git a/src/tint/resolver/type_validation_test.cc b/src/tint/resolver/type_validation_test.cc
index 5e46134..b9f2edb 100644
--- a/src/tint/resolver/type_validation_test.cc
+++ b/src/tint/resolver/type_validation_test.cc
@@ -1074,7 +1074,7 @@
     // var a : texture_storage_*<r32uint, write>;
     auto& params = GetParam();
 
-    auto st = ty(Source{{12, 34}}, params.name, utils::ToString(type::TexelFormat::kR32Uint),
+    auto st = ty(Source{{12, 34}}, params.name, utils::ToString(builtin::TexelFormat::kR32Uint),
                  utils::ToString(builtin::Access::kWrite));
 
     GlobalVar("a", st, Group(0_a), Binding(0_a));
@@ -1091,27 +1091,28 @@
                          testing::ValuesIn(Dimension_cases));
 
 struct FormatParams {
-    type::TexelFormat format;
+    builtin::TexelFormat format;
     bool is_valid;
 };
 
-static constexpr FormatParams format_cases[] = {FormatParams{type::TexelFormat::kBgra8Unorm, true},
-                                                FormatParams{type::TexelFormat::kR32Float, true},
-                                                FormatParams{type::TexelFormat::kR32Sint, true},
-                                                FormatParams{type::TexelFormat::kR32Uint, true},
-                                                FormatParams{type::TexelFormat::kRg32Float, true},
-                                                FormatParams{type::TexelFormat::kRg32Sint, true},
-                                                FormatParams{type::TexelFormat::kRg32Uint, true},
-                                                FormatParams{type::TexelFormat::kRgba16Float, true},
-                                                FormatParams{type::TexelFormat::kRgba16Sint, true},
-                                                FormatParams{type::TexelFormat::kRgba16Uint, true},
-                                                FormatParams{type::TexelFormat::kRgba32Float, true},
-                                                FormatParams{type::TexelFormat::kRgba32Sint, true},
-                                                FormatParams{type::TexelFormat::kRgba32Uint, true},
-                                                FormatParams{type::TexelFormat::kRgba8Sint, true},
-                                                FormatParams{type::TexelFormat::kRgba8Snorm, true},
-                                                FormatParams{type::TexelFormat::kRgba8Uint, true},
-                                                FormatParams{type::TexelFormat::kRgba8Unorm, true}};
+static constexpr FormatParams format_cases[] = {
+    FormatParams{builtin::TexelFormat::kBgra8Unorm, true},
+    FormatParams{builtin::TexelFormat::kR32Float, true},
+    FormatParams{builtin::TexelFormat::kR32Sint, true},
+    FormatParams{builtin::TexelFormat::kR32Uint, true},
+    FormatParams{builtin::TexelFormat::kRg32Float, true},
+    FormatParams{builtin::TexelFormat::kRg32Sint, true},
+    FormatParams{builtin::TexelFormat::kRg32Uint, true},
+    FormatParams{builtin::TexelFormat::kRgba16Float, true},
+    FormatParams{builtin::TexelFormat::kRgba16Sint, true},
+    FormatParams{builtin::TexelFormat::kRgba16Uint, true},
+    FormatParams{builtin::TexelFormat::kRgba32Float, true},
+    FormatParams{builtin::TexelFormat::kRgba32Sint, true},
+    FormatParams{builtin::TexelFormat::kRgba32Uint, true},
+    FormatParams{builtin::TexelFormat::kRgba8Sint, true},
+    FormatParams{builtin::TexelFormat::kRgba8Snorm, true},
+    FormatParams{builtin::TexelFormat::kRgba8Uint, true},
+    FormatParams{builtin::TexelFormat::kRgba8Unorm, true}};
 
 using StorageTextureFormatTest = ResolverTestWithParam<FormatParams>;
 TEST_P(StorageTextureFormatTest, All) {
@@ -1185,7 +1186,7 @@
     // var a : texture_storage_1d<r32uint, read_write>;
 
     auto st = ty.storage_texture(Source{{12, 34}}, type::TextureDimension::k1d,
-                                 type::TexelFormat::kR32Uint, builtin::Access::kReadWrite);
+                                 builtin::TexelFormat::kR32Uint, builtin::Access::kReadWrite);
 
     GlobalVar("a", st, Group(0_a), Binding(0_a));
 
@@ -1199,7 +1200,7 @@
     // var a : texture_storage_1d<r32uint, read>;
 
     auto st = ty.storage_texture(Source{{12, 34}}, type::TextureDimension::k1d,
-                                 type::TexelFormat::kR32Uint, builtin::Access::kRead);
+                                 builtin::TexelFormat::kR32Uint, builtin::Access::kRead);
 
     GlobalVar("a", st, Group(0_a), Binding(0_a));
 
@@ -1212,7 +1213,7 @@
     // @group(0) @binding(0)
     // var a : texture_storage_1d<r32uint, write>;
 
-    auto st = ty.storage_texture(type::TextureDimension::k1d, type::TexelFormat::kR32Uint,
+    auto st = ty.storage_texture(type::TextureDimension::k1d, builtin::TexelFormat::kR32Uint,
                                  builtin::Access::kWrite);
 
     GlobalVar("a", st, Group(0_a), Binding(0_a));
diff --git a/src/tint/resolver/validator.cc b/src/tint/resolver/validator.cc
index 242a462..9577d59 100644
--- a/src/tint/resolver/validator.cc
+++ b/src/tint/resolver/validator.cc
@@ -88,25 +88,25 @@
     }
 }
 
-bool IsValidStorageTextureTexelFormat(type::TexelFormat format) {
+bool IsValidStorageTextureTexelFormat(builtin::TexelFormat format) {
     switch (format) {
-        case type::TexelFormat::kBgra8Unorm:
-        case type::TexelFormat::kR32Uint:
-        case type::TexelFormat::kR32Sint:
-        case type::TexelFormat::kR32Float:
-        case type::TexelFormat::kRg32Uint:
-        case type::TexelFormat::kRg32Sint:
-        case type::TexelFormat::kRg32Float:
-        case type::TexelFormat::kRgba8Unorm:
-        case type::TexelFormat::kRgba8Snorm:
-        case type::TexelFormat::kRgba8Uint:
-        case type::TexelFormat::kRgba8Sint:
-        case type::TexelFormat::kRgba16Uint:
-        case type::TexelFormat::kRgba16Sint:
-        case type::TexelFormat::kRgba16Float:
-        case type::TexelFormat::kRgba32Uint:
-        case type::TexelFormat::kRgba32Sint:
-        case type::TexelFormat::kRgba32Float:
+        case builtin::TexelFormat::kBgra8Unorm:
+        case builtin::TexelFormat::kR32Uint:
+        case builtin::TexelFormat::kR32Sint:
+        case builtin::TexelFormat::kR32Float:
+        case builtin::TexelFormat::kRg32Uint:
+        case builtin::TexelFormat::kRg32Sint:
+        case builtin::TexelFormat::kRg32Float:
+        case builtin::TexelFormat::kRgba8Unorm:
+        case builtin::TexelFormat::kRgba8Snorm:
+        case builtin::TexelFormat::kRgba8Uint:
+        case builtin::TexelFormat::kRgba8Sint:
+        case builtin::TexelFormat::kRgba16Uint:
+        case builtin::TexelFormat::kRgba16Sint:
+        case builtin::TexelFormat::kRgba16Float:
+        case builtin::TexelFormat::kRgba32Uint:
+        case builtin::TexelFormat::kRgba32Sint:
+        case builtin::TexelFormat::kRgba32Float:
             return true;
         default:
             return false;
diff --git a/src/tint/transform/builtin_polyfill.cc b/src/tint/transform/builtin_polyfill.cc
index 2da1a84..606c6ce 100644
--- a/src/tint/transform/builtin_polyfill.cc
+++ b/src/tint/transform/builtin_polyfill.cc
@@ -1040,7 +1040,7 @@
                             auto& sig = builtin->Signature();
                             auto* tex = sig.Parameter(sem::ParameterUsage::kTexture);
                             if (auto* stex = tex->Type()->As<type::StorageTexture>()) {
-                                if (stex->texel_format() == type::TexelFormat::kBgra8Unorm) {
+                                if (stex->texel_format() == builtin::TexelFormat::kBgra8Unorm) {
                                     size_t value_idx = static_cast<size_t>(
                                         sig.IndexOf(sem::ParameterUsage::kValue));
                                     ctx.Replace(expr, [&ctx, expr, value_idx] {
@@ -1140,10 +1140,11 @@
                 if (polyfill.bgra8unorm) {
                     if (auto* ty_expr = src->Sem().Get<sem::TypeExpression>(expr)) {
                         if (auto* tex = ty_expr->Type()->As<type::StorageTexture>()) {
-                            if (tex->texel_format() == type::TexelFormat::kBgra8Unorm) {
+                            if (tex->texel_format() == builtin::TexelFormat::kBgra8Unorm) {
                                 ctx.Replace(expr, [&ctx, tex] {
                                     return ctx.dst->Expr(ctx.dst->ty.storage_texture(
-                                        tex->dim(), type::TexelFormat::kRgba8Unorm, tex->access()));
+                                        tex->dim(), builtin::TexelFormat::kRgba8Unorm,
+                                        tex->access()));
                                 });
                                 made_changes = true;
                             }
diff --git a/src/tint/transform/renamer_test.cc b/src/tint/transform/renamer_test.cc
index 04e2b99..810517a 100644
--- a/src/tint/transform/renamer_test.cc
+++ b/src/tint/transform/renamer_test.cc
@@ -19,9 +19,9 @@
 #include <vector>
 
 #include "gmock/gmock.h"
+#include "src/tint/builtin/texel_format.h"
 #include "src/tint/transform/test_helper.h"
 #include "src/tint/type/builtin.h"
-#include "src/tint/type/texel_format.h"
 
 namespace tint::transform {
 namespace {
@@ -1931,7 +1931,7 @@
             out.push_back(ident);
         }
     }
-    for (auto* ident : type::kTexelFormatStrings) {
+    for (auto* ident : builtin::kTexelFormatStrings) {
         out.push_back(ident);
     }
     for (auto* ident : builtin::kAccessStrings) {
diff --git a/src/tint/type/storage_texture.cc b/src/tint/type/storage_texture.cc
index c7fede4..beb5da6 100644
--- a/src/tint/type/storage_texture.cc
+++ b/src/tint/type/storage_texture.cc
@@ -25,7 +25,7 @@
 namespace tint::type {
 
 StorageTexture::StorageTexture(TextureDimension dim,
-                               type::TexelFormat format,
+                               builtin::TexelFormat format,
                                builtin::Access access,
                                Type* subtype)
     : Base(utils::Hash(TypeInfo::Of<StorageTexture>().full_hashcode, dim, format, access), dim),
@@ -48,35 +48,35 @@
     return out.str();
 }
 
-Type* StorageTexture::SubtypeFor(type::TexelFormat format, Manager& type_mgr) {
+Type* StorageTexture::SubtypeFor(builtin::TexelFormat format, Manager& type_mgr) {
     switch (format) {
-        case type::TexelFormat::kR32Uint:
-        case type::TexelFormat::kRgba8Uint:
-        case type::TexelFormat::kRg32Uint:
-        case type::TexelFormat::kRgba16Uint:
-        case type::TexelFormat::kRgba32Uint: {
+        case builtin::TexelFormat::kR32Uint:
+        case builtin::TexelFormat::kRgba8Uint:
+        case builtin::TexelFormat::kRg32Uint:
+        case builtin::TexelFormat::kRgba16Uint:
+        case builtin::TexelFormat::kRgba32Uint: {
             return type_mgr.Get<U32>();
         }
 
-        case type::TexelFormat::kR32Sint:
-        case type::TexelFormat::kRgba8Sint:
-        case type::TexelFormat::kRg32Sint:
-        case type::TexelFormat::kRgba16Sint:
-        case type::TexelFormat::kRgba32Sint: {
+        case builtin::TexelFormat::kR32Sint:
+        case builtin::TexelFormat::kRgba8Sint:
+        case builtin::TexelFormat::kRg32Sint:
+        case builtin::TexelFormat::kRgba16Sint:
+        case builtin::TexelFormat::kRgba32Sint: {
             return type_mgr.Get<I32>();
         }
 
-        case type::TexelFormat::kBgra8Unorm:
-        case type::TexelFormat::kRgba8Unorm:
-        case type::TexelFormat::kRgba8Snorm:
-        case type::TexelFormat::kR32Float:
-        case type::TexelFormat::kRg32Float:
-        case type::TexelFormat::kRgba16Float:
-        case type::TexelFormat::kRgba32Float: {
+        case builtin::TexelFormat::kBgra8Unorm:
+        case builtin::TexelFormat::kRgba8Unorm:
+        case builtin::TexelFormat::kRgba8Snorm:
+        case builtin::TexelFormat::kR32Float:
+        case builtin::TexelFormat::kRg32Float:
+        case builtin::TexelFormat::kRgba16Float:
+        case builtin::TexelFormat::kRgba32Float: {
             return type_mgr.Get<F32>();
         }
 
-        case type::TexelFormat::kUndefined:
+        case builtin::TexelFormat::kUndefined:
             break;
     }
 
diff --git a/src/tint/type/storage_texture.h b/src/tint/type/storage_texture.h
index 62086ee..de1b6de 100644
--- a/src/tint/type/storage_texture.h
+++ b/src/tint/type/storage_texture.h
@@ -18,7 +18,7 @@
 #include <string>
 
 #include "src/tint/builtin/access.h"
-#include "src/tint/type/texel_format.h"
+#include "src/tint/builtin/texel_format.h"
 #include "src/tint/type/texture.h"
 #include "src/tint/type/texture_dimension.h"
 
@@ -38,7 +38,7 @@
     /// @param access the access control type of the texture
     /// @param subtype the storage subtype. Use SubtypeFor() to calculate this.
     StorageTexture(TextureDimension dim,
-                   type::TexelFormat format,
+                   builtin::TexelFormat format,
                    builtin::Access access,
                    Type* subtype);
 
@@ -53,7 +53,7 @@
     Type* type() const { return subtype_; }
 
     /// @returns the texel format
-    type::TexelFormat texel_format() const { return texel_format_; }
+    builtin::TexelFormat texel_format() const { return texel_format_; }
 
     /// @returns the access control
     builtin::Access access() const { return access_; }
@@ -66,14 +66,14 @@
     /// @param format the storage texture image format
     /// @param type_mgr the Manager used to build the returned type
     /// @returns the storage texture subtype for the given TexelFormat
-    static Type* SubtypeFor(type::TexelFormat format, Manager& type_mgr);
+    static Type* SubtypeFor(builtin::TexelFormat format, Manager& type_mgr);
 
     /// @param ctx the clone context
     /// @returns a clone of this type
     StorageTexture* Clone(CloneContext& ctx) const override;
 
   private:
-    type::TexelFormat const texel_format_;
+    builtin::TexelFormat const texel_format_;
     builtin::Access const access_;
     Type* const subtype_;
 };
diff --git a/src/tint/type/storage_texture_test.cc b/src/tint/type/storage_texture_test.cc
index 9a1b8c6..8e0174e 100644
--- a/src/tint/type/storage_texture_test.cc
+++ b/src/tint/type/storage_texture_test.cc
@@ -24,23 +24,25 @@
 namespace {
 
 struct StorageTextureTest : public TestHelper {
-    StorageTexture* Create(TextureDimension dims, type::TexelFormat fmt, builtin::Access access) {
+    StorageTexture* Create(TextureDimension dims,
+                           builtin::TexelFormat fmt,
+                           builtin::Access access) {
         auto* subtype = StorageTexture::SubtypeFor(fmt, Types());
         return create<StorageTexture>(dims, fmt, access, subtype);
     }
 };
 
 TEST_F(StorageTextureTest, Creation) {
-    auto* a = Create(TextureDimension::kCube, type::TexelFormat::kRgba32Float,
+    auto* a = Create(TextureDimension::kCube, builtin::TexelFormat::kRgba32Float,
                      builtin::Access::kReadWrite);
-    auto* b = Create(TextureDimension::kCube, type::TexelFormat::kRgba32Float,
+    auto* b = Create(TextureDimension::kCube, builtin::TexelFormat::kRgba32Float,
                      builtin::Access::kReadWrite);
-    auto* c =
-        Create(TextureDimension::k2d, type::TexelFormat::kRgba32Float, builtin::Access::kReadWrite);
-    auto* d =
-        Create(TextureDimension::kCube, type::TexelFormat::kR32Float, builtin::Access::kReadWrite);
+    auto* c = Create(TextureDimension::k2d, builtin::TexelFormat::kRgba32Float,
+                     builtin::Access::kReadWrite);
+    auto* d = Create(TextureDimension::kCube, builtin::TexelFormat::kR32Float,
+                     builtin::Access::kReadWrite);
     auto* e =
-        Create(TextureDimension::kCube, type::TexelFormat::kRgba32Float, builtin::Access::kRead);
+        Create(TextureDimension::kCube, builtin::TexelFormat::kRgba32Float, builtin::Access::kRead);
 
     EXPECT_TRUE(a->type()->Is<F32>());
     EXPECT_EQ(a->dim(), TextureDimension::kCube);
@@ -52,25 +54,25 @@
 }
 
 TEST_F(StorageTextureTest, Hash) {
-    auto* a = Create(TextureDimension::kCube, type::TexelFormat::kRgba32Float,
+    auto* a = Create(TextureDimension::kCube, builtin::TexelFormat::kRgba32Float,
                      builtin::Access::kReadWrite);
-    auto* b = Create(TextureDimension::kCube, type::TexelFormat::kRgba32Float,
+    auto* b = Create(TextureDimension::kCube, builtin::TexelFormat::kRgba32Float,
                      builtin::Access::kReadWrite);
 
     EXPECT_EQ(a->unique_hash, b->unique_hash);
 }
 
 TEST_F(StorageTextureTest, Equals) {
-    auto* a = Create(TextureDimension::kCube, type::TexelFormat::kRgba32Float,
+    auto* a = Create(TextureDimension::kCube, builtin::TexelFormat::kRgba32Float,
                      builtin::Access::kReadWrite);
-    auto* b = Create(TextureDimension::kCube, type::TexelFormat::kRgba32Float,
+    auto* b = Create(TextureDimension::kCube, builtin::TexelFormat::kRgba32Float,
                      builtin::Access::kReadWrite);
-    auto* c =
-        Create(TextureDimension::k2d, type::TexelFormat::kRgba32Float, builtin::Access::kReadWrite);
-    auto* d =
-        Create(TextureDimension::kCube, type::TexelFormat::kR32Float, builtin::Access::kReadWrite);
+    auto* c = Create(TextureDimension::k2d, builtin::TexelFormat::kRgba32Float,
+                     builtin::Access::kReadWrite);
+    auto* d = Create(TextureDimension::kCube, builtin::TexelFormat::kR32Float,
+                     builtin::Access::kReadWrite);
     auto* e =
-        Create(TextureDimension::kCube, type::TexelFormat::kRgba32Float, builtin::Access::kRead);
+        Create(TextureDimension::kCube, builtin::TexelFormat::kRgba32Float, builtin::Access::kRead);
 
     EXPECT_TRUE(a->Equals(*b));
     EXPECT_FALSE(a->Equals(*c));
@@ -80,25 +82,25 @@
 }
 
 TEST_F(StorageTextureTest, Dim) {
-    auto* s = Create(TextureDimension::k2dArray, type::TexelFormat::kRgba32Float,
+    auto* s = Create(TextureDimension::k2dArray, builtin::TexelFormat::kRgba32Float,
                      builtin::Access::kReadWrite);
     EXPECT_EQ(s->dim(), TextureDimension::k2dArray);
 }
 
 TEST_F(StorageTextureTest, Format) {
-    auto* s = Create(TextureDimension::k2dArray, type::TexelFormat::kRgba32Float,
+    auto* s = Create(TextureDimension::k2dArray, builtin::TexelFormat::kRgba32Float,
                      builtin::Access::kReadWrite);
-    EXPECT_EQ(s->texel_format(), type::TexelFormat::kRgba32Float);
+    EXPECT_EQ(s->texel_format(), builtin::TexelFormat::kRgba32Float);
 }
 
 TEST_F(StorageTextureTest, FriendlyName) {
-    auto* s = Create(TextureDimension::k2dArray, type::TexelFormat::kRgba32Float,
+    auto* s = Create(TextureDimension::k2dArray, builtin::TexelFormat::kRgba32Float,
                      builtin::Access::kReadWrite);
     EXPECT_EQ(s->FriendlyName(Symbols()), "texture_storage_2d_array<rgba32float, read_write>");
 }
 
 TEST_F(StorageTextureTest, F32) {
-    auto* s = Create(TextureDimension::k2dArray, type::TexelFormat::kRgba32Float,
+    auto* s = Create(TextureDimension::k2dArray, builtin::TexelFormat::kRgba32Float,
                      builtin::Access::kReadWrite);
 
     auto program = Build();
@@ -110,8 +112,8 @@
 }
 
 TEST_F(StorageTextureTest, U32) {
-    auto* subtype = StorageTexture::SubtypeFor(type::TexelFormat::kRg32Uint, Types());
-    auto* s = create<StorageTexture>(TextureDimension::k2dArray, type::TexelFormat::kRg32Uint,
+    auto* subtype = StorageTexture::SubtypeFor(builtin::TexelFormat::kRg32Uint, Types());
+    auto* s = create<StorageTexture>(TextureDimension::k2dArray, builtin::TexelFormat::kRg32Uint,
                                      builtin::Access::kReadWrite, subtype);
 
     auto program = Build();
@@ -123,8 +125,8 @@
 }
 
 TEST_F(StorageTextureTest, I32) {
-    auto* subtype = StorageTexture::SubtypeFor(type::TexelFormat::kRgba32Sint, Types());
-    auto* s = create<StorageTexture>(TextureDimension::k2dArray, type::TexelFormat::kRgba32Sint,
+    auto* subtype = StorageTexture::SubtypeFor(builtin::TexelFormat::kRgba32Sint, Types());
+    auto* s = create<StorageTexture>(TextureDimension::k2dArray, builtin::TexelFormat::kRgba32Sint,
                                      builtin::Access::kReadWrite, subtype);
 
     auto program = Build();
@@ -136,7 +138,7 @@
 }
 
 TEST_F(StorageTextureTest, Clone) {
-    auto* a = Create(TextureDimension::kCube, type::TexelFormat::kRgba32Float,
+    auto* a = Create(TextureDimension::kCube, builtin::TexelFormat::kRgba32Float,
                      builtin::Access::kReadWrite);
 
     type::Manager mgr;
@@ -144,7 +146,7 @@
 
     auto* mt = a->Clone(ctx);
     EXPECT_EQ(mt->dim(), TextureDimension::kCube);
-    EXPECT_EQ(mt->texel_format(), type::TexelFormat::kRgba32Float);
+    EXPECT_EQ(mt->texel_format(), builtin::TexelFormat::kRgba32Float);
     EXPECT_TRUE(mt->type()->Is<F32>());
 }
 
diff --git a/src/tint/writer/flatten_bindings_test.cc b/src/tint/writer/flatten_bindings_test.cc
index 53d1a7a..7e53356 100644
--- a/src/tint/writer/flatten_bindings_test.cc
+++ b/src/tint/writer/flatten_bindings_test.cc
@@ -104,7 +104,7 @@
     b.GlobalVar("texture2", b.ty.multisampled_texture(type::TextureDimension::k2d, b.ty.f32()),
                 b.Group(6_a), b.Binding(6_a));
     b.GlobalVar("texture3",
-                b.ty.storage_texture(type::TextureDimension::k2d, type::TexelFormat::kR32Float,
+                b.ty.storage_texture(type::TextureDimension::k2d, builtin::TexelFormat::kR32Float,
                                      builtin::Access::kWrite),
                 b.Group(7_a), b.Binding(7_a));
     b.GlobalVar("texture4", b.ty.depth_texture(type::TextureDimension::k2d), b.Group(8_a),
diff --git a/src/tint/writer/glsl/generator_impl.cc b/src/tint/writer/glsl/generator_impl.cc
index c06d82f..742694c 100644
--- a/src/tint/writer/glsl/generator_impl.cc
+++ b/src/tint/writer/glsl/generator_impl.cc
@@ -2038,59 +2038,59 @@
     if (auto* storage = type->As<type::StorageTexture>()) {
         out << "layout(";
         switch (storage->texel_format()) {
-            case type::TexelFormat::kBgra8Unorm:
+            case builtin::TexelFormat::kBgra8Unorm:
                 TINT_ICE(Writer, diagnostics_)
                     << "bgra8unorm should have been polyfilled to rgba8unorm";
                 break;
-            case type::TexelFormat::kR32Uint:
+            case builtin::TexelFormat::kR32Uint:
                 out << "r32ui";
                 break;
-            case type::TexelFormat::kR32Sint:
+            case builtin::TexelFormat::kR32Sint:
                 out << "r32i";
                 break;
-            case type::TexelFormat::kR32Float:
+            case builtin::TexelFormat::kR32Float:
                 out << "r32f";
                 break;
-            case type::TexelFormat::kRgba8Unorm:
+            case builtin::TexelFormat::kRgba8Unorm:
                 out << "rgba8";
                 break;
-            case type::TexelFormat::kRgba8Snorm:
+            case builtin::TexelFormat::kRgba8Snorm:
                 out << "rgba8_snorm";
                 break;
-            case type::TexelFormat::kRgba8Uint:
+            case builtin::TexelFormat::kRgba8Uint:
                 out << "rgba8ui";
                 break;
-            case type::TexelFormat::kRgba8Sint:
+            case builtin::TexelFormat::kRgba8Sint:
                 out << "rgba8i";
                 break;
-            case type::TexelFormat::kRg32Uint:
+            case builtin::TexelFormat::kRg32Uint:
                 out << "rg32ui";
                 break;
-            case type::TexelFormat::kRg32Sint:
+            case builtin::TexelFormat::kRg32Sint:
                 out << "rg32i";
                 break;
-            case type::TexelFormat::kRg32Float:
+            case builtin::TexelFormat::kRg32Float:
                 out << "rg32f";
                 break;
-            case type::TexelFormat::kRgba16Uint:
+            case builtin::TexelFormat::kRgba16Uint:
                 out << "rgba16ui";
                 break;
-            case type::TexelFormat::kRgba16Sint:
+            case builtin::TexelFormat::kRgba16Sint:
                 out << "rgba16i";
                 break;
-            case type::TexelFormat::kRgba16Float:
+            case builtin::TexelFormat::kRgba16Float:
                 out << "rgba16f";
                 break;
-            case type::TexelFormat::kRgba32Uint:
+            case builtin::TexelFormat::kRgba32Uint:
                 out << "rgba32ui";
                 break;
-            case type::TexelFormat::kRgba32Sint:
+            case builtin::TexelFormat::kRgba32Sint:
                 out << "rgba32i";
                 break;
-            case type::TexelFormat::kRgba32Float:
+            case builtin::TexelFormat::kRgba32Float:
                 out << "rgba32f";
                 break;
-            case type::TexelFormat::kUndefined:
+            case builtin::TexelFormat::kUndefined:
                 TINT_ICE(Writer, diagnostics_) << "invalid texel format";
                 return false;
         }
diff --git a/src/tint/writer/glsl/generator_impl_type_test.cc b/src/tint/writer/glsl/generator_impl_type_test.cc
index 84972d6..c268da8 100644
--- a/src/tint/writer/glsl/generator_impl_type_test.cc
+++ b/src/tint/writer/glsl/generator_impl_type_test.cc
@@ -522,7 +522,7 @@
 
 struct GlslStorageTextureData {
     type::TextureDimension dim;
-    type::TexelFormat imgfmt;
+    builtin::TexelFormat imgfmt;
     std::string result;
 };
 inline std::ostream& operator<<(std::ostream& out, GlslStorageTextureData data) {
@@ -553,31 +553,31 @@
     GlslGeneratorImplTest_Type,
     GlslStorageTexturesTest,
     testing::Values(GlslStorageTextureData{type::TextureDimension::k1d,
-                                           type::TexelFormat::kRgba8Unorm, "image1D tex;"},
+                                           builtin::TexelFormat::kRgba8Unorm, "image1D tex;"},
                     GlslStorageTextureData{type::TextureDimension::k2d,
-                                           type::TexelFormat::kRgba16Float, "image2D tex;"},
+                                           builtin::TexelFormat::kRgba16Float, "image2D tex;"},
                     GlslStorageTextureData{type::TextureDimension::k2dArray,
-                                           type::TexelFormat::kR32Float, "image2DArray tex;"},
+                                           builtin::TexelFormat::kR32Float, "image2DArray tex;"},
                     GlslStorageTextureData{type::TextureDimension::k3d,
-                                           type::TexelFormat::kRg32Float, "image3D tex;"},
+                                           builtin::TexelFormat::kRg32Float, "image3D tex;"},
                     GlslStorageTextureData{type::TextureDimension::k1d,
-                                           type::TexelFormat::kRgba32Float, "image1D tex;"},
+                                           builtin::TexelFormat::kRgba32Float, "image1D tex;"},
                     GlslStorageTextureData{type::TextureDimension::k2d,
-                                           type::TexelFormat::kRgba16Uint, "image2D tex;"},
+                                           builtin::TexelFormat::kRgba16Uint, "image2D tex;"},
                     GlslStorageTextureData{type::TextureDimension::k2dArray,
-                                           type::TexelFormat::kR32Uint, "image2DArray tex;"},
+                                           builtin::TexelFormat::kR32Uint, "image2DArray tex;"},
                     GlslStorageTextureData{type::TextureDimension::k3d,
-                                           type::TexelFormat::kRg32Uint, "image3D tex;"},
+                                           builtin::TexelFormat::kRg32Uint, "image3D tex;"},
                     GlslStorageTextureData{type::TextureDimension::k1d,
-                                           type::TexelFormat::kRgba32Uint, "image1D tex;"},
+                                           builtin::TexelFormat::kRgba32Uint, "image1D tex;"},
                     GlslStorageTextureData{type::TextureDimension::k2d,
-                                           type::TexelFormat::kRgba16Sint, "image2D tex;"},
+                                           builtin::TexelFormat::kRgba16Sint, "image2D tex;"},
                     GlslStorageTextureData{type::TextureDimension::k2dArray,
-                                           type::TexelFormat::kR32Sint, "image2DArray tex;"},
+                                           builtin::TexelFormat::kR32Sint, "image2DArray tex;"},
                     GlslStorageTextureData{type::TextureDimension::k3d,
-                                           type::TexelFormat::kRg32Sint, "image3D tex;"},
+                                           builtin::TexelFormat::kRg32Sint, "image3D tex;"},
                     GlslStorageTextureData{type::TextureDimension::k1d,
-                                           type::TexelFormat::kRgba32Sint, "image1D tex;"}));
+                                           builtin::TexelFormat::kRgba32Sint, "image1D tex;"}));
 
 }  // namespace
 }  // namespace tint::writer::glsl
diff --git a/src/tint/writer/hlsl/generator_impl.cc b/src/tint/writer/hlsl/generator_impl.cc
index 4d07497..7b33e4a 100644
--- a/src/tint/writer/hlsl/generator_impl.cc
+++ b/src/tint/writer/hlsl/generator_impl.cc
@@ -87,27 +87,27 @@
 
 const char kTempNamePrefix[] = "tint_tmp";
 
-const char* image_format_to_rwtexture_type(type::TexelFormat image_format) {
+const char* image_format_to_rwtexture_type(builtin::TexelFormat image_format) {
     switch (image_format) {
-        case type::TexelFormat::kBgra8Unorm:
-        case type::TexelFormat::kRgba8Unorm:
-        case type::TexelFormat::kRgba8Snorm:
-        case type::TexelFormat::kRgba16Float:
-        case type::TexelFormat::kR32Float:
-        case type::TexelFormat::kRg32Float:
-        case type::TexelFormat::kRgba32Float:
+        case builtin::TexelFormat::kBgra8Unorm:
+        case builtin::TexelFormat::kRgba8Unorm:
+        case builtin::TexelFormat::kRgba8Snorm:
+        case builtin::TexelFormat::kRgba16Float:
+        case builtin::TexelFormat::kR32Float:
+        case builtin::TexelFormat::kRg32Float:
+        case builtin::TexelFormat::kRgba32Float:
             return "float4";
-        case type::TexelFormat::kRgba8Uint:
-        case type::TexelFormat::kRgba16Uint:
-        case type::TexelFormat::kR32Uint:
-        case type::TexelFormat::kRg32Uint:
-        case type::TexelFormat::kRgba32Uint:
+        case builtin::TexelFormat::kRgba8Uint:
+        case builtin::TexelFormat::kRgba16Uint:
+        case builtin::TexelFormat::kR32Uint:
+        case builtin::TexelFormat::kRg32Uint:
+        case builtin::TexelFormat::kRgba32Uint:
             return "uint4";
-        case type::TexelFormat::kRgba8Sint:
-        case type::TexelFormat::kRgba16Sint:
-        case type::TexelFormat::kR32Sint:
-        case type::TexelFormat::kRg32Sint:
-        case type::TexelFormat::kRgba32Sint:
+        case builtin::TexelFormat::kRgba8Sint:
+        case builtin::TexelFormat::kRgba16Sint:
+        case builtin::TexelFormat::kR32Sint:
+        case builtin::TexelFormat::kRg32Sint:
+        case builtin::TexelFormat::kRgba32Sint:
             return "int4";
         default:
             return nullptr;
diff --git a/src/tint/writer/hlsl/generator_impl_type_test.cc b/src/tint/writer/hlsl/generator_impl_type_test.cc
index 30ca010..71dbe60 100644
--- a/src/tint/writer/hlsl/generator_impl_type_test.cc
+++ b/src/tint/writer/hlsl/generator_impl_type_test.cc
@@ -520,7 +520,7 @@
 
 struct HlslStorageTextureData {
     type::TextureDimension dim;
-    type::TexelFormat imgfmt;
+    builtin::TexelFormat imgfmt;
     std::string result;
 };
 inline std::ostream& operator<<(std::ostream& out, HlslStorageTextureData data) {
@@ -556,31 +556,31 @@
     HlslGeneratorImplTest_Type,
     HlslStorageTexturesTest,
     testing::Values(
-        HlslStorageTextureData{type::TextureDimension::k1d, type::TexelFormat::kRgba8Unorm,
+        HlslStorageTextureData{type::TextureDimension::k1d, builtin::TexelFormat::kRgba8Unorm,
                                "RWTexture1D<float4> tex : register(u1, space2);"},
-        HlslStorageTextureData{type::TextureDimension::k2d, type::TexelFormat::kRgba16Float,
+        HlslStorageTextureData{type::TextureDimension::k2d, builtin::TexelFormat::kRgba16Float,
                                "RWTexture2D<float4> tex : register(u1, space2);"},
-        HlslStorageTextureData{type::TextureDimension::k2dArray, type::TexelFormat::kR32Float,
+        HlslStorageTextureData{type::TextureDimension::k2dArray, builtin::TexelFormat::kR32Float,
                                "RWTexture2DArray<float4> tex : register(u1, space2);"},
-        HlslStorageTextureData{type::TextureDimension::k3d, type::TexelFormat::kRg32Float,
+        HlslStorageTextureData{type::TextureDimension::k3d, builtin::TexelFormat::kRg32Float,
                                "RWTexture3D<float4> tex : register(u1, space2);"},
-        HlslStorageTextureData{type::TextureDimension::k1d, type::TexelFormat::kRgba32Float,
+        HlslStorageTextureData{type::TextureDimension::k1d, builtin::TexelFormat::kRgba32Float,
                                "RWTexture1D<float4> tex : register(u1, space2);"},
-        HlslStorageTextureData{type::TextureDimension::k2d, type::TexelFormat::kRgba16Uint,
+        HlslStorageTextureData{type::TextureDimension::k2d, builtin::TexelFormat::kRgba16Uint,
                                "RWTexture2D<uint4> tex : register(u1, space2);"},
-        HlslStorageTextureData{type::TextureDimension::k2dArray, type::TexelFormat::kR32Uint,
+        HlslStorageTextureData{type::TextureDimension::k2dArray, builtin::TexelFormat::kR32Uint,
                                "RWTexture2DArray<uint4> tex : register(u1, space2);"},
-        HlslStorageTextureData{type::TextureDimension::k3d, type::TexelFormat::kRg32Uint,
+        HlslStorageTextureData{type::TextureDimension::k3d, builtin::TexelFormat::kRg32Uint,
                                "RWTexture3D<uint4> tex : register(u1, space2);"},
-        HlslStorageTextureData{type::TextureDimension::k1d, type::TexelFormat::kRgba32Uint,
+        HlslStorageTextureData{type::TextureDimension::k1d, builtin::TexelFormat::kRgba32Uint,
                                "RWTexture1D<uint4> tex : register(u1, space2);"},
-        HlslStorageTextureData{type::TextureDimension::k2d, type::TexelFormat::kRgba16Sint,
+        HlslStorageTextureData{type::TextureDimension::k2d, builtin::TexelFormat::kRgba16Sint,
                                "RWTexture2D<int4> tex : register(u1, space2);"},
-        HlslStorageTextureData{type::TextureDimension::k2dArray, type::TexelFormat::kR32Sint,
+        HlslStorageTextureData{type::TextureDimension::k2dArray, builtin::TexelFormat::kR32Sint,
                                "RWTexture2DArray<int4> tex : register(u1, space2);"},
-        HlslStorageTextureData{type::TextureDimension::k3d, type::TexelFormat::kRg32Sint,
+        HlslStorageTextureData{type::TextureDimension::k3d, builtin::TexelFormat::kRg32Sint,
                                "RWTexture3D<int4> tex : register(u1, space2);"},
-        HlslStorageTextureData{type::TextureDimension::k1d, type::TexelFormat::kRgba32Sint,
+        HlslStorageTextureData{type::TextureDimension::k1d, builtin::TexelFormat::kRgba32Sint,
                                "RWTexture1D<int4> tex : register(u1, space2);"}));
 
 }  // namespace
diff --git a/src/tint/writer/msl/generator_impl_type_test.cc b/src/tint/writer/msl/generator_impl_type_test.cc
index 8f056f4..9775cf9 100644
--- a/src/tint/writer/msl/generator_impl_type_test.cc
+++ b/src/tint/writer/msl/generator_impl_type_test.cc
@@ -854,7 +854,8 @@
 TEST_P(MslStorageTexturesTest, Emit) {
     auto params = GetParam();
 
-    auto s = ty.storage_texture(params.dim, type::TexelFormat::kR32Float, builtin::Access::kWrite);
+    auto s =
+        ty.storage_texture(params.dim, builtin::TexelFormat::kR32Float, builtin::Access::kWrite);
     ast::Type type = GlobalVar("test_var", s, Binding(0_a), Group(0_a))->type;
 
     GeneratorImpl& gen = Build();
diff --git a/src/tint/writer/spirv/builder.cc b/src/tint/writer/spirv/builder.cc
index 4683889..0e04d17 100644
--- a/src/tint/writer/spirv/builder.cc
+++ b/src/tint/writer/spirv/builder.cc
@@ -4074,48 +4074,48 @@
     }
 }
 
-SpvImageFormat Builder::convert_texel_format_to_spv(const type::TexelFormat format) {
+SpvImageFormat Builder::convert_texel_format_to_spv(const builtin::TexelFormat format) {
     switch (format) {
-        case type::TexelFormat::kBgra8Unorm:
+        case builtin::TexelFormat::kBgra8Unorm:
             TINT_ICE(Writer, builder_.Diagnostics())
                 << "bgra8unorm should have been polyfilled to rgba8unorm";
             return SpvImageFormatUnknown;
-        case type::TexelFormat::kR32Uint:
+        case builtin::TexelFormat::kR32Uint:
             return SpvImageFormatR32ui;
-        case type::TexelFormat::kR32Sint:
+        case builtin::TexelFormat::kR32Sint:
             return SpvImageFormatR32i;
-        case type::TexelFormat::kR32Float:
+        case builtin::TexelFormat::kR32Float:
             return SpvImageFormatR32f;
-        case type::TexelFormat::kRgba8Unorm:
+        case builtin::TexelFormat::kRgba8Unorm:
             return SpvImageFormatRgba8;
-        case type::TexelFormat::kRgba8Snorm:
+        case builtin::TexelFormat::kRgba8Snorm:
             return SpvImageFormatRgba8Snorm;
-        case type::TexelFormat::kRgba8Uint:
+        case builtin::TexelFormat::kRgba8Uint:
             return SpvImageFormatRgba8ui;
-        case type::TexelFormat::kRgba8Sint:
+        case builtin::TexelFormat::kRgba8Sint:
             return SpvImageFormatRgba8i;
-        case type::TexelFormat::kRg32Uint:
+        case builtin::TexelFormat::kRg32Uint:
             push_capability(SpvCapabilityStorageImageExtendedFormats);
             return SpvImageFormatRg32ui;
-        case type::TexelFormat::kRg32Sint:
+        case builtin::TexelFormat::kRg32Sint:
             push_capability(SpvCapabilityStorageImageExtendedFormats);
             return SpvImageFormatRg32i;
-        case type::TexelFormat::kRg32Float:
+        case builtin::TexelFormat::kRg32Float:
             push_capability(SpvCapabilityStorageImageExtendedFormats);
             return SpvImageFormatRg32f;
-        case type::TexelFormat::kRgba16Uint:
+        case builtin::TexelFormat::kRgba16Uint:
             return SpvImageFormatRgba16ui;
-        case type::TexelFormat::kRgba16Sint:
+        case builtin::TexelFormat::kRgba16Sint:
             return SpvImageFormatRgba16i;
-        case type::TexelFormat::kRgba16Float:
+        case builtin::TexelFormat::kRgba16Float:
             return SpvImageFormatRgba16f;
-        case type::TexelFormat::kRgba32Uint:
+        case builtin::TexelFormat::kRgba32Uint:
             return SpvImageFormatRgba32ui;
-        case type::TexelFormat::kRgba32Sint:
+        case builtin::TexelFormat::kRgba32Sint:
             return SpvImageFormatRgba32i;
-        case type::TexelFormat::kRgba32Float:
+        case builtin::TexelFormat::kRgba32Float:
             return SpvImageFormatRgba32f;
-        case type::TexelFormat::kUndefined:
+        case builtin::TexelFormat::kUndefined:
             return SpvImageFormatUnknown;
     }
     return SpvImageFormatUnknown;
diff --git a/src/tint/writer/spirv/builder.h b/src/tint/writer/spirv/builder.h
index 57df396..c939a39 100644
--- a/src/tint/writer/spirv/builder.h
+++ b/src/tint/writer/spirv/builder.h
@@ -535,7 +535,7 @@
     /// Converts TexelFormat to SPIR-V and pushes an appropriate capability.
     /// @param format AST image format type
     /// @returns SPIR-V image format type
-    SpvImageFormat convert_texel_format_to_spv(const type::TexelFormat format);
+    SpvImageFormat convert_texel_format_to_spv(const builtin::TexelFormat format);
 
     /// Determines if the given type initializer is created from constant values
     /// @param expr the expression to check
diff --git a/src/tint/writer/spirv/builder_format_conversion_test.cc b/src/tint/writer/spirv/builder_format_conversion_test.cc
index cd1322f..63f2183 100644
--- a/src/tint/writer/spirv/builder_format_conversion_test.cc
+++ b/src/tint/writer/spirv/builder_format_conversion_test.cc
@@ -19,7 +19,7 @@
 namespace {
 
 struct TestData {
-    type::TexelFormat ast_format;
+    builtin::TexelFormat ast_format;
     SpvImageFormat_ spv_format;
     bool extended_format = false;
 };
@@ -45,46 +45,47 @@
     }
 }
 
-INSTANTIATE_TEST_SUITE_P(BuilderTest,
-                         ImageFormatConversionTest,
-                         testing::Values(
-                             /* WGSL unsupported formats
-                       TestData{type::TexelFormat::kR8Unorm, SpvImageFormatR8, true},
-                       TestData{type::TexelFormat::kR8Snorm, SpvImageFormatR8Snorm, true},
-                       TestData{type::TexelFormat::kR8Uint, SpvImageFormatR8ui, true},
-                       TestData{type::TexelFormat::kR8Sint, SpvImageFormatR8i, true},
-                       TestData{type::TexelFormat::kR16Uint, SpvImageFormatR16ui, true},
-                       TestData{type::TexelFormat::kR16Sint, SpvImageFormatR16i, true},
-                       TestData{type::TexelFormat::kR16Float, SpvImageFormatR16f, true},
-                       TestData{type::TexelFormat::kRg8Unorm, SpvImageFormatRg8, true},
-                       TestData{type::TexelFormat::kRg8Snorm, SpvImageFormatRg8Snorm, true},
-                       TestData{type::TexelFormat::kRg8Uint, SpvImageFormatRg8ui, true},
-                       TestData{type::TexelFormat::kRg8Sint, SpvImageFormatRg8i, true},
-                       TestData{type::TexelFormat::kRg16Uint, SpvImageFormatRg16ui, true},
-                       TestData{type::TexelFormat::kRg16Sint, SpvImageFormatRg16i, true},
-                       TestData{type::TexelFormat::kRg16Float, SpvImageFormatRg16f, true},
-                       TestData{type::TexelFormat::kRgba8UnormSrgb, SpvImageFormatUnknown},
-                       TestData{type::TexelFormat::kBgra8Unorm, SpvImageFormatUnknown},
-                       TestData{type::TexelFormat::kBgra8UnormSrgb, SpvImageFormatUnknown},
-                       TestData{type::TexelFormat::kRgb10A2Unorm, SpvImageFormatRgb10A2, true},
-                       TestData{type::TexelFormat::kRg11B10Float, SpvImageFormatR11fG11fB10f, true},
-                     */
-                             TestData{type::TexelFormat::kR32Uint, SpvImageFormatR32ui},
-                             TestData{type::TexelFormat::kR32Sint, SpvImageFormatR32i},
-                             TestData{type::TexelFormat::kR32Float, SpvImageFormatR32f},
-                             TestData{type::TexelFormat::kRgba8Unorm, SpvImageFormatRgba8},
-                             TestData{type::TexelFormat::kRgba8Snorm, SpvImageFormatRgba8Snorm},
-                             TestData{type::TexelFormat::kRgba8Uint, SpvImageFormatRgba8ui},
-                             TestData{type::TexelFormat::kRgba8Sint, SpvImageFormatRgba8i},
-                             TestData{type::TexelFormat::kRg32Uint, SpvImageFormatRg32ui, true},
-                             TestData{type::TexelFormat::kRg32Sint, SpvImageFormatRg32i, true},
-                             TestData{type::TexelFormat::kRg32Float, SpvImageFormatRg32f, true},
-                             TestData{type::TexelFormat::kRgba16Uint, SpvImageFormatRgba16ui},
-                             TestData{type::TexelFormat::kRgba16Sint, SpvImageFormatRgba16i},
-                             TestData{type::TexelFormat::kRgba16Float, SpvImageFormatRgba16f},
-                             TestData{type::TexelFormat::kRgba32Uint, SpvImageFormatRgba32ui},
-                             TestData{type::TexelFormat::kRgba32Sint, SpvImageFormatRgba32i},
-                             TestData{type::TexelFormat::kRgba32Float, SpvImageFormatRgba32f}));
+INSTANTIATE_TEST_SUITE_P(
+    BuilderTest,
+    ImageFormatConversionTest,
+    testing::Values(
+        /* WGSL unsupported formats
+  TestData{builtin::TexelFormat::kR8Unorm, SpvImageFormatR8, true},
+  TestData{builtin::TexelFormat::kR8Snorm, SpvImageFormatR8Snorm, true},
+  TestData{builtin::TexelFormat::kR8Uint, SpvImageFormatR8ui, true},
+  TestData{builtin::TexelFormat::kR8Sint, SpvImageFormatR8i, true},
+  TestData{builtin::TexelFormat::kR16Uint, SpvImageFormatR16ui, true},
+  TestData{builtin::TexelFormat::kR16Sint, SpvImageFormatR16i, true},
+  TestData{builtin::TexelFormat::kR16Float, SpvImageFormatR16f, true},
+  TestData{builtin::TexelFormat::kRg8Unorm, SpvImageFormatRg8, true},
+  TestData{builtin::TexelFormat::kRg8Snorm, SpvImageFormatRg8Snorm, true},
+  TestData{builtin::TexelFormat::kRg8Uint, SpvImageFormatRg8ui, true},
+  TestData{builtin::TexelFormat::kRg8Sint, SpvImageFormatRg8i, true},
+  TestData{builtin::TexelFormat::kRg16Uint, SpvImageFormatRg16ui, true},
+  TestData{builtin::TexelFormat::kRg16Sint, SpvImageFormatRg16i, true},
+  TestData{builtin::TexelFormat::kRg16Float, SpvImageFormatRg16f, true},
+  TestData{builtin::TexelFormat::kRgba8UnormSrgb, SpvImageFormatUnknown},
+  TestData{builtin::TexelFormat::kBgra8Unorm, SpvImageFormatUnknown},
+  TestData{builtin::TexelFormat::kBgra8UnormSrgb, SpvImageFormatUnknown},
+  TestData{builtin::TexelFormat::kRgb10A2Unorm, SpvImageFormatRgb10A2, true},
+  TestData{builtin::TexelFormat::kRg11B10Float, SpvImageFormatR11fG11fB10f, true},
+*/
+        TestData{builtin::TexelFormat::kR32Uint, SpvImageFormatR32ui},
+        TestData{builtin::TexelFormat::kR32Sint, SpvImageFormatR32i},
+        TestData{builtin::TexelFormat::kR32Float, SpvImageFormatR32f},
+        TestData{builtin::TexelFormat::kRgba8Unorm, SpvImageFormatRgba8},
+        TestData{builtin::TexelFormat::kRgba8Snorm, SpvImageFormatRgba8Snorm},
+        TestData{builtin::TexelFormat::kRgba8Uint, SpvImageFormatRgba8ui},
+        TestData{builtin::TexelFormat::kRgba8Sint, SpvImageFormatRgba8i},
+        TestData{builtin::TexelFormat::kRg32Uint, SpvImageFormatRg32ui, true},
+        TestData{builtin::TexelFormat::kRg32Sint, SpvImageFormatRg32i, true},
+        TestData{builtin::TexelFormat::kRg32Float, SpvImageFormatRg32f, true},
+        TestData{builtin::TexelFormat::kRgba16Uint, SpvImageFormatRgba16ui},
+        TestData{builtin::TexelFormat::kRgba16Sint, SpvImageFormatRgba16i},
+        TestData{builtin::TexelFormat::kRgba16Float, SpvImageFormatRgba16f},
+        TestData{builtin::TexelFormat::kRgba32Uint, SpvImageFormatRgba32ui},
+        TestData{builtin::TexelFormat::kRgba32Sint, SpvImageFormatRgba32i},
+        TestData{builtin::TexelFormat::kRgba32Float, SpvImageFormatRgba32f}));
 
 }  // namespace
 }  // namespace tint::writer::spirv
diff --git a/src/tint/writer/spirv/builder_global_variable_test.cc b/src/tint/writer/spirv/builder_global_variable_test.cc
index f9f9c4b..2f551ff 100644
--- a/src/tint/writer/spirv/builder_global_variable_test.cc
+++ b/src/tint/writer/spirv/builder_global_variable_test.cc
@@ -477,7 +477,7 @@
 TEST_F(BuilderTest, GlobalVar_TextureStorageWriteOnly) {
     // var<uniform_constant> a : texture_storage_2d<r32uint, write>;
 
-    auto type = ty.storage_texture(type::TextureDimension::k2d, type::TexelFormat::kR32Uint,
+    auto type = ty.storage_texture(type::TextureDimension::k2d, builtin::TexelFormat::kR32Uint,
                                    builtin::Access::kWrite);
 
     auto* var_a = GlobalVar("a", type, Binding(0_a), Group(0_a));
diff --git a/src/tint/writer/spirv/builder_type_test.cc b/src/tint/writer/spirv/builder_type_test.cc
index 1b3e471..55b92c6 100644
--- a/src/tint/writer/spirv/builder_type_test.cc
+++ b/src/tint/writer/spirv/builder_type_test.cc
@@ -864,7 +864,7 @@
 }
 
 TEST_F(BuilderTest_Type, StorageTexture_Generate_1d) {
-    auto s = ty.storage_texture(type::TextureDimension::k1d, type::TexelFormat::kR32Float,
+    auto s = ty.storage_texture(type::TextureDimension::k1d, builtin::TexelFormat::kR32Float,
                                 builtin::Access::kWrite);
 
     ast::Type ty = GlobalVar("test_var", s, Binding(0_a), Group(0_a))->type;
@@ -879,7 +879,7 @@
 }
 
 TEST_F(BuilderTest_Type, StorageTexture_Generate_2d) {
-    auto s = ty.storage_texture(type::TextureDimension::k2d, type::TexelFormat::kR32Float,
+    auto s = ty.storage_texture(type::TextureDimension::k2d, builtin::TexelFormat::kR32Float,
                                 builtin::Access::kWrite);
 
     ast::Type ty = GlobalVar("test_var", s, Binding(0_a), Group(0_a))->type;
@@ -894,7 +894,7 @@
 }
 
 TEST_F(BuilderTest_Type, StorageTexture_Generate_2dArray) {
-    auto s = ty.storage_texture(type::TextureDimension::k2dArray, type::TexelFormat::kR32Float,
+    auto s = ty.storage_texture(type::TextureDimension::k2dArray, builtin::TexelFormat::kR32Float,
                                 builtin::Access::kWrite);
 
     ast::Type ty = GlobalVar("test_var", s, Binding(0_a), Group(0_a))->type;
@@ -909,7 +909,7 @@
 }
 
 TEST_F(BuilderTest_Type, StorageTexture_Generate_3d) {
-    auto s = ty.storage_texture(type::TextureDimension::k3d, type::TexelFormat::kR32Float,
+    auto s = ty.storage_texture(type::TextureDimension::k3d, builtin::TexelFormat::kR32Float,
                                 builtin::Access::kWrite);
 
     ast::Type ty = GlobalVar("test_var", s, Binding(0_a), Group(0_a))->type;
@@ -924,7 +924,7 @@
 }
 
 TEST_F(BuilderTest_Type, StorageTexture_Generate_SampledTypeFloat_Format_r32float) {
-    auto s = ty.storage_texture(type::TextureDimension::k2d, type::TexelFormat::kR32Float,
+    auto s = ty.storage_texture(type::TextureDimension::k2d, builtin::TexelFormat::kR32Float,
                                 builtin::Access::kWrite);
 
     ast::Type ty = GlobalVar("test_var", s, Binding(0_a), Group(0_a))->type;
@@ -939,7 +939,7 @@
 }
 
 TEST_F(BuilderTest_Type, StorageTexture_Generate_SampledTypeSint_Format_r32sint) {
-    auto s = ty.storage_texture(type::TextureDimension::k2d, type::TexelFormat::kR32Sint,
+    auto s = ty.storage_texture(type::TextureDimension::k2d, builtin::TexelFormat::kR32Sint,
                                 builtin::Access::kWrite);
 
     ast::Type ty = GlobalVar("test_var", s, Binding(0_a), Group(0_a))->type;
@@ -954,7 +954,7 @@
 }
 
 TEST_F(BuilderTest_Type, StorageTexture_Generate_SampledTypeUint_Format_r32uint) {
-    auto s = ty.storage_texture(type::TextureDimension::k2d, type::TexelFormat::kR32Uint,
+    auto s = ty.storage_texture(type::TextureDimension::k2d, builtin::TexelFormat::kR32Uint,
                                 builtin::Access::kWrite);
 
     ast::Type ty = GlobalVar("test_var", s, Binding(0_a), Group(0_a))->type;
diff --git a/src/tint/writer/wgsl/generator_impl.cc b/src/tint/writer/wgsl/generator_impl.cc
index c92e51a..42db52a 100644
--- a/src/tint/writer/wgsl/generator_impl.cc
+++ b/src/tint/writer/wgsl/generator_impl.cc
@@ -363,9 +363,9 @@
     return true;
 }
 
-bool GeneratorImpl::EmitImageFormat(std::ostream& out, const type::TexelFormat fmt) {
+bool GeneratorImpl::EmitImageFormat(std::ostream& out, const builtin::TexelFormat fmt) {
     switch (fmt) {
-        case type::TexelFormat::kUndefined:
+        case builtin::TexelFormat::kUndefined:
             diagnostics_.add_error(diag::System::Writer, "unknown image format");
             return false;
         default:
diff --git a/src/tint/writer/wgsl/generator_impl.h b/src/tint/writer/wgsl/generator_impl.h
index 746ce0f..abfee1d 100644
--- a/src/tint/writer/wgsl/generator_impl.h
+++ b/src/tint/writer/wgsl/generator_impl.h
@@ -207,7 +207,7 @@
     /// @param out the output stream
     /// @param fmt the format to generate
     /// @returns true if the format is emitted
-    bool EmitImageFormat(std::ostream& out, const type::TexelFormat fmt);
+    bool EmitImageFormat(std::ostream& out, const builtin::TexelFormat fmt);
     /// Handles a unary op expression
     /// @param out the output stream
     /// @param expr the expression to emit
diff --git a/src/tint/writer/wgsl/generator_impl_type_test.cc b/src/tint/writer/wgsl/generator_impl_type_test.cc
index 455cbbc..baa6d5b 100644
--- a/src/tint/writer/wgsl/generator_impl_type_test.cc
+++ b/src/tint/writer/wgsl/generator_impl_type_test.cc
@@ -440,7 +440,7 @@
                                                      "texture_multisampled_2d"}));
 
 struct StorageTextureData {
-    type::TexelFormat fmt;
+    builtin::TexelFormat fmt;
     type::TextureDimension dim;
     builtin::Access access;
     const char* name;
@@ -466,17 +466,17 @@
     WgslGeneratorImplTest,
     WgslGenerator_StorageTextureTest,
     testing::Values(
-        StorageTextureData{type::TexelFormat::kRgba8Sint, type::TextureDimension::k1d,
+        StorageTextureData{builtin::TexelFormat::kRgba8Sint, type::TextureDimension::k1d,
                            builtin::Access::kWrite, "texture_storage_1d<rgba8sint, write>"},
-        StorageTextureData{type::TexelFormat::kRgba8Sint, type::TextureDimension::k2d,
+        StorageTextureData{builtin::TexelFormat::kRgba8Sint, type::TextureDimension::k2d,
                            builtin::Access::kWrite, "texture_storage_2d<rgba8sint, write>"},
-        StorageTextureData{type::TexelFormat::kRgba8Sint, type::TextureDimension::k2dArray,
+        StorageTextureData{builtin::TexelFormat::kRgba8Sint, type::TextureDimension::k2dArray,
                            builtin::Access::kWrite, "texture_storage_2d_array<rgba8sint, write>"},
-        StorageTextureData{type::TexelFormat::kRgba8Sint, type::TextureDimension::k3d,
+        StorageTextureData{builtin::TexelFormat::kRgba8Sint, type::TextureDimension::k3d,
                            builtin::Access::kWrite, "texture_storage_3d<rgba8sint, write>"}));
 
 struct ImageFormatData {
-    type::TexelFormat fmt;
+    builtin::TexelFormat fmt;
     const char* name;
 };
 inline std::ostream& operator<<(std::ostream& out, ImageFormatData data) {
@@ -497,22 +497,22 @@
 INSTANTIATE_TEST_SUITE_P(
     WgslGeneratorImplTest,
     WgslGenerator_ImageFormatTest,
-    testing::Values(ImageFormatData{type::TexelFormat::kR32Uint, "r32uint"},
-                    ImageFormatData{type::TexelFormat::kR32Sint, "r32sint"},
-                    ImageFormatData{type::TexelFormat::kR32Float, "r32float"},
-                    ImageFormatData{type::TexelFormat::kRgba8Unorm, "rgba8unorm"},
-                    ImageFormatData{type::TexelFormat::kRgba8Snorm, "rgba8snorm"},
-                    ImageFormatData{type::TexelFormat::kRgba8Uint, "rgba8uint"},
-                    ImageFormatData{type::TexelFormat::kRgba8Sint, "rgba8sint"},
-                    ImageFormatData{type::TexelFormat::kRg32Uint, "rg32uint"},
-                    ImageFormatData{type::TexelFormat::kRg32Sint, "rg32sint"},
-                    ImageFormatData{type::TexelFormat::kRg32Float, "rg32float"},
-                    ImageFormatData{type::TexelFormat::kRgba16Uint, "rgba16uint"},
-                    ImageFormatData{type::TexelFormat::kRgba16Sint, "rgba16sint"},
-                    ImageFormatData{type::TexelFormat::kRgba16Float, "rgba16float"},
-                    ImageFormatData{type::TexelFormat::kRgba32Uint, "rgba32uint"},
-                    ImageFormatData{type::TexelFormat::kRgba32Sint, "rgba32sint"},
-                    ImageFormatData{type::TexelFormat::kRgba32Float, "rgba32float"}));
+    testing::Values(ImageFormatData{builtin::TexelFormat::kR32Uint, "r32uint"},
+                    ImageFormatData{builtin::TexelFormat::kR32Sint, "r32sint"},
+                    ImageFormatData{builtin::TexelFormat::kR32Float, "r32float"},
+                    ImageFormatData{builtin::TexelFormat::kRgba8Unorm, "rgba8unorm"},
+                    ImageFormatData{builtin::TexelFormat::kRgba8Snorm, "rgba8snorm"},
+                    ImageFormatData{builtin::TexelFormat::kRgba8Uint, "rgba8uint"},
+                    ImageFormatData{builtin::TexelFormat::kRgba8Sint, "rgba8sint"},
+                    ImageFormatData{builtin::TexelFormat::kRg32Uint, "rg32uint"},
+                    ImageFormatData{builtin::TexelFormat::kRg32Sint, "rg32sint"},
+                    ImageFormatData{builtin::TexelFormat::kRg32Float, "rg32float"},
+                    ImageFormatData{builtin::TexelFormat::kRgba16Uint, "rgba16uint"},
+                    ImageFormatData{builtin::TexelFormat::kRgba16Sint, "rgba16sint"},
+                    ImageFormatData{builtin::TexelFormat::kRgba16Float, "rgba16float"},
+                    ImageFormatData{builtin::TexelFormat::kRgba32Uint, "rgba32uint"},
+                    ImageFormatData{builtin::TexelFormat::kRgba32Sint, "rgba32sint"},
+                    ImageFormatData{builtin::TexelFormat::kRgba32Float, "rgba32float"}));
 
 TEST_F(WgslGeneratorImplTest, EmitType_Sampler) {
     auto sampler = ty.sampler(type::SamplerKind::kSampler);
