Merge "sde: Add support for virtual and external display concurrency"
diff --git a/displayengine/libs/core/res_manager.cpp b/displayengine/libs/core/res_manager.cpp
index 7344c21..487cd56 100644
--- a/displayengine/libs/core/res_manager.cpp
+++ b/displayengine/libs/core/res_manager.cpp
@@ -619,6 +619,8 @@
     case kFormatXRGB8888:
     case kFormatRGBX8888:
     case kFormatBGRX8888:
+    case kFormatRGBA8888Ubwc:
+    case kFormatRGBX8888Ubwc:
       return 4.0f;
     case kFormatRGB888:
     case kFormatBGR888:
@@ -626,6 +628,7 @@
     case kFormatRGB565:
     case kFormatRGBA5551:
     case kFormatRGBA4444:
+    case kFormatRGB565Ubwc:
     case kFormatYCbCr422H2V1Packed:
     case kFormatYCrCb422H2V1SemiPlanar:
     case kFormatYCrCb422H1V2SemiPlanar:
diff --git a/libcopybit/copybit.cpp b/libcopybit/copybit.cpp
index 02f0c7e..10f5943 100644
--- a/libcopybit/copybit.cpp
+++ b/libcopybit/copybit.cpp
@@ -146,6 +146,7 @@
         case HAL_PIXEL_FORMAT_YCbCr_420_SP:  return MDP_Y_CBCR_H2V2;
         case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO: return MDP_Y_CBCR_H2V2_ADRENO;
         case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS: return MDP_Y_CBCR_H2V2_VENUS;
+        case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS: return MDP_Y_CRCB_H2V2_VENUS;
         case HAL_PIXEL_FORMAT_NV12_ENCODEABLE: return MDP_Y_CBCR_H2V2;
     }
     return -1;
diff --git a/libgralloc/alloc_controller.cpp b/libgralloc/alloc_controller.cpp
index 8dcc219..aaaf16b 100644
--- a/libgralloc/alloc_controller.cpp
+++ b/libgralloc/alloc_controller.cpp
@@ -153,15 +153,17 @@
                             int usage, int& aligned_w, int& aligned_h)
 {
 
+    bool ubwc_enabled = isUBwcEnabled(format, usage);
+
     // Currently surface padding is only computed for RGB* surfaces.
     if (format <= HAL_PIXEL_FORMAT_sRGB_X_8888) {
-        int tileEnabled = isMacroTileEnabled(format, usage);
+        int tileEnabled = ubwc_enabled || isMacroTileEnabled(format, usage);
         AdrenoMemInfo::getInstance().getGpuAlignedWidthHeight(width,
             height, format, tileEnabled, aligned_w, aligned_h);
         return;
     }
 
-    if (isUBwcEnabled(format, usage)) {
+    if (ubwc_enabled) {
         getUBwcWidthAndHeight(width, height, format, aligned_w, aligned_h);
         return;
     }
@@ -194,6 +196,10 @@
             aligned_w = VENUS_Y_STRIDE(COLOR_FMT_NV12, width);
             aligned_h = VENUS_Y_SCANLINES(COLOR_FMT_NV12, height);
             break;
+        case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
+            aligned_w = VENUS_Y_STRIDE(COLOR_FMT_NV21, width);
+            aligned_h = VENUS_Y_SCANLINES(COLOR_FMT_NV21, height);
+            break;
         case HAL_PIXEL_FORMAT_BLOB:
             break;
         case HAL_PIXEL_FORMAT_NV21_ZSL:
@@ -535,6 +541,9 @@
         case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
             size = VENUS_BUFFER_SIZE(COLOR_FMT_NV12, width, height);
             break;
+        case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
+            size = VENUS_BUFFER_SIZE(COLOR_FMT_NV21, width, height);
+            break;
         case HAL_PIXEL_FORMAT_BLOB:
             if(height != 1) {
                 ALOGE("%s: Buffers with format HAL_PIXEL_FORMAT_BLOB \
@@ -620,9 +629,9 @@
 
 
 void getBufferAttributes(int width, int height, int format, int usage,
-        int& alignedw, int &alignedh, int& tileEnabled, unsigned int& size)
+        int& alignedw, int &alignedh, int& tiled, unsigned int& size)
 {
-    tileEnabled = isMacroTileEnabled(format, usage);
+    tiled = isUBwcEnabled(format, usage) || isMacroTileEnabled(format, usage);
 
     AdrenoMemInfo::getInstance().getAlignedWidthAndHeight(width,
             height,
@@ -698,6 +707,7 @@
         case HAL_PIXEL_FORMAT_YCrCb_420_SP:
         case HAL_PIXEL_FORMAT_YCrCb_422_SP:
         case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO:
+        case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
         case HAL_PIXEL_FORMAT_NV21_ZSL:
         case HAL_PIXEL_FORMAT_RAW_SENSOR:
         case HAL_PIXEL_FORMAT_RAW10:
diff --git a/libgralloc/gpu.cpp b/libgralloc/gpu.cpp
index 0fd6e3b..be3573c 100644
--- a/libgralloc/gpu.cpp
+++ b/libgralloc/gpu.cpp
@@ -158,6 +158,7 @@
         if (isUBwcEnabled(format, usage) &&
             AdrenoMemInfo::getInstance().isUBWCSupportedByGPU(format)) {
             flags |= private_handle_t::PRIV_FLAGS_UBWC_ALIGNED;
+            flags |= private_handle_t::PRIV_FLAGS_TILE_RENDERED;
         }
 
         if(usage & (GRALLOC_USAGE_SW_READ_MASK | GRALLOC_USAGE_SW_WRITE_MASK)) {
diff --git a/libgralloc/gralloc_priv.h b/libgralloc/gralloc_priv.h
index 6998296..2601953 100755
--- a/libgralloc/gralloc_priv.h
+++ b/libgralloc/gralloc_priv.h
@@ -104,6 +104,7 @@
 #define HAL_PIXEL_FORMAT_YCrCb_422_I             0x111
 #define HAL_PIXEL_FORMAT_BGRX_8888               0x112
 #define HAL_PIXEL_FORMAT_NV21_ZSL                0x113
+#define HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS      0x114
 #define HAL_PIXEL_FORMAT_INTERLACE               0x180
 
 //v4l2_fourcc('Y', 'U', 'Y', 'L'). 24 bpp YUYV 4:2:2 10 bit per component
diff --git a/libgralloc/mapper.cpp b/libgralloc/mapper.cpp
index 30f606e..cf365ce 100644
--- a/libgralloc/mapper.cpp
+++ b/libgralloc/mapper.cpp
@@ -386,7 +386,8 @@
                 int *alignedWidth = va_arg(args, int *);
                 int *alignedHeight = va_arg(args, int *);
                 int *tileEnabled = va_arg(args,int *);
-                *tileEnabled = isMacroTileEnabled(format, usage);
+                *tileEnabled = isUBwcEnabled(format, usage) ||
+                               isMacroTileEnabled(format, usage);
                 AdrenoMemInfo::getInstance().getAlignedWidthAndHeight(width,
                         height, format, usage, *alignedWidth, *alignedHeight);
                 res = 0;
diff --git a/libhwcomposer/hwc_dump_layers.cpp b/libhwcomposer/hwc_dump_layers.cpp
index aad984d..fca8a5c 100644
--- a/libhwcomposer/hwc_dump_layers.cpp
+++ b/libhwcomposer/hwc_dump_layers.cpp
@@ -448,6 +448,9 @@
         case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
             strlcpy(pixFormatStr, "YCbCr_420_SP_VENUS", sizeof(pixFormatStr));
             break;
+        case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
+            strlcpy(pixFormatStr, "YCrCb_420_SP_VENUS", sizeof(pixFormatStr));
+            break;
         default:
             size_t len = sizeof(pixFormatStr);
             snprintf(pixFormatStr, len, "Unknown0x%X", format);
diff --git a/liboverlay/overlayUtils.cpp b/liboverlay/overlayUtils.cpp
index b37eba9..d87bee6 100644
--- a/liboverlay/overlayUtils.cpp
+++ b/liboverlay/overlayUtils.cpp
@@ -128,6 +128,8 @@
             //NV12 encodeable format maps to the venus format on
             //B-Family targets
             return MDP_Y_CBCR_H2V2_VENUS;
+        case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
+            return MDP_Y_CRCB_H2V2_VENUS;
         default:
             //Unsupported by MDP
             //---gralloc_priv.h-----
@@ -227,6 +229,8 @@
             return HAL_PIXEL_FORMAT_YCrCb_444_SP;
         case MDP_Y_CBCR_H2V2_VENUS:
             return HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS;
+        case MDP_Y_CRCB_H2V2_VENUS:
+            return HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS;
         default:
             ALOGE("%s: Unsupported MDP format = 0x%x", __func__, mdpFormat);
             return -1;
diff --git a/liboverlay/overlayUtils.h b/liboverlay/overlayUtils.h
index 5e3bd1f..17ec268 100644
--- a/liboverlay/overlayUtils.h
+++ b/liboverlay/overlayUtils.h
@@ -420,6 +420,7 @@
         case MDP_Y_CR_CB_H2V2:
         case MDP_Y_CR_CB_GH2V2:
         case MDP_Y_CBCR_H2V2_VENUS:
+        case MDP_Y_CRCB_H2V2_VENUS:
         case MDP_YCBYCR_H2V1:
         case MDP_YCRYCB_H2V1:
             return true;
@@ -478,6 +479,7 @@
     formats[MDP_BGR_565] = STR(MDP_BGR_565);
     formats[MDP_BGR_888] = STR(MDP_BGR_888);
     formats[MDP_Y_CBCR_H2V2_VENUS] = STR(MDP_Y_CBCR_H2V2_VENUS);
+    formats[MDP_Y_CRCB_H2V2_VENUS] = STR(MDP_Y_CRCB_H2V2_VENUS);
     formats[MDP_BGRX_8888] = STR(MDP_BGRX_8888);
     formats[MDP_RGBA_8888_TILE] = STR(MDP_RGBA_8888_TILE);
     formats[MDP_ARGB_8888_TILE] = STR(MDP_ARGB_8888_TILE);