diff --git a/src/sksl/SkSLIRGenerator.cpp b/src/sksl/SkSLIRGenerator.cpp
index 7be396e..4049a03 100644
--- a/src/sksl/SkSLIRGenerator.cpp
+++ b/src/sksl/SkSLIRGenerator.cpp
@@ -21,6 +21,7 @@
 #include "src/sksl/SkSLConstantFolder.h"
 #include "src/sksl/SkSLIntrinsicMap.h"
 #include "src/sksl/SkSLOperators.h"
+#include "src/sksl/SkSLThreadContext.h"
 #include "src/sksl/SkSLUtil.h"
 #include "src/sksl/ir/SkSLBinaryExpression.h"
 #include "src/sksl/ir/SkSLBreakStatement.h"
@@ -71,7 +72,8 @@
     using OwnerKind = SkSL::FieldAccess::OwnerKind;
 
     // If this is a vertex program that uses RTAdjust, and this is main()...
-    if ((fRTAdjust || fRTAdjustInterfaceBlock) && decl.isMain() &&
+    ThreadContext::RTAdjustData& rtAdjust = ThreadContext::RTAdjustState();
+    if ((rtAdjust.fVar || rtAdjust.fInterfaceBlock) && decl.isMain() &&
         ProgramKind::kVertex == this->programKind()) {
         // ... append a line to the end of the function body which fixes up sk_Position.
         const Variable* skPerVertex = nullptr;
@@ -93,9 +95,9 @@
                                                    OwnerKind::kAnonymousInterfaceBlock));
         };
         auto Adjust = [&]() -> DSLExpression {
-            return DSLExpression(fRTAdjustInterfaceBlock
-                                         ? Field(fRTAdjustInterfaceBlock, fRTAdjustFieldIndex)
-                                         : Ref(fRTAdjust));
+            return DSLExpression(rtAdjust.fInterfaceBlock
+                                         ? Field(rtAdjust.fInterfaceBlock, rtAdjust.fFieldIndex)
+                                         : Ref(rtAdjust.fVar));
         };
 
         auto fixupStmt = DSLStatement(
@@ -174,8 +176,9 @@
         const Type::Field& f = fields[i];
         if (f.fName == Compiler::RTADJUST_NAME) {
             if (*f.fType == *fContext.fTypes.fFloat4) {
-                fRTAdjustInterfaceBlock = &intf.variable();
-                fRTAdjustFieldIndex = i;
+                ThreadContext::RTAdjustData& rtAdjust = ThreadContext::RTAdjustState();
+                rtAdjust.fInterfaceBlock = &intf.variable();
+                rtAdjust.fFieldIndex = i;
             } else {
                 this->errorReporter().error(intf.fLine, "sk_RTAdjust must have type 'float4'");
             }
@@ -243,8 +246,6 @@
     fSymbolTable = base.fSymbols;
 
     fInputs = {};
-    fRTAdjust = nullptr;
-    fRTAdjustInterfaceBlock = nullptr;
     fDefinedStructs.clear();
     SymbolTable::Push(&fSymbolTable, fContext.fConfig->fIsBuiltinCode);
 
diff --git a/src/sksl/SkSLIRGenerator.h b/src/sksl/SkSLIRGenerator.h
index 73e1ec9..865ad98 100644
--- a/src/sksl/SkSLIRGenerator.h
+++ b/src/sksl/SkSLIRGenerator.h
@@ -59,6 +59,10 @@
         Program::Inputs                              fInputs;
     };
 
+    void start(const ParsedModule& base,
+               std::vector<std::unique_ptr<ProgramElement>>* elements,
+               std::vector<const ProgramElement*>* sharedElements);
+
     /**
      * If externalFunctions is supplied, those values are registered in the symbol table of the
      * Program, but ownership is *not* transferred. It is up to the caller to keep them alive.
@@ -89,18 +93,9 @@
 
     std::unique_ptr<Expression> convertIdentifier(int line, skstd::string_view identifier);
 
-    bool haveRTAdjustInterfaceBlock() { return fRTAdjustInterfaceBlock != nullptr; }
-
-    int getRTAdjustFieldIndex() { return fRTAdjustFieldIndex; }
-
     const Context& fContext;
-    const Variable* fRTAdjust = nullptr;
 
 private:
-    void start(const ParsedModule& base,
-               std::vector<std::unique_ptr<ProgramElement>>* elements,
-               std::vector<const ProgramElement*>* sharedElements);
-
     IRGenerator::IRBundle finish();
 
     void scanInterfaceBlock(SkSL::InterfaceBlock& intf);
@@ -131,8 +126,6 @@
     std::unordered_set<const Type*> fDefinedStructs;
     std::vector<std::unique_ptr<ProgramElement>>* fProgramElements = nullptr;
     std::vector<const ProgramElement*>*           fSharedElements = nullptr;
-    const Variable* fRTAdjustInterfaceBlock = nullptr;
-    int fRTAdjustFieldIndex;
 
     friend class AutoSymbolTable;
     friend class AutoLoopLevel;
diff --git a/src/sksl/SkSLThreadContext.cpp b/src/sksl/SkSLThreadContext.cpp
index 5fe3023..8b95e32 100644
--- a/src/sksl/SkSLThreadContext.cpp
+++ b/src/sksl/SkSLThreadContext.cpp
@@ -90,6 +90,10 @@
     return Context().fModifiersPool->add(modifiers);
 }
 
+ThreadContext::RTAdjustData& ThreadContext::RTAdjustState() {
+    return Instance().fRTAdjust;
+}
+
 #if !defined(SKSL_STANDALONE) && SK_SUPPORT_GPU
 void ThreadContext::StartFragmentProcessor(GrFragmentProcessor::ProgramImpl* processor,
         GrFragmentProcessor::ProgramImpl::EmitArgs* emitArgs) {
diff --git a/src/sksl/SkSLThreadContext.h b/src/sksl/SkSLThreadContext.h
index 8959f15..e8c96af 100644
--- a/src/sksl/SkSLThreadContext.h
+++ b/src/sksl/SkSLThreadContext.h
@@ -115,6 +115,20 @@
      */
     static const SkSL::Modifiers* Modifiers(const SkSL::Modifiers& modifiers);
 
+    struct RTAdjustData {
+        // Points to a standalone sk_RTAdjust variable, if one exists.
+        const Variable* fVar = nullptr;
+        // Points to the interface block containing an sk_RTAdjust field, if one exists.
+        const Variable* fInterfaceBlock = nullptr;
+        // If fInterfaceBlock is non-null, contains the index of the sk_RTAdjust field within it.
+        int fFieldIndex = -1;
+    };
+
+    /**
+     * Returns a struct containing information about the RTAdjust variable.
+     */
+    static RTAdjustData& RTAdjustState();
+
 #if !defined(SKSL_STANDALONE) && SK_SUPPORT_GPU
     /**
      * Returns the fragment processor for which DSL output is being generated for the current
@@ -195,6 +209,7 @@
     ErrorReporter& fOldErrorReporter;
     ProgramSettings fSettings;
     Mangler fMangler;
+    RTAdjustData fRTAdjust;
 #if !defined(SKSL_STANDALONE) && SK_SUPPORT_GPU
     struct StackFrame {
         GrFragmentProcessor::ProgramImpl* fProcessor;
diff --git a/src/sksl/ir/SkSLVarDeclarations.cpp b/src/sksl/ir/SkSLVarDeclarations.cpp
index d63397a..5a74b77 100644
--- a/src/sksl/ir/SkSLVarDeclarations.cpp
+++ b/src/sksl/ir/SkSLVarDeclarations.cpp
@@ -179,7 +179,7 @@
                 var->storage() == Variable::Storage::kInterfaceBlock) &&
                var->name() == Compiler::RTADJUST_NAME) {
         // `sk_RTAdjust` is special, and makes the IR generator emit position-fixup expressions.
-        if (ThreadContext::IRGenerator().fRTAdjust) {
+        if (ThreadContext::RTAdjustState().fVar || ThreadContext::RTAdjustState().fInterfaceBlock) {
             context.fErrors->error(var->fLine, "duplicate definition of 'sk_RTAdjust'");
             return nullptr;
         }
@@ -187,7 +187,7 @@
             context.fErrors->error(var->fLine, "sk_RTAdjust must have type 'float4'");
             return nullptr;
         }
-        ThreadContext::IRGenerator().fRTAdjust = var.get();
+        ThreadContext::RTAdjustState().fVar = var.get();
     }
 
     if (addToSymbolTable) {
diff --git a/src/sksl/ir/SkSLVariable.h b/src/sksl/ir/SkSLVariable.h
index c2b4957..4e4cab9 100644
--- a/src/sksl/ir/SkSLVariable.h
+++ b/src/sksl/ir/SkSLVariable.h
@@ -58,6 +58,7 @@
     static std::unique_ptr<Variable> Make(const Context& context, int line,
             const Modifiers& modifiers, const Type* baseType, skstd::string_view name, bool isArray,
             std::unique_ptr<Expression> arraySize, Variable::Storage storage);
+
     /**
      * Creates a local scratch variable and the associated VarDeclaration statement.
      * Useful when doing IR rewrites, e.g. inlining a function call.
diff --git a/tests/SkSLDSLTest.cpp b/tests/SkSLDSLTest.cpp
index ec5cf1d..6d31185 100644
--- a/tests/SkSLDSLTest.cpp
+++ b/tests/SkSLDSLTest.cpp
@@ -2036,13 +2036,13 @@
     {
         AutoDSLContext context(ctxInfo.directContext()->priv().getGpu(), no_mark_vars_declared(),
                                SkSL::ProgramKind::kVertex);
-        REPORTER_ASSERT(r, !SkSL::ThreadContext::IRGenerator().haveRTAdjustInterfaceBlock());
+        REPORTER_ASSERT(r, !SkSL::ThreadContext::RTAdjustState().fInterfaceBlock);
 
         DSLGlobalVar intf = InterfaceBlock(kUniform_Modifier, "uniforms",
                                            { Field(kInt_Type, "unused"),
                                              Field(kFloat4_Type, "sk_RTAdjust") });
-        REPORTER_ASSERT(r, SkSL::ThreadContext::IRGenerator().haveRTAdjustInterfaceBlock());
-        REPORTER_ASSERT(r, SkSL::ThreadContext::IRGenerator().getRTAdjustFieldIndex() == 1);
+        REPORTER_ASSERT(r, SkSL::ThreadContext::RTAdjustState().fInterfaceBlock);
+        REPORTER_ASSERT(r, SkSL::ThreadContext::RTAdjustState().fFieldIndex == 1);
     }
 
     {
