Make fragment processor iterators work with range for loops.
When iterating over the coord transforms or texture samplers of a
FP also have access to the owning FP.
Pass a coord transform range to GPs rather than a pointer to an
iterator.
Change-Id: If7c829a67dce6600d7f49e12d6f49f685dcace3a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/256216
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.cpp b/src/gpu/glsl/GrGLSLProgramBuilder.cpp
index cb6a6bd..3474380 100644
--- a/src/gpu/glsl/GrGLSLProgramBuilder.cpp
+++ b/src/gpu/glsl/GrGLSLProgramBuilder.cpp
@@ -150,9 +150,8 @@
const GrFragmentProcessor& fp = this->pipeline().getFragmentProcessor(i);
output = this->emitAndInstallFragProc(fp, i, transformedCoordVarsIdx, **inOut, output,
&glslFragmentProcessors);
- GrFragmentProcessor::Iter iter(&fp);
- while (const GrFragmentProcessor* fp = iter.next()) {
- transformedCoordVarsIdx += fp->numCoordTransforms();
+ for (const auto& subFP : GrFragmentProcessor::FPRange(fp)) {
+ transformedCoordVarsIdx += subFP.numCoordTransforms();
}
**inOut = output;
}
@@ -185,20 +184,18 @@
GrGLSLFragmentProcessor* fragProc = fp.createGLSLInstance();
SkSTArray<4, SamplerHandle> texSamplers;
- GrFragmentProcessor::Iter fpIter(&fp);
int samplerIdx = 0;
- while (const auto* subFP = fpIter.next()) {
- for (int i = 0; i < subFP->numTextureSamplers(); ++i) {
+ for (const auto& subFP : GrFragmentProcessor::FPRange(fp)) {
+ for (int i = 0; i < subFP.numTextureSamplers(); ++i) {
SkString name;
name.printf("TextureSampler_%d", samplerIdx++);
- const auto& sampler = subFP->textureSampler(i);
+ const auto& sampler = subFP.textureSampler(i);
texSamplers.emplace_back(this->emitSampler(sampler.proxy(),
sampler.samplerState(),
sampler.swizzle(),
name.c_str()));
}
}
-
const GrGLSLPrimitiveProcessor::TransformVar* coordVars = fTransformedCoordVars.begin() +
transformedCoordVarsIdx;
GrGLSLFragmentProcessor::TransformedCoordVars coords(&fp, coordVars);