summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gralloc_drm_handle.h1
-rw-r--r--gralloc_gbm.cpp15
2 files changed, 14 insertions, 2 deletions
diff --git a/gralloc_drm_handle.h b/gralloc_drm_handle.h
index 7f332b3..8c54308 100644
--- a/gralloc_drm_handle.h
+++ b/gralloc_drm_handle.h
@@ -49,6 +49,7 @@ struct gralloc_drm_handle_t {
int name; /* the name of the bo */
int stride; /* the stride in bytes */
+ uint64_t modifier; /* buffer modifiers */
int data_owner; /* owner of data (for validation) */
union {
diff --git a/gralloc_gbm.cpp b/gralloc_gbm.cpp
index ea1035f..40bfb37 100644
--- a/gralloc_gbm.cpp
+++ b/gralloc_gbm.cpp
@@ -116,9 +116,13 @@ static struct gralloc_gbm_bo_t *gbm_import(struct gbm_device *gbm,
struct gralloc_gbm_handle_t *handle)
{
struct gralloc_gbm_bo_t *buf;
+ #ifdef GBM_BO_IMPORT_FD_MODIFIER
+ struct gbm_import_fd_modifier_data data;
+ #else
struct gbm_import_fd_data data;
- int format = get_gbm_format(handle->format);
+ #endif
+ int format = get_gbm_format(handle->format);
if (handle->prime_fd < 0)
return NULL;
@@ -133,14 +137,18 @@ static struct gralloc_gbm_bo_t *gbm_import(struct gbm_device *gbm,
data.height = handle->height;
data.stride = handle->stride;
data.format = format;
-
/* Adjust the width and height for a GBM GR88 buffer */
if (handle->format == HAL_PIXEL_FORMAT_YV12) {
data.width /= 2;
data.height += handle->height / 2;
}
+ #ifdef GBM_BO_IMPORT_FD_MODIFIER
+ data.modifier = handle->modifier;
+ buf->bo = gbm_bo_import(gbm, GBM_BO_IMPORT_FD_MODIFIER, &data, 0);
+ #else
buf->bo = gbm_bo_import(gbm, GBM_BO_IMPORT_FD, &data, 0);
+ #endif
if (!buf->bo) {
delete buf;
return NULL;
@@ -192,6 +200,9 @@ static struct gralloc_gbm_bo_t *gbm_alloc(struct gbm_device *gbm,
handle->prime_fd = gbm_bo_get_fd(buf->bo);
handle->stride = gbm_bo_get_stride(buf->bo);
+ #ifdef GBM_BO_IMPORT_FD_MODIFIER
+ handle->modifier = gbm_bo_get_modifier(buf->bo);
+ #endif
return buf;
}