| Index: src/sksl/SkSLSPIRVCodeGenerator.h
 | 
| diff --git a/src/sksl/SkSLSPIRVCodeGenerator.h b/src/sksl/SkSLSPIRVCodeGenerator.h
 | 
| index 885c6b8b706bc1ea6043b2d41af122d2113f9bcf..a20ad9f40b976fd693229936f34628a83e146142 100644
 | 
| --- a/src/sksl/SkSLSPIRVCodeGenerator.h
 | 
| +++ b/src/sksl/SkSLSPIRVCodeGenerator.h
 | 
| @@ -61,8 +61,9 @@ public:
 | 
|          virtual void store(SpvId value, std::ostream& out) = 0;
 | 
|      };
 | 
|  
 | 
| -    SPIRVCodeGenerator()
 | 
| -    : fCapabilities(1 << SpvCapabilityShader)
 | 
| +    SPIRVCodeGenerator(const Context* context)
 | 
| +    : fContext(*context)
 | 
| +    , fCapabilities(1 << SpvCapabilityShader)
 | 
|      , fIdCount(1)
 | 
|      , fBoolTrue(0)
 | 
|      , fBoolFalse(0)
 | 
| @@ -92,9 +93,9 @@ private:
 | 
|  
 | 
|      SpvId getType(const Type& type);
 | 
|  
 | 
| -    SpvId getFunctionType(std::shared_ptr<FunctionDeclaration> function);
 | 
| +    SpvId getFunctionType(const FunctionDeclaration& function);
 | 
|  
 | 
| -    SpvId getPointerType(std::shared_ptr<Type> type, SpvStorageClass_ storageClass);
 | 
| +    SpvId getPointerType(const Type& type, SpvStorageClass_ storageClass);
 | 
|  
 | 
|      std::vector<SpvId> getAccessChain(Expression& expr, std::ostream& out);
 | 
|  
 | 
| @@ -108,11 +109,11 @@ private:
 | 
|  
 | 
|      SpvId writeInterfaceBlock(InterfaceBlock& intf);
 | 
|  
 | 
| -    SpvId writeFunctionStart(std::shared_ptr<FunctionDeclaration> f, std::ostream& out);
 | 
| +    SpvId writeFunctionStart(const FunctionDeclaration& f, std::ostream& out);
 | 
|      
 | 
| -    SpvId writeFunctionDeclaration(std::shared_ptr<FunctionDeclaration> f, std::ostream& out);
 | 
| +    SpvId writeFunctionDeclaration(const FunctionDeclaration& f, std::ostream& out);
 | 
|  
 | 
| -    SpvId writeFunction(FunctionDefinition& f, std::ostream& out);
 | 
| +    SpvId writeFunction(const FunctionDefinition& f, std::ostream& out);
 | 
|  
 | 
|      void writeGlobalVars(VarDeclaration& v, std::ostream& out);
 | 
|  
 | 
| @@ -227,14 +228,16 @@ private:
 | 
|                            int32_t word5, int32_t word6, int32_t word7, int32_t word8, 
 | 
|                            std::ostream& out);
 | 
|  
 | 
| +    const Context& fContext;
 | 
| +
 | 
|      uint64_t fCapabilities;
 | 
|      SpvId fIdCount;
 | 
|      SpvId fGLSLExtendedInstructions;
 | 
|      typedef std::tuple<IntrinsicKind, int32_t, int32_t, int32_t, int32_t> Intrinsic;
 | 
|      std::unordered_map<std::string, Intrinsic> fIntrinsicMap;
 | 
| -    std::unordered_map<std::shared_ptr<FunctionDeclaration>, SpvId> fFunctionMap;
 | 
| -    std::unordered_map<std::shared_ptr<Variable>, SpvId> fVariableMap;
 | 
| -    std::unordered_map<std::shared_ptr<Variable>, int32_t> fInterfaceBlockMap;
 | 
| +    std::unordered_map<const FunctionDeclaration*, SpvId> fFunctionMap;
 | 
| +    std::unordered_map<const Variable*, SpvId> fVariableMap;
 | 
| +    std::unordered_map<const Variable*, int32_t> fInterfaceBlockMap;
 | 
|      std::unordered_map<std::string, SpvId> fTypeMap;
 | 
|      std::stringstream fCapabilitiesBuffer;
 | 
|      std::stringstream fGlobalInitializersBuffer;
 | 
| 
 |