backend-drm: use format db for fallback too

Replace one more open-coded pixel format translation map with a call to our
central pixel format database, reducing duplication of format information.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
dev
Pekka Paalanen 5 years ago committed by Pekka Paalanen
parent b766dbe3ac
commit 8ba775d96d
  1. 13
      libweston/backend-drm/drm.c
  2. 13
      libweston/pixel-formats.c
  3. 17
      libweston/pixel-formats.h

@ -723,14 +723,13 @@ create_gbm_device(int fd)
static int static int
fallback_format_for(uint32_t format) fallback_format_for(uint32_t format)
{ {
switch (format) { const struct pixel_format_info *pf;
case GBM_FORMAT_XRGB8888:
return GBM_FORMAT_ARGB8888; pf = pixel_format_get_info_by_opaque_substitute(format);
case GBM_FORMAT_XRGB2101010: if (!pf)
return GBM_FORMAT_ARGB2101010;
default:
return 0; return 0;
}
return pf->format;
} }
static int static int

@ -436,6 +436,19 @@ pixel_format_get_opaque_substitute(const struct pixel_format_info *info)
return pixel_format_get_info(info->opaque_substitute); return pixel_format_get_info(info->opaque_substitute);
} }
WL_EXPORT const struct pixel_format_info *
pixel_format_get_info_by_opaque_substitute(uint32_t format)
{
unsigned int i;
for (i = 0; i < ARRAY_LENGTH(pixel_format_table); i++) {
if (pixel_format_table[i].opaque_substitute == format)
return &pixel_format_table[i];
}
return NULL;
}
WL_EXPORT unsigned int WL_EXPORT unsigned int
pixel_format_width_for_plane(const struct pixel_format_info *info, pixel_format_width_for_plane(const struct pixel_format_info *info,
unsigned int plane, unsigned int plane,

@ -191,6 +191,23 @@ pixel_format_is_opaque(const struct pixel_format_info *format);
const struct pixel_format_info * const struct pixel_format_info *
pixel_format_get_opaque_substitute(const struct pixel_format_info *format); pixel_format_get_opaque_substitute(const struct pixel_format_info *format);
/**
* For an opaque format, get the equivalent format with alpha instead of an
* ignored channel
*
* This is the opposite lookup from pixel_format_get_opaque_substitute().
* Finds the format whose opaque substitute is the given format.
*
* If the input format is not opaque or does not have ignored (X) bits, then
* the search cannot find a match.
*
* @param format DRM format code to search for
* @returns A pixel format info structure for the pixel format whose opaque
* substitute is the argument, or NULL if no match.
*/
const struct pixel_format_info *
pixel_format_get_info_by_opaque_substitute(uint32_t format);
/** /**
* Return the effective sampling width for a given plane * Return the effective sampling width for a given plane
* *

Loading…
Cancel
Save