aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu
diff options
context:
space:
mode:
authorGravatar Matt Sarett <msarett@google.com>2017-01-13 12:29:08 -0500
committerGravatar Matt Sarett <msarett@google.com>2017-01-13 18:48:00 +0000
commitcf5d6caff7a58f1c7ecc36d9a91ccdada5fc7b78 (patch)
tree918f47bdc667daab329de6ce01318e5cd6232dce /src/gpu
parent0497f088bb41338b1b1400556b9b690decc846fa (diff)
Add SkImageInfoValidConversion() and SkImageInfoIsValid
The idea is share these standards for the following: SkImage::readPixels() SkCanvas::readPixels() SkCanvas::writePixels() SkBitmap::readPixels() SkPixmap::readPixels() On the raster side, SkPixmap::readPixels() is the right place to check, because all raster calls go through there eventually. Then at lower levels (ex: SkPixelInfo), we can assert. There's not really a unifying location for gpu calls, so I've added this in multiple places. I haven't really dug into the gpu code to SkASSERT() on invalid cases that we will have already caught. Follow-up work: Similar refactor for SkReadPixelRec::trim(). Code cleanup in SkPixelInfo::CopyPixels() BUG=skia:6021 Change-Id: I91ecce10e46c1a6530f0af24a9eb8226dbecaaa2 Reviewed-on: https://skia-review.googlesource.com/6887 Reviewed-by: Brian Osman <brianosman@google.com> Reviewed-by: Mike Reed <reed@google.com>
Diffstat (limited to 'src/gpu')
-rw-r--r--src/gpu/SkGpuDevice.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index 258713c537..1dec0f6371 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -26,6 +26,7 @@
#include "SkImageCacherator.h"
#include "SkImageFilter.h"
#include "SkImageFilterCache.h"
+#include "SkImageInfoPriv.h"
#include "SkImage_Base.h"
#include "SkLatticeIter.h"
#include "SkMaskFilter.h"
@@ -194,6 +195,10 @@ bool SkGpuDevice::onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, size
int x, int y) {
ASSERT_SINGLE_OWNER
+ if (!SkImageInfoValidConversion(dstInfo, this->imageInfo())) {
+ return false;
+ }
+
return fRenderTargetContext->readPixels(dstInfo, dstPixels, dstRowBytes, x, y);
}
@@ -201,6 +206,10 @@ bool SkGpuDevice::onWritePixels(const SkImageInfo& srcInfo, const void* srcPixel
size_t srcRowBytes, int x, int y) {
ASSERT_SINGLE_OWNER
+ if (!SkImageInfoValidConversion(this->imageInfo(), srcInfo)) {
+ return false;
+ }
+
return fRenderTargetContext->writePixels(srcInfo, srcPixels, srcRowBytes, x, y);
}