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

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

Issue 1490283004: Create GLSLUniformHandler class for gpu backend (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: clean up public api of uniformhandler Created 5 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
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/GrGLSLGeometryProcessor.h" 11 #include "glsl/GrGLSLGeometryProcessor.h"
11 #include "glsl/GrGLSLProgramBuilder.h"
12 #include "glsl/GrGLSLProgramDataManager.h" 12 #include "glsl/GrGLSLProgramDataManager.h"
13 #include "glsl/GrGLSLUniformHandler.h"
13 #include "glsl/GrGLSLUtil.h" 14 #include "glsl/GrGLSLUtil.h"
14 #include "glsl/GrGLSLVarying.h" 15 #include "glsl/GrGLSLVarying.h"
16 #include "glsl/GrGLSLVertexShaderBuilder.h"
15 17
16 class GrGLConicEffect : public GrGLSLGeometryProcessor { 18 class GrGLConicEffect : public GrGLSLGeometryProcessor {
17 public: 19 public:
18 GrGLConicEffect(const GrGeometryProcessor&); 20 GrGLConicEffect(const GrGeometryProcessor&);
19 21
20 void onEmitCode(EmitArgs&, GrGPArgs*) override; 22 void onEmitCode(EmitArgs&, GrGPArgs*) override;
21 23
22 static inline void GenKey(const GrGeometryProcessor&, 24 static inline void GenKey(const GrGeometryProcessor&,
23 const GrGLSLCaps&, 25 const GrGLSLCaps&,
24 GrProcessorKeyBuilder*); 26 GrProcessorKeyBuilder*);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 typedef GrGLSLGeometryProcessor INHERITED; 68 typedef GrGLSLGeometryProcessor INHERITED;
67 }; 69 };
68 70
69 GrGLConicEffect::GrGLConicEffect(const GrGeometryProcessor& processor) 71 GrGLConicEffect::GrGLConicEffect(const GrGeometryProcessor& processor)
70 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL), fCoverage Scale(0xff) { 72 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL), fCoverage Scale(0xff) {
71 const GrConicEffect& ce = processor.cast<GrConicEffect>(); 73 const GrConicEffect& ce = processor.cast<GrConicEffect>();
72 fEdgeType = ce.getEdgeType(); 74 fEdgeType = ce.getEdgeType();
73 } 75 }
74 76
75 void GrGLConicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { 77 void GrGLConicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) {
76 GrGLSLGPBuilder* pb = args.fPB;
77 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; 78 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder;
78 const GrConicEffect& gp = args.fGP.cast<GrConicEffect>(); 79 const GrConicEffect& gp = args.fGP.cast<GrConicEffect>();
79 GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler; 80 GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler;
81 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
80 82
81 // emit attributes 83 // emit attributes
82 varyingHandler->emitAttributes(gp); 84 varyingHandler->emitAttributes(gp);
83 85
84 GrGLSLVertToFrag v(kVec4f_GrSLType); 86 GrGLSLVertToFrag v(kVec4f_GrSLType);
85 varyingHandler->addVarying("ConicCoeffs", &v); 87 varyingHandler->addVarying("ConicCoeffs", &v);
86 vertBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inConicCoeffs()->fName); 88 vertBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inConicCoeffs()->fName);
87 89
88 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; 90 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder;
89 // Setup pass through color 91 // Setup pass through color
90 if (!gp.colorIgnored()) { 92 if (!gp.colorIgnored()) {
91 this->setupUniformColor(args.fPB, fragBuilder, args.fOutputColor, &fColo rUniform); 93 this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, &fColorUniform);
92 } 94 }
93 95
94 // Setup position 96 // Setup position
95 this->setupPosition(pb, 97 this->setupPosition(vertBuilder,
96 vertBuilder, 98 uniformHandler,
97 gpArgs, 99 gpArgs,
98 gp.inPosition()->fName, 100 gp.inPosition()->fName,
99 gp.viewMatrix(), 101 gp.viewMatrix(),
100 &fViewMatrixUniform); 102 &fViewMatrixUniform);
101 103
102 // emit transforms with position 104 // emit transforms with position
103 this->emitTransforms(pb, 105 this->emitTransforms(vertBuilder,
104 vertBuilder,
105 varyingHandler, 106 varyingHandler,
107 uniformHandler,
106 gpArgs->fPositionVar, 108 gpArgs->fPositionVar,
107 gp.inPosition()->fName, 109 gp.inPosition()->fName,
108 gp.localMatrix(), 110 gp.localMatrix(),
109 args.fTransformsIn, 111 args.fTransformsIn,
110 args.fTransformsOut); 112 args.fTransformsOut);
111 113
112 fragBuilder->codeAppend("float edgeAlpha;"); 114 fragBuilder->codeAppend("float edgeAlpha;");
113 115
114 switch (fEdgeType) { 116 switch (fEdgeType) {
115 case kHairlineAA_GrProcessorEdgeType: { 117 case kHairlineAA_GrProcessorEdgeType: {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 fragBuilder->codeAppend("edgeAlpha = float(edgeAlpha < 0.0);"); 163 fragBuilder->codeAppend("edgeAlpha = float(edgeAlpha < 0.0);");
162 break; 164 break;
163 } 165 }
164 default: 166 default:
165 SkFAIL("Shouldn't get here"); 167 SkFAIL("Shouldn't get here");
166 } 168 }
167 169
168 // TODO should we really be doing this? 170 // TODO should we really be doing this?
169 if (gp.coverageScale() != 0xff) { 171 if (gp.coverageScale() != 0xff) {
170 const char* coverageScale; 172 const char* coverageScale;
171 fCoverageScaleUniform = pb->addUniform(GrGLSLProgramBuilder::kFragment_V isibility, 173 fCoverageScaleUniform = uniformHandler->addUniform(
172 kFloat_GrSLType, 174 GrGLSLUniformHandler::k Fragment_Visibility,
173 kDefault_GrSLPrecision, 175 kFloat_GrSLType,
174 "Coverage", 176 kDefault_GrSLPrecision,
175 &coverageScale); 177 "Coverage",
178 &coverageScale);
176 fragBuilder->codeAppendf("%s = vec4(%s * edgeAlpha);", args.fOutputCover age, coverageScale); 179 fragBuilder->codeAppendf("%s = vec4(%s * edgeAlpha);", args.fOutputCover age, coverageScale);
177 } else { 180 } else {
178 fragBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage); 181 fragBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage);
179 } 182 }
180 } 183 }
181 184
182 void GrGLConicEffect::GenKey(const GrGeometryProcessor& gp, 185 void GrGLConicEffect::GenKey(const GrGeometryProcessor& gp,
183 const GrGLSLCaps&, 186 const GrGLSLCaps&,
184 GrProcessorKeyBuilder* b) { 187 GrProcessorKeyBuilder* b) {
185 const GrConicEffect& ce = gp.cast<GrConicEffect>(); 188 const GrConicEffect& ce = gp.cast<GrConicEffect>();
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 typedef GrGLSLGeometryProcessor INHERITED; 297 typedef GrGLSLGeometryProcessor INHERITED;
295 }; 298 };
296 299
297 GrGLQuadEffect::GrGLQuadEffect(const GrGeometryProcessor& processor) 300 GrGLQuadEffect::GrGLQuadEffect(const GrGeometryProcessor& processor)
298 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL), fCoverage Scale(0xff) { 301 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL), fCoverage Scale(0xff) {
299 const GrQuadEffect& ce = processor.cast<GrQuadEffect>(); 302 const GrQuadEffect& ce = processor.cast<GrQuadEffect>();
300 fEdgeType = ce.getEdgeType(); 303 fEdgeType = ce.getEdgeType();
301 } 304 }
302 305
303 void GrGLQuadEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { 306 void GrGLQuadEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) {
304 GrGLSLGPBuilder* pb = args.fPB;
305 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; 307 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder;
306 const GrQuadEffect& gp = args.fGP.cast<GrQuadEffect>(); 308 const GrQuadEffect& gp = args.fGP.cast<GrQuadEffect>();
307 GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler; 309 GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler;
310 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
308 311
309 // emit attributes 312 // emit attributes
310 varyingHandler->emitAttributes(gp); 313 varyingHandler->emitAttributes(gp);
311 314
312 GrGLSLVertToFrag v(kVec4f_GrSLType); 315 GrGLSLVertToFrag v(kVec4f_GrSLType);
313 varyingHandler->addVarying("HairQuadEdge", &v); 316 varyingHandler->addVarying("HairQuadEdge", &v);
314 vertBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inHairQuadEdge()->fName); 317 vertBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inHairQuadEdge()->fName);
315 318
316 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; 319 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder;
317 // Setup pass through color 320 // Setup pass through color
318 if (!gp.colorIgnored()) { 321 if (!gp.colorIgnored()) {
319 this->setupUniformColor(args.fPB, fragBuilder, args.fOutputColor, &fColo rUniform); 322 this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, &fColorUniform);
320 } 323 }
321 324
322 // Setup position 325 // Setup position
323 this->setupPosition(pb, 326 this->setupPosition(vertBuilder,
324 vertBuilder, 327 uniformHandler,
325 gpArgs, 328 gpArgs,
326 gp.inPosition()->fName, 329 gp.inPosition()->fName,
327 gp.viewMatrix(), 330 gp.viewMatrix(),
328 &fViewMatrixUniform); 331 &fViewMatrixUniform);
329 332
330 // emit transforms with position 333 // emit transforms with position
331 this->emitTransforms(pb, 334 this->emitTransforms(vertBuilder,
332 vertBuilder,
333 varyingHandler, 335 varyingHandler,
336 uniformHandler,
334 gpArgs->fPositionVar, 337 gpArgs->fPositionVar,
335 gp.inPosition()->fName, 338 gp.inPosition()->fName,
336 gp.localMatrix(), 339 gp.localMatrix(),
337 args.fTransformsIn, 340 args.fTransformsIn,
338 args.fTransformsOut); 341 args.fTransformsOut);
339 342
340 fragBuilder->codeAppendf("float edgeAlpha;"); 343 fragBuilder->codeAppendf("float edgeAlpha;");
341 344
342 switch (fEdgeType) { 345 switch (fEdgeType) {
343 case kHairlineAA_GrProcessorEdgeType: { 346 case kHairlineAA_GrProcessorEdgeType: {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 v.fsIn(), v.fsIn(), v.fsIn()); 380 v.fsIn(), v.fsIn(), v.fsIn());
378 fragBuilder->codeAppend("edgeAlpha = float(edgeAlpha < 0.0);"); 381 fragBuilder->codeAppend("edgeAlpha = float(edgeAlpha < 0.0);");
379 break; 382 break;
380 } 383 }
381 default: 384 default:
382 SkFAIL("Shouldn't get here"); 385 SkFAIL("Shouldn't get here");
383 } 386 }
384 387
385 if (0xff != gp.coverageScale()) { 388 if (0xff != gp.coverageScale()) {
386 const char* coverageScale; 389 const char* coverageScale;
387 fCoverageScaleUniform = pb->addUniform(GrGLSLProgramBuilder::kFragment_V isibility, 390 fCoverageScaleUniform = uniformHandler->addUniform(
388 kFloat_GrSLType, 391 GrGLSLUniformHandler::k Fragment_Visibility,
389 kDefault_GrSLPrecision, 392 kFloat_GrSLType,
390 "Coverage", 393 kDefault_GrSLPrecision,
391 &coverageScale); 394 "Coverage",
395 &coverageScale);
392 fragBuilder->codeAppendf("%s = vec4(%s * edgeAlpha);", args.fOutputCover age, coverageScale); 396 fragBuilder->codeAppendf("%s = vec4(%s * edgeAlpha);", args.fOutputCover age, coverageScale);
393 } else { 397 } else {
394 fragBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage); 398 fragBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage);
395 } 399 }
396 } 400 }
397 401
398 void GrGLQuadEffect::GenKey(const GrGeometryProcessor& gp, 402 void GrGLQuadEffect::GenKey(const GrGeometryProcessor& gp,
399 const GrGLSLCaps&, 403 const GrGLSLCaps&,
400 GrProcessorKeyBuilder* b) { 404 GrProcessorKeyBuilder* b) {
401 const GrQuadEffect& ce = gp.cast<GrQuadEffect>(); 405 const GrQuadEffect& ce = gp.cast<GrQuadEffect>();
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 GrGLCubicEffect::GrGLCubicEffect(const GrGeometryProcessor& processor) 504 GrGLCubicEffect::GrGLCubicEffect(const GrGeometryProcessor& processor)
501 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL) { 505 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL) {
502 const GrCubicEffect& ce = processor.cast<GrCubicEffect>(); 506 const GrCubicEffect& ce = processor.cast<GrCubicEffect>();
503 fEdgeType = ce.getEdgeType(); 507 fEdgeType = ce.getEdgeType();
504 } 508 }
505 509
506 void GrGLCubicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { 510 void GrGLCubicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) {
507 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; 511 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder;
508 const GrCubicEffect& gp = args.fGP.cast<GrCubicEffect>(); 512 const GrCubicEffect& gp = args.fGP.cast<GrCubicEffect>();
509 GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler; 513 GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler;
514 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
510 515
511 // emit attributes 516 // emit attributes
512 varyingHandler->emitAttributes(gp); 517 varyingHandler->emitAttributes(gp);
513 518
514 GrGLSLVertToFrag v(kVec4f_GrSLType); 519 GrGLSLVertToFrag v(kVec4f_GrSLType);
515 varyingHandler->addVarying("CubicCoeffs", &v, kHigh_GrSLPrecision); 520 varyingHandler->addVarying("CubicCoeffs", &v, kHigh_GrSLPrecision);
516 vertBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inCubicCoeffs()->fName); 521 vertBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inCubicCoeffs()->fName);
517 522
518 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; 523 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder;
519 // Setup pass through color 524 // Setup pass through color
520 if (!gp.colorIgnored()) { 525 if (!gp.colorIgnored()) {
521 this->setupUniformColor(args.fPB, fragBuilder, args.fOutputColor, &fColo rUniform); 526 this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, &fColorUniform);
522 } 527 }
523 528
524 // Setup position 529 // Setup position
525 this->setupPosition(args.fPB, 530 this->setupPosition(vertBuilder,
526 vertBuilder, 531 uniformHandler,
527 gpArgs, 532 gpArgs,
528 gp.inPosition()->fName, 533 gp.inPosition()->fName,
529 gp.viewMatrix(), 534 gp.viewMatrix(),
530 &fViewMatrixUniform); 535 &fViewMatrixUniform);
531 536
532 // emit transforms with position 537 // emit transforms with position
533 this->emitTransforms(args.fPB, 538 this->emitTransforms(vertBuilder,
534 vertBuilder,
535 varyingHandler, 539 varyingHandler,
540 uniformHandler,
536 gpArgs->fPositionVar, 541 gpArgs->fPositionVar,
537 gp.inPosition()->fName, 542 gp.inPosition()->fName,
538 args.fTransformsIn, 543 args.fTransformsIn,
539 args.fTransformsOut); 544 args.fTransformsOut);
540 545
541 546
542 GrGLSLShaderVar edgeAlpha("edgeAlpha", kFloat_GrSLType, 0, kHigh_GrSLPrecisi on); 547 GrGLSLShaderVar edgeAlpha("edgeAlpha", kFloat_GrSLType, 0, kHigh_GrSLPrecisi on);
543 GrGLSLShaderVar dklmdx("dklmdx", kVec3f_GrSLType, 0, kHigh_GrSLPrecision); 548 GrGLSLShaderVar dklmdx("dklmdx", kVec3f_GrSLType, 0, kHigh_GrSLPrecision);
544 GrGLSLShaderVar dklmdy("dklmdy", kVec3f_GrSLType, 0, kHigh_GrSLPrecision); 549 GrGLSLShaderVar dklmdy("dklmdy", kVec3f_GrSLType, 0, kHigh_GrSLPrecision);
545 GrGLSLShaderVar dfdx("dfdx", kFloat_GrSLType, 0, kHigh_GrSLPrecision); 550 GrGLSLShaderVar dfdx("dfdx", kFloat_GrSLType, 0, kHigh_GrSLPrecision);
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 do { 677 do {
673 GrPrimitiveEdgeType edgeType = 678 GrPrimitiveEdgeType edgeType =
674 static_cast<GrPrimitiveEdgeType>( 679 static_cast<GrPrimitiveEdgeType>(
675 d->fRandom->nextULessThan(kGrProcessorEdgeTypeCnt)); 680 d->fRandom->nextULessThan(kGrProcessorEdgeTypeCnt));
676 gp = GrCubicEffect::Create(GrRandomColor(d->fRandom), 681 gp = GrCubicEffect::Create(GrRandomColor(d->fRandom),
677 GrTest::TestMatrix(d->fRandom), edgeType, *d- >fCaps); 682 GrTest::TestMatrix(d->fRandom), edgeType, *d- >fCaps);
678 } while (nullptr == gp); 683 } while (nullptr == gp);
679 return gp; 684 return gp;
680 } 685 }
681 686
OLDNEW
« no previous file with comments | « src/gpu/batches/GrAALinearizingConvexPathRenderer.cpp ('k') | src/gpu/effects/GrBicubicEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698