[tint] Move src/tint/writer options to include/tint

These are public API. Move them to the public API folder.

Bug: tint:1988
Change-Id: Ib60013376abcab4ffccc991010d6940e605a1320
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/143100
Auto-Submit: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/writer/array_length_from_uniform_options.h b/include/tint/array_length_from_uniform_options.h
similarity index 62%
rename from src/tint/writer/array_length_from_uniform_options.h
rename to include/tint/array_length_from_uniform_options.h
index b8b304a..0070566 100644
--- a/src/tint/writer/array_length_from_uniform_options.h
+++ b/include/tint/array_length_from_uniform_options.h
@@ -12,30 +12,18 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_WRITER_ARRAY_LENGTH_FROM_UNIFORM_OPTIONS_H_
-#define SRC_TINT_WRITER_ARRAY_LENGTH_FROM_UNIFORM_OPTIONS_H_
+#ifndef INCLUDE_TINT_ARRAY_LENGTH_FROM_UNIFORM_OPTIONS_H_
+#define INCLUDE_TINT_ARRAY_LENGTH_FROM_UNIFORM_OPTIONS_H_
 
 #include <unordered_map>
 
-#include "src/tint/writer/binding_point.h"
+#include "tint/binding_point.h"
 
-namespace tint::writer {
+namespace tint {
 
 /// Options used to specify a mapping of binding points to indices into a UBO
 /// from which to load buffer sizes.
 struct ArrayLengthFromUniformOptions {
-    /// Constructor
-    ArrayLengthFromUniformOptions();
-    /// Destructor
-    ~ArrayLengthFromUniformOptions();
-    /// Copy constructor
-    ArrayLengthFromUniformOptions(const ArrayLengthFromUniformOptions&);
-    /// Copy assignment
-    /// @returns this ArrayLengthFromUniformOptions
-    ArrayLengthFromUniformOptions& operator=(const ArrayLengthFromUniformOptions&);
-    /// Move constructor
-    ArrayLengthFromUniformOptions(ArrayLengthFromUniformOptions&&);
-
     /// The binding point to use to generate a uniform buffer from which to read
     /// buffer sizes.
     BindingPoint ubo_binding;
@@ -47,6 +35,6 @@
     TINT_REFLECT(ubo_binding, bindpoint_to_size_index);
 };
 
-}  // namespace tint::writer
+}  // namespace tint
 
-#endif  // SRC_TINT_WRITER_ARRAY_LENGTH_FROM_UNIFORM_OPTIONS_H_
+#endif  // INCLUDE_TINT_ARRAY_LENGTH_FROM_UNIFORM_OPTIONS_H_
diff --git a/src/tint/lang/wgsl/sem/binding_point.h b/include/tint/binding_point.h
similarity index 73%
rename from src/tint/lang/wgsl/sem/binding_point.h
rename to include/tint/binding_point.h
index 66923d1..c03ea445 100644
--- a/src/tint/lang/wgsl/sem/binding_point.h
+++ b/include/tint/binding_point.h
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_LANG_WGSL_SEM_BINDING_POINT_H_
-#define SRC_TINT_LANG_WGSL_SEM_BINDING_POINT_H_
+#ifndef INCLUDE_TINT_BINDING_POINT_H_
+#define INCLUDE_TINT_BINDING_POINT_H_
 
 #include <stdint.h>
 
@@ -23,7 +23,7 @@
 #include "src/tint/utils/reflection/reflection.h"
 #include "src/tint/utils/text/string_stream.h"
 
-namespace tint::sem {
+namespace tint {
 
 /// BindingPoint holds a group and binding index.
 struct BindingPoint {
@@ -46,6 +46,19 @@
     /// @param rhs the BindingPoint to compare against
     /// @returns true if this BindingPoint is not equal to `rhs`
     inline bool operator!=(const BindingPoint& rhs) const { return !(*this == rhs); }
+
+    /// Less-than operator
+    /// @param rhs the BindingPoint to compare against
+    /// @returns true if this BindingPoint comes before @p rhs
+    inline bool operator<(const BindingPoint& rhs) const {
+        if (group < rhs.group) {
+            return true;
+        }
+        if (group > rhs.group) {
+            return false;
+        }
+        return binding < rhs.binding;
+    }
 };
 
 /// Prints the BindingPoint @p bp to @p o
@@ -56,23 +69,22 @@
     return o << "[group: " << bp.group << ", binding: " << bp.binding << "]";
 }
 
-}  // namespace tint::sem
+}  // namespace tint
 
 namespace std {
 
-/// Custom std::hash specialization for tint::sem::BindingPoint so
-/// BindingPoints can be used as keys for std::unordered_map and
-/// std::unordered_set.
+/// Custom std::hash specialization for tint::BindingPoint so BindingPoints can be used as keys for
+/// std::unordered_map and std::unordered_set.
 template <>
-class hash<tint::sem::BindingPoint> {
+class hash<tint::BindingPoint> {
   public:
     /// @param binding_point the binding point to create a hash for
     /// @return the hash value
-    inline std::size_t operator()(const tint::sem::BindingPoint& binding_point) const {
+    inline std::size_t operator()(const tint::BindingPoint& binding_point) const {
         return tint::utils::Hash(binding_point.group, binding_point.binding);
     }
 };
 
 }  // namespace std
 
-#endif  // SRC_TINT_LANG_WGSL_SEM_BINDING_POINT_H_
+#endif  // INCLUDE_TINT_BINDING_POINT_H_
diff --git a/src/tint/writer/binding_remapper_options.h b/include/tint/binding_remapper_options.h
similarity index 68%
rename from src/tint/writer/binding_remapper_options.h
rename to include/tint/binding_remapper_options.h
index 2f50c56..5543946 100644
--- a/src/tint/writer/binding_remapper_options.h
+++ b/include/tint/binding_remapper_options.h
@@ -12,37 +12,24 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_WRITER_BINDING_REMAPPER_OPTIONS_H_
-#define SRC_TINT_WRITER_BINDING_REMAPPER_OPTIONS_H_
+#ifndef INCLUDE_TINT_BINDING_REMAPPER_OPTIONS_H_
+#define INCLUDE_TINT_BINDING_REMAPPER_OPTIONS_H_
 
 #include <unordered_map>
 
 #include "src/tint/lang/core/builtin/access.h"
-#include "src/tint/writer/binding_point.h"
+#include "tint/binding_point.h"
 
-namespace tint::writer {
+namespace tint {
 
 /// Options used to specify mappings of binding points.
-class BindingRemapperOptions {
-  public:
+struct BindingRemapperOptions {
     /// BindingPoints is a map of old binding point to new binding point
     using BindingPoints = std::unordered_map<BindingPoint, BindingPoint>;
 
     /// AccessControls is a map of old binding point to new access control
     using AccessControls = std::unordered_map<BindingPoint, builtin::Access>;
 
-    /// Constructor
-    BindingRemapperOptions();
-    /// Destructor
-    ~BindingRemapperOptions();
-    /// Copy constructor
-    BindingRemapperOptions(const BindingRemapperOptions&);
-    /// Copy assignment
-    /// @returns this BindingRemapperOptions
-    BindingRemapperOptions& operator=(const BindingRemapperOptions&);
-    /// Move constructor
-    BindingRemapperOptions(BindingRemapperOptions&&);
-
     /// A map of old binding point to new binding point
     BindingPoints binding_points;
 
@@ -57,6 +44,6 @@
     TINT_REFLECT(binding_points, access_controls, allow_collisions);
 };
 
-}  // namespace tint::writer
+}  // namespace tint
 
-#endif  // SRC_TINT_WRITER_BINDING_REMAPPER_OPTIONS_H_
+#endif  // INCLUDE_TINT_BINDING_REMAPPER_OPTIONS_H_
diff --git a/src/tint/writer/external_texture_options.h b/include/tint/external_texture_options.h
similarity index 68%
rename from src/tint/writer/external_texture_options.h
rename to include/tint/external_texture_options.h
index 55879d6..a8468ca 100644
--- a/src/tint/writer/external_texture_options.h
+++ b/include/tint/external_texture_options.h
@@ -12,18 +12,17 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_WRITER_EXTERNAL_TEXTURE_OPTIONS_H_
-#define SRC_TINT_WRITER_EXTERNAL_TEXTURE_OPTIONS_H_
+#ifndef INCLUDE_TINT_EXTERNAL_TEXTURE_OPTIONS_H_
+#define INCLUDE_TINT_EXTERNAL_TEXTURE_OPTIONS_H_
 
 #include <unordered_map>
 
 #include "src/tint/lang/wgsl/sem/external_texture.h"
 
-namespace tint::writer {
+namespace tint {
 
 /// Options used to specify mappings of binding points for external textures.
-class ExternalTextureOptions {
-  public:
+struct ExternalTextureOptions {
     /// This struct identifies the binding groups and locations for new bindings to
     /// use when transforming a texture_external instance.
     using BindingPoints = sem::external_texture::BindingPoints;
@@ -33,18 +32,6 @@
     /// locations for new bindings expanded from the texture_external instance.
     using BindingsMap = sem::external_texture::BindingsMap;
 
-    /// Constructor
-    ExternalTextureOptions();
-    /// Destructor
-    ~ExternalTextureOptions();
-    /// Copy constructor
-    ExternalTextureOptions(const ExternalTextureOptions&);
-    /// Copy assignment
-    /// @returns this ExternalTextureOptions
-    ExternalTextureOptions& operator=(const ExternalTextureOptions&);
-    /// Move constructor
-    ExternalTextureOptions(ExternalTextureOptions&&);
-
     /// A map of new binding points to use.
     BindingsMap bindings_map;
 
@@ -52,6 +39,6 @@
     TINT_REFLECT(bindings_map);
 };
 
-}  // namespace tint::writer
+}  // namespace tint
 
-#endif  // SRC_TINT_WRITER_EXTERNAL_TEXTURE_OPTIONS_H_
+#endif  // INCLUDE_TINT_EXTERNAL_TEXTURE_OPTIONS_H_
diff --git a/include/tint/tint.h b/include/tint/tint.h
index a2cfb19..18af391 100644
--- a/include/tint/tint.h
+++ b/include/tint/tint.h
@@ -30,10 +30,10 @@
 #include "src/tint/lang/wgsl/ast/transform/vertex_pulling.h"
 #include "src/tint/lang/wgsl/helpers/flatten_bindings.h"
 #include "src/tint/lang/wgsl/inspector/inspector.h"
-#include "src/tint/writer/array_length_from_uniform_options.h"
-#include "src/tint/writer/binding_point.h"
-#include "src/tint/writer/binding_remapper_options.h"
-#include "src/tint/writer/external_texture_options.h"
+#include "tint/array_length_from_uniform_options.h"
+#include "tint/binding_point.h"
+#include "tint/binding_remapper_options.h"
+#include "tint/external_texture_options.h"
 
 #if TINT_BUILD_SPV_READER
 #include "src/tint/lang/spirv/reader/parser.h"
diff --git a/src/dawn/native/StreamImplTint.cpp b/src/dawn/native/StreamImplTint.cpp
index 7458b7e..68edaa1 100644
--- a/src/dawn/native/StreamImplTint.cpp
+++ b/src/dawn/native/StreamImplTint.cpp
@@ -44,24 +44,24 @@
 
 // static
 template <>
-void stream::Stream<tint::writer::BindingPoint>::Write(stream::Sink* sink,
-                                                       const tint::writer::BindingPoint& point) {
+void stream::Stream<tint::BindingPoint>::Write(stream::Sink* sink,
+                                               const tint::BindingPoint& point) {
     StreamInTintObject(point, sink);
 }
 
 // static
 template <>
-void stream::Stream<tint::writer::ExternalTextureOptions::BindingPoints>::Write(
+void stream::Stream<tint::ExternalTextureOptions::BindingPoints>::Write(
     stream::Sink* sink,
-    const tint::writer::ExternalTextureOptions::BindingPoints& point) {
+    const tint::ExternalTextureOptions::BindingPoints& point) {
     StreamInTintObject(point, sink);
 }
 
 // static
 template <>
-void stream::Stream<tint::writer::ExternalTextureOptions>::Write(
+void stream::Stream<tint::ExternalTextureOptions>::Write(
     stream::Sink* sink,
-    const tint::writer::ExternalTextureOptions& points) {
+    const tint::ExternalTextureOptions& points) {
     StreamInTintObject(points, sink);
 }
 
@@ -105,17 +105,17 @@
 
 // static
 template <>
-void stream::Stream<tint::writer::ArrayLengthFromUniformOptions>::Write(
+void stream::Stream<tint::ArrayLengthFromUniformOptions>::Write(
     stream::Sink* sink,
-    const tint::writer::ArrayLengthFromUniformOptions& options) {
+    const tint::ArrayLengthFromUniformOptions& options) {
     StreamInTintObject(options, sink);
 }
 
 // static
 template <>
-void stream::Stream<tint::writer::BindingRemapperOptions>::Write(
+void stream::Stream<tint::BindingRemapperOptions>::Write(
     stream::Sink* sink,
-    const tint::writer::BindingRemapperOptions& options) {
+    const tint::BindingRemapperOptions& options) {
     StreamInTintObject(options, sink);
 }
 
diff --git a/src/dawn/native/TintUtils.cpp b/src/dawn/native/TintUtils.cpp
index 231a41f..4cb758c 100644
--- a/src/dawn/native/TintUtils.cpp
+++ b/src/dawn/native/TintUtils.cpp
@@ -147,9 +147,9 @@
     tlDevice = nullptr;
 }
 
-tint::writer::ExternalTextureOptions BuildExternalTextureTransformBindings(
+tint::ExternalTextureOptions BuildExternalTextureTransformBindings(
     const PipelineLayoutBase* layout) {
-    tint::writer::ExternalTextureOptions options;
+    tint::ExternalTextureOptions options;
     for (BindGroupIndex i : IterateBitSet(layout->GetBindGroupLayoutsMask())) {
         const BindGroupLayoutBase* bgl = layout->GetBindGroupLayout(i);
         for (const auto& [_, expansion] : bgl->GetExternalTextureBindingExpansionMap()) {
diff --git a/src/dawn/native/TintUtils.h b/src/dawn/native/TintUtils.h
index a61ded8..59c8f12 100644
--- a/src/dawn/native/TintUtils.h
+++ b/src/dawn/native/TintUtils.h
@@ -40,7 +40,7 @@
     ScopedTintICEHandler(ScopedTintICEHandler&&) = delete;
 };
 
-tint::writer::ExternalTextureOptions BuildExternalTextureTransformBindings(
+tint::ExternalTextureOptions BuildExternalTextureTransformBindings(
     const PipelineLayoutBase* layout);
 
 tint::ast::transform::VertexPulling::Config BuildVertexPullingTransformConfig(
diff --git a/src/dawn/native/d3d/D3DCompilationRequest.h b/src/dawn/native/d3d/D3DCompilationRequest.h
index dc12a32..b3b5911 100644
--- a/src/dawn/native/d3d/D3DCompilationRequest.h
+++ b/src/dawn/native/d3d/D3DCompilationRequest.h
@@ -61,9 +61,9 @@
     X(bool, usesNumWorkgroups)                                                                   \
     X(uint32_t, numWorkgroupsShaderRegister)                                                     \
     X(uint32_t, numWorkgroupsRegisterSpace)                                                      \
-    X(tint::writer::ExternalTextureOptions, externalTextureOptions)                              \
-    X(tint::writer::ArrayLengthFromUniformOptions, arrayLengthFromUniform)                       \
-    X(tint::writer::BindingRemapperOptions, bindingRemapper)                                     \
+    X(tint::ExternalTextureOptions, externalTextureOptions)                                      \
+    X(tint::ArrayLengthFromUniformOptions, arrayLengthFromUniform)                               \
+    X(tint::BindingRemapperOptions, bindingRemapper)                                             \
     X(std::optional<tint::ast::transform::SubstituteOverride::Config>, substituteOverrideConfig) \
     X(std::bitset<kMaxInterStageShaderVariables>, interstageLocations)                           \
     X(LimitsForCompilationRequest, limits)                                                       \
@@ -72,7 +72,7 @@
     X(bool, disableWorkgroupInit)                                                                \
     X(bool, polyfillReflectVec2F32)                                                              \
     X(bool, dumpShaders)                                                                         \
-    X(std::vector<tint::writer::BindingPoint>, bindingPointsIgnoredInRobustnessTransform)
+    X(std::vector<tint::BindingPoint>, bindingPointsIgnoredInRobustnessTransform)
 
 #define D3D_BYTECODE_COMPILATION_REQUEST_MEMBERS(X) \
     X(bool, hasShaderF16Feature)                    \
diff --git a/src/dawn/native/d3d/ShaderUtils.cpp b/src/dawn/native/d3d/ShaderUtils.cpp
index 14bf3a0..485d35e 100644
--- a/src/dawn/native/d3d/ShaderUtils.cpp
+++ b/src/dawn/native/d3d/ShaderUtils.cpp
@@ -220,7 +220,7 @@
 
     if (r.usesNumWorkgroups) {
         options.root_constant_binding_point =
-            tint::writer::BindingPoint{r.numWorkgroupsRegisterSpace, r.numWorkgroupsShaderRegister};
+            tint::BindingPoint{r.numWorkgroupsRegisterSpace, r.numWorkgroupsShaderRegister};
     }
     // TODO(dawn:549): HLSL generation outputs the indices into the
     // array_length_from_uniform buffer that were actually used. When the blob cache can
diff --git a/src/dawn/native/d3d11/ShaderModuleD3D11.cpp b/src/dawn/native/d3d11/ShaderModuleD3D11.cpp
index 461b84a..ef476ba 100644
--- a/src/dawn/native/d3d11/ShaderModuleD3D11.cpp
+++ b/src/dawn/native/d3d11/ShaderModuleD3D11.cpp
@@ -103,7 +103,7 @@
             break;
     }
 
-    tint::writer::BindingRemapperOptions bindingRemapper;
+    tint::BindingRemapperOptions bindingRemapper;
     // D3D11 registers like `t3` and `c3` have the same bindingOffset number in
     // the remapping but should not be considered a collision because they have
     // different types.
@@ -118,9 +118,9 @@
 
         for (const auto& [binding, bindingInfo] : groupBindingInfo) {
             BindingIndex bindingIndex = groupLayout->GetBindingIndex(binding);
-            tint::writer::BindingPoint srcBindingPoint{static_cast<uint32_t>(group),
-                                                       static_cast<uint32_t>(binding)};
-            tint::writer::BindingPoint dstBindingPoint{0u, indices[bindingIndex]};
+            tint::BindingPoint srcBindingPoint{static_cast<uint32_t>(group),
+                                               static_cast<uint32_t>(binding)};
+            tint::BindingPoint dstBindingPoint{0u, indices[bindingIndex]};
             if (srcBindingPoint != dstBindingPoint) {
                 bindingRemapper.binding_points.emplace(srcBindingPoint, dstBindingPoint);
             }
@@ -138,13 +138,13 @@
             uint32_t plane1Slot = indices[groupLayout->GetBindingIndex(expansion.plane1)];
             uint32_t paramsSlot = indices[groupLayout->GetBindingIndex(expansion.params)];
             bindingRemapper.binding_points.emplace(
-                tint::writer::BindingPoint{static_cast<uint32_t>(group),
-                                           static_cast<uint32_t>(expansion.plane1)},
-                tint::writer::BindingPoint{0u, plane1Slot});
+                tint::BindingPoint{static_cast<uint32_t>(group),
+                                   static_cast<uint32_t>(expansion.plane1)},
+                tint::BindingPoint{0u, plane1Slot});
             bindingRemapper.binding_points.emplace(
-                tint::writer::BindingPoint{static_cast<uint32_t>(group),
-                                           static_cast<uint32_t>(expansion.params)},
-                tint::writer::BindingPoint{0u, paramsSlot});
+                tint::BindingPoint{static_cast<uint32_t>(group),
+                                   static_cast<uint32_t>(expansion.params)},
+                tint::BindingPoint{0u, paramsSlot});
         }
     }
 
@@ -162,12 +162,11 @@
     req.hlsl.firstIndexOffsetShaderRegister = PipelineLayout::kFirstIndexOffsetBindingNumber;
     // Remap to the desired space and binding, [0, kFirstIndexOffsetConstantBufferSlot].
     {
-        tint::writer::BindingPoint srcBindingPoint{req.hlsl.firstIndexOffsetRegisterSpace,
-                                                   req.hlsl.firstIndexOffsetShaderRegister};
+        tint::BindingPoint srcBindingPoint{req.hlsl.firstIndexOffsetRegisterSpace,
+                                           req.hlsl.firstIndexOffsetShaderRegister};
         // D3D11 (HLSL SM5.0) doesn't support spaces, so we have to put the firstIndex in the
         // default space(0)
-        tint::writer::BindingPoint dstBindingPoint{
-            0u, PipelineLayout::kFirstIndexOffsetConstantBufferSlot};
+        tint::BindingPoint dstBindingPoint{0u, PipelineLayout::kFirstIndexOffsetConstantBufferSlot};
         bindingRemapper.binding_points.emplace(srcBindingPoint, dstBindingPoint);
     }
 
diff --git a/src/dawn/native/d3d12/ShaderModuleD3D12.cpp b/src/dawn/native/d3d12/ShaderModuleD3D12.cpp
index 83dced9..9c282f5 100644
--- a/src/dawn/native/d3d12/ShaderModuleD3D12.cpp
+++ b/src/dawn/native/d3d12/ShaderModuleD3D12.cpp
@@ -116,15 +116,15 @@
         }
     }
 
-    using tint::writer::BindingPoint;
+    using tint::BindingPoint;
 
-    tint::writer::BindingRemapperOptions bindingRemapper;
+    tint::BindingRemapperOptions bindingRemapper;
     // D3D12 registers like `t3` and `c3` have the same bindingOffset number in
     // the remapping but should not be considered a collision because they have
     // different types.
     bindingRemapper.allow_collisions = true;
 
-    tint::writer::ArrayLengthFromUniformOptions arrayLengthFromUniform;
+    tint::ArrayLengthFromUniformOptions arrayLengthFromUniform;
     arrayLengthFromUniform.ubo_binding = {layout->GetDynamicStorageBufferLengthsRegisterSpace(),
                                           layout->GetDynamicStorageBufferLengthsShaderRegister()};
 
diff --git a/src/dawn/native/metal/ShaderModuleMTL.mm b/src/dawn/native/metal/ShaderModuleMTL.mm
index 8808e0a..f0cb6ed 100644
--- a/src/dawn/native/metal/ShaderModuleMTL.mm
+++ b/src/dawn/native/metal/ShaderModuleMTL.mm
@@ -40,9 +40,9 @@
 #define MSL_COMPILATION_REQUEST_MEMBERS(X)                                                       \
     X(SingleShaderStage, stage)                                                                  \
     X(const tint::Program*, inputProgram)                                                        \
-    X(tint::writer::ArrayLengthFromUniformOptions, arrayLengthFromUniform)                       \
-    X(tint::writer::BindingRemapperOptions, bindingRemapper)                                     \
-    X(tint::writer::ExternalTextureOptions, externalTextureOptions)                              \
+    X(tint::ArrayLengthFromUniformOptions, arrayLengthFromUniform)                               \
+    X(tint::BindingRemapperOptions, bindingRemapper)                                             \
+    X(tint::ExternalTextureOptions, externalTextureOptions)                                      \
     X(OptionalVertexPullingTransformConfig, vertexPullingTransformConfig)                        \
     X(std::optional<tint::ast::transform::SubstituteOverride::Config>, substituteOverrideConfig) \
     X(LimitsForCompilationRequest, limits)                                                       \
@@ -113,12 +113,12 @@
     errorStream << "Tint MSL failure:" << std::endl;
 
     // Remap BindingNumber to BindingIndex in WGSL shader
-    using BindingPoint = tint::writer::BindingPoint;
+    using BindingPoint = tint::BindingPoint;
 
-    tint::writer::BindingRemapperOptions bindingRemapper;
+    tint::BindingRemapperOptions bindingRemapper;
     bindingRemapper.allow_collisions = true;
 
-    tint::writer::ArrayLengthFromUniformOptions arrayLengthFromUniform;
+    tint::ArrayLengthFromUniformOptions arrayLengthFromUniform;
     arrayLengthFromUniform.ubo_binding = {0, kBufferLengthBufferSlot};
 
     for (BindGroupIndex group : IterateBitSet(layout->GetBindGroupLayoutsMask())) {
diff --git a/src/dawn/native/opengl/ShaderModuleGL.cpp b/src/dawn/native/opengl/ShaderModuleGL.cpp
index 59b971c..d541f0b 100644
--- a/src/dawn/native/opengl/ShaderModuleGL.cpp
+++ b/src/dawn/native/opengl/ShaderModuleGL.cpp
@@ -55,13 +55,13 @@
     UNREACHABLE();
 }
 
-using BindingMap = std::unordered_map<tint::writer::BindingPoint, tint::writer::BindingPoint>;
+using BindingMap = std::unordered_map<tint::BindingPoint, tint::BindingPoint>;
 
 #define GLSL_COMPILATION_REQUEST_MEMBERS(X)                                                      \
     X(const tint::Program*, inputProgram)                                                        \
     X(std::string, entryPointName)                                                               \
     X(SingleShaderStage, stage)                                                                  \
-    X(tint::writer::ExternalTextureOptions, externalTextureOptions)                              \
+    X(tint::ExternalTextureOptions, externalTextureOptions)                                      \
     X(BindingMap, glBindings)                                                                    \
     X(std::optional<tint::ast::transform::SubstituteOverride::Config>, substituteOverrideConfig) \
     X(LimitsForCompilationRequest, limits)                                                       \
@@ -148,14 +148,14 @@
 
     const OpenGLVersion& version = ToBackend(GetDevice())->GetGL().GetVersion();
 
-    using tint::writer::BindingPoint;
+    using tint::BindingPoint;
     // Since (non-Vulkan) GLSL does not support descriptor sets, generate a
     // mapping from the original group/binding pair to a binding-only
     // value. This mapping will be used by Tint to remap all global
     // variables to the 1D space.
     const BindingInfoArray& moduleBindingInfo =
         GetEntryPoint(programmableStage.entryPoint).bindings;
-    std::unordered_map<tint::writer::BindingPoint, tint::writer::BindingPoint> glBindings;
+    std::unordered_map<BindingPoint, BindingPoint> glBindings;
     for (BindGroupIndex group : IterateBitSet(layout->GetBindGroupLayoutsMask())) {
         const BindGroupLayoutBase* bgl = layout->GetBindGroupLayout(group);
         const auto& groupBindingInfo = moduleBindingInfo[group];
diff --git a/src/dawn/native/vulkan/ShaderModuleVk.cpp b/src/dawn/native/vulkan/ShaderModuleVk.cpp
index 969720c..5e5ed7e 100644
--- a/src/dawn/native/vulkan/ShaderModuleVk.cpp
+++ b/src/dawn/native/vulkan/ShaderModuleVk.cpp
@@ -166,8 +166,8 @@
 #define SPIRV_COMPILATION_REQUEST_MEMBERS(X)                                                     \
     X(SingleShaderStage, stage)                                                                  \
     X(const tint::Program*, inputProgram)                                                        \
-    X(tint::writer::BindingRemapperOptions, bindingRemapper)                                     \
-    X(tint::writer::ExternalTextureOptions, externalTextureOptions)                              \
+    X(tint::BindingRemapperOptions, bindingRemapper)                                             \
+    X(tint::ExternalTextureOptions, externalTextureOptions)                                      \
     X(std::optional<tint::ast::transform::SubstituteOverride::Config>, substituteOverrideConfig) \
     X(LimitsForCompilationRequest, limits)                                                       \
     X(std::string_view, entryPointName)                                                          \
@@ -206,9 +206,9 @@
     // Creation of module and spirv is deferred to this point when using tint generator
 
     // Remap BindingNumber to BindingIndex in WGSL shader
-    using BindingPoint = tint::writer::BindingPoint;
+    using BindingPoint = tint::BindingPoint;
 
-    tint::writer::BindingRemapperOptions bindingRemapper;
+    tint::BindingRemapperOptions bindingRemapper;
 
     const BindingInfoArray& moduleBindingInfo =
         GetEntryPoint(programmableStage.entryPoint.c_str()).bindings;
@@ -231,7 +231,7 @@
 
     // Transform external textures into the binding locations specified in the bgl
     // TODO(dawn:1082): Replace this block with BuildExternalTextureTransformBindings.
-    tint::writer::ExternalTextureOptions externalTextureOptions;
+    tint::ExternalTextureOptions externalTextureOptions;
     for (BindGroupIndex i : IterateBitSet(layout->GetBindGroupLayoutsMask())) {
         const BindGroupLayoutBase* bgl = layout->GetBindGroupLayout(i);
 
diff --git a/src/dawn/tests/unittests/native/StreamTests.cpp b/src/dawn/tests/unittests/native/StreamTests.cpp
index c6f5f08..3442690 100644
--- a/src/dawn/tests/unittests/native/StreamTests.cpp
+++ b/src/dawn/tests/unittests/native/StreamTests.cpp
@@ -258,9 +258,9 @@
     EXPECT_CACHE_KEY_EQ(m, expected);
 }
 
-// Test that ByteVectorSink serializes tint::writer::BindingPoint as expected.
+// Test that ByteVectorSink serializes tint::BindingPoint as expected.
 TEST(SerializeTests, TintSemBindingPoint) {
-    tint::writer::BindingPoint bp{3, 6};
+    tint::BindingPoint bp{3, 6};
 
     ByteVectorSink expected;
     StreamIn(&expected, uint32_t(3), uint32_t(6));
@@ -268,12 +268,12 @@
     EXPECT_CACHE_KEY_EQ(bp, expected);
 }
 
-// Test that ByteVectorSink serializes tint::writer::ExternalTextureOptions::BindingPoints
+// Test that ByteVectorSink serializes tint::ExternalTextureOptions::BindingPoints
 // as expected.
 TEST(SerializeTests, TintTransformBindingPoints) {
-    tint::writer::ExternalTextureOptions::BindingPoints points{
-        tint::writer::BindingPoint{1, 4},
-        tint::writer::BindingPoint{3, 7},
+    tint::ExternalTextureOptions::BindingPoints points{
+        tint::BindingPoint{1, 4},
+        tint::BindingPoint{3, 7},
     };
 
     ByteVectorSink expected;
diff --git a/src/tint/BUILD.gn b/src/tint/BUILD.gn
index 07f598c..12990f5 100644
--- a/src/tint/BUILD.gn
+++ b/src/tint/BUILD.gn
@@ -714,7 +714,6 @@
     "lang/wgsl/sem/array_count.h",
     "lang/wgsl/sem/behavior.cc",
     "lang/wgsl/sem/behavior.h",
-    "lang/wgsl/sem/binding_point.h",
     "lang/wgsl/sem/block_statement.cc",
     "lang/wgsl/sem/block_statement.h",
     "lang/wgsl/sem/break_if_statement.cc",
@@ -980,13 +979,6 @@
     "utils/text/float_to_string.h",
     "utils/text/text_generator.cc",
     "utils/text/text_generator.h",
-    "writer/array_length_from_uniform_options.cc",
-    "writer/array_length_from_uniform_options.h",
-    "writer/binding_point.h",
-    "writer/binding_remapper_options.cc",
-    "writer/binding_remapper_options.h",
-    "writer/external_texture_options.cc",
-    "writer/external_texture_options.h",
   ]
 
   deps = [
diff --git a/src/tint/CMakeLists.txt b/src/tint/CMakeLists.txt
index f702c55..b6570c2 100644
--- a/src/tint/CMakeLists.txt
+++ b/src/tint/CMakeLists.txt
@@ -451,7 +451,6 @@
   lang/wgsl/sem/array_count.h
   lang/wgsl/sem/behavior.cc
   lang/wgsl/sem/behavior.h
-  lang/wgsl/sem/binding_point.h
   lang/wgsl/sem/block_statement.cc
   lang/wgsl/sem/block_statement.h
   lang/wgsl/sem/break_if_statement.cc
@@ -570,13 +569,6 @@
   utils/text/text_generator.cc
   utils/text/text_generator.h
   utils/traits/traits.h
-  writer/array_length_from_uniform_options.cc
-  writer/array_length_from_uniform_options.h
-  writer/binding_point.h
-  writer/binding_remapper_options.cc
-  writer/binding_remapper_options.h
-  writer/external_texture_options.cc
-  writer/external_texture_options.h
 )
 
 tint_generated(lang/core/builtin/access BENCH TEST)
diff --git a/src/tint/cmd/generate_external_texture_bindings.cc b/src/tint/cmd/generate_external_texture_bindings.cc
index 1a03427..d9ddb73 100644
--- a/src/tint/cmd/generate_external_texture_bindings.cc
+++ b/src/tint/cmd/generate_external_texture_bindings.cc
@@ -21,19 +21,18 @@
 #include "src/tint/lang/core/type/external_texture.h"
 #include "src/tint/lang/wgsl/ast/module.h"
 #include "src/tint/lang/wgsl/program/program.h"
-#include "src/tint/lang/wgsl/sem/binding_point.h"
 #include "src/tint/lang/wgsl/sem/variable.h"
+#include "tint/binding_point.h"
 
 namespace tint::cmd {
 
-writer::ExternalTextureOptions::BindingsMap GenerateExternalTextureBindings(
-    const Program* program) {
+ExternalTextureOptions::BindingsMap GenerateExternalTextureBindings(const Program* program) {
     // TODO(tint:1491): Use Inspector once we can get binding info for all
     // variables, not just those referenced by entry points.
 
     // Collect next valid binding number per group
     std::unordered_map<uint32_t, uint32_t> group_to_next_binding_number;
-    std::vector<sem::BindingPoint> ext_tex_bps;
+    std::vector<tint::BindingPoint> ext_tex_bps;
     for (auto* var : program->AST().GlobalVariables()) {
         if (auto* sem_var = program->Sem().Get(var)->As<sem::GlobalVariable>()) {
             if (auto bp = sem_var->BindingPoint()) {
@@ -47,12 +46,11 @@
         }
     }
 
-    writer::ExternalTextureOptions::BindingsMap new_bindings_map;
+    ExternalTextureOptions::BindingsMap new_bindings_map;
     for (auto bp : ext_tex_bps) {
         uint32_t g = bp.group;
         uint32_t& next_num = group_to_next_binding_number[g];
-        auto new_bps =
-            writer::ExternalTextureOptions::BindingPoints{{g, next_num++}, {g, next_num++}};
+        auto new_bps = ExternalTextureOptions::BindingPoints{{g, next_num++}, {g, next_num++}};
 
         new_bindings_map[bp] = new_bps;
     }
diff --git a/src/tint/cmd/generate_external_texture_bindings.h b/src/tint/cmd/generate_external_texture_bindings.h
index c6a842d..acab6cf 100644
--- a/src/tint/cmd/generate_external_texture_bindings.h
+++ b/src/tint/cmd/generate_external_texture_bindings.h
@@ -15,11 +15,12 @@
 #ifndef SRC_TINT_CMD_GENERATE_EXTERNAL_TEXTURE_BINDINGS_H_
 #define SRC_TINT_CMD_GENERATE_EXTERNAL_TEXTURE_BINDINGS_H_
 
+#include "tint/external_texture_options.h"
 #include "tint/tint.h"
 
 namespace tint::cmd {
 
-writer::ExternalTextureOptions::BindingsMap GenerateExternalTextureBindings(const Program* program);
+ExternalTextureOptions::BindingsMap GenerateExternalTextureBindings(const Program* program);
 
 }  // namespace tint::cmd
 
diff --git a/src/tint/cmd/generate_external_texture_bindings_test.cc b/src/tint/cmd/generate_external_texture_bindings_test.cc
index 740a16b..a7de60b 100644
--- a/src/tint/cmd/generate_external_texture_bindings_test.cc
+++ b/src/tint/cmd/generate_external_texture_bindings_test.cc
@@ -17,7 +17,7 @@
 #include "gtest/gtest.h"
 #include "src/tint/cmd/generate_external_texture_bindings.h"
 #include "src/tint/lang/wgsl/program/program_builder.h"
-#include "src/tint/writer/binding_point.h"
+#include "tint/binding_point.h"
 
 namespace tint::cmd {
 namespace {
@@ -46,7 +46,7 @@
     auto bindings = GenerateExternalTextureBindings(&program);
     ASSERT_EQ(bindings.size(), 1u);
 
-    auto to = bindings[writer::BindingPoint{0, 0}];
+    auto to = bindings[BindingPoint{0, 0}];
     ASSERT_EQ(to.plane_1.group, 0u);
     ASSERT_EQ(to.params.group, 0u);
     ASSERT_EQ(to.plane_1.binding, 1u);
@@ -63,13 +63,13 @@
     auto bindings = GenerateExternalTextureBindings(&program);
     ASSERT_EQ(bindings.size(), 2u);
 
-    auto to0 = bindings[writer::BindingPoint{0, 0}];
+    auto to0 = bindings[BindingPoint{0, 0}];
     ASSERT_EQ(to0.plane_1.group, 0u);
     ASSERT_EQ(to0.params.group, 0u);
     ASSERT_EQ(to0.plane_1.binding, 2u);
     ASSERT_EQ(to0.params.binding, 3u);
 
-    auto to1 = bindings[writer::BindingPoint{0, 1}];
+    auto to1 = bindings[BindingPoint{0, 1}];
     ASSERT_EQ(to1.plane_1.group, 0u);
     ASSERT_EQ(to1.params.group, 0u);
     ASSERT_EQ(to1.plane_1.binding, 4u);
@@ -86,13 +86,13 @@
     auto bindings = GenerateExternalTextureBindings(&program);
     ASSERT_EQ(bindings.size(), 2u);
 
-    auto to0 = bindings[writer::BindingPoint{0, 0}];
+    auto to0 = bindings[BindingPoint{0, 0}];
     ASSERT_EQ(to0.plane_1.group, 0u);
     ASSERT_EQ(to0.params.group, 0u);
     ASSERT_EQ(to0.plane_1.binding, 1u);
     ASSERT_EQ(to0.params.binding, 2u);
 
-    auto to1 = bindings[writer::BindingPoint{1, 0}];
+    auto to1 = bindings[BindingPoint{1, 0}];
     ASSERT_EQ(to1.plane_1.group, 1u);
     ASSERT_EQ(to1.params.group, 1u);
     ASSERT_EQ(to1.plane_1.binding, 1u);
@@ -112,13 +112,13 @@
     auto bindings = GenerateExternalTextureBindings(&program);
     ASSERT_EQ(bindings.size(), 2u);
 
-    auto to0 = bindings[writer::BindingPoint{0, 1}];
+    auto to0 = bindings[BindingPoint{0, 1}];
     ASSERT_EQ(to0.plane_1.group, 0u);
     ASSERT_EQ(to0.params.group, 0u);
     ASSERT_EQ(to0.plane_1.binding, 5u);
     ASSERT_EQ(to0.params.binding, 6u);
 
-    auto to1 = bindings[writer::BindingPoint{0, 3}];
+    auto to1 = bindings[BindingPoint{0, 3}];
     ASSERT_EQ(to1.plane_1.group, 0u);
     ASSERT_EQ(to1.params.group, 0u);
     ASSERT_EQ(to1.plane_1.binding, 7u);
diff --git a/src/tint/cmd/loopy.cc b/src/tint/cmd/loopy.cc
index 365a54e..6ba6049 100644
--- a/src/tint/cmd/loopy.cc
+++ b/src/tint/cmd/loopy.cc
@@ -218,11 +218,11 @@
     tint::writer::msl::Options gen_options;
     gen_options.external_texture_options.bindings_map =
         tint::cmd::GenerateExternalTextureBindings(input_program);
-    gen_options.array_length_from_uniform.ubo_binding = tint::writer::BindingPoint{0, 30};
-    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(
-        tint::writer::BindingPoint{0, 0}, 0);
-    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(
-        tint::writer::BindingPoint{0, 1}, 1);
+    gen_options.array_length_from_uniform.ubo_binding = tint::BindingPoint{0, 30};
+    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 0},
+                                                                          0);
+    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 1},
+                                                                          1);
     auto result = tint::writer::msl::Generate(input_program, gen_options);
     if (!result.success) {
         tint::cmd::PrintWGSL(std::cerr, *program);
diff --git a/src/tint/cmd/main.cc b/src/tint/cmd/main.cc
index e8e194e..f5e2d0e 100644
--- a/src/tint/cmd/main.cc
+++ b/src/tint/cmd/main.cc
@@ -137,7 +137,7 @@
     std::string dxc_path;
     std::string xcrun_path;
     tint::utils::Hashmap<std::string, double, 8> overrides;
-    std::optional<tint::sem::BindingPoint> hlsl_root_constant_binding_point;
+    std::optional<tint::BindingPoint> hlsl_root_constant_binding_point;
 
 #if TINT_BUILD_IR
     bool dump_ir = false;
@@ -403,8 +403,7 @@
                       << std::endl;
             return false;
         }
-        opts->hlsl_root_constant_binding_point =
-            tint::sem::BindingPoint{group.Get(), binding.Get()};
+        opts->hlsl_root_constant_binding_point = tint::BindingPoint{group.Get(), binding.Get()};
     }
 
     auto files = result.Get();
@@ -627,11 +626,11 @@
     gen_options.disable_workgroup_init = options.disable_workgroup_init;
     gen_options.external_texture_options.bindings_map =
         tint::cmd::GenerateExternalTextureBindings(input_program);
-    gen_options.array_length_from_uniform.ubo_binding = tint::writer::BindingPoint{0, 30};
-    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(
-        tint::writer::BindingPoint{0, 0}, 0);
-    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(
-        tint::writer::BindingPoint{0, 1}, 1);
+    gen_options.array_length_from_uniform.ubo_binding = tint::BindingPoint{0, 30};
+    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 0},
+                                                                          0);
+    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 1},
+                                                                          1);
     auto result = tint::writer::msl::Generate(input_program, gen_options);
     if (!result.success) {
         tint::cmd::PrintWGSL(std::cerr, *program);
diff --git a/src/tint/fuzzers/tint_common_fuzzer.cc b/src/tint/fuzzers/tint_common_fuzzer.cc
index 806ee2c..369ab4f 100644
--- a/src/tint/fuzzers/tint_common_fuzzer.cc
+++ b/src/tint/fuzzers/tint_common_fuzzer.cc
@@ -35,10 +35,10 @@
 #include "src/tint/lang/wgsl/ast/module.h"
 #include "src/tint/lang/wgsl/helpers/flatten_bindings.h"
 #include "src/tint/lang/wgsl/program/program.h"
-#include "src/tint/lang/wgsl/sem/binding_point.h"
 #include "src/tint/lang/wgsl/sem/variable.h"
 #include "src/tint/utils/diagnostic/formatter.h"
 #include "src/tint/utils/math/hash.h"
+#include "tint/binding_point.h"
 
 namespace tint::fuzzers {
 
@@ -246,7 +246,7 @@
         // Gather external texture binding information
         // Collect next valid binding number per group
         std::unordered_map<uint32_t, uint32_t> group_to_next_binding_number;
-        std::vector<sem::BindingPoint> ext_tex_bps;
+        std::vector<BindingPoint> ext_tex_bps;
         for (auto* var : program.AST().GlobalVariables()) {
             if (auto* sem_var = program.Sem().Get(var)->As<sem::GlobalVariable>()) {
                 if (auto bp = sem_var->BindingPoint()) {
@@ -260,12 +260,11 @@
             }
         }
 
-        writer::ExternalTextureOptions::BindingsMap new_bindings_map;
+        ExternalTextureOptions::BindingsMap new_bindings_map;
         for (auto bp : ext_tex_bps) {
             uint32_t g = bp.group;
             uint32_t& next_num = group_to_next_binding_number[g];
-            auto new_bps =
-                writer::ExternalTextureOptions::BindingPoints{{g, next_num++}, {g, next_num++}};
+            auto new_bps = ExternalTextureOptions::BindingPoints{{g, next_num++}, {g, next_num++}};
 
             new_bindings_map[bp] = new_bps;
         }
diff --git a/src/tint/lang/glsl/ast_writer/generator.h b/src/tint/lang/glsl/ast_writer/generator.h
index a5f8075..4340083 100644
--- a/src/tint/lang/glsl/ast_writer/generator.h
+++ b/src/tint/lang/glsl/ast_writer/generator.h
@@ -25,9 +25,9 @@
 #include "src/tint/lang/glsl/ast_writer/options.h"
 #include "src/tint/lang/glsl/ast_writer/version.h"
 #include "src/tint/lang/wgsl/ast/pipeline_stage.h"
-#include "src/tint/lang/wgsl/sem/binding_point.h"
 #include "src/tint/lang/wgsl/sem/sampler_texture_pair.h"
-#include "src/tint/writer/external_texture_options.h"
+#include "tint/binding_point.h"
+#include "tint/external_texture_options.h"
 
 // Forward declarations
 namespace tint {
diff --git a/src/tint/lang/glsl/ast_writer/options.h b/src/tint/lang/glsl/ast_writer/options.h
index c120bb6..c1de809 100644
--- a/src/tint/lang/glsl/ast_writer/options.h
+++ b/src/tint/lang/glsl/ast_writer/options.h
@@ -21,7 +21,7 @@
 #include "src/tint/lang/core/builtin/access.h"
 #include "src/tint/lang/glsl/ast_writer/version.h"
 #include "src/tint/lang/wgsl/sem/sampler_texture_pair.h"
-#include "src/tint/writer/external_texture_options.h"
+#include "tint/external_texture_options.h"
 
 namespace tint::writer::glsl {
 
@@ -43,15 +43,15 @@
     BindingMap binding_map;
 
     /// The binding point to use for placeholder samplers.
-    sem::BindingPoint placeholder_binding_point;
+    BindingPoint placeholder_binding_point;
 
     /// A map of old binding point to new binding point for the BindingRemapper
     /// transform
-    std::unordered_map<sem::BindingPoint, sem::BindingPoint> binding_points;
+    std::unordered_map<BindingPoint, BindingPoint> binding_points;
 
     /// A map of old binding point to new access control for the BindingRemapper
     /// transform
-    std::unordered_map<sem::BindingPoint, builtin::Access> access_controls;
+    std::unordered_map<BindingPoint, builtin::Access> access_controls;
 
     /// Set to `true` to disable software robustness that prevents out-of-bounds accesses.
     bool disable_robustness = false;
diff --git a/src/tint/lang/hlsl/ast_writer/generator.h b/src/tint/lang/hlsl/ast_writer/generator.h
index 94dabe3..c70a302 100644
--- a/src/tint/lang/hlsl/ast_writer/generator.h
+++ b/src/tint/lang/hlsl/ast_writer/generator.h
@@ -24,12 +24,12 @@
 #include <vector>
 
 #include "src/tint/lang/wgsl/ast/pipeline_stage.h"
-#include "src/tint/lang/wgsl/sem/binding_point.h"
 #include "src/tint/utils/containers/bitset.h"
 #include "src/tint/utils/reflection/reflection.h"
-#include "src/tint/writer/array_length_from_uniform_options.h"
-#include "src/tint/writer/binding_remapper_options.h"
-#include "src/tint/writer/external_texture_options.h"
+#include "tint/array_length_from_uniform_options.h"
+#include "tint/binding_point.h"
+#include "tint/binding_remapper_options.h"
+#include "tint/external_texture_options.h"
 
 // Forward declarations
 namespace tint {
@@ -54,7 +54,7 @@
     bool disable_robustness = false;
 
     /// The binding point to use for information passed via root constants.
-    std::optional<sem::BindingPoint> root_constant_binding_point;
+    std::optional<BindingPoint> root_constant_binding_point;
 
     /// Set to `true` to disable workgroup memory zero initialization
     bool disable_workgroup_init = false;
@@ -80,7 +80,7 @@
     bool polyfill_reflect_vec2_f32 = false;
 
     /// The binding points that will be ignored in the rebustness transform.
-    std::vector<sem::BindingPoint> binding_points_ignored_in_robustness_transform;
+    std::vector<BindingPoint> binding_points_ignored_in_robustness_transform;
 
     /// Reflect the fields of this class so that it can be used by tint::ForeachField()
     TINT_REFLECT(disable_robustness,
diff --git a/src/tint/lang/hlsl/ast_writer/generator_impl.cc b/src/tint/lang/hlsl/ast_writer/generator_impl.cc
index 7beebb2..e6aa5e5 100644
--- a/src/tint/lang/hlsl/ast_writer/generator_impl.cc
+++ b/src/tint/lang/hlsl/ast_writer/generator_impl.cc
@@ -142,10 +142,10 @@
 // Helper for writing " : register(RX, spaceY)", where R is the register, X is
 // the binding point binding value, and Y is the binding point group value.
 struct RegisterAndSpace {
-    RegisterAndSpace(char r, sem::BindingPoint bp) : reg(r), binding_point(bp) {}
+    RegisterAndSpace(char r, BindingPoint bp) : reg(r), binding_point(bp) {}
 
     const char reg;
-    sem::BindingPoint const binding_point;
+    BindingPoint const binding_point;
 };
 
 utils::StringStream& operator<<(utils::StringStream& s, const RegisterAndSpace& rs) {
@@ -195,7 +195,7 @@
 
         ast::transform::Robustness::Config config = {};
 
-        config.bindings_ignored = std::unordered_set<sem::BindingPoint>(
+        config.bindings_ignored = std::unordered_set<BindingPoint>(
             options.binding_points_ignored_in_robustness_transform.cbegin(),
             options.binding_points_ignored_in_robustness_transform.cend());
 
diff --git a/src/tint/lang/hlsl/ast_writer/generator_impl.h b/src/tint/lang/hlsl/ast_writer/generator_impl.h
index e9945a0..2cd5b78 100644
--- a/src/tint/lang/hlsl/ast_writer/generator_impl.h
+++ b/src/tint/lang/hlsl/ast_writer/generator_impl.h
@@ -25,11 +25,11 @@
 #include "src/tint/lang/hlsl/ast_writer/generator.h"
 #include "src/tint/lang/wgsl/ast/transform/decompose_memory_access.h"
 #include "src/tint/lang/wgsl/program/program_builder.h"
-#include "src/tint/lang/wgsl/sem/binding_point.h"
 #include "src/tint/utils/containers/scope_stack.h"
 #include "src/tint/utils/math/hash.h"
 #include "src/tint/utils/text/text_generator.h"
-#include "src/tint/writer/array_length_from_uniform_options.h"
+#include "tint/array_length_from_uniform_options.h"
+#include "tint/binding_point.h"
 
 // Forward declarations
 namespace tint::sem {
diff --git a/src/tint/lang/hlsl/ast_writer/generator_impl_sanitizer_test.cc b/src/tint/lang/hlsl/ast_writer/generator_impl_sanitizer_test.cc
index d716b6b..c72ce7a 100644
--- a/src/tint/lang/hlsl/ast_writer/generator_impl_sanitizer_test.cc
+++ b/src/tint/lang/hlsl/ast_writer/generator_impl_sanitizer_test.cc
@@ -147,7 +147,7 @@
 
     Options options;
     options.array_length_from_uniform.ubo_binding = {3, 4};
-    options.array_length_from_uniform.bindpoint_to_size_index.emplace(sem::BindingPoint{2, 2}, 7u);
+    options.array_length_from_uniform.bindpoint_to_size_index.emplace(BindingPoint{2, 2}, 7u);
     GeneratorImpl& gen = SanitizeAndBuild(options);
 
     ASSERT_TRUE(gen.Generate()) << gen.Diagnostics();
diff --git a/src/tint/lang/msl/ast_writer/generator.h b/src/tint/lang/msl/ast_writer/generator.h
index ffaf9dd..c2a1d42 100644
--- a/src/tint/lang/msl/ast_writer/generator.h
+++ b/src/tint/lang/msl/ast_writer/generator.h
@@ -22,9 +22,9 @@
 #include <vector>
 
 #include "src/tint/utils/reflection/reflection.h"
-#include "src/tint/writer/array_length_from_uniform_options.h"
-#include "src/tint/writer/binding_remapper_options.h"
-#include "src/tint/writer/external_texture_options.h"
+#include "tint/array_length_from_uniform_options.h"
+#include "tint/binding_remapper_options.h"
+#include "tint/external_texture_options.h"
 
 // Forward declarations
 namespace tint {
diff --git a/src/tint/lang/msl/ast_writer/generator_bench.cc b/src/tint/lang/msl/ast_writer/generator_bench.cc
index 8e7415d..1f816dd 100644
--- a/src/tint/lang/msl/ast_writer/generator_bench.cc
+++ b/src/tint/lang/msl/ast_writer/generator_bench.cc
@@ -30,29 +30,29 @@
     auto& program = std::get<bench::ProgramAndFile>(res).program;
 
     tint::writer::msl::Options gen_options = {};
-    gen_options.array_length_from_uniform.ubo_binding = tint::writer::BindingPoint{0, 30};
-    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(
-        tint::writer::BindingPoint{0, 0}, 0);
-    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(
-        tint::writer::BindingPoint{0, 1}, 1);
-    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(
-        tint::writer::BindingPoint{0, 2}, 2);
-    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(
-        tint::writer::BindingPoint{0, 3}, 3);
-    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(
-        tint::writer::BindingPoint{0, 4}, 4);
-    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(
-        tint::writer::BindingPoint{0, 5}, 5);
-    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(
-        tint::writer::BindingPoint{0, 6}, 6);
-    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(
-        tint::writer::BindingPoint{0, 7}, 7);
+    gen_options.array_length_from_uniform.ubo_binding = tint::BindingPoint{0, 30};
+    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 0},
+                                                                          0);
+    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 1},
+                                                                          1);
+    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 2},
+                                                                          2);
+    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 3},
+                                                                          3);
+    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 4},
+                                                                          4);
+    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 5},
+                                                                          5);
+    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 6},
+                                                                          6);
+    gen_options.array_length_from_uniform.bindpoint_to_size_index.emplace(tint::BindingPoint{0, 7},
+                                                                          7);
 
     uint32_t next_binding_point = 0;
     for (auto* var : program.AST().GlobalVariables()) {
         if (auto* var_sem = program.Sem().Get(var)->As<sem::GlobalVariable>()) {
             if (auto bp = var_sem->BindingPoint()) {
-                gen_options.binding_remapper_options.binding_points[*bp] = sem::BindingPoint{
+                gen_options.binding_remapper_options.binding_points[*bp] = BindingPoint{
                     0,                     // group
                     next_binding_point++,  // binding
                 };
diff --git a/src/tint/lang/msl/ast_writer/generator_impl.h b/src/tint/lang/msl/ast_writer/generator_impl.h
index 0dd560b..c8d4528 100644
--- a/src/tint/lang/msl/ast_writer/generator_impl.h
+++ b/src/tint/lang/msl/ast_writer/generator_impl.h
@@ -28,7 +28,7 @@
 #include "src/tint/utils/containers/scope_stack.h"
 #include "src/tint/utils/text/string_stream.h"
 #include "src/tint/utils/text/text_generator.h"
-#include "src/tint/writer/array_length_from_uniform_options.h"
+#include "tint/array_length_from_uniform_options.h"
 
 namespace tint::sem {
 class Builtin;
diff --git a/src/tint/lang/msl/ast_writer/generator_impl_sanitizer_test.cc b/src/tint/lang/msl/ast_writer/generator_impl_sanitizer_test.cc
index dee22b1..fc63f46 100644
--- a/src/tint/lang/msl/ast_writer/generator_impl_sanitizer_test.cc
+++ b/src/tint/lang/msl/ast_writer/generator_impl_sanitizer_test.cc
@@ -40,8 +40,8 @@
          });
 
     Options opts = DefaultOptions();
-    opts.array_length_from_uniform.ubo_binding = sem::BindingPoint{0, 30};
-    opts.array_length_from_uniform.bindpoint_to_size_index.emplace(sem::BindingPoint{2, 1}, 1);
+    opts.array_length_from_uniform.ubo_binding = BindingPoint{0, 30};
+    opts.array_length_from_uniform.bindpoint_to_size_index.emplace(BindingPoint{2, 1}, 1);
     GeneratorImpl& gen = SanitizeAndBuild(opts);
 
     ASSERT_TRUE(gen.Generate()) << gen.Diagnostics();
@@ -97,8 +97,8 @@
          });
 
     Options opts = DefaultOptions();
-    opts.array_length_from_uniform.ubo_binding = sem::BindingPoint{0, 30};
-    opts.array_length_from_uniform.bindpoint_to_size_index.emplace(sem::BindingPoint{2, 1}, 1);
+    opts.array_length_from_uniform.ubo_binding = BindingPoint{0, 30};
+    opts.array_length_from_uniform.bindpoint_to_size_index.emplace(BindingPoint{2, 1}, 1);
     GeneratorImpl& gen = SanitizeAndBuild(opts);
 
     ASSERT_TRUE(gen.Generate()) << gen.Diagnostics();
@@ -158,8 +158,8 @@
          });
 
     Options opts = DefaultOptions();
-    opts.array_length_from_uniform.ubo_binding = sem::BindingPoint{0, 30};
-    opts.array_length_from_uniform.bindpoint_to_size_index.emplace(sem::BindingPoint{2, 1}, 1);
+    opts.array_length_from_uniform.ubo_binding = BindingPoint{0, 30};
+    opts.array_length_from_uniform.bindpoint_to_size_index.emplace(BindingPoint{2, 1}, 1);
     GeneratorImpl& gen = SanitizeAndBuild(opts);
 
     ASSERT_TRUE(gen.Generate()) << gen.Diagnostics();
@@ -218,8 +218,8 @@
 
     Options options;
     options.array_length_from_uniform.ubo_binding = {0, 29};
-    options.array_length_from_uniform.bindpoint_to_size_index.emplace(sem::BindingPoint{0, 1}, 7u);
-    options.array_length_from_uniform.bindpoint_to_size_index.emplace(sem::BindingPoint{0, 2}, 2u);
+    options.array_length_from_uniform.bindpoint_to_size_index.emplace(BindingPoint{0, 1}, 7u);
+    options.array_length_from_uniform.bindpoint_to_size_index.emplace(BindingPoint{0, 2}, 2u);
     GeneratorImpl& gen = SanitizeAndBuild(options);
 
     ASSERT_TRUE(gen.Generate()) << gen.Diagnostics();
@@ -277,7 +277,7 @@
 
     Options options;
     options.array_length_from_uniform.ubo_binding = {0, 29};
-    options.array_length_from_uniform.bindpoint_to_size_index.emplace(sem::BindingPoint{0, 2}, 2u);
+    options.array_length_from_uniform.bindpoint_to_size_index.emplace(BindingPoint{0, 2}, 2u);
     GeneratorImpl& gen = SanitizeAndBuild(options);
 
     ASSERT_FALSE(gen.Generate());
diff --git a/src/tint/lang/spirv/ast_writer/generator.h b/src/tint/lang/spirv/ast_writer/generator.h
index 3ce4ecb..6df49ca 100644
--- a/src/tint/lang/spirv/ast_writer/generator.h
+++ b/src/tint/lang/spirv/ast_writer/generator.h
@@ -20,8 +20,8 @@
 #include <vector>
 
 #include "src/tint/utils/reflection/reflection.h"
-#include "src/tint/writer/binding_remapper_options.h"
-#include "src/tint/writer/external_texture_options.h"
+#include "tint/binding_remapper_options.h"
+#include "tint/external_texture_options.h"
 
 // Forward declarations
 namespace tint {
diff --git a/src/tint/lang/wgsl/ast/transform/array_length_from_uniform.cc b/src/tint/lang/wgsl/ast/transform/array_length_from_uniform.cc
index 4f3e139..2a88fee 100644
--- a/src/tint/lang/wgsl/ast/transform/array_length_from_uniform.cc
+++ b/src/tint/lang/wgsl/ast/transform/array_length_from_uniform.cc
@@ -258,7 +258,7 @@
     return State{src, inputs, outputs}.Run();
 }
 
-ArrayLengthFromUniform::Config::Config(sem::BindingPoint ubo_bp) : ubo_binding(ubo_bp) {}
+ArrayLengthFromUniform::Config::Config(BindingPoint ubo_bp) : ubo_binding(ubo_bp) {}
 ArrayLengthFromUniform::Config::Config(const Config&) = default;
 ArrayLengthFromUniform::Config& ArrayLengthFromUniform::Config::operator=(const Config&) = default;
 ArrayLengthFromUniform::Config::~Config() = default;
diff --git a/src/tint/lang/wgsl/ast/transform/array_length_from_uniform.h b/src/tint/lang/wgsl/ast/transform/array_length_from_uniform.h
index a3be8a1..cc0c8bd 100644
--- a/src/tint/lang/wgsl/ast/transform/array_length_from_uniform.h
+++ b/src/tint/lang/wgsl/ast/transform/array_length_from_uniform.h
@@ -19,7 +19,7 @@
 #include <unordered_set>
 
 #include "src/tint/lang/wgsl/ast/transform/transform.h"
-#include "src/tint/lang/wgsl/sem/binding_point.h"
+#include "tint/binding_point.h"
 
 // Forward declarations
 namespace tint {
@@ -63,7 +63,7 @@
     struct Config final : public utils::Castable<Config, Data> {
         /// Constructor
         /// @param ubo_bp the binding point to use for the generated uniform buffer.
-        explicit Config(sem::BindingPoint ubo_bp);
+        explicit Config(BindingPoint ubo_bp);
 
         /// Copy constructor
         Config(const Config&);
@@ -76,10 +76,10 @@
         ~Config() override;
 
         /// The binding point to use for the generated uniform buffer.
-        sem::BindingPoint ubo_binding;
+        BindingPoint ubo_binding;
 
         /// The mapping from binding point to the index for the buffer size lookup.
-        std::unordered_map<sem::BindingPoint, uint32_t> bindpoint_to_size_index;
+        std::unordered_map<BindingPoint, uint32_t> bindpoint_to_size_index;
     };
 
     /// Information produced about what the transform did.
diff --git a/src/tint/lang/wgsl/ast/transform/array_length_from_uniform_test.cc b/src/tint/lang/wgsl/ast/transform/array_length_from_uniform_test.cc
index c17d898..7ee04c3 100644
--- a/src/tint/lang/wgsl/ast/transform/array_length_from_uniform_test.cc
+++ b/src/tint/lang/wgsl/ast/transform/array_length_from_uniform_test.cc
@@ -29,7 +29,7 @@
     auto* src = R"()";
 
     ArrayLengthFromUniform::Config cfg({0, 30u});
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{0, 0}, 0);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{0, 0}, 0);
 
     DataMap data;
     data.Add<ArrayLengthFromUniform::Config>(std::move(cfg));
@@ -52,7 +52,7 @@
 )";
 
     ArrayLengthFromUniform::Config cfg({0, 30u});
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{0, 0}, 0);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{0, 0}, 0);
 
     DataMap data;
     data.Add<ArrayLengthFromUniform::Config>(std::move(cfg));
@@ -76,7 +76,7 @@
 )";
 
     ArrayLengthFromUniform::Config cfg({0, 30u});
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{0, 0}, 0);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{0, 0}, 0);
 
     DataMap data;
     data.Add<ArrayLengthFromUniform::Config>(std::move(cfg));
@@ -132,7 +132,7 @@
 )";
 
     ArrayLengthFromUniform::Config cfg({0, 30u});
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{0, 0}, 0);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{0, 0}, 0);
 
     DataMap data;
     data.Add<ArrayLengthFromUniform::Config>(std::move(cfg));
@@ -181,7 +181,7 @@
 )";
 
     ArrayLengthFromUniform::Config cfg({0, 30u});
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{0, 0}, 0);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{0, 0}, 0);
 
     DataMap data;
     data.Add<ArrayLengthFromUniform::Config>(std::move(cfg));
@@ -269,11 +269,11 @@
 )";
 
     ArrayLengthFromUniform::Config cfg({0, 30u});
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{0, 2u}, 0);
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{1u, 2u}, 1);
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{2u, 2u}, 2);
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{3u, 2u}, 3);
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{4u, 2u}, 4);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{0, 2u}, 0);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{1u, 2u}, 1);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{2u, 2u}, 2);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{3u, 2u}, 3);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{4u, 2u}, 4);
 
     DataMap data;
     data.Add<ArrayLengthFromUniform::Config>(std::move(cfg));
@@ -355,11 +355,11 @@
 )";
 
     ArrayLengthFromUniform::Config cfg({0, 30u});
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{0, 2u}, 0);
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{1u, 2u}, 1);
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{2u, 2u}, 2);
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{3u, 2u}, 3);
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{4u, 2u}, 4);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{0, 2u}, 0);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{1u, 2u}, 1);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{2u, 2u}, 2);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{3u, 2u}, 3);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{4u, 2u}, 4);
 
     DataMap data;
     data.Add<ArrayLengthFromUniform::Config>(std::move(cfg));
@@ -387,7 +387,7 @@
 )";
 
     ArrayLengthFromUniform::Config cfg({0, 30u});
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{0, 0}, 0);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{0, 0}, 0);
 
     DataMap data;
     data.Add<ArrayLengthFromUniform::Config>(std::move(cfg));
@@ -452,7 +452,7 @@
 )";
 
     ArrayLengthFromUniform::Config cfg({0, 30u});
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{0, 2}, 0);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{0, 2}, 0);
 
     DataMap data;
     data.Add<ArrayLengthFromUniform::Config>(std::move(cfg));
@@ -500,7 +500,7 @@
 )";
 
     ArrayLengthFromUniform::Config cfg({0, 30u});
-    cfg.bindpoint_to_size_index.emplace(sem::BindingPoint{0, 0}, 0);
+    cfg.bindpoint_to_size_index.emplace(BindingPoint{0, 0}, 0);
 
     DataMap data;
     data.Add<ArrayLengthFromUniform::Config>(std::move(cfg));
diff --git a/src/tint/lang/wgsl/ast/transform/binding_remapper.cc b/src/tint/lang/wgsl/ast/transform/binding_remapper.cc
index 3e94d52..f96ed6c 100644
--- a/src/tint/lang/wgsl/ast/transform/binding_remapper.cc
+++ b/src/tint/lang/wgsl/ast/transform/binding_remapper.cc
@@ -59,7 +59,7 @@
 
     // A set of post-remapped binding points that need to be decorated with a
     // DisableValidationAttribute to disable binding-point-collision validation
-    std::unordered_set<sem::BindingPoint> add_collision_attr;
+    std::unordered_set<BindingPoint> add_collision_attr;
 
     if (remappings->allow_collisions) {
         // Scan for binding point collisions generated by this transform.
@@ -69,7 +69,7 @@
                 continue;
             }
             auto* func = src->Sem().Get(func_ast);
-            std::unordered_map<sem::BindingPoint, int> binding_point_counts;
+            std::unordered_map<BindingPoint, int> binding_point_counts;
             for (auto* global : func->TransitivelyReferencedGlobals()) {
                 if (auto from = global->BindingPoint()) {
                     auto bp_it = remappings->binding_points.find(*from);
diff --git a/src/tint/lang/wgsl/ast/transform/binding_remapper.h b/src/tint/lang/wgsl/ast/transform/binding_remapper.h
index 79c4ba7..17d5fe6 100644
--- a/src/tint/lang/wgsl/ast/transform/binding_remapper.h
+++ b/src/tint/lang/wgsl/ast/transform/binding_remapper.h
@@ -19,12 +19,12 @@
 
 #include "src/tint/lang/core/builtin/access.h"
 #include "src/tint/lang/wgsl/ast/transform/transform.h"
-#include "src/tint/lang/wgsl/sem/binding_point.h"
+#include "tint/binding_point.h"
 
 namespace tint::ast::transform {
 
-/// BindingPoint is an alias to sem::BindingPoint
-using BindingPoint = sem::BindingPoint;
+/// BindingPoint is an alias to BindingPoint
+using BindingPoint = BindingPoint;
 
 /// BindingRemapper is a transform used to remap resource binding points and
 /// access controls.
diff --git a/src/tint/lang/wgsl/ast/transform/combine_samplers.cc b/src/tint/lang/wgsl/ast/transform/combine_samplers.cc
index f046663..0c3cab0 100644
--- a/src/tint/lang/wgsl/ast/transform/combine_samplers.cc
+++ b/src/tint/lang/wgsl/ast/transform/combine_samplers.cc
@@ -41,8 +41,7 @@
 
 using namespace tint::number_suffixes;  // NOLINT
 
-CombineSamplers::BindingInfo::BindingInfo(const BindingMap& map,
-                                          const sem::BindingPoint& placeholder)
+CombineSamplers::BindingInfo::BindingInfo(const BindingMap& map, const BindingPoint& placeholder)
     : binding_map(map), placeholder_binding_point(placeholder) {}
 CombineSamplers::BindingInfo::BindingInfo(const BindingInfo& other) = default;
 CombineSamplers::BindingInfo::~BindingInfo() = default;
@@ -63,9 +62,6 @@
     /// variable
     using CombinedTextureSamplerMap = std::unordered_map<sem::VariablePair, const Variable*>;
 
-    /// Use sem::BindingPoint without scope.
-    using BindingPoint = sem::BindingPoint;
-
     /// A map of all global texture/sampler variable pairs to the global
     /// combined sampler variable that will replace it.
     CombinedTextureSamplerMap global_combined_texture_samplers_;
diff --git a/src/tint/lang/wgsl/ast/transform/combine_samplers.h b/src/tint/lang/wgsl/ast/transform/combine_samplers.h
index c49f7eb..43437b8 100644
--- a/src/tint/lang/wgsl/ast/transform/combine_samplers.h
+++ b/src/tint/lang/wgsl/ast/transform/combine_samplers.h
@@ -66,7 +66,7 @@
         /// Constructor
         /// @param map the map of all (texture, sampler) -> (combined) pairs
         /// @param placeholder the binding point to use for placeholder samplers.
-        BindingInfo(const BindingMap& map, const sem::BindingPoint& placeholder);
+        BindingInfo(const BindingMap& map, const BindingPoint& placeholder);
 
         /// Copy constructor
         /// @param other the other BindingInfo to copy
@@ -79,7 +79,7 @@
         BindingMap binding_map;
 
         /// The binding point to use for placeholder samplers.
-        sem::BindingPoint placeholder_binding_point;
+        BindingPoint placeholder_binding_point;
     };
 
     /// Constructor
diff --git a/src/tint/lang/wgsl/ast/transform/combine_samplers_test.cc b/src/tint/lang/wgsl/ast/transform/combine_samplers_test.cc
index 86aa6f9..eccb624 100644
--- a/src/tint/lang/wgsl/ast/transform/combine_samplers_test.cc
+++ b/src/tint/lang/wgsl/ast/transform/combine_samplers_test.cc
@@ -29,7 +29,7 @@
     auto* expect = "";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -56,7 +56,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -83,7 +83,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -118,7 +118,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -153,7 +153,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -187,7 +187,7 @@
     pair.sampler_binding_point.group = 2;
     pair.sampler_binding_point.binding = 3;
     map[pair] = "fuzzy";
-    sem::BindingPoint placeholder{1024, 0};
+    BindingPoint placeholder{1024, 0};
     data.Add<CombineSamplers::BindingInfo>(map, placeholder);
     auto got = Run<CombineSamplers>(src, data);
 
@@ -222,7 +222,7 @@
     pair.sampler_binding_point.group = 1;
     pair.sampler_binding_point.binding = 0;
     map[pair] = "fuzzy";
-    sem::BindingPoint placeholder{1024, 0};
+    BindingPoint placeholder{1024, 0};
     data.Add<CombineSamplers::BindingInfo>(map, placeholder);
     auto got = Run<CombineSamplers>(src, data);
 
@@ -263,7 +263,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -301,7 +301,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -344,7 +344,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -386,7 +386,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -429,7 +429,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -492,7 +492,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -539,7 +539,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -586,7 +586,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -625,7 +625,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -662,7 +662,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -701,7 +701,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -738,7 +738,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -768,7 +768,7 @@
 }
 )";
 
-    sem::BindingPoint placeholder{1024, 0};
+    BindingPoint placeholder{1024, 0};
     sem::SamplerTexturePair pair;
     pair.texture_binding_point.group = 0;
     pair.texture_binding_point.binding = 0;
@@ -805,9 +805,9 @@
 }
 )";
 
-    sem::BindingPoint placeholder{1024, 0};
-    sem::BindingPoint tex{0, 0};
-    sem::BindingPoint samp{0, 1};
+    BindingPoint placeholder{1024, 0};
+    BindingPoint tex{0, 0};
+    BindingPoint samp{0, 1};
     sem::SamplerTexturePair pair, placeholder_pair;
     pair.texture_binding_point.group = tex.group;
     pair.texture_binding_point.binding = tex.binding;
@@ -848,7 +848,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -883,7 +883,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -917,7 +917,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -948,7 +948,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
@@ -978,7 +978,7 @@
 )";
 
     DataMap data;
-    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), sem::BindingPoint());
+    data.Add<CombineSamplers::BindingInfo>(CombineSamplers::BindingMap(), BindingPoint());
     auto got = Run<CombineSamplers>(src, data);
 
     EXPECT_EQ(expect, str(got));
diff --git a/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.cc b/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.cc
index 4dad744..667de6c 100644
--- a/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.cc
+++ b/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.cc
@@ -116,7 +116,7 @@
             // The binding points for the newly introduced bindings must have been provided to this
             // transform. We fetch the new binding points by providing the original texture_external
             // binding points into the passed map.
-            sem::BindingPoint bp = *sem_var->BindingPoint();
+            BindingPoint bp = *sem_var->BindingPoint();
 
             BindingsMap::const_iterator it = new_binding_points->bindings_map.find(bp);
             if (it == new_binding_points->bindings_map.end()) {
diff --git a/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.h b/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.h
index 44710e0..963555b 100644
--- a/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.h
+++ b/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.h
@@ -21,8 +21,8 @@
 #include "src/tint/lang/core/builtin/function.h"
 #include "src/tint/lang/wgsl/ast/struct_member.h"
 #include "src/tint/lang/wgsl/ast/transform/transform.h"
-#include "src/tint/lang/wgsl/sem/binding_point.h"
 #include "src/tint/lang/wgsl/sem/external_texture.h"
+#include "tint/binding_point.h"
 
 namespace tint::ast::transform {
 
diff --git a/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform.cc b/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform.cc
index 0a3449f..bf81993 100644
--- a/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform.cc
+++ b/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform.cc
@@ -185,7 +185,7 @@
     return Program(std::move(b));
 }
 
-NumWorkgroupsFromUniform::Config::Config(std::optional<sem::BindingPoint> ubo_bp)
+NumWorkgroupsFromUniform::Config::Config(std::optional<BindingPoint> ubo_bp)
     : ubo_binding(ubo_bp) {}
 NumWorkgroupsFromUniform::Config::Config(const Config&) = default;
 NumWorkgroupsFromUniform::Config::~Config() = default;
diff --git a/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform.h b/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform.h
index 728c984..92331d5 100644
--- a/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform.h
+++ b/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform.h
@@ -18,7 +18,7 @@
 #include <optional>
 
 #include "src/tint/lang/wgsl/ast/transform/transform.h"
-#include "src/tint/lang/wgsl/sem/binding_point.h"
+#include "tint/binding_point.h"
 
 // Forward declarations
 namespace tint {
@@ -58,7 +58,7 @@
         /// contains no value, a free binding point will be used to ensure the generated program is
         /// valid. Specifically, binding 0 of the largest used group plus 1 is used if at least one
         /// resource is bound, otherwise group 0 binding 0 is used.
-        explicit Config(std::optional<sem::BindingPoint> ubo_bp);
+        explicit Config(std::optional<BindingPoint> ubo_bp);
 
         /// Copy constructor
         Config(const Config&);
@@ -69,7 +69,7 @@
         /// The binding point to use for the generated uniform buffer. If ubo_bp contains no value,
         /// a free binding point will be used. Specifically, binding 0 of the largest used group
         /// plus 1 is used if at least one resource is bound, otherwise group 0 binding 0 is used.
-        std::optional<sem::BindingPoint> ubo_binding;
+        std::optional<BindingPoint> ubo_binding;
     };
 
     /// @copydoc Transform::Apply
diff --git a/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform_test.cc b/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform_test.cc
index 31c5617..1c80590 100644
--- a/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform_test.cc
+++ b/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform_test.cc
@@ -29,7 +29,7 @@
     auto* src = R"()";
 
     DataMap data;
-    data.Add<NumWorkgroupsFromUniform::Config>(sem::BindingPoint{0, 30u});
+    data.Add<NumWorkgroupsFromUniform::Config>(BindingPoint{0, 30u});
     EXPECT_FALSE(ShouldRun<NumWorkgroupsFromUniform>(src, data));
 }
 
@@ -41,7 +41,7 @@
 )";
 
     DataMap data;
-    data.Add<NumWorkgroupsFromUniform::Config>(sem::BindingPoint{0, 30u});
+    data.Add<NumWorkgroupsFromUniform::Config>(BindingPoint{0, 30u});
     EXPECT_TRUE(ShouldRun<NumWorkgroupsFromUniform>(src, data));
 }
 
@@ -92,7 +92,7 @@
 
     DataMap data;
     data.Add<CanonicalizeEntryPointIO::Config>(CanonicalizeEntryPointIO::ShaderStyle::kHlsl);
-    data.Add<NumWorkgroupsFromUniform::Config>(sem::BindingPoint{0, 30u});
+    data.Add<NumWorkgroupsFromUniform::Config>(BindingPoint{0, 30u});
     auto got = Run<Unshadow, CanonicalizeEntryPointIO, NumWorkgroupsFromUniform>(src, data);
     EXPECT_EQ(expect, str(got));
 }
@@ -136,7 +136,7 @@
 
     DataMap data;
     data.Add<CanonicalizeEntryPointIO::Config>(CanonicalizeEntryPointIO::ShaderStyle::kHlsl);
-    data.Add<NumWorkgroupsFromUniform::Config>(sem::BindingPoint{0, 30u});
+    data.Add<NumWorkgroupsFromUniform::Config>(BindingPoint{0, 30u});
     auto got = Run<Unshadow, CanonicalizeEntryPointIO, NumWorkgroupsFromUniform>(src, data);
     EXPECT_EQ(expect, str(got));
 }
@@ -180,7 +180,7 @@
 
     DataMap data;
     data.Add<CanonicalizeEntryPointIO::Config>(CanonicalizeEntryPointIO::ShaderStyle::kHlsl);
-    data.Add<NumWorkgroupsFromUniform::Config>(sem::BindingPoint{0, 30u});
+    data.Add<NumWorkgroupsFromUniform::Config>(BindingPoint{0, 30u});
     auto got = Run<Unshadow, CanonicalizeEntryPointIO, NumWorkgroupsFromUniform>(src, data);
     EXPECT_EQ(expect, str(got));
 }
@@ -235,7 +235,7 @@
 
     DataMap data;
     data.Add<CanonicalizeEntryPointIO::Config>(CanonicalizeEntryPointIO::ShaderStyle::kHlsl);
-    data.Add<NumWorkgroupsFromUniform::Config>(sem::BindingPoint{0, 30u});
+    data.Add<NumWorkgroupsFromUniform::Config>(BindingPoint{0, 30u});
     auto got = Run<Unshadow, CanonicalizeEntryPointIO, NumWorkgroupsFromUniform>(src, data);
     EXPECT_EQ(expect, str(got));
 }
@@ -291,7 +291,7 @@
 
     DataMap data;
     data.Add<CanonicalizeEntryPointIO::Config>(CanonicalizeEntryPointIO::ShaderStyle::kHlsl);
-    data.Add<NumWorkgroupsFromUniform::Config>(sem::BindingPoint{0, 30u});
+    data.Add<NumWorkgroupsFromUniform::Config>(BindingPoint{0, 30u});
     auto got = Run<Unshadow, CanonicalizeEntryPointIO, NumWorkgroupsFromUniform>(src, data);
     EXPECT_EQ(expect, str(got));
 }
@@ -390,7 +390,7 @@
 
     DataMap data;
     data.Add<CanonicalizeEntryPointIO::Config>(CanonicalizeEntryPointIO::ShaderStyle::kHlsl);
-    data.Add<NumWorkgroupsFromUniform::Config>(sem::BindingPoint{0, 30u});
+    data.Add<NumWorkgroupsFromUniform::Config>(BindingPoint{0, 30u});
     auto got = Run<Unshadow, CanonicalizeEntryPointIO, NumWorkgroupsFromUniform>(src, data);
     EXPECT_EQ(expect, str(got));
 }
@@ -431,7 +431,7 @@
 
     DataMap data;
     data.Add<CanonicalizeEntryPointIO::Config>(CanonicalizeEntryPointIO::ShaderStyle::kHlsl);
-    data.Add<NumWorkgroupsFromUniform::Config>(sem::BindingPoint{0, 30u});
+    data.Add<NumWorkgroupsFromUniform::Config>(BindingPoint{0, 30u});
     auto got = Run<Unshadow, CanonicalizeEntryPointIO, NumWorkgroupsFromUniform>(src, data);
     EXPECT_EQ(expect, str(got));
 }
diff --git a/src/tint/lang/wgsl/ast/transform/robustness.cc b/src/tint/lang/wgsl/ast/transform/robustness.cc
index 2261e05..1112031 100644
--- a/src/tint/lang/wgsl/ast/transform/robustness.cc
+++ b/src/tint/lang/wgsl/ast/transform/robustness.cc
@@ -694,7 +694,7 @@
         if (!globalVariable->BindingPoint().has_value()) {
             return false;
         }
-        sem::BindingPoint bindingPoint = *globalVariable->BindingPoint();
+        BindingPoint bindingPoint = *globalVariable->BindingPoint();
         return cfg.bindings_ignored.find(bindingPoint) != cfg.bindings_ignored.cend();
     }
 
diff --git a/src/tint/lang/wgsl/ast/transform/robustness.h b/src/tint/lang/wgsl/ast/transform/robustness.h
index e69f83c..677b452 100644
--- a/src/tint/lang/wgsl/ast/transform/robustness.h
+++ b/src/tint/lang/wgsl/ast/transform/robustness.h
@@ -18,7 +18,7 @@
 #include <unordered_set>
 
 #include "src/tint/lang/wgsl/ast/transform/transform.h"
-#include "src/tint/lang/wgsl/sem/binding_point.h"
+#include "tint/binding_point.h"
 
 namespace tint::ast::transform {
 
@@ -82,7 +82,7 @@
         Action workgroup_action = Action::kDefault;
 
         /// Bindings that should always be applied Actions::kIgnore on
-        std::unordered_set<tint::sem::BindingPoint> bindings_ignored;
+        std::unordered_set<tint::BindingPoint> bindings_ignored;
 
         /// If we should disable index clamping on runtime-sized arrays in robustness transform
         bool disable_runtime_sized_array_index_clamping = false;
diff --git a/src/tint/lang/wgsl/ast/transform/truncate_interstage_variables.h b/src/tint/lang/wgsl/ast/transform/truncate_interstage_variables.h
index d1b1cb6..e2dd71e 100644
--- a/src/tint/lang/wgsl/ast/transform/truncate_interstage_variables.h
+++ b/src/tint/lang/wgsl/ast/transform/truncate_interstage_variables.h
@@ -18,7 +18,7 @@
 #include <bitset>
 
 #include "src/tint/lang/wgsl/ast/transform/transform.h"
-#include "src/tint/lang/wgsl/sem/binding_point.h"
+#include "tint/binding_point.h"
 
 namespace tint::ast::transform {
 
diff --git a/src/tint/lang/wgsl/helpers/flatten_bindings.cc b/src/tint/lang/wgsl/helpers/flatten_bindings.cc
index 345a163..f13ecc4 100644
--- a/src/tint/lang/wgsl/helpers/flatten_bindings.cc
+++ b/src/tint/lang/wgsl/helpers/flatten_bindings.cc
@@ -19,7 +19,7 @@
 #include "src/tint/lang/wgsl/ast/transform/binding_remapper.h"
 #include "src/tint/lang/wgsl/ast/transform/manager.h"
 #include "src/tint/lang/wgsl/inspector/inspector.h"
-#include "src/tint/writer/binding_point.h"
+#include "tint/binding_point.h"
 
 namespace tint::writer {
 
diff --git a/src/tint/lang/wgsl/inspector/inspector.cc b/src/tint/lang/wgsl/inspector/inspector.cc
index ff99b2b..52e38e0 100644
--- a/src/tint/lang/wgsl/inspector/inspector.cc
+++ b/src/tint/lang/wgsl/inspector/inspector.cc
@@ -518,9 +518,8 @@
     return it->second;
 }
 
-std::vector<SamplerTexturePair> Inspector::GetSamplerTextureUses(
-    const std::string& entry_point,
-    const sem::BindingPoint& placeholder) {
+std::vector<SamplerTexturePair> Inspector::GetSamplerTextureUses(const std::string& entry_point,
+                                                                 const BindingPoint& placeholder) {
     auto* func = FindEntryPointByName(entry_point);
     if (!func) {
         return {};
diff --git a/src/tint/lang/wgsl/inspector/inspector.h b/src/tint/lang/wgsl/inspector/inspector.h
index df343f7..e0a1690 100644
--- a/src/tint/lang/wgsl/inspector/inspector.h
+++ b/src/tint/lang/wgsl/inspector/inspector.h
@@ -135,7 +135,7 @@
     /// @returns vector of all of the sampler/texture sampling pairs that are used
     /// by that entry point.
     std::vector<SamplerTexturePair> GetSamplerTextureUses(const std::string& entry_point,
-                                                          const sem::BindingPoint& placeholder);
+                                                          const BindingPoint& placeholder);
 
     /// @param entry_point name of the entry point to get information about.
     /// @returns the total size in bytes of all Workgroup storage-class storage
diff --git a/src/tint/lang/wgsl/resolver/resolver.cc b/src/tint/lang/wgsl/resolver/resolver.cc
index e846a1b..60b5219 100644
--- a/src/tint/lang/wgsl/resolver/resolver.cc
+++ b/src/tint/lang/wgsl/resolver/resolver.cc
@@ -650,9 +650,9 @@
             }
         }
 
-        std::optional<sem::BindingPoint> binding_point;
+        std::optional<BindingPoint> binding_point;
         if (group && binding) {
-            binding_point = sem::BindingPoint{group.value(), binding.value()};
+            binding_point = BindingPoint{group.value(), binding.value()};
         }
         sem = builder_->create<sem::GlobalVariable>(
             var, var_ty, sem::EvaluationStage::kRuntime, address_space, access,
@@ -793,9 +793,9 @@
         }
     }
 
-    std::optional<sem::BindingPoint> binding_point;
+    std::optional<BindingPoint> binding_point;
     if (group && binding) {
-        binding_point = sem::BindingPoint{group.value(), binding.value()};
+        binding_point = BindingPoint{group.value(), binding.value()};
     }
 
     auto* sem = builder_->create<sem::Parameter>(
diff --git a/src/tint/lang/wgsl/resolver/resolver.h b/src/tint/lang/wgsl/resolver/resolver.h
index f517951..26d2fd4 100644
--- a/src/tint/lang/wgsl/resolver/resolver.h
+++ b/src/tint/lang/wgsl/resolver/resolver.h
@@ -30,12 +30,12 @@
 #include "src/tint/lang/wgsl/resolver/intrinsic_table.h"
 #include "src/tint/lang/wgsl/resolver/sem_helper.h"
 #include "src/tint/lang/wgsl/resolver/validator.h"
-#include "src/tint/lang/wgsl/sem/binding_point.h"
 #include "src/tint/lang/wgsl/sem/block_statement.h"
 #include "src/tint/lang/wgsl/sem/function.h"
 #include "src/tint/lang/wgsl/sem/struct.h"
 #include "src/tint/utils/containers/bitset.h"
 #include "src/tint/utils/containers/unique_vector.h"
+#include "tint/binding_point.h"
 
 // Forward declarations
 namespace tint::ast {
diff --git a/src/tint/lang/wgsl/resolver/resolver_test.cc b/src/tint/lang/wgsl/resolver/resolver_test.cc
index ee3a319..4a66ece 100644
--- a/src/tint/lang/wgsl/resolver/resolver_test.cc
+++ b/src/tint/lang/wgsl/resolver/resolver_test.cc
@@ -1916,8 +1916,8 @@
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 
-    EXPECT_EQ(Sem().Get<sem::GlobalVariable>(s1)->BindingPoint(), (sem::BindingPoint{1u, 2u}));
-    EXPECT_EQ(Sem().Get<sem::GlobalVariable>(s2)->BindingPoint(), (sem::BindingPoint{3u, 4u}));
+    EXPECT_EQ(Sem().Get<sem::GlobalVariable>(s1)->BindingPoint(), (BindingPoint{1u, 2u}));
+    EXPECT_EQ(Sem().Get<sem::GlobalVariable>(s2)->BindingPoint(), (BindingPoint{3u, 4u}));
 }
 
 TEST_F(ResolverTest, Function_EntryPoints_StageAttribute) {
diff --git a/src/tint/lang/wgsl/resolver/validator.cc b/src/tint/lang/wgsl/resolver/validator.cc
index 961a7b1..886c952 100644
--- a/src/tint/lang/wgsl/resolver/validator.cc
+++ b/src/tint/lang/wgsl/resolver/validator.cc
@@ -1325,7 +1325,7 @@
     }
 
     // Validate there are no resource variable binding collisions
-    utils::Hashmap<sem::BindingPoint, const ast::Variable*, 8> binding_points;
+    utils::Hashmap<BindingPoint, const ast::Variable*, 8> binding_points;
     for (auto* global : func->TransitivelyReferencedGlobals()) {
         auto* var_decl = global->Declaration()->As<ast::Var>();
         if (!var_decl) {
diff --git a/src/tint/lang/wgsl/sem/external_texture.h b/src/tint/lang/wgsl/sem/external_texture.h
index 5e24993..d43280c 100644
--- a/src/tint/lang/wgsl/sem/external_texture.h
+++ b/src/tint/lang/wgsl/sem/external_texture.h
@@ -17,7 +17,7 @@
 
 #include <unordered_map>
 
-#include "src/tint/lang/wgsl/sem/binding_point.h"
+#include "tint/binding_point.h"
 
 namespace tint::sem::external_texture {
 
diff --git a/src/tint/lang/wgsl/sem/function.h b/src/tint/lang/wgsl/sem/function.h
index fc5ded6..3674b77 100644
--- a/src/tint/lang/wgsl/sem/function.h
+++ b/src/tint/lang/wgsl/sem/function.h
@@ -49,8 +49,8 @@
 /// Function holds the semantic information for function nodes.
 class Function final : public utils::Castable<Function, CallTarget> {
   public:
-    /// A vector of [Variable*, sem::BindingPoint] pairs
-    using VariableBindings = std::vector<std::pair<const Variable*, sem::BindingPoint>>;
+    /// A vector of [Variable*, BindingPoint] pairs
+    using VariableBindings = std::vector<std::pair<const Variable*, BindingPoint>>;
 
     /// Constructor
     /// @param declaration the ast::Function
diff --git a/src/tint/lang/wgsl/sem/sampler_texture_pair.h b/src/tint/lang/wgsl/sem/sampler_texture_pair.h
index 13e5ed5..46d4410 100644
--- a/src/tint/lang/wgsl/sem/sampler_texture_pair.h
+++ b/src/tint/lang/wgsl/sem/sampler_texture_pair.h
@@ -18,8 +18,8 @@
 #include <cstdint>
 #include <functional>
 
-#include "src/tint/lang/wgsl/sem/binding_point.h"
 #include "src/tint/utils/text/string_stream.h"
+#include "tint/binding_point.h"
 
 namespace tint::sem {
 
diff --git a/src/tint/lang/wgsl/sem/variable.cc b/src/tint/lang/wgsl/sem/variable.cc
index 5bb73a8..20185be 100644
--- a/src/tint/lang/wgsl/sem/variable.cc
+++ b/src/tint/lang/wgsl/sem/variable.cc
@@ -61,7 +61,7 @@
                                builtin::AddressSpace address_space,
                                builtin::Access access,
                                const constant::Value* constant_value,
-                               std::optional<sem::BindingPoint> binding_point,
+                               std::optional<tint::BindingPoint> binding_point,
                                std::optional<uint32_t> location,
                                std::optional<uint32_t> index)
     : Base(declaration, type, stage, address_space, access, constant_value),
@@ -77,7 +77,7 @@
                      builtin::AddressSpace address_space,
                      builtin::Access access,
                      const ParameterUsage usage /* = ParameterUsage::kNone */,
-                     std::optional<sem::BindingPoint> binding_point /* = {} */,
+                     std::optional<tint::BindingPoint> binding_point /* = {} */,
                      std::optional<uint32_t> location /* = std::nullopt */)
     : Base(declaration, type, EvaluationStage::kRuntime, address_space, access, nullptr),
       index_(index),
diff --git a/src/tint/lang/wgsl/sem/variable.h b/src/tint/lang/wgsl/sem/variable.h
index 5ef2c57..981939f 100644
--- a/src/tint/lang/wgsl/sem/variable.h
+++ b/src/tint/lang/wgsl/sem/variable.h
@@ -25,10 +25,10 @@
 #include "src/tint/lang/core/builtin/address_space.h"
 #include "src/tint/lang/core/type/type.h"
 #include "src/tint/lang/wgsl/ast/parameter.h"
-#include "src/tint/lang/wgsl/sem/binding_point.h"
 #include "src/tint/lang/wgsl/sem/parameter_usage.h"
 #include "src/tint/lang/wgsl/sem/value_expression.h"
 #include "src/tint/utils/containers/unique_vector.h"
+#include "tint/binding_point.h"
 
 // Forward declarations
 namespace tint::ast {
@@ -166,7 +166,7 @@
                    builtin::AddressSpace address_space,
                    builtin::Access access,
                    const constant::Value* constant_value,
-                   std::optional<sem::BindingPoint> binding_point = std::nullopt,
+                   std::optional<tint::BindingPoint> binding_point = std::nullopt,
                    std::optional<uint32_t> location = std::nullopt,
                    std::optional<uint32_t> index = std::nullopt);
 
@@ -174,7 +174,7 @@
     ~GlobalVariable() override;
 
     /// @returns the resource binding point for the variable
-    std::optional<sem::BindingPoint> BindingPoint() const { return binding_point_; }
+    std::optional<tint::BindingPoint> BindingPoint() const { return binding_point_; }
 
     /// @param id the constant identifier to assign to this variable
     void SetOverrideId(OverrideId id) { override_id_ = id; }
@@ -189,7 +189,7 @@
     std::optional<uint32_t> Index() const { return index_; }
 
   private:
-    const std::optional<sem::BindingPoint> binding_point_;
+    const std::optional<tint::BindingPoint> binding_point_;
 
     tint::OverrideId override_id_;
     std::optional<uint32_t> location_;
@@ -214,7 +214,7 @@
               builtin::AddressSpace address_space,
               builtin::Access access,
               const ParameterUsage usage = ParameterUsage::kNone,
-              std::optional<sem::BindingPoint> binding_point = {},
+              std::optional<tint::BindingPoint> binding_point = {},
               std::optional<uint32_t> location = std::nullopt);
 
     /// Destructor
@@ -245,7 +245,7 @@
     void SetShadows(const utils::CastableBase* shadows) { shadows_ = shadows; }
 
     /// @returns the resource binding point for the parameter
-    std::optional<sem::BindingPoint> BindingPoint() const { return binding_point_; }
+    std::optional<tint::BindingPoint> BindingPoint() const { return binding_point_; }
 
     /// @returns the location value for the parameter, if set
     std::optional<uint32_t> Location() const { return location_; }
@@ -255,7 +255,7 @@
     const ParameterUsage usage_;
     CallTarget const* owner_ = nullptr;
     const utils::CastableBase* shadows_ = nullptr;
-    const std::optional<sem::BindingPoint> binding_point_;
+    const std::optional<tint::BindingPoint> binding_point_;
     const std::optional<uint32_t> location_;
 };
 
diff --git a/src/tint/writer/array_length_from_uniform_options.cc b/src/tint/writer/array_length_from_uniform_options.cc
deleted file mode 100644
index 275867f..0000000
--- a/src/tint/writer/array_length_from_uniform_options.cc
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2021 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "src/tint/writer/array_length_from_uniform_options.h"
-
-namespace tint::writer {
-
-ArrayLengthFromUniformOptions::ArrayLengthFromUniformOptions() = default;
-
-ArrayLengthFromUniformOptions::~ArrayLengthFromUniformOptions() = default;
-
-ArrayLengthFromUniformOptions::ArrayLengthFromUniformOptions(const ArrayLengthFromUniformOptions&) =
-    default;
-
-ArrayLengthFromUniformOptions& ArrayLengthFromUniformOptions::operator=(
-    const ArrayLengthFromUniformOptions&) = default;
-
-ArrayLengthFromUniformOptions::ArrayLengthFromUniformOptions(ArrayLengthFromUniformOptions&&) =
-    default;
-
-}  // namespace tint::writer
diff --git a/src/tint/writer/binding_point.h b/src/tint/writer/binding_point.h
deleted file mode 100644
index b66c7e3..0000000
--- a/src/tint/writer/binding_point.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2023 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef SRC_TINT_WRITER_BINDING_POINT_H_
-#define SRC_TINT_WRITER_BINDING_POINT_H_
-
-#include "src/tint/lang/wgsl/sem/binding_point.h"
-
-namespace tint::writer {
-
-/// BindingPoint is an alias to sem::BindingPoint
-using BindingPoint = sem::BindingPoint;
-
-}  // namespace tint::writer
-
-#endif  // SRC_TINT_WRITER_BINDING_POINT_H_
diff --git a/src/tint/writer/binding_remapper_options.cc b/src/tint/writer/binding_remapper_options.cc
deleted file mode 100644
index 78f572c..0000000
--- a/src/tint/writer/binding_remapper_options.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2023 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "src/tint/writer/binding_remapper_options.h"
-
-namespace tint::writer {
-
-BindingRemapperOptions::BindingRemapperOptions() = default;
-
-BindingRemapperOptions::~BindingRemapperOptions() = default;
-
-BindingRemapperOptions::BindingRemapperOptions(const BindingRemapperOptions&) = default;
-
-BindingRemapperOptions& BindingRemapperOptions::operator=(const BindingRemapperOptions&) = default;
-
-BindingRemapperOptions::BindingRemapperOptions(BindingRemapperOptions&&) = default;
-
-}  // namespace tint::writer
diff --git a/src/tint/writer/external_texture_options.cc b/src/tint/writer/external_texture_options.cc
deleted file mode 100644
index e5ea26f..0000000
--- a/src/tint/writer/external_texture_options.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2023 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "src/tint/writer/external_texture_options.h"
-
-namespace tint::writer {
-
-ExternalTextureOptions::ExternalTextureOptions() = default;
-
-ExternalTextureOptions::~ExternalTextureOptions() = default;
-
-ExternalTextureOptions::ExternalTextureOptions(const ExternalTextureOptions&) = default;
-
-ExternalTextureOptions& ExternalTextureOptions::operator=(const ExternalTextureOptions&) = default;
-
-ExternalTextureOptions::ExternalTextureOptions(ExternalTextureOptions&&) = default;
-
-}  // namespace tint::writer