diff --git a/src/sksl/SkSLIRGenerator.cpp b/src/sksl/SkSLIRGenerator.cpp
index 4049a03..5589d07 100644
--- a/src/sksl/SkSLIRGenerator.cpp
+++ b/src/sksl/SkSLIRGenerator.cpp
@@ -170,22 +170,6 @@
     SkASSERT(layoutFlags == 0);
 }
 
-void IRGenerator::scanInterfaceBlock(SkSL::InterfaceBlock& intf) {
-    const std::vector<Type::Field>& fields = intf.variable().type().componentType().fields();
-    for (size_t i = 0; i < fields.size(); ++i) {
-        const Type::Field& f = fields[i];
-        if (f.fName == Compiler::RTADJUST_NAME) {
-            if (*f.fType == *fContext.fTypes.fFloat4) {
-                ThreadContext::RTAdjustData& rtAdjust = ThreadContext::RTAdjustState();
-                rtAdjust.fInterfaceBlock = &intf.variable();
-                rtAdjust.fFieldIndex = i;
-            } else {
-                this->errorReporter().error(intf.fLine, "sk_RTAdjust must have type 'float4'");
-            }
-        }
-    }
-}
-
 std::unique_ptr<Expression> IRGenerator::convertIdentifier(int line, skstd::string_view name) {
     const Symbol* result = (*fSymbolTable)[name];
     if (!result) {
diff --git a/src/sksl/SkSLIRGenerator.h b/src/sksl/SkSLIRGenerator.h
index 865ad98..fbd54b2 100644
--- a/src/sksl/SkSLIRGenerator.h
+++ b/src/sksl/SkSLIRGenerator.h
@@ -98,7 +98,6 @@
 private:
     IRGenerator::IRBundle finish();
 
-    void scanInterfaceBlock(SkSL::InterfaceBlock& intf);
     /** Appends sk_Position fixup to the bottom of main() if this is a vertex program. */
     void appendRTAdjustFixupToVertexMain(const FunctionDeclaration& decl, Block* body);
 
diff --git a/src/sksl/dsl/DSLCore.cpp b/src/sksl/dsl/DSLCore.cpp
index e8750af..746d7e1 100644
--- a/src/sksl/dsl/DSLCore.cpp
+++ b/src/sksl/dsl/DSLCore.cpp
@@ -212,6 +212,25 @@
                                     ifTrue.release(), ifFalse.releaseIfPossible());
     }
 
+    static void FindRTAdjust(SkSL::InterfaceBlock& intf, PositionInfo pos) {
+        const std::vector<SkSL::Type::Field>& fields =
+                intf.variable().type().componentType().fields();
+        const Context& context = ThreadContext::Context();
+        for (size_t i = 0; i < fields.size(); ++i) {
+            const SkSL::Type::Field& f = fields[i];
+            if (f.fName == SkSL::Compiler::RTADJUST_NAME) {
+                if (*f.fType == *context.fTypes.fFloat4) {
+                    ThreadContext::RTAdjustData& rtAdjust = ThreadContext::RTAdjustState();
+                    rtAdjust.fInterfaceBlock = &intf.variable();
+                    rtAdjust.fFieldIndex = i;
+                } else {
+                    ThreadContext::ReportError("sk_RTAdjust must have type 'float4'", pos);
+                }
+                break;
+            }
+        }
+    }
+
     static DSLGlobalVar InterfaceBlock(const DSLModifiers& modifiers, skstd::string_view typeName,
                                        SkTArray<DSLField> fields, skstd::string_view varName,
                                        int arraySize, PositionInfo pos) {
@@ -245,7 +264,7 @@
         if (skslVar) {
             auto intf = std::make_unique<SkSL::InterfaceBlock>(pos.line(),
                     *skslVar, typeName, varName, arraySize, ThreadContext::SymbolTable());
-            ThreadContext::IRGenerator().scanInterfaceBlock(*intf);
+            FindRTAdjust(*intf, pos);
             ThreadContext::ProgramElements().push_back(std::move(intf));
             if (varName.empty()) {
                 const std::vector<SkSL::Type::Field>& structFields = structType->fields();
