aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/sksl/ir/SkSLLayout.h
diff options
context:
space:
mode:
authorGravatar Ethan Nicholas <ethannicholas@google.com>2017-06-29 10:03:38 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-06-29 14:57:47 +0000
commit762466e9fe0478bcf11fba532998e81e33b3069e (patch)
tree8934a152b11007d7d530db05f7ba731bb05aa5c0 /src/sksl/ir/SkSLLayout.h
parente78c8ed9cba31ebb970d3002270ddb03f4d6baae (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/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