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

Side by Side Diff: include/gpu/GrFragmentProcessor.h

Issue 1287343005: Made isEqual in GrFragmentProcessor recursive (Closed) Base URL: https://skia.googlesource.com/skia@cs3_autoAdvance
Patch Set: removed comment on computeInvariantOutput Created 5 years, 4 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 | « no previous file | src/gpu/GrProcessor.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 2014 Google Inc. 2 * Copyright 2014 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 #ifndef GrFragmentProcessor_DEFINED 8 #ifndef GrFragmentProcessor_DEFINED
9 #define GrFragmentProcessor_DEFINED 9 #define GrFragmentProcessor_DEFINED
10 10
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 67
68 /** Do any of the coordtransforms for this processor require local coords? * / 68 /** Do any of the coordtransforms for this processor require local coords? * /
69 bool usesLocalCoords() const { return fUsesLocalCoords; } 69 bool usesLocalCoords() const { return fUsesLocalCoords; }
70 70
71 /** Returns true if this and other processor conservatively draw identically . It can only return 71 /** Returns true if this and other processor conservatively draw identically . It can only return
72 true when the two processor are of the same subclass (i.e. they return t he same object from 72 true when the two processor are of the same subclass (i.e. they return t he same object from
73 from getFactory()). 73 from getFactory()).
74 74
75 A return value of true from isEqual() should not be used to test whether the processor would 75 A return value of true from isEqual() should not be used to test whether the processor would
76 generate the same shader code. To test for identical code generation use getGLProcessorKey*/ 76 generate the same shader code. To test for identical code generation use getGLProcessorKey*/
77 bool isEqual(const GrFragmentProcessor& that, bool ignoreCoordTransforms) co nst { 77 bool isEqual(const GrFragmentProcessor& that, bool ignoreCoordTransforms) co nst;
78 if (this->classID() != that.classID() ||
79 !this->hasSameTextureAccesses(that)) {
80 return false;
81 }
82 if (ignoreCoordTransforms) {
83 if (this->numTransforms() != that.numTransforms()) {
84 return false;
85 }
86 } else if (!this->hasSameTransforms(that)) {
87 return false;
88 }
89 return this->onIsEqual(that);
90 }
91 78
92 /** 79 /**
93 * This function is used to perform optimizations. When called the invarient Ouput param 80 * This function is used to perform optimizations. When called the invarient Ouput param
94 * indicate whether the input components to this processor in the FS will ha ve known values. 81 * indicate whether the input components to this processor in the FS will ha ve known values.
95 * In inout the validFlags member is a bitfield of GrColorComponentFlags. Th e isSingleComponent 82 * In inout the validFlags member is a bitfield of GrColorComponentFlags. Th e isSingleComponent
96 * member indicates whether the input will be 1 or 4 bytes. The function upd ates the members of 83 * member indicates whether the input will be 1 or 4 bytes. The function upd ates the members of
97 * inout to indicate known values of its output. A component of the color me mber only has 84 * inout to indicate known values of its output. A component of the color me mber only has
98 * meaning if the corresponding bit in validFlags is set. 85 * meaning if the corresponding bit in validFlags is set.
99 */ 86 */
100 void computeInvariantOutput(GrInvariantOutput* inout) const; 87 void computeInvariantOutput(GrInvariantOutput* inout) const;
(...skipping 23 matching lines...) Expand all
124 * FragmentProcessors they have. 111 * FragmentProcessors they have.
125 * This is for processors whose shader code will be composed of nested proce ssors whose output 112 * This is for processors whose shader code will be composed of nested proce ssors whose output
126 * colors will be combined somehow to produce its output color. Registering these child 113 * colors will be combined somehow to produce its output color. Registering these child
127 * processors will allow the ProgramBuilder to automatically handle their tr ansformed coords and 114 * processors will allow the ProgramBuilder to automatically handle their tr ansformed coords and
128 * texture accesses and mangle their uniform and output color names. 115 * texture accesses and mangle their uniform and output color names.
129 */ 116 */
130 int registerChildProcessor(const GrFragmentProcessor* child); 117 int registerChildProcessor(const GrFragmentProcessor* child);
131 118
132 /** 119 /**
133 * Subclass implements this to support getConstantColorComponents(...). 120 * Subclass implements this to support getConstantColorComponents(...).
121 *
122 * Note: it's up to the subclass implementation to do any recursive call to compute the child
123 * procs' output invariants; computeInvariantOutput will not be recursive.
134 */ 124 */
135 virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const = 0; 125 virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const = 0;
136 126
137 private: 127 private:
138 /** Implemented using GLFragmentProcessor::GenKey as described in this class 's comment. */ 128 /** Implemented using GLFragmentProcessor::GenKey as described in this class 's comment. */
139 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps, 129 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps,
140 GrProcessorKeyBuilder* b) const = 0; 130 GrProcessorKeyBuilder* b) const = 0;
141 131
142 /** 132 /**
143 * Subclass implements this to support isEqual(). It will only be called if it is known that 133 * Subclass implements this to support isEqual(). It will only be called if it is known that
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 * The same goes for fTextureAccesses with textures. 165 * The same goes for fTextureAccesses with textures.
176 */ 166 */
177 SkSTArray<4, const GrCoordTransform*, true> fCoordTransforms; 167 SkSTArray<4, const GrCoordTransform*, true> fCoordTransforms;
178 168
179 SkTArray<GrFragmentStage, false> fChildProcessors; 169 SkTArray<GrFragmentStage, false> fChildProcessors;
180 170
181 typedef GrProcessor INHERITED; 171 typedef GrProcessor INHERITED;
182 }; 172 };
183 173
184 #endif 174 #endif
OLDNEW
« no previous file with comments | « no previous file | src/gpu/GrProcessor.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698