aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/sksl/SkSLSectionAndParameterHelper.h
diff options
context:
space:
mode:
authorGravatar Ethan Nicholas <ethannicholas@google.com>2017-07-13 09:36:52 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-13 14:07:02 +0000
commit68990be759f663bafdb7c1b746adce15557cda7f (patch)
treeb982e218f45fa02188bb38fe767797ff6315edcf /src/sksl/SkSLSectionAndParameterHelper.h
parentc20b5f83595073c02009ff3c0a8a77aca6ad1e71 (diff)
Re-land of "converted GrSimpleTextureEffect to sksl"
This reverts commit baf981f71614e7a2fbe6af2726e65126d431ed8e. Bug: skia: Change-Id: I36f6bfb616f1ec2b89043e3a6f7cbdf473bc9588 Reviewed-on: https://skia-review.googlesource.com/22369 Reviewed-by: Greg Daniel <egdaniel@google.com> Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Diffstat (limited to 'src/sksl/SkSLSectionAndParameterHelper.h')
-rw-r--r--src/sksl/SkSLSectionAndParameterHelper.h59
1 files changed, 47 insertions, 12 deletions
diff --git a/src/sksl/SkSLSectionAndParameterHelper.h b/src/sksl/SkSLSectionAndParameterHelper.h
index f3242c3967..bbe007c46e 100644
--- a/src/sksl/SkSLSectionAndParameterHelper.h
+++ b/src/sksl/SkSLSectionAndParameterHelper.h
@@ -18,18 +18,20 @@
namespace SkSL {
#define CLASS_SECTION "class"
+#define CONSTRUCTOR_SECTION "constructor"
+#define CONSTRUCTOR_CODE_SECTION "constructorCode"
+#define CONSTRUCTOR_PARAMS_SECTION "constructorParams"
+#define COORD_TRANSFORM_SECTION "coordTransform"
#define CPP_SECTION "cpp"
#define CPP_END_SECTION "cppEnd"
#define HEADER_SECTION "header"
#define HEADER_END_SECTION "headerEnd"
-#define CONSTRUCTOR_PARAMS_SECTION "constructorParams"
-#define CONSTRUCTOR_SECTION "constructor"
-#define CONSTRUCTOR_CODE_SECTION "constructorCode"
-#define INITIALIZERS_SECTION "initializers"
#define EMIT_CODE_SECTION "emitCode"
#define FIELDS_SECTION "fields"
+#define INITIALIZERS_SECTION "initializers"
#define MAKE_SECTION "make"
#define OPTIMIZATION_FLAGS_SECTION "optimizationFlags"
+#define SAMPLER_PARAMS_SECTION "samplerParams"
#define SET_DATA_SECTION "setData"
#define TEST_CODE_SECTION "test"
@@ -65,11 +67,12 @@ public:
errors.error(s->fPosition,
("unsupported section '@" + s->fName + "'").c_str());
}
- if (fSections.find(s->fName) != fSections.end()) {
+ if (!SectionPermitsDuplicates(s->fName.c_str()) &&
+ fSections.find(s->fName) != fSections.end()) {
errors.error(s->fPosition,
("duplicate section '@" + s->fName + "'").c_str());
}
- fSections[s->fName] = s;
+ fSections[s->fName].push_back(s);
break;
}
default:
@@ -78,6 +81,28 @@ public:
}
}
+ const Section* getSection(const char* name) {
+ ASSERT(!SectionPermitsDuplicates(name));
+ auto found = fSections.find(name);
+ if (found == fSections.end()) {
+ return nullptr;
+ }
+ ASSERT(found->second.size() == 1);
+ return found->second[0];
+ }
+
+ std::vector<const Section*> getSections(const char* name) {
+ auto found = fSections.find(name);
+ if (found == fSections.end()) {
+ return std::vector<const Section*>();
+ }
+ return found->second;
+ }
+
+ const std::vector<const Variable*>& getParameters() {
+ return fParameters;
+ }
+
static bool IsParameter(const Variable& var) {
return (var.fModifiers.fFlags & Modifiers::kIn_Flag) &&
-1 == var.fModifiers.fLayout.fBuiltin;
@@ -85,29 +110,39 @@ public:
static bool IsSupportedSection(const char* name) {
return !strcmp(name, CLASS_SECTION) ||
- !strcmp(name, CPP_SECTION) ||
- !strcmp(name, CPP_END_SECTION) ||
- !strcmp(name, HEADER_SECTION) ||
- !strcmp(name, HEADER_END_SECTION) ||
!strcmp(name, CONSTRUCTOR_SECTION) ||
!strcmp(name, CONSTRUCTOR_CODE_SECTION) ||
!strcmp(name, CONSTRUCTOR_PARAMS_SECTION) ||
+ !strcmp(name, COORD_TRANSFORM_SECTION) ||
+ !strcmp(name, CPP_SECTION) ||
+ !strcmp(name, CPP_END_SECTION) ||
!strcmp(name, EMIT_CODE_SECTION) ||
!strcmp(name, FIELDS_SECTION) ||
+ !strcmp(name, HEADER_SECTION) ||
+ !strcmp(name, HEADER_END_SECTION) ||
!strcmp(name, INITIALIZERS_SECTION) ||
!strcmp(name, MAKE_SECTION) ||
!strcmp(name, OPTIMIZATION_FLAGS_SECTION) ||
+ !strcmp(name, SAMPLER_PARAMS_SECTION) ||
!strcmp(name, SET_DATA_SECTION) ||
!strcmp(name, TEST_CODE_SECTION);
}
static bool SectionAcceptsArgument(const char* name) {
- return !strcmp(name, SET_DATA_SECTION) ||
+ return !strcmp(name, COORD_TRANSFORM_SECTION) ||
+ !strcmp(name, SAMPLER_PARAMS_SECTION) ||
+ !strcmp(name, SET_DATA_SECTION) ||
!strcmp(name, TEST_CODE_SECTION);
}
+ static bool SectionPermitsDuplicates(const char* name) {
+ return !strcmp(name, COORD_TRANSFORM_SECTION) ||
+ !strcmp(name, SAMPLER_PARAMS_SECTION);
+ }
+
+private:
std::vector<const Variable*> fParameters;
- std::unordered_map<String, const Section*> fSections;
+ std::unordered_map<String, std::vector<const Section*>> fSections;
};
} // namespace SkSL