+
+uint32_t
+driGLFormatToImageFormat(mesa_format format)
+{
+ switch (format) {
+ case MESA_FORMAT_B5G6R5_UNORM:
+ return __DRI_IMAGE_FORMAT_RGB565;
+ case MESA_FORMAT_B8G8R8X8_UNORM:
+ return __DRI_IMAGE_FORMAT_XRGB8888;
+ case MESA_FORMAT_B10G10R10A2_UNORM:
+ return __DRI_IMAGE_FORMAT_ARGB2101010;
+ case MESA_FORMAT_B10G10R10X2_UNORM:
+ return __DRI_IMAGE_FORMAT_XRGB2101010;
+ case MESA_FORMAT_B8G8R8A8_UNORM:
+ return __DRI_IMAGE_FORMAT_ARGB8888;
+ case MESA_FORMAT_R8G8B8A8_UNORM:
+ return __DRI_IMAGE_FORMAT_ABGR8888;
+ case MESA_FORMAT_R8G8B8X8_UNORM:
+ return __DRI_IMAGE_FORMAT_XBGR8888;
+ case MESA_FORMAT_R_UNORM8:
+ return __DRI_IMAGE_FORMAT_R8;
+ case MESA_FORMAT_R8G8_UNORM:
+ return __DRI_IMAGE_FORMAT_GR88;
+ case MESA_FORMAT_NONE:
+ return __DRI_IMAGE_FORMAT_NONE;
+ case MESA_FORMAT_B8G8R8A8_SRGB:
+ return __DRI_IMAGE_FORMAT_SARGB8;
+ default:
+ return 0;
+ }
+}
+
+mesa_format
+driImageFormatToGLFormat(uint32_t image_format)
+{
+ switch (image_format) {
+ case __DRI_IMAGE_FORMAT_RGB565:
+ return MESA_FORMAT_B5G6R5_UNORM;
+ case __DRI_IMAGE_FORMAT_XRGB8888:
+ return MESA_FORMAT_B8G8R8X8_UNORM;
+ case __DRI_IMAGE_FORMAT_ARGB2101010:
+ return MESA_FORMAT_B10G10R10A2_UNORM;
+ case __DRI_IMAGE_FORMAT_XRGB2101010:
+ return MESA_FORMAT_B10G10R10X2_UNORM;
+ case __DRI_IMAGE_FORMAT_ARGB8888:
+ return MESA_FORMAT_B8G8R8A8_UNORM;
+ case __DRI_IMAGE_FORMAT_ABGR8888:
+ return MESA_FORMAT_R8G8B8A8_UNORM;
+ case __DRI_IMAGE_FORMAT_XBGR8888:
+ return MESA_FORMAT_R8G8B8X8_UNORM;
+ case __DRI_IMAGE_FORMAT_R8:
+ return MESA_FORMAT_R_UNORM8;
+ case __DRI_IMAGE_FORMAT_GR88:
+ return MESA_FORMAT_R8G8_UNORM;
+ case __DRI_IMAGE_FORMAT_SARGB8:
+ return MESA_FORMAT_B8G8R8A8_SRGB;
+ case __DRI_IMAGE_FORMAT_NONE:
+ return MESA_FORMAT_NONE;
+ default:
+ return MESA_FORMAT_NONE;
+ }
+}
+
+/** Image driver interface */
+const __DRIimageDriverExtension driImageDriverExtension = {
+ .base = { __DRI_IMAGE_DRIVER, 1 },
+
+ .createNewScreen2 = driCreateNewScreen2,
+ .createNewDrawable = driCreateNewDrawable,
+ .getAPIMask = driGetAPIMask,
+ .createContextAttribs = driCreateContextAttribs,
+};
+
+/* swrast copy sub buffer entrypoint. */
+static void driCopySubBuffer(__DRIdrawable *pdp, int x, int y,
+ int w, int h)
+{
+ assert(pdp->driScreenPriv->swrast_loader);
+
+ pdp->driScreenPriv->driver->CopySubBuffer(pdp, x, y, w, h);
+}
+
+/* for swrast only */
+const __DRIcopySubBufferExtension driCopySubBufferExtension = {
+ .base = { __DRI_COPY_SUB_BUFFER, 1 },
+
+ .copySubBuffer = driCopySubBuffer,
+};