diff options
Diffstat (limited to 'src/gpu/GrGpu.cpp')
-rw-r--r-- | src/gpu/GrGpu.cpp | 15 |
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; } |