OSDN Git Service

drm_hwcomposer: Extract more BO data by Imagination importer
authorRoman Stratiienko <roman.stratiienko@globallogic.com>
Thu, 23 Jan 2020 16:17:41 +0000 (18:17 +0200)
committerRoman Stratiienko <roman.stratiienko@globallogic.com>
Fri, 24 Jan 2020 14:25:53 +0000 (16:25 +0200)
Fields bo->hal_format and bo->pixel_stride should be set to pass validation
by Mapper HAL v2.1 and v3.0. Otherwise UI is missing and the following
message appears in the logcat:

```
2576 E GraphicBufferMapper: validateBufferSize(0xe663b3637400) failed: 7
2576 E hwc-drm-utils: Failed to import buffer handle err: 7
2576 E hwc-drm-two: Failed to import layer, ret=7
```

Also copy suballocs data for future usage.

Fixes: e3ed48d728aa ("drm_hwcomposer: Add Imagination platform support")
Signed-off-by: Roman Stratiienko <roman.stratiienko@globallogic.com>
platform/platformimagination.cpp

index ea34ecc..63d8130 100644 (file)
@@ -37,8 +37,15 @@ int ImaginationImporter::ConvertBoInfo(buffer_handle_t handle,
   bo->width = hnd->iWidth;
   bo->height = hnd->iHeight;
   bo->usage = hnd->usage;
-  bo->prime_fds[0] = hnd->fd[0];
-  bo->pitches[0] = ALIGN(hnd->iWidth, HW_ALIGN) * hnd->uiBpp >> 3;
+  bo->hal_format = hnd->iFormat;
+  bo->pixel_stride = hnd->aiStride[0];
+
+  int sub = std::min(hnd->iNumSubAllocs, HWC_DRM_BO_MAX_PLANES);
+  for (int i = 0; i < sub; i++) {
+    bo->prime_fds[i] = hnd->fd[i];
+    bo->offsets[i] = hnd->aulPlaneOffset[i];
+    bo->pitches[i] = ALIGN(hnd->iWidth, HW_ALIGN) * hnd->uiBpp >> 3;
+  }
 
   switch (hnd->iFormat) {
 #ifdef HAL_PIXEL_FORMAT_BGRX_8888