gbm: add gbm_{bo,surface}_create_with_modifiers2

gbm_{bo,surface}_create_with_modifiers is missing the usage flags. Add a new
function which lets library users specify it.

Signed-off-by: Simon Ser <contact@emersion.fr>
Reviewed-by: James Jones <jajones@nvidia.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3197>
This commit is contained in:
Simon Ser 2019-12-22 21:46:57 +01:00
parent 76d64d2a3e
commit 268e12c605
4 changed files with 55 additions and 7 deletions

View File

@ -1185,11 +1185,6 @@ gbm_dri_bo_create(struct gbm_device *gbm,
int dri_format; int dri_format;
unsigned dri_use = 0; unsigned dri_use = 0;
/* Callers of this may specify a modifier, or a dri usage, but not both. The
* newer modifier interface deprecates the older usage flags.
*/
assert(!(usage && count));
format = gbm_core.v0.format_canonicalize(format); format = gbm_core.v0.format_canonicalize(format);
if (usage & GBM_BO_USE_WRITE || dri->image == NULL) if (usage & GBM_BO_USE_WRITE || dri->image == NULL)

View File

@ -1,5 +1,6 @@
gbm_bo_create gbm_bo_create
gbm_bo_create_with_modifiers gbm_bo_create_with_modifiers
gbm_bo_create_with_modifiers2
gbm_bo_destroy gbm_bo_destroy
gbm_bo_get_bpp gbm_bo_get_bpp
gbm_bo_get_device gbm_bo_get_device
@ -30,6 +31,7 @@ gbm_device_is_format_supported
gbm_format_get_name gbm_format_get_name
gbm_surface_create gbm_surface_create
gbm_surface_create_with_modifiers gbm_surface_create_with_modifiers
gbm_surface_create_with_modifiers2
gbm_surface_destroy gbm_surface_destroy
gbm_surface_has_free_buffers gbm_surface_has_free_buffers
gbm_surface_lock_front_buffer gbm_surface_lock_front_buffer

View File

@ -496,6 +496,18 @@ gbm_bo_create_with_modifiers(struct gbm_device *gbm,
uint32_t format, uint32_t format,
const uint64_t *modifiers, const uint64_t *modifiers,
const unsigned int count) const unsigned int count)
{
return gbm_bo_create_with_modifiers2(gbm, width, height, format, modifiers,
count, 0);
}
GBM_EXPORT struct gbm_bo *
gbm_bo_create_with_modifiers2(struct gbm_device *gbm,
uint32_t width, uint32_t height,
uint32_t format,
const uint64_t *modifiers,
const unsigned int count,
uint32_t flags)
{ {
if (width == 0 || height == 0) { if (width == 0 || height == 0) {
errno = EINVAL; errno = EINVAL;
@ -507,7 +519,12 @@ gbm_bo_create_with_modifiers(struct gbm_device *gbm,
return NULL; return NULL;
} }
return gbm->v0.bo_create(gbm, width, height, format, 0, modifiers, count); if (modifiers && (flags & GBM_BO_USE_LINEAR)) {
errno = EINVAL;
return NULL;
}
return gbm->v0.bo_create(gbm, width, height, format, flags, modifiers, count);
} }
/** /**
@ -630,13 +647,30 @@ gbm_surface_create_with_modifiers(struct gbm_device *gbm,
uint32_t format, uint32_t format,
const uint64_t *modifiers, const uint64_t *modifiers,
const unsigned int count) const unsigned int count)
{
return gbm_surface_create_with_modifiers2(gbm, width, height, format,
modifiers, count, 0);
}
GBM_EXPORT struct gbm_surface *
gbm_surface_create_with_modifiers2(struct gbm_device *gbm,
uint32_t width, uint32_t height,
uint32_t format,
const uint64_t *modifiers,
const unsigned int count,
uint32_t flags)
{ {
if ((count && !modifiers) || (modifiers && !count)) { if ((count && !modifiers) || (modifiers && !count)) {
errno = EINVAL; errno = EINVAL;
return NULL; return NULL;
} }
return gbm->v0.surface_create(gbm, width, height, format, 0, if (modifiers && (flags & GBM_BO_USE_LINEAR)) {
errno = EINVAL;
return NULL;
}
return gbm->v0.surface_create(gbm, width, height, format, flags,
modifiers, count); modifiers, count);
} }

View File

@ -281,6 +281,15 @@ gbm_bo_create_with_modifiers(struct gbm_device *gbm,
uint32_t format, uint32_t format,
const uint64_t *modifiers, const uint64_t *modifiers,
const unsigned int count); const unsigned int count);
struct gbm_bo *
gbm_bo_create_with_modifiers2(struct gbm_device *gbm,
uint32_t width, uint32_t height,
uint32_t format,
const uint64_t *modifiers,
const unsigned int count,
uint32_t flags);
#define GBM_BO_IMPORT_WL_BUFFER 0x5501 #define GBM_BO_IMPORT_WL_BUFFER 0x5501
#define GBM_BO_IMPORT_EGL_IMAGE 0x5502 #define GBM_BO_IMPORT_EGL_IMAGE 0x5502
#define GBM_BO_IMPORT_FD 0x5503 #define GBM_BO_IMPORT_FD 0x5503
@ -413,6 +422,14 @@ gbm_surface_create_with_modifiers(struct gbm_device *gbm,
const uint64_t *modifiers, const uint64_t *modifiers,
const unsigned int count); const unsigned int count);
struct gbm_surface *
gbm_surface_create_with_modifiers2(struct gbm_device *gbm,
uint32_t width, uint32_t height,
uint32_t format,
const uint64_t *modifiers,
const unsigned int count,
uint32_t flags);
struct gbm_bo * struct gbm_bo *
gbm_surface_lock_front_buffer(struct gbm_surface *surface); gbm_surface_lock_front_buffer(struct gbm_surface *surface);