[GPU] Add explicit byte order and PM vs. UPM 8888 configs
Review URL: http://codereview.appspot.com/5347042/
git-svn-id: http://skia.googlecode.com/svn/trunk@2618 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index 730f631..031333b 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -116,9 +116,10 @@
case kRGBA_4444_GrPixelConfig:
*isOpaque = false;
return SkBitmap::kARGB_4444_Config;
- case kRGBA_8888_GrPixelConfig:
- case kRGBX_8888_GrPixelConfig:
- *isOpaque = (kRGBX_8888_GrPixelConfig == config);
+ case kSkia8888_PM_GrPixelConfig:
+ // we don't currently have a way of knowing whether
+ // a 8888 is opaque based on the config.
+ *isOpaque = false;
return SkBitmap::kARGB_8888_Config;
default:
*isOpaque = false;
@@ -256,23 +257,43 @@
///////////////////////////////////////////////////////////////////////////////
+namespace {
+GrPixelConfig config8888_to_gr_config(SkCanvas::Config8888 config8888) {
+ switch (config8888) {
+ case SkCanvas::kNative_Premul_Config8888:
+ return kSkia8888_PM_GrPixelConfig;
+ case SkCanvas::kNative_Unpremul_Config8888:
+ return kSkia8888_UPM_GrPixelConfig;
+ case SkCanvas::kBGRA_Premul_Config8888:
+ return kBGRA_8888_PM_GrPixelConfig;
+ case SkCanvas::kBGRA_Unpremul_Config8888:
+ return kBGRA_8888_UPM_GrPixelConfig;
+ case SkCanvas::kRGBA_Premul_Config8888:
+ return kRGBA_8888_PM_GrPixelConfig;
+ case SkCanvas::kRGBA_Unpremul_Config8888:
+ return kRGBA_8888_UPM_GrPixelConfig;
+ default:
+ GrCrash("Unexpected Config8888.");
+ return kSkia8888_PM_GrPixelConfig;
+ }
+}
+}
+
bool SkGpuDevice::onReadPixels(const SkBitmap& bitmap,
int x, int y,
SkCanvas::Config8888 config8888) {
- // support for non-native configs coming soon
- if (config8888 != SkCanvas::kNative_Premul_Config8888) {
- return false;
- }
SkASSERT(SkBitmap::kARGB_8888_Config == bitmap.config());
SkASSERT(!bitmap.isNull());
SkASSERT(SkIRect::MakeWH(this->width(), this->height()).contains(SkIRect::MakeXYWH(x, y, bitmap.width(), bitmap.height())));
SkAutoLockPixels alp(bitmap);
+ GrPixelConfig config;
+ config = config8888_to_gr_config(config8888);
return fContext->readRenderTargetPixels(fRenderTarget,
x, y,
bitmap.width(),
bitmap.height(),
- kRGBA_8888_GrPixelConfig,
+ config,
bitmap.getPixels(),
bitmap.rowBytes());
}
@@ -739,7 +760,7 @@
srcRect.height(),
// We actually only need A8, but it often isn't supported as a
// render target
- kRGBA_8888_GrPixelConfig
+ kRGBA_8888_PM_GrPixelConfig
};
GrAutoScratchTexture srcEntry(context, desc);