diff --git a/src/dawn_native/ShaderModule.cpp b/src/dawn_native/ShaderModule.cpp
index e7066e2..a63b5cc 100644
--- a/src/dawn_native/ShaderModule.cpp
+++ b/src/dawn_native/ShaderModule.cpp
@@ -271,8 +271,14 @@
 
             tint::transform::Manager transformManager;
             {
+#    if DAWN_USE_NEW_TINT_TRANSFORM_API  // TODO(bclayton) - Remove once API migration is complete
+                auto transform = std::make_unique<tint::transform::VertexPulling>();
+                tint::transform::VertexStateDescriptor state;
+#    else   // DAWN_USE_NEW_TINT_TRANSFORM_API
                 auto transform = std::make_unique<tint::transform::VertexPullingTransform>(&module);
                 auto state = std::make_unique<tint::transform::VertexStateDescriptor>();
+#    endif  // DAWN_USE_NEW_TINT_TRANSFORM_API
+
                 for (uint32_t i = 0; i < vertexState.vertexBufferCount; ++i) {
                     auto& vertexBuffer = vertexState.vertexBuffers[i];
                     tint::transform::VertexBufferLayoutDescriptor layout;
@@ -289,7 +295,11 @@
                         layout.attributes.push_back(std::move(attr));
                     }
 
+#    if DAWN_USE_NEW_TINT_TRANSFORM_API  // TODO(bclayton) - Remove once API migration is complete
+                    state.push_back(std::move(layout));
+#    else   // DAWN_USE_NEW_TINT_TRANSFORM_API
                     state->vertex_buffers.push_back(std::move(layout));
+#    endif  // DAWN_USE_NEW_TINT_TRANSFORM_API
                 }
                 transform->SetVertexState(std::move(state));
                 transform->SetEntryPoint(entryPoint);
@@ -297,10 +307,20 @@
                 transformManager.append(std::move(transform));
             }
 
+#    if DAWN_USE_NEW_TINT_TRANSFORM_API  // TODO(bclayton) - Remove once API migration is complete
+            auto result = transformManager.Run(&module);
+            if (result.diagnostics.contains_errors()) {
+                errorStream << "Vertex pulling transform: "
+                            << tint::diag::Formatter{}.format(result.diagnostics);
+                return DAWN_VALIDATION_ERROR(errorStream.str().c_str());
+            }
+            module = std::move(result.module);
+#    else   // DAWN_USE_NEW_TINT_TRANSFORM_API
             if (!transformManager.Run(&module)) {
                 errorStream << "Vertex pulling transform: " << transformManager.error();
                 return DAWN_VALIDATION_ERROR(errorStream.str().c_str());
             }
+#    endif  // DAWN_USE_NEW_TINT_TRANSFORM_API
 
             tint::TypeDeterminer type_determiner(&module);
             if (!type_determiner.Determine()) {
diff --git a/src/dawn_native/d3d12/ShaderModuleD3D12.cpp b/src/dawn_native/d3d12/ShaderModuleD3D12.cpp
index cd62651..e9d1770 100644
--- a/src/dawn_native/d3d12/ShaderModuleD3D12.cpp
+++ b/src/dawn_native/d3d12/ShaderModuleD3D12.cpp
@@ -221,6 +221,17 @@
             return DAWN_VALIDATION_ERROR(errorStream.str().c_str());
         }
 
+#    if DAWN_USE_NEW_TINT_TRANSFORM_API  // TODO(bclayton) - Remove once API migration is complete
+        tint::transform::Manager transformManager;
+        transformManager.append(std::make_unique<tint::transform::BoundArrayAccessors>());
+        auto result = transformManager.Run(&module);
+        if (result.diagnostics.contains_errors()) {
+            errorStream << "Bound Array Accessors Transform: "
+                        << tint::diag::Formatter{}.format(result.diagnostics);
+            return DAWN_VALIDATION_ERROR(errorStream.str().c_str());
+        }
+        module = std::move(result.module);
+#    else   // DAWN_USE_NEW_TINT_TRANSFORM_API
         tint::transform::Manager transformManager;
         transformManager.append(
             std::make_unique<tint::transform::BoundArrayAccessorsTransform>(&module));
@@ -229,6 +240,7 @@
                         << std::endl;
             return DAWN_VALIDATION_ERROR(errorStream.str().c_str());
         }
+#    endif  // DAWN_USE_NEW_TINT_TRANSFORM_API
 
         ASSERT(remappedEntryPointName != nullptr);
         tint::inspector::Inspector inspector(module);
