Tint: Move ChangeImmediateToUniform Transform to Core IR Transform ChangeImmediateToUniform could be used by hlsl, msl and glsl to support immediate address space. Move this transform from hlsl writer to core ir transform to allow other backends to use it. Bug: 366291600 Change-Id: Ib54716983a1d3312291c794a96b96d60ae538b78 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/251034 Reviewed-by: James Price <jrprice@google.com> Reviewed-by: dan sinclair <dsinclair@chromium.org> Commit-Queue: Shaobo Yan <shaoboyan@microsoft.com>
diff --git a/src/tint/lang/core/ir/transform/BUILD.bazel b/src/tint/lang/core/ir/transform/BUILD.bazel index 7fef8ac..f7580cb 100644 --- a/src/tint/lang/core/ir/transform/BUILD.bazel +++ b/src/tint/lang/core/ir/transform/BUILD.bazel
@@ -47,6 +47,7 @@ "block_decorated_structs.cc", "builtin_polyfill.cc", "builtin_scalarize.cc", + "change_immediate_to_uniform.cc", "combine_access_instructions.cc", "conversion_polyfill.cc", "dead_code_elimination.cc", @@ -79,6 +80,7 @@ "block_decorated_structs.h", "builtin_polyfill.h", "builtin_scalarize.h", + "change_immediate_to_uniform.h", "combine_access_instructions.h", "conversion_polyfill.h", "dead_code_elimination.h", @@ -139,6 +141,7 @@ "block_decorated_structs_test.cc", "builtin_polyfill_test.cc", "builtin_scalarize_test.cc", + "change_immediate_to_uniform_test.cc", "combine_access_instructions_test.cc", "conversion_polyfill_test.cc", "dead_code_elimination_test.cc",
diff --git a/src/tint/lang/core/ir/transform/BUILD.cmake b/src/tint/lang/core/ir/transform/BUILD.cmake index 38c4c0a..d143d6f 100644 --- a/src/tint/lang/core/ir/transform/BUILD.cmake +++ b/src/tint/lang/core/ir/transform/BUILD.cmake
@@ -55,6 +55,8 @@ lang/core/ir/transform/builtin_polyfill.h lang/core/ir/transform/builtin_scalarize.cc lang/core/ir/transform/builtin_scalarize.h + lang/core/ir/transform/change_immediate_to_uniform.cc + lang/core/ir/transform/change_immediate_to_uniform.h lang/core/ir/transform/combine_access_instructions.cc lang/core/ir/transform/combine_access_instructions.h lang/core/ir/transform/conversion_polyfill.cc @@ -140,6 +142,7 @@ lang/core/ir/transform/block_decorated_structs_test.cc lang/core/ir/transform/builtin_polyfill_test.cc lang/core/ir/transform/builtin_scalarize_test.cc + lang/core/ir/transform/change_immediate_to_uniform_test.cc lang/core/ir/transform/combine_access_instructions_test.cc lang/core/ir/transform/conversion_polyfill_test.cc lang/core/ir/transform/dead_code_elimination_test.cc
diff --git a/src/tint/lang/core/ir/transform/BUILD.gn b/src/tint/lang/core/ir/transform/BUILD.gn index da17ea9..d969108 100644 --- a/src/tint/lang/core/ir/transform/BUILD.gn +++ b/src/tint/lang/core/ir/transform/BUILD.gn
@@ -61,6 +61,8 @@ "builtin_polyfill.h", "builtin_scalarize.cc", "builtin_scalarize.h", + "change_immediate_to_uniform.cc", + "change_immediate_to_uniform.h", "combine_access_instructions.cc", "combine_access_instructions.h", "conversion_polyfill.cc", @@ -140,6 +142,7 @@ "block_decorated_structs_test.cc", "builtin_polyfill_test.cc", "builtin_scalarize_test.cc", + "change_immediate_to_uniform_test.cc", "combine_access_instructions_test.cc", "conversion_polyfill_test.cc", "dead_code_elimination_test.cc",
diff --git a/src/tint/lang/hlsl/writer/raise/change_immediate_to_uniform.cc b/src/tint/lang/core/ir/transform/change_immediate_to_uniform.cc similarity index 91% rename from src/tint/lang/hlsl/writer/raise/change_immediate_to_uniform.cc rename to src/tint/lang/core/ir/transform/change_immediate_to_uniform.cc index 96754b2..fd143ed 100644 --- a/src/tint/lang/hlsl/writer/raise/change_immediate_to_uniform.cc +++ b/src/tint/lang/core/ir/transform/change_immediate_to_uniform.cc
@@ -25,13 +25,13 @@ // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#include "src/tint/lang/hlsl/writer/raise/change_immediate_to_uniform.h" +#include "src/tint/lang/core/ir/transform/change_immediate_to_uniform.h" #include "src/tint/lang/core/ir/builder.h" #include "src/tint/lang/core/ir/module.h" #include "src/tint/lang/core/ir/validator.h" -namespace tint::hlsl::writer::raise { +namespace tint::core::ir::transform { namespace { /// PIMPL state for the transform. @@ -70,9 +70,9 @@ auto* var_ty = var->Result()->Type()->As<core::type::Pointer>(); - // DecomposeStorageAccess may have converted the var pointers into ByteAddressBuffer - // objects. Since they've been changed, then they're Storage buffers and we don't care - // about them here. + // In HLSL backend, DecomposeStorageAccess transform may have converted the var pointers + // into ByteAddressBuffer objects. Since they've been changed, then they're Storage + // buffers and we don't care about them here. if (!var_ty) { continue; } @@ -133,7 +133,7 @@ Result<SuccessType> ChangeImmediateToUniform(core::ir::Module& ir, const ChangeImmediateToUniformConfig& config) { - auto result = ValidateAndDumpIfNeeded(ir, "hlsl.ChangeImmediateToUniform", + auto result = ValidateAndDumpIfNeeded(ir, "core.ChangeImmediateToUniform", core::ir::Capabilities{ core::ir::Capability::kAllowClipDistancesOnF32, core::ir::Capability::kAllowDuplicateBindings, @@ -148,4 +148,4 @@ return Success; } -} // namespace tint::hlsl::writer::raise +} // namespace tint::core::ir::transform
diff --git a/src/tint/lang/hlsl/writer/raise/change_immediate_to_uniform.h b/src/tint/lang/core/ir/transform/change_immediate_to_uniform.h similarity index 80% rename from src/tint/lang/hlsl/writer/raise/change_immediate_to_uniform.h rename to src/tint/lang/core/ir/transform/change_immediate_to_uniform.h index bee0909..8c110df 100644 --- a/src/tint/lang/hlsl/writer/raise/change_immediate_to_uniform.h +++ b/src/tint/lang/core/ir/transform/change_immediate_to_uniform.h
@@ -25,8 +25,8 @@ // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#ifndef SRC_TINT_LANG_HLSL_WRITER_RAISE_CHANGE_IMMEDIATE_TO_UNIFORM_H_ -#define SRC_TINT_LANG_HLSL_WRITER_RAISE_CHANGE_IMMEDIATE_TO_UNIFORM_H_ +#ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_CHANGE_IMMEDIATE_TO_UNIFORM_H_ +#define SRC_TINT_LANG_CORE_IR_TRANSFORM_CHANGE_IMMEDIATE_TO_UNIFORM_H_ #include <algorithm> #include <optional> @@ -39,7 +39,7 @@ class Module; } // namespace tint::core::ir -namespace tint::hlsl::writer::raise { +namespace tint::core::ir::transform { struct ChangeImmediateToUniformConfig { /// The binding point info. @@ -47,9 +47,8 @@ }; /// ChangeImmediateToUniform is a transform used to replace immediate global var accesses to -/// uniform address space. Doing this transform to leverage DecomposeUniformAccess to generate -/// correct loading of the HLSL primitive objects. This transform should apply after all immediate -/// related transforms and before DecomposeUniformAccess transform. +/// uniform address space. This transform should apply after all immediate +/// related transforms. /// /// /// @param module the module to transform @@ -57,6 +56,6 @@ Result<SuccessType> ChangeImmediateToUniform(core::ir::Module& module, const ChangeImmediateToUniformConfig& config); -} // namespace tint::hlsl::writer::raise +} // namespace tint::core::ir::transform -#endif // SRC_TINT_LANG_HLSL_WRITER_RAISE_CHANGE_IMMEDIATE_TO_UNIFORM_H_ +#endif // SRC_TINT_LANG_CORE_IR_TRANSFORM_CHANGE_IMMEDIATE_TO_UNIFORM_H_
diff --git a/src/tint/lang/hlsl/writer/raise/change_immediate_to_uniform_test.cc b/src/tint/lang/core/ir/transform/change_immediate_to_uniform_test.cc similarity index 94% rename from src/tint/lang/hlsl/writer/raise/change_immediate_to_uniform_test.cc rename to src/tint/lang/core/ir/transform/change_immediate_to_uniform_test.cc index b3ff8aa..71c0207 100644 --- a/src/tint/lang/hlsl/writer/raise/change_immediate_to_uniform_test.cc +++ b/src/tint/lang/core/ir/transform/change_immediate_to_uniform_test.cc
@@ -25,7 +25,7 @@ // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#include "src/tint/lang/hlsl/writer/raise/change_immediate_to_uniform.h" +#include "src/tint/lang/core/ir/transform/change_immediate_to_uniform.h" #include <gtest/gtest.h> @@ -37,12 +37,12 @@ using namespace tint::core::fluent_types; // NOLINT using namespace tint::core::number_suffixes; // NOLINT -namespace tint::hlsl::writer::raise { +namespace tint::core::ir::transform { namespace { -using HlslWriterChangeImmediateToUniformTest = core::ir::transform::TransformTest; +using IRChangeImmediateToUniformTest = core::ir::transform::TransformTest; -TEST_F(HlslWriterChangeImmediateToUniformTest, NoPushConstantVariable) { +TEST_F(IRChangeImmediateToUniformTest, NoPushConstantVariable) { auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment); b.Append(func->Block(), [&] { b.Return(func); }); @@ -62,7 +62,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterChangeImmediateToUniformTest, PushConstantAccessChain) { +TEST_F(IRChangeImmediateToUniformTest, PushConstantAccessChain) { auto* Inner = ty.Struct(mod.symbols.New("Inner"), { {mod.symbols.New("c"), ty.f32()}, {mod.symbols.New("d"), ty.u32()}, @@ -143,7 +143,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterChangeImmediateToUniformTest, PushConstantAccessChainFromLetAccessChain) { +TEST_F(IRChangeImmediateToUniformTest, PushConstantAccessChainFromLetAccessChain) { auto* Inner = ty.Struct(mod.symbols.New("Inner"), { {mod.symbols.New("c"), ty.f32()}, }); @@ -230,7 +230,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterChangeImmediateToUniformTest, PushConstantAccessVectorLoad) { +TEST_F(IRChangeImmediateToUniformTest, PushConstantAccessVectorLoad) { auto* var = b.Var<immediate, vec4<f32>, core::Access::kRead>("v"); b.ir.root_block->Append(var); @@ -293,7 +293,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterChangeImmediateToUniformTest, PushConstantAccessMatrix) { +TEST_F(IRChangeImmediateToUniformTest, PushConstantAccessMatrix) { auto* var = b.Var<immediate, mat4x4<f32>, core::Access::kRead>("v"); b.ir.root_block->Append(var); @@ -352,7 +352,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterChangeImmediateToUniformTest, PushConstantAccessStruct) { +TEST_F(IRChangeImmediateToUniformTest, PushConstantAccessStruct) { auto* SB = ty.Struct(mod.symbols.New("SB"), { {mod.symbols.New("a"), ty.i32()}, {mod.symbols.New("b"), ty.f32()}, @@ -417,7 +417,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterChangeImmediateToUniformTest, PushConstantStructNested) { +TEST_F(IRChangeImmediateToUniformTest, PushConstantStructNested) { auto* Inner = ty.Struct(mod.symbols.New("Inner"), { {mod.symbols.New("s"), ty.mat3x3<f32>()}, @@ -514,7 +514,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterChangeImmediateToUniformTest, PushConstantAccessChainReused) { +TEST_F(IRChangeImmediateToUniformTest, PushConstantAccessChainReused) { auto* sb = ty.Struct(mod.symbols.New("SB"), { {mod.symbols.New("c"), ty.f32()}, {mod.symbols.New("d"), ty.vec3<f32>()}, @@ -581,7 +581,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterChangeImmediateToUniformTest, Determinism_MultipleUsesOfLetFromVar) { +TEST_F(IRChangeImmediateToUniformTest, Determinism_MultipleUsesOfLetFromVar) { auto* sb = ty.Struct(mod.symbols.New("SB"), { {mod.symbols.New("a"), ty.array<vec4<f32>, 2>()}, @@ -658,4 +658,4 @@ } } // namespace -} // namespace tint::hlsl::writer::raise +} // namespace tint::core::ir::transform
diff --git a/src/tint/lang/hlsl/writer/raise/BUILD.bazel b/src/tint/lang/hlsl/writer/raise/BUILD.bazel index e5cbc59..cc22958 100644 --- a/src/tint/lang/hlsl/writer/raise/BUILD.bazel +++ b/src/tint/lang/hlsl/writer/raise/BUILD.bazel
@@ -41,7 +41,6 @@ srcs = [ "binary_polyfill.cc", "builtin_polyfill.cc", - "change_immediate_to_uniform.cc", "decompose_storage_access.cc", "decompose_uniform_access.cc", "localize_struct_array_assignment.cc", @@ -55,7 +54,6 @@ hdrs = [ "binary_polyfill.h", "builtin_polyfill.h", - "change_immediate_to_uniform.h", "decompose_storage_access.h", "decompose_uniform_access.h", "localize_struct_array_assignment.h", @@ -100,7 +98,6 @@ srcs = [ "binary_polyfill_test.cc", "builtin_polyfill_test.cc", - "change_immediate_to_uniform_test.cc", "decompose_storage_access_test.cc", "decompose_uniform_access_test.cc", "localize_struct_array_assignment_test.cc",
diff --git a/src/tint/lang/hlsl/writer/raise/BUILD.cmake b/src/tint/lang/hlsl/writer/raise/BUILD.cmake index 1425793..d695933 100644 --- a/src/tint/lang/hlsl/writer/raise/BUILD.cmake +++ b/src/tint/lang/hlsl/writer/raise/BUILD.cmake
@@ -43,8 +43,6 @@ lang/hlsl/writer/raise/binary_polyfill.h lang/hlsl/writer/raise/builtin_polyfill.cc lang/hlsl/writer/raise/builtin_polyfill.h - lang/hlsl/writer/raise/change_immediate_to_uniform.cc - lang/hlsl/writer/raise/change_immediate_to_uniform.h lang/hlsl/writer/raise/decompose_storage_access.cc lang/hlsl/writer/raise/decompose_storage_access.h lang/hlsl/writer/raise/decompose_uniform_access.cc @@ -101,7 +99,6 @@ tint_add_target(tint_lang_hlsl_writer_raise_test test lang/hlsl/writer/raise/binary_polyfill_test.cc lang/hlsl/writer/raise/builtin_polyfill_test.cc - lang/hlsl/writer/raise/change_immediate_to_uniform_test.cc lang/hlsl/writer/raise/decompose_storage_access_test.cc lang/hlsl/writer/raise/decompose_uniform_access_test.cc lang/hlsl/writer/raise/localize_struct_array_assignment_test.cc
diff --git a/src/tint/lang/hlsl/writer/raise/BUILD.gn b/src/tint/lang/hlsl/writer/raise/BUILD.gn index 8cfc7f4..cc56278 100644 --- a/src/tint/lang/hlsl/writer/raise/BUILD.gn +++ b/src/tint/lang/hlsl/writer/raise/BUILD.gn
@@ -49,8 +49,6 @@ "binary_polyfill.h", "builtin_polyfill.cc", "builtin_polyfill.h", - "change_immediate_to_uniform.cc", - "change_immediate_to_uniform.h", "decompose_storage_access.cc", "decompose_storage_access.h", "decompose_uniform_access.cc", @@ -101,7 +99,6 @@ sources = [ "binary_polyfill_test.cc", "builtin_polyfill_test.cc", - "change_immediate_to_uniform_test.cc", "decompose_storage_access_test.cc", "decompose_uniform_access_test.cc", "localize_struct_array_assignment_test.cc",
diff --git a/src/tint/lang/hlsl/writer/raise/raise.cc b/src/tint/lang/hlsl/writer/raise/raise.cc index 9a14d3f..e0f2408 100644 --- a/src/tint/lang/hlsl/writer/raise/raise.cc +++ b/src/tint/lang/hlsl/writer/raise/raise.cc
@@ -37,6 +37,7 @@ #include "src/tint/lang/core/ir/transform/binding_remapper.h" #include "src/tint/lang/core/ir/transform/builtin_polyfill.h" #include "src/tint/lang/core/ir/transform/builtin_scalarize.h" +#include "src/tint/lang/core/ir/transform/change_immediate_to_uniform.h" #include "src/tint/lang/core/ir/transform/conversion_polyfill.h" #include "src/tint/lang/core/ir/transform/demote_to_helper.h" #include "src/tint/lang/core/ir/transform/direct_variable_access.h" @@ -56,7 +57,6 @@ #include "src/tint/lang/hlsl/writer/common/options.h" #include "src/tint/lang/hlsl/writer/raise/binary_polyfill.h" #include "src/tint/lang/hlsl/writer/raise/builtin_polyfill.h" -#include "src/tint/lang/hlsl/writer/raise/change_immediate_to_uniform.h" #include "src/tint/lang/hlsl/writer/raise/decompose_storage_access.h" #include "src/tint/lang/hlsl/writer/raise/decompose_uniform_access.h" #include "src/tint/lang/hlsl/writer/raise/localize_struct_array_assignment.h" @@ -234,10 +234,10 @@ // uniform access instructions) and after DirectVariableAccess(to handle immediate pointers // being passed as function parameters). { - raise::ChangeImmediateToUniformConfig config = { + core::ir::transform::ChangeImmediateToUniformConfig config = { .immediate_binding_point = options.immediate_binding_point, }; - RUN_TRANSFORM(raise::ChangeImmediateToUniform, module, config); + RUN_TRANSFORM(core::ir::transform::ChangeImmediateToUniform, module, config); } // Comes after DecomposeStorageAccess and ChangeImmediateToUniform. RUN_TRANSFORM(raise::DecomposeUniformAccess, module);