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
This commit is contained in:
Jeykumar Sankaran
2015-12-14 18:36:27 -08:00
committed by Gerrit - the friendly Code Review server
parent 13f964b7b8
commit 9bc1a783bf
5 changed files with 20 additions and 5 deletions

View File

@@ -101,6 +101,7 @@ static bool useUncached(const int& usage) {
MDPCapabilityInfo :: MDPCapabilityInfo() { MDPCapabilityInfo :: MDPCapabilityInfo() {
qdutils::querySDEInfo(HAS_MACRO_TILE, &isMacroTileSupported); qdutils::querySDEInfo(HAS_MACRO_TILE, &isMacroTileSupported);
qdutils::querySDEInfo(HAS_UBWC, &isUBwcSupported); qdutils::querySDEInfo(HAS_UBWC, &isUBwcSupported);
qdutils::querySDEInfo(HAS_WB_UBWC, &isWBUBWCSupported);
} }
//------------- AdrenoMemInfo-----------------------// //------------- AdrenoMemInfo-----------------------//

View File

@@ -267,9 +267,13 @@ int gpu_context_t::alloc_impl(int w, int h, int format, int usage,
format == HAL_PIXEL_FORMAT_YCbCr_420_888) { format == HAL_PIXEL_FORMAT_YCbCr_420_888) {
if (usage & GRALLOC_USAGE_PRIVATE_ALLOC_UBWC) if (usage & GRALLOC_USAGE_PRIVATE_ALLOC_UBWC)
grallocFormat = HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC; grallocFormat = HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC;
else if(usage & GRALLOC_USAGE_HW_VIDEO_ENCODER) 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 grallocFormat = HAL_PIXEL_FORMAT_NV12_ENCODEABLE; //NV12
else if((usage & GRALLOC_USAGE_HW_CAMERA_MASK) } else if((usage & GRALLOC_USAGE_HW_CAMERA_MASK)
== GRALLOC_USAGE_HW_CAMERA_ZSL) == GRALLOC_USAGE_HW_CAMERA_ZSL)
grallocFormat = HAL_PIXEL_FORMAT_NV21_ZSL; //NV21 ZSL grallocFormat = HAL_PIXEL_FORMAT_NV21_ZSL; //NV21 ZSL
else if(usage & GRALLOC_USAGE_HW_CAMERA_READ) else if(usage & GRALLOC_USAGE_HW_CAMERA_READ)

View File

@@ -203,6 +203,7 @@ class MDPCapabilityInfo : public android::Singleton <MDPCapabilityInfo>
{ {
int isMacroTileSupported = 0; int isMacroTileSupported = 0;
int isUBwcSupported = 0; int isUBwcSupported = 0;
int isWBUBWCSupported = 0;
public: public:
MDPCapabilityInfo(); MDPCapabilityInfo();
@@ -220,6 +221,13 @@ class MDPCapabilityInfo : public android::Singleton <MDPCapabilityInfo>
* 0 : not supported * 0 : not supported
*/ */
int isUBwcSupportedByMDP() { return isUBwcSupported; } 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_ */ #endif /* GR_H_ */

View File

@@ -61,11 +61,12 @@ int querySDEInfo(HWQueryType type, int *value) {
case HAS_MACRO_TILE: case HAS_MACRO_TILE:
featureName = "tile_format"; featureName = "tile_format";
break; break;
case HAS_UBWC: case HAS_UBWC:
featureName = "ubwc"; featureName = "ubwc";
break; break;
case HAS_WB_UBWC:
featureName = "wb_ubwc";
break;
default: default:
ALOGE("Invalid query type %d", type); ALOGE("Invalid query type %d", type);
return -EINVAL; return -EINVAL;

View File

@@ -49,6 +49,7 @@ namespace qdutils {
enum HWQueryType { enum HWQueryType {
HAS_MACRO_TILE = 0, HAS_MACRO_TILE = 0,
HAS_UBWC = 1, HAS_UBWC = 1,
HAS_WB_UBWC = 2
}; };
enum { enum {