sdm: Add support for 10 bit RGB/YUV formats.
1. Translate HAL pixel format to SDM format in hwc library.
2. Add support to allocate memory for 10 bit RGB/YUV formats in hwc
buffer allocator.
3. Update appropriate stride and corresponding MDP formats for
display driver.
CRs-Fixed: 882953
Change-Id: I91b505fb5322decae90fd9586e7157e1ca9e8971
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
index c54bb28..d9a1aa0 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -712,6 +712,18 @@
case kFormatYCrCb422H2V1SemiPlanar: return "Y_CRCB_422_H2V2";
case kFormatYCbCr420SPVenusUbwc: return "Y_CBCR_420_VENUS_UBWC";
case kFormatYCbCr422H2V1Packed: return "YCBYCR_422_H2V1";
+ case kFormatRGBA1010102: return "RGBA_1010102";
+ case kFormatARGB2101010: return "ARGB_2101010";
+ case kFormatRGBX1010102: return "RGBX_1010102";
+ case kFormatXRGB2101010: return "XRGB_2101010";
+ case kFormatBGRA1010102: return "BGRA_1010102";
+ case kFormatABGR2101010: return "ABGR_2101010";
+ case kFormatBGRX1010102: return "BGRX_1010102";
+ case kFormatXBGR2101010: return "XBGR_2101010";
+ case kFormatRGBA1010102Ubwc: return "RGBA_1010102_UBWC";
+ case kFormatRGBX1010102Ubwc: return "RGBX_1010102_UBWC";
+ case kFormatYCbCr420P010: return "Y_CBCR_420_P010";
+ case kFormatYCbCr420TP10Ubwc: return "Y_CBCR_420_TP10_UBWC";
default: return "UNKNOWN";
}
}
diff --git a/sdm/libs/core/fb/hw_device.cpp b/sdm/libs/core/fb/hw_device.cpp
index 75fc76c..e4f8dae 100644
--- a/sdm/libs/core/fb/hw_device.cpp
+++ b/sdm/libs/core/fb/hw_device.cpp
@@ -518,6 +518,18 @@
case kFormatRGBX8888Ubwc: *target = MDP_RGBX_8888_UBWC; break;
case kFormatBGR565Ubwc: *target = MDP_RGB_565_UBWC; break;
case kFormatYCbCr420SPVenusUbwc: *target = MDP_Y_CBCR_H2V2_UBWC; break;
+ case kFormatRGBA1010102: *target = MDP_RGBA_1010102; break;
+ case kFormatARGB2101010: *target = MDP_ARGB_2101010; break;
+ case kFormatRGBX1010102: *target = MDP_RGBX_1010102; break;
+ case kFormatXRGB2101010: *target = MDP_XRGB_2101010; break;
+ case kFormatBGRA1010102: *target = MDP_BGRA_1010102; break;
+ case kFormatABGR2101010: *target = MDP_ABGR_2101010; break;
+ case kFormatBGRX1010102: *target = MDP_BGRX_1010102; break;
+ case kFormatXBGR2101010: *target = MDP_XBGR_2101010; break;
+ case kFormatRGBA1010102Ubwc: *target = MDP_RGBA_1010102_UBWC; break;
+ case kFormatRGBX1010102Ubwc: *target = MDP_RGBX_1010102_UBWC; break;
+ case kFormatYCbCr420P010: *target = MDP_Y_CBCR_H2V2_P010; break;
+ case kFormatYCbCr420TP10Ubwc: *target = MDP_Y_CBCR_H2V2_TP10_UBWC; break;
default:
DLOGE("Unsupported format type %d", source);
return kErrorParameters;
@@ -543,6 +555,16 @@
case kFormatBGRX8888:
case kFormatRGBA8888Ubwc:
case kFormatRGBX8888Ubwc:
+ case kFormatRGBA1010102:
+ case kFormatARGB2101010:
+ case kFormatRGBX1010102:
+ case kFormatXRGB2101010:
+ case kFormatBGRA1010102:
+ case kFormatABGR2101010:
+ case kFormatBGRX1010102:
+ case kFormatXBGR2101010:
+ case kFormatRGBA1010102Ubwc:
+ case kFormatRGBX1010102Ubwc:
*target = width * 4;
break;
case kFormatRGB888:
@@ -561,6 +583,8 @@
case kFormatYCrCb420PlanarStride16:
case kFormatYCbCr420SemiPlanar:
case kFormatYCrCb420SemiPlanar:
+ case kFormatYCbCr420P010:
+ case kFormatYCbCr420TP10Ubwc:
*target = width;
break;
case kFormatYCbCr422H2V1Packed:
diff --git a/sdm/libs/core/fb/hw_info.cpp b/sdm/libs/core/fb/hw_info.cpp
index 8f53193..3394a06 100755
--- a/sdm/libs/core/fb/hw_info.cpp
+++ b/sdm/libs/core/fb/hw_info.cpp
@@ -56,14 +56,14 @@
// kDefaultFormatSupport contains the bit map of supported formats for each hw blocks.
// For eg: if Cursor supports MDP_RGBA_8888[bit-13] and MDP_RGB_565[bit-0], then cursor pipe array
// contains { 0x01[0-3], 0x00[4-7], 0x00[8-12], 0x01[13-16], 0x00[17-20], 0x00[21-24], 0x00[24-28] }
-const uint8_t HWInfo::kDefaultFormatSupport[kHWSubBlockMax][BITS_TO_BYTES(MDP_IMGTYPE_LIMIT)] = {
- { 0xFF, 0xF5, 0x1C, 0x1E, 0x20, 0xFF, 0x01 }, // kHWVIGPipe
- { 0x33, 0xE0, 0x00, 0x16, 0x00, 0xBF, 0x00 }, // kHWRGBPipe
- { 0x33, 0xE0, 0x00, 0x16, 0x00, 0xBF, 0x00 }, // kHWDMAPipe
- { 0x12, 0x60, 0x0C, 0x00, 0x00, 0x0F, 0x00 }, // kHWCursorPipe
- { 0xFF, 0xF5, 0x1C, 0x1E, 0x20, 0xFF, 0x01 }, // kHWRotatorInput
- { 0xFF, 0xF5, 0x1C, 0x1E, 0x20, 0xFF, 0x01 }, // kHWRotatorOutput
- { 0x3F, 0xF4, 0x10, 0x1E, 0x20, 0xFF, 0x01 }, // kHWWBIntfOutput
+const uint8_t HWInfo::kDefaultFormatSupport[kHWSubBlockMax][BITS_TO_BYTES(MDP_IMGTYPE_LIMIT1)] = {
+ { 0xFF, 0xF5, 0x1C, 0x1E, 0x20, 0xFF, 0x01, 0x00, 0xFE, 0x1F }, // kHWVIGPipe
+ { 0x33, 0xE0, 0x00, 0x16, 0x00, 0xBF, 0x00, 0x00, 0xFE, 0x07 }, // kHWRGBPipe
+ { 0x33, 0xE0, 0x00, 0x16, 0x00, 0xBF, 0x00, 0x00, 0xFE, 0x07 }, // kHWDMAPipe
+ { 0x12, 0x60, 0x0C, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00 }, // kHWCursorPipe
+ { 0xFF, 0xF5, 0x1C, 0x1E, 0x20, 0xFF, 0x01, 0x00, 0xFE, 0x1F }, // kHWRotatorInput
+ { 0xFF, 0xF5, 0x1C, 0x1E, 0x20, 0xFF, 0x01, 0x00, 0xFE, 0x1F }, // kHWRotatorOutput
+ { 0x3F, 0xF4, 0x10, 0x1E, 0x20, 0xFF, 0x01, 0x00, 0xAA, 0x16 }, // kHWWBIntfOutput
};
int HWInfo::ParseString(char *input, char *tokens[], const uint32_t max_token, const char *delim,
@@ -451,6 +451,18 @@
case MDP_Y_CBCR_H2V2_UBWC: return kFormatYCbCr420SPVenusUbwc;
case MDP_Y_CRCB_H2V2_VENUS: return kFormatYCrCb420SemiPlanarVenus;
case MDP_YCBYCR_H2V1: return kFormatYCbCr422H2V1Packed;
+ case MDP_RGBA_1010102: return kFormatRGBA1010102;
+ case MDP_ARGB_2101010: return kFormatARGB2101010;
+ case MDP_RGBX_1010102: return kFormatRGBX1010102;
+ case MDP_XRGB_2101010: return kFormatXRGB2101010;
+ case MDP_BGRA_1010102: return kFormatBGRA1010102;
+ case MDP_ABGR_2101010: return kFormatABGR2101010;
+ case MDP_BGRX_1010102: return kFormatBGRX1010102;
+ case MDP_XBGR_2101010: return kFormatXBGR2101010;
+ case MDP_RGBA_1010102_UBWC: return kFormatRGBA1010102Ubwc;
+ case MDP_RGBX_1010102_UBWC: return kFormatRGBX1010102Ubwc;
+ case MDP_Y_CBCR_H2V2_P010: return kFormatYCbCr420P010;
+ case MDP_Y_CBCR_H2V2_TP10_UBWC: return kFormatYCbCr420TP10Ubwc;
default: return kFormatInvalid;
}
}
@@ -459,14 +471,14 @@
hw_resource->supported_formats_map.clear();
for (int sub_blk_type = INT(kHWVIGPipe); sub_blk_type < INT(kHWSubBlockMax); sub_blk_type++) {
- PopulateSupportedFormatMap(kDefaultFormatSupport[sub_blk_type], MDP_IMGTYPE_LIMIT,
+ PopulateSupportedFormatMap(kDefaultFormatSupport[sub_blk_type], MDP_IMGTYPE_LIMIT1,
(HWSubBlockType)sub_blk_type, hw_resource);
}
}
void HWInfo::ParseFormats(char *tokens[], uint32_t token_count, HWSubBlockType sub_blk_type,
HWResourceInfo *hw_resource) {
- if (token_count > BITS_TO_BYTES(MDP_IMGTYPE_LIMIT)) {
+ if (token_count > BITS_TO_BYTES(MDP_IMGTYPE_LIMIT1)) {
return;
}
diff --git a/sdm/libs/core/fb/hw_info.h b/sdm/libs/core/fb/hw_info.h
index eab0343..ba98f87 100644
--- a/sdm/libs/core/fb/hw_info.h
+++ b/sdm/libs/core/fb/hw_info.h
@@ -30,6 +30,10 @@
#include <linux/msm_mdp.h>
#include "hw_info_interface.h"
+#ifndef MDP_IMGTYPE_END
+#define MDP_IMGTYPE_LIMIT1 0x100
+#endif
+
namespace sdm {
class HWInfo: public HWInfoInterface {
@@ -48,7 +52,7 @@
// However, we rely on reading the capabalities from fbO since this
// is guaranteed to be available.
static const int kHWCapabilitiesNode = 0;
- static const uint8_t kDefaultFormatSupport[kHWSubBlockMax][BITS_TO_BYTES(MDP_IMGTYPE_LIMIT)];
+ static const uint8_t kDefaultFormatSupport[kHWSubBlockMax][BITS_TO_BYTES(MDP_IMGTYPE_LIMIT1)];
static constexpr const char *kRotatorCapsPath = "/sys/devices/virtual/rotator/mdss_rotator/caps";
static int ParseString(char *input, char *tokens[], const uint32_t max_token, const char *delim,
diff --git a/sdm/libs/core/resource_default.cpp b/sdm/libs/core/resource_default.cpp
index 79d9b96..b2e928e 100644
--- a/sdm/libs/core/resource_default.cpp
+++ b/sdm/libs/core/resource_default.cpp
@@ -26,6 +26,7 @@
#include <utils/constants.h>
#include <utils/debug.h>
#include <utils/rect.h>
+#include <utils/formats.h>
#include <dlfcn.h>
#include "resource_default.h"
@@ -892,17 +893,4 @@
return kErrorNotSupported;
}
-bool ResourceDefault::IsUBWCFormat(LayerBufferFormat format) {
- switch (format) {
- case kFormatRGBA8888Ubwc:
- case kFormatRGBX8888Ubwc:
- case kFormatBGR565Ubwc:
- case kFormatYCbCr420SPVenusUbwc:
- return true;
- default:
- break;
- }
- return false;
-}
-
} // namespace sdm
diff --git a/sdm/libs/core/resource_default.h b/sdm/libs/core/resource_default.h
index 1dc51ad..cb633c0 100644
--- a/sdm/libs/core/resource_default.h
+++ b/sdm/libs/core/resource_default.h
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2014 - 2015, The Linux Foundation. All rights reserved.
+* Copyright (c) 2014 - 2016, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted
* provided that the following conditions are met:
@@ -118,7 +118,6 @@
DisplayError AlignPipeConfig(const Layer &layer, HWPipeInfo *left_pipe, HWPipeInfo *right_pipe);
void ResourceStateLog(void);
DisplayError CalculateDecimation(float downscale, uint8_t *decimation);
- bool IsUBWCFormat(LayerBufferFormat format);
Locker locker_;
HWResourceInfo hw_res_info_;
diff --git a/sdm/libs/hwc/blit_engine_c2d.cpp b/sdm/libs/hwc/blit_engine_c2d.cpp
old mode 100755
new mode 100644
index dd11d2b..e855524
--- a/sdm/libs/hwc/blit_engine_c2d.cpp
+++ b/sdm/libs/hwc/blit_engine_c2d.cpp
@@ -55,6 +55,7 @@
#include <utils/constants.h>
#include <utils/rect.h>
+#include <utils/formats.h>
#include "blit_engine_c2d.h"
#include "hwc_debugger.h"
@@ -265,6 +266,12 @@
if (!blit_supported_) {
return -1;
}
+
+ // No 10 bit support for C2D
+ if (Is10BitFormat(layer.input_buffer->format)) {
+ return -1;
+ }
+
if (layer.composition == kCompositionGPUTarget) {
// Need FBT size for allocating buffers
gpu_target_index = i;
@@ -558,18 +565,6 @@
return err;
}
-bool BlitEngineC2d::IsUBWCFormat(LayerBufferFormat format) {
- switch (format) {
- case kFormatRGBA8888Ubwc:
- case kFormatRGBX8888Ubwc:
- case kFormatBGR565Ubwc:
- case kFormatYCbCr420SPVenusUbwc:
- return true;
- default:
- return false;
- }
-}
-
void BlitEngineC2d::DumpBlitTargetBuffer(int fd) {
if (!dump_frame_count_) {
return;
diff --git a/sdm/libs/hwc/blit_engine_c2d.h b/sdm/libs/hwc/blit_engine_c2d.h
index 5400611..9efb814 100644
--- a/sdm/libs/hwc/blit_engine_c2d.h
+++ b/sdm/libs/hwc/blit_engine_c2d.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012 - 2016, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -103,7 +103,6 @@
int DrawRectUsingCopybit(hwc_layer_1_t *hwc_layer, Layer *layer, LayerRect blit_rect,
LayerRect blit_dest_Rect);
void SetReleaseFence(int fence_fd);
- bool IsUBWCFormat(LayerBufferFormat format);
void DumpBlitTargetBuffer(int fd);
copybit_device_t *blit_engine_c2d_;
diff --git a/sdm/libs/hwc/hwc_buffer_allocator.cpp b/sdm/libs/hwc/hwc_buffer_allocator.cpp
index 7ec3594..0092402 100644
--- a/sdm/libs/hwc/hwc_buffer_allocator.cpp
+++ b/sdm/libs/hwc/hwc_buffer_allocator.cpp
@@ -204,6 +204,16 @@
case kFormatYCbCr420SPVenusUbwc: *target = HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC; break;
case kFormatRGBA5551: *target = HAL_PIXEL_FORMAT_RGBA_5551; break;
case kFormatRGBA4444: *target = HAL_PIXEL_FORMAT_RGBA_4444; break;
+ case kFormatRGBA1010102: *target = HAL_PIXEL_FORMAT_RGBA_1010102; break;
+ case kFormatARGB2101010: *target = HAL_PIXEL_FORMAT_ARGB_2101010; break;
+ case kFormatRGBX1010102: *target = HAL_PIXEL_FORMAT_RGBX_1010102; break;
+ case kFormatXRGB2101010: *target = HAL_PIXEL_FORMAT_XRGB_2101010; break;
+ case kFormatBGRA1010102: *target = HAL_PIXEL_FORMAT_BGRA_1010102; break;
+ case kFormatABGR2101010: *target = HAL_PIXEL_FORMAT_ABGR_2101010; break;
+ case kFormatBGRX1010102: *target = HAL_PIXEL_FORMAT_BGRX_1010102; break;
+ case kFormatXBGR2101010: *target = HAL_PIXEL_FORMAT_XBGR_2101010; break;
+ case kFormatYCbCr420P010: *target = HAL_PIXEL_FORMAT_YCbCr_420_P010; break;
+ case kFormatYCbCr420TP10Ubwc: *target = HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC; break;
case kFormatRGBA8888Ubwc:
*target = HAL_PIXEL_FORMAT_RGBA_8888;
*flags |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
@@ -216,6 +226,14 @@
*target = HAL_PIXEL_FORMAT_BGR_565;
*flags |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
break;
+ case kFormatRGBA1010102Ubwc:
+ *target = HAL_PIXEL_FORMAT_RGBA_1010102;
+ *flags |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
+ break;
+ case kFormatRGBX1010102Ubwc:
+ *target = HAL_PIXEL_FORMAT_RGBX_1010102;
+ *flags |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
+ break;
default:
DLOGE("Unsupported format = 0x%x", format);
return -EINVAL;
diff --git a/sdm/libs/hwc/hwc_display.cpp b/sdm/libs/hwc/hwc_display.cpp
index 73f8c12..928c435 100644
--- a/sdm/libs/hwc/hwc_display.cpp
+++ b/sdm/libs/hwc/hwc_display.cpp
@@ -957,12 +957,15 @@
LayerBufferFormat format = kFormatInvalid;
if (flags & private_handle_t::PRIV_FLAGS_UBWC_ALIGNED) {
switch (source) {
- case HAL_PIXEL_FORMAT_RGBA_8888: format = kFormatRGBA8888Ubwc; break;
- case HAL_PIXEL_FORMAT_RGBX_8888: format = kFormatRGBX8888Ubwc; break;
- case HAL_PIXEL_FORMAT_BGR_565: format = kFormatBGR565Ubwc; break;
+ case HAL_PIXEL_FORMAT_RGBA_8888: format = kFormatRGBA8888Ubwc; break;
+ case HAL_PIXEL_FORMAT_RGBX_8888: format = kFormatRGBX8888Ubwc; break;
+ case HAL_PIXEL_FORMAT_BGR_565: format = kFormatBGR565Ubwc; break;
case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
- case HAL_PIXEL_FORMAT_NV12_ENCODEABLE: format = kFormatYCbCr420SPVenusUbwc; break;
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE: format = kFormatYCbCr420SPVenusUbwc; break;
+ case HAL_PIXEL_FORMAT_RGBA_1010102: format = kFormatRGBA1010102Ubwc; break;
+ case HAL_PIXEL_FORMAT_RGBX_1010102: format = kFormatRGBX1010102Ubwc; break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC: format = kFormatYCbCr420TP10Ubwc; break;
default:
DLOGE("Unsupported format type for UBWC %d", source);
return kFormatInvalid;
@@ -989,6 +992,16 @@
case HAL_PIXEL_FORMAT_YCbCr_420_SP: format = kFormatYCbCr420SemiPlanar; break;
case HAL_PIXEL_FORMAT_YCbCr_422_SP: format = kFormatYCbCr422H2V1SemiPlanar; break;
case HAL_PIXEL_FORMAT_YCbCr_422_I: format = kFormatYCbCr422H2V1Packed; break;
+ case HAL_PIXEL_FORMAT_RGBA_1010102: format = kFormatRGBA1010102; break;
+ case HAL_PIXEL_FORMAT_ARGB_2101010: format = kFormatARGB2101010; break;
+ case HAL_PIXEL_FORMAT_RGBX_1010102: format = kFormatRGBX1010102; break;
+ case HAL_PIXEL_FORMAT_XRGB_2101010: format = kFormatXRGB2101010; break;
+ case HAL_PIXEL_FORMAT_BGRA_1010102: format = kFormatBGRA1010102; break;
+ case HAL_PIXEL_FORMAT_ABGR_2101010: format = kFormatABGR2101010; break;
+ case HAL_PIXEL_FORMAT_BGRX_1010102: format = kFormatBGRX1010102; break;
+ case HAL_PIXEL_FORMAT_XBGR_2101010: format = kFormatXBGR2101010; break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010: format = kFormatYCbCr420P010; break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC: format = kFormatYCbCr420TP10Ubwc; break;
default:
DLOGW("Unsupported format type = %d", source);
return kFormatInvalid;
@@ -1099,6 +1112,26 @@
return "YCrCb_420_SP_VENUS";
case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
return "YCbCr_420_SP_VENUS_UBWC";
+ case HAL_PIXEL_FORMAT_RGBA_1010102:
+ return "RGBA_1010102";
+ case HAL_PIXEL_FORMAT_ARGB_2101010:
+ return "ARGB_2101010";
+ case HAL_PIXEL_FORMAT_RGBX_1010102:
+ return "RGBX_1010102";
+ case HAL_PIXEL_FORMAT_XRGB_2101010:
+ return "XRGB_2101010";
+ case HAL_PIXEL_FORMAT_BGRA_1010102:
+ return "BGRA_1010102";
+ case HAL_PIXEL_FORMAT_ABGR_2101010:
+ return "ABGR_2101010";
+ case HAL_PIXEL_FORMAT_BGRX_1010102:
+ return "BGRX_1010102";
+ case HAL_PIXEL_FORMAT_XBGR_2101010:
+ return "XBGR_2101010";
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010:
+ return "YCbCr_420_P010";
+ case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
+ return "YCbCr_420_TP10_UBWC";
default:
return "Unknown pixel format";
}
diff --git a/sdm/libs/utils/Android.mk b/sdm/libs/utils/Android.mk
index 5540385..8125b49 100644
--- a/sdm/libs/utils/Android.mk
+++ b/sdm/libs/utils/Android.mk
@@ -11,6 +11,7 @@
LOCAL_CLANG := true
LOCAL_SRC_FILES := debug.cpp \
rect.cpp \
- sys.cpp
+ sys.cpp \
+ formats.cpp
include $(BUILD_SHARED_LIBRARY)
diff --git a/sdm/libs/utils/formats.cpp b/sdm/libs/utils/formats.cpp
new file mode 100644
index 0000000..512f9ee
--- /dev/null
+++ b/sdm/libs/utils/formats.cpp
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2016, The Linux Foundation. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are
+* met:
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above
+* copyright notice, this list of conditions and the following
+* disclaimer in the documentation and/or other materials provided
+* with the distribution.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <utils/formats.h>
+
+#define __CLASS__ "FormatsUtils"
+
+namespace sdm {
+
+bool IsUBWCFormat(LayerBufferFormat format) {
+ switch (format) {
+ case kFormatRGBA8888Ubwc:
+ case kFormatRGBX8888Ubwc:
+ case kFormatBGR565Ubwc:
+ case kFormatYCbCr420SPVenusUbwc:
+ case kFormatRGBA1010102Ubwc:
+ case kFormatRGBX1010102Ubwc:
+ case kFormatYCbCr420TP10Ubwc:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool Is10BitFormat(LayerBufferFormat format) {
+ switch (format) {
+ case kFormatRGBA1010102:
+ case kFormatARGB2101010:
+ case kFormatRGBX1010102:
+ case kFormatXRGB2101010:
+ case kFormatBGRA1010102:
+ case kFormatABGR2101010:
+ case kFormatBGRX1010102:
+ case kFormatXBGR2101010:
+ case kFormatRGBA1010102Ubwc:
+ case kFormatRGBX1010102Ubwc:
+ case kFormatYCbCr420P010:
+ case kFormatYCbCr420TP10Ubwc:
+ return true;
+ default:
+ return false;
+ }
+}
+
+} // namespace sdm
+