On Mon, Nov 04, 2013 at 06:23:25PM -0800, Keith Packard wrote: > The __DRI_IMAGE_FORMAT codes are used by the image extension, drivers need to > be able to translate between them. Instead of duplicating this translation in > each driver, create a shared version.
I'll take the bait... before the i915/i965 split, this code was only needed in this one place. All other drivers are gallium drivers which need to convert to galliums enum pipe_format instead of the gl_format enum. Anyway, the code certainly looks more at home in dri_util.c. Reviewed-by: Kristian H?gsberg <krh at bitplanet.net> > Signed-off-by: Keith Packard <keithp at keithp.com> > --- > src/mesa/drivers/dri/common/dri_util.c | 62 > ++++++++++++++++++++++++++++++++++ > src/mesa/drivers/dri/common/dri_util.h | 6 ++++ > 2 files changed, 68 insertions(+) > > diff --git a/src/mesa/drivers/dri/common/dri_util.c > b/src/mesa/drivers/dri/common/dri_util.c > index 95c8b41..76c8ae5 100644 > --- a/src/mesa/drivers/dri/common/dri_util.c > +++ b/src/mesa/drivers/dri/common/dri_util.c > @@ -792,3 +792,65 @@ driUpdateFramebufferSize(struct gl_context *ctx, const > __DRIdrawable *dPriv) > assert(fb->Height == dPriv->h); > } > } > + > +uint32_t > +driGLFormatToImageFormat(gl_format format) > +{ > + switch (format) { > + case MESA_FORMAT_RGB565: > + return __DRI_IMAGE_FORMAT_RGB565; > + case MESA_FORMAT_XRGB8888: > + return __DRI_IMAGE_FORMAT_XRGB8888; > + case MESA_FORMAT_ARGB2101010: > + return __DRI_IMAGE_FORMAT_ARGB2101010; > + case MESA_FORMAT_XRGB2101010_UNORM: > + return __DRI_IMAGE_FORMAT_XRGB2101010; > + case MESA_FORMAT_ARGB8888: > + return __DRI_IMAGE_FORMAT_ARGB8888; > + case MESA_FORMAT_RGBA8888_REV: > + return __DRI_IMAGE_FORMAT_ABGR8888; > + case MESA_FORMAT_RGBX8888_REV: > + return __DRI_IMAGE_FORMAT_XBGR8888; > + case MESA_FORMAT_R8: > + return __DRI_IMAGE_FORMAT_R8; > + case MESA_FORMAT_GR88: > + return __DRI_IMAGE_FORMAT_GR88; > + case MESA_FORMAT_NONE: > + return __DRI_IMAGE_FORMAT_NONE; > + case MESA_FORMAT_SARGB8: > + return __DRI_IMAGE_FORMAT_SARGB8; > + default: > + return 0; > + } > +} > + > +gl_format > +driImageFormatToGLFormat(uint32_t image_format) > +{ > + switch (image_format) { > + case __DRI_IMAGE_FORMAT_RGB565: > + return MESA_FORMAT_RGB565; > + case __DRI_IMAGE_FORMAT_XRGB8888: > + return MESA_FORMAT_XRGB8888; > + case __DRI_IMAGE_FORMAT_ARGB2101010: > + return MESA_FORMAT_ARGB2101010; > + case __DRI_IMAGE_FORMAT_XRGB2101010: > + return MESA_FORMAT_XRGB2101010_UNORM; > + case __DRI_IMAGE_FORMAT_ARGB8888: > + return MESA_FORMAT_ARGB8888; > + case __DRI_IMAGE_FORMAT_ABGR8888: > + return MESA_FORMAT_RGBA8888_REV; > + case __DRI_IMAGE_FORMAT_XBGR8888: > + return MESA_FORMAT_RGBX8888_REV; > + case __DRI_IMAGE_FORMAT_R8: > + return MESA_FORMAT_R8; > + case __DRI_IMAGE_FORMAT_GR88: > + return MESA_FORMAT_GR88; > + case __DRI_IMAGE_FORMAT_SARGB8: > + return MESA_FORMAT_SARGB8; > + case __DRI_IMAGE_FORMAT_NONE: > + return MESA_FORMAT_NONE; > + default: > + return MESA_FORMAT_NONE; > + } > +} > diff --git a/src/mesa/drivers/dri/common/dri_util.h > b/src/mesa/drivers/dri/common/dri_util.h > index 5b56061..fd40769 100644 > --- a/src/mesa/drivers/dri/common/dri_util.h > +++ b/src/mesa/drivers/dri/common/dri_util.h > @@ -271,6 +271,12 @@ struct __DRIdrawableRec { > } dri2; > }; > > +extern uint32_t > +driGLFormatToImageFormat(gl_format format); > + > +extern gl_format > +driImageFormatToGLFormat(uint32_t image_format); > + > extern void > dri2InvalidateDrawable(__DRIdrawable *drawable); > > -- > 1.8.4.2 >