diff options
author | Ethan Nicholas <ethannicholas@google.com> | 2017-06-29 10:03:38 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-06-29 14:57:47 +0000 |
commit | 762466e9fe0478bcf11fba532998e81e33b3069e (patch) | |
tree | 8934a152b11007d7d530db05f7ba731bb05aa5c0 /src/sksl/ir/SkSLProgram.h | |
parent | e78c8ed9cba31ebb970d3002270ddb03f4d6baae (diff) |
Re-re-land sksl fragment processor support
This reverts commit 5ce397205528f82084fc650c2ce27d246c01da33.
Bug: skia:
Change-Id: I88260c90004610a1cf8ad1a87c2b4b222525bbb6
Reviewed-on: https://skia-review.googlesource.com/21108
Reviewed-by: Ben Wagner <benjaminwagner@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Diffstat (limited to 'src/sksl/ir/SkSLProgram.h')
-rw-r--r-- | src/sksl/ir/SkSLProgram.h | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/src/sksl/ir/SkSLProgram.h b/src/sksl/ir/SkSLProgram.h index 96bd5c4fbd..a3eeaa3612 100644 --- a/src/sksl/ir/SkSLProgram.h +++ b/src/sksl/ir/SkSLProgram.h @@ -11,7 +11,9 @@ #include <vector> #include <memory> -#include "SkSLContext.h" +#include "SkSLBoolLiteral.h" +#include "SkSLExpression.h" +#include "SkSLIntLiteral.h" #include "SkSLModifiers.h" #include "SkSLProgramElement.h" #include "SkSLSymbolTable.h" @@ -21,11 +23,46 @@ namespace SkSL { +class Context; + /** * Represents a fully-digested program, ready for code generation. */ struct Program { struct Settings { + struct Value { + Value(bool b) + : fKind(kBool_Kind) + , fValue(b) {} + + Value(int i) + : fKind(kInt_Kind) + , fValue(i) {} + + std::unique_ptr<Expression> literal(const Context& context, Position position) const { + switch (fKind) { + case Program::Settings::Value::kBool_Kind: + return std::unique_ptr<Expression>(new BoolLiteral(context, + position, + fValue)); + case Program::Settings::Value::kInt_Kind: + return std::unique_ptr<Expression>(new IntLiteral(context, + position, + fValue)); + default: + ASSERT(false); + return nullptr; + } + } + + enum { + kBool_Kind, + kInt_Kind, + } fKind; + + int fValue; + }; + #ifdef SKSL_STANDALONE const StandaloneShaderCaps* fCaps = &standaloneCaps; #else @@ -34,6 +71,10 @@ struct Program { // if false, sk_FragCoord is exactly the same as gl_FragCoord. If true, the y coordinate // must be flipped. bool fFlipY = false; + // if true, Setting objects (e.g. sk_Caps.fbFetchSupport) should be replaced with their + // constant equivalents during compilation + bool fReplaceSettings = true; + std::unordered_map<String, Value> fArgs; }; struct Inputs { @@ -57,7 +98,8 @@ struct Program { enum Kind { kFragment_Kind, kVertex_Kind, - kGeometry_Kind + kGeometry_Kind, + kFragmentProcessor_Kind }; Program(Kind kind, |