Remove GrImageTextureMaker.

Make proxy view directly in SkImage_Lazy::onAsView.

Temporarily lean on GrTextureAdjuster for
SkImage_Lazy::asFragmentProcessor.

Bug: skia:11877
Change-Id: I2f8b35d0571ebcf9ffba945ecdf1ac51db6e3eba
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/402400
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
This commit is contained in:
Brian Salomon 2021-04-29 09:21:56 -04:00 committed by Skia Commit-Bot
parent 1c847f5a82
commit 2ee0f48d3f
8 changed files with 28 additions and 94 deletions

View File

@ -124,8 +124,6 @@ skia_gpu_sources = [
"$_src/gpu/GrImageContext.cpp",
"$_src/gpu/GrImageContextPriv.h",
"$_src/gpu/GrImageInfo.h",
"$_src/gpu/GrImageTextureMaker.cpp",
"$_src/gpu/GrImageTextureMaker.h",
"$_src/gpu/GrInnerFanTriangulator.h",
"$_src/gpu/GrManagedResource.cpp",
"$_src/gpu/GrManagedResource.h",

View File

@ -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.
*/
#include "src/gpu/GrImageTextureMaker.h"
#include "src/gpu/GrColorSpaceXform.h"
#include "src/gpu/GrImageContextPriv.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/SkGr.h"
#include "src/gpu/effects/GrBicubicEffect.h"
#include "src/gpu/effects/GrYUVtoRGBEffect.h"
#include "src/image/SkImage_GpuYUVA.h"
#include "src/image/SkImage_Lazy.h"
static GrImageInfo get_image_info(GrRecordingContext* context, const SkImage* client) {
SkASSERT(client->isLazyGenerated());
const SkImage_Lazy* lazyImage = static_cast<const SkImage_Lazy*>(client);
GrColorType ct = lazyImage->colorTypeOfLockTextureProxy(context->priv().caps());
return {ct, client->alphaType(), client->refColorSpace(), client->dimensions()};
}
GrImageTextureMaker::GrImageTextureMaker(GrRecordingContext* context,
const SkImage* client,
GrImageTexGenPolicy texGenPolicy)
: INHERITED(context, get_image_info(context, client))
, fImage(static_cast<const SkImage_Lazy*>(client))
, fTexGenPolicy(texGenPolicy) {
SkASSERT(client->isLazyGenerated());
}
GrSurfaceProxyView GrImageTextureMaker::refOriginalTextureProxyView(GrMipmapped mipMapped) {
return fImage->lockTextureProxyView(this->context(), fTexGenPolicy, mipMapped);
}

View File

@ -1,33 +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 GrImageTextureMaker_DEFINED
#define GrImageTextureMaker_DEFINED
#include "include/core/SkImage.h"
#include "src/gpu/GrTextureMaker.h"
#include "src/gpu/SkGr.h"
class SkImage_Lazy;
class SkImage_GpuYUVA;
/** This class manages the conversion of generator-backed images to GrTextures. If the caching hint
is kAllow the image's ID is used for the cache key. */
class GrImageTextureMaker final : public GrTextureMaker {
public:
GrImageTextureMaker(GrRecordingContext*, const SkImage* client, GrImageTexGenPolicy);
private:
GrSurfaceProxyView refOriginalTextureProxyView(GrMipmapped) override;
const SkImage_Lazy* fImage;
GrImageTexGenPolicy fTexGenPolicy;
using INHERITED = GrTextureMaker;
};
#endif

View File

@ -24,16 +24,19 @@ GrTextureAdjuster::GrTextureAdjuster(GrRecordingContext* context,
GrSurfaceProxyView GrTextureAdjuster::makeMippedCopy() {
GrProxyProvider* proxyProvider = this->context()->priv().proxyProvider();
GrUniqueKey baseKey, mipMappedKey;
GrMakeKeyFromImageID(&baseKey, fUniqueID, SkIRect::MakeSize(this->dimensions()));
if (baseKey.isValid()) {
GrUniqueKey mipmappedKey;
if (fUniqueID != SK_InvalidUniqueID) {
GrUniqueKey baseKey;
GrMakeKeyFromImageID(&baseKey, fUniqueID, SkIRect::MakeSize(this->dimensions()));
SkASSERT(baseKey.isValid());
static const GrUniqueKey::Domain kMipMappedDomain = GrUniqueKey::GenerateDomain();
GrUniqueKey::Builder builder(&mipMappedKey, baseKey, kMipMappedDomain, 0);
}
sk_sp<GrTextureProxy> cachedCopy;
if (mipMappedKey.isValid()) {
cachedCopy = proxyProvider->findOrCreateProxyByUniqueKey(mipMappedKey);
if (cachedCopy) {
{ // No extra values beyond the domain are required. Must name the var to please
// clang-tidy.
GrUniqueKey::Builder b(&mipmappedKey, baseKey, kMipMappedDomain, 0);
}
SkASSERT(mipmappedKey.isValid());
if (sk_sp<GrTextureProxy> cachedCopy =
proxyProvider->findOrCreateProxyByUniqueKey(mipmappedKey)) {
return {std::move(cachedCopy), fOriginal.origin(), fOriginal.swizzle()};
}
}
@ -42,9 +45,9 @@ GrSurfaceProxyView GrTextureAdjuster::makeMippedCopy() {
if (!copy) {
return {};
}
if (mipMappedKey.isValid()) {
if (mipmappedKey.isValid()) {
// TODO: If we move listeners up from SkImage_Lazy to SkImage_Base then add one here.
proxyProvider->assignUniqueKeyToProxy(mipMappedKey, copy.asTextureProxy());
proxyProvider->assignUniqueKeyToProxy(mipmappedKey, copy.asTextureProxy());
}
return copy;
}

View File

@ -33,7 +33,6 @@
#include "src/gpu/GrBlurUtils.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrGpu.h"
#include "src/gpu/GrImageTextureMaker.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrStyle.h"
#include "src/gpu/GrSurfaceProxyPriv.h"

View File

@ -17,7 +17,6 @@
#include "src/gpu/GrBlurUtils.h"
#include "src/gpu/GrCaps.h"
#include "src/gpu/GrColorSpaceXform.h"
#include "src/gpu/GrImageTextureMaker.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrStyle.h"
#include "src/gpu/GrSurfaceDrawContext.h"

View File

@ -30,7 +30,6 @@
#include "src/gpu/GrGpu.h"
#include "src/gpu/GrImageContextPriv.h"
#include "src/gpu/GrImageInfo.h"
#include "src/gpu/GrImageTextureMaker.h"
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrSemaphore.h"

View File

@ -24,12 +24,12 @@
#include "src/gpu/GrCaps.h"
#include "src/gpu/GrColorSpaceXform.h"
#include "src/gpu/GrGpuResourcePriv.h"
#include "src/gpu/GrImageTextureMaker.h"
#include "src/gpu/GrPaint.h"
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrSamplerState.h"
#include "src/gpu/GrSurfaceFillContext.h"
#include "src/gpu/GrTextureAdjuster.h"
#include "src/gpu/GrYUVATextureProxies.h"
#include "src/gpu/SkGr.h"
#include "src/gpu/effects/GrYUVtoRGBEffect.h"
@ -251,8 +251,8 @@ std::tuple<GrSurfaceProxyView, GrColorType> SkImage_Lazy::onAsView(
GrRecordingContext* context,
GrMipmapped mipmapped,
GrImageTexGenPolicy policy) const {
GrImageTextureMaker textureMaker(context, this, policy);
return {textureMaker.view(mipmapped), textureMaker.colorType()};
GrColorType ct = this->colorTypeOfLockTextureProxy(context->priv().caps());
return {this->lockTextureProxyView(context, policy, mipmapped), ct};
}
std::unique_ptr<GrFragmentProcessor> SkImage_Lazy::onAsFragmentProcessor(
@ -262,14 +262,22 @@ std::unique_ptr<GrFragmentProcessor> SkImage_Lazy::onAsFragmentProcessor(
const SkMatrix& m,
const SkRect* subset,
const SkRect* domain) const {
// TODO: If the CPU data is extracted as planes return a FP that reconstructs the image from
// the planes.
auto wmx = SkTileModeToWrapMode(tileModes[0]);
auto wmy = SkTileModeToWrapMode(tileModes[1]);
GrImageTextureMaker maker(rContext, this, GrImageTexGenPolicy::kDraw);
auto mm = sampling.mipmap == SkMipmapMode::kNone ? GrMipmapped::kNo : GrMipmapped::kYes;
auto [view, ct] = this->asView(rContext, mm);
GrColorInfo info = this->imageInfo().colorInfo();
info = info.makeColorType(ct);
// We pass the invalid unique ID here because our above call to asView() should have already
// made and cached a mipmapped texture if mipmapping was called for.
GrTextureAdjuster adjuster(rContext, std::move(view), std::move(info), SK_InvalidUniqueID);
if (sampling.useCubic) {
return maker.createBicubicFragmentProcessor(m, subset, domain, wmx, wmy, sampling.cubic);
return adjuster.createBicubicFragmentProcessor(m, subset, domain, wmx, wmy, sampling.cubic);
}
GrSamplerState sampler(wmx, wmy, sampling.filter, sampling.mipmap);
return maker.createFragmentProcessor(m, subset, domain, sampler);
return adjuster.createFragmentProcessor(m, subset, domain, sampler);
}
GrSurfaceProxyView SkImage_Lazy::textureProxyViewFromPlanes(GrRecordingContext* ctx,