Gralloc: Add support to disable AHardwareBuffer
Add property to disable calling into adreno size calculation APIs
Change-Id: I538a880769c4ce55ac42bcccfd5faebfa284d4e0
CRs-Fixed: 2268733
diff --git a/gralloc/gr_adreno_info.cpp b/gralloc/gr_adreno_info.cpp
index 446c373..8644ef7 100644
--- a/gralloc/gr_adreno_info.cpp
+++ b/gralloc/gr_adreno_info.cpp
@@ -86,6 +86,12 @@
!(strncmp(property, "true", PROPERTY_VALUE_MAX))) {
gfx_ubwc_disable_ = true;
}
+
+ property_get(DISABLE_AHARDWAREBUFFER_PROP, property, "0");
+ if (!(strncmp(property, "1", PROPERTY_VALUE_MAX)) ||
+ !(strncmp(property, "true", PROPERTY_VALUE_MAX))) {
+ gfx_ahardware_buffer_disable_ = true;
+ }
}
AdrenoMemInfo::~AdrenoMemInfo() {
@@ -263,6 +269,10 @@
}
bool AdrenoMemInfo::AdrenoSizeAPIAvaliable() {
+ if (gfx_ahardware_buffer_disable_) {
+ return false;
+ }
+
return (LINK_adreno_get_metadata_blob_size && LINK_adreno_init_memory_layout &&
LINK_adreno_get_aligned_gpu_buffer_size);
}
diff --git a/gralloc/gr_adreno_info.h b/gralloc/gr_adreno_info.h
index e834293..bb8fdd6 100644
--- a/gralloc/gr_adreno_info.h
+++ b/gralloc/gr_adreno_info.h
@@ -193,6 +193,7 @@
int (*LINK_adreno_isPISupportedByGpu)(int format, uint64_t usage) = NULL;
bool gfx_ubwc_disable_ = false;
+ bool gfx_ahardware_buffer_disable_ = false;
void *libadreno_utils_ = NULL;
static AdrenoMemInfo *s_instance;
diff --git a/gralloc/gr_utils.cpp b/gralloc/gr_utils.cpp
index d91da92..8b2d495 100644
--- a/gralloc/gr_utils.cpp
+++ b/gralloc/gr_utils.cpp
@@ -218,6 +218,21 @@
return align;
}
+bool IsGPUFlagSupported(uint64_t usage) {
+ bool ret = true;
+ if ((usage & BufferUsage::GPU_MIPMAP_COMPLETE)) {
+ ALOGE("GPU_MIPMAP_COMPLETE not supported");
+ ret = false;
+ }
+
+ if ((usage & BufferUsage::GPU_CUBE_MAP)) {
+ ALOGE("GPU_CUBE_MAP not supported");
+ ret = false;
+ }
+
+ return ret;
+}
+
// 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;
@@ -226,6 +241,11 @@
int height = info.height;
uint64_t usage = info.usage;
+ if (!IsGPUFlagSupported(usage)) {
+ ALOGE("Unsupported GPU usage flags present 0x%" PRIx64, usage);
+ return 0;
+ }
+
if (IsUBwcEnabled(format, usage)) {
size = GetUBwcSize(width, height, format, alignedw, alignedh);
} else if (IsUncompressedRGBFormat(format)) {
diff --git a/gralloc/gr_utils.h b/gralloc/gr_utils.h
index d273754..c955619 100644
--- a/gralloc/gr_utils.h
+++ b/gralloc/gr_utils.h
@@ -115,6 +115,7 @@
int GetImplDefinedFormat(uint64_t usage, int format);
int GetCustomFormatFlags(int format, uint64_t usage, int *custom_format, uint64_t *priv_flags);
int GetBufferType(int inputFormat);
+bool IsGPUFlagSupported(uint64_t usage);
} // namespace gralloc
#endif // __GR_UTILS_H__
diff --git a/gralloc/gralloc_priv.h b/gralloc/gralloc_priv.h
index 45e1240..4c981d4 100644
--- a/gralloc/gralloc_priv.h
+++ b/gralloc/gralloc_priv.h
@@ -28,6 +28,7 @@
#define GRALLOC_PROP(prop_name) GRALLOC_PROP_PREFIX prop_name
#define DISABLE_UBWC_PROP GRALLOC_PROP("disable_ubwc")
+#define DISABLE_AHARDWAREBUFFER_PROP GRALLOC_PROP("disable_ahardware_buffer")
#define ENABLE_FB_UBWC_PROP GRALLOC_PROP("enable_fb_ubwc")
#define MAP_FB_MEMORY_PROP GRALLOC_PROP("map_fb_memory")
#define USE_SYSTEM_HEAP_FOR_SENSORS GRALLOC_PROP("use_system_heap_for_sensors")