Gralloc: Use adreno APIs for buffer size calculations
1) Add support to use adreno APIs for non video layers'
buffer size calculations.
2) Add graphics metadata field to MetaData_t structure.
3) Add bindings for newly introduced formats in
GetGpuPixelFormat.
4) Add support to retrieve the graphics metadata in
Perform API.
5) Modify BUFFER_TYPE determination logic
Change-Id: I7674209b42d7cd39bc8de39e3a10582bb216e6cf
CRs-Fixed: 2226672
diff --git a/gralloc/gr_adreno_info.cpp b/gralloc/gr_adreno_info.cpp
index 2e1245c..1288d92 100644
--- a/gralloc/gr_adreno_info.cpp
+++ b/gralloc/gr_adreno_info.cpp
@@ -68,6 +68,12 @@
::dlsym(libadreno_utils_, "isUBWCSupportedByGpu");
*reinterpret_cast<void **>(&LINK_adreno_get_gpu_pixel_alignment) =
::dlsym(libadreno_utils_, "get_gpu_pixel_alignment");
+ *reinterpret_cast<void **>(&LINK_adreno_get_metadata_blob_size) =
+ ::dlsym(libadreno_utils_, "adreno_get_metadata_blob_size");
+ *reinterpret_cast<void **>(&LINK_adreno_init_memory_layout) =
+ ::dlsym(libadreno_utils_, "adreno_init_memory_layout");
+ *reinterpret_cast<void **>(&LINK_adreno_get_aligned_gpu_buffer_size) =
+ ::dlsym(libadreno_utils_, "adreno_get_aligned_gpu_buffer_size");
} else {
ALOGE(" Failed to load libadreno_utils.so");
}
@@ -181,7 +187,7 @@
case HAL_PIXEL_FORMAT_RGBX_8888:
return ADRENO_PIXELFORMAT_R8G8B8X8;
case HAL_PIXEL_FORMAT_BGRA_8888:
- return ADRENO_PIXELFORMAT_B8G8R8A8;
+ return ADRENO_PIXELFORMAT_B8G8R8A8_UNORM;
case HAL_PIXEL_FORMAT_RGB_888:
return ADRENO_PIXELFORMAT_R8G8B8;
case HAL_PIXEL_FORMAT_RGB_565:
@@ -211,6 +217,18 @@
case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC:
case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
return ADRENO_PIXELFORMAT_P010;
+ case HAL_PIXEL_FORMAT_DEPTH_16:
+ return ADRENO_PIXELFORMAT_D16_UNORM;
+ case HAL_PIXEL_FORMAT_DEPTH_24:
+ return ADRENO_PIXELFORMAT_D24_UNORM;
+ case HAL_PIXEL_FORMAT_DEPTH_24_STENCIL_8:
+ return ADRENO_PIXELFORMAT_D24_UNORM_S8_UINT;
+ case HAL_PIXEL_FORMAT_DEPTH_32F:
+ return ADRENO_PIXELFORMAT_D32_FLOAT;
+ case HAL_PIXEL_FORMAT_DEPTH_32F_STENCIL_8:
+ return ADRENO_PIXELFORMAT_D32_FLOAT_X24S8_UINT;
+ case HAL_PIXEL_FORMAT_STENCIL_8:
+ return ADRENO_PIXELFORMAT_S8_UINT;
default:
ALOGE("%s: No map for format: 0x%x", __FUNCTION__, hal_format);
break;
@@ -219,4 +237,34 @@
return ADRENO_PIXELFORMAT_UNKNOWN;
}
+uint32_t AdrenoMemInfo::AdrenoGetMetadataBlobSize() {
+ if (LINK_adreno_get_metadata_blob_size) {
+ return LINK_adreno_get_metadata_blob_size();
+ }
+ return 0;
+}
+
+int AdrenoMemInfo::AdrenoInitMemoryLayout(void *metadata_blob, int width, int height, int depth,
+ int format, int num_samples, int isUBWC, uint64_t usage, uint32_t num_planes) {
+ if (LINK_adreno_init_memory_layout) {
+ surface_tile_mode_t tile_mode = static_cast<surface_tile_mode_t> (isUBWC);
+ return LINK_adreno_init_memory_layout(metadata_blob, width, height, depth,
+ GetGpuPixelFormat(format), num_samples,
+ tile_mode, usage, num_planes);
+ }
+ return -1;
+}
+
+uint32_t AdrenoMemInfo::AdrenoGetAlignedGpuBufferSize(void *metadata_blob) {
+ if (LINK_adreno_get_aligned_gpu_buffer_size) {
+ return LINK_adreno_get_aligned_gpu_buffer_size(metadata_blob);
+ }
+ return -1;
+}
+
+bool AdrenoMemInfo::AdrenoSizeAPIAvaliable() {
+ return (LINK_adreno_get_metadata_blob_size && LINK_adreno_init_memory_layout &&
+ LINK_adreno_get_aligned_gpu_buffer_size);
+}
+
} // namespace gralloc