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

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: added comment to onComputeInvariantOutput 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.
86 *
87 * Note: this function will NOT be recursive; it will be up to the parent pr oc to figure out
bsalomon 2015/08/18 14:15:43 Let's remove the comment here and just leave the o
wangyix 2015/08/18 14:20:59 Done.
88 * what invariants its output can have given its children.
99 */ 89 */
100 void computeInvariantOutput(GrInvariantOutput* inout) const; 90 void computeInvariantOutput(GrInvariantOutput* inout) const;
101 91
102 protected: 92 protected:
103 /** 93 /**
104 * Fragment Processor subclasses call this from their constructor to registe r coordinate 94 * Fragment Processor subclasses call this from their constructor to registe r coordinate
105 * transformations. Coord transforms provide a mechanism for a processor to receive coordinates 95 * transformations. Coord transforms provide a mechanism for a processor to receive coordinates
106 * in their FS code. The matrix expresses a transformation from local space. For a given 96 * in their FS code. The matrix expresses a transformation from local space. For a given
107 * fragment the matrix will be applied to the local coordinate that maps to the fragment. 97 * fragment the matrix will be applied to the local coordinate that maps to the fragment.
108 * 98 *
(...skipping 15 matching lines...) Expand all
124 * FragmentProcessors they have. 114 * FragmentProcessors they have.
125 * This is for processors whose shader code will be composed of nested proce ssors whose output 115 * 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 116 * 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 117 * processors will allow the ProgramBuilder to automatically handle their tr ansformed coords and
128 * texture accesses and mangle their uniform and output color names. 118 * texture accesses and mangle their uniform and output color names.
129 */ 119 */
130 int registerChildProcessor(const GrFragmentProcessor* child); 120 int registerChildProcessor(const GrFragmentProcessor* child);
131 121
132 /** 122 /**
133 * Subclass implements this to support getConstantColorComponents(...). 123 * Subclass implements this to support getConstantColorComponents(...).
124 *
125 * Note: it's up to the subclass implementation to do any recursive call to compute the child
126 * procs' output invariants; computeInvariantOutput will not be recursive.
134 */ 127 */
135 virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const = 0; 128 virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const = 0;
136 129
137 private: 130 private:
138 /** Implemented using GLFragmentProcessor::GenKey as described in this class 's comment. */ 131 /** Implemented using GLFragmentProcessor::GenKey as described in this class 's comment. */
139 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps, 132 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps,
140 GrProcessorKeyBuilder* b) const = 0; 133 GrProcessorKeyBuilder* b) const = 0;
141 134
142 /** 135 /**
143 * Subclass implements this to support isEqual(). It will only be called if it is known that 136 * 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. 168 * The same goes for fTextureAccesses with textures.
176 */ 169 */
177 SkSTArray<4, const GrCoordTransform*, true> fCoordTransforms; 170 SkSTArray<4, const GrCoordTransform*, true> fCoordTransforms;
178 171
179 SkTArray<GrFragmentStage, false> fChildProcessors; 172 SkTArray<GrFragmentStage, false> fChildProcessors;
180 173
181 typedef GrProcessor INHERITED; 174 typedef GrProcessor INHERITED;
182 }; 175 };
183 176
184 #endif 177 #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