Remove GrBitmapTextureMaker.
Replace with two methods in SkGr.h that make cached/uncached texture
proxies from SkBitmap. Move code that makes a GrFP from the proxy
to SkImage_Raster::asFragmentProcessor.
Bug: skia:11877
Change-Id: I51a0ae687561be9b0e44b98ee50f171e42476d94
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/401920
Reviewed-by: Robert Phillips <robertphillips@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/gm/dsl_processor_test.cpp b/gm/dsl_processor_test.cpp
index b7cfad0..6a960ed 100644
--- a/gm/dsl_processor_test.cpp
+++ b/gm/dsl_processor_test.cpp
@@ -8,7 +8,6 @@
#include "gm/gm.h"
#include "include/core/SkFont.h"
#include "include/effects/SkRuntimeEffect.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
#include "src/gpu/ops/GrFillRectOp.h"
diff --git a/gm/fp_sample_chaining.cpp b/gm/fp_sample_chaining.cpp
index 38e9b1d..2d99da6 100644
--- a/gm/fp_sample_chaining.cpp
+++ b/gm/fp_sample_chaining.cpp
@@ -8,8 +8,8 @@
#include "gm/gm.h"
#include "include/core/SkFont.h"
#include "include/effects/SkRuntimeEffect.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrDirectContextPriv.h"
+#include "src/gpu/SkGr.h"
#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
#include "src/gpu/ops/GrFillRectOp.h"
#include "tools/ToolUtils.h"
@@ -214,7 +214,6 @@
DEF_SIMPLE_GPU_GM(fp_sample_chaining, ctx, rtCtx, canvas, 380, 306) {
SkBitmap bmp = make_test_bitmap();
- GrBitmapTextureMaker maker(ctx, bmp, GrImageTexGenPolicy::kDraw);
int x = 10, y = 10;
auto nextCol = [&] { x += (64 + 10); };
@@ -227,8 +226,8 @@
#if 0
auto fp = std::unique_ptr<GrFragmentProcessor>(new TestPatternEffect());
#else
- auto view = maker.view(GrMipmapped::kNo);
- auto fp = GrTextureEffect::Make(std::move(view), maker.alphaType());
+ auto view = std::get<0>(GrMakeCachedBitmapProxyView(ctx, bmp, GrMipmapped::kNo));
+ auto fp = GrTextureEffect::Make(std::move(view), bmp.alphaType());
#endif
for (EffectType effectType : effects) {
fp = wrap(std::move(fp), effectType);
diff --git a/gm/fpcoordinateoverride.cpp b/gm/fpcoordinateoverride.cpp
index e86d2e7..494942b 100644
--- a/gm/fpcoordinateoverride.cpp
+++ b/gm/fpcoordinateoverride.cpp
@@ -17,11 +17,11 @@
#include "include/core/SkString.h"
#include "include/core/SkTileMode.h"
#include "include/core/SkTypes.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrCaps.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrFragmentProcessor.h"
#include "src/gpu/GrSurfaceDrawContext.h"
+#include "src/gpu/SkGr.h"
#include "src/gpu/effects/GrRRectEffect.h"
#include "src/gpu/effects/GrSkSLFP.h"
#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
@@ -77,8 +77,7 @@
SkBitmap bmp;
GetResourceAsBitmap("images/mandrill_512_q075.jpg", &bmp);
- GrBitmapTextureMaker maker(ctx, bmp, GrImageTexGenPolicy::kDraw);
- auto view = maker.view(GrMipmapped::kNo);
+ auto view = std::get<0>(GrMakeCachedBitmapProxyView(ctx, bmp, GrMipmapped::kNo));
if (!view) {
return;
}
diff --git a/gm/sample_matrix_constant.cpp b/gm/sample_matrix_constant.cpp
index 5c55fb7..2e4b1c9 100644
--- a/gm/sample_matrix_constant.cpp
+++ b/gm/sample_matrix_constant.cpp
@@ -8,8 +8,8 @@
#include "gm/gm.h"
#include "include/effects/SkGradientShader.h"
#include "src/core/SkMatrixProvider.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrDirectContextPriv.h"
+#include "src/gpu/SkGr.h"
#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
#include "src/gpu/ops/GrFillRectOp.h"
#include "tools/Resources.h"
@@ -77,14 +77,12 @@
{
SkBitmap bmp;
GetResourceAsBitmap("images/mandrill_256.png", &bmp);
- GrBitmapTextureMaker maker(ctx, bmp, GrImageTexGenPolicy::kDraw);
- auto view = maker.view(GrMipmapped::kNo);
- std::unique_ptr<GrFragmentProcessor> imgFP =
- GrTextureEffect::Make(std::move(view), bmp.alphaType(), SkMatrix());
+ auto [view, ct] = GrMakeCachedBitmapProxyView(ctx, bmp, GrMipmapped::kNo);
+ std::unique_ptr<GrFragmentProcessor> imgFP = GrTextureEffect::Make(view,
+ bmp.alphaType(),
+ SkMatrix());
draw(std::move(imgFP), 0, 0);
- view = maker.view(GrMipmapped::kNo);
- imgFP =
- GrTextureEffect::Make(std::move(view), bmp.alphaType(), SkMatrix());
+ imgFP = GrTextureEffect::Make(std::move(view), bmp.alphaType(), SkMatrix());
draw2(std::move(imgFP), 256, 0);
}
diff --git a/gm/sample_matrix_variable.cpp b/gm/sample_matrix_variable.cpp
index 423222c..111518d 100644
--- a/gm/sample_matrix_variable.cpp
+++ b/gm/sample_matrix_variable.cpp
@@ -8,8 +8,8 @@
#include "gm/gm.h"
#include "include/effects/SkGradientShader.h"
#include "src/core/SkMatrixProvider.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrDirectContextPriv.h"
+#include "src/gpu/SkGr.h"
#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
#include "src/gpu/ops/GrFillRectOp.h"
#include "tools/Resources.h"
@@ -79,8 +79,7 @@
{
SkBitmap bmp;
GetResourceAsBitmap("images/mandrill_256.png", &bmp);
- GrBitmapTextureMaker maker(ctx, bmp, GrImageTexGenPolicy::kDraw);
- auto view = maker.view(GrMipmapped::kNo);
+ auto view = std::get<0>(GrMakeCachedBitmapProxyView(ctx, bmp, GrMipmapped::kNo));
std::unique_ptr<GrFragmentProcessor> imgFP =
GrTextureEffect::Make(std::move(view), bmp.alphaType(), SkMatrix());
draw(std::move(imgFP), -128, 256, 0, 0);
diff --git a/gm/swizzle.cpp b/gm/swizzle.cpp
index de1db5c..644f276 100644
--- a/gm/swizzle.cpp
+++ b/gm/swizzle.cpp
@@ -11,10 +11,10 @@
#include "include/core/SkMatrix.h"
#include "include/core/SkRect.h"
#include "include/core/SkTypes.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrFragmentProcessor.h"
#include "src/gpu/GrSurfaceDrawContext.h"
+#include "src/gpu/SkGr.h"
#include "src/gpu/ops/GrFillRectOp.h"
#include "tools/Resources.h"
#include "tools/ToolUtils.h"
@@ -24,8 +24,7 @@
SkBitmap bmp;
GetResourceAsBitmap("images/mandrill_512_q075.jpg", &bmp);
- GrBitmapTextureMaker maker(ctx, bmp, GrImageTexGenPolicy::kDraw);
- auto view = maker.view(GrMipmapped::kNo);
+ auto view = std::get<0>(GrMakeCachedBitmapProxyView(ctx, bmp, GrMipmapped::kNo));
if (!view) {
return;
}
diff --git a/gm/texelsubset.cpp b/gm/texelsubset.cpp
index 24cbe21..d477fb7 100644
--- a/gm/texelsubset.cpp
+++ b/gm/texelsubset.cpp
@@ -16,15 +16,12 @@
#include "include/core/SkRect.h"
#include "include/core/SkSize.h"
#include "include/core/SkString.h"
-#include "include/effects/SkGradientShader.h"
-#include "include/private/GrTypesPriv.h"
#include "include/private/SkTArray.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrSamplerState.h"
#include "src/gpu/GrSurfaceDrawContext.h"
-#include "src/gpu/GrTextureProxy.h"
+#include "src/gpu/SkGr.h"
#include "tools/Resources.h"
#include "tools/gpu/TestOps.h"
@@ -92,8 +89,7 @@
if (mipmapped == GrMipmapped::kYes && !context->priv().caps()->mipmapSupport()) {
return DrawResult::kSkip;
}
- GrBitmapTextureMaker maker(context, fBitmap, GrImageTexGenPolicy::kDraw);
- auto view = maker.view(mipmapped);
+ auto view = std::get<0>(GrMakeCachedBitmapProxyView(context, fBitmap, mipmapped));
if (!view) {
*errorMsg = "Failed to create proxy.";
return DrawResult::kFail;
@@ -126,8 +122,7 @@
SkBitmap subsetBmp;
fBitmap.extractSubset(&subsetBmp, texelSubset);
subsetBmp.setImmutable();
- GrBitmapTextureMaker subsetMaker(context, subsetBmp, GrImageTexGenPolicy::kDraw);
- auto subsetView = subsetMaker.view(mipmapped);
+ auto subsetView = std::get<0>(GrMakeCachedBitmapProxyView(context, subsetBmp, mipmapped));
SkRect localRect = SkRect::Make(fBitmap.bounds()).makeOutset(kDrawPad, kDrawPad);
diff --git a/gm/yuvtorgbsubset.cpp b/gm/yuvtorgbsubset.cpp
index 04081c3..433aa1e 100644
--- a/gm/yuvtorgbsubset.cpp
+++ b/gm/yuvtorgbsubset.cpp
@@ -18,13 +18,12 @@
#include "include/core/SkString.h"
#include "include/core/SkYUVAInfo.h"
#include "include/core/SkYUVAPixmaps.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
-#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrPaint.h"
#include "src/gpu/GrSamplerState.h"
#include "src/gpu/GrSurfaceDrawContext.h"
#include "src/gpu/GrTextureProxy.h"
#include "src/gpu/GrYUVATextureProxies.h"
+#include "src/gpu/SkGr.h"
#include "src/gpu/effects/GrYUVtoRGBEffect.h"
#include <memory>
@@ -96,9 +95,7 @@
SkBitmap bitmap;
bitmap.installPixels(fPixmaps.plane(i));
bitmap.setImmutable();
- GrBitmapTextureMaker maker(
- context, bitmap, GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- views[i] = maker.view(GrMipmapped::kNo);
+ views[i] = std::get<0>(GrMakeCachedBitmapProxyView(context, bitmap, GrMipmapped::kNo));
if (!views[i]) {
*errorMsg = "Failed to create proxy";
return context->abandoned() ? DrawResult::kSkip : DrawResult::kFail;
diff --git a/gn/gpu.gni b/gn/gpu.gni
index b5b1cca..155055a 100644
--- a/gn/gpu.gni
+++ b/gn/gpu.gni
@@ -50,8 +50,6 @@
"$_src/gpu/GrBackendUtils.cpp",
"$_src/gpu/GrBackendUtils.h",
"$_src/gpu/GrBaseContextPriv.h",
- "$_src/gpu/GrBitmapTextureMaker.cpp",
- "$_src/gpu/GrBitmapTextureMaker.h",
"$_src/gpu/GrBlend.h",
"$_src/gpu/GrBlockAllocator.cpp",
"$_src/gpu/GrBlockAllocator.h",
diff --git a/src/core/SkSpecialImage.cpp b/src/core/SkSpecialImage.cpp
index cc6bb5f..b330c81 100644
--- a/src/core/SkSpecialImage.cpp
+++ b/src/core/SkSpecialImage.cpp
@@ -217,7 +217,7 @@
#if SK_SUPPORT_GPU
GrSurfaceProxyView onView(GrRecordingContext* context) const override {
if (context) {
- return GrMakeCachedBitmapProxyView(context, fBitmap);
+ return std::get<0>(GrMakeCachedBitmapProxyView(context, fBitmap, GrMipmapped::kNo));
}
return {};
diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp
index fb07f48..7fc5728 100644
--- a/src/effects/SkTableColorFilter.cpp
+++ b/src/effects/SkTableColorFilter.cpp
@@ -184,13 +184,13 @@
SkASSERT(kPremul_SkAlphaType == bitmap.alphaType());
SkASSERT(bitmap.isImmutable());
- auto view = GrMakeCachedBitmapProxyView(context, bitmap);
+ auto view = std::get<0>(GrMakeCachedBitmapProxyView(context, bitmap, GrMipmapped::kNo));
if (!view) {
return nullptr;
}
- return std::unique_ptr<GrFragmentProcessor>(
- new ColorTableEffect(std::move(inputFP), std::move(view)));
+ return std::unique_ptr<GrFragmentProcessor>(new ColorTableEffect(std::move(inputFP),
+ std::move(view)));
}
///////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/GrBitmapTextureMaker.cpp b/src/gpu/GrBitmapTextureMaker.cpp
deleted file mode 100644
index b9167cb..0000000
--- a/src/gpu/GrBitmapTextureMaker.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright 2016 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "src/gpu/GrBitmapTextureMaker.h"
-
-#include "include/core/SkBitmap.h"
-#include "include/core/SkPixelRef.h"
-#include "include/gpu/GrRecordingContext.h"
-#include "include/private/SkIDChangeListener.h"
-#include "src/gpu/GrGpuResourcePriv.h"
-#include "src/gpu/GrProxyProvider.h"
-#include "src/gpu/GrRecordingContextPriv.h"
-#include "src/gpu/GrSurfaceContext.h"
-#include "src/gpu/SkGr.h"
-
-static GrImageInfo get_image_info(GrRecordingContext* context, const SkBitmap& bitmap) {
- GrColorType ct = SkColorTypeToGrColorType(bitmap.info().colorType());
- GrBackendFormat format = context->priv().caps()->getDefaultBackendFormat(ct, GrRenderable::kNo);
- if (!format.isValid()) {
- ct = GrColorType::kRGBA_8888;
- }
- return {ct, bitmap.alphaType(), bitmap.refColorSpace(), bitmap.dimensions()};
-}
-
-GrBitmapTextureMaker::GrBitmapTextureMaker(GrRecordingContext* context,
- const SkBitmap& bitmap,
- SkBackingFit fit)
- : GrBitmapTextureMaker(context, bitmap, GrImageTexGenPolicy::kNew_Uncached_Budgeted, fit) {}
-
-GrBitmapTextureMaker::GrBitmapTextureMaker(GrRecordingContext* context,
- const SkBitmap& bitmap,
- GrImageTexGenPolicy cachePolicy)
- : GrBitmapTextureMaker(context, bitmap, cachePolicy, SkBackingFit::kExact) {}
-
-GrBitmapTextureMaker::GrBitmapTextureMaker(GrRecordingContext* context,
- const SkBitmap& bitmap,
- GrImageTexGenPolicy cachePolicy,
- SkBackingFit fit)
- : INHERITED(context, get_image_info(context, bitmap))
- , fBitmap(bitmap)
- , fFit(fit)
- , fBudgeted(cachePolicy == GrImageTexGenPolicy::kNew_Uncached_Unbudgeted
- ? SkBudgeted::kNo
- : SkBudgeted::kYes) {
- if (cachePolicy == GrImageTexGenPolicy::kDraw) {
- SkIPoint origin = bitmap.pixelRefOrigin();
- SkIRect subset = SkIRect::MakeXYWH(origin.fX, origin.fY, bitmap.width(),
- bitmap.height());
- GrMakeKeyFromImageID(&fKey, bitmap.pixelRef()->getGenerationID(), subset);
- }
-}
-
-GrSurfaceProxyView GrBitmapTextureMaker::refOriginalTextureProxyView(GrMipmapped mipMapped) {
- GrProxyProvider* proxyProvider = this->context()->priv().proxyProvider();
- sk_sp<GrTextureProxy> proxy;
- GrSwizzle swizzle;
-
- auto installKey = [&](GrTextureProxy* proxy) {
- auto listener = GrMakeUniqueKeyInvalidationListener(&fKey, proxyProvider->contextID());
- fBitmap.pixelRef()->addGenIDChangeListener(std::move(listener));
- proxyProvider->assignUniqueKeyToProxy(fKey, proxy);
- };
-
- if (fKey.isValid()) {
- proxy = proxyProvider->findOrCreateProxyByUniqueKey(fKey);
- if (proxy) {
- swizzle = this->context()->priv().caps()->getReadSwizzle(proxy->backendFormat(),
- this->colorType());
- if (mipMapped == GrMipmapped::kNo || proxy->mipmapped() == GrMipmapped::kYes) {
- return {std::move(proxy), kTopLeft_GrSurfaceOrigin, swizzle};
- }
- }
- }
-
- if (!proxy) {
- if (this->colorType() != SkColorTypeToGrColorType(fBitmap.info().colorType())) {
- SkASSERT(this->colorType() == GrColorType::kRGBA_8888);
- SkBitmap copy8888;
- if (!copy8888.tryAllocPixels(fBitmap.info().makeColorType(kRGBA_8888_SkColorType)) ||
- !fBitmap.readPixels(copy8888.pixmap())) {
- return {};
- }
- copy8888.setImmutable();
- proxy = proxyProvider->createProxyFromBitmap(copy8888, mipMapped, fFit, fBudgeted);
- } else {
- proxy = proxyProvider->createProxyFromBitmap(fBitmap, mipMapped, fFit, fBudgeted);
- }
- if (proxy) {
- swizzle = this->context()->priv().caps()->getReadSwizzle(proxy->backendFormat(),
- this->colorType());
- SkASSERT(mipMapped == GrMipmapped::kNo || proxy->mipmapped() == GrMipmapped::kYes);
- if (fKey.isValid()) {
- installKey(proxy.get());
- }
- return {std::move(proxy), kTopLeft_GrSurfaceOrigin, swizzle};
- }
- }
-
- if (proxy) {
- SkASSERT(mipMapped == GrMipmapped::kYes);
- SkASSERT(proxy->mipmapped() == GrMipmapped::kNo);
- SkASSERT(fKey.isValid());
- // We need a mipped proxy, but we found a proxy earlier that wasn't mipped. Thus we generate
- // a new mipped surface and copy the original proxy into the base layer. We will then let
- // the gpu generate the rest of the mips.
- auto mippedProxy = GrCopyBaseMipMapToTextureProxy(this->context(), proxy,
- kTopLeft_GrSurfaceOrigin);
- if (!mippedProxy) {
- // We failed to make a mipped proxy with the base copied into it. This could have
- // been from failure to make the proxy or failure to do the copy. Thus we will fall
- // back to just using the non mipped proxy; See skbug.com/7094.
- return {std::move(proxy), kTopLeft_GrSurfaceOrigin, swizzle};
- }
- // In this case we are stealing the key from the original proxy which should only happen
- // when we have just generated mipmaps for an originally unmipped proxy/texture. This
- // means that all future uses of the key will access the mipmapped version. The texture
- // backing the unmipped version will remain in the resource cache until the last texture
- // proxy referencing it is deleted at which time it too will be deleted or recycled.
- SkASSERT(proxy->getUniqueKey() == fKey);
- proxyProvider->removeUniqueKeyFromProxy(proxy.get());
- installKey(mippedProxy->asTextureProxy());
- return {std::move(mippedProxy), kTopLeft_GrSurfaceOrigin, swizzle};
- }
- return {};
-}
diff --git a/src/gpu/GrBitmapTextureMaker.h b/src/gpu/GrBitmapTextureMaker.h
deleted file mode 100644
index ae6ff1b..0000000
--- a/src/gpu/GrBitmapTextureMaker.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2016 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef GrBitmapTextureMaker_DEFINED
-#define GrBitmapTextureMaker_DEFINED
-
-#include "include/core/SkBitmap.h"
-#include "src/gpu/GrTextureMaker.h"
-#include "src/gpu/SkGr.h"
-
-/** This class manages the conversion of SW-backed bitmaps to GrTextures. If the input bitmap is
- non-volatile the texture is cached using a key created from the pixels' image id and the
- subset of the pixelref specified by the bitmap. */
-class GrBitmapTextureMaker final : public GrTextureMaker {
-public:
- GrBitmapTextureMaker(GrRecordingContext*, const SkBitmap&, GrImageTexGenPolicy);
-
- // Always uncached-budgeted. It doesn't make sense to have kApprox cached textures. Moreover,we
- // create kApprox textures intermediate buffers and those ought to be budgeted.
- GrBitmapTextureMaker(GrRecordingContext*, const SkBitmap&, SkBackingFit);
-
-private:
- GrBitmapTextureMaker(GrRecordingContext*, const SkBitmap&, GrImageTexGenPolicy, SkBackingFit);
-
- GrSurfaceProxyView refOriginalTextureProxyView(GrMipmapped) override;
-
- const SkBitmap fBitmap;
- const SkBackingFit fFit;
- const SkBudgeted fBudgeted;
- GrUniqueKey fKey;
-
- using INHERITED = GrTextureMaker;
-};
-
-#endif
diff --git a/src/gpu/GrBlurUtils.cpp b/src/gpu/GrBlurUtils.cpp
index d5ac783..ebf8b28 100644
--- a/src/gpu/GrBlurUtils.cpp
+++ b/src/gpu/GrBlurUtils.cpp
@@ -9,7 +9,6 @@
#include "include/gpu/GrDirectContext.h"
#include "include/gpu/GrRecordingContext.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrCaps.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrFixedClip.h"
@@ -20,6 +19,7 @@
#include "src/gpu/GrSurfaceDrawContext.h"
#include "src/gpu/GrTextureProxy.h"
#include "src/gpu/GrThreadSafeCache.h"
+#include "src/gpu/SkGr.h"
#include "src/gpu/effects/GrTextureEffect.h"
#include "src/gpu/geometry/GrStyledShape.h"
@@ -157,9 +157,12 @@
}
bm.setImmutable();
- GrBitmapTextureMaker maker(rContext, bm, SkBackingFit::kApprox);
- filteredMaskView = maker.view(GrMipmapped::kNo);
- if (!filteredMaskView.proxy()) {
+ std::tie(filteredMaskView, std::ignore) = GrMakeUncachedBitmapProxyView(
+ rContext,
+ bm,
+ GrMipmapped::kNo,
+ SkBackingFit::kApprox);
+ if (!filteredMaskView) {
return {};
}
diff --git a/src/gpu/GrSWMaskHelper.cpp b/src/gpu/GrSWMaskHelper.cpp
index d477534..22df7e7 100644
--- a/src/gpu/GrSWMaskHelper.cpp
+++ b/src/gpu/GrSWMaskHelper.cpp
@@ -9,12 +9,12 @@
#include "include/gpu/GrRecordingContext.h"
#include "src/core/SkMatrixProvider.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrCaps.h"
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrSurfaceContext.h"
#include "src/gpu/GrTextureProxy.h"
+#include "src/gpu/SkGr.h"
#include "src/gpu/geometry/GrStyledShape.h"
/*
@@ -145,7 +145,7 @@
return true;
}
-GrSurfaceProxyView GrSWMaskHelper::toTextureView(GrRecordingContext* context, SkBackingFit fit) {
+GrSurfaceProxyView GrSWMaskHelper::toTextureView(GrRecordingContext* rContext, SkBackingFit fit) {
SkImageInfo ii = SkImageInfo::MakeA8(fPixels->width(), fPixels->height());
size_t rowBytes = fPixels->rowBytes();
@@ -155,6 +155,5 @@
nullptr));
bitmap.setImmutable();
- GrBitmapTextureMaker maker(context, bitmap, fit);
- return maker.view(GrMipmapped::kNo);
+ return std::get<0>(GrMakeUncachedBitmapProxyView(rContext, bitmap, GrMipmapped::kNo, fit));
}
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index 41fb174..8fea05f 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -30,7 +30,6 @@
#include "src/core/SkStroke.h"
#include "src/core/SkTLazy.h"
#include "src/core/SkVerticesPriv.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrBlurUtils.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrGpu.h"
@@ -666,7 +665,7 @@
sk_sp<SkSpecialImage> SkGpuDevice::makeSpecial(const SkBitmap& bitmap) {
// TODO: this makes a tight copy of 'bitmap' but it doesn't have to be (given SkSpecialImage's
// semantics). Since this is cached we would have to bake the fit into the cache key though.
- auto view = GrMakeCachedBitmapProxyView(fContext.get(), bitmap);
+ auto view = std::get<0>(GrMakeCachedBitmapProxyView(fContext.get(), bitmap));
if (!view) {
return nullptr;
}
diff --git a/src/gpu/SkGpuDevice.h b/src/gpu/SkGpuDevice.h
index e6ee5fb..e62fc3c 100644
--- a/src/gpu/SkGpuDevice.h
+++ b/src/gpu/SkGpuDevice.h
@@ -16,11 +16,6 @@
#include "src/gpu/GrSurfaceDrawContext.h"
#include "src/gpu/SkGr.h"
-class GrAccelData;
-class GrTextureMaker;
-class GrTextureProducer;
-struct GrCachedLayer;
-
class SkSpecialImage;
class SkSurface;
class SkVertices;
diff --git a/src/gpu/SkGpuDevice_drawTexture.cpp b/src/gpu/SkGpuDevice_drawTexture.cpp
index d12c3ab..088bacd 100644
--- a/src/gpu/SkGpuDevice_drawTexture.cpp
+++ b/src/gpu/SkGpuDevice_drawTexture.cpp
@@ -14,7 +14,6 @@
#include "src/core/SkImagePriv.h"
#include "src/core/SkMaskFilterBase.h"
#include "src/core/SkSpecialImage.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrBlurUtils.h"
#include "src/gpu/GrCaps.h"
#include "src/gpu/GrColorSpaceXform.h"
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
index 69177da..7a593bb 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -13,7 +13,6 @@
#include "include/core/SkPixelRef.h"
#include "include/effects/SkRuntimeEffect.h"
#include "include/gpu/GrRecordingContext.h"
-#include "include/gpu/GrTypes.h"
#include "include/private/SkIDChangeListener.h"
#include "include/private/SkImageInfoPriv.h"
#include "include/private/SkTPin.h"
@@ -29,8 +28,8 @@
#include "src/core/SkPaintPriv.h"
#include "src/core/SkResourceCache.h"
#include "src/core/SkTraceEvent.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrCaps.h"
+#include "src/gpu/GrColorInfo.h"
#include "src/gpu/GrColorSpaceXform.h"
#include "src/gpu/GrGpuResourcePriv.h"
#include "src/gpu/GrPaint.h"
@@ -125,22 +124,130 @@
return {GrCopyBaseMipMapToTextureProxy(context, proxy, origin, budgeted), origin, swizzle};
}
-GrSurfaceProxyView GrRefCachedBitmapView(GrRecordingContext* ctx, const SkBitmap& bitmap,
- GrMipmapped mipMapped) {
- GrBitmapTextureMaker maker(ctx, bitmap, GrImageTexGenPolicy::kDraw);
- return maker.view(mipMapped);
+static GrMipmapped adjust_mipmapped(GrMipmapped mipmapped,
+ const SkBitmap& bitmap,
+ const GrCaps* caps) {
+ if (!caps->mipmapSupport() || bitmap.dimensions().area() <= 1) {
+ return GrMipmapped::kNo;
+ }
+ return mipmapped;
}
-GrSurfaceProxyView GrMakeCachedBitmapProxyView(GrRecordingContext* context,
- const SkBitmap& bitmap) {
+static GrColorType choose_bmp_texture_colortype(const GrCaps* caps, const SkBitmap& bitmap) {
+ GrColorType ct = SkColorTypeToGrColorType(bitmap.info().colorType());
+ if (caps->getDefaultBackendFormat(ct, GrRenderable::kNo).isValid()) {
+ return ct;
+ }
+ return GrColorType::kRGBA_8888;
+}
+
+static sk_sp<GrTextureProxy> make_bmp_proxy(GrProxyProvider* proxyProvider,
+ const SkBitmap& bitmap,
+ GrColorType ct,
+ GrMipmapped mipmapped,
+ SkBackingFit fit,
+ SkBudgeted budgeted) {
+ SkBitmap bmpToUpload;
+ if (ct != SkColorTypeToGrColorType(bitmap.info().colorType())) {
+ SkColorType skCT = GrColorTypeToSkColorType(ct);
+ if (!bmpToUpload.tryAllocPixels(bitmap.info().makeColorType(skCT)) ||
+ !bitmap.readPixels(bmpToUpload.pixmap())) {
+ return {};
+ }
+ bmpToUpload.setImmutable();
+ } else {
+ bmpToUpload = bitmap;
+ }
+ auto proxy = proxyProvider->createProxyFromBitmap(bmpToUpload, mipmapped, fit, budgeted);
+ SkASSERT(!proxy || mipmapped == GrMipmapped::kNo || proxy->mipmapped() == GrMipmapped::kYes);
+ return proxy;
+}
+
+std::tuple<GrSurfaceProxyView, GrColorType>
+GrMakeCachedBitmapProxyView(GrRecordingContext* rContext,
+ const SkBitmap& bitmap,
+ GrMipmapped mipmapped) {
if (!bitmap.peekPixels(nullptr)) {
return {};
}
- GrBitmapTextureMaker maker(context, bitmap, GrImageTexGenPolicy::kDraw);
- return maker.view(GrMipmapped::kNo);
+ GrProxyProvider* proxyProvider = rContext->priv().proxyProvider();
+ const GrCaps* caps = rContext->priv().caps();
+
+ GrUniqueKey key;
+ SkIPoint origin = bitmap.pixelRefOrigin();
+ SkIRect subset = SkIRect::MakePtSize(origin, bitmap.dimensions());
+ GrMakeKeyFromImageID(&key, bitmap.pixelRef()->getGenerationID(), subset);
+
+ mipmapped = adjust_mipmapped(mipmapped, bitmap, caps);
+ GrColorType ct = choose_bmp_texture_colortype(caps, bitmap);
+
+ auto installKey = [&](GrTextureProxy* proxy) {
+ auto listener = GrMakeUniqueKeyInvalidationListener(&key, proxyProvider->contextID());
+ bitmap.pixelRef()->addGenIDChangeListener(std::move(listener));
+ proxyProvider->assignUniqueKeyToProxy(key, proxy);
+ };
+
+ sk_sp<GrTextureProxy> proxy = proxyProvider->findOrCreateProxyByUniqueKey(key);
+ if (!proxy) {
+ proxy = make_bmp_proxy(proxyProvider,
+ bitmap,
+ ct,
+ mipmapped,
+ SkBackingFit::kExact,
+ SkBudgeted::kYes);
+ if (!proxy) {
+ return {};
+ }
+ SkASSERT(mipmapped == GrMipmapped::kNo || proxy->mipmapped() == GrMipmapped::kYes);
+ installKey(proxy.get());
+ }
+
+ GrSwizzle swizzle = caps->getReadSwizzle(proxy->backendFormat(), ct);
+ if (mipmapped == GrMipmapped::kNo || proxy->mipmapped() == GrMipmapped::kYes) {
+ return {{std::move(proxy), kTopLeft_GrSurfaceOrigin, swizzle}, ct};
+ }
+
+ // We need a mipped proxy, but we found a proxy earlier that wasn't mipped. Thus we generate
+ // a new mipped surface and copy the original proxy into the base layer. We will then let
+ // the gpu generate the rest of the mips.
+ auto mippedProxy = GrCopyBaseMipMapToTextureProxy(rContext, proxy, kTopLeft_GrSurfaceOrigin);
+ if (!mippedProxy) {
+ // We failed to make a mipped proxy with the base copied into it. This could have
+ // been from failure to make the proxy or failure to do the copy. Thus we will fall
+ // back to just using the non mipped proxy; See skbug.com/7094.
+ return {{std::move(proxy), kTopLeft_GrSurfaceOrigin, swizzle}, ct};
+ }
+ // In this case we are stealing the key from the original proxy which should only happen
+ // when we have just generated mipmaps for an originally unmipped proxy/texture. This
+ // means that all future uses of the key will access the mipmapped version. The texture
+ // backing the unmipped version will remain in the resource cache until the last texture
+ // proxy referencing it is deleted at which time it too will be deleted or recycled.
+ SkASSERT(proxy->getUniqueKey() == key);
+ proxyProvider->removeUniqueKeyFromProxy(proxy.get());
+ installKey(mippedProxy->asTextureProxy());
+ return {{std::move(mippedProxy), kTopLeft_GrSurfaceOrigin, swizzle}, ct};
}
+std::tuple<GrSurfaceProxyView, GrColorType>
+GrMakeUncachedBitmapProxyView(GrRecordingContext* rContext,
+ const SkBitmap& bitmap,
+ GrMipmapped mipmapped,
+ SkBackingFit fit,
+ SkBudgeted budgeted) {
+ GrProxyProvider* proxyProvider = rContext->priv().proxyProvider();
+ const GrCaps* caps = rContext->priv().caps();
+
+ mipmapped = adjust_mipmapped(mipmapped, bitmap, caps);
+ GrColorType ct = choose_bmp_texture_colortype(caps, bitmap);
+
+ if (auto proxy = make_bmp_proxy(proxyProvider, bitmap, ct, mipmapped, fit, budgeted)) {
+ GrSwizzle swizzle = caps->getReadSwizzle(proxy->backendFormat(), ct);
+ SkASSERT(mipmapped == GrMipmapped::kNo || proxy->mipmapped() == GrMipmapped::kYes);
+ return {{std::move(proxy), kTopLeft_GrSurfaceOrigin, swizzle}, ct};
+ }
+ return {};
+}
///////////////////////////////////////////////////////////////////////////////
SkPMColor4f SkColorToPMColor4f(SkColor c, const GrColorInfo& colorInfo) {
diff --git a/src/gpu/SkGr.h b/src/gpu/SkGr.h
index 92ce7af..8dba066 100644
--- a/src/gpu/SkGr.h
+++ b/src/gpu/SkGr.h
@@ -179,14 +179,6 @@
};
/**
- * Returns a view that wraps a texture representing the bitmap. The texture is inserted into the
- * cache (unless the bitmap is marked volatile and can be retrieved again via this function.
- * A MIP mapped texture may be returned even when GrMipmapped is kNo. The function will succeed
- * with a non-MIP mapped texture if GrMipmapped is kYes but MIP mapping is not supported.
- */
-GrSurfaceProxyView GrRefCachedBitmapView(GrRecordingContext*, const SkBitmap&, GrMipmapped);
-
-/**
* Creates a new texture with mipmap levels and copies the baseProxy into the base layer.
*/
sk_sp<GrSurfaceProxy> GrCopyBaseMipMapToTextureProxy(GrRecordingContext*,
@@ -202,10 +194,28 @@
SkBudgeted = SkBudgeted::kYes);
/*
- * Create a texture proxy from the provided bitmap and add it to the texture cache
- * using the key also extracted from 'bitmp'.
+ * Create a texture proxy from the provided bitmap and add it to the texture cache using the key
+ * also extracted from the bitmap. If GrMipmapped is kYes a non-mipmapped result may be returned
+ * if mipmapping isn't supported or for a 1x1 bitmap. If GrMipmapped is kNo it indicates mipmaps
+ * aren't required but a previously created mipmapped texture may still be returned. A color type is
+ * returned as color type conversion may be performed if there isn't a texture format equivalent of
+ * the bitmap's color type.
*/
-GrSurfaceProxyView GrMakeCachedBitmapProxyView(GrRecordingContext*, const SkBitmap& bitmap);
+std::tuple<GrSurfaceProxyView, GrColorType>
+GrMakeCachedBitmapProxyView(GrRecordingContext*,
+ const SkBitmap&,
+ GrMipmapped = GrMipmapped::kNo);
+
+/**
+ * Like above but always uploads the bitmap and never inserts into the cache. Unlike above, the
+ * texture may be approx or scratch and budgeted or not.
+ */
+std::tuple<GrSurfaceProxyView, GrColorType>
+GrMakeUncachedBitmapProxyView(GrRecordingContext*,
+ const SkBitmap&,
+ GrMipmapped = GrMipmapped::kNo,
+ SkBackingFit = SkBackingFit::kExact,
+ SkBudgeted = SkBudgeted::kYes);
/**
* Our key includes the offset, width, and height so that bitmaps created by extractSubset()
@@ -226,8 +236,6 @@
*/
sk_sp<SkIDChangeListener> GrMakeUniqueKeyInvalidationListener(GrUniqueKey*, uint32_t contextID);
-constexpr SkCubicResampler kInvalidCubicResampler{-1.f, -1.f};
-
static inline bool GrValidCubicResampler(SkCubicResampler cubic) {
return cubic.B >= 0 && cubic.C >= 0;
}
diff --git a/src/gpu/effects/GrCircleBlurFragmentProcessor.fp b/src/gpu/effects/GrCircleBlurFragmentProcessor.fp
index e0764b0..63c5fbd 100644
--- a/src/gpu/effects/GrCircleBlurFragmentProcessor.fp
+++ b/src/gpu/effects/GrCircleBlurFragmentProcessor.fp
@@ -40,10 +40,10 @@
@cpp {
#include "include/gpu/GrRecordingContext.h"
#include "src/core/SkGpuBlurUtils.h"
- #include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrThreadSafeCache.h"
+ #include "src/gpu/SkGr.h"
// Computes an unnormalized half kernel (right side). Returns the summation of all the half
// kernel values.
@@ -268,11 +268,9 @@
create_circle_profile(bm.getAddr8(0, 0), sigma * scale, circleR * scale,
kProfileTextureWidth);
}
-
bm.setImmutable();
- GrBitmapTextureMaker maker(rContext, bm, GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- profileView = maker.view(GrMipmapped::kNo);
+ profileView = std::get<0>(GrMakeUncachedBitmapProxyView(rContext, bm));
if (!profileView) {
return nullptr;
}
diff --git a/src/gpu/effects/GrConfigConversionEffect.fp b/src/gpu/effects/GrConfigConversionEffect.fp
index b22b67f..301645f 100644
--- a/src/gpu/effects/GrConfigConversionEffect.fp
+++ b/src/gpu/effects/GrConfigConversionEffect.fp
@@ -9,10 +9,10 @@
@header {
#include "include/gpu/GrDirectContext.h"
- #include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrImageInfo.h"
#include "src/gpu/GrSurfaceDrawContext.h"
+ #include "src/gpu/SkGr.h"
}
@class {
@@ -55,8 +55,7 @@
bitmap.installPixels(pmII, srcData, 4 * kSize);
bitmap.setImmutable();
- GrBitmapTextureMaker maker(dContext, bitmap, GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- auto dataView = maker.view(GrMipmapped::kNo);
+ auto dataView = std::get<0>(GrMakeUncachedBitmapProxyView(dContext, bitmap));
if (!dataView) {
return false;
}
diff --git a/src/gpu/effects/GrMatrixConvolutionEffect.cpp b/src/gpu/effects/GrMatrixConvolutionEffect.cpp
index 6063235..bbea594 100644
--- a/src/gpu/effects/GrMatrixConvolutionEffect.cpp
+++ b/src/gpu/effects/GrMatrixConvolutionEffect.cpp
@@ -7,13 +7,13 @@
#include "src/gpu/effects/GrMatrixConvolutionEffect.h"
#include "include/private/SkHalf.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrTexture.h"
#include "src/gpu/GrTextureProxy.h"
#include "src/gpu/GrThreadSafeCache.h"
+#include "src/gpu/SkGr.h"
#include "src/gpu/effects/GrTextureEffect.h"
#include "src/gpu/glsl/GrGLSLFragmentProcessor.h"
#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
@@ -128,8 +128,7 @@
}
bm.setImmutable();
- GrBitmapTextureMaker maker(rContext, bm, GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- view = maker.view(GrMipmapped::kNo);
+ view = std::get<0>(GrMakeUncachedBitmapProxyView(rContext, bm));
if (!view) {
return {};
}
diff --git a/src/gpu/effects/GrRRectBlurEffect.fp b/src/gpu/effects/GrRRectBlurEffect.fp
index 2da6386..f0eee4f 100644
--- a/src/gpu/effects/GrRRectBlurEffect.fp
+++ b/src/gpu/effects/GrRRectBlurEffect.fp
@@ -39,7 +39,6 @@
#include "src/core/SkAutoMalloc.h"
#include "src/core/SkGpuBlurUtils.h"
#include "src/core/SkRRectPriv.h"
- #include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrCaps.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrPaint.h"
@@ -48,6 +47,7 @@
#include "src/gpu/GrStyle.h"
#include "src/gpu/GrSurfaceDrawContext.h"
#include "src/gpu/GrThreadSafeCache.h"
+ #include "src/gpu/SkGr.h"
#include "src/gpu/effects/GrTextureEffect.h"
static constexpr auto kBlurredRRectMaskOrigin = kTopLeft_GrSurfaceOrigin;
@@ -235,8 +235,7 @@
result.setImmutable();
- GrBitmapTextureMaker maker(rContext, result, GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- auto view = maker.view(GrMipmapped::kNo);
+ auto view = std::get<0>(GrMakeUncachedBitmapProxyView(rContext, result));
if (!view) {
return {};
}
diff --git a/src/gpu/effects/GrRectBlurEffect.fp b/src/gpu/effects/GrRectBlurEffect.fp
index 8111c77..f57d085 100644
--- a/src/gpu/effects/GrRectBlurEffect.fp
+++ b/src/gpu/effects/GrRectBlurEffect.fp
@@ -13,11 +13,11 @@
#include "src/core/SkBlurMask.h"
#include "src/core/SkGpuBlurUtils.h"
#include "src/core/SkMathPriv.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrShaderCaps.h"
#include "src/gpu/GrThreadSafeCache.h"
+#include "src/gpu/SkGr.h"
#include "src/gpu/effects/GrTextureEffect.h"
}
@@ -80,8 +80,7 @@
return {};
}
- GrBitmapTextureMaker maker(rContext, bitmap, GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- view = maker.view(GrMipmapped::kNo);
+ view = std::get<0>(GrMakeUncachedBitmapProxyView(rContext, bitmap));
if (!view) {
return {};
}
diff --git a/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.cpp b/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.cpp
index 728f2e1..81c4527 100644
--- a/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.cpp
+++ b/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.cpp
@@ -12,10 +12,10 @@
#include "include/gpu/GrRecordingContext.h"
#include "src/core/SkGpuBlurUtils.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrThreadSafeCache.h"
+#include "src/gpu/SkGr.h"
// Computes an unnormalized half kernel (right side). Returns the summation of all the half
// kernel values.
@@ -250,11 +250,9 @@
create_circle_profile(
bm.getAddr8(0, 0), sigma * scale, circleR * scale, kProfileTextureWidth);
}
-
bm.setImmutable();
- GrBitmapTextureMaker maker(rContext, bm, GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- profileView = maker.view(GrMipmapped::kNo);
+ profileView = std::get<0>(GrMakeUncachedBitmapProxyView(rContext, bm));
if (!profileView) {
return nullptr;
}
diff --git a/src/gpu/effects/generated/GrConfigConversionEffect.cpp b/src/gpu/effects/generated/GrConfigConversionEffect.cpp
index 8f65e0d..9f3c906 100644
--- a/src/gpu/effects/generated/GrConfigConversionEffect.cpp
+++ b/src/gpu/effects/generated/GrConfigConversionEffect.cpp
@@ -121,8 +121,7 @@
bitmap.installPixels(pmII, srcData, 4 * kSize);
bitmap.setImmutable();
- GrBitmapTextureMaker maker(dContext, bitmap, GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- auto dataView = maker.view(GrMipmapped::kNo);
+ auto dataView = std::get<0>(GrMakeUncachedBitmapProxyView(dContext, bitmap));
if (!dataView) {
return false;
}
diff --git a/src/gpu/effects/generated/GrConfigConversionEffect.h b/src/gpu/effects/generated/GrConfigConversionEffect.h
index d8e0c0e..c148ced 100644
--- a/src/gpu/effects/generated/GrConfigConversionEffect.h
+++ b/src/gpu/effects/generated/GrConfigConversionEffect.h
@@ -15,10 +15,10 @@
#include "include/core/SkTypes.h"
#include "include/gpu/GrDirectContext.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrImageInfo.h"
#include "src/gpu/GrSurfaceDrawContext.h"
+#include "src/gpu/SkGr.h"
#include "src/gpu/GrFragmentProcessor.h"
diff --git a/src/gpu/effects/generated/GrRRectBlurEffect.cpp b/src/gpu/effects/generated/GrRRectBlurEffect.cpp
index e2f0aa4..03b9f09 100644
--- a/src/gpu/effects/generated/GrRRectBlurEffect.cpp
+++ b/src/gpu/effects/generated/GrRRectBlurEffect.cpp
@@ -15,7 +15,6 @@
#include "src/core/SkAutoMalloc.h"
#include "src/core/SkGpuBlurUtils.h"
#include "src/core/SkRRectPriv.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrCaps.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrPaint.h"
@@ -24,6 +23,7 @@
#include "src/gpu/GrStyle.h"
#include "src/gpu/GrSurfaceDrawContext.h"
#include "src/gpu/GrThreadSafeCache.h"
+#include "src/gpu/SkGr.h"
#include "src/gpu/effects/GrTextureEffect.h"
static constexpr auto kBlurredRRectMaskOrigin = kTopLeft_GrSurfaceOrigin;
@@ -231,8 +231,7 @@
result.setImmutable();
- GrBitmapTextureMaker maker(rContext, result, GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- auto view = maker.view(GrMipmapped::kNo);
+ auto view = std::get<0>(GrMakeUncachedBitmapProxyView(rContext, result));
if (!view) {
return {};
}
diff --git a/src/gpu/effects/generated/GrRectBlurEffect.h b/src/gpu/effects/generated/GrRectBlurEffect.h
index 262733d..b7f3778 100644
--- a/src/gpu/effects/generated/GrRectBlurEffect.h
+++ b/src/gpu/effects/generated/GrRectBlurEffect.h
@@ -21,11 +21,11 @@
#include "src/core/SkBlurMask.h"
#include "src/core/SkGpuBlurUtils.h"
#include "src/core/SkMathPriv.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrShaderCaps.h"
#include "src/gpu/GrThreadSafeCache.h"
+#include "src/gpu/SkGr.h"
#include "src/gpu/effects/GrTextureEffect.h"
#include "src/gpu/GrFragmentProcessor.h"
@@ -60,8 +60,7 @@
return {};
}
- GrBitmapTextureMaker maker(rContext, bitmap, GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- view = maker.view(GrMipmapped::kNo);
+ view = std::get<0>(GrMakeUncachedBitmapProxyView(rContext, bitmap));
if (!view) {
return {};
}
diff --git a/src/gpu/gradients/GrGradientShader.cpp b/src/gpu/gradients/GrGradientShader.cpp
index 228e735..a802893 100644
--- a/src/gpu/gradients/GrGradientShader.cpp
+++ b/src/gpu/gradients/GrGradientShader.cpp
@@ -59,8 +59,8 @@
SkASSERT(1 == bitmap.height() && SkIsPow2(bitmap.width()));
SkASSERT(bitmap.isImmutable());
- auto view = GrMakeCachedBitmapProxyView(args.fContext, bitmap);
- if (!view.proxy()) {
+ auto view = std::get<0>(GrMakeCachedBitmapProxyView(args.fContext, bitmap, GrMipmapped::kNo));
+ if (!view) {
SkDebugf("Gradient won't draw. Could not create texture.");
return nullptr;
}
diff --git a/src/gpu/ops/GrShadowRRectOp.cpp b/src/gpu/ops/GrShadowRRectOp.cpp
index 0d272ae..125816c 100644
--- a/src/gpu/ops/GrShadowRRectOp.cpp
+++ b/src/gpu/ops/GrShadowRRectOp.cpp
@@ -9,7 +9,6 @@
#include "include/gpu/GrRecordingContext.h"
#include "src/core/SkRRectPriv.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrDrawOpTest.h"
#include "src/gpu/GrMemoryPool.h"
#include "src/gpu/GrOpFlushState.h"
@@ -17,6 +16,7 @@
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrThreadSafeCache.h"
+#include "src/gpu/SkGr.h"
#include "src/gpu/effects/GrShadowGeoProc.h"
#include "src/gpu/ops/GrSimpleMeshDrawOpHelper.h"
@@ -691,8 +691,7 @@
}
bitmap.setImmutable();
- GrBitmapTextureMaker maker(rContext, bitmap, GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- view = maker.view(GrMipmapped::kNo);
+ view = std::get<0>(GrMakeUncachedBitmapProxyView(rContext, bitmap));
if (!view) {
return {};
}
diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp
index 0687ff7..9058df5 100644
--- a/src/image/SkImage_Gpu.cpp
+++ b/src/image/SkImage_Gpu.cpp
@@ -22,7 +22,6 @@
#include "src/gpu/GrAHardwareBufferUtils.h"
#include "src/gpu/GrBackendTextureImageGenerator.h"
#include "src/gpu/GrBackendUtils.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrCaps.h"
#include "src/gpu/GrColorSpaceXform.h"
#include "src/gpu/GrContextThreadSafeProxyPriv.h"
@@ -666,9 +665,8 @@
// Turn the pixmap into a GrTextureProxy
SkBitmap bmp;
bmp.installPixels(*pixmap);
- GrBitmapTextureMaker bitmapMaker(dContext, bmp, GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- GrMipmapped mipMapped = buildMips ? GrMipmapped::kYes : GrMipmapped::kNo;
- auto view = bitmapMaker.view(mipMapped);
+ GrMipmapped mipmapped = buildMips ? GrMipmapped::kYes : GrMipmapped::kNo;
+ auto [view, ct] = GrMakeUncachedBitmapProxyView(dContext, bmp, mipmapped);
if (!view) {
return SkImage::MakeRasterCopy(*pixmap);
}
@@ -681,7 +679,7 @@
std::unique_ptr<GrSemaphore> sema = gpu->prepareTextureForCrossContextUsage(texture.get());
- SkColorType skCT = GrColorTypeToSkColorType(bitmapMaker.colorType());
+ SkColorType skCT = GrColorTypeToSkColorType(ct);
auto gen = GrBackendTextureImageGenerator::Make(std::move(texture), view.origin(),
std::move(sema), skCT,
pixmap->alphaType(),
diff --git a/src/image/SkImage_GpuYUVA.cpp b/src/image/SkImage_GpuYUVA.cpp
index c1165f8..387978c 100644
--- a/src/image/SkImage_GpuYUVA.cpp
+++ b/src/image/SkImage_GpuYUVA.cpp
@@ -16,7 +16,6 @@
#include "src/core/SkAutoPixmapStorage.h"
#include "src/core/SkMipmap.h"
#include "src/core/SkScopeExit.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrClip.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrGpu.h"
@@ -295,8 +294,7 @@
// Turn the pixmap into a GrTextureProxy
SkBitmap bmp;
bmp.installPixels(pixmapsToUpload->plane(i));
- GrBitmapTextureMaker bitmapMaker(context, bmp, GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- views[i] = bitmapMaker.view(buildMips);
+ std::tie(views[i], std::ignore) = GrMakeUncachedBitmapProxyView(context, bmp, buildMips);
if (!views[i]) {
return nullptr;
}
diff --git a/src/image/SkImage_Lazy.cpp b/src/image/SkImage_Lazy.cpp
index c0facdf..344dd11 100644
--- a/src/image/SkImage_Lazy.cpp
+++ b/src/image/SkImage_Lazy.cpp
@@ -21,7 +21,6 @@
#include "include/private/GrResourceKey.h"
#include "src/core/SkResourceCache.h"
#include "src/core/SkYUVPlanesCache.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrCaps.h"
#include "src/gpu/GrColorSpaceXform.h"
#include "src/gpu/GrGpuResourcePriv.h"
@@ -32,6 +31,7 @@
#include "src/gpu/GrSamplerState.h"
#include "src/gpu/GrSurfaceFillContext.h"
#include "src/gpu/GrYUVATextureProxies.h"
+#include "src/gpu/SkGr.h"
#include "src/gpu/effects/GrYUVtoRGBEffect.h"
#endif
@@ -310,9 +310,10 @@
SkRef(dataStorage.get()));
bitmap.setImmutable();
- GrBitmapTextureMaker maker(ctx, bitmap, fit);
- views[i] = maker.view(GrMipmapped::kNo);
-
+ std::tie(views[i], std::ignore) = GrMakeUncachedBitmapProxyView(ctx,
+ bitmap,
+ GrMipmapped::kNo,
+ fit);
if (!views[i]) {
return {};
}
@@ -405,7 +406,7 @@
*/
GrSurfaceProxyView SkImage_Lazy::lockTextureProxyView(GrRecordingContext* rContext,
GrImageTexGenPolicy texGenPolicy,
- GrMipmapped mipMapped) const {
+ GrMipmapped mipmapped) const {
// Values representing the various texture lock paths we can take. Used for logging the path
// taken to a histogram.
enum LockTexturePath {
@@ -444,7 +445,7 @@
if (proxy) {
GrSwizzle swizzle = caps->getReadSwizzle(proxy->backendFormat(), ct);
GrSurfaceProxyView view(std::move(proxy), kTopLeft_GrSurfaceOrigin, swizzle);
- if (mipMapped == GrMipmapped::kNo ||
+ if (mipmapped == GrMipmapped::kNo ||
view.asTextureProxy()->mipmapped() == GrMipmapped::kYes) {
return view;
} else {
@@ -468,7 +469,10 @@
// 2. Ask the generator to natively create one.
{
ScopedGenerator generator(fSharedGenerator);
- if (auto view = generator->generateTexture(rContext, this->imageInfo(), {0,0}, mipMapped,
+ if (auto view = generator->generateTexture(rContext,
+ this->imageInfo(),
+ {0,0},
+ mipmapped,
texGenPolicy)) {
installKey(view);
return view;
@@ -477,7 +481,7 @@
// 3. Ask the generator to return YUV planes, which the GPU can convert. If we will be mipping
// the texture we skip this step so the CPU generate non-planar MIP maps for us.
- if (mipMapped == GrMipmapped::kNo && !rContext->priv().options().fDisableGpuYUVConversion) {
+ if (mipmapped == GrMipmapped::kNo && !rContext->priv().options().fDisableGpuYUVConversion) {
// TODO: Update to create the mipped surface in the textureProxyViewFromPlanes generator and
// draw the base layer directly into the mipped surface.
SkBudgeted budgeted = texGenPolicy == GrImageTexGenPolicy::kNew_Uncached_Unbudgeted
@@ -494,13 +498,16 @@
auto hint = texGenPolicy == GrImageTexGenPolicy::kDraw ? CachingHint::kAllow_CachingHint
: CachingHint::kDisallow_CachingHint;
if (SkBitmap bitmap; this->getROPixels(nullptr, &bitmap, hint)) {
- // We always pass uncached here because we will cache it external to the maker based on
- // *our* cache policy. We're just using the maker to generate the texture.
- auto makerPolicy = texGenPolicy == GrImageTexGenPolicy::kNew_Uncached_Unbudgeted
- ? GrImageTexGenPolicy::kNew_Uncached_Unbudgeted
- : GrImageTexGenPolicy::kNew_Uncached_Budgeted;
- GrBitmapTextureMaker bitmapMaker(rContext, bitmap, makerPolicy);
- auto view = bitmapMaker.view(mipMapped);
+ // We always make an uncached bitmap here because we will cache it based on passed in policy
+ // with *our* key, not a key derived from bitmap. We're just making the proxy here.
+ auto budgeted = texGenPolicy == GrImageTexGenPolicy::kNew_Uncached_Unbudgeted
+ ? SkBudgeted::kNo
+ : SkBudgeted::kYes;
+ auto view = std::get<0>(GrMakeUncachedBitmapProxyView(rContext,
+ bitmap,
+ mipmapped,
+ SkBackingFit::kExact,
+ budgeted));
if (view) {
installKey(view);
return view;
diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp
index 9c1e73b..d993bf0 100644
--- a/src/image/SkImage_Raster.cpp
+++ b/src/image/SkImage_Raster.cpp
@@ -20,9 +20,10 @@
#include "src/shaders/SkBitmapProcShader.h"
#if SK_SUPPORT_GPU
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrTextureAdjuster.h"
#include "src/gpu/SkGr.h"
+#include "src/gpu/effects/GrBicubicEffect.h"
+#include "src/gpu/effects/GrTextureEffect.h"
#endif
// fixes https://bug.skia.org/5096
@@ -212,15 +213,15 @@
} else {
SkASSERT(fPinnedCount == 0);
SkASSERT(fPinnedUniqueID == 0);
- GrBitmapTextureMaker maker(rContext, fBitmap, GrImageTexGenPolicy::kDraw);
- fPinnedView = maker.view(GrMipmapped::kNo);
+ std::tie(fPinnedView, fPinnedColorType) = GrMakeCachedBitmapProxyView(rContext,
+ fBitmap,
+ GrMipmapped::kNo);
if (!fPinnedView) {
+ fPinnedColorType = GrColorType::kUnknown;
return false;
}
- SkASSERT(fPinnedView.asTextureProxy());
fPinnedUniqueID = fBitmap.getGenerationID();
fPinnedContextID = rContext->priv().contextID();
- fPinnedColorType = maker.colorType();
}
// Note: we only increment if the texture was successfully pinned
++fPinnedCount;
@@ -425,9 +426,17 @@
GrTextureAdjuster adjuster(rContext, fPinnedView, colorInfo, fPinnedUniqueID);
return {adjuster.view(mipmapped), adjuster.colorType()};
}
-
- GrBitmapTextureMaker maker(rContext, fBitmap, policy);
- return {maker.view(mipmapped), maker.colorType()};
+ if (policy == GrImageTexGenPolicy::kDraw) {
+ return GrMakeCachedBitmapProxyView(rContext, fBitmap, mipmapped);
+ }
+ auto budgeted = (policy == GrImageTexGenPolicy::kNew_Uncached_Unbudgeted)
+ ? SkBudgeted::kNo
+ : SkBudgeted::kYes;
+ return GrMakeUncachedBitmapProxyView(rContext,
+ fBitmap,
+ mipmapped,
+ SkBackingFit::kExact,
+ budgeted);
}
std::unique_ptr<GrFragmentProcessor> SkImage_Raster::onAsFragmentProcessor(
@@ -437,13 +446,67 @@
const SkMatrix& m,
const SkRect* subset,
const SkRect* domain) const {
+ auto mm = sampling.mipmap == SkMipmapMode::kNone ? GrMipmapped::kNo : GrMipmapped::kYes;
+ auto [view, ct] = this->asView(context, mm);
+ if (!view) {
+ return nullptr;
+ }
+ const GrCaps& caps = *context->priv().caps();
auto wmx = SkTileModeToWrapMode(tileModes[0]);
auto wmy = SkTileModeToWrapMode(tileModes[1]);
- GrBitmapTextureMaker maker(context, fBitmap, GrImageTexGenPolicy::kDraw);
if (sampling.useCubic) {
- return maker.createBicubicFragmentProcessor(m, subset, domain, wmx, wmy, sampling.cubic);
+ if (subset) {
+ if (domain) {
+ return GrBicubicEffect::MakeSubset(std::move(view),
+ this->alphaType(),
+ m,
+ wmx,
+ wmy,
+ *subset,
+ *domain,
+ sampling.cubic,
+ GrBicubicEffect::Direction::kXY,
+ *context->priv().caps());
+ }
+ return GrBicubicEffect::MakeSubset(std::move(view),
+ this->alphaType(),
+ m,
+ wmx,
+ wmy,
+ *subset,
+ sampling.cubic,
+ GrBicubicEffect::Direction::kXY,
+ *context->priv().caps());
+ }
+ return GrBicubicEffect::Make(std::move(view),
+ this->alphaType(),
+ m,
+ wmx,
+ wmy,
+ sampling.cubic,
+ GrBicubicEffect::Direction::kXY,
+ *context->priv().caps());
}
+
GrSamplerState sampler(wmx, wmy, sampling.filter, sampling.mipmap);
- return maker.createFragmentProcessor(m, subset, domain, sampler);
+ if (subset) {
+ if (domain) {
+ return GrTextureEffect::MakeSubset(std::move(view),
+ this->alphaType(),
+ m,
+ sampler,
+ *subset,
+ *domain,
+ caps);
+ }
+ return GrTextureEffect::MakeSubset(std::move(view),
+ this->alphaType(),
+ m,
+ sampler,
+ *subset,
+ caps);
+ } else {
+ return GrTextureEffect::Make(std::move(view), this->alphaType(), m, sampler, caps);
+ }
}
#endif
diff --git a/src/shaders/SkImageShader.cpp b/src/shaders/SkImageShader.cpp
index 4a3d5ef..8f01590 100755
--- a/src/shaders/SkImageShader.cpp
+++ b/src/shaders/SkImageShader.cpp
@@ -314,17 +314,8 @@
#if SK_SUPPORT_GPU
-#include "include/gpu/GrRecordingContext.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
-#include "src/gpu/GrCaps.h"
#include "src/gpu/GrColorInfo.h"
-#include "src/gpu/GrImageTextureMaker.h"
-#include "src/gpu/GrRecordingContextPriv.h"
-#include "src/gpu/GrTextureAdjuster.h"
-#include "src/gpu/SkGr.h"
-#include "src/gpu/effects/GrBicubicEffect.h"
#include "src/gpu/effects/GrBlendFragmentProcessor.h"
-#include "src/gpu/effects/GrTextureEffect.h"
std::unique_ptr<GrFragmentProcessor> SkImageShader::asFragmentProcessor(
const GrFPArgs& args) const {
diff --git a/src/shaders/SkPerlinNoiseShader.cpp b/src/shaders/SkPerlinNoiseShader.cpp
index c39d29e..83430c7 100644
--- a/src/shaders/SkPerlinNoiseShader.cpp
+++ b/src/shaders/SkPerlinNoiseShader.cpp
@@ -975,18 +975,13 @@
return GrFragmentProcessor::MakeColor(SK_PMColor4fTRANSPARENT);
}
- // Need to assert that the textures we'll create are power of 2 so that now copy is needed. We
- // also know that we will not be using mipmaps. If things things weren't true we should go
- // through GrBitmapTextureMaker to handle needed copies.
const SkBitmap& permutationsBitmap = paintingData->getPermutationsBitmap();
- SkASSERT(SkIsPow2(permutationsBitmap.width()) && SkIsPow2(permutationsBitmap.height()));
- auto permutationsView = GrMakeCachedBitmapProxyView(context, permutationsBitmap);
+ const SkBitmap& noiseBitmap = paintingData->getNoiseBitmap();
- const SkBitmap& noiseBitmap = paintingData->getNoiseBitmap();
- SkASSERT(SkIsPow2(noiseBitmap.width()) && SkIsPow2(noiseBitmap.height()));
- auto noiseView = GrMakeCachedBitmapProxyView(context, noiseBitmap);
+ auto permutationsView = std::get<0>(GrMakeCachedBitmapProxyView(context, permutationsBitmap));
+ auto noiseView = std::get<0>(GrMakeCachedBitmapProxyView(context, noiseBitmap));
- if (permutationsView.proxy() && noiseView.proxy()) {
+ if (permutationsView && noiseView) {
auto inner = GrPerlinNoise2Effect::Make(fType,
fNumOctaves,
fStitchTiles,
diff --git a/tests/GrSurfaceTest.cpp b/tests/GrSurfaceTest.cpp
index 68d0b27..79aae77 100644
--- a/tests/GrSurfaceTest.cpp
+++ b/tests/GrSurfaceTest.cpp
@@ -12,7 +12,6 @@
#include "src/core/SkCanvasPriv.h"
#include "src/core/SkCompressedDataUtils.h"
#include "src/gpu/GrBackendUtils.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrGpu.h"
#include "src/gpu/GrImageInfo.h"
@@ -21,6 +20,7 @@
#include "src/gpu/GrResourceProvider.h"
#include "src/gpu/GrSurfaceDrawContext.h"
#include "src/gpu/GrTexture.h"
+#include "src/gpu/SkGr.h"
#include "tests/Test.h"
#include "tests/TestUtils.h"
#include "tools/gpu/BackendTextureImageFactory.h"
@@ -398,11 +398,9 @@
copySrcBitmap.installPixels(write);
copySrcBitmap.setImmutable();
- GrBitmapTextureMaker maker(dContext, copySrcBitmap,
- GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- auto copySrc = maker.view(GrMipmapped::kNo);
+ auto copySrc = std::get<0>(GrMakeUncachedBitmapProxyView(dContext, copySrcBitmap));
- REPORTER_ASSERT(reporter, copySrc.proxy());
+ REPORTER_ASSERT(reporter, copySrc);
auto copyResult = surfContext->testCopy(copySrc.refProxy());
REPORTER_ASSERT(reporter, copyResult == (ioType == kRW_GrIOType));
// Try the low level copy.
diff --git a/tests/ImageFilterCacheTest.cpp b/tests/ImageFilterCacheTest.cpp
index 26f71cc..19603b0 100644
--- a/tests/ImageFilterCacheTest.cpp
+++ b/tests/ImageFilterCacheTest.cpp
@@ -202,18 +202,17 @@
}
#include "include/gpu/GrDirectContext.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrResourceProvider.h"
#include "src/gpu/GrSurfaceProxyPriv.h"
#include "src/gpu/GrTexture.h"
#include "src/gpu/GrTextureProxy.h"
+#include "src/gpu/SkGr.h"
static GrSurfaceProxyView create_proxy_view(GrRecordingContext* rContext) {
SkBitmap srcBM = create_bm();
- GrBitmapTextureMaker maker(rContext, srcBM, GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- return maker.view(GrMipmapped::kNo);
+ return std::get<0>(GrMakeUncachedBitmapProxyView(rContext, srcBM));
}
DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterCache_ImageBackedGPU, reporter, ctxInfo) {
diff --git a/tests/ProcessorTest.cpp b/tests/ProcessorTest.cpp
index 52d8c88..746c589 100644
--- a/tests/ProcessorTest.cpp
+++ b/tests/ProcessorTest.cpp
@@ -8,7 +8,6 @@
#include "tests/Test.h"
#include "include/gpu/GrDirectContext.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrClip.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrGpuResource.h"
@@ -17,6 +16,7 @@
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrResourceProvider.h"
#include "src/gpu/GrSurfaceDrawContext.h"
+#include "src/gpu/SkGr.h"
#include "src/gpu/glsl/GrGLSLFragmentProcessor.h"
#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
#include "src/gpu/ops/GrFillRectOp.h"
@@ -285,10 +285,8 @@
ii, rgbaData, ii.minRowBytes(),
[](void* addr, void* context) { delete[](GrColor*) addr; }, nullptr);
bitmap.setImmutable();
- GrBitmapTextureMaker maker(fContext, bitmap,
- GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- GrSurfaceProxyView view = maker.view(GrMipmapped::kNo);
- if (!view.proxy() || !view.proxy()->instantiate(fResourceProvider)) {
+ auto view = std::get<0>(GrMakeUncachedBitmapProxyView(fContext, bitmap));
+ if (!view || !view.proxy()->instantiate(fResourceProvider)) {
SkDebugf("Unable to instantiate RGBA8888 test texture.");
return false;
}
@@ -312,10 +310,8 @@
ii, alphaData, ii.minRowBytes(),
[](void* addr, void* context) { delete[](uint8_t*) addr; }, nullptr);
bitmap.setImmutable();
- GrBitmapTextureMaker maker(fContext, bitmap,
- GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- GrSurfaceProxyView view = maker.view(GrMipmapped::kNo);
- if (!view.proxy() || !view.proxy()->instantiate(fResourceProvider)) {
+ auto view = std::get<0>(GrMakeUncachedBitmapProxyView(fContext, bitmap));
+ if (!view || !view.proxy()->instantiate(fResourceProvider)) {
SkDebugf("Unable to instantiate A8 test texture.");
return false;
}
@@ -386,8 +382,7 @@
SkBitmap bitmap;
bitmap.installPixels(ii, pixel, ii.minRowBytes());
bitmap.setImmutable();
- GrBitmapTextureMaker maker(context, bitmap, GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- return maker.view(GrMipmapped::kNo);
+ return std::get<0>(GrMakeUncachedBitmapProxyView(context, bitmap));
}
// We tag logged data as unpremul to avoid conversion when encoding as PNG. The input texture
diff --git a/tests/SpecialImageTest.cpp b/tests/SpecialImageTest.cpp
index a45b725..90f233a 100644
--- a/tests/SpecialImageTest.cpp
+++ b/tests/SpecialImageTest.cpp
@@ -15,7 +15,6 @@
#include "src/core/SkAutoPixmapStorage.h"
#include "src/core/SkSpecialImage.h"
#include "src/core/SkSpecialSurface.h"
-#include "src/gpu/GrBitmapTextureMaker.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrSurfaceProxy.h"
@@ -189,37 +188,36 @@
DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SpecialImage_Gpu, reporter, ctxInfo) {
auto context = ctxInfo.directContext();
SkBitmap bm = create_bm();
- GrBitmapTextureMaker maker(context, bm, GrImageTexGenPolicy::kNew_Uncached_Budgeted);
- auto view = maker.view(GrMipmapped::kNo);
- if (!view.proxy()) {
+ auto [view, ct] = GrMakeUncachedBitmapProxyView(context, bm);
+ if (!view) {
return;
}
- sk_sp<SkSpecialImage> fullSImg(
+ sk_sp<SkSpecialImage> fullSImg =
SkSpecialImage::MakeDeferredFromGpu(context,
SkIRect::MakeWH(kFullSize, kFullSize),
kNeedNewImageUniqueID_SpecialImage,
view,
- maker.colorType(),
+ ct,
nullptr,
- SkSurfaceProps()));
+ SkSurfaceProps());
const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmallerSize);
{
- sk_sp<SkSpecialImage> subSImg1(SkSpecialImage::MakeDeferredFromGpu(
+ sk_sp<SkSpecialImage> subSImg1 = SkSpecialImage::MakeDeferredFromGpu(
context,
subset,
kNeedNewImageUniqueID_SpecialImage,
std::move(view),
- maker.colorType(),
+ ct,
nullptr,
- SkSurfaceProps()));
+ SkSurfaceProps());
test_image(subSImg1, reporter, context, true);
}
{
- sk_sp<SkSpecialImage> subSImg2(fullSImg->makeSubset(subset));
+ sk_sp<SkSpecialImage> subSImg2 = fullSImg->makeSubset(subset);
test_image(subSImg2, reporter, context, true);
}
}