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

Side by Side Diff: src/gpu/effects/GrBezierEffect.cpp

Issue 2437063002: re-re-land of skslc now automatically turns on derivatives support (Closed)
Patch Set: Created 4 years, 1 month 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/batches/GrPLSPathRenderer.cpp ('k') | src/gpu/effects/GrDistanceFieldGeoProc.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 2013 Google Inc. 2 * Copyright 2013 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 "GrBezierEffect.h" 8 #include "GrBezierEffect.h"
9 9
10 #include "glsl/GrGLSLFragmentShaderBuilder.h" 10 #include "glsl/GrGLSLFragmentShaderBuilder.h"
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 fragBuilder->declAppend(dklmdx); 129 fragBuilder->declAppend(dklmdx);
130 fragBuilder->declAppend(dklmdy); 130 fragBuilder->declAppend(dklmdy);
131 fragBuilder->declAppend(dfdx); 131 fragBuilder->declAppend(dfdx);
132 fragBuilder->declAppend(dfdy); 132 fragBuilder->declAppend(dfdy);
133 fragBuilder->declAppend(gF); 133 fragBuilder->declAppend(gF);
134 fragBuilder->declAppend(gFM); 134 fragBuilder->declAppend(gFM);
135 fragBuilder->declAppend(func); 135 fragBuilder->declAppend(func);
136 136
137 switch (fEdgeType) { 137 switch (fEdgeType) {
138 case kHairlineAA_GrProcessorEdgeType: { 138 case kHairlineAA_GrProcessorEdgeType: {
139 SkAssertResult(fragBuilder->enableFeature(
140 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e));
141 fragBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), v.fsI n()); 139 fragBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), v.fsI n());
142 fragBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), v.fsI n()); 140 fragBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), v.fsI n());
143 fragBuilder->codeAppendf("%s = 2.0 * %s.x * %s.x - %s.y * %s.z - %s. z * %s.y;", 141 fragBuilder->codeAppendf("%s = 2.0 * %s.x * %s.x - %s.y * %s.z - %s. z * %s.y;",
144 dfdx.c_str(), 142 dfdx.c_str(),
145 v.fsIn(), dklmdx.c_str(), 143 v.fsIn(), dklmdx.c_str(),
146 v.fsIn(), dklmdx.c_str(), 144 v.fsIn(), dklmdx.c_str(),
147 v.fsIn(), dklmdx.c_str()); 145 v.fsIn(), dklmdx.c_str());
148 fragBuilder->codeAppendf("%s = 2.0 * %s.x * %s.x - %s.y * %s.z - %s. z * %s.y;", 146 fragBuilder->codeAppendf("%s = 2.0 * %s.x * %s.x - %s.y * %s.z - %s. z * %s.y;",
149 dfdy.c_str(), 147 dfdy.c_str(),
150 v.fsIn(), dklmdy.c_str(), 148 v.fsIn(), dklmdy.c_str(),
151 v.fsIn(), dklmdy.c_str(), 149 v.fsIn(), dklmdy.c_str(),
152 v.fsIn(), dklmdy.c_str()); 150 v.fsIn(), dklmdy.c_str());
153 fragBuilder->codeAppendf("%s = vec2(%s, %s);", gF.c_str(), dfdx.c_st r(), dfdy.c_str()); 151 fragBuilder->codeAppendf("%s = vec2(%s, %s);", gF.c_str(), dfdx.c_st r(), dfdy.c_str());
154 fragBuilder->codeAppendf("%s = sqrt(dot(%s, %s));", 152 fragBuilder->codeAppendf("%s = sqrt(dot(%s, %s));",
155 gFM.c_str(), gF.c_str(), gF.c_str()); 153 gFM.c_str(), gF.c_str(), gF.c_str());
156 fragBuilder->codeAppendf("%s = %s.x*%s.x - %s.y*%s.z;", 154 fragBuilder->codeAppendf("%s = %s.x*%s.x - %s.y*%s.z;",
157 func.c_str(), v.fsIn(), v.fsIn(), v.fsIn(), v.fsIn()); 155 func.c_str(), v.fsIn(), v.fsIn(), v.fsIn(), v.fsIn());
158 fragBuilder->codeAppendf("%s = abs(%s);", func.c_str(), func.c_str() ); 156 fragBuilder->codeAppendf("%s = abs(%s);", func.c_str(), func.c_str() );
159 fragBuilder->codeAppendf("%s = %s / %s;", 157 fragBuilder->codeAppendf("%s = %s / %s;",
160 edgeAlpha.c_str(), func.c_str(), gFM.c_str( )); 158 edgeAlpha.c_str(), func.c_str(), gFM.c_str( ));
161 fragBuilder->codeAppendf("%s = max(1.0 - %s, 0.0);", 159 fragBuilder->codeAppendf("%s = max(1.0 - %s, 0.0);",
162 edgeAlpha.c_str(), edgeAlpha.c_str()); 160 edgeAlpha.c_str(), edgeAlpha.c_str());
163 // Add line below for smooth cubic ramp 161 // Add line below for smooth cubic ramp
164 // fragBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0 *edgeAlpha);"); 162 // fragBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0 *edgeAlpha);");
165 break; 163 break;
166 } 164 }
167 case kFillAA_GrProcessorEdgeType: { 165 case kFillAA_GrProcessorEdgeType: {
168 SkAssertResult(fragBuilder->enableFeature(
169 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e));
170 fragBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), v.fsI n()); 166 fragBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), v.fsI n());
171 fragBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), v.fsI n()); 167 fragBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), v.fsI n());
172 fragBuilder->codeAppendf("%s =" 168 fragBuilder->codeAppendf("%s ="
173 "2.0 * %s.x * %s.x - %s.y * %s.z - %s.z * % s.y;", 169 "2.0 * %s.x * %s.x - %s.y * %s.z - %s.z * % s.y;",
174 dfdx.c_str(), 170 dfdx.c_str(),
175 v.fsIn(), dklmdx.c_str(), 171 v.fsIn(), dklmdx.c_str(),
176 v.fsIn(), dklmdx.c_str(), 172 v.fsIn(), dklmdx.c_str(),
177 v.fsIn(), dklmdx.c_str()); 173 v.fsIn(), dklmdx.c_str());
178 fragBuilder->codeAppendf("%s =" 174 fragBuilder->codeAppendf("%s ="
179 "2.0 * %s.x * %s.x - %s.y * %s.z - %s.z * % s.y;", 175 "2.0 * %s.x * %s.x - %s.y * %s.z - %s.z * % s.y;",
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 uniformHandler, 363 uniformHandler,
368 gpArgs->fPositionVar, 364 gpArgs->fPositionVar,
369 gp.inPosition()->fName, 365 gp.inPosition()->fName,
370 gp.localMatrix(), 366 gp.localMatrix(),
371 args.fFPCoordTransformHandler); 367 args.fFPCoordTransformHandler);
372 368
373 fragBuilder->codeAppendf("float edgeAlpha;"); 369 fragBuilder->codeAppendf("float edgeAlpha;");
374 370
375 switch (fEdgeType) { 371 switch (fEdgeType) {
376 case kHairlineAA_GrProcessorEdgeType: { 372 case kHairlineAA_GrProcessorEdgeType: {
377 SkAssertResult(fragBuilder->enableFeature(
378 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e));
379 fragBuilder->codeAppendf("vec2 duvdx = dFdx(%s.xy);", v.fsIn()); 373 fragBuilder->codeAppendf("vec2 duvdx = dFdx(%s.xy);", v.fsIn());
380 fragBuilder->codeAppendf("vec2 duvdy = dFdy(%s.xy);", v.fsIn()); 374 fragBuilder->codeAppendf("vec2 duvdy = dFdy(%s.xy);", v.fsIn());
381 fragBuilder->codeAppendf("vec2 gF = vec2(2.0 * %s.x * duvdx.x - duvd x.y," 375 fragBuilder->codeAppendf("vec2 gF = vec2(2.0 * %s.x * duvdx.x - duvd x.y,"
382 " 2.0 * %s.x * duvdy.x - duvd y.y);", 376 " 2.0 * %s.x * duvdy.x - duvd y.y);",
383 v.fsIn(), v.fsIn()); 377 v.fsIn(), v.fsIn());
384 fragBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);", 378 fragBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);",
385 v.fsIn(), v.fsIn(), v.fsIn()); 379 v.fsIn(), v.fsIn(), v.fsIn());
386 fragBuilder->codeAppend("edgeAlpha = sqrt(edgeAlpha * edgeAlpha / do t(gF, gF));"); 380 fragBuilder->codeAppend("edgeAlpha = sqrt(edgeAlpha * edgeAlpha / do t(gF, gF));");
387 fragBuilder->codeAppend("edgeAlpha = max(1.0 - edgeAlpha, 0.0);"); 381 fragBuilder->codeAppend("edgeAlpha = max(1.0 - edgeAlpha, 0.0);");
388 // Add line below for smooth cubic ramp 382 // Add line below for smooth cubic ramp
389 // fragBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0 *edgeAlpha);"); 383 // fragBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0 *edgeAlpha);");
390 break; 384 break;
391 } 385 }
392 case kFillAA_GrProcessorEdgeType: { 386 case kFillAA_GrProcessorEdgeType: {
393 SkAssertResult(fragBuilder->enableFeature(
394 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e));
395 fragBuilder->codeAppendf("vec2 duvdx = dFdx(%s.xy);", v.fsIn()); 387 fragBuilder->codeAppendf("vec2 duvdx = dFdx(%s.xy);", v.fsIn());
396 fragBuilder->codeAppendf("vec2 duvdy = dFdy(%s.xy);", v.fsIn()); 388 fragBuilder->codeAppendf("vec2 duvdy = dFdy(%s.xy);", v.fsIn());
397 fragBuilder->codeAppendf("vec2 gF = vec2(2.0 * %s.x * duvdx.x - duvd x.y," 389 fragBuilder->codeAppendf("vec2 gF = vec2(2.0 * %s.x * duvdx.x - duvd x.y,"
398 " 2.0 * %s.x * duvdy.x - duvd y.y);", 390 " 2.0 * %s.x * duvdy.x - duvd y.y);",
399 v.fsIn(), v.fsIn()); 391 v.fsIn(), v.fsIn());
400 fragBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);", 392 fragBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);",
401 v.fsIn(), v.fsIn(), v.fsIn()); 393 v.fsIn(), v.fsIn(), v.fsIn());
402 fragBuilder->codeAppend("edgeAlpha = edgeAlpha / sqrt(dot(gF, gF));" ); 394 fragBuilder->codeAppend("edgeAlpha = edgeAlpha / sqrt(dot(gF, gF));" );
403 fragBuilder->codeAppend("edgeAlpha = clamp(1.0 - edgeAlpha, 0.0, 1.0 );"); 395 fragBuilder->codeAppend("edgeAlpha = clamp(1.0 - edgeAlpha, 0.0, 1.0 );");
404 // Add line below for smooth cubic ramp 396 // Add line below for smooth cubic ramp
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 fragBuilder->declAppend(dklmdx); 577 fragBuilder->declAppend(dklmdx);
586 fragBuilder->declAppend(dklmdy); 578 fragBuilder->declAppend(dklmdy);
587 fragBuilder->declAppend(dfdx); 579 fragBuilder->declAppend(dfdx);
588 fragBuilder->declAppend(dfdy); 580 fragBuilder->declAppend(dfdy);
589 fragBuilder->declAppend(gF); 581 fragBuilder->declAppend(gF);
590 fragBuilder->declAppend(gFM); 582 fragBuilder->declAppend(gFM);
591 fragBuilder->declAppend(func); 583 fragBuilder->declAppend(func);
592 584
593 switch (fEdgeType) { 585 switch (fEdgeType) {
594 case kHairlineAA_GrProcessorEdgeType: { 586 case kHairlineAA_GrProcessorEdgeType: {
595 SkAssertResult(fragBuilder->enableFeature(
596 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e));
597 fragBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), v.fsI n()); 587 fragBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), v.fsI n());
598 fragBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), v.fsI n()); 588 fragBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), v.fsI n());
599 fragBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s. z - %s.z * %s.y;", 589 fragBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s. z - %s.z * %s.y;",
600 dfdx.c_str(), v.fsIn(), v.fsIn(), dklmdx.c_ str(), v.fsIn(), 590 dfdx.c_str(), v.fsIn(), v.fsIn(), dklmdx.c_ str(), v.fsIn(),
601 dklmdx.c_str(), v.fsIn(), dklmdx.c_str()); 591 dklmdx.c_str(), v.fsIn(), dklmdx.c_str());
602 fragBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s. z - %s.z * %s.y;", 592 fragBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s. z - %s.z * %s.y;",
603 dfdy.c_str(), v.fsIn(), v.fsIn(), dklmdy.c_ str(), v.fsIn(), 593 dfdy.c_str(), v.fsIn(), v.fsIn(), dklmdy.c_ str(), v.fsIn(),
604 dklmdy.c_str(), v.fsIn(), dklmdy.c_str()); 594 dklmdy.c_str(), v.fsIn(), dklmdy.c_str());
605 fragBuilder->codeAppendf("%s = vec2(%s, %s);", gF.c_str(), dfdx.c_st r(), dfdy.c_str()); 595 fragBuilder->codeAppendf("%s = vec2(%s, %s);", gF.c_str(), dfdx.c_st r(), dfdy.c_str());
606 fragBuilder->codeAppendf("%s = sqrt(dot(%s, %s));", 596 fragBuilder->codeAppendf("%s = sqrt(dot(%s, %s));",
607 gFM.c_str(), gF.c_str(), gF.c_str()); 597 gFM.c_str(), gF.c_str(), gF.c_str());
608 fragBuilder->codeAppendf("%s = %s.x * %s.x * %s.x - %s.y * %s.z;", 598 fragBuilder->codeAppendf("%s = %s.x * %s.x * %s.x - %s.y * %s.z;",
609 func.c_str(), v.fsIn(), v.fsIn(), 599 func.c_str(), v.fsIn(), v.fsIn(),
610 v.fsIn(), v.fsIn(), v.fsIn()); 600 v.fsIn(), v.fsIn(), v.fsIn());
611 fragBuilder->codeAppendf("%s = abs(%s);", func.c_str(), func.c_str() ); 601 fragBuilder->codeAppendf("%s = abs(%s);", func.c_str(), func.c_str() );
612 fragBuilder->codeAppendf("%s = %s / %s;", 602 fragBuilder->codeAppendf("%s = %s / %s;",
613 edgeAlpha.c_str(), func.c_str(), gFM.c_str( )); 603 edgeAlpha.c_str(), func.c_str(), gFM.c_str( ));
614 fragBuilder->codeAppendf("%s = max(1.0 - %s, 0.0);", 604 fragBuilder->codeAppendf("%s = max(1.0 - %s, 0.0);",
615 edgeAlpha.c_str(), edgeAlpha.c_str()); 605 edgeAlpha.c_str(), edgeAlpha.c_str());
616 // Add line below for smooth cubic ramp 606 // Add line below for smooth cubic ramp
617 // fragBuilder->codeAppendf("%s = %s * %s * (3.0 - 2.0 * %s);", 607 // fragBuilder->codeAppendf("%s = %s * %s * (3.0 - 2.0 * %s);",
618 // edgeAlpha.c_str(), edgeAlpha.c_str(), edge Alpha.c_str(), 608 // edgeAlpha.c_str(), edgeAlpha.c_str(), edge Alpha.c_str(),
619 // edgeAlpha.c_str()); 609 // edgeAlpha.c_str());
620 break; 610 break;
621 } 611 }
622 case kFillAA_GrProcessorEdgeType: { 612 case kFillAA_GrProcessorEdgeType: {
623 SkAssertResult(fragBuilder->enableFeature(
624 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e));
625 fragBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), v.fsI n()); 613 fragBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), v.fsI n());
626 fragBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), v.fsI n()); 614 fragBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), v.fsI n());
627 fragBuilder->codeAppendf("%s =" 615 fragBuilder->codeAppendf("%s ="
628 "3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - % s.z * %s.y;", 616 "3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - % s.z * %s.y;",
629 dfdx.c_str(), v.fsIn(), v.fsIn(), dklmdx.c_ str(), v.fsIn(), 617 dfdx.c_str(), v.fsIn(), v.fsIn(), dklmdx.c_ str(), v.fsIn(),
630 dklmdx.c_str(), v.fsIn(), dklmdx.c_str()); 618 dklmdx.c_str(), v.fsIn(), dklmdx.c_str());
631 fragBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s. z - %s.z * %s.y;", 619 fragBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s. z - %s.z * %s.y;",
632 dfdy.c_str(), v.fsIn(), v.fsIn(), dklmdy.c_ str(), v.fsIn(), 620 dfdy.c_str(), v.fsIn(), v.fsIn(), dklmdy.c_ str(), v.fsIn(),
633 dklmdy.c_str(), v.fsIn(), dklmdy.c_str()); 621 dklmdy.c_str(), v.fsIn(), dklmdy.c_str());
634 fragBuilder->codeAppendf("%s = vec2(%s, %s);", gF.c_str(), dfdx.c_st r(), dfdy.c_str()); 622 fragBuilder->codeAppendf("%s = vec2(%s, %s);", gF.c_str(), dfdx.c_st r(), dfdy.c_str());
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 sk_sp<GrGeometryProcessor> gp; 691 sk_sp<GrGeometryProcessor> gp;
704 do { 692 do {
705 GrPrimitiveEdgeType edgeType = 693 GrPrimitiveEdgeType edgeType =
706 static_cast<GrPrimitiveEdgeType>( 694 static_cast<GrPrimitiveEdgeType>(
707 d->fRandom->nextULessThan(kGrProcessorEdgeTypeCnt)); 695 d->fRandom->nextULessThan(kGrProcessorEdgeTypeCnt));
708 gp = GrCubicEffect::Make(GrRandomColor(d->fRandom), 696 gp = GrCubicEffect::Make(GrRandomColor(d->fRandom),
709 GrTest::TestMatrix(d->fRandom), edgeType, *d->f Caps); 697 GrTest::TestMatrix(d->fRandom), edgeType, *d->f Caps);
710 } while (nullptr == gp); 698 } while (nullptr == gp);
711 return gp; 699 return gp;
712 } 700 }
OLDNEW
« no previous file with comments | « src/gpu/batches/GrPLSPathRenderer.cpp ('k') | src/gpu/effects/GrDistanceFieldGeoProc.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698