[Mesa-dev] [PATCH 06/11] gbm: Check harder for supported formats
Lucas Stach
l.stach at pengutronix.de
Wed Jun 28 15:05:07 UTC 2017
Am Freitag, den 16.06.2017, 18:14 +0100 schrieb Daniel Stone:
> Luckily no-one really used the is_format_supported() call, because it
> only supported three formats.
>
> Also, since buffers with alpha can be displayed on planes, stop banning
> them from use.
>
> Signed-off-by: Daniel Stone <daniels at collabora.com>
> ---
> src/gbm/backends/dri/gbm_dri.c | 40 ++++++++++++++++++++++++++++++++--------
> 1 file changed, 32 insertions(+), 8 deletions(-)
>
> diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c
> index 3cdd7d505c..4ed780cdeb 100644
> --- a/src/gbm/backends/dri/gbm_dri.c
> +++ b/src/gbm/backends/dri/gbm_dri.c
> @@ -592,29 +592,53 @@ gbm_dri_to_gbm_format(int dri_format)
> return 0;
> }
>
> -
> static int
> gbm_dri_is_format_supported(struct gbm_device *gbm,
> uint32_t format,
> uint32_t usage)
> {
> + struct gbm_dri_device *dri = gbm_dri_device(gbm);
> + int count;
> +
> + /* Remap from GBM_BO_FORMAT_* to GBM_FORMAT_*. Luckily there are only two of
> + * these. */
> switch (format) {
> case GBM_BO_FORMAT_XRGB8888:
> - case GBM_FORMAT_XBGR8888:
> - case GBM_FORMAT_XRGB8888:
> + format = GBM_FORMAT_XRGB8888;
> break;
> case GBM_BO_FORMAT_ARGB8888:
> - case GBM_FORMAT_ARGB8888:
> - if (usage & GBM_BO_USE_SCANOUT)
> - return 0;
> + format = GBM_FORMAT_ARGB8888;
> break;
> default:
> + break;
> + }
If we keep the backward compatibility in the previous patch, this
remapping can be dropped completely.
Regards,
Lucas
> +
> + if ((usage & GBM_BO_USE_CURSOR) && (usage & GBM_BO_USE_RENDERING)
> return 0;
> +
> + if (gbm_format_to_dri_format(format) == 0)
> + return 0;
> +
> + /* If there is no query, fall back to the small table which was originally
> + * here. */
> + if (dri->image->base.version <= 15 || !dri->image->queryDmaBufModifiers) {
> + switch (format) {
> + case GBM_FORMAT_XRGB8888:
> + case GBM_FORMAT_ARGB8888:
> + case GBM_FORMAT_XBGR8888:
> + return 1;
> + default:
> + return 0;
> + }
> }
>
> - if (usage & GBM_BO_USE_CURSOR &&
> - usage & GBM_BO_USE_RENDERING)
> + /* Check if the driver returns any modifiers for this format; since linear
> + * is counted as a modifier, we will have at least one modifier for any
> + * supported format. */
> + if (!dri->image->queryDmaBufModifiers(dri->screen, format, 0, NULL, NULL,
> + &count) || count == 0) {
> return 0;
> + }
>
> return 1;
> }
More information about the mesa-dev
mailing list