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>
This commit is contained in:
committed by
Pekka Paalanen
parent
b766dbe3ac
commit
8ba775d96d
@@ -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
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user