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 <dani...@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; > } _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev