aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Greg Daniel <egdaniel@google.com>2018-02-21 13:02:32 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-02-21 18:22:47 +0000
commit0a7aa14bf36cbb444b84902a37591d7a9c84fbd0 (patch)
treeaa2769ad071df6f5250a00be9a67ef0c6baf4d44
parent32f72e25bd802d15ce43a3dd7ef4a3fcfd646727 (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.cpp1
-rw-r--r--gm/texturedomaineffect.cpp1
-rw-r--r--gm/yuvtorgbeffect.cpp2
-rw-r--r--src/effects/SkTableColorFilter.cpp4
-rw-r--r--src/gpu/GrProxyProvider.cpp4
-rw-r--r--src/gpu/SkGpuDevice.cpp3
-rw-r--r--tests/DeferredDisplayListTest.cpp1
-rw-r--r--tests/ProxyTest.cpp1
-rw-r--r--tests/SurfaceTest.cpp1
-rw-r--r--tools/gpu/GrTest.cpp3
-rw-r--r--tools/skpbench/skpbench.cpp4
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()) {