[dawn] Enable substitute overrides for tint IR Compat (GL)

This was previously done for vk.
https://dawn-review.googlesource.com/c/dawn/+/223994

Bug: 382300469
Change-Id: Ia172fa59af23b47ead02b2fe117546033d7fe015
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/228394
Commit-Queue: Peter McNeeley <petermcneeley@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/dawn/native/opengl/ShaderModuleGL.cpp b/src/dawn/native/opengl/ShaderModuleGL.cpp
index 53738c8..7be9724 100644
--- a/src/dawn/native/opengl/ShaderModuleGL.cpp
+++ b/src/dawn/native/opengl/ShaderModuleGL.cpp
@@ -507,14 +507,6 @@
                 transformInputs.Add<tint::ast::transform::SingleEntryPoint::Config>(
                     r.entryPointName);
 
-                if (r.substituteOverrideConfig) {
-                    // This needs to run after SingleEntryPoint transform which removes unused
-                    // overrides for current entry point.
-                    transformManager.Add<tint::ast::transform::SubstituteOverride>();
-                    transformInputs.Add<tint::ast::transform::SubstituteOverride::Config>(
-                        std::move(r.substituteOverrideConfig).value());
-                }
-
                 tint::Program program;
                 tint::ast::transform::DataMap transformOutputs;
                 DAWN_TRY_ASSIGN(program,
@@ -534,6 +526,18 @@
                                 "An error occurred while generating Tint IR\n%s",
                                 ir.Failure().reason.Str());
 
+                if (r.substituteOverrideConfig) {
+                    // this needs to run after SingleEntryPoint transform which removes unused
+                    // overrides for the current entry point.
+                    tint::core::ir::transform::SubstituteOverridesConfig cfg;
+                    cfg.map = r.substituteOverrideConfig->map;
+                    auto substituteOverridesResult =
+                        tint::core::ir::transform::SubstituteOverrides(ir.Get(), cfg);
+                    DAWN_INVALID_IF(substituteOverridesResult != tint::Success,
+                                    "Pipeline override substitution (IR) failed:\n%s",
+                                    substituteOverridesResult.Failure().reason.Str());
+                }
+
                 // Generate GLSL from Tint IR.
                 auto result =
                     tint::glsl::writer::Generate(ir.Get(), r.tintOptions, remappedEntryPoint);