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

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

Issue 766653008: Revert of Make all blending up to GrOptDrawState be handled by the xp/xp factory. (Closed) Base URL: https://skia.googlesource.com/skia.git@xferFactorySolo
Patch Set: Created 6 years 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/gpu/GrDrawState.h ('k') | src/gpu/GrOptDrawState.h » ('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 2012 Google Inc. 2 * Copyright 2012 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 "GrDrawState.h" 8 #include "GrDrawState.h"
9 9
10 #include "GrBlend.h" 10 #include "GrBlend.h"
11 #include "GrOptDrawState.h" 11 #include "GrOptDrawState.h"
12 #include "GrPaint.h" 12 #include "GrPaint.h"
13 #include "GrProcOptInfo.h" 13 #include "GrProcOptInfo.h"
14 #include "GrXferProcessor.h" 14 #include "GrXferProcessor.h"
15 #include "effects/GrPorterDuffXferProcessor.h" 15 #include "effects/GrPorterDuffXferProcessor.h"
16 16
17 ///////////////////////////////////////////////////////////////////////////////
18
17 bool GrDrawState::isEqual(const GrDrawState& that) const { 19 bool GrDrawState::isEqual(const GrDrawState& that) const {
18 bool usingVertexColors = this->hasColorVertexAttribute(); 20 bool usingVertexColors = this->hasColorVertexAttribute();
19 if (!usingVertexColors && this->fColor != that.fColor) { 21 if (!usingVertexColors && this->fColor != that.fColor) {
20 return false; 22 return false;
21 } 23 }
22 24
23 if (this->getRenderTarget() != that.getRenderTarget() || 25 if (this->getRenderTarget() != that.getRenderTarget() ||
24 this->fColorStages.count() != that.fColorStages.count() || 26 this->fColorStages.count() != that.fColorStages.count() ||
25 this->fCoverageStages.count() != that.fCoverageStages.count() || 27 this->fCoverageStages.count() != that.fCoverageStages.count() ||
26 !this->fViewMatrix.cheapEqualTo(that.fViewMatrix) || 28 !this->fViewMatrix.cheapEqualTo(that.fViewMatrix) ||
29 this->fSrcBlend != that.fSrcBlend ||
30 this->fDstBlend != that.fDstBlend ||
31 this->fBlendConstant != that.fBlendConstant ||
27 this->fFlagBits != that.fFlagBits || 32 this->fFlagBits != that.fFlagBits ||
28 this->fStencilSettings != that.fStencilSettings || 33 this->fStencilSettings != that.fStencilSettings ||
29 this->fDrawFace != that.fDrawFace) { 34 this->fDrawFace != that.fDrawFace) {
30 return false; 35 return false;
31 } 36 }
32 37
33 bool usingVertexCoverage = this->hasCoverageVertexAttribute(); 38 bool usingVertexCoverage = this->hasCoverageVertexAttribute();
34 if (!usingVertexCoverage && this->fCoverage != that.fCoverage) { 39 if (!usingVertexCoverage && this->fCoverage != that.fCoverage) {
35 return false; 40 return false;
36 } 41 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 for (int i = 0; i < this->numCoverageStages(); ++i) { 83 for (int i = 0; i < this->numCoverageStages(); ++i) {
79 fCoverageStages[i].localCoordChange(preConcatMatrix); 84 fCoverageStages[i].localCoordChange(preConcatMatrix);
80 } 85 }
81 } 86 }
82 } 87 }
83 88
84 GrDrawState& GrDrawState::operator=(const GrDrawState& that) { 89 GrDrawState& GrDrawState::operator=(const GrDrawState& that) {
85 fRenderTarget.reset(SkSafeRef(that.fRenderTarget.get())); 90 fRenderTarget.reset(SkSafeRef(that.fRenderTarget.get()));
86 fColor = that.fColor; 91 fColor = that.fColor;
87 fViewMatrix = that.fViewMatrix; 92 fViewMatrix = that.fViewMatrix;
93 fSrcBlend = that.fSrcBlend;
94 fDstBlend = that.fDstBlend;
95 fBlendConstant = that.fBlendConstant;
88 fFlagBits = that.fFlagBits; 96 fFlagBits = that.fFlagBits;
89 fStencilSettings = that.fStencilSettings; 97 fStencilSettings = that.fStencilSettings;
90 fCoverage = that.fCoverage; 98 fCoverage = that.fCoverage;
91 fDrawFace = that.fDrawFace; 99 fDrawFace = that.fDrawFace;
92 fGeometryProcessor.reset(SkSafeRef(that.fGeometryProcessor.get())); 100 fGeometryProcessor.reset(SkSafeRef(that.fGeometryProcessor.get()));
93 fXPFactory.reset(SkRef(that.getXPFactory())); 101 fXPFactory.reset(SkRef(that.getXPFactory()));
94 fColorStages = that.fColorStages; 102 fColorStages = that.fColorStages;
95 fCoverageStages = that.fCoverageStages; 103 fCoverageStages = that.fCoverageStages;
96 104
97 fHints = that.fHints; 105 fHints = that.fHints;
(...skipping 17 matching lines...) Expand all
115 fXPFactory.reset(GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode)); 123 fXPFactory.reset(GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode));
116 fColorStages.reset(); 124 fColorStages.reset();
117 fCoverageStages.reset(); 125 fCoverageStages.reset();
118 126
119 fColor = 0xffffffff; 127 fColor = 0xffffffff;
120 if (NULL == initialViewMatrix) { 128 if (NULL == initialViewMatrix) {
121 fViewMatrix.reset(); 129 fViewMatrix.reset();
122 } else { 130 } else {
123 fViewMatrix = *initialViewMatrix; 131 fViewMatrix = *initialViewMatrix;
124 } 132 }
133 fSrcBlend = kOne_GrBlendCoeff;
134 fDstBlend = kZero_GrBlendCoeff;
135 fBlendConstant = 0x0;
125 fFlagBits = 0x0; 136 fFlagBits = 0x0;
126 fStencilSettings.setDisabled(); 137 fStencilSettings.setDisabled();
127 fCoverage = 0xff; 138 fCoverage = 0xff;
128 fDrawFace = kBoth_DrawFace; 139 fDrawFace = kBoth_DrawFace;
129 140
130 fHints = 0; 141 fHints = 0;
131 142
132 fColorProcInfoValid = false; 143 fColorProcInfoValid = false;
133 fCoverageProcInfoValid = false; 144 fCoverageProcInfoValid = false;
134 } 145 }
(...skipping 26 matching lines...) Expand all
161 for (int i = 0; i < paint.numColorStages(); ++i) { 172 for (int i = 0; i < paint.numColorStages(); ++i) {
162 fColorStages.push_back(paint.getColorStage(i)); 173 fColorStages.push_back(paint.getColorStage(i));
163 } 174 }
164 175
165 for (int i = 0; i < paint.numCoverageStages(); ++i) { 176 for (int i = 0; i < paint.numCoverageStages(); ++i) {
166 fCoverageStages.push_back(paint.getCoverageStage(i)); 177 fCoverageStages.push_back(paint.getCoverageStage(i));
167 } 178 }
168 179
169 fXPFactory.reset(SkRef(paint.getXPFactory())); 180 fXPFactory.reset(SkRef(paint.getXPFactory()));
170 181
182 this->setBlendFunc(paint.getSrcBlendCoeff(), paint.getDstBlendCoeff());
171 this->setRenderTarget(rt); 183 this->setRenderTarget(rt);
172 184
173 fViewMatrix = vm; 185 fViewMatrix = vm;
174 186
175 // These have no equivalent in GrPaint, set them to defaults 187 // These have no equivalent in GrPaint, set them to defaults
188 fBlendConstant = 0x0;
176 fDrawFace = kBoth_DrawFace; 189 fDrawFace = kBoth_DrawFace;
177 fStencilSettings.setDisabled(); 190 fStencilSettings.setDisabled();
178 fFlagBits = 0; 191 fFlagBits = 0;
179 fHints = 0; 192 fHints = 0;
180 193
181 // Enable the clip bit 194 // Enable the clip bit
182 this->enableState(GrDrawState::kClip_StateBit); 195 this->enableState(GrDrawState::kClip_StateBit);
183 196
184 this->setColor(paint.getColor()); 197 this->setColor(paint.getColor());
185 this->setState(GrDrawState::kDither_StateBit, paint.isDither()); 198 this->setState(GrDrawState::kDither_StateBit, paint.isDither());
186 this->setState(GrDrawState::kHWAntialias_StateBit, paint.isAntiAlias()); 199 this->setState(GrDrawState::kHWAntialias_StateBit, paint.isAntiAlias());
187 200
188 this->setCoverage(0xFF); 201 this->setCoverage(0xFF);
189 fColorProcInfoValid = false; 202 fColorProcInfoValid = false;
190 fCoverageProcInfoValid = false; 203 fCoverageProcInfoValid = false;
191 } 204 }
192 205
193 //////////////////////////////////////////////////////////////////////////////// 206 ////////////////////////////////////////////////////////////////////////////////
194 207
195 bool GrDrawState::couldApplyCoverage(const GrDrawTargetCaps& caps) const { 208 bool GrDrawState::couldApplyCoverage(const GrDrawTargetCaps& caps) const {
196 if (caps.dualSourceBlendingSupport()) { 209 if (caps.dualSourceBlendingSupport()) {
197 return true; 210 return true;
198 } 211 }
199 212 // we can correctly apply coverage if a) we have dual source blending
200 this->calcColorInvariantOutput(); 213 // or b) one of our blend optimizations applies
201 this->calcCoverageInvariantOutput(); 214 // or c) the src, dst blend coeffs are 1,0 and we will read Dst Color
202 return fXPFactory->canApplyCoverage(fColorProcInfo, fCoverageProcInfo, 215 GrBlendCoeff srcCoeff;
203 this->isCoverageDrawing(), this->isColor WriteDisabled()); 216 GrBlendCoeff dstCoeff;
217 BlendOpt opt = this->getBlendOpt(true, &srcCoeff, &dstCoeff);
218 return GrDrawState::kNone_BlendOpt != opt ||
219 (this->willEffectReadDstColor() &&
220 kOne_GrBlendCoeff == srcCoeff && kZero_GrBlendCoeff == dstCoeff);
204 } 221 }
205 222
206 bool GrDrawState::hasSolidCoverage() const { 223 bool GrDrawState::hasSolidCoverage() const {
207 // If we're drawing coverage directly then coverage is effectively treated a s color. 224 // If we're drawing coverage directly then coverage is effectively treated a s color.
208 if (this->isCoverageDrawing()) { 225 if (this->isCoverageDrawing()) {
209 return true; 226 return true;
210 } 227 }
211 228
212 if (this->numCoverageStages() > 0) { 229 if (this->numCoverageStages() > 0) {
213 return false; 230 return false;
214 } 231 }
215 232
216 this->calcCoverageInvariantOutput(); 233 this->calcCoverageInvariantOutput();
217 return fCoverageProcInfo.isSolidWhite(); 234 return fCoverageProcInfo.isSolidWhite();
218 } 235 }
219 236
220 //////////////////////////////////////////////////////////////////////////////s 237 //////////////////////////////////////////////////////////////////////////////s
221 238
222 bool GrDrawState::willEffectReadDstColor() const { 239 bool GrDrawState::willEffectReadDstColor() const {
223 this->calcColorInvariantOutput();
224 this->calcCoverageInvariantOutput();
225 // TODO: Remove need to create the XP here.
226 // Also once all custom blends are turned into XPs we can remove the n eed
227 // to check other stages since only xp's will be able to read dst
228 SkAutoTUnref<GrXferProcessor> xferProcessor(fXPFactory->createXferProcessor( fColorProcInfo,
229 fCoverageProcInfo));
230 if (xferProcessor && xferProcessor->willReadDstColor()) {
231 return true;
232 }
233
234 if (!this->isColorWriteDisabled()) { 240 if (!this->isColorWriteDisabled()) {
241 this->calcColorInvariantOutput();
235 if (fColorProcInfo.readsDst()) { 242 if (fColorProcInfo.readsDst()) {
236 return true; 243 return true;
237 } 244 }
238 } 245 }
246 this->calcCoverageInvariantOutput();
239 return fCoverageProcInfo.readsDst(); 247 return fCoverageProcInfo.readsDst();
240 } 248 }
241 249
242 void GrDrawState::AutoRestoreEffects::set(GrDrawState* ds) { 250 void GrDrawState::AutoRestoreEffects::set(GrDrawState* ds) {
243 if (fDrawState) { 251 if (fDrawState) {
244 // See the big comment on the class definition about GPs. 252 // See the big comment on the class definition about GPs.
245 if (SK_InvalidUniqueID == fOriginalGPID) { 253 if (SK_InvalidUniqueID == fOriginalGPID) {
246 fDrawState->fGeometryProcessor.reset(NULL); 254 fDrawState->fGeometryProcessor.reset(NULL);
247 } else { 255 } else {
248 SkASSERT(fDrawState->getGeometryProcessor()->getUniqueID() == 256 SkASSERT(fDrawState->getGeometryProcessor()->getUniqueID() ==
(...skipping 24 matching lines...) Expand all
273 fCoverageEffectCnt = ds->numCoverageStages(); 281 fCoverageEffectCnt = ds->numCoverageStages();
274 SkDEBUGCODE(++ds->fBlockEffectRemovalCnt;) 282 SkDEBUGCODE(++ds->fBlockEffectRemovalCnt;)
275 } 283 }
276 } 284 }
277 285
278 //////////////////////////////////////////////////////////////////////////////// 286 ////////////////////////////////////////////////////////////////////////////////
279 287
280 // Some blend modes allow folding a fractional coverage value into the color's a lpha channel, while 288 // Some blend modes allow folding a fractional coverage value into the color's a lpha channel, while
281 // others will blend incorrectly. 289 // others will blend incorrectly.
282 bool GrDrawState::canTweakAlphaForCoverage() const { 290 bool GrDrawState::canTweakAlphaForCoverage() const {
283 return fXPFactory->canTweakAlphaForCoverage(this->isCoverageDrawing()); 291 /*
292 The fractional coverage is f.
293 The src and dst coeffs are Cs and Cd.
294 The dst and src colors are S and D.
295 We want the blend to compute: f*Cs*S + (f*Cd + (1-f))D. By tweaking the sou rce color's alpha
296 we're replacing S with S'=fS. It's obvious that that first term will always be ok. The second
297 term can be rearranged as [1-(1-Cd)f]D. By substituting in the various poss ibilities for Cd we
298 find that only 1, ISA, and ISC produce the correct destination when applied to S' and D.
299 Also, if we're directly rendering coverage (isCoverageDrawing) then coverag e is treated as
300 color by definition.
301 */
302 return kOne_GrBlendCoeff == fDstBlend ||
303 kISA_GrBlendCoeff == fDstBlend ||
304 kISC_GrBlendCoeff == fDstBlend ||
305 this->isCoverageDrawing();
284 } 306 }
285 307
286 //////////////////////////////////////////////////////////////////////////////// 308 ////////////////////////////////////////////////////////////////////////////////
287 309
288 void GrDrawState::AutoViewMatrixRestore::restore() { 310 void GrDrawState::AutoViewMatrixRestore::restore() {
289 if (fDrawState) { 311 if (fDrawState) {
290 SkDEBUGCODE(--fDrawState->fBlockEffectRemovalCnt;) 312 SkDEBUGCODE(--fDrawState->fBlockEffectRemovalCnt;)
291 fDrawState->fViewMatrix = fViewMatrix; 313 fDrawState->fViewMatrix = fViewMatrix;
292 SkASSERT(fDrawState->numColorStages() >= fNumColorStages); 314 SkASSERT(fDrawState->numColorStages() >= fNumColorStages);
293 int numCoverageStages = fSavedCoordChanges.count() - fNumColorStages; 315 int numCoverageStages = fSavedCoordChanges.count() - fNumColorStages;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 } 393 }
372 394
373 //////////////////////////////////////////////////////////////////////////////// 395 ////////////////////////////////////////////////////////////////////////////////
374 396
375 GrDrawState::~GrDrawState() { 397 GrDrawState::~GrDrawState() {
376 SkASSERT(0 == fBlockEffectRemovalCnt); 398 SkASSERT(0 == fBlockEffectRemovalCnt);
377 } 399 }
378 400
379 //////////////////////////////////////////////////////////////////////////////// 401 ////////////////////////////////////////////////////////////////////////////////
380 402
403 GrDrawState::BlendOpt GrDrawState::getBlendOpt(bool forceCoverage,
404 GrBlendCoeff* srcCoeff,
405 GrBlendCoeff* dstCoeff) const {
406 GrBlendCoeff bogusSrcCoeff, bogusDstCoeff;
407 if (NULL == srcCoeff) {
408 srcCoeff = &bogusSrcCoeff;
409 }
410 if (NULL == dstCoeff) {
411 dstCoeff = &bogusDstCoeff;
412 }
413
414 *srcCoeff = this->getSrcBlendCoeff();
415 *dstCoeff = this->getDstBlendCoeff();
416
417 if (this->isColorWriteDisabled()) {
418 *srcCoeff = kZero_GrBlendCoeff;
419 *dstCoeff = kOne_GrBlendCoeff;
420 }
421
422 bool srcAIsOne = this->srcAlphaWillBeOne();
423 bool dstCoeffIsOne = kOne_GrBlendCoeff == *dstCoeff ||
424 (kSA_GrBlendCoeff == *dstCoeff && srcAIsOne);
425 bool dstCoeffIsZero = kZero_GrBlendCoeff == *dstCoeff ||
426 (kISA_GrBlendCoeff == *dstCoeff && srcAIsOne);
427
428 // When coeffs are (0,1) there is no reason to draw at all, unless
429 // stenciling is enabled. Having color writes disabled is effectively
430 // (0,1).
431 if ((kZero_GrBlendCoeff == *srcCoeff && dstCoeffIsOne)) {
432 if (this->getStencil().doesWrite()) {
433 return kEmitCoverage_BlendOpt;
434 } else {
435 *dstCoeff = kOne_GrBlendCoeff;
436 return kSkipDraw_BlendOpt;
437 }
438 }
439
440 bool hasCoverage = forceCoverage || !this->hasSolidCoverage();
441
442 // if we don't have coverage we can check whether the dst
443 // has to read at all. If not, we'll disable blending.
444 if (!hasCoverage) {
445 if (dstCoeffIsZero) {
446 if (kOne_GrBlendCoeff == *srcCoeff) {
447 // if there is no coverage and coeffs are (1,0) then we
448 // won't need to read the dst at all, it gets replaced by src
449 *dstCoeff = kZero_GrBlendCoeff;
450 return kNone_BlendOpt;
451 } else if (kZero_GrBlendCoeff == *srcCoeff) {
452 // if the op is "clear" then we don't need to emit a color
453 // or blend, just write transparent black into the dst.
454 *srcCoeff = kOne_GrBlendCoeff;
455 *dstCoeff = kZero_GrBlendCoeff;
456 return kEmitTransBlack_BlendOpt;
457 }
458 }
459 } else if (this->isCoverageDrawing()) {
460 // we have coverage but we aren't distinguishing it from alpha by reques t.
461 return kCoverageAsAlpha_BlendOpt;
462 } else {
463 // check whether coverage can be safely rolled into alpha
464 // of if we can skip color computation and just emit coverage
465 if (this->canTweakAlphaForCoverage()) {
466 return kCoverageAsAlpha_BlendOpt;
467 }
468 if (dstCoeffIsZero) {
469 if (kZero_GrBlendCoeff == *srcCoeff) {
470 // the source color is not included in the blend
471 // the dst coeff is effectively zero so blend works out to:
472 // (c)(0)D + (1-c)D = (1-c)D.
473 *dstCoeff = kISA_GrBlendCoeff;
474 return kEmitCoverage_BlendOpt;
475 } else if (srcAIsOne) {
476 // the dst coeff is effectively zero so blend works out to:
477 // cS + (c)(0)D + (1-c)D = cS + (1-c)D.
478 // If Sa is 1 then we can replace Sa with c
479 // and set dst coeff to 1-Sa.
480 *dstCoeff = kISA_GrBlendCoeff;
481 return kCoverageAsAlpha_BlendOpt;
482 }
483 } else if (dstCoeffIsOne) {
484 // the dst coeff is effectively one so blend works out to:
485 // cS + (c)(1)D + (1-c)D = cS + D.
486 *dstCoeff = kOne_GrBlendCoeff;
487 return kCoverageAsAlpha_BlendOpt;
488 }
489 }
490
491 return kNone_BlendOpt;
492 }
493
381 bool GrDrawState::srcAlphaWillBeOne() const { 494 bool GrDrawState::srcAlphaWillBeOne() const {
382 this->calcColorInvariantOutput(); 495 this->calcColorInvariantOutput();
383 if (this->isCoverageDrawing()) { 496 if (this->isCoverageDrawing()) {
384 this->calcCoverageInvariantOutput(); 497 this->calcCoverageInvariantOutput();
385 return (fColorProcInfo.isOpaque() && fCoverageProcInfo.isOpaque()); 498 return (fColorProcInfo.isOpaque() && fCoverageProcInfo.isOpaque());
386 } 499 }
387 return fColorProcInfo.isOpaque(); 500 return fColorProcInfo.isOpaque();
388 } 501 }
389 502
390 bool GrDrawState::willBlendWithDst() const { 503 bool GrDrawState::willBlendWithDst() const {
391 this->calcColorInvariantOutput(); 504 if (!this->hasSolidCoverage()) {
392 this->calcCoverageInvariantOutput(); 505 return true;
393 return fXPFactory->willBlendWithDst(fColorProcInfo, fCoverageProcInfo, 506 }
394 this->isCoverageDrawing(), this->isColor WriteDisabled()); 507
508 if (this->willEffectReadDstColor()) {
509 return true;
510 }
511
512 if (GrBlendCoeffRefsDst(this->getSrcBlendCoeff())) {
513 return true;
514 }
515
516 GrBlendCoeff dstCoeff = this->getDstBlendCoeff();
517 if (!(kZero_GrBlendCoeff == dstCoeff ||
518 (kISA_GrBlendCoeff == dstCoeff && this->srcAlphaWillBeOne()))) {
519 return true;
520 }
521
522 return false;
395 } 523 }
396 524
397 void GrDrawState::calcColorInvariantOutput() const { 525 void GrDrawState::calcColorInvariantOutput() const {
398 if (!fColorProcInfoValid) { 526 if (!fColorProcInfoValid) {
399 GrColor color; 527 GrColor color;
400 GrColorComponentFlags flags; 528 GrColorComponentFlags flags;
401 if (this->hasColorVertexAttribute()) { 529 if (this->hasColorVertexAttribute()) {
402 if (fHints & kVertexColorsAreOpaque_Hint) { 530 if (fHints & kVertexColorsAreOpaque_Hint) {
403 flags = kA_GrColorComponentFlag; 531 flags = kA_GrColorComponentFlag;
404 color = 0xFF << GrColor_SHIFT_A; 532 color = 0xFF << GrColor_SHIFT_A;
(...skipping 21 matching lines...) Expand all
426 color = 0; 554 color = 0;
427 } else { 555 } else {
428 flags = kRGBA_GrColorComponentFlags; 556 flags = kRGBA_GrColorComponentFlags;
429 color = this->getCoverageColor(); 557 color = this->getCoverageColor();
430 } 558 }
431 fCoverageProcInfo.calcWithInitialValues(fCoverageStages.begin(), this->n umCoverageStages(), 559 fCoverageProcInfo.calcWithInitialValues(fCoverageStages.begin(), this->n umCoverageStages(),
432 color, flags, true, fGeometryPro cessor.get()); 560 color, flags, true, fGeometryPro cessor.get());
433 fCoverageProcInfoValid = true; 561 fCoverageProcInfoValid = true;
434 } 562 }
435 } 563 }
564
OLDNEW
« no previous file with comments | « src/gpu/GrDrawState.h ('k') | src/gpu/GrOptDrawState.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698