minigbm: add format modifiers per plane

To pass the surface format parameters to EGL, we add format modifiers
which are used for dmabuf import. The vendor ID definitions are copied
from drm_fourcc.h.

BUG=chromium:478339
TEST=none

Change-Id: Ida3e6787b29af73ff534c054006f93c3bad4c5b9
Signed-off-by: Vince Hsu <vince.h@nvidia.com>
Reviewed-on: https://chromium-review.googlesource.com/346365
Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
This commit is contained in:
Vince Hsu 2016-05-23 10:32:25 +08:00 committed by chrome-bot
parent 58080dfa64
commit a6878fe5ae
3 changed files with 42 additions and 0 deletions

13
gbm.c
View file

@ -316,6 +316,12 @@ gbm_bo_get_format(struct gbm_bo *bo)
return bo->format;
}
PUBLIC uint64_t
gbm_bo_get_format_modifier(struct gbm_bo *bo)
{
return gbm_bo_get_plane_format_modifier(bo, 0);
}
PUBLIC struct gbm_device *
gbm_bo_get_device(struct gbm_bo *bo)
{
@ -388,6 +394,13 @@ gbm_bo_get_plane_stride(struct gbm_bo *bo, size_t plane)
return bo->strides[plane];
}
PUBLIC uint64_t
gbm_bo_get_plane_format_modifier(struct gbm_bo *bo, size_t plane)
{
assert(plane < bo->num_planes);
return bo->format_modifiers[plane];
}
PUBLIC void
gbm_bo_set_user_data(struct gbm_bo *bo, void *data,
void (*destroy_user_data)(struct gbm_bo *, void *))

28
gbm.h
View file

@ -176,6 +176,28 @@ union gbm_bo_handle {
#define GBM_FORMAT_YUV444 __gbm_fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */
#define GBM_FORMAT_YVU444 __gbm_fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */
/*
* Format Modifiers:
*
* Format modifiers describe, typically, a re-ordering or modification
* of the data in a plane of an FB. This can be used to express tiled/
* swizzled formats, or compression, or a combination of the two.
*
* The upper 8 bits of the format modifier are a vendor-id as assigned
* below. The lower 56 bits are assigned as vendor sees fit.
*/
/* Vendor Ids: */
#define GBM_FORMAT_MOD_NONE 0
#define GBM_FORMAT_MOD_VENDOR_INTEL 0x01
#define GBM_FORMAT_MOD_VENDOR_AMD 0x02
#define GBM_FORMAT_MOD_VENDOR_NV 0x03
#define GBM_FORMAT_MOD_VENDOR_SAMSUNG 0x04
#define GBM_FORMAT_MOD_VENDOR_QCOM 0x05
/* add more to the end as needed */
#define gbm_fourcc_mod_code(vendor, val) \
((((__u64)GBM_FORMAT_MOD_VENDOR_## vendor) << 56) | (val & 0x00ffffffffffffffULL))
/**
* Flags to indicate the intended use for the buffer - these are passed into
@ -269,6 +291,9 @@ gbm_bo_get_stride_or_tiling(struct gbm_bo *bo);
uint32_t
gbm_bo_get_format(struct gbm_bo *bo);
uint64_t
gbm_bo_get_format_modifier(struct gbm_bo *bo);
struct gbm_device *
gbm_bo_get_device(struct gbm_bo *bo);
@ -296,6 +321,9 @@ gbm_bo_get_plane_size(struct gbm_bo *bo, size_t plane);
uint32_t
gbm_bo_get_plane_stride(struct gbm_bo *bo, size_t plane);
uint64_t
gbm_bo_get_plane_format_modifier(struct gbm_bo *bo, size_t plane);
void
gbm_bo_set_user_data(struct gbm_bo *bo, void *data,
void (*destroy_user_data)(struct gbm_bo *, void *));

View file

@ -37,6 +37,7 @@ struct gbm_bo
uint32_t offsets[GBM_MAX_PLANES];
uint32_t sizes[GBM_MAX_PLANES];
uint32_t strides[GBM_MAX_PLANES];
uint64_t format_modifiers[GBM_MAX_PLANES];
void *priv;
void *user_data;
void (*destroy_user_data)(struct gbm_bo *, void *);