aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/sksl/ir/SkSLLayout.h
diff options
context:
space:
mode:
authorGravatar Ethan Nicholas <ethannicholas@google.com>2017-06-27 11:20:22 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-06-27 18:27:57 +0000
commitc070939fd1a954b7a492bc30f0cf64a664b90181 (patch)
tree6b1167726bc9ac4d2073f893c699b40c70f63ba1 /src/sksl/ir/SkSLLayout.h
parent26249e0e1d1b18a1e67195a2998b49958426f8ba (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/SkSLLayout.h')
-rw-r--r--src/sksl/ir/SkSLLayout.h39
1 files changed, 35 insertions, 4 deletions
diff --git a/src/sksl/ir/SkSLLayout.h b/src/sksl/ir/SkSLLayout.h
index 3a8416ac4e..8bf0472a95 100644
--- a/src/sksl/ir/SkSLLayout.h
+++ b/src/sksl/ir/SkSLLayout.h
@@ -8,6 +8,7 @@
#ifndef SKSL_LAYOUT
#define SKSL_LAYOUT
+#include "SkSLString.h"
#include "SkSLUtil.h"
namespace SkSL {
@@ -42,6 +43,16 @@ struct Layout {
kR8I,
};
+ // used by SkSL processors
+ enum Key {
+ // field is not a key
+ kNo_Key,
+ // field is a key
+ kKey_Key,
+ // key is 0 or 1 depending on whether the matrix is an identity matrix
+ kIdentity_Key,
+ };
+
static const char* FormatToStr(Format format) {
switch (format) {
case Format::kUnspecified: return "";
@@ -55,7 +66,6 @@ struct Layout {
case Format::kR8I: return "r8i";
}
ABORT("Unexpected format");
- return "";
}
static bool ReadFormat(String str, Format* format) {
@@ -90,7 +100,7 @@ struct Layout {
Layout(int location, int offset, int binding, int index, int set, int builtin,
int inputAttachmentIndex, bool originUpperLeft, bool overrideCoverage,
bool blendSupportAllEquations, Format format, bool pushconstant, Primitive primitive,
- int maxVertices, int invocations)
+ int maxVertices, int invocations, String when, Key key)
: fLocation(location)
, fOffset(offset)
, fBinding(binding)
@@ -105,7 +115,9 @@ struct Layout {
, fPushConstant(pushconstant)
, fPrimitive(primitive)
, fMaxVertices(maxVertices)
- , fInvocations(invocations) {}
+ , fInvocations(invocations)
+ , fWhen(when)
+ , fKey(key) {}
Layout()
: fLocation(-1)
@@ -122,7 +134,8 @@ struct Layout {
, fPushConstant(false)
, fPrimitive(kUnspecified_Primitive)
, fMaxVertices(-1)
- , fInvocations(-1) {}
+ , fInvocations(-1)
+ , fKey(kNo_Key) {}
String description() const {
String result;
@@ -215,6 +228,22 @@ struct Layout {
result += separator + "invocations = " + to_string(fInvocations);
separator = ", ";
}
+ if (fWhen.size()) {
+ result += separator + "when = " + fWhen;
+ separator = ", ";
+ }
+ switch (fKey) {
+ case kNo_Key:
+ break;
+ case kKey_Key:
+ result += separator + "key";
+ separator = ", ";
+ break;
+ case kIdentity_Key:
+ result += separator + "key=identity";
+ separator = ", ";
+ break;
+ }
if (result.size() > 0) {
result = "layout (" + result + ")";
}
@@ -261,6 +290,8 @@ struct Layout {
Primitive fPrimitive;
int fMaxVertices;
int fInvocations;
+ String fWhen;
+ Key fKey;
};
} // namespace