Am Freitag, den 16.06.2017, 18:14 +0100 schrieb Daniel Stone: > Rather than duplicated (yet asymmetric) open-coded tables, pull them out > to a common structure. > > Signed-off-by: Daniel Stone <dani...@collabora.com> > --- > src/gbm/Makefile.am | 1 + > src/gbm/backends/dri/gbm_dri.c | 105 > ++++++++++++++++++----------------------- > 2 files changed, 46 insertions(+), 60 deletions(-) > > diff --git a/src/gbm/Makefile.am b/src/gbm/Makefile.am > index 60b0924506..de8396000b 100644 > --- a/src/gbm/Makefile.am > +++ b/src/gbm/Makefile.am > @@ -5,6 +5,7 @@ pkgconfig_DATA = main/gbm.pc > > AM_CFLAGS = \ > -I$(top_srcdir)/include \ > + -I$(top_srcdir)/src \ > -I$(top_srcdir)/src/loader \ > -I$(top_srcdir)/src/gbm/main \ > $(DLOPEN_CFLAGS) \ > diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c > index 84f37d4cf5..3cdd7d505c 100644 > --- a/src/gbm/backends/dri/gbm_dri.c > +++ b/src/gbm/backends/dri/gbm_dri.c > @@ -48,6 +48,7 @@ > > #include "gbmint.h" > #include "loader.h" > +#include "util/macros.h" > > /* For importing wl_buffer */ > #if HAVE_WAYLAND_PLATFORM > @@ -550,6 +551,48 @@ dri_screen_create_sw(struct gbm_dri_device *dri) > return dri_screen_create_swrast(dri); > } > > +static const struct { > + uint32_t gbm_format; > + int dri_image_format; > +} gbm_to_dri_image_formats[] = { > + { GBM_FORMAT_R8, __DRI_IMAGE_FORMAT_R8 }, > + { GBM_FORMAT_GR88, __DRI_IMAGE_FORMAT_GR88 }, > + { GBM_FORMAT_RGB565, __DRI_IMAGE_FORMAT_RGB565 }, > + { GBM_FORMAT_XRGB8888, __DRI_IMAGE_FORMAT_XRGB8888 }, > + { GBM_FORMAT_ARGB8888, __DRI_IMAGE_FORMAT_ARGB8888 }, > + { GBM_FORMAT_XBGR8888, __DRI_IMAGE_FORMAT_XBGR8888 }, > + { GBM_FORMAT_ABGR8888, __DRI_IMAGE_FORMAT_ABGR8888 }, > + { GBM_FORMAT_XRGB2101010, __DRI_IMAGE_FORMAT_XRGB2101010 }, > + { GBM_FORMAT_ARGB2101010, __DRI_IMAGE_FORMAT_ARGB2101010 }, > +};
This drops the GBM_BO_FORMAT_XRGB8888 and GBM_BO_FORMAT_ARGB8888 handling present in the gbm_dri_bo_import() conversion function. I'm not sure if/how this is still in-use, but I would prefer to keep those for the sake of backwards compatibility. Regards, Lucas > + > +static int > +gbm_format_to_dri_format(uint32_t gbm_format) > +{ > + int i; > + > + for (i = 0; i < ARRAY_SIZE(gbm_to_dri_image_formats); i++) { > + if (gbm_to_dri_image_formats[i].gbm_format == gbm_format) > + return gbm_to_dri_image_formats[i].dri_image_format; > + } > + > + return 0; > +} > + > +static uint32_t > +gbm_dri_to_gbm_format(int dri_format) > +{ > + int i; > + > + for (i = 0; i < ARRAY_SIZE(gbm_to_dri_image_formats); i++) { > + if (gbm_to_dri_image_formats[i].dri_image_format == dri_format) > + return gbm_to_dri_image_formats[i].gbm_format; > + } > + > + return 0; > +} > + > + > static int > gbm_dri_is_format_supported(struct gbm_device *gbm, > uint32_t format, > @@ -795,35 +838,6 @@ gbm_dri_bo_destroy(struct gbm_bo *_bo) > free(bo); > } > > -static uint32_t > -gbm_dri_to_gbm_format(uint32_t dri_format) > -{ > - uint32_t ret = 0; > - > - switch (dri_format) { > - case __DRI_IMAGE_FORMAT_RGB565: > - ret = GBM_FORMAT_RGB565; > - break; > - case __DRI_IMAGE_FORMAT_XRGB8888: > - ret = GBM_FORMAT_XRGB8888; > - break; > - case __DRI_IMAGE_FORMAT_ARGB8888: > - ret = GBM_FORMAT_ARGB8888; > - break; > - case __DRI_IMAGE_FORMAT_XBGR8888: > - ret = GBM_FORMAT_XBGR8888; > - break; > - case __DRI_IMAGE_FORMAT_ABGR8888: > - ret = GBM_FORMAT_ABGR8888; > - break; > - default: > - ret = 0; > - break; > - } > - > - return ret; > -} > - > static struct gbm_bo * > gbm_dri_bo_import(struct gbm_device *gbm, > uint32_t type, void *buffer, uint32_t usage) > @@ -1126,37 +1140,8 @@ gbm_dri_bo_create(struct gbm_device *gbm, > bo->base.height = height; > bo->base.format = format; > > - switch (format) { > - case GBM_FORMAT_R8: > - dri_format = __DRI_IMAGE_FORMAT_R8; > - break; > - case GBM_FORMAT_GR88: > - dri_format = __DRI_IMAGE_FORMAT_GR88; > - break; > - case GBM_FORMAT_RGB565: > - dri_format = __DRI_IMAGE_FORMAT_RGB565; > - break; > - case GBM_FORMAT_XRGB8888: > - case GBM_BO_FORMAT_XRGB8888: > - dri_format = __DRI_IMAGE_FORMAT_XRGB8888; > - break; > - case GBM_FORMAT_ARGB8888: > - case GBM_BO_FORMAT_ARGB8888: > - dri_format = __DRI_IMAGE_FORMAT_ARGB8888; > - break; > - case GBM_FORMAT_ABGR8888: > - dri_format = __DRI_IMAGE_FORMAT_ABGR8888; > - break; > - case GBM_FORMAT_XBGR8888: > - dri_format = __DRI_IMAGE_FORMAT_XBGR8888; > - break; > - case GBM_FORMAT_ARGB2101010: > - dri_format = __DRI_IMAGE_FORMAT_ARGB2101010; > - break; > - case GBM_FORMAT_XRGB2101010: > - dri_format = __DRI_IMAGE_FORMAT_XRGB2101010; > - break; > - default: > + dri_format = gbm_format_to_dri_format(format); > + if (dri_format == 0) { > errno = EINVAL; > goto failed; > } _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev