aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/sksl/SkSLIRGenerator.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/sksl/SkSLIRGenerator.h')
-rw-r--r--src/sksl/SkSLIRGenerator.h41
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;