summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author sergeyv <sergeyv@google.com> 2016-12-14 16:34:55 -0800
committer sergeyv <sergeyv@google.com> 2016-12-14 16:34:55 -0800
commit91d6354cde90b6625d4af6a5d909d886bf602a49 (patch)
treecd3cad97d94528e7f19783f4cb4e5960fb414415
parent0b2a66c72ea8f2ae252047e62d407c5c366dc1a9 (diff)
HWUI: fix support RGB_565 for hardware bitmaps
Test: hwuimacro hwBitmap565 bug:30999911 Change-Id: Ie4128aba95a92041b7388c46d0b2109feaae302a
-rw-r--r--libs/hwui/hwui/Bitmap.cpp2
-rw-r--r--libs/hwui/tests/common/BitmapAllocationTestUtils.h4
-rw-r--r--libs/hwui/tests/common/scenes/HwBitmap565.cpp49
3 files changed, 54 insertions, 1 deletions
diff --git a/libs/hwui/hwui/Bitmap.cpp b/libs/hwui/hwui/Bitmap.cpp
index 64ef866631f3..2177af1773e5 100644
--- a/libs/hwui/hwui/Bitmap.cpp
+++ b/libs/hwui/hwui/Bitmap.cpp
@@ -106,6 +106,8 @@ static PixelFormat internalFormatToPixelFormat(GLint internalFormat) {
return PIXEL_FORMAT_RGBA_8888;
case GL_RGBA:
return PIXEL_FORMAT_RGBA_8888;
+ case GL_RGB:
+ return PIXEL_FORMAT_RGB_565;
default:
LOG_ALWAYS_FATAL("Unsupported bitmap colorType: %d", internalFormat);
return PIXEL_FORMAT_UNKNOWN;
diff --git a/libs/hwui/tests/common/BitmapAllocationTestUtils.h b/libs/hwui/tests/common/BitmapAllocationTestUtils.h
index 6dadd3e364cf..4892179f0d48 100644
--- a/libs/hwui/tests/common/BitmapAllocationTestUtils.h
+++ b/libs/hwui/tests/common/BitmapAllocationTestUtils.h
@@ -39,7 +39,9 @@ public:
static sk_sp<Bitmap> allocateHardwareBitmap(int width, int height,
SkColorType colorType, std::function<void(SkBitmap& bitmap)> setup) {
SkBitmap skBitmap;
- sk_sp<Bitmap> heapBitmap(TestUtils::createBitmap(width, height, &skBitmap));
+ SkImageInfo info = SkImageInfo::Make(width, height, colorType, kPremul_SkAlphaType);
+ skBitmap.setInfo(info);
+ sk_sp<Bitmap> heapBitmap(Bitmap::allocateHeapBitmap(&skBitmap, nullptr));
setup(skBitmap);
return Bitmap::allocateHardwareBitmap(skBitmap);
}
diff --git a/libs/hwui/tests/common/scenes/HwBitmap565.cpp b/libs/hwui/tests/common/scenes/HwBitmap565.cpp
new file mode 100644
index 000000000000..18fea3d1cb81
--- /dev/null
+++ b/libs/hwui/tests/common/scenes/HwBitmap565.cpp
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "TestSceneBase.h"
+#include "utils/Color.h"
+#include "tests/common/BitmapAllocationTestUtils.h"
+
+class HwBitmap565;
+
+static TestScene::Registrar _HwBitmap565(TestScene::Info{
+ "hwBitmap565",
+ "Draws composite shader with hardware bitmap",
+ TestScene::simpleCreateScene<HwBitmap565>
+});
+
+class HwBitmap565 : public TestScene {
+public:
+ sp<RenderNode> card;
+ void createContent(int width, int height, Canvas& canvas) override {
+ canvas.drawColor(Color::Grey_200, SkBlendMode::kSrcOver);
+
+ sk_sp<Bitmap> hardwareBitmap = BitmapAllocationTestUtils::allocateHardwareBitmap(200, 200,
+ kRGB_565_SkColorType, [](SkBitmap& skBitmap) {
+ skBitmap.eraseColor(Color::White);
+ SkCanvas skCanvas(skBitmap);
+ SkPaint skPaint;
+ skPaint.setColor(Color::Red_500);
+ skCanvas.drawRect(SkRect::MakeWH(100, 100), skPaint);
+ skPaint.setColor(Color::Blue_500);
+ skCanvas.drawRect(SkRect::MakeXYWH(100, 100, 100, 100), skPaint);
+ });
+ canvas.drawBitmap(*hardwareBitmap, 10.0f, 10.0f, nullptr);
+ }
+
+ void doFrame(int frameNr) override { }
+}; \ No newline at end of file