diff options
author | 2021-11-24 14:40:53 -0500 | |
---|---|---|
committer | 2021-12-06 15:25:51 -0500 | |
commit | 4d2588545fe9eee49a1ad5edeb4ff1c33e8081c0 (patch) | |
tree | 82c03e11a3828d74a8a299443277d02de34fe784 | |
parent | e334dd4112538701aeb4cce6b21ab167f91df1ce (diff) |
Add AHB and Pixel- Formats for R8
Add AHARDWAREBUFFER_FORMAT_R8_UNORM and PIXEL_FORMAT_R_8. These will be
used for an alpha 8 buffer representing the screen decorations.
Enum value matches AIDL R_8 in
I6f6b7f22e76609151a413ca6a6dbf55bd91911dd.
Bug: 193170859
Test: make
Change-Id: I4846327b29736ee811672801a683deb287342a8e
-rw-r--r-- | libs/nativewindow/AHardwareBuffer.cpp | 8 | ||||
-rw-r--r-- | libs/nativewindow/include/android/hardware_buffer.h | 7 | ||||
-rw-r--r-- | libs/ui/DebugUtils.cpp | 2 | ||||
-rw-r--r-- | libs/ui/PixelFormat.cpp | 2 | ||||
-rw-r--r-- | libs/ui/include/ui/PixelFormat.h | 1 | ||||
-rw-r--r-- | services/surfaceflinger/BufferLayer.cpp | 11 | ||||
-rw-r--r-- | services/surfaceflinger/BufferLayer.h | 2 |
7 files changed, 26 insertions, 7 deletions
diff --git a/libs/nativewindow/AHardwareBuffer.cpp b/libs/nativewindow/AHardwareBuffer.cpp index d429551045..cb3361b431 100644 --- a/libs/nativewindow/AHardwareBuffer.cpp +++ b/libs/nativewindow/AHardwareBuffer.cpp @@ -30,7 +30,7 @@ #include <private/android/AHardwareBufferHelpers.h> #include <android/hardware/graphics/common/1.1/types.h> - +#include <aidl/android/hardware/graphics/common/PixelFormat.h> static constexpr int kFdBufferSize = 128 * sizeof(int); // 128 ints @@ -588,8 +588,12 @@ bool AHardwareBuffer_isValidPixelFormat(uint32_t format) { "HAL and AHardwareBuffer pixel format don't match"); static_assert(HAL_PIXEL_FORMAT_YCBCR_422_I == AHARDWAREBUFFER_FORMAT_YCbCr_422_I, "HAL and AHardwareBuffer pixel format don't match"); + static_assert(static_cast<int>(aidl::android::hardware::graphics::common::PixelFormat::R_8) == + AHARDWAREBUFFER_FORMAT_R8_UNORM, + "HAL and AHardwareBuffer pixel format don't match"); switch (format) { + case AHARDWAREBUFFER_FORMAT_R8_UNORM: case AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM: case AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM: case AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM: @@ -641,6 +645,8 @@ bool AHardwareBuffer_formatIsYuv(uint32_t format) { uint32_t AHardwareBuffer_bytesPerPixel(uint32_t format) { switch (format) { + case AHARDWAREBUFFER_FORMAT_R8_UNORM: + return 1; case AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM: case AHARDWAREBUFFER_FORMAT_D16_UNORM: return 2; diff --git a/libs/nativewindow/include/android/hardware_buffer.h b/libs/nativewindow/include/android/hardware_buffer.h index d5e7cb299b..6f1f04df34 100644 --- a/libs/nativewindow/include/android/hardware_buffer.h +++ b/libs/nativewindow/include/android/hardware_buffer.h @@ -158,6 +158,13 @@ enum AHardwareBuffer_Format { * cube-maps or multi-layered textures. */ AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420 = 0x23, + + /** + * Corresponding formats: + * Vulkan: VK_FORMAT_R8_UNORM + * OpenGL ES: GR_GL_R8 + */ + AHARDWAREBUFFER_FORMAT_R8_UNORM = 0x38, }; /** diff --git a/libs/ui/DebugUtils.cpp b/libs/ui/DebugUtils.cpp index 1f006ceb69..073da89758 100644 --- a/libs/ui/DebugUtils.cpp +++ b/libs/ui/DebugUtils.cpp @@ -302,6 +302,8 @@ std::string decodePixelFormat(android::PixelFormat format) { return std::string("RGB_565"); case android::PIXEL_FORMAT_BGRA_8888: return std::string("BGRA_8888"); + case android::PIXEL_FORMAT_R_8: + return std::string("R_8"); default: return StringPrintf("Unknown %#08x", format); } diff --git a/libs/ui/PixelFormat.cpp b/libs/ui/PixelFormat.cpp index d1925cb446..799fbc9d54 100644 --- a/libs/ui/PixelFormat.cpp +++ b/libs/ui/PixelFormat.cpp @@ -35,6 +35,8 @@ uint32_t bytesPerPixel(PixelFormat format) { case PIXEL_FORMAT_RGBA_5551: case PIXEL_FORMAT_RGBA_4444: return 2; + case PIXEL_FORMAT_R_8: + return 1; } return 0; } diff --git a/libs/ui/include/ui/PixelFormat.h b/libs/ui/include/ui/PixelFormat.h index 91ff39efd8..f422ce439e 100644 --- a/libs/ui/include/ui/PixelFormat.h +++ b/libs/ui/include/ui/PixelFormat.h @@ -62,6 +62,7 @@ enum { 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 + PIXEL_FORMAT_R_8 = 0x38, }; typedef int32_t PixelFormat; diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp index 494b61c51c..64ddd687ad 100644 --- a/services/surfaceflinger/BufferLayer.cpp +++ b/services/surfaceflinger/BufferLayer.cpp @@ -564,15 +564,16 @@ bool BufferLayer::isProtected() const { // hardware.h, instead of using hard-coded values here. #define HARDWARE_IS_DEVICE_FORMAT(f) ((f) >= 0x100 && (f) <= 0x1FF) -bool BufferLayer::getOpacityForFormat(uint32_t format) { +bool BufferLayer::getOpacityForFormat(PixelFormat format) { if (HARDWARE_IS_DEVICE_FORMAT(format)) { return true; } switch (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: + case PIXEL_FORMAT_RGBA_8888: + case PIXEL_FORMAT_BGRA_8888: + case PIXEL_FORMAT_RGBA_FP16: + case PIXEL_FORMAT_RGBA_1010102: + case PIXEL_FORMAT_R_8: return false; } // in all other case, we have no blending (also for unknown formats) diff --git a/services/surfaceflinger/BufferLayer.h b/services/surfaceflinger/BufferLayer.h index a4c21f4caf..34d11ac579 100644 --- a/services/surfaceflinger/BufferLayer.h +++ b/services/surfaceflinger/BufferLayer.h @@ -153,7 +153,7 @@ protected: bool onPreComposition(nsecs_t) override; void preparePerFrameCompositionState() override; - static bool getOpacityForFormat(uint32_t format); + static bool getOpacityForFormat(PixelFormat format); // from graphics API const uint32_t mTextureName; |