libgralloc: Enable UBWC output buffers for Writeback displays
While allocating output buffers for writeback display, check MDP
support for writeback UBWC format before assigning the format.
Change-Id: I97bb320ec89d60453c4c7e3dc5a2b5c2a18394dd
diff --git a/libgralloc/alloc_controller.cpp b/libgralloc/alloc_controller.cpp
index e9cdc73..6d768ef 100644
--- a/libgralloc/alloc_controller.cpp
+++ b/libgralloc/alloc_controller.cpp
@@ -101,6 +101,7 @@
MDPCapabilityInfo :: MDPCapabilityInfo() {
qdutils::querySDEInfo(HAS_MACRO_TILE, &isMacroTileSupported);
qdutils::querySDEInfo(HAS_UBWC, &isUBwcSupported);
+ qdutils::querySDEInfo(HAS_WB_UBWC, &isWBUBWCSupported);
}
//------------- AdrenoMemInfo-----------------------//
diff --git a/libgralloc/gpu.cpp b/libgralloc/gpu.cpp
index c1d7788..c62cec0 100644
--- a/libgralloc/gpu.cpp
+++ b/libgralloc/gpu.cpp
@@ -267,9 +267,13 @@
format == HAL_PIXEL_FORMAT_YCbCr_420_888) {
if (usage & GRALLOC_USAGE_PRIVATE_ALLOC_UBWC)
grallocFormat = HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC;
- else if(usage & GRALLOC_USAGE_HW_VIDEO_ENCODER)
- grallocFormat = HAL_PIXEL_FORMAT_NV12_ENCODEABLE; //NV12
- else if((usage & GRALLOC_USAGE_HW_CAMERA_MASK)
+ else if(usage & GRALLOC_USAGE_HW_VIDEO_ENCODER) {
+ if(MDPCapabilityInfo::getInstance().isWBUBWCSupportedByMDP() &&
+ usage & GRALLOC_USAGE_HW_COMPOSER)
+ grallocFormat = HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC;
+ else
+ grallocFormat = HAL_PIXEL_FORMAT_NV12_ENCODEABLE; //NV12
+ } else if((usage & GRALLOC_USAGE_HW_CAMERA_MASK)
== GRALLOC_USAGE_HW_CAMERA_ZSL)
grallocFormat = HAL_PIXEL_FORMAT_NV21_ZSL; //NV21 ZSL
else if(usage & GRALLOC_USAGE_HW_CAMERA_READ)
diff --git a/libgralloc/gr.h b/libgralloc/gr.h
index 5fe1bdb..578240a 100644
--- a/libgralloc/gr.h
+++ b/libgralloc/gr.h
@@ -203,6 +203,7 @@
{
int isMacroTileSupported = 0;
int isUBwcSupported = 0;
+ int isWBUBWCSupported = 0;
public:
MDPCapabilityInfo();
@@ -220,6 +221,13 @@
* 0 : not supported
*/
int isUBwcSupportedByMDP() { return isUBwcSupported; }
+ /*
+ * Function to return whether MDP WB block outputs UBWC format
+ *
+ * @return 1 : supported
+ * 0 : not supported
+ */
+ int isWBUBWCSupportedByMDP() { return isWBUBWCSupported; }
};
#endif /* GR_H_ */
diff --git a/libqdutils/qd_utils.cpp b/libqdutils/qd_utils.cpp
index 6453b58..43fb715 100644
--- a/libqdutils/qd_utils.cpp
+++ b/libqdutils/qd_utils.cpp
@@ -61,11 +61,12 @@
case HAS_MACRO_TILE:
featureName = "tile_format";
break;
-
case HAS_UBWC:
featureName = "ubwc";
break;
-
+ case HAS_WB_UBWC:
+ featureName = "wb_ubwc";
+ break;
default:
ALOGE("Invalid query type %d", type);
return -EINVAL;
diff --git a/libqdutils/qd_utils.h b/libqdutils/qd_utils.h
index 0392e05..4722dcd 100644
--- a/libqdutils/qd_utils.h
+++ b/libqdutils/qd_utils.h
@@ -49,6 +49,7 @@
enum HWQueryType {
HAS_MACRO_TILE = 0,
HAS_UBWC = 1,
+ HAS_WB_UBWC = 2
};
enum {