Remove kRenderTarget_GrSurfaceFlag, instead pass GrRenderable.
This is the last surface desc flag, so remove flags from GrSurfaceDesc.
Bug: skia:6718
Change-Id: Id3ed66b161289927b62f40bfb1f6482cf544deda
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/227858
Reviewed-by: Robert Phillips <robertphillips@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/GrResourceProvider.cpp b/src/gpu/GrResourceProvider.cpp
index 69f6c0f..d49721c 100644
--- a/src/gpu/GrResourceProvider.cpp
+++ b/src/gpu/GrResourceProvider.cpp
@@ -76,7 +76,8 @@
return true;
}
-sk_sp<GrTexture> GrResourceProvider::createTexture(const GrSurfaceDesc& desc, SkBudgeted budgeted,
+sk_sp<GrTexture> GrResourceProvider::createTexture(const GrSurfaceDesc& desc,
+ GrRenderable renderable, SkBudgeted budgeted,
const GrMipLevel texels[], int mipLevelCount) {
ASSERT_SINGLE_OWNER
@@ -87,7 +88,7 @@
}
GrMipMapped mipMapped = mipLevelCount > 1 ? GrMipMapped::kYes : GrMipMapped::kNo;
- if (!fCaps->validateSurfaceDesc(desc, mipMapped)) {
+ if (!fCaps->validateSurfaceDesc(desc, renderable, mipMapped)) {
return nullptr;
}
bool mustInitializeAllLevels = this->caps()->createTextureMustSpecifyAllLevels();
@@ -109,12 +110,13 @@
h = std::max(h / 2, 1);
}
}
- return fGpu->createTexture(desc, budgeted, tmpTexels.get(), mipLevelCount);
+ return fGpu->createTexture(desc, renderable, budgeted, tmpTexels.get(), mipLevelCount);
}
sk_sp<GrTexture> GrResourceProvider::getExactScratch(const GrSurfaceDesc& desc,
- SkBudgeted budgeted, Flags flags) {
- sk_sp<GrTexture> tex(this->refScratchTexture(desc, flags));
+ GrRenderable renderable, SkBudgeted budgeted,
+ Flags flags) {
+ sk_sp<GrTexture> tex(this->refScratchTexture(desc, renderable, flags));
if (tex && SkBudgeted::kNo == budgeted) {
tex->resourcePriv().makeUnbudgeted();
}
@@ -123,6 +125,7 @@
}
sk_sp<GrTexture> GrResourceProvider::createTexture(const GrSurfaceDesc& desc,
+ GrRenderable renderable,
SkBudgeted budgeted,
SkBackingFit fit,
const GrMipLevel& mipLevel,
@@ -137,7 +140,7 @@
return nullptr;
}
- if (!fCaps->validateSurfaceDesc(desc, GrMipMapped::kNo)) {
+ if (!fCaps->validateSurfaceDesc(desc, renderable, GrMipMapped::kNo)) {
return nullptr;
}
@@ -157,8 +160,8 @@
GrColorType colorType = GrPixelConfigToColorType(desc.fConfig);
sk_sp<GrTexture> tex = (SkBackingFit::kApprox == fit)
- ? this->createApproxTexture(desc, flags)
- : this->createTexture(desc, budgeted, flags);
+ ? this->createApproxTexture(desc, renderable, flags)
+ : this->createTexture(desc, renderable, budgeted, flags);
if (!tex) {
return nullptr;
}
@@ -192,20 +195,21 @@
data->size());
}
-sk_sp<GrTexture> GrResourceProvider::createTexture(const GrSurfaceDesc& desc, SkBudgeted budgeted,
+sk_sp<GrTexture> GrResourceProvider::createTexture(const GrSurfaceDesc& desc,
+ GrRenderable renderable, SkBudgeted budgeted,
Flags flags) {
ASSERT_SINGLE_OWNER
if (this->isAbandoned()) {
return nullptr;
}
- if (!fCaps->validateSurfaceDesc(desc, GrMipMapped::kNo)) {
+ if (!fCaps->validateSurfaceDesc(desc, renderable, GrMipMapped::kNo)) {
return nullptr;
}
// Compressed textures are read-only so they don't support re-use for scratch.
if (!GrPixelConfigIsCompressed(desc.fConfig)) {
- sk_sp<GrTexture> tex = this->getExactScratch(desc, budgeted, flags);
+ sk_sp<GrTexture> tex = this->getExactScratch(desc, renderable, budgeted, flags);
if (tex) {
return tex;
}
@@ -218,10 +222,10 @@
GrMipLevel level;
level.fRowBytes = rowBytes;
level.fPixels = zeros.get();
- return fGpu->createTexture(desc, budgeted, &level, 1);
+ return fGpu->createTexture(desc, renderable, budgeted, &level, 1);
}
- return fGpu->createTexture(desc, budgeted);
+ return fGpu->createTexture(desc, renderable, budgeted);
}
// Map 'value' to a larger multiple of 2. Values <= 'kMagicTol' will pop up to
@@ -251,7 +255,7 @@
}
sk_sp<GrTexture> GrResourceProvider::createApproxTexture(const GrSurfaceDesc& desc,
- Flags flags) {
+ GrRenderable renderable, Flags flags) {
ASSERT_SINGLE_OWNER
SkASSERT(Flags::kNone == flags || Flags::kNoPendingIO == flags);
@@ -264,24 +268,24 @@
return nullptr;
}
- if (!fCaps->validateSurfaceDesc(desc, GrMipMapped::kNo)) {
+ if (!fCaps->validateSurfaceDesc(desc, renderable, GrMipMapped::kNo)) {
return nullptr;
}
- if (auto tex = this->refScratchTexture(desc, flags)) {
+ if (auto tex = this->refScratchTexture(desc, renderable, flags)) {
return tex;
}
SkTCopyOnFirstWrite<GrSurfaceDesc> copyDesc(desc);
// bin by some multiple or power of 2 with a reasonable min
- if (fGpu->caps()->reuseScratchTextures() || (desc.fFlags & kRenderTarget_GrSurfaceFlag)) {
+ if (fGpu->caps()->reuseScratchTextures() || renderable == GrRenderable::kYes) {
GrSurfaceDesc* wdesc = copyDesc.writable();
wdesc->fWidth = MakeApprox(wdesc->fWidth);
wdesc->fHeight = MakeApprox(wdesc->fHeight);
}
- if (auto tex = this->refScratchTexture(*copyDesc, flags)) {
+ if (auto tex = this->refScratchTexture(*copyDesc, renderable, flags)) {
return tex;
}
@@ -292,33 +296,33 @@
GrMipLevel level;
level.fRowBytes = rowBytes;
level.fPixels = zeros.get();
- return fGpu->createTexture(*copyDesc, SkBudgeted::kYes, &level, 1);
+ return fGpu->createTexture(*copyDesc, renderable, SkBudgeted::kYes, &level, 1);
}
- return fGpu->createTexture(*copyDesc, SkBudgeted::kYes);
+ return fGpu->createTexture(*copyDesc, renderable, SkBudgeted::kYes);
}
-sk_sp<GrTexture> GrResourceProvider::refScratchTexture(const GrSurfaceDesc& desc, Flags flags) {
+sk_sp<GrTexture> GrResourceProvider::refScratchTexture(const GrSurfaceDesc& desc,
+ GrRenderable renderable, Flags flags) {
ASSERT_SINGLE_OWNER
SkASSERT(!this->isAbandoned());
SkASSERT(!GrPixelConfigIsCompressed(desc.fConfig));
- SkASSERT(fCaps->validateSurfaceDesc(desc, GrMipMapped::kNo));
+ SkASSERT(fCaps->validateSurfaceDesc(desc, renderable, GrMipMapped::kNo));
// We could make initial clears work with scratch textures but it is a rare case so we just opt
// to fall back to making a new texture.
- if (fGpu->caps()->reuseScratchTextures() || (desc.fFlags & kRenderTarget_GrSurfaceFlag)) {
+ if (fGpu->caps()->reuseScratchTextures() || renderable == GrRenderable::kYes) {
GrScratchKey key;
- GrTexturePriv::ComputeScratchKey(desc, &key);
+ GrTexturePriv::ComputeScratchKey(desc, renderable, &key);
auto scratchFlags = GrResourceCache::ScratchFlags::kNone;
if (Flags::kNoPendingIO & flags) {
scratchFlags |= GrResourceCache::ScratchFlags::kRequireNoPendingIO;
- } else if (!(desc.fFlags & kRenderTarget_GrSurfaceFlag)) {
+ } else if (renderable == GrRenderable::kNo) {
// If it is not a render target then it will most likely be populated by
// writePixels() which will trigger a flush if the texture has pending IO.
scratchFlags |= GrResourceCache::ScratchFlags::kPreferNoPendingIO;
}
- GrGpuResource* resource = fCache->findAndRefScratchResource(key,
- GrSurface::WorstCaseSize(desc),
- scratchFlags);
+ GrGpuResource* resource = fCache->findAndRefScratchResource(
+ key, GrSurface::WorstCaseSize(desc, renderable), scratchFlags);
if (resource) {
fGpu->stats()->incNumScratchTexturesReused();
GrSurface* surface = static_cast<GrSurface*>(resource);