diff options
author | Brian Salomon <bsalomon@google.com> | 2018-07-30 14:48:15 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-07-30 19:40:03 +0000 |
commit | f7dcd76c552a4e93a75a3808289de69a997da169 (patch) | |
tree | 29fe08e9681f29e3d3d2af8e721ecfba6dd09beb /src/sksl/SkSLHCodeGenerator.cpp | |
parent | 7226c232d73356a37ec8cfef0ed55147e68dd2fd (diff) |
Remove array of TextureSampler pointers from GrIOResourceProcessor.
Instead store sampler count on base class and subclasses implement a
virtual to get the ith sampler.
Change-Id: I13e2447a6467a09761d8615acb4aa360b87b1476
Reviewed-on: https://skia-review.googlesource.com/141563
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src/sksl/SkSLHCodeGenerator.cpp')
-rw-r--r-- | src/sksl/SkSLHCodeGenerator.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/sksl/SkSLHCodeGenerator.cpp b/src/sksl/SkSLHCodeGenerator.cpp index be0f1ad858..0acd33404f 100644 --- a/src/sksl/SkSLHCodeGenerator.cpp +++ b/src/sksl/SkSLHCodeGenerator.cpp @@ -223,15 +223,18 @@ void HCodeGenerator::writeConstructor() { } this->writef(" {\n"); this->writeSection(CONSTRUCTOR_CODE_SECTION); + int samplerCount = 0; for (const auto& param : fSectionAndParameterHelper.getParameters()) { if (param->fType.kind() == Type::kSampler_Kind) { - this->writef(" this->addTextureSampler(&%s);\n", - FieldName(String(param->fName).c_str()).c_str()); + ++samplerCount; } else if (param->fType == *fContext.fFragmentProcessor_Type) { this->writef(" this->registerChildProcessor(std::move(%s));", String(param->fName).c_str()); } } + if (samplerCount) { + this->writef(" this->setTextureSamplerCnt(%d);", samplerCount); + } for (const Section* s : fSectionAndParameterHelper.getSections(COORD_TRANSFORM_SECTION)) { String field = FieldName(s->fArgument.c_str()); this->writef(" this->addCoordTransform(&%sCoordTransform);\n", field.c_str()); @@ -312,8 +315,14 @@ bool HCodeGenerator::generateCode() { this->writef(" GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;\n" " void onGetGLSLProcessorKey(const GrShaderCaps&," "GrProcessorKeyBuilder*) const override;\n" - " bool onIsEqual(const GrFragmentProcessor&) const override;\n" - " GR_DECLARE_FRAGMENT_PROCESSOR_TEST\n"); + " bool onIsEqual(const GrFragmentProcessor&) const override;\n"); + for (const auto& param : fSectionAndParameterHelper.getParameters()) { + if (param->fType.kind() == Type::kSampler_Kind) { + this->writef(" const TextureSampler& onTextureSampler(int) const override;"); + break; + } + } + this->writef(" GR_DECLARE_FRAGMENT_PROCESSOR_TEST\n"); this->writeFields(); this->writef(" typedef GrFragmentProcessor INHERITED;\n" "};\n"); |