aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/sksl/SkSLSectionAndParameterHelper.h
diff options
context:
space:
mode:
authorGravatar Ethan Nicholas <ethannicholas@google.com>2017-07-11 14:35:28 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-12 13:28:25 +0000
commit46b654df9e70bbfacf6dc45d3a2a7ceb13a61edb (patch)
tree1df670da50b5c02defe6507cb87f2a213a801750 /src/sksl/SkSLSectionAndParameterHelper.h
parent6ee29658202a0bd8394df5daed8db30321c01cc9 (diff)
converted GrSimpleTextureEffect to sksl
Bug: skia: Change-Id: If556c6baad75f22135f429759feabaaec095b900 Reviewed-on: https://skia-review.googlesource.com/21720 Commit-Queue: Ethan Nicholas <ethannicholas@google.com> Reviewed-by: Greg Daniel <egdaniel@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..4d2d7ec94d 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 { };
+ }
+ 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