diff options
author | Greg Daniel <egdaniel@google.com> | 2018-02-21 13:02:32 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-02-21 18:22:47 +0000 |
commit | 0a7aa14bf36cbb444b84902a37591d7a9c84fbd0 (patch) | |
tree | aa2769ad071df6f5250a00be9a67ef0c6baf4d44 | |
parent | 32f72e25bd802d15ce43a3dd7ef4a3fcfd646727 (diff) |
Add checks for failed SkImageInfo2GrPixelConfig calls
Bug: skia:7645
Change-Id: I32b9326fb43490ef6a7a99527243b68d89184ae1
Reviewed-on: https://skia-review.googlesource.com/109083
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
-rw-r--r-- | gm/texdata.cpp | 1 | ||||
-rw-r--r-- | gm/texturedomaineffect.cpp | 1 | ||||
-rw-r--r-- | gm/yuvtorgbeffect.cpp | 2 | ||||
-rw-r--r-- | src/effects/SkTableColorFilter.cpp | 4 | ||||
-rw-r--r-- | src/gpu/GrProxyProvider.cpp | 4 | ||||
-rw-r--r-- | src/gpu/SkGpuDevice.cpp | 3 | ||||
-rw-r--r-- | tests/DeferredDisplayListTest.cpp | 1 | ||||
-rw-r--r-- | tests/ProxyTest.cpp | 1 | ||||
-rw-r--r-- | tests/SurfaceTest.cpp | 1 | ||||
-rw-r--r-- | tools/gpu/GrTest.cpp | 3 | ||||
-rw-r--r-- | tools/skpbench/skpbench.cpp | 4 |
11 files changed, 25 insertions, 0 deletions
diff --git a/gm/texdata.cpp b/gm/texdata.cpp index 1f7d107a30..b00daf52f5 100644 --- a/gm/texdata.cpp +++ b/gm/texdata.cpp @@ -92,6 +92,7 @@ DEF_SIMPLE_GM_BG(texdata, canvas, 2 * S, 2 * S, SK_ColorBLACK) { desc.fWidth = 2 * S; desc.fHeight = 2 * S; desc.fConfig = SkImageInfo2GrPixelConfig(ii, *context->caps()); + SkASSERT(kUnknown_GrPixelConfig != desc.fConfig); sk_sp<GrTextureProxy> proxy = proxyProvider->createTextureProxy(desc, SkBudgeted::kNo, gTextureData.get(), 0); diff --git a/gm/texturedomaineffect.cpp b/gm/texturedomaineffect.cpp index 57f012973f..7f7f4c4817 100644 --- a/gm/texturedomaineffect.cpp +++ b/gm/texturedomaineffect.cpp @@ -93,6 +93,7 @@ protected: desc.fWidth = fBmp.width(); desc.fHeight = fBmp.height(); desc.fConfig = SkImageInfo2GrPixelConfig(fBmp.info(), *context->caps()); + SkASSERT(kUnknown_GrPixelConfig != desc.fConfig); sk_sp<GrTextureProxy> proxy = proxyProvider->createTextureProxy(desc, SkBudgeted::kYes, fBmp.getPixels(), diff --git a/gm/yuvtorgbeffect.cpp b/gm/yuvtorgbeffect.cpp index e314ea28bc..841f57488e 100644 --- a/gm/yuvtorgbeffect.cpp +++ b/gm/yuvtorgbeffect.cpp @@ -94,6 +94,7 @@ protected: desc.fWidth = fBmp[i].width(); desc.fHeight = fBmp[i].height(); desc.fConfig = SkImageInfo2GrPixelConfig(fBmp[i].info(), *context->caps()); + SkASSERT(kUnknown_GrPixelConfig != desc.fConfig); proxy[i] = proxyProvider->createTextureProxy(desc, SkBudgeted::kYes, fBmp[i].getPixels(), @@ -225,6 +226,7 @@ protected: desc.fWidth = fBmp[index].width(); desc.fHeight = fBmp[index].height(); desc.fConfig = SkImageInfo2GrPixelConfig(fBmp[index].info(), *context->caps()); + SkASSERT(kUnknown_GrPixelConfig != desc.fConfig); proxy[i] = proxyProvider->createTextureProxy(desc, SkBudgeted::kYes, fBmp[index].getPixels(), diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp index 124e98f8ae..46bfba99ca 100644 --- a/src/effects/SkTableColorFilter.cpp +++ b/src/effects/SkTableColorFilter.cpp @@ -448,6 +448,10 @@ std::unique_ptr<GrFragmentProcessor> ColorTableEffect::Make(GrContext* context, desc.fContext = context; desc.fConfig = SkImageInfo2GrPixelConfig(bitmap.info(), *context->caps()); + if (kUnknown_GrPixelConfig == desc.fConfig) { + return nullptr; + } + GrTextureStripAtlas* atlas = GrTextureStripAtlas::GetAtlas(desc); int row = atlas->lockRow(bitmap); sk_sp<GrTextureProxy> proxy; diff --git a/src/gpu/GrProxyProvider.cpp b/src/gpu/GrProxyProvider.cpp index 724bda5a9c..0027f2a84a 100644 --- a/src/gpu/GrProxyProvider.cpp +++ b/src/gpu/GrProxyProvider.cpp @@ -214,6 +214,10 @@ sk_sp<GrTextureProxy> GrProxyProvider::createTextureProxy(sk_sp<SkImage> srcImag GrPixelConfig config = SkImageInfo2GrPixelConfig(as_IB(srcImage)->onImageInfo(), *this->caps()); + if (kUnknown_GrPixelConfig == config) { + return nullptr; + } + if (SkToBool(flags & kRenderTarget_GrSurfaceFlag)) { sampleCnt = this->caps()->getRenderTargetSampleCount(sampleCnt, config); if (!sampleCnt) { diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index 9a01394691..bc5a34b132 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -159,6 +159,9 @@ sk_sp<GrRenderTargetContext> SkGpuDevice::MakeRenderTargetContext( } GrPixelConfig config = SkImageInfo2GrPixelConfig(origInfo, *context->caps()); + if (kUnknown_GrPixelConfig == config) { + return nullptr; + } // This method is used to create SkGpuDevice's for SkSurface_Gpus. In this case // they need to be exact. return context->makeDeferredRenderTargetContext( diff --git a/tests/DeferredDisplayListTest.cpp b/tests/DeferredDisplayListTest.cpp index 0fc4c5de14..924a93464a 100644 --- a/tests/DeferredDisplayListTest.cpp +++ b/tests/DeferredDisplayListTest.cpp @@ -165,6 +165,7 @@ public: GrGpu* gpu = context->contextPriv().getGpu(); GrPixelConfig config = SkImageInfo2GrPixelConfig(fColorType, nullptr, *context->caps()); + SkASSERT(kUnknown_GrPixelConfig != config); *backend = gpu->createTestingOnlyBackendTexture(nullptr, fWidth, fHeight, config, true, GrMipMapped::kNo); diff --git a/tests/ProxyTest.cpp b/tests/ProxyTest.cpp index 20d721be86..f48e2a090f 100644 --- a/tests/ProxyTest.cpp +++ b/tests/ProxyTest.cpp @@ -199,6 +199,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) { for (auto colorType : { kAlpha_8_SkColorType, kRGBA_8888_SkColorType }) { for (auto numSamples : {1, 4}) { GrPixelConfig config = SkImageInfo2GrPixelConfig(colorType, nullptr, caps); + SkASSERT(kUnknown_GrPixelConfig != config); int supportedNumSamples = caps.getRenderTargetSampleCount(numSamples, config); if (!supportedNumSamples) { diff --git a/tests/SurfaceTest.cpp b/tests/SurfaceTest.cpp index c20fb0768c..4ba549cd9a 100644 --- a/tests/SurfaceTest.cpp +++ b/tests/SurfaceTest.cpp @@ -1010,6 +1010,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceCreationWithColorSpace_Gpu, reporter, static const int kSize = 10; GrPixelConfig config = SkImageInfo2GrPixelConfig(info, *context->caps()); + SkASSERT(kUnknown_GrPixelConfig != config); GrBackendTexture backendTex = gpu->createTestingOnlyBackendTexture( nullptr, kSize, kSize, config, true, GrMipMapped::kNo); diff --git a/tools/gpu/GrTest.cpp b/tools/gpu/GrTest.cpp index df5baf9b37..c6d3bbe2ef 100644 --- a/tools/gpu/GrTest.cpp +++ b/tools/gpu/GrTest.cpp @@ -187,6 +187,9 @@ GrBackendTexture GrGpu::createTestingOnlyBackendTexture(void* pixels, int w, int SkColorType colorType, bool isRenderTarget, GrMipMapped mipMapped) { GrPixelConfig config = SkImageInfo2GrPixelConfig(colorType, nullptr, *this->caps()); + if (kUnknown_GrPixelConfig == config) { + return GrBackendTexture(); + } return this->createTestingOnlyBackendTexture(pixels, w, h, config, isRenderTarget, mipMapped); } diff --git a/tools/skpbench/skpbench.cpp b/tools/skpbench/skpbench.cpp index 6b89bc27ff..562c48165f 100644 --- a/tools/skpbench/skpbench.cpp +++ b/tools/skpbench/skpbench.cpp @@ -292,6 +292,10 @@ int main(int argc, char** argv) { GrPixelConfig grPixConfig = SkImageInfo2GrPixelConfig(config->getColorType(), config->getColorSpace(), *ctx->caps()); + if (kUnknown_GrPixelConfig == grPixConfig) { + exitf(ExitErr::kUnavailable, "failed to get GrPixelConfig from SkColorType: %d", + config->getColorType()); + } int supportedSampleCount = ctx->caps()->getRenderTargetSampleCount(config->getSamples(), grPixConfig); if (supportedSampleCount != config->getSamples()) { |