[ir] Move DecomposeUniformAccess to core This allows it to be used by other backends. Bug: 448452698 Change-Id: If50245f8256efd11b496cb4cedb6c800218781b2 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/264414 Commit-Queue: James Price <jrprice@google.com> Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/core/ir/transform/BUILD.bazel b/src/tint/lang/core/ir/transform/BUILD.bazel index 3bf2b3e..f302c03 100644 --- a/src/tint/lang/core/ir/transform/BUILD.bazel +++ b/src/tint/lang/core/ir/transform/BUILD.bazel
@@ -52,6 +52,7 @@ "combine_access_instructions.cc", "conversion_polyfill.cc", "dead_code_elimination.cc", + "decompose_uniform_access.cc", "demote_to_helper.cc", "direct_variable_access.cc", "multiplanar_external_texture.cc", @@ -88,6 +89,7 @@ "combine_access_instructions.h", "conversion_polyfill.h", "dead_code_elimination.h", + "decompose_uniform_access.h", "demote_to_helper.h", "direct_variable_access.h", "multiplanar_external_texture.h", @@ -152,6 +154,7 @@ "combine_access_instructions_test.cc", "conversion_polyfill_test.cc", "dead_code_elimination_test.cc", + "decompose_uniform_access_test.cc", "demote_to_helper_test.cc", "direct_variable_access_test.cc", "helper_test.h",
diff --git a/src/tint/lang/core/ir/transform/BUILD.cmake b/src/tint/lang/core/ir/transform/BUILD.cmake index d980be2..ad68b31 100644 --- a/src/tint/lang/core/ir/transform/BUILD.cmake +++ b/src/tint/lang/core/ir/transform/BUILD.cmake
@@ -65,6 +65,8 @@ lang/core/ir/transform/conversion_polyfill.h lang/core/ir/transform/dead_code_elimination.cc lang/core/ir/transform/dead_code_elimination.h + lang/core/ir/transform/decompose_uniform_access.cc + lang/core/ir/transform/decompose_uniform_access.h lang/core/ir/transform/demote_to_helper.cc lang/core/ir/transform/demote_to_helper.h lang/core/ir/transform/direct_variable_access.cc @@ -153,6 +155,7 @@ 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 + lang/core/ir/transform/decompose_uniform_access_test.cc lang/core/ir/transform/demote_to_helper_test.cc lang/core/ir/transform/direct_variable_access_test.cc lang/core/ir/transform/helper_test.h
diff --git a/src/tint/lang/core/ir/transform/BUILD.gn b/src/tint/lang/core/ir/transform/BUILD.gn index d4f1fe2..403b6b9 100644 --- a/src/tint/lang/core/ir/transform/BUILD.gn +++ b/src/tint/lang/core/ir/transform/BUILD.gn
@@ -71,6 +71,8 @@ "conversion_polyfill.h", "dead_code_elimination.cc", "dead_code_elimination.h", + "decompose_uniform_access.cc", + "decompose_uniform_access.h", "demote_to_helper.cc", "demote_to_helper.h", "direct_variable_access.cc", @@ -153,6 +155,7 @@ "combine_access_instructions_test.cc", "conversion_polyfill_test.cc", "dead_code_elimination_test.cc", + "decompose_uniform_access_test.cc", "demote_to_helper_test.cc", "direct_variable_access_test.cc", "helper_test.h",
diff --git a/src/tint/lang/hlsl/writer/raise/decompose_uniform_access.cc b/src/tint/lang/core/ir/transform/decompose_uniform_access.cc similarity index 98% rename from src/tint/lang/hlsl/writer/raise/decompose_uniform_access.cc rename to src/tint/lang/core/ir/transform/decompose_uniform_access.cc index 42b98cd..c906c63 100644 --- a/src/tint/lang/hlsl/writer/raise/decompose_uniform_access.cc +++ b/src/tint/lang/core/ir/transform/decompose_uniform_access.cc
@@ -25,14 +25,14 @@ // 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/decompose_uniform_access.h" +#include "src/tint/lang/core/ir/transform/decompose_uniform_access.h" #include <utility> #include "src/tint/lang/core/ir/builder.h" #include "src/tint/lang/core/ir/validator.h" -namespace tint::hlsl::writer::raise { +namespace tint::core::ir::transform { namespace { using namespace tint::core::fluent_types; // NOLINT @@ -100,7 +100,7 @@ } OffsetData od{}; - Switch( + tint::Switch( inst, // [&](core::ir::LoadVectorElement* l) { LoadVectorElement(l, var, od); }, [&](core::ir::Load* l) { Load(l, var, od); }, @@ -118,7 +118,7 @@ TINT_ICE_ON_NO_MATCH); } - // Swap the result type of the `var` to the new HLSL result type + // Swap the result type of the `var` to the new result type auto array_length = (var_ty->StoreType()->Size() + 15) / 16; result->SetType(ty.ptr(var_ty->AddressSpace(), ty.array(ty.vec4<u32>(), array_length), var_ty->Access())); @@ -606,7 +606,7 @@ } // namespace Result<SuccessType> DecomposeUniformAccess(core::ir::Module& ir) { - auto result = ValidateAndDumpIfNeeded(ir, "hlsl.DecomposeUniformAccess", + auto result = ValidateAndDumpIfNeeded(ir, "core.DecomposeUniformAccess", core::ir::Capabilities{ core::ir::Capability::kAllowClipDistancesOnF32, core::ir::Capability::kAllowDuplicateBindings, @@ -621,4 +621,4 @@ return Success; } -} // namespace tint::hlsl::writer::raise +} // namespace tint::core::ir::transform
diff --git a/src/tint/lang/hlsl/writer/raise/decompose_uniform_access.h b/src/tint/lang/core/ir/transform/decompose_uniform_access.h similarity index 87% rename from src/tint/lang/hlsl/writer/raise/decompose_uniform_access.h rename to src/tint/lang/core/ir/transform/decompose_uniform_access.h index c8ed021..55adb65 100644 --- a/src/tint/lang/hlsl/writer/raise/decompose_uniform_access.h +++ b/src/tint/lang/core/ir/transform/decompose_uniform_access.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_DECOMPOSE_UNIFORM_ACCESS_H_ -#define SRC_TINT_LANG_HLSL_WRITER_RAISE_DECOMPOSE_UNIFORM_ACCESS_H_ +#ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_DECOMPOSE_UNIFORM_ACCESS_H_ +#define SRC_TINT_LANG_CORE_IR_TRANSFORM_DECOMPOSE_UNIFORM_ACCESS_H_ #include "src/tint/utils/result.h" @@ -35,7 +35,7 @@ class Module; } // namespace tint::core::ir -namespace tint::hlsl::writer::raise { +namespace tint::core::ir::transform { /// DecomposeUniformAccess is a transform used to replace uniform buffer accesses with a /// the correct load of the HLSL primitive objects @@ -44,6 +44,6 @@ /// @returns success or failure Result<SuccessType> DecomposeUniformAccess(core::ir::Module& module); -} // namespace tint::hlsl::writer::raise +} // namespace tint::core::ir::transform -#endif // SRC_TINT_LANG_HLSL_WRITER_RAISE_DECOMPOSE_UNIFORM_ACCESS_H_ +#endif // SRC_TINT_LANG_CORE_IR_TRANSFORM_DECOMPOSE_UNIFORM_ACCESS_H_
diff --git a/src/tint/lang/hlsl/writer/raise/decompose_uniform_access_test.cc b/src/tint/lang/core/ir/transform/decompose_uniform_access_test.cc similarity index 96% rename from src/tint/lang/hlsl/writer/raise/decompose_uniform_access_test.cc rename to src/tint/lang/core/ir/transform/decompose_uniform_access_test.cc index 0b634de..c1ba56d 100644 --- a/src/tint/lang/hlsl/writer/raise/decompose_uniform_access_test.cc +++ b/src/tint/lang/core/ir/transform/decompose_uniform_access_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/decompose_uniform_access.h" +#include "src/tint/lang/core/ir/transform/decompose_uniform_access.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 HlslWriterDecomposeUniformAccessTest = core::ir::transform::TransformTest; +using IR_DecomposeUniformAccessTest = core::ir::transform::TransformTest; -TEST_F(HlslWriterDecomposeUniformAccessTest, NoBufferAccess) { +TEST_F(IR_DecomposeUniformAccessTest, NoBufferAccess) { auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment); b.Append(func->Block(), [&] { b.Return(func); }); @@ -61,7 +61,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessChainFromUnnamedAccessChain) { +TEST_F(IR_DecomposeUniformAccessTest, UniformAccessChainFromUnnamedAccessChain) { auto* Inner = ty.Struct(mod.symbols.New("Inner"), { {mod.symbols.New("c"), ty.f32()}, {mod.symbols.New("d"), ty.u32()}, @@ -145,7 +145,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessChainFromLetAccessChain) { +TEST_F(IR_DecomposeUniformAccessTest, UniformAccessChainFromLetAccessChain) { auto* Inner = ty.Struct(mod.symbols.New("Inner"), { {mod.symbols.New("c"), ty.f32()}, }); @@ -230,7 +230,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessVectorLoad) { +TEST_F(IR_DecomposeUniformAccessTest, UniformAccessVectorLoad) { auto* var = b.Var<uniform, vec4<f32>, core::Access::kRead>("v"); var->SetBindingPoint(0, 0); @@ -303,7 +303,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessScalarF16) { +TEST_F(IR_DecomposeUniformAccessTest, UniformAccessScalarF16) { auto* var = b.Var<uniform, f16, core::Access::kRead>("v"); var->SetBindingPoint(0, 0); @@ -349,7 +349,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessVectorF16) { +TEST_F(IR_DecomposeUniformAccessTest, UniformAccessVectorF16) { auto* var = b.Var<uniform, vec4<f16>, core::Access::kRead>("v"); var->SetBindingPoint(0, 0); @@ -437,7 +437,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessMat2x3F16) { +TEST_F(IR_DecomposeUniformAccessTest, UniformAccessMat2x3F16) { auto* var = b.Var<uniform, mat2x3<f16>, core::Access::kRead>("v"); var->SetBindingPoint(0, 0); @@ -528,7 +528,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessMatrix) { +TEST_F(IR_DecomposeUniformAccessTest, UniformAccessMatrix) { auto* var = b.Var<uniform, mat4x4<f32>, core::Access::kRead>("v"); var->SetBindingPoint(0, 0); @@ -613,7 +613,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessArray) { +TEST_F(IR_DecomposeUniformAccessTest, UniformAccessArray) { auto* var = b.Var<uniform, array<vec3<f32>, 5>, core::Access::kRead>("v"); var->SetBindingPoint(0, 0); @@ -699,7 +699,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessArrayWhichCanHaveSizesOtherThenFive) { +TEST_F(IR_DecomposeUniformAccessTest, UniformAccessArrayWhichCanHaveSizesOtherThenFive) { auto* var = b.Var<uniform, array<vec3<f32>, 42>, core::Access::kRead>("v"); var->SetBindingPoint(0, 0); @@ -785,7 +785,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessStruct) { +TEST_F(IR_DecomposeUniformAccessTest, UniformAccessStruct) { auto* SB = ty.Struct(mod.symbols.New("SB"), { {mod.symbols.New("a"), ty.i32()}, {mod.symbols.New("b"), ty.f32()}, @@ -870,7 +870,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessStructNested) { +TEST_F(IR_DecomposeUniformAccessTest, UniformAccessStructNested) { auto* Inner = ty.Struct(mod.symbols.New("Inner"), { {mod.symbols.New("s"), ty.mat3x3<f32>()}, @@ -1062,7 +1062,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessChainReused) { +TEST_F(IR_DecomposeUniformAccessTest, UniformAccessChainReused) { auto* sb = ty.Struct(mod.symbols.New("SB"), { {mod.symbols.New("c"), ty.f32()}, {mod.symbols.New("d"), ty.vec3<f32>()}, @@ -1132,7 +1132,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterDecomposeUniformAccessTest, Determinism_MultipleUsesOfLetFromVar) { +TEST_F(IR_DecomposeUniformAccessTest, Determinism_MultipleUsesOfLetFromVar) { auto* sb = ty.Struct(mod.symbols.New("SB"), { {mod.symbols.New("a"), ty.array<vec4<f32>, 2>()}, @@ -1271,7 +1271,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterDecomposeUniformAccessTest, Determinism_MultipleUsesOfLetFromAccess) { +TEST_F(IR_DecomposeUniformAccessTest, Determinism_MultipleUsesOfLetFromAccess) { auto* sb = ty.Struct(mod.symbols.New("SB"), { {mod.symbols.New("a"), ty.array<vec4<f32>, 2>()}, @@ -1411,7 +1411,7 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterDecomposeUniformAccessTest, Determinism_MultipleUsesOfAccess) { +TEST_F(IR_DecomposeUniformAccessTest, Determinism_MultipleUsesOfAccess) { auto* sb = ty.Struct(mod.symbols.New("SB"), { {mod.symbols.New("a"), ty.array<vec4<f32>, 2>()}, @@ -1551,4 +1551,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 cc22958..d2afe4b 100644 --- a/src/tint/lang/hlsl/writer/raise/BUILD.bazel +++ b/src/tint/lang/hlsl/writer/raise/BUILD.bazel
@@ -42,7 +42,6 @@ "binary_polyfill.cc", "builtin_polyfill.cc", "decompose_storage_access.cc", - "decompose_uniform_access.cc", "localize_struct_array_assignment.cc", "pixel_local.cc", "promote_initializers.cc", @@ -55,7 +54,6 @@ "binary_polyfill.h", "builtin_polyfill.h", "decompose_storage_access.h", - "decompose_uniform_access.h", "localize_struct_array_assignment.h", "pixel_local.h", "promote_initializers.h", @@ -99,7 +97,6 @@ "binary_polyfill_test.cc", "builtin_polyfill_test.cc", "decompose_storage_access_test.cc", - "decompose_uniform_access_test.cc", "localize_struct_array_assignment_test.cc", "pixel_local_test.cc", "promote_initializers_test.cc",
diff --git a/src/tint/lang/hlsl/writer/raise/BUILD.cmake b/src/tint/lang/hlsl/writer/raise/BUILD.cmake index d695933..10129bb 100644 --- a/src/tint/lang/hlsl/writer/raise/BUILD.cmake +++ b/src/tint/lang/hlsl/writer/raise/BUILD.cmake
@@ -45,8 +45,6 @@ lang/hlsl/writer/raise/builtin_polyfill.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 - lang/hlsl/writer/raise/decompose_uniform_access.h lang/hlsl/writer/raise/localize_struct_array_assignment.cc lang/hlsl/writer/raise/localize_struct_array_assignment.h lang/hlsl/writer/raise/pixel_local.cc @@ -100,7 +98,6 @@ lang/hlsl/writer/raise/binary_polyfill_test.cc lang/hlsl/writer/raise/builtin_polyfill_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 lang/hlsl/writer/raise/pixel_local_test.cc lang/hlsl/writer/raise/promote_initializers_test.cc
diff --git a/src/tint/lang/hlsl/writer/raise/BUILD.gn b/src/tint/lang/hlsl/writer/raise/BUILD.gn index 80f3131..3c3b676 100644 --- a/src/tint/lang/hlsl/writer/raise/BUILD.gn +++ b/src/tint/lang/hlsl/writer/raise/BUILD.gn
@@ -51,8 +51,6 @@ "builtin_polyfill.h", "decompose_storage_access.cc", "decompose_storage_access.h", - "decompose_uniform_access.cc", - "decompose_uniform_access.h", "localize_struct_array_assignment.cc", "localize_struct_array_assignment.h", "pixel_local.cc", @@ -100,7 +98,6 @@ "binary_polyfill_test.cc", "builtin_polyfill_test.cc", "decompose_storage_access_test.cc", - "decompose_uniform_access_test.cc", "localize_struct_array_assignment_test.cc", "pixel_local_test.cc", "promote_initializers_test.cc",
diff --git a/src/tint/lang/hlsl/writer/raise/raise.cc b/src/tint/lang/hlsl/writer/raise/raise.cc index 40b7393..35fe534 100644 --- a/src/tint/lang/hlsl/writer/raise/raise.cc +++ b/src/tint/lang/hlsl/writer/raise/raise.cc
@@ -39,6 +39,7 @@ #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/decompose_uniform_access.h" #include "src/tint/lang/core/ir/transform/demote_to_helper.h" #include "src/tint/lang/core/ir/transform/direct_variable_access.h" #include "src/tint/lang/core/ir/transform/multiplanar_external_texture.h" @@ -58,7 +59,6 @@ #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/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" #include "src/tint/lang/hlsl/writer/raise/pixel_local.h" #include "src/tint/lang/hlsl/writer/raise/promote_initializers.h" @@ -245,7 +245,7 @@ RUN_TRANSFORM(core::ir::transform::ChangeImmediateToUniform, module, config); } // Comes after DecomposeStorageAccess and ChangeImmediateToUniform. - RUN_TRANSFORM(raise::DecomposeUniformAccess, module); + RUN_TRANSFORM(core::ir::transform::DecomposeUniformAccess, module); // PixelLocal must run after DirectVariableAccess to avoid chasing pointer parameters. if (pixel_local_enabled) {