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

Side by Side Diff: src/effects/SkMorphologyImageFilter.cpp

Issue 1230813003: More threading of GrProcessorDataManager (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: tweaks Created 5 years, 5 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/effects/SkMatrixConvolutionImageFilter.cpp ('k') | src/effects/SkXfermodeImageFilter.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 2012 The Android Open Source Project 2 * Copyright 2012 The Android Open Source Project
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 "SkMorphologyImageFilter.h" 8 #include "SkMorphologyImageFilter.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 */ 291 */
292 class GrMorphologyEffect : public Gr1DKernelEffect { 292 class GrMorphologyEffect : public Gr1DKernelEffect {
293 293
294 public: 294 public:
295 295
296 enum MorphologyType { 296 enum MorphologyType {
297 kErode_MorphologyType, 297 kErode_MorphologyType,
298 kDilate_MorphologyType, 298 kDilate_MorphologyType,
299 }; 299 };
300 300
301 static GrFragmentProcessor* Create(GrTexture* tex, Direction dir, int radius , 301 static GrFragmentProcessor* Create(GrProcessorDataManager* procDataManager, GrTexture* tex,
302 MorphologyType type) { 302 Direction dir, int radius, MorphologyType type) {
303 return SkNEW_ARGS(GrMorphologyEffect, (tex, dir, radius, type)); 303 return SkNEW_ARGS(GrMorphologyEffect, (procDataManager, tex, dir, radius , type));
304 } 304 }
305 305
306 static GrFragmentProcessor* Create(GrTexture* tex, Direction dir, int radius , 306 static GrFragmentProcessor* Create(GrProcessorDataManager* procDataManager, GrTexture* tex,
307 MorphologyType type, float bounds[2]) { 307 Direction dir, int radius, MorphologyType type,
308 return SkNEW_ARGS(GrMorphologyEffect, (tex, dir, radius, type, bounds)); 308 float bounds[2]) {
309 return SkNEW_ARGS(GrMorphologyEffect, (procDataManager, tex, dir, radius , type, bounds));
309 } 310 }
310 311
311 virtual ~GrMorphologyEffect(); 312 virtual ~GrMorphologyEffect();
312 313
313 MorphologyType type() const { return fType; } 314 MorphologyType type() const { return fType; }
314 bool useRange() const { return fUseRange; } 315 bool useRange() const { return fUseRange; }
315 const float* range() const { return fRange; } 316 const float* range() const { return fRange; }
316 317
317 const char* name() const override { return "Morphology"; } 318 const char* name() const override { return "Morphology"; }
318 319
319 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over ride; 320 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over ride;
320 321
321 GrGLFragmentProcessor* createGLInstance() const override; 322 GrGLFragmentProcessor* createGLInstance() const override;
322 323
323 protected: 324 protected:
324 325
325 MorphologyType fType; 326 MorphologyType fType;
326 bool fUseRange; 327 bool fUseRange;
327 float fRange[2]; 328 float fRange[2];
328 329
329 private: 330 private:
330 bool onIsEqual(const GrFragmentProcessor&) const override; 331 bool onIsEqual(const GrFragmentProcessor&) const override;
331 332
332 void onComputeInvariantOutput(GrInvariantOutput* inout) const override; 333 void onComputeInvariantOutput(GrInvariantOutput* inout) const override;
333 334
334 GrMorphologyEffect(GrTexture*, Direction, int radius, MorphologyType); 335 GrMorphologyEffect(GrProcessorDataManager*, GrTexture*, Direction, int radiu s, MorphologyType);
335 GrMorphologyEffect(GrTexture*, Direction, int radius, MorphologyType, float bounds[2]); 336 GrMorphologyEffect(GrProcessorDataManager*, GrTexture*, Direction, int radiu s, MorphologyType,
337 float bounds[2]);
336 338
337 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 339 GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
338 340
339 typedef Gr1DKernelEffect INHERITED; 341 typedef Gr1DKernelEffect INHERITED;
340 }; 342 };
341 343
342 /////////////////////////////////////////////////////////////////////////////// 344 ///////////////////////////////////////////////////////////////////////////////
343 345
344 class GrGLMorphologyEffect : public GrGLFragmentProcessor { 346 class GrGLMorphologyEffect : public GrGLFragmentProcessor {
345 public: 347 public:
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 if (fDirection && texture.origin() == kBottomLeft_GrSurfaceOrigin) { 489 if (fDirection && texture.origin() == kBottomLeft_GrSurfaceOrigin) {
488 pdman.set2f(fRangeUni, 1.0f - range[1], 1.0f - range[0]); 490 pdman.set2f(fRangeUni, 1.0f - range[1], 1.0f - range[0]);
489 } else { 491 } else {
490 pdman.set2f(fRangeUni, range[0], range[1]); 492 pdman.set2f(fRangeUni, range[0], range[1]);
491 } 493 }
492 } 494 }
493 } 495 }
494 496
495 /////////////////////////////////////////////////////////////////////////////// 497 ///////////////////////////////////////////////////////////////////////////////
496 498
497 GrMorphologyEffect::GrMorphologyEffect(GrTexture* texture, 499 GrMorphologyEffect::GrMorphologyEffect(GrProcessorDataManager* procDataManager,
500 GrTexture* texture,
498 Direction direction, 501 Direction direction,
499 int radius, 502 int radius,
500 MorphologyType type) 503 MorphologyType type)
501 : Gr1DKernelEffect(texture, direction, radius) 504 : INHERITED(procDataManager, texture, direction, radius)
502 , fType(type), fUseRange(false) { 505 , fType(type), fUseRange(false) {
503 this->initClassID<GrMorphologyEffect>(); 506 this->initClassID<GrMorphologyEffect>();
504 } 507 }
505 508
506 GrMorphologyEffect::GrMorphologyEffect(GrTexture* texture, 509 GrMorphologyEffect::GrMorphologyEffect(GrProcessorDataManager* procDataManager,
510 GrTexture* texture,
507 Direction direction, 511 Direction direction,
508 int radius, 512 int radius,
509 MorphologyType type, 513 MorphologyType type,
510 float range[2]) 514 float range[2])
511 : Gr1DKernelEffect(texture, direction, radius) 515 : INHERITED(procDataManager, texture, direction, radius)
512 , fType(type), fUseRange(true) { 516 , fType(type), fUseRange(true) {
513 this->initClassID<GrMorphologyEffect>(); 517 this->initClassID<GrMorphologyEffect>();
514 fRange[0] = range[0]; 518 fRange[0] = range[0];
515 fRange[1] = range[1]; 519 fRange[1] = range[1];
516 } 520 }
517 521
518 GrMorphologyEffect::~GrMorphologyEffect() { 522 GrMorphologyEffect::~GrMorphologyEffect() {
519 } 523 }
520 524
521 void GrMorphologyEffect::getGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKe yBuilder* b) const { 525 void GrMorphologyEffect::getGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKe yBuilder* b) const {
(...skipping 23 matching lines...) Expand all
545 549
546 GrFragmentProcessor* GrMorphologyEffect::TestCreate(GrProcessorTestData* d) { 550 GrFragmentProcessor* GrMorphologyEffect::TestCreate(GrProcessorTestData* d) {
547 int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : 551 int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx :
548 GrProcessorUnitTest::kAlphaTextureIdx; 552 GrProcessorUnitTest::kAlphaTextureIdx;
549 Direction dir = d->fRandom->nextBool() ? kX_Direction : kY_Direction; 553 Direction dir = d->fRandom->nextBool() ? kX_Direction : kY_Direction;
550 static const int kMaxRadius = 10; 554 static const int kMaxRadius = 10;
551 int radius = d->fRandom->nextRangeU(1, kMaxRadius); 555 int radius = d->fRandom->nextRangeU(1, kMaxRadius);
552 MorphologyType type = d->fRandom->nextBool() ? GrMorphologyEffect::kErode_Mo rphologyType : 556 MorphologyType type = d->fRandom->nextBool() ? GrMorphologyEffect::kErode_Mo rphologyType :
553 GrMorphologyEffect::kDilate_Morph ologyType; 557 GrMorphologyEffect::kDilate_Morph ologyType;
554 558
555 return GrMorphologyEffect::Create(d->fTextures[texIdx], dir, radius, type); 559 return GrMorphologyEffect::Create(d->fProcDataManager, d->fTextures[texIdx], dir, radius, type);
556 } 560 }
557 561
558 namespace { 562 namespace {
559 563
560 564
561 void apply_morphology_rect(GrDrawContext* drawContext, 565 void apply_morphology_rect(GrDrawContext* drawContext,
562 GrRenderTarget* rt, 566 GrRenderTarget* rt,
563 const GrClip& clip, 567 const GrClip& clip,
564 GrTexture* texture, 568 GrTexture* texture,
565 const SkIRect& srcRect, 569 const SkIRect& srcRect,
566 const SkIRect& dstRect, 570 const SkIRect& dstRect,
567 int radius, 571 int radius,
568 GrMorphologyEffect::MorphologyType morphType, 572 GrMorphologyEffect::MorphologyType morphType,
569 float bounds[2], 573 float bounds[2],
570 Gr1DKernelEffect::Direction direction) { 574 Gr1DKernelEffect::Direction direction) {
571 GrPaint paint; 575 GrPaint paint;
572 paint.addColorProcessor(GrMorphologyEffect::Create(texture, 576 paint.addColorProcessor(GrMorphologyEffect::Create(paint.getProcessorDataMan ager(),
577 texture,
573 direction, 578 direction,
574 radius, 579 radius,
575 morphType, 580 morphType,
576 bounds))->unref(); 581 bounds))->unref();
577 drawContext->drawNonAARectToRect(rt, clip, paint, SkMatrix::I(), SkRect::Mak e(dstRect), 582 drawContext->drawNonAARectToRect(rt, clip, paint, SkMatrix::I(), SkRect::Mak e(dstRect),
578 SkRect::Make(srcRect)); 583 SkRect::Make(srcRect));
579 } 584 }
580 585
581 void apply_morphology_rect_no_bounds(GrDrawContext* drawContext, 586 void apply_morphology_rect_no_bounds(GrDrawContext* drawContext,
582 GrRenderTarget* rt, 587 GrRenderTarget* rt,
583 const GrClip& clip, 588 const GrClip& clip,
584 GrTexture* texture, 589 GrTexture* texture,
585 const SkIRect& srcRect, 590 const SkIRect& srcRect,
586 const SkIRect& dstRect, 591 const SkIRect& dstRect,
587 int radius, 592 int radius,
588 GrMorphologyEffect::MorphologyType morphTyp e, 593 GrMorphologyEffect::MorphologyType morphTyp e,
589 Gr1DKernelEffect::Direction direction) { 594 Gr1DKernelEffect::Direction direction) {
590 GrPaint paint; 595 GrPaint paint;
591 paint.addColorProcessor(GrMorphologyEffect::Create(texture, 596 paint.addColorProcessor(GrMorphologyEffect::Create(paint.getProcessorDataMan ager(),
597 texture,
592 direction, 598 direction,
593 radius, 599 radius,
594 morphType))->unref(); 600 morphType))->unref();
595 drawContext->drawNonAARectToRect(rt, clip, paint, SkMatrix::I(), SkRect::Mak e(dstRect), 601 drawContext->drawNonAARectToRect(rt, clip, paint, SkMatrix::I(), SkRect::Mak e(dstRect),
596 SkRect::Make(srcRect)); 602 SkRect::Make(srcRect));
597 } 603 }
598 604
599 void apply_morphology_pass(GrDrawContext* drawContext, 605 void apply_morphology_pass(GrDrawContext* drawContext,
600 GrRenderTarget* rt, 606 GrRenderTarget* rt,
601 const GrClip& clip, 607 const GrClip& clip,
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
752 SkBitmap* result, SkIPoint* offset) con st { 758 SkBitmap* result, SkIPoint* offset) con st {
753 return this->filterImageGPUGeneric(true, proxy, src, ctx, result, offset); 759 return this->filterImageGPUGeneric(true, proxy, src, ctx, result, offset);
754 } 760 }
755 761
756 bool SkErodeImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const Context& ctx, 762 bool SkErodeImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const Context& ctx,
757 SkBitmap* result, SkIPoint* offset) cons t { 763 SkBitmap* result, SkIPoint* offset) cons t {
758 return this->filterImageGPUGeneric(false, proxy, src, ctx, result, offset); 764 return this->filterImageGPUGeneric(false, proxy, src, ctx, result, offset);
759 } 765 }
760 766
761 #endif 767 #endif
OLDNEW
« no previous file with comments | « src/effects/SkMatrixConvolutionImageFilter.cpp ('k') | src/effects/SkXfermodeImageFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698