From f7dcd76c552a4e93a75a3808289de69a997da169 Mon Sep 17 00:00:00 2001 From: Brian Salomon Date: Mon, 30 Jul 2018 14:48:15 -0400 Subject: 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 Reviewed-by: Robert Phillips --- src/sksl/SkSLCPPCodeGenerator.cpp | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) (limited to 'src/sksl/SkSLCPPCodeGenerator.cpp') diff --git a/src/sksl/SkSLCPPCodeGenerator.cpp b/src/sksl/SkSLCPPCodeGenerator.cpp index be402088cc..86565016d6 100644 --- a/src/sksl/SkSLCPPCodeGenerator.cpp +++ b/src/sksl/SkSLCPPCodeGenerator.cpp @@ -637,6 +637,29 @@ void CPPCodeGenerator::writeSetData(std::vector& uniforms) { this->write(" }\n"); } +void CPPCodeGenerator::writeOnTextureSampler() { + bool foundSampler = false; + for (const auto& param : fSectionAndParameterHelper.getParameters()) { + if (param->fType.kind() == Type::kSampler_Kind) { + if (!foundSampler) { + this->writef( + "const GrFragmentProcessor::TextureSampler& %s::onTextureSampler(int " + "index) const {\n", + fFullName.c_str()); + this->writef(" return IthTextureSampler(index, %s", + HCodeGenerator::FieldName(String(param->fName).c_str()).c_str()); + foundSampler = true; + } else { + this->writef(", %s", + HCodeGenerator::FieldName(String(param->fName).c_str()).c_str()); + } + } + } + if (foundSampler) { + this->write(");\n}\n"); + } +} + void CPPCodeGenerator::writeClone() { if (!this->writeSection(CLONE_SECTION)) { if (fSectionAndParameterHelper.getSection(FIELDS_SECTION)) { @@ -662,15 +685,18 @@ void CPPCodeGenerator::writeClone() { } this->writef(" {\n"); int childCount = 0; + int samplerCount = 0; for (const auto& param : fSectionAndParameterHelper.getParameters()) { if (param->fType.kind() == Type::kSampler_Kind) { - this->writef(" this->addTextureSampler(&%s);\n", - HCodeGenerator::FieldName(String(param->fName).c_str()).c_str()); + ++samplerCount; } else if (param->fType == *fContext.fFragmentProcessor_Type) { this->writef(" this->registerChildProcessor(src.childProcessor(%d).clone());" "\n", childCount++); } } + if (samplerCount) { + this->writef(" this->setTextureSamplerCnt(%d);", samplerCount); + } for (const Section* s : fSectionAndParameterHelper.getSections(COORD_TRANSFORM_SECTION)) { String field = HCodeGenerator::FieldName(s->fArgument.c_str()); this->writef(" this->addCoordTransform(&%sCoordTransform);\n", field.c_str()); @@ -819,6 +845,7 @@ bool CPPCodeGenerator::generateCode() { this->write(" return true;\n" "}\n"); this->writeClone(); + this->writeOnTextureSampler(); this->writeTest(); this->writeSection(CPP_END_SECTION); -- cgit v1.2.3