Gralloc: Do not use adreno for secure camera and secure display
Avoid using adreno size calculations for secure camera and
secure display buffers.
Change-Id: Ib61d893cbcc57b10070250a63b8fa79106de4af3
CRs-Fixed: 2262355
diff --git a/gralloc/gr_buf_mgr.cpp b/gralloc/gr_buf_mgr.cpp
index 7aa4b05..41f590d 100644
--- a/gralloc/gr_buf_mgr.cpp
+++ b/gralloc/gr_buf_mgr.cpp
@@ -285,7 +285,7 @@
bool use_adreno_for_size = false;
GraphicsMetadata graphics_metadata = {};
- use_adreno_for_size = ((buffer_type != BUFFER_TYPE_VIDEO) && GetAdrenoSizeAPIStatus());
+ use_adreno_for_size = CanUseAdrenoForSize(buffer_type, usage);
if (use_adreno_for_size) {
GetGpuResourceSizeAndDimensions(info, &size, &alignedw, &alignedh, &graphics_metadata);
} else {
diff --git a/gralloc/gr_utils.cpp b/gralloc/gr_utils.cpp
index 282bcc2..10bbf27 100644
--- a/gralloc/gr_utils.cpp
+++ b/gralloc/gr_utils.cpp
@@ -998,6 +998,19 @@
*size = adreno_mem_info->AdrenoGetAlignedGpuBufferSize(graphics_metadata->data);
}
+bool CanUseAdrenoForSize(int buffer_type, uint64_t usage) {
+ if (buffer_type == BUFFER_TYPE_VIDEO || !GetAdrenoSizeAPIStatus()) {
+ return false;
+ }
+
+ if ((usage & BufferUsage::PROTECTED) && ((usage & BufferUsage::CAMERA_OUTPUT) ||
+ (usage & GRALLOC_USAGE_PRIVATE_SECURE_DISPLAY))) {
+ return false;
+ }
+
+ return true;
+}
+
bool GetAdrenoSizeAPIStatus() {
AdrenoMemInfo* adreno_mem_info = AdrenoMemInfo::GetInstance();
if (adreno_mem_info) {
diff --git a/gralloc/gr_utils.h b/gralloc/gr_utils.h
index 7e2d1fa..9f21f5b 100644
--- a/gralloc/gr_utils.h
+++ b/gralloc/gr_utils.h
@@ -106,6 +106,7 @@
void GetGpuResourceSizeAndDimensions(const BufferInfo &info, unsigned int *size,
unsigned int *alignedw, unsigned int *alignedh,
GraphicsMetadata *graphics_metadata);
+bool CanUseAdrenoForSize(int buffer_type, uint64_t usage);
bool GetAdrenoSizeAPIStatus();
bool UseUncached(int format, uint64_t usage);
uint64_t GetHandleFlags(int format, uint64_t usage);