aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrGpu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/GrGpu.cpp')
-rw-r--r--src/gpu/GrGpu.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/gpu/GrGpu.cpp b/src/gpu/GrGpu.cpp
index c72491b3c3..5c2864db3c 100644
--- a/src/gpu/GrGpu.cpp
+++ b/src/gpu/GrGpu.cpp
@@ -56,7 +56,7 @@ bool GrGpu::IsACopyNeededForTextureParams(const GrCaps* caps, GrTextureProxy* te
// those capabilities are required) force a copy.
if ((textureParams.isRepeated() && texProxy->texPriv().isClampOnly()) ||
(GrSamplerState::Filter::kMipMap == textureParams.filter() &&
- texProxy->mipMapped() == GrMipMapped::kNo)) {
+ texProxy->texPriv().doesNotSupportMipMaps())) {
copyParams->fFilter = GrSamplerState::Filter::kNearest;
copyParams->fWidth = texProxy->width();
copyParams->fHeight = texProxy->height();
@@ -138,7 +138,13 @@ sk_sp<GrTexture> GrGpu::wrapBackendTexture(const GrBackendTexture& backendTex,
backendTex.height() > this->caps()->maxTextureSize()) {
return nullptr;
}
- return this->onWrapBackendTexture(backendTex, ownership);
+ sk_sp<GrTexture> tex = this->onWrapBackendTexture(backendTex, ownership);
+ if (tex && !backendTex.hasMipMaps()) {
+ // Ganesh will not ever allocate mipmaps for a wrapped resource. By setting this flag here,
+ // it will be propagated to any proxy that wraps this texture.
+ tex->texturePriv().setDoesNotSupportMipMaps();
+ }
+ return tex;
}
sk_sp<GrTexture> GrGpu::wrapRenderableBackendTexture(const GrBackendTexture& backendTex,
@@ -157,6 +163,11 @@ sk_sp<GrTexture> GrGpu::wrapRenderableBackendTexture(const GrBackendTexture& bac
return nullptr;
}
sk_sp<GrTexture> tex = this->onWrapRenderableBackendTexture(backendTex, sampleCnt, ownership);
+ if (tex && !backendTex.hasMipMaps()) {
+ // Ganesh will not ever allocate mipmaps for a wrapped resource. By setting this flag here,
+ // it will be propagated to any proxy that wraps this texture.
+ tex->texturePriv().setDoesNotSupportMipMaps();
+ }
SkASSERT(!tex || tex->asRenderTarget());
return tex;
}