aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrProcessorSet.h
diff options
context:
space:
mode:
authorGravatar Robert Phillips <robertphillips@google.com>2017-09-13 13:10:52 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-09-13 17:38:56 +0000
commitb493eebca14aefbd5f22fb5d45ba978b19db4b18 (patch)
tree8a9ae4209e52b1e1da283e45f56df921598c7920 /src/gpu/GrProcessorSet.h
parent08cda14d61f02d2e376a9cd88131daebad6b21e0 (diff)
Add method to iterate over a GrOp's GrSurfaceProxies
The extra generality of having a std::function is for MDB reordering. In the current MDB reordering world there is one pass through the surfaceProxies at creation time and a second pass after flush to create the usage intervals. Change-Id: I3f548417eddc1dad7503d919241301e404255ffe Reviewed-on: https://skia-review.googlesource.com/46200 Reviewed-by: Brian Osman <brianosman@google.com> Commit-Queue: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src/gpu/GrProcessorSet.h')
-rw-r--r--src/gpu/GrProcessorSet.h20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/gpu/GrProcessorSet.h b/src/gpu/GrProcessorSet.h
index 023c4dfd6b..67269eb140 100644
--- a/src/gpu/GrProcessorSet.h
+++ b/src/gpu/GrProcessorSet.h
@@ -36,9 +36,6 @@ public:
int numCoverageFragmentProcessors() const {
return this->numFragmentProcessors() - fColorFragmentProcessorCnt;
}
- int numFragmentProcessors() const {
- return fFragmentProcessors.count() - fFragmentProcessorOffset;
- }
const GrFragmentProcessor* colorFragmentProcessor(int idx) const {
SkASSERT(idx < fColorFragmentProcessorCnt);
@@ -155,9 +152,26 @@ public:
SkString dumpProcessors() const;
+ void visitProxies(std::function<void(GrSurfaceProxy*)> func) const {
+ for (int i = 0; i < this->numFragmentProcessors(); ++i) {
+ GrFragmentProcessor::TextureAccessIter iter(this->fragmentProcessor(i));
+ while (const GrResourceIOProcessor::TextureSampler* sampler = iter.next()) {
+ func(sampler->proxy());
+ }
+ }
+ }
+
private:
GrProcessorSet(Empty) : fXP((const GrXferProcessor*)nullptr), fFlags(kFinalized_Flag) {}
+ int numFragmentProcessors() const {
+ return fFragmentProcessors.count() - fFragmentProcessorOffset;
+ }
+
+ const GrFragmentProcessor* fragmentProcessor(int idx) const {
+ return fFragmentProcessors[idx + fFragmentProcessorOffset].get();
+ }
+
// This absurdly large limit allows Analysis and this to pack fields together.
static constexpr int kMaxColorProcessors = UINT8_MAX;