diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gbm/backends/dri/gbm_dri.c | 27 | ||||
-rwxr-xr-x | src/gbm/gbm-symbols-check | 1 | ||||
-rw-r--r-- | src/gbm/main/gbm.c | 10 | ||||
-rw-r--r-- | src/gbm/main/gbm.h | 3 | ||||
-rw-r--r-- | src/gbm/main/gbmint.h | 1 |
5 files changed, 42 insertions, 0 deletions
diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index 3faa19e3f19..9bd647fa19f 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -599,6 +599,32 @@ gbm_dri_bo_get_fd(struct gbm_bo *_bo) return fd; } +static int +get_number_planes(struct gbm_dri_device *dri, __DRIimage *image) +{ + int num_planes = 0; + + /* Dumb buffers are single-plane only. */ + if (!image) + return 1; + + dri->image->queryImage(image, __DRI_IMAGE_ATTRIB_NUM_PLANES, &num_planes); + + if (num_planes <= 0) + num_planes = 1; + + return num_planes; +} + +static int +gbm_dri_bo_get_planes(struct gbm_bo *_bo) +{ + struct gbm_dri_device *dri = gbm_dri_device(_bo->gbm); + struct gbm_dri_bo *bo = gbm_dri_bo(_bo); + + return get_number_planes(dri, bo->image); +} + static void gbm_dri_bo_destroy(struct gbm_bo *_bo) { @@ -1091,6 +1117,7 @@ dri_device_create(int fd) dri->base.base.is_format_supported = gbm_dri_is_format_supported; dri->base.base.bo_write = gbm_dri_bo_write; dri->base.base.bo_get_fd = gbm_dri_bo_get_fd; + dri->base.base.bo_get_planes = gbm_dri_bo_get_planes; dri->base.base.bo_destroy = gbm_dri_bo_destroy; dri->base.base.destroy = dri_destroy; dri->base.base.surface_create = gbm_dri_surface_create; diff --git a/src/gbm/gbm-symbols-check b/src/gbm/gbm-symbols-check index 5a333ffcda0..8c4da1b7ea2 100755 --- a/src/gbm/gbm-symbols-check +++ b/src/gbm/gbm-symbols-check @@ -18,6 +18,7 @@ gbm_bo_get_format gbm_bo_get_device gbm_bo_get_handle gbm_bo_get_fd +gbm_bo_get_plane_count gbm_bo_write gbm_bo_set_user_data gbm_bo_get_user_data diff --git a/src/gbm/main/gbm.c b/src/gbm/main/gbm.c index e96297ec52e..37795175644 100644 --- a/src/gbm/main/gbm.c +++ b/src/gbm/main/gbm.c @@ -223,6 +223,16 @@ gbm_bo_get_fd(struct gbm_bo *bo) return bo->gbm->bo_get_fd(bo); } +/** Get the number of planes for the given bo. + * + * \param bo The buffer object + * \return The number of planes + */ +GBM_EXPORT int +gbm_bo_get_plane_count(struct gbm_bo *bo) +{ + return bo->gbm->bo_get_planes(bo); +} /** Write data into the buffer object * diff --git a/src/gbm/main/gbm.h b/src/gbm/main/gbm.h index 59daaa164d1..203a2363579 100644 --- a/src/gbm/main/gbm.h +++ b/src/gbm/main/gbm.h @@ -316,6 +316,9 @@ int gbm_bo_get_fd(struct gbm_bo *bo); int +gbm_bo_get_plane_count(struct gbm_bo *bo); + +int gbm_bo_write(struct gbm_bo *bo, const void *buf, size_t count); void diff --git a/src/gbm/main/gbmint.h b/src/gbm/main/gbmint.h index cfef5eea291..c6a6701464a 100644 --- a/src/gbm/main/gbmint.h +++ b/src/gbm/main/gbmint.h @@ -76,6 +76,7 @@ struct gbm_device { void (*bo_unmap)(struct gbm_bo *bo, void *map_data); int (*bo_write)(struct gbm_bo *bo, const void *buf, size_t data); int (*bo_get_fd)(struct gbm_bo *bo); + int (*bo_get_planes)(struct gbm_bo *bo); void (*bo_destroy)(struct gbm_bo *bo); struct gbm_surface *(*surface_create)(struct gbm_device *gbm, |