diff options
author | Ethan Nicholas <ethannicholas@google.com> | 2017-07-13 09:36:52 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-07-13 14:07:02 +0000 |
commit | 68990be759f663bafdb7c1b746adce15557cda7f (patch) | |
tree | b982e218f45fa02188bb38fe767797ff6315edcf /src/sksl/SkSLSectionAndParameterHelper.h | |
parent | c20b5f83595073c02009ff3c0a8a77aca6ad1e71 (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.h | 59 |
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 |