summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Romain Guy <romainguy@google.com> 2017-02-10 18:50:17 -0800
committer Romain Guy <romainguy@google.com> 2017-02-15 17:00:46 -0800
commit541f22658ab1617c9d12c98684ab40248df8749b (patch)
treeff1527eb4f7bfe7abd263e3c33b7e965634e1c09
parentbb5afada05e597b8a74e3888863319c319c3c944 (diff)
Add RGBA 10:10:10:2 format for surfaces
Bug: 2984164 Test: CtsHardwareTestCases Change-Id: Ifc90e413f414a19ac09e923e48ec7ff45d3e930b
-rw-r--r--include/android/hardware_buffer.h19
-rw-r--r--include/android/native_window.h2
-rw-r--r--include/ui/PixelFormat.h17
-rw-r--r--libs/gui/CpuConsumer.cpp1
-rw-r--r--libs/gui/GLConsumer.cpp1
-rw-r--r--libs/ui/PixelFormat.cpp2
-rw-r--r--services/surfaceflinger/DisplayHardware/HWComposer_hwc1.cpp1
-rw-r--r--services/surfaceflinger/Layer.cpp1
8 files changed, 28 insertions, 16 deletions
diff --git a/include/android/hardware_buffer.h b/include/android/hardware_buffer.h
index 24e217eefd..9c08c7b0b0 100644
--- a/include/android/hardware_buffer.h
+++ b/include/android/hardware_buffer.h
@@ -38,41 +38,48 @@ enum {
* Vulkan: VK_FORMAT_R8G8B8A8_UNORM
* OpenGL ES: GL_RGBA8
*/
- AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM = 1,
+ AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM = 1,
/**
* Corresponding formats:
* Vulkan: VK_FORMAT_R8G8B8A8_UNORM
* OpenGL ES: GL_RGBA8
*/
- AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM = 2,
+ AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM = 2,
/**
* Corresponding formats:
* Vulkan: VK_FORMAT_R8G8B8_UNORM
* OpenGL ES: GL_RGB8
*/
- AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM = 3,
+ AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM = 3,
/**
* Corresponding formats:
* Vulkan: VK_FORMAT_R5G6B5_UNORM_PACK16
* OpenGL ES: GL_RGB565
*/
- AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM = 4,
+ AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM = 4,
/**
* Corresponding formats:
* Vulkan: VK_FORMAT_R16G16B16A16_SFLOAT
* OpenGL ES: GL_RGBA16F
*/
- AHARDWAREBUFFER_FORMAT_R16G16B16A16_SFLOAT = 0x16,
+ AHARDWAREBUFFER_FORMAT_R16G16B16A16_SFLOAT = 0x16,
+
+ /**
+ * Corresponding formats:
+ * Vulkan: VK_FORMAT_A2R10G10B10_UNORM_PACK32
+ * OpenGL ES: GL_RGB10_A2
+ */
+ AHARDWAREBUFFER_FORMAT_A2R10G10B10_UNORM_PACK32 = 0x2b,
/**
* An opaque binary blob format that must have height 1, with width equal to
* the buffer size in bytes.
*/
- AHARDWAREBUFFER_FORMAT_BLOB = 0x21,
+ AHARDWAREBUFFER_FORMAT_BLOB = 0x21,
};
enum {
diff --git a/include/android/native_window.h b/include/android/native_window.h
index 7d8d657424..6a46d7f93c 100644
--- a/include/android/native_window.h
+++ b/include/android/native_window.h
@@ -48,8 +48,6 @@ enum {
WINDOW_FORMAT_RGBX_8888 = AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM,
/** Red: 5 bits, Green: 6 bits, Blue: 5 bits. **/
WINDOW_FORMAT_RGB_565 = AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM,
- /** Red: 16 bits, Green: 16 bits, Blue: 16 bits, Alpha: 16 bits. **/
- WINDOW_FORMAT_RGBA_FP16 = 0x16,
};
struct ANativeWindow;
diff --git a/include/ui/PixelFormat.h b/include/ui/PixelFormat.h
index ab7a9a37a5..02773d92fc 100644
--- a/include/ui/PixelFormat.h
+++ b/include/ui/PixelFormat.h
@@ -53,14 +53,15 @@ enum {
// real pixel formats supported for rendering -----------------------------
- PIXEL_FORMAT_RGBA_8888 = HAL_PIXEL_FORMAT_RGBA_8888, // 4x8-bit RGBA
- PIXEL_FORMAT_RGBX_8888 = HAL_PIXEL_FORMAT_RGBX_8888, // 4x8-bit RGB0
- PIXEL_FORMAT_RGB_888 = HAL_PIXEL_FORMAT_RGB_888, // 3x8-bit RGB
- PIXEL_FORMAT_RGB_565 = HAL_PIXEL_FORMAT_RGB_565, // 16-bit RGB
- PIXEL_FORMAT_BGRA_8888 = HAL_PIXEL_FORMAT_BGRA_8888, // 4x8-bit BGRA
- PIXEL_FORMAT_RGBA_5551 = 6, // 16-bit ARGB
- PIXEL_FORMAT_RGBA_4444 = 7, // 16-bit ARGB
- PIXEL_FORMAT_RGBA_FP16 = HAL_PIXEL_FORMAT_RGBA_FP16, // 64-bit RGBA
+ PIXEL_FORMAT_RGBA_8888 = HAL_PIXEL_FORMAT_RGBA_8888, // 4x8-bit RGBA
+ PIXEL_FORMAT_RGBX_8888 = HAL_PIXEL_FORMAT_RGBX_8888, // 4x8-bit RGB0
+ PIXEL_FORMAT_RGB_888 = HAL_PIXEL_FORMAT_RGB_888, // 3x8-bit RGB
+ PIXEL_FORMAT_RGB_565 = HAL_PIXEL_FORMAT_RGB_565, // 16-bit RGB
+ PIXEL_FORMAT_BGRA_8888 = HAL_PIXEL_FORMAT_BGRA_8888, // 4x8-bit BGRA
+ PIXEL_FORMAT_RGBA_5551 = 6, // 16-bit ARGB
+ PIXEL_FORMAT_RGBA_4444 = 7, // 16-bit ARGB
+ PIXEL_FORMAT_RGBA_FP16 = HAL_PIXEL_FORMAT_RGBA_FP16, // 64-bit RGBA
+ PIXEL_FORMAT_RGBA_1010102 = HAL_PIXEL_FORMAT_RGBA_1010102, // 32-bit RGBA
};
typedef int32_t PixelFormat;
diff --git a/libs/gui/CpuConsumer.cpp b/libs/gui/CpuConsumer.cpp
index a9bafef8b6..ae7c65c441 100644
--- a/libs/gui/CpuConsumer.cpp
+++ b/libs/gui/CpuConsumer.cpp
@@ -65,6 +65,7 @@ static bool isPossiblyYUV(PixelFormat format) {
case HAL_PIXEL_FORMAT_RGBA_8888:
case HAL_PIXEL_FORMAT_RGBX_8888:
case HAL_PIXEL_FORMAT_RGBA_FP16:
+ case HAL_PIXEL_FORMAT_RGBA_1010102:
case HAL_PIXEL_FORMAT_RGB_888:
case HAL_PIXEL_FORMAT_RGB_565:
case HAL_PIXEL_FORMAT_BGRA_8888:
diff --git a/libs/gui/GLConsumer.cpp b/libs/gui/GLConsumer.cpp
index 9532c52ee4..55e0d264bb 100644
--- a/libs/gui/GLConsumer.cpp
+++ b/libs/gui/GLConsumer.cpp
@@ -863,6 +863,7 @@ void GLConsumer::computeTransformMatrix(float outTransform[16],
case PIXEL_FORMAT_RGBA_8888:
case PIXEL_FORMAT_RGBX_8888:
case PIXEL_FORMAT_RGBA_FP16:
+ case PIXEL_FORMAT_RGBA_1010102:
case PIXEL_FORMAT_RGB_888:
case PIXEL_FORMAT_RGB_565:
case PIXEL_FORMAT_BGRA_8888:
diff --git a/libs/ui/PixelFormat.cpp b/libs/ui/PixelFormat.cpp
index 734472d2b1..e88fdd5e84 100644
--- a/libs/ui/PixelFormat.cpp
+++ b/libs/ui/PixelFormat.cpp
@@ -27,6 +27,7 @@ uint32_t bytesPerPixel(PixelFormat format) {
case PIXEL_FORMAT_RGBA_8888:
case PIXEL_FORMAT_RGBX_8888:
case PIXEL_FORMAT_BGRA_8888:
+ case PIXEL_FORMAT_RGBA_1010102:
return 4;
case PIXEL_FORMAT_RGB_888:
return 3;
@@ -45,6 +46,7 @@ uint32_t bitsPerPixel(PixelFormat format) {
case PIXEL_FORMAT_RGBA_8888:
case PIXEL_FORMAT_RGBX_8888:
case PIXEL_FORMAT_BGRA_8888:
+ case PIXEL_FORMAT_RGBA_1010102:
return 32;
case PIXEL_FORMAT_RGB_888:
return 24;
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer_hwc1.cpp b/services/surfaceflinger/DisplayHardware/HWComposer_hwc1.cpp
index cc5578df17..e0946a758b 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer_hwc1.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWComposer_hwc1.cpp
@@ -1160,6 +1160,7 @@ static String8 getFormatStr(PixelFormat format) {
case PIXEL_FORMAT_RGBA_8888: return String8("RGBA_8888");
case PIXEL_FORMAT_RGBX_8888: return String8("RGBx_8888");
case PIXEL_FORMAT_RGBA_FP16: return String8("RGBA_FP16");
+ case PIXEL_FORMAT_RGBA_1010102: return String8("RGBA_1010102");
case PIXEL_FORMAT_RGB_888: return String8("RGB_888");
case PIXEL_FORMAT_RGB_565: return String8("RGB_565");
case PIXEL_FORMAT_BGRA_8888: return String8("BGRA_8888");
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 3a9bca6bb0..bb1fca68d7 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -1299,6 +1299,7 @@ bool Layer::getOpacityForFormat(uint32_t format) {
case HAL_PIXEL_FORMAT_RGBA_8888:
case HAL_PIXEL_FORMAT_BGRA_8888:
case HAL_PIXEL_FORMAT_RGBA_FP16:
+ case HAL_PIXEL_FORMAT_RGBA_1010102:
return false;
}
// in all other case, we have no blending (also for unknown formats)