From cd2c3f9055452d413d6be7ea6dc63fd1922fe994 Mon Sep 17 00:00:00 2001 From: Greg Daniel Date: Thu, 7 Jun 2018 15:07:50 -0400 Subject: Require mips to be allocated at texture creation time and disable late allocations. If we get a non-mipped texture for a draw that wants to be use mip map filter, we will copy the texture into a new mipped texture. Clean up of unused code in the GPU backends for reallocating for mips will be done in a follow up CL. Bug: skia: Change-Id: Idab588c1abf4bbbf7eeceb3727d500e5df274188 Reviewed-on: https://skia-review.googlesource.com/132830 Reviewed-by: Brian Salomon Commit-Queue: Greg Daniel --- tests/GrTextureMipMapInvalidationTest.cpp | 50 +++++++++++++++++-------------- 1 file changed, 27 insertions(+), 23 deletions(-) (limited to 'tests/GrTextureMipMapInvalidationTest.cpp') diff --git a/tests/GrTextureMipMapInvalidationTest.cpp b/tests/GrTextureMipMapInvalidationTest.cpp index d832889144..8da79c9565 100644 --- a/tests/GrTextureMipMapInvalidationTest.cpp +++ b/tests/GrTextureMipMapInvalidationTest.cpp @@ -27,27 +27,31 @@ DEF_GPUTEST_FOR_NULLGL_CONTEXT(GrTextureMipMapInvalidationTest, reporter, ctxInf GrContext* context = ctxInfo.grContext(); auto info = SkImageInfo::MakeN32Premul(256, 256); - auto surf1 = SkSurface::MakeRenderTarget(context, SkBudgeted::kYes, info); - auto surf2 = SkSurface::MakeRenderTarget(context, SkBudgeted::kYes, info); - // Draw something just in case we ever had a solid color optimization - surf1->getCanvas()->drawCircle(128, 128, 50, SkPaint()); - surf1->getCanvas()->flush(); - - // No mipmaps initially - REPORTER_ASSERT(reporter, !isMipped(surf1.get())); - - // Painting with downscale and medium filter quality should result in mipmap creation - SkPaint paint; - paint.setFilterQuality(kMedium_SkFilterQuality); - surf2->getCanvas()->scale(0.2f, 0.2f); - surf2->getCanvas()->drawImage(surf1->makeImageSnapshot(), 0, 0, &paint); - surf2->getCanvas()->flush(); - REPORTER_ASSERT(reporter, isMipped(surf1.get())); - REPORTER_ASSERT(reporter, !mipsAreDirty(surf1.get())); - - // Changing the contents of the surface should invalidate the mipmap, but not de-allocate - surf1->getCanvas()->drawCircle(128, 128, 100, SkPaint()); - surf1->getCanvas()->flush(); - REPORTER_ASSERT(reporter, isMipped(surf1.get())); - REPORTER_ASSERT(reporter, mipsAreDirty(surf1.get())); + for (auto allocateMips : {false, true}) { + auto surf1 = SkSurface::MakeRenderTarget(context, SkBudgeted::kYes, info, 0, + kBottomLeft_GrSurfaceOrigin, nullptr, + allocateMips); + auto surf2 = SkSurface::MakeRenderTarget(context, SkBudgeted::kYes, info); + // Draw something just in case we ever had a solid color optimization + surf1->getCanvas()->drawCircle(128, 128, 50, SkPaint()); + surf1->getCanvas()->flush(); + + // No mipmaps initially + REPORTER_ASSERT(reporter, isMipped(surf1.get()) == allocateMips); + + // Painting with downscale and medium filter quality should result in mipmap creation + SkPaint paint; + paint.setFilterQuality(kMedium_SkFilterQuality); + surf2->getCanvas()->scale(0.2f, 0.2f); + surf2->getCanvas()->drawImage(surf1->makeImageSnapshot(), 0, 0, &paint); + surf2->getCanvas()->flush(); + REPORTER_ASSERT(reporter, isMipped(surf1.get()) == allocateMips); + REPORTER_ASSERT(reporter, !allocateMips || !mipsAreDirty(surf1.get())); + + // Changing the contents of the surface should invalidate the mipmap, but not de-allocate + surf1->getCanvas()->drawCircle(128, 128, 100, SkPaint()); + surf1->getCanvas()->flush(); + REPORTER_ASSERT(reporter, isMipped(surf1.get()) == allocateMips); + REPORTER_ASSERT(reporter, mipsAreDirty(surf1.get())); + } } -- cgit v1.2.3