From 44acb5b09bb87163bc9c010be915b3f33e3157eb Mon Sep 17 00:00:00 2001 From: Brian Salomon Date: Tue, 18 Jul 2017 19:59:24 -0400 Subject: Revert "Revert "Make GrAtlasTextOp a non-legacy GrMeshDrawOp"" This reverts commit e3e9628ecf863f433f26bf6107d6a39ced57fe30. Adds blendmode_mask_* benchs to blacklist for Chromecast. Otherwise a clean revert of the revert. Bug: skia: Change-Id: I9f64ae55804fa4aad97c1785834281039570c56c Reviewed-on: https://skia-review.googlesource.com/24409 Commit-Queue: Brian Salomon Reviewed-by: Brian Salomon --- ...mecast-GCC-Chorizo-CPU-Cortex_A7-arm-Debug.json | 3 +- ...cast-GCC-Chorizo-GPU-Cortex_A7-arm-Release.json | 1 + infra/bots/recipes/perf.py | 1 + src/gpu/GrDrawOpTest.h | 5 +- src/gpu/GrProcessorSet.h | 1 + src/gpu/ops/GrAtlasTextOp.cpp | 64 ++++++++++++---------- src/gpu/ops/GrAtlasTextOp.h | 47 +++++++++------- src/gpu/text/GrAtlasTextBlob.cpp | 38 +++++++------ src/gpu/text/GrAtlasTextBlob.h | 20 ++++--- src/gpu/text/GrAtlasTextContext.cpp | 14 +++-- src/gpu/text/GrAtlasTextContext.h | 2 +- tools/gpu/GrTest.cpp | 4 +- whitespace.txt | 2 +- 13 files changed, 114 insertions(+), 88 deletions(-) diff --git a/infra/bots/recipes/perf.expected/Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Debug.json b/infra/bots/recipes/perf.expected/Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Debug.json index f8dc89cc5f..7c6ae659fa 100644 --- a/infra/bots/recipes/perf.expected/Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Debug.json +++ b/infra/bots/recipes/perf.expected/Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Debug.json @@ -318,7 +318,8 @@ "~matrixconvolution", "~blur_image_filter", "~blur_0.01", - "~GM_animated-image-blurs" + "~GM_animated-image-blurs", + "~blendmode_mask_" ], "env": { "BUILDTYPE": "Debug", diff --git a/infra/bots/recipes/perf.expected/Perf-Chromecast-GCC-Chorizo-GPU-Cortex_A7-arm-Release.json b/infra/bots/recipes/perf.expected/Perf-Chromecast-GCC-Chorizo-GPU-Cortex_A7-arm-Release.json index fe897263d8..9723087ca9 100644 --- a/infra/bots/recipes/perf.expected/Perf-Chromecast-GCC-Chorizo-GPU-Cortex_A7-arm-Release.json +++ b/infra/bots/recipes/perf.expected/Perf-Chromecast-GCC-Chorizo-GPU-Cortex_A7-arm-Release.json @@ -355,6 +355,7 @@ "~blur_image_filter", "~blur_0.01", "~GM_animated-image-blurs", + "~blendmode_mask_", "--outResultsFile", "/cache/skia/perf/nanobench_abc123_1337000001.json", "--properties", diff --git a/infra/bots/recipes/perf.py b/infra/bots/recipes/perf.py index 98ddb1db88..c08888f47e 100644 --- a/infra/bots/recipes/perf.py +++ b/infra/bots/recipes/perf.py @@ -266,6 +266,7 @@ def perf_steps(api): '~blur_image_filter', '~blur_0.01', '~GM_animated-image-blurs', + '~blendmode_mask_', ]) if api.vars.upload_perf_results: diff --git a/src/gpu/GrDrawOpTest.h b/src/gpu/GrDrawOpTest.h index a30ca2801f..b77fe48bf7 100644 --- a/src/gpu/GrDrawOpTest.h +++ b/src/gpu/GrDrawOpTest.h @@ -27,12 +27,13 @@ void GrDrawRandomOp(SkRandom*, GrRenderTargetContext*, GrPaint&&); #define GR_DRAW_OP_TEST_DEFINE(Op) \ std::unique_ptr Op##__Test(GrPaint&& paint, SkRandom* random, GrContext* context, \ GrFSAAType fsaaType) +#define GR_DRAW_OP_TEST_FRIEND(Op) \ + friend std::unique_ptr Op##__Test(GrPaint&& paint, SkRandom* random, \ + GrContext* context, GrFSAAType fsaaType) /** Variations for GrLegacyMeshDrawOps. To be deleted. */ #define GR_LEGACY_MESH_DRAW_OP_TEST_DEFINE(Op) \ std::unique_ptr Op##__Test(SkRandom* random, GrContext* context) -#define GR_LEGACY_MESH_DRAW_OP_TEST_FRIEND(Op) \ - friend std::unique_ptr Op##__Test(SkRandom* random, GrContext* context); /** Helper for op test factories to pick a random stencil state. */ const GrUserStencilSettings* GrGetRandomStencil(SkRandom* random, GrContext*); diff --git a/src/gpu/GrProcessorSet.h b/src/gpu/GrProcessorSet.h index 666e1c332b..e3fe4c64b2 100644 --- a/src/gpu/GrProcessorSet.h +++ b/src/gpu/GrProcessorSet.h @@ -134,6 +134,7 @@ public: bool isFinalized() const { return SkToBool(kFinalized_Flag & fFlags); } + /** These are valid only for non-LCD coverage. */ static const GrProcessorSet& EmptySet(); static constexpr const Analysis EmptySetAnalysis() { return Analysis(Empty::kEmpty); } diff --git a/src/gpu/ops/GrAtlasTextOp.cpp b/src/gpu/ops/GrAtlasTextOp.cpp index 9c4172ceaf..a7b4967143 100644 --- a/src/gpu/ops/GrAtlasTextOp.cpp +++ b/src/gpu/ops/GrAtlasTextOp.cpp @@ -34,40 +34,45 @@ SkString GrAtlasTextOp::dumpInfo() const { fGeoData[i].fBlob->runCount()); } - str.append(DumpPipelineInfo(*this->pipeline())); - str.append(INHERITED::dumpInfo()); + str += fProcessors.dumpProcessors(); + str += INHERITED::dumpInfo(); return str; } -void GrAtlasTextOp::getProcessorAnalysisInputs(GrProcessorAnalysisColor* color, - GrProcessorAnalysisCoverage* coverage) const { +GrDrawOp::FixedFunctionFlags GrAtlasTextOp::fixedFunctionFlags() const { + return FixedFunctionFlags::kNone; +} + +GrDrawOp::RequiresDstTexture GrAtlasTextOp::finalize(const GrCaps& caps, + const GrAppliedClip* clip) { + GrProcessorAnalysisCoverage coverage; + GrProcessorAnalysisColor color; if (kColorBitmapMask_MaskType == fMaskType) { - color->setToUnknown(); + color.setToUnknown(); } else { - color->setToConstant(fColor); + color.setToConstant(fColor); } switch (fMaskType) { case kGrayscaleCoverageMask_MaskType: case kAliasedDistanceField_MaskType: case kGrayscaleDistanceField_MaskType: - *coverage = GrProcessorAnalysisCoverage::kSingleChannel; + coverage = GrProcessorAnalysisCoverage::kSingleChannel; break; case kLCDCoverageMask_MaskType: case kLCDDistanceField_MaskType: case kLCDBGRDistanceField_MaskType: - *coverage = GrProcessorAnalysisCoverage::kLCD; + coverage = GrProcessorAnalysisCoverage::kLCD; break; case kColorBitmapMask_MaskType: - *coverage = GrProcessorAnalysisCoverage::kNone; + coverage = GrProcessorAnalysisCoverage::kNone; break; } -} - -void GrAtlasTextOp::applyPipelineOptimizations(const PipelineOptimizations& optimizations) { - optimizations.getOverrideColorIfSet(&fGeoData[0].fColor); - - fColor = fGeoData[0].fColor; - fUsesLocalCoords = optimizations.readsLocalCoords(); + auto analysis = fProcessors.finalize(color, coverage, clip, false, caps, &fColor); + fUsesLocalCoords = analysis.usesLocalCoords(); + fCanCombineOnTouchOrOverlap = + !analysis.requiresDstTexture() && + !(fProcessors.xferProcessor() && fProcessors.xferProcessor()->xferBarrierType(caps)); + return analysis.requiresDstTexture() ? RequiresDstTexture::kYes : RequiresDstTexture::kNo; } void GrAtlasTextOp::onPrepareDraws(Target* target) const { @@ -88,15 +93,16 @@ void GrAtlasTextOp::onPrepareDraws(Target* target) const { GrMaskFormat maskFormat = this->maskFormat(); FlushInfo flushInfo; + flushInfo.fPipeline = target->makePipeline(fSRGBFlags, &fProcessors); if (this->usesDistanceFields()) { flushInfo.fGeometryProcessor = this->setupDfProcessor(this->viewMatrix(), fLuminanceColor, this->color(), std::move(proxy)); } else { GrSamplerParams params(SkShader::kClamp_TileMode, GrSamplerParams::kNone_FilterMode); - flushInfo.fGeometryProcessor = GrBitmapTextGeoProc::Make( - this->color(), std::move(proxy), params, - maskFormat, localMatrix, this->usesLocalCoords()); + flushInfo.fGeometryProcessor = + GrBitmapTextGeoProc::Make(this->color(), std::move(proxy), params, maskFormat, + localMatrix, this->usesLocalCoords()); } flushInfo.fGlyphsToFlush = 0; @@ -145,15 +151,18 @@ void GrAtlasTextOp::flush(GrLegacyMeshDrawOp::Target* target, FlushInfo* flushIn mesh.setIndexedPatterned(flushInfo->fIndexBuffer.get(), kIndicesPerGlyph, kVerticesPerGlyph, flushInfo->fGlyphsToFlush, maxGlyphsPerDraw); mesh.setVertexData(flushInfo->fVertexBuffer.get(), flushInfo->fVertexOffset); - target->draw(flushInfo->fGeometryProcessor.get(), this->pipeline(), mesh); + target->draw(flushInfo->fGeometryProcessor.get(), flushInfo->fPipeline, mesh); flushInfo->fVertexOffset += kVerticesPerGlyph * flushInfo->fGlyphsToFlush; flushInfo->fGlyphsToFlush = 0; } bool GrAtlasTextOp::onCombineIfPossible(GrOp* t, const GrCaps& caps) { GrAtlasTextOp* that = t->cast(); - if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *that->pipeline(), - that->bounds(), caps)) { + if (fProcessors != that->fProcessors) { + return false; + } + + if (!fCanCombineOnTouchOrOverlap && GrRectsTouchOrOverlap(this->bounds(), that->bounds())) { return false; } @@ -239,9 +248,8 @@ sk_sp GrAtlasTextOp::setupDfProcessor(const SkMatrix& viewM GrDistanceFieldLCDTextGeoProc::DistanceAdjust::Make( redCorrection, greenCorrection, blueCorrection); - return GrDistanceFieldLCDTextGeoProc::Make(color, viewMatrix, std::move(proxy), - params, widthAdjust, flags, - this->usesLocalCoords()); + return GrDistanceFieldLCDTextGeoProc::Make(color, viewMatrix, std::move(proxy), params, + widthAdjust, flags, this->usesLocalCoords()); } else { #ifdef SK_GAMMA_APPLY_TO_A8 float correction = 0; @@ -250,10 +258,8 @@ sk_sp GrAtlasTextOp::setupDfProcessor(const SkMatrix& viewM correction = fDistanceAdjustTable->getAdjustment(lum >> kDistanceAdjustLumShift, fUseGammaCorrectDistanceTable); } - return GrDistanceFieldA8TextGeoProc::Make(color, - viewMatrix, std::move(proxy), - params, correction, flags, - this->usesLocalCoords()); + return GrDistanceFieldA8TextGeoProc::Make(color, viewMatrix, std::move(proxy), params, + correction, flags, this->usesLocalCoords()); #else return GrDistanceFieldA8TextGeoProc::Make(color, viewMatrix, std::move(proxy), diff --git a/src/gpu/ops/GrAtlasTextOp.h b/src/gpu/ops/GrAtlasTextOp.h index 24166a19d9..449f1fa0ab 100644 --- a/src/gpu/ops/GrAtlasTextOp.h +++ b/src/gpu/ops/GrAtlasTextOp.h @@ -9,11 +9,10 @@ #define GrAtlasTextOp_DEFINED #include "ops/GrMeshDrawOp.h" - #include "text/GrAtlasTextContext.h" #include "text/GrDistanceFieldAdjustTable.h" -class GrAtlasTextOp final : public GrLegacyMeshDrawOp { +class GrAtlasTextOp final : public GrMeshDrawOp { public: DEFINE_OP_CLASS_ID @@ -37,9 +36,9 @@ public: GrColor fColor; }; - static std::unique_ptr MakeBitmap(GrMaskFormat maskFormat, int glyphCount, - GrAtlasGlyphCache* fontCache) { - std::unique_ptr op(new GrAtlasTextOp); + static std::unique_ptr MakeBitmap(GrPaint&& paint, GrMaskFormat maskFormat, + int glyphCount, GrAtlasGlyphCache* fontCache) { + std::unique_ptr op(new GrAtlasTextOp(std::move(paint))); op->fFontCache = fontCache; switch (maskFormat) { @@ -61,11 +60,11 @@ public: } static std::unique_ptr MakeDistanceField( - int glyphCount, GrAtlasGlyphCache* fontCache, + GrPaint&& paint, int glyphCount, GrAtlasGlyphCache* fontCache, const GrDistanceFieldAdjustTable* distanceAdjustTable, bool useGammaCorrectDistanceTable, SkColor luminanceColor, bool isLCD, bool useBGR, bool isAntiAliased) { - std::unique_ptr op(new GrAtlasTextOp); + std::unique_ptr op(new GrAtlasTextOp(std::move(paint))); op->fFontCache = fontCache; op->fMaskType = !isAntiAliased ? kAliasedDistanceField_MaskType @@ -100,23 +99,28 @@ public: SkString dumpInfo() const override; + FixedFunctionFlags fixedFunctionFlags() const override; + + RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override; + private: - void getProcessorAnalysisInputs(GrProcessorAnalysisColor*, - GrProcessorAnalysisCoverage*) const override; - void applyPipelineOptimizations(const PipelineOptimizations&) override; + GrAtlasTextOp(GrPaint&& paint) + : INHERITED(ClassID()) + , fColor(paint.getColor()) + , fSRGBFlags(GrPipeline::SRGBFlagsFromPaint(paint)) + , fProcessors(std::move(paint)) {} struct FlushInfo { sk_sp fVertexBuffer; sk_sp fIndexBuffer; sk_sp fGeometryProcessor; + const GrPipeline* fPipeline; int fGlyphsToFlush; int fVertexOffset; }; void onPrepareDraws(Target* target) const override; - GrAtlasTextOp() : INHERITED(ClassID()) {} // initialized in factory functions. - GrMaskFormat maskFormat() const { switch (fMaskType) { case kLCDCoverageMask_MaskType: @@ -159,14 +163,9 @@ private: sk_sp setupDfProcessor(const SkMatrix& viewMatrix, SkColor luminanceColor, GrColor color, sk_sp proxy) const; - GrColor fColor; - bool fUsesLocalCoords; - int fNumGlyphs; // The minimum number of Geometry we will try to allocate. enum { kMinGeometryAllocated = 4 }; - SkAutoSTMalloc fGeoData; - int fGeoCount; enum MaskType { kGrayscaleCoverageMask_MaskType, @@ -176,10 +175,18 @@ private: kGrayscaleDistanceField_MaskType, kLCDDistanceField_MaskType, kLCDBGRDistanceField_MaskType, - } fMaskType; + }; + SkAutoSTMalloc fGeoData; + GrColor fColor; + uint32_t fSRGBFlags; + GrProcessorSet fProcessors; + bool fUsesLocalCoords; + bool fCanCombineOnTouchOrOverlap; + int fGeoCount; + int fNumGlyphs; + MaskType fMaskType; GrAtlasGlyphCache* fFontCache; - // Distance field properties sk_sp fDistanceAdjustTable; SkColor fLuminanceColor; @@ -187,7 +194,7 @@ private: friend class GrBlobRegenHelper; // Needs to trigger flushes - typedef GrLegacyMeshDrawOp INHERITED; + typedef GrMeshDrawOp INHERITED; }; /* diff --git a/src/gpu/text/GrAtlasTextBlob.cpp b/src/gpu/text/GrAtlasTextBlob.cpp index 10b1c81639..835105b4d2 100644 --- a/src/gpu/text/GrAtlasTextBlob.cpp +++ b/src/gpu/text/GrAtlasTextBlob.cpp @@ -257,22 +257,26 @@ bool GrAtlasTextBlob::mustRegenerate(const GrTextUtils::Paint& paint, return false; } -inline std::unique_ptr GrAtlasTextBlob::makeOp( +inline std::unique_ptr GrAtlasTextBlob::makeOp( const Run::SubRunInfo& info, int glyphCount, int run, int subRun, const SkMatrix& viewMatrix, SkScalar x, SkScalar y, const GrTextUtils::Paint& paint, const SkSurfaceProps& props, const GrDistanceFieldAdjustTable* distanceAdjustTable, - bool useGammaCorrectDistanceTable, GrAtlasGlyphCache* cache) { + GrAtlasGlyphCache* cache, GrRenderTargetContext* renderTargetContext) { GrMaskFormat format = info.maskFormat(); + GrPaint grPaint; + if (!paint.toGrPaint(info.maskFormat(), renderTargetContext, viewMatrix, &grPaint)) { + return nullptr; + } std::unique_ptr op; if (info.drawAsDistanceFields()) { - SkColor luminanceColor = paint.luminanceColor(); bool useBGR = SkPixelGeometryIsBGR(props.pixelGeometry()); - op = GrAtlasTextOp::MakeDistanceField(glyphCount, cache, distanceAdjustTable, - useGammaCorrectDistanceTable, luminanceColor, - info.hasUseLCDText(), useBGR, info.isAntiAliased()); + op = GrAtlasTextOp::MakeDistanceField( + std::move(grPaint), glyphCount, cache, distanceAdjustTable, + renderTargetContext->isGammaCorrect(), paint.luminanceColor(), info.hasUseLCDText(), + useBGR, info.isAntiAliased()); } else { - op = GrAtlasTextOp::MakeBitmap(format, glyphCount, cache); + op = GrAtlasTextOp::MakeBitmap(std::move(grPaint), format, glyphCount, cache); } GrAtlasTextOp::Geometry& geometry = op->geometry(); geometry.fViewMatrix = viewMatrix; @@ -284,7 +288,6 @@ inline std::unique_ptr GrAtlasTextBlob::makeOp( geometry.fX = x; geometry.fY = y; op->init(); - return std::move(op); } @@ -304,13 +307,11 @@ inline void GrAtlasTextBlob::flushRun(GrRenderTargetContext* rtc, const GrClip& if (0 == glyphCount) { continue; } - - std::unique_ptr op( - this->makeOp(info, glyphCount, run, subRun, viewMatrix, x, y, paint, props, - distanceAdjustTable, rtc->isGammaCorrect(), cache)); - GrPipelineBuilder pipelineBuilder(std::move(grPaint), GrAAType::kNone); - - rtc->addLegacyMeshDrawOp(std::move(pipelineBuilder), clip, std::move(op)); + auto op = this->makeOp(info, glyphCount, run, subRun, viewMatrix, x, y, std::move(paint), + props, distanceAdjustTable, cache, rtc); + if (op) { + rtc->addDrawOp(clip, std::move(op)); + } } } @@ -425,13 +426,14 @@ void GrAtlasTextBlob::flushThrowaway(GrContext* context, GrRenderTargetContext* this->flushBigGlyphs(context, rtc, clip, paint, viewMatrix, x, y, clipBounds); } -std::unique_ptr GrAtlasTextBlob::test_makeOp( +std::unique_ptr GrAtlasTextBlob::test_makeOp( int glyphCount, int run, int subRun, const SkMatrix& viewMatrix, SkScalar x, SkScalar y, const GrTextUtils::Paint& paint, const SkSurfaceProps& props, - const GrDistanceFieldAdjustTable* distanceAdjustTable, GrAtlasGlyphCache* cache) { + const GrDistanceFieldAdjustTable* distanceAdjustTable, GrAtlasGlyphCache* cache, + GrRenderTargetContext* rtc) { const GrAtlasTextBlob::Run::SubRunInfo& info = fRuns[run].fSubRunInfo[subRun]; return this->makeOp(info, glyphCount, run, subRun, viewMatrix, x, y, paint, props, - distanceAdjustTable, false, cache); + distanceAdjustTable, cache, rtc); } void GrAtlasTextBlob::AssertEqual(const GrAtlasTextBlob& l, const GrAtlasTextBlob& r) { diff --git a/src/gpu/text/GrAtlasTextBlob.h b/src/gpu/text/GrAtlasTextBlob.h index 12fe68b948..1bce3414da 100644 --- a/src/gpu/text/GrAtlasTextBlob.h +++ b/src/gpu/text/GrAtlasTextBlob.h @@ -271,10 +271,11 @@ public: //////////////////////////////////////////////////////////////////////////////////////////////// // Internal test methods - std::unique_ptr test_makeOp( - int glyphCount, int run, int subRun, const SkMatrix& viewMatrix, SkScalar x, SkScalar y, - const GrTextUtils::Paint& paint, const SkSurfaceProps& props, - const GrDistanceFieldAdjustTable* distanceAdjustTable, GrAtlasGlyphCache* cache); + std::unique_ptr test_makeOp(int glyphCount, int run, int subRun, + const SkMatrix& viewMatrix, SkScalar x, SkScalar y, + const GrTextUtils::Paint&, const SkSurfaceProps&, + const GrDistanceFieldAdjustTable*, GrAtlasGlyphCache*, + GrRenderTargetContext*); private: GrAtlasTextBlob() @@ -497,11 +498,12 @@ private: Run* run, Run::SubRunInfo* info, SkAutoGlyphCache*, int glyphCount, size_t vertexStride, GrColor color, SkScalar transX, SkScalar transY) const; - inline std::unique_ptr makeOp( - const Run::SubRunInfo& info, int glyphCount, int run, int subRun, - const SkMatrix& viewMatrix, SkScalar x, SkScalar y, const GrTextUtils::Paint& paint, - const SkSurfaceProps& props, const GrDistanceFieldAdjustTable* distanceAdjustTable, - bool useGammaCorrectDistanceTable, GrAtlasGlyphCache* cache); + inline std::unique_ptr makeOp(const Run::SubRunInfo& info, int glyphCount, int run, + int subRun, const SkMatrix& viewMatrix, SkScalar x, + SkScalar y, const GrTextUtils::Paint& paint, + const SkSurfaceProps& props, + const GrDistanceFieldAdjustTable* distanceAdjustTable, + GrAtlasGlyphCache* cache, GrRenderTargetContext*); struct BigGlyph { BigGlyph(const SkPath& path, SkScalar vx, SkScalar vy, SkScalar scale, bool treatAsBMP) diff --git a/src/gpu/text/GrAtlasTextContext.cpp b/src/gpu/text/GrAtlasTextContext.cpp index 71c410eab7..22228ed2b6 100644 --- a/src/gpu/text/GrAtlasTextContext.cpp +++ b/src/gpu/text/GrAtlasTextContext.cpp @@ -339,7 +339,7 @@ void GrAtlasTextContext::drawPosText(GrContext* context, GrRenderTargetContext* #if GR_TEST_UTILS -GR_LEGACY_MESH_DRAW_OP_TEST_DEFINE(TextBlobOp) { +GR_DRAW_OP_TEST_DEFINE(GrAtlasTextOp) { static uint32_t gContextID = SK_InvalidGenID; static GrAtlasTextContext* gTextContext = nullptr; static SkSurfaceProps gSurfaceProps(SkSurfaceProps::kLegacyFontHost_InitType); @@ -356,11 +356,15 @@ GR_LEGACY_MESH_DRAW_OP_TEST_DEFINE(TextBlobOp) { SkBackingFit::kApprox, 1024, 1024, kRGBA_8888_GrPixelConfig, nullptr)); SkMatrix viewMatrix = GrTest::TestMatrixInvertible(random); + + // Because we the GrTextUtils::Paint requires an SkPaint for font info, we ignore the GrPaint + // param. SkPaint skPaint; skPaint.setColor(random->nextU()); skPaint.setLCDRenderText(random->nextBool()); skPaint.setAntiAlias(skPaint.isLCDRenderText() ? true : random->nextBool()); skPaint.setSubpixelText(random->nextBool()); + GrTextUtils::Paint utilsPaint(&skPaint, rtc->getColorSpace(), rtc->getColorXformFromSRGB()); const char* text = "The quick brown fox jumps over the lazy dog."; int textLen = (int)strlen(text); @@ -374,17 +378,17 @@ GR_LEGACY_MESH_DRAW_OP_TEST_DEFINE(TextBlobOp) { SkScalar x = SkIntToScalar(xInt); SkScalar y = SkIntToScalar(yInt); - GrTextUtils::Paint paint(&skPaint, rtc->getColorSpace(), rtc->getColorXformFromSRGB()); // right now we don't handle textblobs, nor do we handle drawPosText. Since we only intend to // test the text op with this unit test, that is okay. sk_sp blob(GrAtlasTextContext::MakeDrawTextBlob( context->getTextBlobCache(), context->getAtlasGlyphCache(), - *context->caps()->shaderCaps(), paint, + *context->caps()->shaderCaps(), utilsPaint, GrAtlasTextContext::kTextBlobOpScalerContextFlags, viewMatrix, gSurfaceProps, text, static_cast(textLen), x, y)); - return blob->test_makeOp(textLen, 0, 0, viewMatrix, x, y, paint, gSurfaceProps, - gTextContext->dfAdjustTable(), context->getAtlasGlyphCache()); + return blob->test_makeOp(textLen, 0, 0, viewMatrix, x, y, utilsPaint, gSurfaceProps, + gTextContext->dfAdjustTable(), context->getAtlasGlyphCache(), + rtc.get()); } #endif diff --git a/src/gpu/text/GrAtlasTextContext.h b/src/gpu/text/GrAtlasTextContext.h index e375195cde..c47ec65666 100644 --- a/src/gpu/text/GrAtlasTextContext.h +++ b/src/gpu/text/GrAtlasTextContext.h @@ -89,7 +89,7 @@ private: #if GR_TEST_UTILS static const uint32_t kTextBlobOpScalerContextFlags = SkPaint::kFakeGammaAndBoostContrast_ScalerContextFlags; - GR_LEGACY_MESH_DRAW_OP_TEST_FRIEND(TextBlobOp); + GR_DRAW_OP_TEST_FRIEND(GrAtlasTextOp); #endif }; diff --git a/tools/gpu/GrTest.cpp b/tools/gpu/GrTest.cpp index 727c16990b..0265f6ef3d 100644 --- a/tools/gpu/GrTest.cpp +++ b/tools/gpu/GrTest.cpp @@ -314,7 +314,6 @@ void GrDrawingManager::testingOnly_removeOnFlushCallbackObject(GrOnFlushCallback #define DRAW_OP_TEST_ENTRY(Op) Op##__Test LEGACY_MESH_DRAW_OP_TEST_EXTERN(AnalyticRectOp); -LEGACY_MESH_DRAW_OP_TEST_EXTERN(TextBlobOp); DRAW_OP_TEST_EXTERN(AAConvexPathOp); DRAW_OP_TEST_EXTERN(AAFillRectOp); @@ -326,6 +325,7 @@ DRAW_OP_TEST_EXTERN(DashOp); DRAW_OP_TEST_EXTERN(DefaultPathOp); DRAW_OP_TEST_EXTERN(DIEllipseOp); DRAW_OP_TEST_EXTERN(EllipseOp); +DRAW_OP_TEST_EXTERN(GrAtlasTextOp); DRAW_OP_TEST_EXTERN(GrDrawAtlasOp); DRAW_OP_TEST_EXTERN(GrDrawVerticesOp); DRAW_OP_TEST_EXTERN(NonAAFillRectOp); @@ -342,7 +342,6 @@ void GrDrawRandomOp(SkRandom* random, GrRenderTargetContext* renderTargetContext using MakeTestLegacyMeshDrawOpFn = std::unique_ptr(SkRandom*, GrContext*); static constexpr MakeTestLegacyMeshDrawOpFn* gLegacyFactories[] = { DRAW_OP_TEST_ENTRY(AnalyticRectOp), - DRAW_OP_TEST_ENTRY(TextBlobOp), }; using MakeDrawOpFn = std::unique_ptr(GrPaint&&, SkRandom*, GrContext*, GrFSAAType); @@ -357,6 +356,7 @@ void GrDrawRandomOp(SkRandom* random, GrRenderTargetContext* renderTargetContext DRAW_OP_TEST_ENTRY(DefaultPathOp), DRAW_OP_TEST_ENTRY(DIEllipseOp), DRAW_OP_TEST_ENTRY(EllipseOp), + DRAW_OP_TEST_ENTRY(GrAtlasTextOp), DRAW_OP_TEST_ENTRY(GrDrawAtlasOp), DRAW_OP_TEST_ENTRY(GrDrawVerticesOp), DRAW_OP_TEST_ENTRY(NonAAFillRectOp), diff --git a/whitespace.txt b/whitespace.txt index f9ffb83f21..e08b3f9cfa 100644 --- a/whitespace.txt +++ b/whitespace.txt @@ -1,7 +1,7 @@ You can modify this file to create no-op changelists (like this one). I LOVE W H I T E S P A C E! Python also loves\n\twhitespace.¯\_(ツ)_/¯ - + Lithp. Use the Forth. Life is a mistry. Everyone must WAKA WAKA WAKA -- cgit v1.2.3