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

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

Issue 1109863004: Use GLSLCaps for creating processor keys and GLSL-specific programs (Closed) Base URL: https://chromium.googlesource.com/skia@master
Patch Set: Created 5 years, 7 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 | « src/gpu/GrDefaultGeoProcFactory.cpp ('k') | src/gpu/GrPathProcessor.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 "GrOvalRenderer.h" 8 #include "GrOvalRenderer.h"
9 9
10 #include "GrBatch.h" 10 #include "GrBatch.h"
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 fsBuilder->codeAppendf("float innerAlpha = clamp(%s.z * (d - %s. w), 0.0, 1.0);", 119 fsBuilder->codeAppendf("float innerAlpha = clamp(%s.z * (d - %s. w), 0.0, 1.0);",
120 v.fsIn(), v.fsIn()); 120 v.fsIn(), v.fsIn());
121 fsBuilder->codeAppend("edgeAlpha *= innerAlpha;"); 121 fsBuilder->codeAppend("edgeAlpha *= innerAlpha;");
122 } 122 }
123 123
124 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage ); 124 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage );
125 } 125 }
126 126
127 static void GenKey(const GrGeometryProcessor& gp, 127 static void GenKey(const GrGeometryProcessor& gp,
128 const GrBatchTracker& bt, 128 const GrBatchTracker& bt,
129 const GrGLCaps&, 129 const GrGLSLCaps&,
130 GrProcessorKeyBuilder* b) { 130 GrProcessorKeyBuilder* b) {
131 const BatchTracker& local = bt.cast<BatchTracker>(); 131 const BatchTracker& local = bt.cast<BatchTracker>();
132 const CircleEdgeEffect& circleEffect = gp.cast<CircleEdgeEffect>(); 132 const CircleEdgeEffect& circleEffect = gp.cast<CircleEdgeEffect>();
133 uint16_t key = circleEffect.isStroked() ? 0x1 : 0x0; 133 uint16_t key = circleEffect.isStroked() ? 0x1 : 0x0;
134 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x2 : 0x0; 134 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x2 : 0x0;
135 key |= ComputePosKey(gp.viewMatrix()) << 2; 135 key |= ComputePosKey(gp.viewMatrix()) << 2;
136 b->add32(key << 16 | local.fInputColorType); 136 b->add32(key << 16 | local.fInputColorType);
137 } 137 }
138 138
139 virtual void setData(const GrGLProgramDataManager& pdman, 139 virtual void setData(const GrGLProgramDataManager& pdman,
(...skipping 10 matching lines...) Expand all
150 } 150 }
151 } 151 }
152 152
153 private: 153 private:
154 GrColor fColor; 154 GrColor fColor;
155 UniformHandle fColorUniform; 155 UniformHandle fColorUniform;
156 typedef GrGLGeometryProcessor INHERITED; 156 typedef GrGLGeometryProcessor INHERITED;
157 }; 157 };
158 158
159 virtual void getGLProcessorKey(const GrBatchTracker& bt, 159 virtual void getGLProcessorKey(const GrBatchTracker& bt,
160 const GrGLCaps& caps, 160 const GrGLSLCaps& caps,
161 GrProcessorKeyBuilder* b) const override { 161 GrProcessorKeyBuilder* b) const override {
162 GLProcessor::GenKey(*this, bt, caps, b); 162 GLProcessor::GenKey(*this, bt, caps, b);
163 } 163 }
164 164
165 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, 165 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
166 const GrGLCaps&) const over ride { 166 const GrGLSLCaps&) const ov erride {
167 return SkNEW_ARGS(GLProcessor, (*this, bt)); 167 return SkNEW_ARGS(GLProcessor, (*this, bt));
168 } 168 }
169 169
170 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const override { 170 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const override {
171 BatchTracker* local = bt->cast<BatchTracker>(); 171 BatchTracker* local = bt->cast<BatchTracker>();
172 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false); 172 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false);
173 local->fUsesLocalCoords = init.fUsesLocalCoords; 173 local->fUsesLocalCoords = init.fUsesLocalCoords;
174 } 174 }
175 175
176 bool onCanMakeEqual(const GrBatchTracker& m, 176 bool onCanMakeEqual(const GrBatchTracker& m,
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 ellipseRadii.fsIn()); 313 ellipseRadii.fsIn());
314 fsBuilder->codeAppend("invlen = inversesqrt(dot(grad, grad));"); 314 fsBuilder->codeAppend("invlen = inversesqrt(dot(grad, grad));");
315 fsBuilder->codeAppend("edgeAlpha *= clamp(0.5+test*invlen, 0.0, 1.0);"); 315 fsBuilder->codeAppend("edgeAlpha *= clamp(0.5+test*invlen, 0.0, 1.0);");
316 } 316 }
317 317
318 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage ); 318 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage );
319 } 319 }
320 320
321 static void GenKey(const GrGeometryProcessor& gp, 321 static void GenKey(const GrGeometryProcessor& gp,
322 const GrBatchTracker& bt, 322 const GrBatchTracker& bt,
323 const GrGLCaps&, 323 const GrGLSLCaps&,
324 GrProcessorKeyBuilder* b) { 324 GrProcessorKeyBuilder* b) {
325 const BatchTracker& local = bt.cast<BatchTracker>(); 325 const BatchTracker& local = bt.cast<BatchTracker>();
326 const EllipseEdgeEffect& ellipseEffect = gp.cast<EllipseEdgeEffect>( ); 326 const EllipseEdgeEffect& ellipseEffect = gp.cast<EllipseEdgeEffect>( );
327 uint16_t key = ellipseEffect.isStroked() ? 0x1 : 0x0; 327 uint16_t key = ellipseEffect.isStroked() ? 0x1 : 0x0;
328 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x2 : 0x0; 328 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x2 : 0x0;
329 key |= ComputePosKey(gp.viewMatrix()) << 2; 329 key |= ComputePosKey(gp.viewMatrix()) << 2;
330 b->add32(key << 16 | local.fInputColorType); 330 b->add32(key << 16 | local.fInputColorType);
331 } 331 }
332 332
333 virtual void setData(const GrGLProgramDataManager& pdman, 333 virtual void setData(const GrGLProgramDataManager& pdman,
(...skipping 11 matching lines...) Expand all
345 } 345 }
346 346
347 private: 347 private:
348 GrColor fColor; 348 GrColor fColor;
349 UniformHandle fColorUniform; 349 UniformHandle fColorUniform;
350 350
351 typedef GrGLGeometryProcessor INHERITED; 351 typedef GrGLGeometryProcessor INHERITED;
352 }; 352 };
353 353
354 virtual void getGLProcessorKey(const GrBatchTracker& bt, 354 virtual void getGLProcessorKey(const GrBatchTracker& bt,
355 const GrGLCaps& caps, 355 const GrGLSLCaps& caps,
356 GrProcessorKeyBuilder* b) const override { 356 GrProcessorKeyBuilder* b) const override {
357 GLProcessor::GenKey(*this, bt, caps, b); 357 GLProcessor::GenKey(*this, bt, caps, b);
358 } 358 }
359 359
360 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, 360 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
361 const GrGLCaps&) const over ride { 361 const GrGLSLCaps&) const ov erride {
362 return SkNEW_ARGS(GLProcessor, (*this, bt)); 362 return SkNEW_ARGS(GLProcessor, (*this, bt));
363 } 363 }
364 364
365 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const override { 365 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const override {
366 BatchTracker* local = bt->cast<BatchTracker>(); 366 BatchTracker* local = bt->cast<BatchTracker>();
367 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false); 367 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false);
368 local->fUsesLocalCoords = init.fUsesLocalCoords; 368 local->fUsesLocalCoords = init.fUsesLocalCoords;
369 } 369 }
370 370
371 bool onCanMakeEqual(const GrBatchTracker& m, 371 bool onCanMakeEqual(const GrBatchTracker& m,
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 offsets1.fsIn()); 528 offsets1.fsIn());
529 fsBuilder->codeAppend("invlen = inversesqrt(dot(grad, grad));"); 529 fsBuilder->codeAppend("invlen = inversesqrt(dot(grad, grad));");
530 fsBuilder->codeAppend("edgeAlpha *= clamp(0.5+test*invlen, 0.0, 1.0);"); 530 fsBuilder->codeAppend("edgeAlpha *= clamp(0.5+test*invlen, 0.0, 1.0);");
531 } 531 }
532 532
533 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage ); 533 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage );
534 } 534 }
535 535
536 static void GenKey(const GrGeometryProcessor& gp, 536 static void GenKey(const GrGeometryProcessor& gp,
537 const GrBatchTracker& bt, 537 const GrBatchTracker& bt,
538 const GrGLCaps&, 538 const GrGLSLCaps&,
539 GrProcessorKeyBuilder* b) { 539 GrProcessorKeyBuilder* b) {
540 const BatchTracker& local = bt.cast<BatchTracker>(); 540 const BatchTracker& local = bt.cast<BatchTracker>();
541 const DIEllipseEdgeEffect& ellipseEffect = gp.cast<DIEllipseEdgeEffe ct>(); 541 const DIEllipseEdgeEffect& ellipseEffect = gp.cast<DIEllipseEdgeEffe ct>();
542 uint16_t key = ellipseEffect.getMode(); 542 uint16_t key = ellipseEffect.getMode();
543 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 8 : 0x0; 543 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 8 : 0x0;
544 key |= ComputePosKey(gp.viewMatrix()) << 9; 544 key |= ComputePosKey(gp.viewMatrix()) << 9;
545 b->add32(key << 16 | local.fInputColorType); 545 b->add32(key << 16 | local.fInputColorType);
546 } 546 }
547 547
548 virtual void setData(const GrGLProgramDataManager& pdman, 548 virtual void setData(const GrGLProgramDataManager& pdman,
(...skipping 11 matching lines...) Expand all
560 } 560 }
561 561
562 private: 562 private:
563 GrColor fColor; 563 GrColor fColor;
564 UniformHandle fColorUniform; 564 UniformHandle fColorUniform;
565 565
566 typedef GrGLGeometryProcessor INHERITED; 566 typedef GrGLGeometryProcessor INHERITED;
567 }; 567 };
568 568
569 virtual void getGLProcessorKey(const GrBatchTracker& bt, 569 virtual void getGLProcessorKey(const GrBatchTracker& bt,
570 const GrGLCaps& caps, 570 const GrGLSLCaps& caps,
571 GrProcessorKeyBuilder* b) const override { 571 GrProcessorKeyBuilder* b) const override {
572 GLProcessor::GenKey(*this, bt, caps, b); 572 GLProcessor::GenKey(*this, bt, caps, b);
573 } 573 }
574 574
575 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, 575 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
576 const GrGLCaps&) const over ride { 576 const GrGLSLCaps&) const ov erride {
577 return SkNEW_ARGS(GLProcessor, (*this, bt)); 577 return SkNEW_ARGS(GLProcessor, (*this, bt));
578 } 578 }
579 579
580 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const override { 580 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const override {
581 BatchTracker* local = bt->cast<BatchTracker>(); 581 BatchTracker* local = bt->cast<BatchTracker>();
582 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false); 582 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false);
583 local->fUsesLocalCoords = init.fUsesLocalCoords; 583 local->fUsesLocalCoords = init.fUsesLocalCoords;
584 } 584 }
585 585
586 bool onCanMakeEqual(const GrBatchTracker& m, 586 bool onCanMakeEqual(const GrBatchTracker& m,
(...skipping 1635 matching lines...) Expand 10 before | Expand all | Expand 10 after
2222 geometry.fInnerXRadius = innerXRadius; 2222 geometry.fInnerXRadius = innerXRadius;
2223 geometry.fInnerYRadius = innerYRadius; 2223 geometry.fInnerYRadius = innerYRadius;
2224 geometry.fStroke = isStrokeOnly; 2224 geometry.fStroke = isStrokeOnly;
2225 geometry.fDevBounds = bounds; 2225 geometry.fDevBounds = bounds;
2226 2226
2227 SkAutoTUnref<GrBatch> batch(RRectEllipseRendererBatch::Create(geometry, indexBuffer)); 2227 SkAutoTUnref<GrBatch> batch(RRectEllipseRendererBatch::Create(geometry, indexBuffer));
2228 target->drawBatch(pipelineBuilder, batch, &bounds); 2228 target->drawBatch(pipelineBuilder, batch, &bounds);
2229 } 2229 }
2230 return true; 2230 return true;
2231 } 2231 }
OLDNEW
« no previous file with comments | « src/gpu/GrDefaultGeoProcFactory.cpp ('k') | src/gpu/GrPathProcessor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698