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:
parent
58080dfa64
commit
a6878fe5ae
3 changed files with 42 additions and 0 deletions
13
gbm.c
13
gbm.c
|
|
@ -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
28
gbm.h
|
|
@ -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 *));
|
||||
|
|
|
|||
|
|
@ -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 *);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue