pixel-formats: Add internal-only format flag

Add a new hide_from_clients flag which, if set, specifies that the
format is only for internal information and processing, and should not
be advertised for clients.

This will be used for formats like R8 and GR88, which are not useful for
client buffers, but are used internally to implement YUV -> RGB
conversion.

Signed-off-by: Daniel Stone <daniels@collabora.com>
dev
Daniel Stone 3 years ago committed by Pekka Paalanen
parent 32ee42d261
commit 1db2fbef61
  1. 4
      libweston/compositor.c
  2. 4
      libweston/pixel-formats.h
  3. 5
      libweston/renderer-gl/gl-renderer.c

@ -2439,7 +2439,7 @@ weston_buffer_from_resource(struct weston_compositor *ec,
pixel_format_get_info_shm(wl_shm_buffer_get_format(shm)); pixel_format_get_info_shm(wl_shm_buffer_get_format(shm));
buffer->format_modifier = DRM_FORMAT_MOD_LINEAR; buffer->format_modifier = DRM_FORMAT_MOD_LINEAR;
if (!buffer->pixel_format) if (!buffer->pixel_format || buffer->pixel_format->hide_from_clients)
goto fail; goto fail;
} else if ((dmabuf = linux_dmabuf_buffer_get(buffer->resource))) { } else if ((dmabuf = linux_dmabuf_buffer_get(buffer->resource))) {
buffer->type = WESTON_BUFFER_DMABUF; buffer->type = WESTON_BUFFER_DMABUF;
@ -2451,7 +2451,7 @@ weston_buffer_from_resource(struct weston_compositor *ec,
pixel_format_get_info(dmabuf->attributes.format); pixel_format_get_info(dmabuf->attributes.format);
/* dmabuf import should assure we don't create a buffer with an /* dmabuf import should assure we don't create a buffer with an
* unknown format */ * unknown format */
assert(buffer->pixel_format); assert(buffer->pixel_format && !buffer->pixel_format->hide_from_clients);
buffer->format_modifier = dmabuf->attributes.modifier[0]; buffer->format_modifier = dmabuf->attributes.modifier[0];
if (dmabuf->attributes.flags & ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_Y_INVERT) if (dmabuf->attributes.flags & ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_Y_INVERT)
buffer->buffer_origin = ORIGIN_BOTTOM_LEFT; buffer->buffer_origin = ORIGIN_BOTTOM_LEFT;

@ -42,6 +42,10 @@ struct pixel_format_info {
/** The DRM format name without the DRM_FORMAT_ prefix. */ /** The DRM format name without the DRM_FORMAT_ prefix. */
const char *drm_format_name; const char *drm_format_name;
/** If true, is only for internal use and should not be advertised to
* clients to allow them to create buffers of this format. */
bool hide_from_clients;
/** If non-zero, number of planes in base (non-modified) format. */ /** If non-zero, number of planes in base (non-modified) format. */
int num_planes; int num_planes;

@ -2796,7 +2796,10 @@ populate_supported_formats(struct weston_compositor *ec,
return 0; return 0;
for (i = 0; i < num_formats; i++) { for (i = 0; i < num_formats; i++) {
if (!pixel_format_get_info(formats[i])) const struct pixel_format_info *info =
pixel_format_get_info(formats[i]);
if (!info || info->hide_from_clients)
continue; continue;
fmt = weston_drm_format_array_add_format(supported_formats, fmt = weston_drm_format_array_add_format(supported_formats,

Loading…
Cancel
Save