tint: Simplify backend Sanitize functions by passing in Options

Reduces the amount of variable duplication and copying we do.

Bug: tint:1495
Change-Id: I7999eadf09dc899361926e01dea715e9edc124c9
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/86203
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
diff --git a/src/tint/writer/hlsl/generator_impl.cc b/src/tint/writer/hlsl/generator_impl.cc
index 110071f..008f184 100644
--- a/src/tint/writer/hlsl/generator_impl.cc
+++ b/src/tint/writer/hlsl/generator_impl.cc
@@ -134,12 +134,7 @@
 SanitizedResult::~SanitizedResult() = default;
 SanitizedResult::SanitizedResult(SanitizedResult&&) = default;
 
-SanitizedResult Sanitize(
-    const Program* in,
-    sem::BindingPoint root_constant_binding_point,
-    bool disable_workgroup_init,
-    bool generate_external_texture_bindings,
-    const ArrayLengthFromUniformOptions& array_length_from_uniform) {
+SanitizedResult Sanitize(const Program* in, const Options& options) {
   transform::Manager manager;
   transform::DataMap data;
 
@@ -158,12 +153,13 @@
   }
 
   // Build the config for the internal ArrayLengthFromUniform transform.
+  auto& array_length_from_uniform = options.array_length_from_uniform;
   transform::ArrayLengthFromUniform::Config array_length_from_uniform_cfg(
       array_length_from_uniform.ubo_binding);
   array_length_from_uniform_cfg.bindpoint_to_size_index =
       array_length_from_uniform.bindpoint_to_size_index;
 
-  if (generate_external_texture_bindings) {
+  if (options.generate_external_texture_bindings) {
     auto new_bindings_map = GenerateExternalTextureBindings(in);
     data.Add<transform::MultiplanarExternalTexture::NewBindingPoints>(
         new_bindings_map);
@@ -186,7 +182,7 @@
   manager.Add<transform::FoldTrivialSingleUseLets>();
   manager.Add<transform::LoopToForLoop>();
 
-  if (!disable_workgroup_init) {
+  if (!options.disable_workgroup_init) {
     // ZeroInitWorkgroupMemory must come before CanonicalizeEntryPointIO as
     // ZeroInitWorkgroupMemory may inject new builtin parameters.
     manager.Add<transform::ZeroInitWorkgroupMemory>();
@@ -227,7 +223,7 @@
   data.Add<transform::CanonicalizeEntryPointIO::Config>(
       transform::CanonicalizeEntryPointIO::ShaderStyle::kHlsl);
   data.Add<transform::NumWorkgroupsFromUniform::Config>(
-      root_constant_binding_point);
+      options.root_constant_binding_point);
 
   auto out = manager.Run(in, data);