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

Side by Side Diff: tests/GLProgramsTest.cpp

Issue 14233006: Perform coverage blend with the dst in the shader when using a dst-reading xfermode. (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 8 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 | Annotate | Revision Log
« src/gpu/gl/GrGLProgram.cpp ('K') | « src/gpu/gl/GrGLProgramDesc.cpp ('k') | no next file » | 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 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 // This is a GPU-backend specific test. It relies on static intializers to work 9 // This is a GPU-backend specific test. It relies on static intializers to work
10 10
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 fColorFilterXfermode = random->nextULessThan(SkXfermode::kCoeffModesCnt); 47 fColorFilterXfermode = random->nextULessThan(SkXfermode::kCoeffModesCnt);
48 48
49 fFirstCoverageStage = random->nextULessThan(GrDrawState::kNumStages); 49 fFirstCoverageStage = random->nextULessThan(GrDrawState::kNumStages);
50 50
51 #if GR_GL_EXPERIMENTAL_GS 51 #if GR_GL_EXPERIMENTAL_GS
52 fExperimentalGS = gpu->caps()->geometryShaderSupport() && random->nextBool() ; 52 fExperimentalGS = gpu->caps()->geometryShaderSupport() && random->nextBool() ;
53 #endif 53 #endif
54 54
55 fDiscardIfZeroCoverage = random->nextBool(); 55 fDiscardIfZeroCoverage = random->nextBool();
56 56
57 if (gpu->caps()->dualSourceBlendingSupport()) {
58 fDualSrcOutput = random->nextULessThan(kDualSrcOutputCnt);
59 } else {
60 fDualSrcOutput = kNone_DualSrcOutput;
61 }
62
63 bool useLocalCoords = random->nextBool() && currAttribIndex < GrDrawState::k MaxVertexAttribCnt; 57 bool useLocalCoords = random->nextBool() && currAttribIndex < GrDrawState::k MaxVertexAttribCnt;
64 fLocalCoordAttributeIndex = useLocalCoords ? currAttribIndex++ : -1; 58 fLocalCoordAttributeIndex = useLocalCoords ? currAttribIndex++ : -1;
65 59
66 bool dstRead = false; 60 bool dstRead = false;
67 for (int s = 0; s < GrDrawState::kNumStages; ++s) { 61 for (int s = 0; s < GrDrawState::kNumStages; ++s) {
68 if (NULL != stages[s].getEffect()) { 62 if (NULL != stages[s].getEffect()) {
69 const GrBackendEffectFactory& factory = (*stages[s].getEffect())->ge tFactory(); 63 const GrBackendEffectFactory& factory = (*stages[s].getEffect())->ge tFactory();
70 GrDrawEffect drawEffect(stages[s], useLocalCoords); 64 GrDrawEffect drawEffect(stages[s], useLocalCoords);
71 fEffectKeys[s] = factory.glEffectKey(drawEffect, gpu->glCaps()); 65 fEffectKeys[s] = factory.glEffectKey(drawEffect, gpu->glCaps());
72 if ((*stages[s].getEffect())->willReadDst()) { 66 if ((*stages[s].getEffect())->willReadDst()) {
73 dstRead = true; 67 dstRead = true;
74 } 68 }
75 } 69 }
76 } 70 }
77 71
78 if (dstRead) { 72 if (dstRead) {
79 this->fDstRead = GrGLShaderBuilder::KeyForDstRead(dstTexture, gpu->glCap s()); 73 this->fDstRead = GrGLShaderBuilder::KeyForDstRead(dstTexture, gpu->glCap s());
80 } 74 }
75
76 CoverageOutput coverageOutput;
77 bool illegalCoverageOutput;
78 do {
79 coverageOutput = static_cast<CoverageOutput>(random->nextULessThan(kCove rageOutputCnt));
80 illegalCoverageOutput = (!gpu->caps()->dualSourceBlendingSupport() &&
81 CoverageOutputUsesSecondaryOutput(coverageOutpu t)) ||
82 !dstRead && kCombineWithDst_CoverageOutput == co verageOutput;
83 } while (illegalCoverageOutput);
84
85 fCoverageOutput = coverageOutput;
81 } 86 }
82 87
83 bool GrGpuGL::programUnitTest(int maxStages) { 88 bool GrGpuGL::programUnitTest(int maxStages) {
84 89
85 maxStages = GrMin(maxStages, (int)GrDrawState::kNumStages); 90 maxStages = GrMin(maxStages, (int)GrDrawState::kNumStages);
86 91
87 GrTextureDesc dummyDesc; 92 GrTextureDesc dummyDesc;
88 dummyDesc.fConfig = kSkia8888_GrPixelConfig; 93 dummyDesc.fConfig = kSkia8888_GrPixelConfig;
89 dummyDesc.fWidth = 34; 94 dummyDesc.fWidth = 34;
90 dummyDesc.fHeight = 18; 95 dummyDesc.fHeight = 18;
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 SkMagnifierImageFilter mag(SkRect::MakeWH(SK_Scalar1, SK_Scalar1), SK_Scalar 1); 193 SkMagnifierImageFilter mag(SkRect::MakeWH(SK_Scalar1, SK_Scalar1), SK_Scalar 1);
189 GrConfigConversionEffect::Create(NULL, 194 GrConfigConversionEffect::Create(NULL,
190 false, 195 false,
191 GrConfigConversionEffect::kNone_PMConversio n, 196 GrConfigConversionEffect::kNone_PMConversio n,
192 SkMatrix::I()); 197 SkMatrix::I());
193 SkScalar matrix[20]; 198 SkScalar matrix[20];
194 SkColorMatrixFilter cmf(matrix); 199 SkColorMatrixFilter cmf(matrix);
195 } 200 }
196 201
197 #endif 202 #endif
OLDNEW
« src/gpu/gl/GrGLProgram.cpp ('K') | « src/gpu/gl/GrGLProgramDesc.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698