diff options
author | 2018-04-12 16:50:17 -0400 | |
---|---|---|
committer | 2018-04-12 21:40:11 +0000 | |
commit | 92cbf3fc0112c99ec4aea9d8b7550a2573463262 (patch) | |
tree | 5dcec51815cd729db1f917b13dc5d185c1899a09 /src/gpu/GrProxyProvider.cpp | |
parent | 5f3ce3e43a56d9739ef5c2c12e889efd8e120659 (diff) |
Don't create lazy proxys if their width/height is greater than max tex size
Bug: skia:
Change-Id: I53508c4e3bbd4c315be4b29a66716e0c5e7f25bf
Reviewed-on: https://skia-review.googlesource.com/121161
Reviewed-by: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src/gpu/GrProxyProvider.cpp')
-rw-r--r-- | src/gpu/GrProxyProvider.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/gpu/GrProxyProvider.cpp b/src/gpu/GrProxyProvider.cpp index b65c3dfe17..a4b8d61cf3 100644 --- a/src/gpu/GrProxyProvider.cpp +++ b/src/gpu/GrProxyProvider.cpp @@ -257,6 +257,10 @@ sk_sp<GrTextureProxy> GrProxyProvider::createTextureProxy(sk_sp<SkImage> srcImag }, desc, kTopLeft_GrSurfaceOrigin, GrMipMapped::kNo, surfaceFlags, fit, budgeted); + if (!proxy) { + return nullptr; + } + if (fResourceProvider) { // In order to reuse code we always create a lazy proxy. When we aren't in DDL mode however // we're better off instantiating the proxy immediately here. @@ -354,6 +358,10 @@ sk_sp<GrTextureProxy> GrProxyProvider::createMipMapProxyFromBitmap(const SkBitma desc, kTopLeft_GrSurfaceOrigin, GrMipMapped::kYes, SkBackingFit::kExact, SkBudgeted::kYes); + if (!proxy) { + return nullptr; + } + if (fResourceProvider) { // In order to reuse code we always create a lazy proxy. When we aren't in DDL mode however // we're better off instantiating the proxy immediately here. @@ -539,6 +547,11 @@ sk_sp<GrTextureProxy> GrProxyProvider::createLazyProxy(LazyInstantiateCallback&& LazyInstantiationType lazyType) { SkASSERT((desc.fWidth <= 0 && desc.fHeight <= 0) || (desc.fWidth > 0 && desc.fHeight > 0)); + + if (desc.fWidth > fCaps->maxTextureSize() || desc.fHeight > fCaps->maxTextureSize()) { + return nullptr; + } + surfaceFlags |= GrInternalSurfaceFlags::kNoPendingIO; #ifdef SK_DEBUG @@ -566,6 +579,11 @@ sk_sp<GrRenderTargetProxy> GrProxyProvider::createLazyRenderTargetProxy( SkBackingFit fit, SkBudgeted budgeted) { SkASSERT((desc.fWidth <= 0 && desc.fHeight <= 0) || (desc.fWidth > 0 && desc.fHeight > 0)); + + if (desc.fWidth > fCaps->maxRenderTargetSize() || desc.fHeight > fCaps->maxRenderTargetSize()) { + return nullptr; + } + SkASSERT(SkToBool(kRenderTarget_GrSurfaceFlag & desc.fFlags)); surfaceFlags |= GrInternalSurfaceFlags::kNoPendingIO; |