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

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

Issue 519473003: Use highp for gpu bezier effects (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: gm ignore Created 6 years, 3 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 | « expectations/gm/ignored-tests.txt ('k') | src/gpu/gl/builders/GrGLShaderBuilder.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 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 "gl/builders/GrGLProgramBuilder.h" 8 #include "gl/builders/GrGLProgramBuilder.h"
9 #include "GrBezierEffect.h" 9 #include "GrBezierEffect.h"
10 10
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 const TransformedCoordsArray&, 50 const TransformedCoordsArray&,
51 const TextureSamplerArray& samplers) { 51 const TextureSamplerArray& samplers) {
52 const char *vsName, *fsName; 52 const char *vsName, *fsName;
53 53
54 builder->addVarying(kVec4f_GrSLType, "ConicCoeffs", 54 builder->addVarying(kVec4f_GrSLType, "ConicCoeffs",
55 &vsName, &fsName); 55 &vsName, &fsName);
56 56
57 GrGLVertexShaderBuilder* vsBuilder = builder->getVertexShaderBuilder(); 57 GrGLVertexShaderBuilder* vsBuilder = builder->getVertexShaderBuilder();
58 const SkString* attr0Name = 58 const SkString* attr0Name =
59 vsBuilder->getEffectAttributeName(drawEffect.getVertexAttribIndices()[0] ); 59 vsBuilder->getEffectAttributeName(drawEffect.getVertexAttribIndices()[0] );
60 vsBuilder->codeAppendf("\t%s = %s;\n", vsName, attr0Name->c_str()); 60 vsBuilder->codeAppendf("%s = %s;", vsName, attr0Name->c_str());
61 61
62 GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder(); 62 GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder();
63 fsBuilder->codeAppend("\t\tfloat edgeAlpha;\n"); 63
64 GrGLShaderVar edgeAlpha("edgeAlpha", kFloat_GrSLType, 0, GrGLShaderVar::kHig h_Precision);
65 GrGLShaderVar dklmdx("dklmdx", kVec3f_GrSLType, 0, GrGLShaderVar::kHigh_Prec ision);
66 GrGLShaderVar dklmdy("dklmdy", kVec3f_GrSLType, 0, GrGLShaderVar::kHigh_Prec ision);
67 GrGLShaderVar dfdx("dfdx", kFloat_GrSLType, 0, GrGLShaderVar::kHigh_Precisio n);
68 GrGLShaderVar dfdy("dfdy", kFloat_GrSLType, 0, GrGLShaderVar::kHigh_Precisio n);
69 GrGLShaderVar gF("gF", kVec2f_GrSLType, 0, GrGLShaderVar::kHigh_Precision);
70 GrGLShaderVar gFM("gFM", kFloat_GrSLType, 0, GrGLShaderVar::kHigh_Precision) ;
71 GrGLShaderVar func("func", kFloat_GrSLType, 0, GrGLShaderVar::kHigh_Precisio n);
72
73 fsBuilder->declAppend(edgeAlpha);
74 fsBuilder->declAppend(dklmdx);
75 fsBuilder->declAppend(dklmdy);
76 fsBuilder->declAppend(dfdx);
77 fsBuilder->declAppend(dfdy);
78 fsBuilder->declAppend(gF);
79 fsBuilder->declAppend(gFM);
80 fsBuilder->declAppend(func);
64 81
65 switch (fEdgeType) { 82 switch (fEdgeType) {
66 case kHairlineAA_GrEffectEdgeType: { 83 case kHairlineAA_GrEffectEdgeType: {
67 SkAssertResult(fsBuilder->enableFeature( 84 SkAssertResult(fsBuilder->enableFeature(
68 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 85 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) );
69 fsBuilder->codeAppendf("\t\tvec3 dklmdx = dFdx(%s.xyz);\n", fsName); 86 fsBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), fsName) ;
70 fsBuilder->codeAppendf("\t\tvec3 dklmdy = dFdy(%s.xyz);\n", fsName); 87 fsBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), fsName) ;
71 fsBuilder->codeAppendf("\t\tfloat dfdx =\n" 88 fsBuilder->codeAppendf("%s = 2.0 * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;",
72 "\t\t\t2.0*%s.x*dklmdx.x - %s.y*dklmdx.z - %s .z*dklmdx.y;\n", 89 dfdx.c_str(), fsName, dklmdx.c_str(), fsName, dklmdx.c_str(),
73 fsName, fsName, fsName); 90 fsName, dklmdx.c_str());
74 fsBuilder->codeAppendf("\t\tfloat dfdy =\n" 91 fsBuilder->codeAppendf("%s = 2.0 * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;",
75 "\t\t\t2.0*%s.x*dklmdy.x - %s.y*dklmdy.z - %s .z*dklmdy.y;\n", 92 dfdy.c_str(), fsName, dklmdy.c_str(), fsName, dklmdy.c_str(),
76 fsName, fsName, fsName); 93 fsName, dklmdy.c_str());
77 fsBuilder->codeAppend("\t\tvec2 gF = vec2(dfdx, dfdy);\n"); 94 fsBuilder->codeAppendf("%s = vec2(%s, %s);",
78 fsBuilder->codeAppend("\t\tfloat gFM = sqrt(dot(gF, gF));\n"); 95 gF.c_str(), dfdx.c_str(), dfdy.c_str());
79 fsBuilder->codeAppendf("\t\tfloat func = %s.x*%s.x - %s.y*%s.z;\n", fsName, fsName, 96 fsBuilder->codeAppendf("%s = sqrt(dot(%s, %s));",
80 fsName, fsName); 97 gFM.c_str(), gF.c_str(), gF.c_str());
81 fsBuilder->codeAppend("\t\tfunc = abs(func);\n"); 98 fsBuilder->codeAppendf("%s = %s.x * %s.x - %s.y * %s.z;",
82 fsBuilder->codeAppend("\t\tedgeAlpha = func / gFM;\n"); 99 func.c_str(), fsName, fsName, fsName, fsName) ;
83 fsBuilder->codeAppend("\t\tedgeAlpha = max(1.0 - edgeAlpha, 0.0);\n" ); 100 fsBuilder->codeAppendf("%s = abs(%s);", func.c_str(), func.c_str());
101 fsBuilder->codeAppendf("%s = %s / %s;",
102 edgeAlpha.c_str(), func.c_str(), gFM.c_str()) ;
103 fsBuilder->codeAppendf("%s = max(1.0 - %s, 0.0);",
104 edgeAlpha.c_str(), edgeAlpha.c_str());
84 // Add line below for smooth cubic ramp 105 // Add line below for smooth cubic ramp
85 // fsBuilder->codeAppend("\t\tedgeAlpha = edgeAlpha*edgeAlpha*(3.0-2 .0*edgeAlpha);\n"); 106 // fsBuilder->codeAppendf("%s = %s * %s * (3.0 - 2.0 * %s);",
107 // edgeAlpha.c_str(), edgeAlpha.c_str(), edge Alpha.c_str(),
108 // edgeAlpha.c_str());
86 break; 109 break;
87 } 110 }
88 case kFillAA_GrEffectEdgeType: { 111 case kFillAA_GrEffectEdgeType: {
89 SkAssertResult(fsBuilder->enableFeature( 112 SkAssertResult(fsBuilder->enableFeature(
90 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 113 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) );
91 fsBuilder->codeAppendf("\t\tvec3 dklmdx = dFdx(%s.xyz);\n", fsName); 114 fsBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), fsName) ;
92 fsBuilder->codeAppendf("\t\tvec3 dklmdy = dFdy(%s.xyz);\n", fsName); 115 fsBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), fsName) ;
93 fsBuilder->codeAppendf("\t\tfloat dfdx =\n" 116 fsBuilder->codeAppendf("%s = 2.0 * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;",
94 "\t\t\t2.0*%s.x*dklmdx.x - %s.y*dklmdx.z - %s .z*dklmdx.y;\n", 117 dfdx.c_str(), fsName, dklmdx.c_str(), fsName, dklmdx.c_str(),
95 fsName, fsName, fsName); 118 fsName, dklmdx.c_str());
96 fsBuilder->codeAppendf("\t\tfloat dfdy =\n" 119 fsBuilder->codeAppendf("%s = 2.0 * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;",
97 "\t\t\t2.0*%s.x*dklmdy.x - %s.y*dklmdy.z - %s .z*dklmdy.y;\n", 120 dfdy.c_str(), fsName, dklmdy.c_str(), fsName, dklmdy.c_str(),
98 fsName, fsName, fsName); 121 fsName, dklmdy.c_str());
99 fsBuilder->codeAppend("\t\tvec2 gF = vec2(dfdx, dfdy);\n"); 122 fsBuilder->codeAppendf("%s = vec2(%s, %s);",
100 fsBuilder->codeAppend("\t\tfloat gFM = sqrt(dot(gF, gF));\n"); 123 gF.c_str(), dfdx.c_str(), dfdy.c_str());
101 fsBuilder->codeAppendf("\t\tfloat func = %s.x*%s.x - %s.y*%s.z;\n", fsName, fsName, 124 fsBuilder->codeAppendf("%s = sqrt(dot(%s, %s));",
102 fsName, fsName); 125 gFM.c_str(), gF.c_str(), gF.c_str());
103 fsBuilder->codeAppend("\t\tedgeAlpha = func / gFM;\n"); 126 fsBuilder->codeAppendf("%s = %s.x * %s.x - %s.y * %s.z;",
104 fsBuilder->codeAppend("\t\tedgeAlpha = clamp(1.0 - edgeAlpha, 0.0, 1 .0);\n"); 127 func.c_str(), fsName, fsName, fsName, fsName) ;
128 fsBuilder->codeAppendf("%s = %s / %s;",
129 edgeAlpha.c_str(), func.c_str(), gFM.c_str()) ;
130 fsBuilder->codeAppendf("%s = clamp(1.0 - %s, 0.0, 1.0);",
131 edgeAlpha.c_str(), edgeAlpha.c_str());
105 // Add line below for smooth cubic ramp 132 // Add line below for smooth cubic ramp
106 // fsBuilder->codeAppend("\t\tedgeAlpha = edgeAlpha*edgeAlpha*(3.0-2 .0*edgeAlpha);\n"); 133 // fsBuilder->codeAppendf("%s = %s * %s * (3.0 - 2.0 * %s);",
134 // edgeAlpha.c_str(), edgeAlpha.c_str(), edge Alpha.c_str(),
135 // edgeAlpha.c_str());
107 break; 136 break;
108 } 137 }
109 case kFillBW_GrEffectEdgeType: { 138 case kFillBW_GrEffectEdgeType: {
110 fsBuilder->codeAppendf("\t\tedgeAlpha = %s.x*%s.x - %s.y*%s.z;\n", f sName, fsName, 139 fsBuilder->codeAppendf("%s = %s.x * %s.x - %s.y * %s.z;",
111 fsName, fsName); 140 edgeAlpha.c_str(), fsName, fsName, fsName, fs Name);
112 fsBuilder->codeAppend("\t\tedgeAlpha = float(edgeAlpha < 0.0);\n"); 141 fsBuilder->codeAppendf("%s = float(%s < 0.0);",
142 edgeAlpha.c_str(), edgeAlpha.c_str());
113 break; 143 break;
114 } 144 }
115 default: 145 default:
116 SkFAIL("Shouldn't get here"); 146 SkFAIL("Shouldn't get here");
117 } 147 }
118 148
119 fsBuilder->codeAppendf("\t%s = %s;\n", outputColor, 149 fsBuilder->codeAppendf("%s = %s;", outputColor,
120 (GrGLSLExpr4(inputColor) * GrGLSLExpr1("edgeAlpha")). c_str()); 150 (GrGLSLExpr4(inputColor) * GrGLSLExpr1(edgeAlpha.c_st r())).c_str());
121 } 151 }
122 152
123 void GrGLConicEffect::GenKey(const GrDrawEffect& drawEffect, const GrGLCaps&, 153 void GrGLConicEffect::GenKey(const GrDrawEffect& drawEffect, const GrGLCaps&,
124 GrEffectKeyBuilder* b) { 154 GrEffectKeyBuilder* b) {
125 const GrConicEffect& ce = drawEffect.castEffect<GrConicEffect>(); 155 const GrConicEffect& ce = drawEffect.castEffect<GrConicEffect>();
126 uint32_t key = ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2; 156 uint32_t key = ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2;
127 b->add32(key); 157 b->add32(key);
128 } 158 }
129 159
130 ////////////////////////////////////////////////////////////////////////////// 160 //////////////////////////////////////////////////////////////////////////////
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 const char* outputColor, 231 const char* outputColor,
202 const char* inputColor, 232 const char* inputColor,
203 const TransformedCoordsArray&, 233 const TransformedCoordsArray&,
204 const TextureSamplerArray& samplers) { 234 const TextureSamplerArray& samplers) {
205 const char *vsName, *fsName; 235 const char *vsName, *fsName;
206 builder->addVarying(kVec4f_GrSLType, "HairQuadEdge", &vsName, &fsName); 236 builder->addVarying(kVec4f_GrSLType, "HairQuadEdge", &vsName, &fsName);
207 237
208 GrGLVertexShaderBuilder* vsBuilder = builder->getVertexShaderBuilder(); 238 GrGLVertexShaderBuilder* vsBuilder = builder->getVertexShaderBuilder();
209 const SkString* attrName = 239 const SkString* attrName =
210 vsBuilder->getEffectAttributeName(drawEffect.getVertexAttribIndices()[0] ); 240 vsBuilder->getEffectAttributeName(drawEffect.getVertexAttribIndices()[0] );
211 vsBuilder->codeAppendf("\t%s = %s;\n", vsName, attrName->c_str()); 241 vsBuilder->codeAppendf("%s = %s;", vsName, attrName->c_str());
212 242
213 GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder(); 243 GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder();
214 fsBuilder->codeAppendf("\t\tfloat edgeAlpha;\n"); 244 fsBuilder->codeAppendf("float edgeAlpha;");
215 245
216 switch (fEdgeType) { 246 switch (fEdgeType) {
217 case kHairlineAA_GrEffectEdgeType: { 247 case kHairlineAA_GrEffectEdgeType: {
218 SkAssertResult(fsBuilder->enableFeature( 248 SkAssertResult(fsBuilder->enableFeature(
219 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 249 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) );
220 fsBuilder->codeAppendf("\t\tvec2 duvdx = dFdx(%s.xy);\n", fsName); 250 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s.xy);", fsName);
221 fsBuilder->codeAppendf("\t\tvec2 duvdy = dFdy(%s.xy);\n", fsName); 251 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s.xy);", fsName);
222 fsBuilder->codeAppendf("\t\tvec2 gF = vec2(2.0*%s.x*duvdx.x - duvdx. y,\n" 252 fsBuilder->codeAppendf("vec2 gF = vec2(2.0 * %s.x * duvdx.x - duvdx. y,"
223 "\t\t 2.0*%s.x*duvdy.x - duvdy. y);\n", 253 " 2.0 * %s.x * duvdy.x - duvdy. y);",
224 fsName, fsName); 254 fsName, fsName);
225 fsBuilder->codeAppendf("\t\tedgeAlpha = (%s.x*%s.x - %s.y);\n", fsNa me, fsName, 255 fsBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);", fsName, fsName, fsName);
226 fsName); 256 fsBuilder->codeAppend("edgeAlpha = sqrt(edgeAlpha * edgeAlpha / dot( gF, gF));");
227 fsBuilder->codeAppend("\t\tedgeAlpha = sqrt(edgeAlpha*edgeAlpha / do t(gF, gF));\n"); 257 fsBuilder->codeAppend("edgeAlpha = max(1.0 - edgeAlpha, 0.0);");
228 fsBuilder->codeAppend("\t\tedgeAlpha = max(1.0 - edgeAlpha, 0.0);\n" );
229 // Add line below for smooth cubic ramp 258 // Add line below for smooth cubic ramp
230 // fsBuilder->codeAppend("\t\tedgeAlpha = edgeAlpha*edgeAlpha*(3.0-2 .0*edgeAlpha);\n"); 259 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);");
231 break; 260 break;
232 } 261 }
233 case kFillAA_GrEffectEdgeType: { 262 case kFillAA_GrEffectEdgeType: {
234 SkAssertResult(fsBuilder->enableFeature( 263 SkAssertResult(fsBuilder->enableFeature(
235 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 264 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) );
236 fsBuilder->codeAppendf("\t\tvec2 duvdx = dFdx(%s.xy);\n", fsName); 265 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s.xy);", fsName);
237 fsBuilder->codeAppendf("\t\tvec2 duvdy = dFdy(%s.xy);\n", fsName); 266 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s.xy);", fsName);
238 fsBuilder->codeAppendf("\t\tvec2 gF = vec2(2.0*%s.x*duvdx.x - duvdx. y,\n" 267 fsBuilder->codeAppendf("vec2 gF = vec2(2.0 * %s.x * duvdx.x - duvdx. y,"
239 "\t\t 2.0*%s.x*duvdy.x - duvdy. y);\n", 268 " 2.0 * %s.x * duvdy.x - duvdy. y);",
240 fsName, fsName); 269 fsName, fsName);
241 fsBuilder->codeAppendf("\t\tedgeAlpha = (%s.x*%s.x - %s.y);\n", fsNa me, fsName, 270 fsBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);", fsName, fsName, fsName);
242 fsName); 271 fsBuilder->codeAppend("edgeAlpha = edgeAlpha / sqrt(dot(gF, gF));");
243 fsBuilder->codeAppend("\t\tedgeAlpha = edgeAlpha / sqrt(dot(gF, gF)) ;\n"); 272 fsBuilder->codeAppend("edgeAlpha = clamp(1.0 - edgeAlpha, 0.0, 1.0); ");
244 fsBuilder->codeAppend("\t\tedgeAlpha = clamp(1.0 - edgeAlpha, 0.0, 1 .0);\n");
245 // Add line below for smooth cubic ramp 273 // Add line below for smooth cubic ramp
246 // fsBuilder->codeAppend("\t\tedgeAlpha = edgeAlpha*edgeAlpha*(3.0-2 .0*edgeAlpha);\n"); 274 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);");
247 break; 275 break;
248 } 276 }
249 case kFillBW_GrEffectEdgeType: { 277 case kFillBW_GrEffectEdgeType: {
250 fsBuilder->codeAppendf("\t\tedgeAlpha = (%s.x*%s.x - %s.y);\n", fsNa me, fsName, 278 fsBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);", fsName, fsName, fsName);
251 fsName); 279 fsBuilder->codeAppend("edgeAlpha = float(edgeAlpha < 0.0);");
252 fsBuilder->codeAppend("\t\tedgeAlpha = float(edgeAlpha < 0.0);\n");
253 break; 280 break;
254 } 281 }
255 default: 282 default:
256 SkFAIL("Shouldn't get here"); 283 SkFAIL("Shouldn't get here");
257 } 284 }
258 285
259 fsBuilder->codeAppendf("\t%s = %s;\n", outputColor, 286 fsBuilder->codeAppendf("%s = %s;", outputColor,
260 (GrGLSLExpr4(inputColor) * GrGLSLExpr1("edgeAlpha")). c_str()); 287 (GrGLSLExpr4(inputColor) * GrGLSLExpr1("edgeAlpha")). c_str());
261 } 288 }
262 289
263 void GrGLQuadEffect::GenKey(const GrDrawEffect& drawEffect, const GrGLCaps&, 290 void GrGLQuadEffect::GenKey(const GrDrawEffect& drawEffect, const GrGLCaps&,
264 GrEffectKeyBuilder* b) { 291 GrEffectKeyBuilder* b) {
265 const GrQuadEffect& ce = drawEffect.castEffect<GrQuadEffect>(); 292 const GrQuadEffect& ce = drawEffect.castEffect<GrQuadEffect>();
266 uint32_t key = ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2; 293 uint32_t key = ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2;
267 b->add32(key); 294 b->add32(key);
268 } 295 }
269 296
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 const TransformedCoordsArray&, 370 const TransformedCoordsArray&,
344 const TextureSamplerArray& samplers) { 371 const TextureSamplerArray& samplers) {
345 const char *vsName, *fsName; 372 const char *vsName, *fsName;
346 373
347 builder->addVarying(kVec4f_GrSLType, "CubicCoeffs", 374 builder->addVarying(kVec4f_GrSLType, "CubicCoeffs",
348 &vsName, &fsName); 375 &vsName, &fsName);
349 376
350 GrGLVertexShaderBuilder* vsBuilder = builder->getVertexShaderBuilder(); 377 GrGLVertexShaderBuilder* vsBuilder = builder->getVertexShaderBuilder();
351 const SkString* attr0Name = 378 const SkString* attr0Name =
352 vsBuilder->getEffectAttributeName(drawEffect.getVertexAttribIndices()[0] ); 379 vsBuilder->getEffectAttributeName(drawEffect.getVertexAttribIndices()[0] );
353 vsBuilder->codeAppendf("\t%s = %s;\n", vsName, attr0Name->c_str()); 380 vsBuilder->codeAppendf("%s = %s;", vsName, attr0Name->c_str());
354 381
355 GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder(); 382 GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder();
356 fsBuilder->codeAppend("\t\tfloat edgeAlpha;\n"); 383 fsBuilder->codeAppend("float edgeAlpha;");
357 384
358 switch (fEdgeType) { 385 switch (fEdgeType) {
359 case kHairlineAA_GrEffectEdgeType: { 386 case kHairlineAA_GrEffectEdgeType: {
360 SkAssertResult(fsBuilder->enableFeature( 387 SkAssertResult(fsBuilder->enableFeature(
361 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 388 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) );
362 fsBuilder->codeAppendf("\t\tvec3 dklmdx = dFdx(%s.xyz);\n", fsName); 389 fsBuilder->codeAppendf("vec3 dklmdx = dFdx(%s.xyz);", fsName);
363 fsBuilder->codeAppendf("\t\tvec3 dklmdy = dFdy(%s.xyz);\n", fsName); 390 fsBuilder->codeAppendf("vec3 dklmdy = dFdy(%s.xyz);", fsName);
364 fsBuilder->codeAppendf("\t\tfloat dfdx =\n" 391 fsBuilder->codeAppendf("float dfdx ="
365 "\t\t3.0*%s.x*%s.x*dklmdx.x - %s.y*dklmdx.z - %s.z*dklmdx.y;\n", 392 "3.0*%s.x*%s.x * dklmdx.x - %s.y * dklmdx.z - %s.z * dklmdx.y;",
366 fsName, fsName, fsName, fsName); 393 fsName, fsName, fsName, fsName);
367 fsBuilder->codeAppendf("\t\tfloat dfdy =\n" 394 fsBuilder->codeAppendf("float dfdy ="
368 "\t\t3.0*%s.x*%s.x*dklmdy.x - %s.y*dklmdy.z - %s.z*dklmdy.y;\n", 395 "3.0*%s.x*%s.x * dklmdy.x - %s.y * dklmdy.z - %s.z * dklmdy.y;",
369 fsName, fsName, fsName, fsName); 396 fsName, fsName, fsName, fsName);
370 fsBuilder->codeAppend("\t\tvec2 gF = vec2(dfdx, dfdy);\n"); 397 fsBuilder->codeAppend("vec2 gF = vec2(dfdx, dfdy);");
371 fsBuilder->codeAppend("\t\tfloat gFM = sqrt(dot(gF, gF));\n"); 398 fsBuilder->codeAppend("float gFM = sqrt(dot(gF, gF));");
372 fsBuilder->codeAppendf("\t\tfloat func = %s.x*%s.x*%s.x - %s.y*%s.z; \n", 399 fsBuilder->codeAppendf("float func = %s.x * %s.x * %s.x - %s.y * %s. z;",
373 fsName, fsName, fsName, fsName, fsName); 400 fsName, fsName, fsName, fsName, fsName);
374 fsBuilder->codeAppend("\t\tfunc = abs(func);\n"); 401 fsBuilder->codeAppend("func = abs(func);");
375 fsBuilder->codeAppend("\t\tedgeAlpha = func / gFM;\n"); 402 fsBuilder->codeAppend("edgeAlpha = func / gFM;");
376 fsBuilder->codeAppend("\t\tedgeAlpha = max(1.0 - edgeAlpha, 0.0);\n" ); 403 fsBuilder->codeAppend("edgeAlpha = max(1.0 - edgeAlpha, 0.0);");
377 // Add line below for smooth cubic ramp 404 // Add line below for smooth cubic ramp
378 // fsBuilder->codeAppend("\t\tedgeAlpha = edgeAlpha*edgeAlpha*(3.0-2 .0*edgeAlpha);\n"); 405 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);");
379 break; 406 break;
380 } 407 }
381 case kFillAA_GrEffectEdgeType: { 408 case kFillAA_GrEffectEdgeType: {
382 SkAssertResult(fsBuilder->enableFeature( 409 SkAssertResult(fsBuilder->enableFeature(
383 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 410 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) );
384 fsBuilder->codeAppendf("\t\tvec3 dklmdx = dFdx(%s.xyz);\n", fsName); 411 fsBuilder->codeAppendf("vec3 dklmdx = dFdx(%s.xyz);", fsName);
385 fsBuilder->codeAppendf("\t\tvec3 dklmdy = dFdy(%s.xyz);\n", fsName); 412 fsBuilder->codeAppendf("vec3 dklmdy = dFdy(%s.xyz);", fsName);
386 fsBuilder->codeAppendf("\t\tfloat dfdx =\n" 413 fsBuilder->codeAppendf("float dfdx ="
387 "\t\t3.0*%s.x*%s.x*dklmdx.x - %s.y*dklmdx.z - %s.z*dklmdx.y;\n", 414 "3.0*%s.x*%s.x * dklmdx.x - %s.y * dklmdx.z - %s.z * dklmdx.y;",
388 fsName, fsName, fsName, fsName); 415 fsName, fsName, fsName, fsName);
389 fsBuilder->codeAppendf("\t\tfloat dfdy =\n" 416 fsBuilder->codeAppendf("float dfdy ="
390 "\t\t3.0*%s.x*%s.x*dklmdy.x - %s.y*dklmdy.z - %s.z*dklmdy.y;\n", 417 "3.0*%s.x*%s.x * dklmdy.x - %s.y * dklmdy.z - %s.z * dklmdy.y;",
391 fsName, fsName, fsName, fsName); 418 fsName, fsName, fsName, fsName);
392 fsBuilder->codeAppend("\t\tvec2 gF = vec2(dfdx, dfdy);\n"); 419 fsBuilder->codeAppend("vec2 gF = vec2(dfdx, dfdy);");
393 fsBuilder->codeAppend("\t\tfloat gFM = sqrt(dot(gF, gF));\n"); 420 fsBuilder->codeAppend("float gFM = sqrt(dot(gF, gF));");
394 fsBuilder->codeAppendf("\t\tfloat func = %s.x*%s.x*%s.x - %s.y*%s.z; \n", 421 fsBuilder->codeAppendf("float func = %s.x * %s.x * %s.x - %s.y * %s. z;",
395 fsName, fsName, fsName, fsName, fsName); 422 fsName, fsName, fsName, fsName, fsName);
396 fsBuilder->codeAppend("\t\tedgeAlpha = func / gFM;\n"); 423 fsBuilder->codeAppend("edgeAlpha = func / gFM;");
397 fsBuilder->codeAppend("\t\tedgeAlpha = clamp(1.0 - edgeAlpha, 0.0, 1 .0);\n"); 424 fsBuilder->codeAppend("edgeAlpha = clamp(1.0 - edgeAlpha, 0.0, 1.0); ");
398 // Add line below for smooth cubic ramp 425 // Add line below for smooth cubic ramp
399 // fsBuilder->codeAppend("\t\tedgeAlpha = edgeAlpha*edgeAlpha*(3.0-2 .0*edgeAlpha);\n"); 426 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);");
400 break; 427 break;
401 } 428 }
402 case kFillBW_GrEffectEdgeType: { 429 case kFillBW_GrEffectEdgeType: {
403 fsBuilder->codeAppendf("\t\tedgeAlpha = %s.x*%s.x*%s.x - %s.y*%s.z;\ n", 430 fsBuilder->codeAppendf("edgeAlpha = %s.x * %s.x * %s.x - %s.y * %s.z ;",
404 fsName, fsName, fsName, fsName, fsName); 431 fsName, fsName, fsName, fsName, fsName);
405 fsBuilder->codeAppend("\t\tedgeAlpha = float(edgeAlpha < 0.0);\n"); 432 fsBuilder->codeAppend("edgeAlpha = float(edgeAlpha < 0.0);");
406 break; 433 break;
407 } 434 }
408 default: 435 default:
409 SkFAIL("Shouldn't get here"); 436 SkFAIL("Shouldn't get here");
410 } 437 }
411 438
412 fsBuilder->codeAppendf("\t%s = %s;\n", outputColor, 439 fsBuilder->codeAppendf("%s = %s;", outputColor,
413 (GrGLSLExpr4(inputColor) * GrGLSLExpr1("edgeAlpha")). c_str()); 440 (GrGLSLExpr4(inputColor) * GrGLSLExpr1("edgeAlpha")). c_str());
414 } 441 }
415 442
416 void GrGLCubicEffect::GenKey(const GrDrawEffect& drawEffect, const GrGLCaps&, 443 void GrGLCubicEffect::GenKey(const GrDrawEffect& drawEffect, const GrGLCaps&,
417 GrEffectKeyBuilder* b) { 444 GrEffectKeyBuilder* b) {
418 const GrCubicEffect& ce = drawEffect.castEffect<GrCubicEffect>(); 445 const GrCubicEffect& ce = drawEffect.castEffect<GrCubicEffect>();
419 uint32_t key = ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2; 446 uint32_t key = ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2;
420 b->add32(key); 447 b->add32(key);
421 } 448 }
422 449
(...skipping 24 matching lines...) Expand all
447 const GrDrawTargetCaps& caps, 474 const GrDrawTargetCaps& caps,
448 GrTexture*[]) { 475 GrTexture*[]) {
449 GrEffect* effect; 476 GrEffect* effect;
450 do { 477 do {
451 GrEffectEdgeType edgeType = static_cast<GrEffectEdgeType>( 478 GrEffectEdgeType edgeType = static_cast<GrEffectEdgeType>(
452 random->nextULessThan(kGrEff ectEdgeTypeCnt)); 479 random->nextULessThan(kGrEff ectEdgeTypeCnt));
453 effect = GrCubicEffect::Create(edgeType, caps); 480 effect = GrCubicEffect::Create(edgeType, caps);
454 } while (NULL == effect); 481 } while (NULL == effect);
455 return effect; 482 return effect;
456 } 483 }
OLDNEW
« no previous file with comments | « expectations/gm/ignored-tests.txt ('k') | src/gpu/gl/builders/GrGLShaderBuilder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698