[glsl] Fill out `raise` method. This CL fills out the GLSL with the existing raise transforms and marks TODO entries for any missing transforms. Bug: 42251044 Change-Id: Ia785c7c790be7a593d9eaca25d3553aeb9c5fad3 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/200238 Commit-Queue: dan sinclair <dsinclair@chromium.org> Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/tint/lang/glsl/writer/BUILD.bazel b/src/tint/lang/glsl/writer/BUILD.bazel index 751ec84..fa8e7fc 100644 --- a/src/tint/lang/glsl/writer/BUILD.bazel +++ b/src/tint/lang/glsl/writer/BUILD.bazel
@@ -51,7 +51,6 @@ "//src/tint/lang/core", "//src/tint/lang/core/constant", "//src/tint/lang/core/type", - "//src/tint/lang/glsl/writer/raise", "//src/tint/lang/wgsl", "//src/tint/lang/wgsl/ast", "//src/tint/lang/wgsl/ast/transform", @@ -77,6 +76,7 @@ "//src/tint/lang/glsl/writer/ast_printer", "//src/tint/lang/glsl/writer/common", "//src/tint/lang/glsl/writer/printer", + "//src/tint/lang/glsl/writer/raise", ], "//conditions:default": [], }),
diff --git a/src/tint/lang/glsl/writer/BUILD.cmake b/src/tint/lang/glsl/writer/BUILD.cmake index 1d3b921..a859466 100644 --- a/src/tint/lang/glsl/writer/BUILD.cmake +++ b/src/tint/lang/glsl/writer/BUILD.cmake
@@ -59,7 +59,6 @@ tint_lang_core tint_lang_core_constant tint_lang_core_type - tint_lang_glsl_writer_raise tint_lang_wgsl tint_lang_wgsl_ast tint_lang_wgsl_ast_transform @@ -87,6 +86,7 @@ tint_lang_glsl_writer_ast_printer tint_lang_glsl_writer_common tint_lang_glsl_writer_printer + tint_lang_glsl_writer_raise ) endif(TINT_BUILD_GLSL_WRITER)
diff --git a/src/tint/lang/glsl/writer/BUILD.gn b/src/tint/lang/glsl/writer/BUILD.gn index a4e3430..abd6f82 100644 --- a/src/tint/lang/glsl/writer/BUILD.gn +++ b/src/tint/lang/glsl/writer/BUILD.gn
@@ -54,7 +54,6 @@ "${tint_src_dir}/lang/core", "${tint_src_dir}/lang/core/constant", "${tint_src_dir}/lang/core/type", - "${tint_src_dir}/lang/glsl/writer/raise", "${tint_src_dir}/lang/wgsl", "${tint_src_dir}/lang/wgsl/ast", "${tint_src_dir}/lang/wgsl/ast/transform", @@ -82,6 +81,7 @@ "${tint_src_dir}/lang/glsl/writer/ast_printer", "${tint_src_dir}/lang/glsl/writer/common", "${tint_src_dir}/lang/glsl/writer/printer", + "${tint_src_dir}/lang/glsl/writer/raise", ] } }
diff --git a/src/tint/lang/glsl/writer/printer/BUILD.bazel b/src/tint/lang/glsl/writer/printer/BUILD.bazel index 8961c7a..a538164 100644 --- a/src/tint/lang/glsl/writer/printer/BUILD.bazel +++ b/src/tint/lang/glsl/writer/printer/BUILD.bazel
@@ -88,7 +88,11 @@ "//src/tint/lang/core/intrinsic", "//src/tint/lang/core/ir", "//src/tint/lang/core/type", - "//src/tint/lang/glsl/writer/raise", + "//src/tint/lang/wgsl", + "//src/tint/lang/wgsl/ast", + "//src/tint/lang/wgsl/ast/transform", + "//src/tint/lang/wgsl/program", + "//src/tint/lang/wgsl/sem", "//src/tint/utils/containers", "//src/tint/utils/diagnostic", "//src/tint/utils/ice", @@ -107,6 +111,7 @@ ":tint_build_glsl_writer": [ "//src/tint/lang/glsl/writer/common", "//src/tint/lang/glsl/writer/printer", + "//src/tint/lang/glsl/writer/raise", ], "//conditions:default": [], }),
diff --git a/src/tint/lang/glsl/writer/printer/BUILD.cmake b/src/tint/lang/glsl/writer/printer/BUILD.cmake index 31486dd..1eb460f 100644 --- a/src/tint/lang/glsl/writer/printer/BUILD.cmake +++ b/src/tint/lang/glsl/writer/printer/BUILD.cmake
@@ -93,7 +93,11 @@ tint_lang_core_intrinsic tint_lang_core_ir tint_lang_core_type - tint_lang_glsl_writer_raise + tint_lang_wgsl + tint_lang_wgsl_ast + tint_lang_wgsl_ast_transform + tint_lang_wgsl_program + tint_lang_wgsl_sem tint_utils_containers tint_utils_diagnostic tint_utils_ice @@ -117,6 +121,7 @@ tint_target_add_dependencies(tint_lang_glsl_writer_printer_test test tint_lang_glsl_writer_common tint_lang_glsl_writer_printer + tint_lang_glsl_writer_raise ) endif(TINT_BUILD_GLSL_WRITER)
diff --git a/src/tint/lang/glsl/writer/printer/BUILD.gn b/src/tint/lang/glsl/writer/printer/BUILD.gn index 59f838a..e66d5f3 100644 --- a/src/tint/lang/glsl/writer/printer/BUILD.gn +++ b/src/tint/lang/glsl/writer/printer/BUILD.gn
@@ -90,7 +90,11 @@ "${tint_src_dir}/lang/core/intrinsic", "${tint_src_dir}/lang/core/ir", "${tint_src_dir}/lang/core/type", - "${tint_src_dir}/lang/glsl/writer/raise", + "${tint_src_dir}/lang/wgsl", + "${tint_src_dir}/lang/wgsl/ast", + "${tint_src_dir}/lang/wgsl/ast/transform", + "${tint_src_dir}/lang/wgsl/program", + "${tint_src_dir}/lang/wgsl/sem", "${tint_src_dir}/utils/containers", "${tint_src_dir}/utils/diagnostic", "${tint_src_dir}/utils/ice", @@ -110,6 +114,7 @@ deps += [ "${tint_src_dir}/lang/glsl/writer/common", "${tint_src_dir}/lang/glsl/writer/printer", + "${tint_src_dir}/lang/glsl/writer/raise", ] } }
diff --git a/src/tint/lang/glsl/writer/printer/function_test.cc b/src/tint/lang/glsl/writer/printer/function_test.cc index 763a051..ae170ae 100644 --- a/src/tint/lang/glsl/writer/printer/function_test.cc +++ b/src/tint/lang/glsl/writer/printer/function_test.cc
@@ -38,6 +38,8 @@ EXPECT_EQ(output_, GlslHeader() + R"( void foo() { } +void unused_entry_point() { +} )"); }
diff --git a/src/tint/lang/glsl/writer/printer/helper_test.h b/src/tint/lang/glsl/writer/printer/helper_test.h index 2dbcd00..131922c 100644 --- a/src/tint/lang/glsl/writer/printer/helper_test.h +++ b/src/tint/lang/glsl/writer/printer/helper_test.h
@@ -62,7 +62,7 @@ /// Run the writer on the IR module and validate the result. /// @returns true if generation and validation succeeded bool Generate() { - if (auto raised = Raise(mod); raised != Success) { + if (auto raised = Raise(mod, {}); raised != Success) { err_ = raised.Failure().reason.Str(); return false; }
diff --git a/src/tint/lang/glsl/writer/raise/BUILD.bazel b/src/tint/lang/glsl/writer/raise/BUILD.bazel index ab458ab..2a36846 100644 --- a/src/tint/lang/glsl/writer/raise/BUILD.bazel +++ b/src/tint/lang/glsl/writer/raise/BUILD.bazel
@@ -45,18 +45,42 @@ "raise.h", ], deps = [ + "//src/tint/api/common", + "//src/tint/lang/core", + "//src/tint/lang/core/common", + "//src/tint/lang/core/constant", + "//src/tint/lang/core/ir/transform", + "//src/tint/lang/core/type", + "//src/tint/lang/wgsl", + "//src/tint/lang/wgsl/ast", + "//src/tint/lang/wgsl/ast/transform", + "//src/tint/lang/wgsl/program", + "//src/tint/lang/wgsl/sem", "//src/tint/utils/containers", "//src/tint/utils/diagnostic", "//src/tint/utils/ice", + "//src/tint/utils/id", "//src/tint/utils/macros", "//src/tint/utils/math", "//src/tint/utils/memory", + "//src/tint/utils/reflection", "//src/tint/utils/result", "//src/tint/utils/rtti", + "//src/tint/utils/symbol", "//src/tint/utils/text", "//src/tint/utils/traits", - ], + ] + select({ + ":tint_build_glsl_writer": [ + "//src/tint/lang/glsl/writer/common", + ], + "//conditions:default": [], + }), copts = COPTS, visibility = ["//visibility:public"], ) +alias( + name = "tint_build_glsl_writer", + actual = "//src/tint:tint_build_glsl_writer_true", +) +
diff --git a/src/tint/lang/glsl/writer/raise/BUILD.cfg b/src/tint/lang/glsl/writer/raise/BUILD.cfg new file mode 100644 index 0000000..7459430 --- /dev/null +++ b/src/tint/lang/glsl/writer/raise/BUILD.cfg
@@ -0,0 +1,3 @@ +{ + "condition": "tint_build_glsl_writer" +}
diff --git a/src/tint/lang/glsl/writer/raise/BUILD.cmake b/src/tint/lang/glsl/writer/raise/BUILD.cmake index 90ff6d3..3e4ab10 100644 --- a/src/tint/lang/glsl/writer/raise/BUILD.cmake +++ b/src/tint/lang/glsl/writer/raise/BUILD.cmake
@@ -34,9 +34,11 @@ # Do not modify this file directly ################################################################################ +if(TINT_BUILD_GLSL_WRITER) ################################################################################ # Target: tint_lang_glsl_writer_raise # Kind: lib +# Condition: TINT_BUILD_GLSL_WRITER ################################################################################ tint_add_target(tint_lang_glsl_writer_raise lib lang/glsl/writer/raise/raise.cc @@ -44,14 +46,36 @@ ) tint_target_add_dependencies(tint_lang_glsl_writer_raise lib + tint_api_common + tint_lang_core + tint_lang_core_common + tint_lang_core_constant + tint_lang_core_ir_transform + tint_lang_core_type + tint_lang_wgsl + tint_lang_wgsl_ast + tint_lang_wgsl_ast_transform + tint_lang_wgsl_program + tint_lang_wgsl_sem tint_utils_containers tint_utils_diagnostic tint_utils_ice + tint_utils_id tint_utils_macros tint_utils_math tint_utils_memory + tint_utils_reflection tint_utils_result tint_utils_rtti + tint_utils_symbol tint_utils_text tint_utils_traits ) + +if(TINT_BUILD_GLSL_WRITER) + tint_target_add_dependencies(tint_lang_glsl_writer_raise lib + tint_lang_glsl_writer_common + ) +endif(TINT_BUILD_GLSL_WRITER) + +endif(TINT_BUILD_GLSL_WRITER) \ No newline at end of file
diff --git a/src/tint/lang/glsl/writer/raise/BUILD.gn b/src/tint/lang/glsl/writer/raise/BUILD.gn index bd20a51..ef33c7b 100644 --- a/src/tint/lang/glsl/writer/raise/BUILD.gn +++ b/src/tint/lang/glsl/writer/raise/BUILD.gn
@@ -37,22 +37,41 @@ import("../../../../../../scripts/tint_overrides_with_defaults.gni") import("${tint_src_dir}/tint.gni") +if (tint_build_glsl_writer) { + libtint_source_set("raise") { + sources = [ + "raise.cc", + "raise.h", + ] + deps = [ + "${tint_src_dir}/api/common", + "${tint_src_dir}/lang/core", + "${tint_src_dir}/lang/core/common", + "${tint_src_dir}/lang/core/constant", + "${tint_src_dir}/lang/core/ir/transform", + "${tint_src_dir}/lang/core/type", + "${tint_src_dir}/lang/wgsl", + "${tint_src_dir}/lang/wgsl/ast", + "${tint_src_dir}/lang/wgsl/ast/transform", + "${tint_src_dir}/lang/wgsl/program", + "${tint_src_dir}/lang/wgsl/sem", + "${tint_src_dir}/utils/containers", + "${tint_src_dir}/utils/diagnostic", + "${tint_src_dir}/utils/ice", + "${tint_src_dir}/utils/id", + "${tint_src_dir}/utils/macros", + "${tint_src_dir}/utils/math", + "${tint_src_dir}/utils/memory", + "${tint_src_dir}/utils/reflection", + "${tint_src_dir}/utils/result", + "${tint_src_dir}/utils/rtti", + "${tint_src_dir}/utils/symbol", + "${tint_src_dir}/utils/text", + "${tint_src_dir}/utils/traits", + ] -libtint_source_set("raise") { - sources = [ - "raise.cc", - "raise.h", - ] - deps = [ - "${tint_src_dir}/utils/containers", - "${tint_src_dir}/utils/diagnostic", - "${tint_src_dir}/utils/ice", - "${tint_src_dir}/utils/macros", - "${tint_src_dir}/utils/math", - "${tint_src_dir}/utils/memory", - "${tint_src_dir}/utils/result", - "${tint_src_dir}/utils/rtti", - "${tint_src_dir}/utils/text", - "${tint_src_dir}/utils/traits", - ] + if (tint_build_glsl_writer) { + deps += [ "${tint_src_dir}/lang/glsl/writer/common" ] + } + } }
diff --git a/src/tint/lang/glsl/writer/raise/raise.cc b/src/tint/lang/glsl/writer/raise/raise.cc index 1985ec7..6d87810 100644 --- a/src/tint/lang/glsl/writer/raise/raise.cc +++ b/src/tint/lang/glsl/writer/raise/raise.cc
@@ -27,16 +27,114 @@ #include "src/tint/lang/glsl/writer/raise/raise.h" +#include "src/tint/lang/core/ir/transform/add_empty_entry_point.h" +#include "src/tint/lang/core/ir/transform/array_length_from_uniform.h" +#include "src/tint/lang/core/ir/transform/binary_polyfill.h" +#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/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" +#include "src/tint/lang/core/ir/transform/multiplanar_external_texture.h" +#include "src/tint/lang/core/ir/transform/preserve_padding.h" +#include "src/tint/lang/core/ir/transform/remove_terminator_args.h" +#include "src/tint/lang/core/ir/transform/rename_conflicts.h" +#include "src/tint/lang/core/ir/transform/robustness.h" +#include "src/tint/lang/core/ir/transform/value_to_let.h" +#include "src/tint/lang/core/ir/transform/vectorize_scalar_matrix_constructors.h" +#include "src/tint/lang/core/ir/transform/zero_init_workgroup_memory.h" +#include "src/tint/lang/glsl/writer/common/option_helpers.h" + namespace tint::glsl::writer { -Result<SuccessType> Raise(core::ir::Module&) { - // #define RUN_TRANSFORM(name) - // do { - // auto result = core::ir::transform::name(module); - // if (!result) { - // return result; - // } - // } while (false) +Result<SuccessType> Raise(core::ir::Module& module, const Options& options) { +#define RUN_TRANSFORM(name, ...) \ + do { \ + auto result = name(__VA_ARGS__); \ + if (result != Success) { \ + return result.Failure(); \ + } \ + } while (false) + + tint::transform::multiplanar::BindingsMap multiplanar_map{}; + RemapperData remapper_data{}; + PopulateBindingInfo(options, remapper_data, multiplanar_map); + RUN_TRANSFORM(core::ir::transform::BindingRemapper, module, remapper_data); + + { + core::ir::transform::BinaryPolyfillConfig binary_polyfills{}; + binary_polyfills.int_div_mod = !options.disable_polyfill_integer_div_mod; + binary_polyfills.bitshift_modulo = true; // crbug.com/tint/1543 + RUN_TRANSFORM(core::ir::transform::BinaryPolyfill, module, binary_polyfills); + } + + { + core::ir::transform::BuiltinPolyfillConfig core_polyfills{}; + core_polyfills.clamp_int = true; + core_polyfills.count_leading_zeros = true; + core_polyfills.count_trailing_zeros = true; + core_polyfills.extract_bits = core::ir::transform::BuiltinPolyfillLevel::kClampOrRangeCheck; + core_polyfills.first_leading_bit = true; + core_polyfills.first_trailing_bit = true; + core_polyfills.insert_bits = core::ir::transform::BuiltinPolyfillLevel::kClampOrRangeCheck; + core_polyfills.saturate = true; + core_polyfills.texture_sample_base_clamp_to_edge_2d_f32 = true; + core_polyfills.dot_4x8_packed = true; + core_polyfills.pack_unpack_4x8 = true; + core_polyfills.pack_4xu8_clamp = true; + + // TODO(dsinclair): bgra8unorm + // TODO(dsinclair): bitshift_modulo + // TODO(dsinclair): int_div_mod + + RUN_TRANSFORM(core::ir::transform::BuiltinPolyfill, module, core_polyfills); + } + + { + core::ir::transform::ConversionPolyfillConfig conversion_polyfills; + conversion_polyfills.ftoi = true; + RUN_TRANSFORM(core::ir::transform::ConversionPolyfill, module, conversion_polyfills); + } + + if (!options.disable_robustness) { + core::ir::transform::RobustnessConfig config{}; + RUN_TRANSFORM(core::ir::transform::Robustness, module, config); + } + + RUN_TRANSFORM(core::ir::transform::MultiplanarExternalTexture, module, multiplanar_map); + + // TODO(dsinclair): SingleEntryPoint + // TODO(dsinclair): TextureBuiltinsFromUniform + // TODO(dsinclair): AddBlockAttribute + // TODO(dsinclair): OffsetFirstIndex + // TODO(dsinclair): ClampFragDepth + // TODO(dsinclair): ShaderIO + // TODO(dsinclair): CombineSamplers + // TODO(dsinclair): PadStructs + // TODO(dsinclair): RemoveContinueInSwitch + // TODO(dsinclair): Std140 + // TODO(dsinclair): Texture1DTo2D + + RUN_TRANSFORM(core::ir::transform::DirectVariableAccess, module, + core::ir::transform::DirectVariableAccessOptions{}); + + if (!options.disable_workgroup_init) { + RUN_TRANSFORM(core::ir::transform::ZeroInitWorkgroupMemory, module); + } + + RUN_TRANSFORM(core::ir::transform::PreservePadding, module); + RUN_TRANSFORM(core::ir::transform::VectorizeScalarMatrixConstructors, module); + + // DemoteToHelper must come before any transform that introduces non-core instructions. + RUN_TRANSFORM(core::ir::transform::DemoteToHelper, module); + + RUN_TRANSFORM(core::ir::transform::AddEmptyEntryPoint, module); + + // These transforms need to be run last as various transforms introduce terminator arguments, + // naming conflicts, and expressions that need to be explicitly not inlined. + RUN_TRANSFORM(core::ir::transform::RemoveTerminatorArgs, module); + RUN_TRANSFORM(core::ir::transform::RenameConflicts, module); + RUN_TRANSFORM(core::ir::transform::ValueToLet, module); return Success; }
diff --git a/src/tint/lang/glsl/writer/raise/raise.h b/src/tint/lang/glsl/writer/raise/raise.h index 846790d..7b48911 100644 --- a/src/tint/lang/glsl/writer/raise/raise.h +++ b/src/tint/lang/glsl/writer/raise/raise.h
@@ -28,6 +28,7 @@ #ifndef SRC_TINT_LANG_GLSL_WRITER_RAISE_RAISE_H_ #define SRC_TINT_LANG_GLSL_WRITER_RAISE_RAISE_H_ +#include "src/tint/lang/glsl/writer/common/options.h" #include "src/tint/utils/result/result.h" // Forward declarations @@ -38,9 +39,10 @@ namespace tint::glsl::writer { /// Raise a core IR module to the MSL dialect of the IR. -/// @param mod the core IR module to raise to MSL dialect +/// @param module the core IR module to raise to MSL dialect +/// @param options the writer options /// @returns success or failure -Result<SuccessType> Raise(core::ir::Module& mod); +Result<SuccessType> Raise(core::ir::Module& module, const Options& options); } // namespace tint::glsl::writer
diff --git a/src/tint/lang/glsl/writer/writer.cc b/src/tint/lang/glsl/writer/writer.cc index 17bd7ef..4d07b03 100644 --- a/src/tint/lang/glsl/writer/writer.cc +++ b/src/tint/lang/glsl/writer/writer.cc
@@ -40,7 +40,7 @@ Output output; // Raise from core-dialect to GLSL-dialect. - if (auto res = Raise(ir); res != Success) { + if (auto res = Raise(ir, options); res != Success) { return res.Failure(); }