Add GrGLSLFP::ParallelRange to iterate FP and GLSLFP trees
Bug: skia:10139
Change-Id: I379249758160ad096c9e03f25a41b00bc1987518
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/301384
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp
index 55a9120..ee19309 100644
--- a/src/gpu/gl/GrGLProgram.cpp
+++ b/src/gpu/gl/GrGLProgram.cpp
@@ -35,7 +35,6 @@
std::unique_ptr<GrGLSLPrimitiveProcessor> geometryProcessor,
std::unique_ptr<GrGLSLXferProcessor> xferProcessor,
std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fps,
- int fragmentProcessorCnt,
std::unique_ptr<Attribute[]> attributes,
int vertexAttributeCnt,
int instanceAttributeCnt,
@@ -50,7 +49,6 @@
std::move(geometryProcessor),
std::move(xferProcessor),
std::move(fps),
- fragmentProcessorCnt,
std::move(attributes),
vertexAttributeCnt,
instanceAttributeCnt,
@@ -72,7 +70,6 @@
std::unique_ptr<GrGLSLPrimitiveProcessor> geometryProcessor,
std::unique_ptr<GrGLSLXferProcessor> xferProcessor,
std::unique_ptr<std::unique_ptr<GrGLSLFragmentProcessor>[]> fps,
- int fragmentProcessorCnt,
std::unique_ptr<Attribute[]> attributes,
int vertexAttributeCnt,
int instanceAttributeCnt,
@@ -83,7 +80,6 @@
, fPrimitiveProcessor(std::move(geometryProcessor))
, fXferProcessor(std::move(xferProcessor))
, fFragmentProcessors(std::move(fps))
- , fFragmentProcessorCnt(fragmentProcessorCnt)
, fAttributes(std::move(attributes))
, fVertexAttributeCnt(vertexAttributeCnt)
, fInstanceAttributeCnt(instanceAttributeCnt)
@@ -118,12 +114,13 @@
// primProc, fragProcs, XP.
fPrimitiveProcessor->setData(fProgramDataManager, programInfo.primProc());
- GrFragmentProcessor::CIter fpIter(programInfo.pipeline());
- GrGLSLFragmentProcessor::Iter glslIter(fFragmentProcessors.get(), fFragmentProcessorCnt);
- for (; fpIter && glslIter; ++fpIter, ++glslIter) {
- glslIter->setData(fProgramDataManager, *fpIter);
+ for (int i = 0; i < programInfo.pipeline().numFragmentProcessors(); ++i) {
+ auto& pipelineFP = programInfo.pipeline().getFragmentProcessor(i);
+ auto& baseGLSLFP = *fFragmentProcessors[i];
+ for (auto [fp, glslFP] : GrGLSLFragmentProcessor::ParallelRange(pipelineFP, baseGLSLFP)) {
+ glslFP.setData(fProgramDataManager, fp);
+ }
}
- SkASSERT(!fpIter && !glslIter);
const GrXferProcessor& xp = programInfo.pipeline().getXferProcessor();
SkIPoint offset;