Add codepaths for new tint::transform API
These are guarded by `#if DAWN_USE_NEW_TINT_TRANSFORM_API` preprocessor conditionals, this define will be added to the tint `transform.h` file, atomically switching code paths when the new API lands.
See https://dawn-review.googlesource.com/c/tint/+/34800 for the tint change.
Bug: tint:390
Bug: tint:389
Change-Id: I0f397550f921a46c5bb29b1e71aacfee19ec5dd3
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/34880
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
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);