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

Side by Side Diff: src/gpu/effects/GrCustomXfermode.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, 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
« no previous file with comments | « src/gpu/effects/GrCoverageSetOpXP.cpp ('k') | src/gpu/effects/GrCustomXfermodePriv.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 2015 Google Inc. 2 * Copyright 2015 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 "effects/GrCustomXfermode.h" 8 #include "effects/GrCustomXfermode.h"
9 #include "effects/GrCustomXfermodePriv.h" 9 #include "effects/GrCustomXfermodePriv.h"
10 10
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 const char* dstColor = "bgColor"; 420 const char* dstColor = "bgColor";
421 fsBuilder->codeAppendf("vec4 %s = ", dstColor); 421 fsBuilder->codeAppendf("vec4 %s = ", dstColor);
422 fsBuilder->appendTextureLookup(samplers[0], coords[0].c_str(), coords[0] .getType()); 422 fsBuilder->appendTextureLookup(samplers[0], coords[0].c_str(), coords[0] .getType());
423 fsBuilder->codeAppendf(";"); 423 fsBuilder->codeAppendf(";");
424 424
425 emit_custom_xfermode_code(mode, fsBuilder, outputColor, inputColor, dstC olor); 425 emit_custom_xfermode_code(mode, fsBuilder, outputColor, inputColor, dstC olor);
426 } 426 }
427 427
428 void setData(const GrGLProgramDataManager&, const GrProcessor&) override {} 428 void setData(const GrGLProgramDataManager&, const GrProcessor&) override {}
429 429
430 static void GenKey(const GrFragmentProcessor& proc, const GrGLCaps&, GrProce ssorKeyBuilder* b) { 430 static void GenKey(const GrFragmentProcessor& proc, const GrGLSLCaps&, GrPro cessorKeyBuilder* b) {
431 // The background may come from the dst or from a texture. 431 // The background may come from the dst or from a texture.
432 uint32_t key = proc.numTextures(); 432 uint32_t key = proc.numTextures();
433 SkASSERT(key <= 1); 433 SkASSERT(key <= 1);
434 key |= proc.cast<GrCustomXferFP>().mode() << 1; 434 key |= proc.cast<GrCustomXferFP>().mode() << 1;
435 b->add32(key); 435 b->add32(key);
436 } 436 }
437 437
438 private: 438 private:
439 typedef GrGLFragmentProcessor INHERITED; 439 typedef GrGLFragmentProcessor INHERITED;
440 }; 440 };
441 441
442 /////////////////////////////////////////////////////////////////////////////// 442 ///////////////////////////////////////////////////////////////////////////////
443 443
444 GrCustomXferFP::GrCustomXferFP(SkXfermode::Mode mode, GrTexture* background) 444 GrCustomXferFP::GrCustomXferFP(SkXfermode::Mode mode, GrTexture* background)
445 : fMode(mode) { 445 : fMode(mode) {
446 this->initClassID<GrCustomXferFP>(); 446 this->initClassID<GrCustomXferFP>();
447 447
448 SkASSERT(background); 448 SkASSERT(background);
449 fBackgroundTransform.reset(kLocal_GrCoordSet, background, 449 fBackgroundTransform.reset(kLocal_GrCoordSet, background,
450 GrTextureParams::kNone_FilterMode); 450 GrTextureParams::kNone_FilterMode);
451 this->addCoordTransform(&fBackgroundTransform); 451 this->addCoordTransform(&fBackgroundTransform);
452 fBackgroundAccess.reset(background); 452 fBackgroundAccess.reset(background);
453 this->addTextureAccess(&fBackgroundAccess); 453 this->addTextureAccess(&fBackgroundAccess);
454 } 454 }
455 455
456 void GrCustomXferFP::getGLProcessorKey(const GrGLCaps& caps, GrProcessorKeyBuild er* b) const { 456 void GrCustomXferFP::getGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBui lder* b) const {
457 GLCustomXferFP::GenKey(*this, caps, b); 457 GLCustomXferFP::GenKey(*this, caps, b);
458 } 458 }
459 459
460 GrGLFragmentProcessor* GrCustomXferFP::createGLInstance() const { 460 GrGLFragmentProcessor* GrCustomXferFP::createGLInstance() const {
461 return SkNEW_ARGS(GLCustomXferFP, (*this)); 461 return SkNEW_ARGS(GLCustomXferFP, (*this));
462 } 462 }
463 463
464 bool GrCustomXferFP::onIsEqual(const GrFragmentProcessor& other) const { 464 bool GrCustomXferFP::onIsEqual(const GrFragmentProcessor& other) const {
465 const GrCustomXferFP& s = other.cast<GrCustomXferFP>(); 465 const GrCustomXferFP& s = other.cast<GrCustomXferFP>();
466 return fMode == s.fMode; 466 return fMode == s.fMode;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 const GrProcOptInfo& coveragePOI, 507 const GrProcOptInfo& coveragePOI,
508 bool doesStencilWrite, 508 bool doesStencilWrite,
509 GrColor* overrideColor, 509 GrColor* overrideColor,
510 const GrDrawTargetCaps& caps) ove rride; 510 const GrDrawTargetCaps& caps) ove rride;
511 511
512 SkXfermode::Mode mode() const { return fMode; } 512 SkXfermode::Mode mode() const { return fMode; }
513 513
514 private: 514 private:
515 CustomXP(SkXfermode::Mode mode, const GrDeviceCoordTexture* dstCopy, bool wi llReadDstColor); 515 CustomXP(SkXfermode::Mode mode, const GrDeviceCoordTexture* dstCopy, bool wi llReadDstColor);
516 516
517 void onGetGLProcessorKey(const GrGLCaps& caps, GrProcessorKeyBuilder* b) con st override; 517 void onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) c onst override;
518 518
519 bool onIsEqual(const GrXferProcessor& xpBase) const override; 519 bool onIsEqual(const GrXferProcessor& xpBase) const override;
520 520
521 SkXfermode::Mode fMode; 521 SkXfermode::Mode fMode;
522 522
523 typedef GrXferProcessor INHERITED; 523 typedef GrXferProcessor INHERITED;
524 }; 524 };
525 525
526 /////////////////////////////////////////////////////////////////////////////// 526 ///////////////////////////////////////////////////////////////////////////////
527 527
528 GrXPFactory* GrCustomXfermode::CreateXPFactory(SkXfermode::Mode mode) { 528 GrXPFactory* GrCustomXfermode::CreateXPFactory(SkXfermode::Mode mode) {
529 if (!GrCustomXfermode::IsSupportedMode(mode)) { 529 if (!GrCustomXfermode::IsSupportedMode(mode)) {
530 return NULL; 530 return NULL;
531 } else { 531 } else {
532 return SkNEW_ARGS(GrCustomXPFactory, (mode)); 532 return SkNEW_ARGS(GrCustomXPFactory, (mode));
533 } 533 }
534 } 534 }
535 535
536 /////////////////////////////////////////////////////////////////////////////// 536 ///////////////////////////////////////////////////////////////////////////////
537 537
538 class GLCustomXP : public GrGLXferProcessor { 538 class GLCustomXP : public GrGLXferProcessor {
539 public: 539 public:
540 GLCustomXP(const GrXferProcessor&) {} 540 GLCustomXP(const GrXferProcessor&) {}
541 ~GLCustomXP() override {} 541 ~GLCustomXP() override {}
542 542
543 static void GenKey(const GrXferProcessor& proc, const GrGLCaps&, GrProcessor KeyBuilder* b) { 543 static void GenKey(const GrXferProcessor& proc, const GrGLSLCaps&, GrProcess orKeyBuilder* b) {
544 uint32_t key = proc.numTextures(); 544 uint32_t key = proc.numTextures();
545 SkASSERT(key <= 1); 545 SkASSERT(key <= 1);
546 key |= proc.cast<CustomXP>().mode() << 1; 546 key |= proc.cast<CustomXP>().mode() << 1;
547 b->add32(key); 547 b->add32(key);
548 } 548 }
549 549
550 private: 550 private:
551 void onEmitCode(const EmitArgs& args) override { 551 void onEmitCode(const EmitArgs& args) override {
552 SkXfermode::Mode mode = args.fXP.cast<CustomXP>().mode(); 552 SkXfermode::Mode mode = args.fXP.cast<CustomXP>().mode();
553 GrGLFPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); 553 GrGLFPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
(...skipping 12 matching lines...) Expand all
566 }; 566 };
567 567
568 /////////////////////////////////////////////////////////////////////////////// 568 ///////////////////////////////////////////////////////////////////////////////
569 569
570 CustomXP::CustomXP(SkXfermode::Mode mode, const GrDeviceCoordTexture* dstCopy, 570 CustomXP::CustomXP(SkXfermode::Mode mode, const GrDeviceCoordTexture* dstCopy,
571 bool willReadDstColor) 571 bool willReadDstColor)
572 : INHERITED(dstCopy, willReadDstColor), fMode(mode) { 572 : INHERITED(dstCopy, willReadDstColor), fMode(mode) {
573 this->initClassID<CustomXP>(); 573 this->initClassID<CustomXP>();
574 } 574 }
575 575
576 void CustomXP::onGetGLProcessorKey(const GrGLCaps& caps, GrProcessorKeyBuilder* b) const { 576 void CustomXP::onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder * b) const {
577 GLCustomXP::GenKey(*this, caps, b); 577 GLCustomXP::GenKey(*this, caps, b);
578 } 578 }
579 579
580 GrGLXferProcessor* CustomXP::createGLInstance() const { 580 GrGLXferProcessor* CustomXP::createGLInstance() const {
581 return SkNEW_ARGS(GLCustomXP, (*this)); 581 return SkNEW_ARGS(GLCustomXP, (*this));
582 } 582 }
583 583
584 bool CustomXP::onIsEqual(const GrXferProcessor& other) const { 584 bool CustomXP::onIsEqual(const GrXferProcessor& other) const {
585 const CustomXP& s = other.cast<CustomXP>(); 585 const CustomXP& s = other.cast<CustomXP>();
586 return fMode == s.fMode; 586 return fMode == s.fMode;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 GR_DEFINE_XP_FACTORY_TEST(GrCustomXPFactory); 620 GR_DEFINE_XP_FACTORY_TEST(GrCustomXPFactory);
621 GrXPFactory* GrCustomXPFactory::TestCreate(SkRandom* rand, 621 GrXPFactory* GrCustomXPFactory::TestCreate(SkRandom* rand,
622 GrContext*, 622 GrContext*,
623 const GrDrawTargetCaps&, 623 const GrDrawTargetCaps&,
624 GrTexture*[]) { 624 GrTexture*[]) {
625 int mode = rand->nextRangeU(SkXfermode::kLastCoeffMode + 1, SkXfermode::kLas tSeparableMode); 625 int mode = rand->nextRangeU(SkXfermode::kLastCoeffMode + 1, SkXfermode::kLas tSeparableMode);
626 626
627 return SkNEW_ARGS(GrCustomXPFactory, (static_cast<SkXfermode::Mode>(mode))); 627 return SkNEW_ARGS(GrCustomXPFactory, (static_cast<SkXfermode::Mode>(mode)));
628 } 628 }
629 629
OLDNEW
« no previous file with comments | « src/gpu/effects/GrCoverageSetOpXP.cpp ('k') | src/gpu/effects/GrCustomXfermodePriv.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698