gralloc: Upgrade mapper and allocators to v3.0

CRs-Fixed: 2445393
Change-Id: I8c44ab63ca81523bb6acb75e8ae878cc7466e139
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 7dc2de6..3cb763d 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -38,3 +38,6 @@
 
 # Clean old allocator rc file
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/vendor.qti.hardware.display.allocator@1.0-service.rc)
+
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib/hw/android.hardware.graphics.mapper@2.0-impl-qti-display.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/android.hardware.graphics.mapper@2.0-impl-qti-display.so)
diff --git a/config/display-product.mk b/config/display-product.mk
index 5d83bda..4e8dcaf 100644
--- a/config/display-product.mk
+++ b/config/display-product.mk
@@ -2,7 +2,7 @@
 PRODUCT_PACKAGES += \
     android.hardware.graphics.composer@2.3-impl \
     android.hardware.graphics.composer@2.3-service \
-    android.hardware.graphics.mapper@2.0-impl-qti-display \
+    android.hardware.graphics.mapper@3.0-impl-qti-display \
     vendor.qti.hardware.display.allocator-service \
     android.hardware.memtrack@1.0-impl \
     android.hardware.memtrack@1.0-service \
@@ -25,8 +25,7 @@
     vendor.display.config@1.8.vendor \
     vendor.display.config@1.9.vendor \
     vendor.display.config@1.10.vendor \
-    vendor.qti.hardware.display.mapper@2.0.vendor \
-    vendor.qti.hardware.display.mapper@3.0.vendor \
+    vendor.qti.hardware.display.mapper@3.0 \
     modetest
 
 #QDCM calibration xml file for 2k panel
diff --git a/gralloc/Android.mk b/gralloc/Android.mk
index e4ae98b..e6f6c55 100644
--- a/gralloc/Android.mk
+++ b/gralloc/Android.mk
@@ -14,7 +14,8 @@
 LOCAL_SHARED_LIBRARIES        := $(common_libs) libqdMetaData libsync libgrallocutils \
                                  libgralloccore \
                                  android.hardware.graphics.mapper@2.0 \
-                                 android.hardware.graphics.mapper@2.1
+                                 android.hardware.graphics.mapper@2.1 \
+                                 android.hardware.graphics.mapper@3.0
 LOCAL_CFLAGS                  := $(common_flags) -DLOG_TAG=\"qdgralloc\" -Wall -Werror
 LOCAL_CLANG                   := true
 LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
@@ -30,7 +31,8 @@
 LOCAL_HEADER_LIBRARIES        := display_headers
 LOCAL_SHARED_LIBRARIES        := $(common_libs) libqdMetaData libdl  \
                                   android.hardware.graphics.mapper@2.0 \
-                                  android.hardware.graphics.mapper@2.1
+                                  android.hardware.graphics.mapper@2.1 \
+                                  android.hardware.graphics.mapper@3.0
 LOCAL_CFLAGS                  := $(common_flags) -DLOG_TAG=\"qdgralloc\" -Wno-sign-conversion
 LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
 LOCAL_SRC_FILES               := gr_utils.cpp gr_adreno_info.cpp
@@ -47,7 +49,8 @@
 
 LOCAL_HEADER_LIBRARIES        := display_headers
 LOCAL_SHARED_LIBRARIES        := $(common_libs) libqdMetaData libdl libgrallocutils libion \
-                                  android.hardware.graphics.mapper@2.1
+                                  android.hardware.graphics.mapper@2.1 \
+                                  android.hardware.graphics.mapper@3.0
 LOCAL_CFLAGS                  := $(common_flags) -DLOG_TAG=\"qdgralloc\" -Wno-sign-conversion
 ifeq ($(ENABLE_HYP),true)
 LOCAL_CFLAGS += -DHYPERVISOR
@@ -58,7 +61,7 @@
 
 #mapper
 include $(CLEAR_VARS)
-LOCAL_MODULE                  := android.hardware.graphics.mapper@2.0-impl-qti-display
+LOCAL_MODULE                  := android.hardware.graphics.mapper@3.0-impl-qti-display
 LOCAL_VENDOR_MODULE           := true
 LOCAL_MODULE_RELATIVE_PATH    := hw
 LOCAL_MODULE_TAGS             := optional
@@ -70,11 +73,12 @@
                                   libgrallocutils \
                                   libgralloccore \
                                   libsync \
-                                  vendor.qti.hardware.display.mapper@2.0 \
+                                  vendor.qti.hardware.display.mapper@3.0 \
                                   vendor.qti.hardware.display.mapperextensions@1.0 \
                                   android.hardware.graphics.mapper@2.0 \
                                   android.hardware.graphics.mapper@2.1 \
-                                  vendor.qti.hardware.display.mapperextensions@1.1
+                                  vendor.qti.hardware.display.mapperextensions@1.1 \
+                                  android.hardware.graphics.mapper@3.0
 LOCAL_CFLAGS                  := $(common_flags) -DLOG_TAG=\"qdgralloc\" -Wno-sign-conversion
 LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
 LOCAL_SRC_FILES               := QtiMapper.cpp QtiMapperExtensions.cpp
@@ -93,9 +97,10 @@
                                  libqdMetaData \
                                  libgrallocutils \
                                  libgralloccore \
-                                 vendor.qti.hardware.display.allocator@1.0 \
+                                 vendor.qti.hardware.display.allocator@3.0 \
+                                 android.hardware.graphics.mapper@3.0 \
                                  android.hardware.graphics.mapper@2.1 \
-                                 android.hardware.graphics.allocator@2.0
+                                 android.hardware.graphics.allocator@3.0
 LOCAL_CFLAGS                  := -DLOG_TAG=\"qdgralloc\" $(common_flags)
 LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
 LOCAL_C_INCLUDES              := $(common_includes) $(kernel_includes)
diff --git a/gralloc/QtiAllocator.cpp b/gralloc/QtiAllocator.cpp
index bdb8ebe..44612c0 100644
--- a/gralloc/QtiAllocator.cpp
+++ b/gralloc/QtiAllocator.cpp
@@ -40,7 +40,7 @@
 namespace hardware {
 namespace display {
 namespace allocator {
-namespace V1_0 {
+namespace V3_0 {
 namespace implementation {
 
 using android::hardware::hidl_handle;
@@ -105,7 +105,7 @@
 }
 
 }  // namespace implementation
-}  // namespace V1_0
+}  // namespace V3_0
 }  // namespace allocator
 }  // namespace display
 }  // namespace hardware
diff --git a/gralloc/QtiAllocator.h b/gralloc/QtiAllocator.h
index 2f3add8..7bf1705 100644
--- a/gralloc/QtiAllocator.h
+++ b/gralloc/QtiAllocator.h
@@ -32,7 +32,7 @@
 
 #include <hidl/MQDescriptor.h>
 #include <hidl/Status.h>
-#include <vendor/qti/hardware/display/allocator/1.0/IQtiAllocator.h>
+#include <vendor/qti/hardware/display/allocator/3.0/IQtiAllocator.h>
 
 #include "gr_buf_mgr.h"
 
@@ -41,22 +41,22 @@
 namespace hardware {
 namespace display {
 namespace allocator {
-namespace V1_0 {
+namespace V3_0 {
 namespace implementation {
 
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::hardware::graphics::allocator::V2_0::IAllocator;
-using ::android::hardware::graphics::mapper::V2_0::Error;
+using ::android::sp;
 using ::android::hardware::hidl_array;
 using ::android::hardware::hidl_memory;
 using ::android::hardware::hidl_string;
 using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::graphics::allocator::V3_0::IAllocator;
+using ::android::hardware::graphics::mapper::V3_0::Error;
 using ::android::hidl::base::V1_0::DebugInfo;
 using ::android::hidl::base::V1_0::IBase;
-using ::android::sp;
-using ::vendor::qti::hardware::display::allocator::V1_0::IQtiAllocator;
 using gralloc::BufferManager;
+using ::vendor::qti::hardware::display::allocator::V3_0::IQtiAllocator;
 
 class QtiAllocator : public IQtiAllocator {
  public:
@@ -74,7 +74,7 @@
 extern "C" IQtiAllocator *HIDL_FETCH_IQtiAllocator(const char *name);
 
 }  // namespace implementation
-}  // namespace V1_0
+}  // namespace V3_0
 }  // namespace allocator
 }  // namespace display
 }  // namespace hardware
diff --git a/gralloc/QtiMapper.cpp b/gralloc/QtiMapper.cpp
index c9790c2..a1ac903 100644
--- a/gralloc/QtiMapper.cpp
+++ b/gralloc/QtiMapper.cpp
@@ -50,7 +50,7 @@
   ALOGD_IF(DEBUG, "Created QtiMapper instance");
 }
 
-bool QtiMapper::ValidDescriptor(const BufferDescriptorInfo_2_1 &bd) {
+bool QtiMapper::ValidDescriptor(const BufferDescriptorInfo_3_0 &bd) {
   if (bd.width == 0 || bd.height == 0 || (static_cast<int32_t>(bd.format) <= 0) ||
       bd.layerCount <= 0) {
     return false;
@@ -59,7 +59,7 @@
   return true;
 }
 
-Error QtiMapper::CreateDescriptor(const BufferDescriptorInfo_2_1& descriptor_info,
+Error QtiMapper::CreateDescriptor(const BufferDescriptorInfo_3_0 &descriptor_info,
                                   IMapperBufferDescriptor *descriptor) {
   ALOGD_IF(DEBUG,
            "BufferDescriptorInfo: wxh: %dx%d usage: 0x%" PRIu64 " format: %d layer_count: %d",
@@ -76,17 +76,17 @@
 }
 
 // Methods from ::android::hardware::graphics::mapper::V2_0::IMapper follow.
-Return<void> QtiMapper::createDescriptor(const BufferDescriptorInfo_2_0 &descriptor_info,
+Return<void> QtiMapper::createDescriptor(const BufferDescriptorInfo_3_0 &descriptor_info,
                                          createDescriptor_cb hidl_cb) {
   IMapperBufferDescriptor descriptor;
-  auto info_2_1 = BufferDescriptorInfo_2_1 {
+  auto info_3_0 = BufferDescriptorInfo_3_0{
       descriptor_info.width,
       descriptor_info.height,
       descriptor_info.layerCount,
       static_cast<PixelFormat>(descriptor_info.format),
       descriptor_info.usage,
   };
-  auto err = CreateDescriptor(info_2_1, &descriptor);
+  auto err = CreateDescriptor(info_3_0, &descriptor);
   hidl_cb(err, descriptor);
   return Void();
 }
@@ -177,13 +177,13 @@
                              const hidl_handle &acquire_fence, lock_cb hidl_cb) {
   auto err = LockBuffer(buffer, cpu_usage, acquire_fence);
   if (err != Error::NONE) {
-    hidl_cb(err, nullptr);
+    hidl_cb(err, nullptr, -1, -1);
     return Void();
   }
 
   auto hnd = PRIV_HANDLE_CONST(buffer);
   auto *out_data = reinterpret_cast<void *>(hnd->base);
-  hidl_cb(Error::NONE, out_data);
+  hidl_cb(err, out_data, gralloc::GetBpp(hnd->format), hnd->width);
   return Void();
 }
 
@@ -222,8 +222,8 @@
   return Void();
 }
 
-Return<Error> QtiMapper::validateBufferSize(void* buffer,
-                                            const BufferDescriptorInfo_2_1& descriptor_info,
+Return<Error> QtiMapper::validateBufferSize(void *buffer,
+                                            const BufferDescriptorInfo_3_0 &descriptor_info,
                                             uint32_t /*stride*/) {
   auto err = Error::BAD_BUFFER;
   auto hnd = static_cast<private_handle_t *>(buffer);
@@ -240,8 +240,7 @@
   return err;
 }
 
-Return<void> QtiMapper::getTransportSize(void *buffer,
-                                         IMapper_2_1::getTransportSize_cb hidl_cb) {
+Return<void> QtiMapper::getTransportSize(void *buffer, IMapper_3_0::getTransportSize_cb hidl_cb) {
   auto err = Error::BAD_BUFFER;
   auto hnd = static_cast<private_handle_t *>(buffer);
   uint32_t num_fds = 0, num_ints = 0;
@@ -260,11 +259,30 @@
   return Void();
 }
 
-Return<void> QtiMapper::createDescriptor_2_1(const BufferDescriptorInfo_2_1& descriptor_info,
-                                             IMapper_2_1::createDescriptor_2_1_cb hidl_cb) {
+Return<void> QtiMapper::isSupported(const BufferDescriptorInfo_3_0 &descriptor_info,
+                                    IMapper_3_0::isSupported_cb hidl_cb) {
   IMapperBufferDescriptor descriptor;
   auto err = CreateDescriptor(descriptor_info, &descriptor);
-  hidl_cb(err, descriptor);
+  if (err != Error::NONE) {
+    hidl_cb(err, false);
+    return Void();
+  }
+
+  gralloc::BufferDescriptor desc;
+  err = desc.Decode(descriptor);
+  if (err != Error::NONE) {
+    hidl_cb(err, false);
+    return Void();
+  }
+
+  buffer_handle_t buffer;
+  err = buf_mgr_->AllocateBuffer(desc, &buffer, 0, true);
+  if (err != Error::NONE) {
+    hidl_cb(err, false);
+  } else {
+    hidl_cb(err, true);
+  }
+
   return Void();
 }
 
@@ -281,10 +299,10 @@
 
 // When we are in passthrough mode, this method is used
 // by hidl to obtain the SP HAL object
-IMapper_2_1 *HIDL_FETCH_IMapper(const char * /* name */) {
+IMapper_3_0 *HIDL_FETCH_IMapper(const char * /* name */) {
   ALOGD_IF(DEBUG, "Fetching IMapper from QtiMapper");
   auto mapper = new QtiMapper();
-  return static_cast<IMapper_2_1 *>(mapper);
+  return static_cast<IMapper_3_0 *>(mapper);
 }
 
 IQtiMapper *HIDL_FETCH_IQtiMapper(const char * /* name */) {
diff --git a/gralloc/QtiMapper.h b/gralloc/QtiMapper.h
index 7302e5e..cf17d9e 100644
--- a/gralloc/QtiMapper.h
+++ b/gralloc/QtiMapper.h
@@ -32,7 +32,7 @@
 
 #include <hidl/MQDescriptor.h>
 #include <hidl/Status.h>
-#include <vendor/qti/hardware/display/mapper/2.0/IQtiMapper.h>
+#include <vendor/qti/hardware/display/mapper/3.0/IQtiMapper.h>
 
 #include "QtiMapperExtensions.h"
 #include "gr_buf_mgr.h"
@@ -51,29 +51,27 @@
 using ::android::hardware::hidl_vec;
 using ::android::hardware::Return;
 using ::android::hardware::Void;
-using ::android::hardware::graphics::common::V1_1::PixelFormat;
-using ::android::hardware::graphics::mapper::V2_0::Error;
-using ::android::hardware::graphics::mapper::V2_0::IMapper;
-using ::android::hardware::graphics::mapper::V2_0::YCbCrLayout;
+using ::android::hardware::graphics::common::V1_2::PixelFormat;
+using ::android::hardware::graphics::mapper::V3_0::Error;
+using ::android::hardware::graphics::mapper::V3_0::IMapper;
+using ::android::hardware::graphics::mapper::V3_0::YCbCrLayout;
 using ::android::hidl::base::V1_0::DebugInfo;
 using ::android::hidl::base::V1_0::IBase;
 using gralloc::BufferManager;
-using ::vendor::qti::hardware::display::mapper::V2_0::IQtiMapper;
 using ::vendor::qti::hardware::display::mapperextensions::V1_1::IQtiMapperExtensions;
 using ::vendor::qti::hardware::display::mapperextensions::V1_1::implementation::QtiMapperExtensions;
+using ::vendor::qti::hardware::display::mapper::V3_0::IQtiMapper;
 
-using IMapper_2_1 = android::hardware::graphics::mapper::V2_1::IMapper;
-using BufferDescriptorInfo_2_0 =
-android::hardware::graphics::mapper::V2_0::IMapper::BufferDescriptorInfo;
-using BufferDescriptorInfo_2_1 =
-android::hardware::graphics::mapper::V2_1::IMapper::BufferDescriptorInfo;
-using IMapperBufferDescriptor = android::hardware::graphics::mapper::V2_0::BufferDescriptor;
+using IMapper_3_0 = android::hardware::graphics::mapper::V3_0::IMapper;
+using BufferDescriptorInfo_3_0 =
+    android::hardware::graphics::mapper::V3_0::IMapper::BufferDescriptorInfo;
+using IMapperBufferDescriptor = android::hardware::graphics::mapper::V3_0::BufferDescriptor;
 
 class QtiMapper : public IQtiMapper {
  public:
   QtiMapper();
   // Methods from ::android::hardware::graphics::mapper::V2_0::IMapper follow.
-  Return<void> createDescriptor(const BufferDescriptorInfo_2_0 &descriptor_info,
+  Return<void> createDescriptor(const BufferDescriptorInfo_3_0 &descriptor_info,
                                 createDescriptor_cb hidl_cb) override;
   Return<void> importBuffer(const hidl_handle &raw_handle, importBuffer_cb hidl_cb) override;
   Return<Error> freeBuffer(void *buffer) override;
@@ -84,27 +82,27 @@
   Return<void> unlock(void *buffer, unlock_cb hidl_cb) override;
 
   // Methods from ::android::hardware::graphics::mapper::V2_1::IMapper follow.
-  Return<Error> validateBufferSize(void* buffer,
-                                   const BufferDescriptorInfo_2_1& descriptorInfo,
+  Return<Error> validateBufferSize(void *buffer, const BufferDescriptorInfo_3_0 &descriptorInfo,
                                    uint32_t stride) override;
-  Return<void> getTransportSize(void* buffer, IMapper_2_1::getTransportSize_cb hidl_cb) override;
-  Return<void> createDescriptor_2_1(const BufferDescriptorInfo_2_1& descriptorInfo,
-                                    createDescriptor_2_1_cb _hidl_cb) override;
+  Return<void> getTransportSize(void *buffer, IMapper_3_0::getTransportSize_cb hidl_cb) override;
+
+  Return<void> isSupported(const BufferDescriptorInfo_3_0 &descriptor_info,
+                           IMapper_3_0::isSupported_cb hidl_cb) override;
 
   Return<void> getMapperExtensions(getMapperExtensions_cb hidl_cb);
   sp<mapperextensions::V1_1::IQtiMapperExtensions> extensions_ = nullptr;
 
  private:
   BufferManager *buf_mgr_ = nullptr;
-  Error CreateDescriptor(const BufferDescriptorInfo_2_1& descriptor_info,
-                         IMapperBufferDescriptor * descriptor);
+  Error CreateDescriptor(const BufferDescriptorInfo_3_0 &descriptor_info,
+                         IMapperBufferDescriptor *descriptor);
   bool ValidDescriptor(const IMapper::BufferDescriptorInfo &bd);
   bool GetFenceFd(const hidl_handle &fence_handle, int *outFenceFd);
   void WaitFenceFd(int fence_fd);
   Error LockBuffer(void *buffer, uint64_t usage, const hidl_handle &acquire_fence);
 };
 
-extern "C" IMapper_2_1 *HIDL_FETCH_IMapper(const char *name);
+extern "C" IMapper_3_0 *HIDL_FETCH_IMapper(const char *name);
 extern "C" IQtiMapper *HIDL_FETCH_IQtiMapper(const char *name);
 
 }  // namespace implementation
diff --git a/gralloc/QtiMapperExtensions.h b/gralloc/QtiMapperExtensions.h
index b333312..1e2a4ad 100644
--- a/gralloc/QtiMapperExtensions.h
+++ b/gralloc/QtiMapperExtensions.h
@@ -51,8 +51,8 @@
 using ::android::hardware::hidl_vec;
 using ::android::hardware::Return;
 using ::android::hardware::Void;
-using ::android::hardware::graphics::common::V1_1::PixelFormat;
-using ::android::hardware::graphics::mapper::V2_0::IMapper;
+using ::android::hardware::graphics::common::V1_2::PixelFormat;
+using ::android::hardware::graphics::mapper::V3_0::IMapper;
 using ::android::hidl::base::V1_0::DebugInfo;
 using ::android::hidl::base::V1_0::IBase;
 using gralloc::BufferManager;
diff --git a/gralloc/android.hardware.graphics.mapper-impl-qti-display.xml b/gralloc/android.hardware.graphics.mapper-impl-qti-display.xml
index ed1c972..d62a64e 100644
--- a/gralloc/android.hardware.graphics.mapper-impl-qti-display.xml
+++ b/gralloc/android.hardware.graphics.mapper-impl-qti-display.xml
@@ -30,7 +30,7 @@
     <hal format="hidl">
         <name>vendor.qti.hardware.display.mapper</name>
         <transport arch="32+64">passthrough</transport>
-        <version>2.0</version>
+        <version>3.0</version>
         <interface>
             <name>IQtiMapper</name>
             <instance>default</instance>
@@ -40,7 +40,7 @@
         <name>android.hardware.graphics.mapper</name>
         <transport arch="32+64">passthrough</transport>
         <impl level="generic"></impl>
-        <version>2.1</version>
+        <version>3.0</version>
         <interface>
             <name>IMapper</name>
             <instance>default</instance>
diff --git a/gralloc/gr_buf_descriptor.h b/gralloc/gr_buf_descriptor.h
index 2d426da..06b6986 100644
--- a/gralloc/gr_buf_descriptor.h
+++ b/gralloc/gr_buf_descriptor.h
@@ -30,13 +30,13 @@
 #ifndef __GR_BUF_DESCRIPTOR_H__
 #define __GR_BUF_DESCRIPTOR_H__
 
-#include <android/hardware/graphics/mapper/2.1/IMapper.h>
+#include <android/hardware/graphics/mapper/3.0/IMapper.h>
 #include <atomic>
 
 namespace gralloc {
-using android::hardware::graphics::mapper::V2_0::Error;
-using android::hardware::graphics::mapper::V2_1::IMapper;
 using android::hardware::hidl_vec;
+using android::hardware::graphics::mapper::V3_0::Error;
+using android::hardware::graphics::mapper::V3_0::IMapper;
 
 const uint32_t kBufferDescriptorSize = 7;
 const uint32_t kMagicVersion = 0x76312E30;  // v1.0
diff --git a/gralloc/gr_buf_mgr.cpp b/gralloc/gr_buf_mgr.cpp
index cd36c13..86d730e 100644
--- a/gralloc/gr_buf_mgr.cpp
+++ b/gralloc/gr_buf_mgr.cpp
@@ -262,7 +262,7 @@
 }
 
 Error BufferManager::AllocateBuffer(const BufferDescriptor &descriptor, buffer_handle_t *handle,
-                                    unsigned int bufferSize) {
+                                    unsigned int bufferSize, bool testAlloc) {
   if (!handle)
     return Error::BAD_BUFFER;
   std::lock_guard<std::mutex> buffer_lock(buffer_lock_);
@@ -286,6 +286,10 @@
     return Error::BAD_DESCRIPTOR;
   }
 
+  if (testAlloc) {
+    return Error::NONE;
+  }
+
   size = (bufferSize >= size) ? bufferSize : size;
   uint64_t flags = 0;
   auto page_size = UINT(getpagesize());
diff --git a/gralloc/gr_buf_mgr.h b/gralloc/gr_buf_mgr.h
index 6c5f365..1ff5455 100644
--- a/gralloc/gr_buf_mgr.h
+++ b/gralloc/gr_buf_mgr.h
@@ -33,14 +33,14 @@
 
 namespace gralloc {
 
-using android::hardware::graphics::mapper::V2_0::Error;
+using android::hardware::graphics::mapper::V3_0::Error;
 
 class BufferManager {
  public:
   ~BufferManager();
 
   Error AllocateBuffer(const BufferDescriptor &descriptor, buffer_handle_t *handle,
-                       unsigned int bufferSize = 0);
+                       unsigned int bufferSize = 0, bool testAlloc = false);
   Error RetainBuffer(private_handle_t const *hnd);
   Error ReleaseBuffer(private_handle_t const *hnd);
   Error LockBuffer(const private_handle_t *hnd, uint64_t usage);
diff --git a/gralloc/gr_utils.cpp b/gralloc/gr_utils.cpp
index b9ddcec..05a6362 100644
--- a/gralloc/gr_utils.cpp
+++ b/gralloc/gr_utils.cpp
@@ -236,6 +236,32 @@
   return ret;
 }
 
+int GetBpp(int format) {
+  if (IsUncompressedRGBFormat(format)) {
+    return GetBppForUncompressedRGB(format);
+  }
+  switch (format) {
+    case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_4x4_KHR:
+    case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
+    case HAL_PIXEL_FORMAT_RAW8:
+    case HAL_PIXEL_FORMAT_Y8:
+      return 1;
+    case HAL_PIXEL_FORMAT_RAW16:
+    case HAL_PIXEL_FORMAT_Y16:
+    case HAL_PIXEL_FORMAT_YCbCr_422_SP:
+    case HAL_PIXEL_FORMAT_YCrCb_422_SP:
+    case HAL_PIXEL_FORMAT_YCbCr_422_I:
+    case HAL_PIXEL_FORMAT_YCrCb_422_I:
+    case HAL_PIXEL_FORMAT_CbYCrY_422_I:
+      return 2;
+    case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
+    case HAL_PIXEL_FORMAT_YCbCr_420_P010:
+      return 3;
+    default:
+      return -1;
+  }
+}
+
 // Returns the final buffer size meant to be allocated with ion
 unsigned int GetSize(const BufferInfo &info, unsigned int alignedw, unsigned int alignedh) {
   unsigned int size = 0;
diff --git a/gralloc/gr_utils.h b/gralloc/gr_utils.h
index 39d7e9b..bdde659 100644
--- a/gralloc/gr_utils.h
+++ b/gralloc/gr_utils.h
@@ -30,7 +30,7 @@
 #ifndef __GR_UTILS_H__
 #define __GR_UTILS_H__
 
-#include <android/hardware/graphics/common/1.1/types.h>
+#include <android/hardware/graphics/common/1.2/types.h>
 #include "gralloc_priv.h"
 #include "qdMetaData.h"
 
@@ -132,6 +132,7 @@
 bool CpuCanAccess(uint64_t usage);
 bool CpuCanRead(uint64_t usage);
 bool CpuCanWrite(uint64_t usage);
+int GetBpp(int format);
 unsigned int GetSize(const BufferInfo &d, unsigned int alignedw, unsigned int alignedh);
 int GetBufferSizeAndDimensions(const BufferInfo &d, unsigned int *size, unsigned int *alignedw,
                                unsigned int *alignedh);
diff --git a/gralloc/service.cpp b/gralloc/service.cpp
index ecc8680..7ea1e3a 100644
--- a/gralloc/service.cpp
+++ b/gralloc/service.cpp
@@ -31,8 +31,8 @@
 
 using android::hardware::configureRpcThreadpool;
 using android::hardware::joinRpcThreadpool;
-using vendor::qti::hardware::display::allocator::V1_0::IQtiAllocator;
-using vendor::qti::hardware::display::allocator::V1_0::implementation::QtiAllocator;
+using vendor::qti::hardware::display::allocator::V3_0::IQtiAllocator;
+using vendor::qti::hardware::display::allocator::V3_0::implementation::QtiAllocator;
 
 int main(int, char **) {
   android::sp<IQtiAllocator> service = new QtiAllocator();
diff --git a/gralloc/vendor.qti.hardware.display.allocator-service.xml b/gralloc/vendor.qti.hardware.display.allocator-service.xml
index a5c612b..5c072ea 100644
--- a/gralloc/vendor.qti.hardware.display.allocator-service.xml
+++ b/gralloc/vendor.qti.hardware.display.allocator-service.xml
@@ -31,7 +31,7 @@
         <name>android.hardware.graphics.allocator</name>
         <transport>hwbinder</transport>
         <impl level="generic"></impl>
-        <version>2.0</version>
+        <version>3.0</version>
         <interface>
             <name>IAllocator</name>
             <instance>default</instance>
@@ -40,7 +40,7 @@
     <hal format="hidl">
         <name>vendor.qti.hardware.display.allocator</name>
         <transport>hwbinder</transport>
-        <version>1.0</version>
+        <version>3.0</version>
         <interface>
             <name>IQtiAllocator</name>
             <instance>default</instance>