diff options
author | Ethan Nicholas <ethannicholas@google.com> | 2017-06-27 11:20:22 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-06-27 18:27:57 +0000 |
commit | c070939fd1a954b7a492bc30f0cf64a664b90181 (patch) | |
tree | 6b1167726bc9ac4d2073f893c699b40c70f63ba1 /src/sksl/ir/SkSLProgram.h | |
parent | 26249e0e1d1b18a1e67195a2998b49958426f8ba (diff) |
Re-land sksl fragment processor support
This reverts commit ed50200682e0de72c3abecaa4d5324ebcd1ed9f9.
Bug: skia:
Change-Id: I9caa7454b391450620d6989dc472abb3cf7a2cab
Reviewed-on: https://skia-review.googlesource.com/20965
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, |