Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(952)

Side by Side Diff: src/gpu/GrFragmentProcessor.cpp

Issue 2365943003: Stop aggregating texture/buffer access objects in GrFragmentProcessor parents. (Closed)
Patch Set: Readd base class, rebase Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/effects/gradients/SkGradientShaderPriv.h ('k') | src/gpu/GrPipeline.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2015 Google Inc. 2 * Copyright 2015 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "GrFragmentProcessor.h" 8 #include "GrFragmentProcessor.h"
9 #include "GrCoordTransform.h" 9 #include "GrCoordTransform.h"
10 #include "GrInvariantOutput.h" 10 #include "GrInvariantOutput.h"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 GrGLSLFragmentProcessor* GrFragmentProcessor::createGLSLInstance() const { 50 GrGLSLFragmentProcessor* GrFragmentProcessor::createGLSLInstance() const {
51 GrGLSLFragmentProcessor* glFragProc = this->onCreateGLSLInstance(); 51 GrGLSLFragmentProcessor* glFragProc = this->onCreateGLSLInstance();
52 glFragProc->fChildProcessors.push_back_n(fChildProcessors.count()); 52 glFragProc->fChildProcessors.push_back_n(fChildProcessors.count());
53 for (int i = 0; i < fChildProcessors.count(); ++i) { 53 for (int i = 0; i < fChildProcessors.count(); ++i) {
54 glFragProc->fChildProcessors[i] = fChildProcessors[i]->createGLSLInstanc e(); 54 glFragProc->fChildProcessors[i] = fChildProcessors[i]->createGLSLInstanc e();
55 } 55 }
56 return glFragProc; 56 return glFragProc;
57 } 57 }
58 58
59 void GrFragmentProcessor::addTextureAccess(const GrTextureAccess* textureAccess) { 59 void GrFragmentProcessor::addTextureAccess(const GrTextureAccess* textureAccess) {
60 // Can't add texture accesses after registering any children since their tex ture accesses have
61 // already been bubbled up into our fTextureAccesses array
62 SkASSERT(fChildProcessors.empty());
63
64 INHERITED::addTextureAccess(textureAccess); 60 INHERITED::addTextureAccess(textureAccess);
65 fNumTexturesExclChildren++;
66 } 61 }
67 62
68 void GrFragmentProcessor::addBufferAccess(const GrBufferAccess* bufferAccess) { 63 void GrFragmentProcessor::addBufferAccess(const GrBufferAccess* bufferAccess) {
69 // Can't add buffer accesses after registering any children since their buff er accesses have
70 // already been bubbled up into our fBufferAccesses array
71 SkASSERT(fChildProcessors.empty());
72
73 INHERITED::addBufferAccess(bufferAccess); 64 INHERITED::addBufferAccess(bufferAccess);
74 fNumBuffersExclChildren++;
75 } 65 }
76 66
77 void GrFragmentProcessor::addCoordTransform(const GrCoordTransform* transform) { 67 void GrFragmentProcessor::addCoordTransform(const GrCoordTransform* transform) {
78 // Can't add transforms after registering any children since their transform s have already been
79 // bubbled up into our fCoordTransforms array
80 SkASSERT(fChildProcessors.empty());
81
82 fCoordTransforms.push_back(transform); 68 fCoordTransforms.push_back(transform);
83 fUsesLocalCoords = fUsesLocalCoords || transform->sourceCoords() == kLocal_G rCoordSet; 69 fUsesLocalCoords = fUsesLocalCoords || transform->sourceCoords() == kLocal_G rCoordSet;
84 SkDEBUGCODE(transform->setInProcessor();) 70 SkDEBUGCODE(transform->setInProcessor();)
85 } 71 }
86 72
87 int GrFragmentProcessor::registerChildProcessor(sk_sp<GrFragmentProcessor> child ) { 73 int GrFragmentProcessor::registerChildProcessor(sk_sp<GrFragmentProcessor> child ) {
88 // Append the child's textures array to our textures array
89 if (!child->fTextureAccesses.empty()) {
90 fTextureAccesses.push_back_n(child->fTextureAccesses.count(),
91 child->fTextureAccesses.begin());
92 }
93
94 this->combineRequiredFeatures(*child); 74 this->combineRequiredFeatures(*child);
95 75
96 if (child->usesLocalCoords()) { 76 if (child->usesLocalCoords()) {
97 fUsesLocalCoords = true; 77 fUsesLocalCoords = true;
98 } 78 }
99 if (child->usesDistanceVectorField()) { 79 if (child->usesDistanceVectorField()) {
100 fUsesDistanceVectorField = true; 80 fUsesDistanceVectorField = true;
101 } 81 }
102 82
103 int index = fChildProcessors.count(); 83 int index = fChildProcessors.count();
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 return nullptr; 397 return nullptr;
418 } 398 }
419 const GrFragmentProcessor* back = fFPStack.back(); 399 const GrFragmentProcessor* back = fFPStack.back();
420 fFPStack.pop_back(); 400 fFPStack.pop_back();
421 for (int i = back->numChildProcessors() - 1; i >= 0; --i) { 401 for (int i = back->numChildProcessors() - 1; i >= 0; --i) {
422 fFPStack.push_back(&back->childProcessor(i)); 402 fFPStack.push_back(&back->childProcessor(i));
423 } 403 }
424 return back; 404 return back;
425 } 405 }
426 406
427 //////////////////////////////////////////////////////////////////////////////
428
429 const GrCoordTransform* GrFragmentProcessor::CoordTransformIter::next() {
430 if (!fCurrFP) {
431 return nullptr;
432 }
433 while (fCTIdx == fCurrFP->numCoordTransforms()) {
434 fCTIdx = 0;
435 fCurrFP = fFPIter.next();
436 if (!fCurrFP) {
437 return nullptr;
438 }
439 }
440 return &fCurrFP->coordTransform(fCTIdx++);
441 }
OLDNEW
« no previous file with comments | « src/effects/gradients/SkGradientShaderPriv.h ('k') | src/gpu/GrPipeline.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698