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

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

Issue 1125283005: Only discard for XP dstCopies if we have a coverage value. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: clean up Created 5 years, 7 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/effects/SkArithmeticMode_gpu.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 GrXferProcessor_DEFINED 8 #ifndef GrXferProcessor_DEFINED
9 #define GrXferProcessor_DEFINED 9 #define GrXferProcessor_DEFINED
10 10
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 157
158 /** 158 /**
159 * Determines which optimizations (as described by the ptFlags above) can be performed by 159 * Determines which optimizations (as described by the ptFlags above) can be performed by
160 * the draw with this xfer processor. If this function is called, the xfer p rocessor may change 160 * the draw with this xfer processor. If this function is called, the xfer p rocessor may change
161 * its state to reflected the given blend optimizations. If the XP needs to see a specific input 161 * its state to reflected the given blend optimizations. If the XP needs to see a specific input
162 * color to blend correctly, it will set the OverrideColor flag and the outp ut parameter 162 * color to blend correctly, it will set the OverrideColor flag and the outp ut parameter
163 * overrideColor will be the required value that should be passed into the X P. 163 * overrideColor will be the required value that should be passed into the X P.
164 * A caller who calls this function on a XP is required to honor the returne d OptFlags 164 * A caller who calls this function on a XP is required to honor the returne d OptFlags
165 * and color values for its draw. 165 * and color values for its draw.
166 */ 166 */
167 virtual OptFlags getOptimizations(const GrProcOptInfo& colorPOI, 167 OptFlags getOptimizations(const GrProcOptInfo& colorPOI,
168 const GrProcOptInfo& coveragePOI, 168 const GrProcOptInfo& coveragePOI,
169 bool doesStencilWrite, 169 bool doesStencilWrite,
170 GrColor* overrideColor, 170 GrColor* overrideColor,
171 const GrDrawTargetCaps& caps) = 0; 171 const GrDrawTargetCaps& caps);
172 172
173 /** 173 /**
174 * Returns whether this XP will require an Xfer barrier on the given rt. If true, outBarrierType 174 * Returns whether this XP will require an Xfer barrier on the given rt. If true, outBarrierType
175 * is updated to contain the type of barrier needed. 175 * is updated to contain the type of barrier needed.
176 */ 176 */
177 bool willNeedXferBarrier(const GrRenderTarget* rt, 177 bool willNeedXferBarrier(const GrRenderTarget* rt,
178 const GrDrawTargetCaps& caps, 178 const GrDrawTargetCaps& caps,
179 GrXferBarrierType* outBarrierType) const; 179 GrXferBarrierType* outBarrierType) const;
180 180
181 struct BlendInfo { 181 struct BlendInfo {
(...skipping 28 matching lines...) Expand all
210 210
211 /** 211 /**
212 * Returns the offset into the DstCopyTexture to use when reading it in the shader. This value 212 * Returns the offset into the DstCopyTexture to use when reading it in the shader. This value
213 * is only valid if getDstCopyTexture() != NULL. 213 * is only valid if getDstCopyTexture() != NULL.
214 */ 214 */
215 const SkIPoint& dstCopyTextureOffset() const { 215 const SkIPoint& dstCopyTextureOffset() const {
216 SkASSERT(this->getDstCopyTexture()); 216 SkASSERT(this->getDstCopyTexture());
217 return fDstCopyTextureOffset; 217 return fDstCopyTextureOffset;
218 } 218 }
219 219
220 /**
221 * Returns whether or not the XP will look at coverage when doing its blendi ng.
222 */
223 bool readsCoverage() const { return fReadsCoverage; }
224
220 /** 225 /**
221 * Returns whether or not this xferProcossor will set a secondary output to be used with dual 226 * Returns whether or not this xferProcossor will set a secondary output to be used with dual
222 * source blending. 227 * source blending.
223 */ 228 */
224 virtual bool hasSecondaryOutput() const { return false; } 229 virtual bool hasSecondaryOutput() const { return false; }
225 230
226 /** Returns true if this and other processor conservatively draw identically . It can only return 231 /** Returns true if this and other processor conservatively draw identically . It can only return
227 true when the two processor are of the same subclass (i.e. they return t he same object from 232 true when the two processor are of the same subclass (i.e. they return t he same object from
228 from getFactory()). 233 from getFactory()).
229 234
230 A return value of true from isEqual() should not be used to test whether the processor would 235 A return value of true from isEqual() should not be used to test whether the processor would
231 generate the same shader code. To test for identical code generation use getGLProcessorKey*/ 236 generate the same shader code. To test for identical code generation use getGLProcessorKey*/
232 237
233 bool isEqual(const GrXferProcessor& that) const { 238 bool isEqual(const GrXferProcessor& that) const {
234 if (this->classID() != that.classID()) { 239 if (this->classID() != that.classID()) {
235 return false; 240 return false;
236 } 241 }
237 if (this->fWillReadDstColor != that.fWillReadDstColor) { 242 if (this->fWillReadDstColor != that.fWillReadDstColor) {
238 return false; 243 return false;
239 } 244 }
245 if (this->fReadsCoverage != that.fReadsCoverage) {
246 return false;
247 }
240 if (this->fDstCopy.getTexture() != that.fDstCopy.getTexture()) { 248 if (this->fDstCopy.getTexture() != that.fDstCopy.getTexture()) {
241 return false; 249 return false;
242 } 250 }
243 if (this->fDstCopyTextureOffset != that.fDstCopyTextureOffset) { 251 if (this->fDstCopyTextureOffset != that.fDstCopyTextureOffset) {
244 return false; 252 return false;
245 } 253 }
246 return this->onIsEqual(that); 254 return this->onIsEqual(that);
247 } 255 }
248 256
249 protected: 257 protected:
250 GrXferProcessor(); 258 GrXferProcessor();
251 GrXferProcessor(const GrDeviceCoordTexture* dstCopy, bool willReadDstColor); 259 GrXferProcessor(const GrDeviceCoordTexture* dstCopy, bool willReadDstColor);
252 260
253 private: 261 private:
262 virtual OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI,
263 const GrProcOptInfo& coveragePOI,
264 bool doesStencilWrite,
265 GrColor* overrideColor,
266 const GrDrawTargetCaps& caps) = 0;
267
254 /** 268 /**
255 * Sets a unique key on the GrProcessorKeyBuilder that is directly associate d with this xfer 269 * Sets a unique key on the GrProcessorKeyBuilder that is directly associate d with this xfer
256 * processor's GL backend implementation. 270 * processor's GL backend implementation.
257 */ 271 */
258 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps, 272 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps,
259 GrProcessorKeyBuilder* b) const = 0; 273 GrProcessorKeyBuilder* b) const = 0;
260 274
261 /** 275 /**
262 * If not using a texture barrier, retrieves whether the subclass will requi re a different type 276 * If not using a texture barrier, retrieves whether the subclass will requi re a different type
263 * of barrier. 277 * of barrier.
264 */ 278 */
265 virtual bool onWillNeedXferBarrier(const GrRenderTarget*, 279 virtual bool onWillNeedXferBarrier(const GrRenderTarget*,
266 const GrDrawTargetCaps&, 280 const GrDrawTargetCaps&,
267 GrXferBarrierType* outBarrierType SK_UNUS ED) const { 281 GrXferBarrierType* outBarrierType SK_UNUS ED) const {
268 return false; 282 return false;
269 } 283 }
270 284
271 /** 285 /**
272 * Retrieves the hardware blend state required by this Xfer processor. The B lendInfo struct 286 * Retrieves the hardware blend state required by this Xfer processor. The B lendInfo struct
273 * comes initialized to default values, so the Xfer processor only needs to set the state it 287 * comes initialized to default values, so the Xfer processor only needs to set the state it
274 * needs. It may not even need to override this method at all. 288 * needs. It may not even need to override this method at all.
275 */ 289 */
276 virtual void onGetBlendInfo(BlendInfo*) const {} 290 virtual void onGetBlendInfo(BlendInfo*) const {}
277 291
278 virtual bool onIsEqual(const GrXferProcessor&) const = 0; 292 virtual bool onIsEqual(const GrXferProcessor&) const = 0;
279 293
280 bool fWillReadDstColor; 294 bool fWillReadDstColor;
295 bool fReadsCoverage;
281 SkIPoint fDstCopyTextureOffset; 296 SkIPoint fDstCopyTextureOffset;
282 GrTextureAccess fDstCopy; 297 GrTextureAccess fDstCopy;
283 298
284 typedef GrFragmentProcessor INHERITED; 299 typedef GrFragmentProcessor INHERITED;
285 }; 300 };
286 301
287 GR_MAKE_BITFIELD_OPS(GrXferProcessor::OptFlags); 302 GR_MAKE_BITFIELD_OPS(GrXferProcessor::OptFlags);
288 303
289 /////////////////////////////////////////////////////////////////////////////// 304 ///////////////////////////////////////////////////////////////////////////////
290 305
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 enum { 399 enum {
385 kIllegalXPFClassID = 0, 400 kIllegalXPFClassID = 0,
386 }; 401 };
387 static int32_t gCurrXPFClassID; 402 static int32_t gCurrXPFClassID;
388 403
389 typedef GrProgramElement INHERITED; 404 typedef GrProgramElement INHERITED;
390 }; 405 };
391 406
392 #endif 407 #endif
393 408
OLDNEW
« no previous file with comments | « no previous file | src/effects/SkArithmeticMode_gpu.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698