diff options
author | Ethan Nicholas <ethannicholas@google.com> | 2017-06-27 09:56:09 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-06-27 14:20:05 +0000 |
commit | ccf59917d3fe7aaf59de714acfbd0596503f324f (patch) | |
tree | cc97719c47276c9dcbf0ec09effd580c4e7450dd /src/sksl/SkSLIRGenerator.h | |
parent | c3aef18419c1bb16951370e11758c7ef131fa10b (diff) |
sksl fragment processor support
Bug: skia:
Change-Id: Ia3b0305c2b0c78074303831f628fb01852b90d34
Reviewed-on: https://skia-review.googlesource.com/17843
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ben Wagner <benjaminwagner@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Diffstat (limited to 'src/sksl/SkSLIRGenerator.h')
-rw-r--r-- | src/sksl/SkSLIRGenerator.h | 41 |
1 files changed, 17 insertions, 24 deletions
diff --git a/src/sksl/SkSLIRGenerator.h b/src/sksl/SkSLIRGenerator.h index 29513d8d34..3078a9e8df 100644 --- a/src/sksl/SkSLIRGenerator.h +++ b/src/sksl/SkSLIRGenerator.h @@ -27,6 +27,7 @@ #include "ast/SkSLASTModifiersDeclaration.h" #include "ast/SkSLASTPrefixExpression.h" #include "ast/SkSLASTReturnStatement.h" +#include "ast/SkSLASTSection.h" #include "ast/SkSLASTStatement.h" #include "ast/SkSLASTSuffixExpression.h" #include "ast/SkSLASTSwitchStatement.h" @@ -42,6 +43,7 @@ #include "ir/SkSLModifiers.h" #include "ir/SkSLModifiersDeclaration.h" #include "ir/SkSLProgram.h" +#include "ir/SkSLSection.h" #include "ir/SkSLSymbolTable.h" #include "ir/SkSLStatement.h" #include "ir/SkSLType.h" @@ -50,28 +52,6 @@ namespace SkSL { -struct CapValue { - CapValue() - : fKind(kInt_Kind) - , fValue(-1) { - ASSERT(false); - } - - CapValue(bool b) - : fKind(kBool_Kind) - , fValue(b) {} - - CapValue(int i) - : fKind(kInt_Kind) - , fValue(i) {} - - enum { - kBool_Kind, - kInt_Kind, - } fKind; - int fValue; -}; - /** * Performs semantic analysis on an abstract syntax tree (AST) and produces the corresponding * (unoptimized) intermediate representation (IR). @@ -95,6 +75,7 @@ public: Token::Kind op, const Expression& right) const; Program::Inputs fInputs; + const Program::Settings* fSettings; const Context& fContext; private: @@ -160,7 +141,9 @@ private: Modifiers convertModifiers(const Modifiers& m); std::unique_ptr<Expression> convertPrefixExpression(const ASTPrefixExpression& expression); std::unique_ptr<Statement> convertReturn(const ASTReturnStatement& r); + std::unique_ptr<Section> convertSection(const ASTSection& e); std::unique_ptr<Expression> getCap(Position position, String name); + std::unique_ptr<Expression> getArg(Position position, String name); std::unique_ptr<Expression> convertSuffixExpression(const ASTSuffixExpression& expression); std::unique_ptr<Expression> convertField(std::unique_ptr<Expression> base, const String& field); @@ -173,16 +156,26 @@ private: std::unique_ptr<Block> main, std::vector<std::unique_ptr<ProgramElement>>* out); + /** + * Wraps an expression in code that applies a colorspace transformation to it. This is used + * to implement texture(sampler, coord, colorSpaceXForm). + */ + std::unique_ptr<Expression> applyColorSpace(std::unique_ptr<Expression> texture, + const Variable* xform); void fixRectSampling(std::vector<std::unique_ptr<Expression>>& arguments); void checkValid(const Expression& expr); void markWrittenTo(const Expression& expr, bool readWrite); const FunctionDeclaration* fCurrentFunction; - const Program::Settings* fSettings; - std::unordered_map<String, CapValue> fCapsMap; + std::unordered_map<String, Program::Settings::Value> fCapsMap; + std::shared_ptr<SymbolTable> fRootSymbolTable; std::shared_ptr<SymbolTable> fSymbolTable; + // holds extra temp variable declarations needed for the current function + std::vector<std::unique_ptr<Statement>> fExtraVars; int fLoopLevel; int fSwitchLevel; + // count of temporary variables we have created + int fTmpCount; ErrorReporter& fErrors; int fInvocations; |