[Mesa-dev] [PATCH 5/6] dri3: Add DRI3 support to GLX, DRI common and Intel driver

2013-11-04 Thread Ian Romanick
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

On 11/03/2013 02:35 PM, Keith Packard wrote:
> Kristian H?gsberg  writes:
> 
>> I sent a reply to the sourceforge addresses in the original
>> emails, but I didn't see it show up in the archives.  Trying
>> again with the freedesktop addresses.
> 
> (sorry for having an ancient shell script with sourceforge
> addresses in it)
> 
>>> +typedef uint32_t * +(*__DRIdri3Stamp)(__DRIdrawable
>>> *drawable);
>> 
>> This looks OK, as long as it's not tied into the xcb
>> special_event semantics.  From the way it's used, it looks like a
>> loader can just increment this uint32_t when it needs to
>> invalidate the buffer.  Still seems like an odd API - a
>> invalidate function would be simpler, but I'm guessing it's
>> limited by what you can do if you receive the special event in a
>> different thread.
> 
> Yeah, I definitely do not want a callback function here. The API
> was actually designed from the DRI2 side, not the xcb side as DRI2
> has this uint32_t already sitting there that just needed poking.
> 
>> With those changes, we can reuse __DRIimage for DRI3 which makes
>> a lot of sense.  The GBM and Wayland backends already use
>> __DRIimage for color buffers, but convert them to __DRI2buffer to
>> be able to pass them into the DRI driver.  Being able to pass a
>> __DRIimage into the driver in getBuffers will simplify those
>> backends, and it should be fairly simple to port them to the dri3
>> driver interface.
> 
> Ok, so the first step would be to convert drivers from __DRI2buffer
> to __DRIimage, at which point it should be trivial to use
> __DRIimage to support DRI3? Or should I just take my existing
> __DRI3buffer code and change that into a __DRIimage API and leave
> the __DRI2buffer code around in the driver to support DRI2?

I'd be in favor of the latter.

> I'm game for either approach, but fixing the drivers to export a
> single API that can support all of the window systems sure seems
> like a better long-term plan...

I'm not sure how we'd do that and maintain functionality between new
libGL and old drivers (and vice versa).

> ___ mesa-dev mailing
> list mesa-dev at lists.freedesktop.org 
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev

-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.13 (GNU/Linux)

iEYEARECAAYFAlJ4Cu4ACgkQX1gOwKyEAw/F0ACfUI2NyxLo4t7LLxaiGsdv6QBD
L48AnRfc347ZTiJmzhwvpdh+0Dd3sv0D
=r+Kz
-END PGP SIGNATURE-


[PATCH 5/6] dri3: Add DRI3 support to GLX, DRI common and Intel driver

2013-11-03 Thread Keith Packard
Kristian H?gsberg  writes:

> I sent a reply to the sourceforge addresses in the original emails,
> but I didn't see it show up in the archives.  Trying again with the
> freedesktop addresses.

(sorry for having an ancient shell script with sourceforge addresses in
it)

>> +typedef uint32_t *
>> +(*__DRIdri3Stamp)(__DRIdrawable *drawable);
>
> This looks OK, as long as it's not tied into the xcb special_event
> semantics.  From the way it's used, it looks like a loader can just
> increment this uint32_t when it needs to invalidate the buffer.  Still
> seems like an odd API - a invalidate function would be simpler, but
> I'm guessing it's limited by what you can do if you receive the
> special event in a different thread.

Yeah, I definitely do not want a callback function here. The API was
actually designed from the DRI2 side, not the xcb side as DRI2 has this
uint32_t already sitting there that just needed poking.

> With those changes, we can reuse __DRIimage for DRI3 which makes a lot
> of sense.  The GBM and Wayland backends already use __DRIimage for
> color buffers, but convert them to __DRI2buffer to be able to pass
> them into the DRI driver.  Being able to pass a __DRIimage into the
> driver in getBuffers will simplify those backends, and it should be
> fairly simple to port them to the dri3 driver interface.

Ok, so the first step would be to convert drivers from __DRI2buffer to
__DRIimage, at which point it should be trivial to use __DRIimage to
support DRI3? Or should I just take my existing __DRI3buffer code and
change that into a __DRIimage API and leave the __DRI2buffer code around
in the driver to support DRI2?

I'm game for either approach, but fixing the drivers to export a single
API that can support all of the window systems sure seems like a better
long-term plan...

-- 
keith.packard at intel.com
-- next part --
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 827 bytes
Desc: not available
URL: 



[PATCH 5/6] dri3: Add DRI3 support to GLX, DRI common and Intel driver

2013-11-01 Thread Kristian Høgsberg
I sent a reply to the sourceforge addresses in the original emails,
but I didn't see it show up in the archives.  Trying again with the
freedesktop addresses.

On Thu, Oct 31, 2013 at 04:13:15PM -0700, Keith Packard wrote:
> This hooks DRI3 support into the GLX layer, the DRI common layer and the Intel
> driver.
> 
> Signed-off-by: Keith Packard 
> ---
>  configure.ac  |   10 +-
>  include/GL/internal/dri_interface.h   |  158 +++
>  src/glx/Makefile.am   |2 +
>  src/glx/dri3_common.c |  146 +++
>  src/glx/dri3_glx.c| 1539 
> +
>  src/glx/dri3_priv.h   |  128 ++
>  src/glx/glxclient.h   |2 +
>  src/glx/glxext.c  |6 +-
>  src/mesa/drivers/dri/common/dri_util.c|  163 ++-
>  src/mesa/drivers/dri/common/dri_util.h|   23 +
>  src/mesa/drivers/dri/i915/intel_context.c |  109 +-
>  src/mesa/drivers/dri/i915/intel_mipmap_tree.c |   33 +
>  src/mesa/drivers/dri/i915/intel_mipmap_tree.h |8 +
>  src/mesa/drivers/dri/i965/brw_context.c   |  110 +-
>  src/mesa/drivers/dri/i965/intel_mipmap_tree.c |   61 +
>  src/mesa/drivers/dri/i965/intel_mipmap_tree.h |8 +
>  src/mesa/drivers/dri/i965/intel_screen.c  |  107 +-
>  17 files changed, 2594 insertions(+), 19 deletions(-)
>  create mode 100644 src/glx/dri3_common.c
>  create mode 100644 src/glx/dri3_glx.c
>  create mode 100644 src/glx/dri3_priv.h
> 
> diff --git a/configure.ac b/configure.ac
> index f94c9b9..b6158d9 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -38,6 +38,8 @@ LIBDRM_NVVIEUX_REQUIRED=2.4.33
>  LIBDRM_NOUVEAU_REQUIRED="2.4.33 libdrm >= 2.4.41"
>  LIBDRM_FREEDRENO_REQUIRED=2.4.39
>  DRI2PROTO_REQUIRED=2.6
> +DRI3PROTO_REQUIRED=1.0
> +LIBUDEV_REQUIRED=151
>  GLPROTO_REQUIRED=1.4.14
>  LIBDRM_XORG_REQUIRED=2.4.24
>  LIBKMS_XORG_REQUIRED=1.0.0
> @@ -820,10 +822,12 @@ xyesno)
>  fi
>  PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED])
>  GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV libdrm >= $LIBDRM_REQUIRED"
> +PKG_CHECK_MODULES([DRI3PROTO], [dri3proto >= $DRI3PROTO_REQUIRED])
> +PKG_CHECK_MODULES([LIBUDEV], [libudev >= $LIBUDEV_REQUIRED])
>  fi
>  
>  # find the DRI deps for libGL
> -dri_modules="x11 xext xdamage xfixes x11-xcb xcb-glx >= 1.8.1 xcb-dri2 
> >= 1.8"
> +dri_modules="x11 xext xdamage xfixes x11-xcb xcb-glx >= 1.8.1 xcb-dri2 
> >= 1.8 xcb-dri3 xcb-sync xshmfence"
>  
>  # add xf86vidmode if available
>  PKG_CHECK_MODULES([XF86VIDMODE], [xxf86vm], HAVE_XF86VIDMODE=yes, 
> HAVE_XF86VIDMODE=no)
> @@ -833,8 +837,8 @@ xyesno)
>  
>  PKG_CHECK_MODULES([DRIGL], [$dri_modules])
>  GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV $dri_modules"
> -X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS"
> -GL_LIB_DEPS="$DRIGL_LIBS"
> +X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS $LIBUDEV_CFLAGS"
> +GL_LIB_DEPS="$DRIGL_LIBS $LIBUDEV_LIBS"
>  
>  # need DRM libs, $PTHREAD_LIBS, etc.
>  GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
> diff --git a/include/GL/internal/dri_interface.h 
> b/include/GL/internal/dri_interface.h
> index 48993b9..b06ad8d 100644
> --- a/include/GL/internal/dri_interface.h
> +++ b/include/GL/internal/dri_interface.h
> @@ -86,6 +86,11 @@ typedef struct __DRIdri2LoaderExtensionRec 
> __DRIdri2LoaderExtension;
>  typedef struct __DRI2flushExtensionRec   __DRI2flushExtension;
>  typedef struct __DRI2throttleExtensionRec__DRI2throttleExtension;
>  
> +
> +typedef struct __DRIdri3BufferRec   __DRIdri3Buffer;
> +typedef struct __DRIdri3ExtensionRec__DRIdri3Extension;
> +typedef struct __DRIdri3LoaderExtensionRec  __DRIdri3LoaderExtension;
> +
>  /*@}*/
>  
>  
> @@ -966,6 +971,159 @@ struct __DRIdri2ExtensionRec {
>  
>  
>  /**
> + * DRI3 Loader extension.
> + */
> +
> +#define __DRI3_DRIVER_EXTENSIONS "__dri3DriverExtensions"
> +
> +enum __DRI3bufferType {
> +   __DRI3_BUFFER_BACK = 0,
> +   __DRI3_BUFFER_FRONT = 1
> +};
> +
> +struct __DRIdri3BufferRec {
> +   unsigned int size;
> +   unsigned int pitch;
> +   unsigned int cpp;
> +   unsigned int flags;
> +   unsigned int width, height;
> +   enum __DRI3bufferType buffer_type;
> +   uint32_t pixmap;
> +   uint32_t sync_fence;
> +   int32_t *shm_fence;
> +   void *driverPrivate;
> +};

My main concern with this patch is that I'd like to use __DRIimage for
the color buffers instead of this new __DRIdri3Buffer.  __DRIimage is
an opaque structure which we introduced for EGLImage support.  It
essentially wraps an intel_region, so it's similar to __DRI3buffer,
except it's all opaque.  __DRIimage is essentially *the* color buffer
abstraction in the DRI driver interface now and we're already using it
for color buffers in GBM and Wayland.

The intel version of __DRIimage is defined in intel_regions.h.  It's

[PATCH 5/6] dri3: Add DRI3 support to GLX, DRI common and Intel driver

2013-11-01 Thread Kristian Høgsberg
On Thu, Oct 31, 2013 at 04:13:15PM -0700, Keith Packard wrote:
> This hooks DRI3 support into the GLX layer, the DRI common layer and the Intel
> driver.
> 
> Signed-off-by: Keith Packard 
> ---
>  configure.ac  |   10 +-
>  include/GL/internal/dri_interface.h   |  158 +++
>  src/glx/Makefile.am   |2 +
>  src/glx/dri3_common.c |  146 +++
>  src/glx/dri3_glx.c| 1539 
> +
>  src/glx/dri3_priv.h   |  128 ++
>  src/glx/glxclient.h   |2 +
>  src/glx/glxext.c  |6 +-
>  src/mesa/drivers/dri/common/dri_util.c|  163 ++-
>  src/mesa/drivers/dri/common/dri_util.h|   23 +
>  src/mesa/drivers/dri/i915/intel_context.c |  109 +-
>  src/mesa/drivers/dri/i915/intel_mipmap_tree.c |   33 +
>  src/mesa/drivers/dri/i915/intel_mipmap_tree.h |8 +
>  src/mesa/drivers/dri/i965/brw_context.c   |  110 +-
>  src/mesa/drivers/dri/i965/intel_mipmap_tree.c |   61 +
>  src/mesa/drivers/dri/i965/intel_mipmap_tree.h |8 +
>  src/mesa/drivers/dri/i965/intel_screen.c  |  107 +-
>  17 files changed, 2594 insertions(+), 19 deletions(-)
>  create mode 100644 src/glx/dri3_common.c
>  create mode 100644 src/glx/dri3_glx.c
>  create mode 100644 src/glx/dri3_priv.h
> 
> diff --git a/configure.ac b/configure.ac
> index f94c9b9..b6158d9 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -38,6 +38,8 @@ LIBDRM_NVVIEUX_REQUIRED=2.4.33
>  LIBDRM_NOUVEAU_REQUIRED="2.4.33 libdrm >= 2.4.41"
>  LIBDRM_FREEDRENO_REQUIRED=2.4.39
>  DRI2PROTO_REQUIRED=2.6
> +DRI3PROTO_REQUIRED=1.0
> +LIBUDEV_REQUIRED=151
>  GLPROTO_REQUIRED=1.4.14
>  LIBDRM_XORG_REQUIRED=2.4.24
>  LIBKMS_XORG_REQUIRED=1.0.0
> @@ -820,10 +822,12 @@ xyesno)
>  fi
>  PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED])
>  GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV libdrm >= $LIBDRM_REQUIRED"
> +PKG_CHECK_MODULES([DRI3PROTO], [dri3proto >= $DRI3PROTO_REQUIRED])
> +PKG_CHECK_MODULES([LIBUDEV], [libudev >= $LIBUDEV_REQUIRED])
>  fi
>  
>  # find the DRI deps for libGL
> -dri_modules="x11 xext xdamage xfixes x11-xcb xcb-glx >= 1.8.1 xcb-dri2 
> >= 1.8"
> +dri_modules="x11 xext xdamage xfixes x11-xcb xcb-glx >= 1.8.1 xcb-dri2 
> >= 1.8 xcb-dri3 xcb-sync xshmfence"
>  
>  # add xf86vidmode if available
>  PKG_CHECK_MODULES([XF86VIDMODE], [xxf86vm], HAVE_XF86VIDMODE=yes, 
> HAVE_XF86VIDMODE=no)
> @@ -833,8 +837,8 @@ xyesno)
>  
>  PKG_CHECK_MODULES([DRIGL], [$dri_modules])
>  GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV $dri_modules"
> -X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS"
> -GL_LIB_DEPS="$DRIGL_LIBS"
> +X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS $LIBUDEV_CFLAGS"
> +GL_LIB_DEPS="$DRIGL_LIBS $LIBUDEV_LIBS"
>  
>  # need DRM libs, $PTHREAD_LIBS, etc.
>  GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
> diff --git a/include/GL/internal/dri_interface.h 
> b/include/GL/internal/dri_interface.h
> index 48993b9..b06ad8d 100644
> --- a/include/GL/internal/dri_interface.h
> +++ b/include/GL/internal/dri_interface.h
> @@ -86,6 +86,11 @@ typedef struct __DRIdri2LoaderExtensionRec 
> __DRIdri2LoaderExtension;
>  typedef struct __DRI2flushExtensionRec   __DRI2flushExtension;
>  typedef struct __DRI2throttleExtensionRec__DRI2throttleExtension;
>  
> +
> +typedef struct __DRIdri3BufferRec   __DRIdri3Buffer;
> +typedef struct __DRIdri3ExtensionRec__DRIdri3Extension;
> +typedef struct __DRIdri3LoaderExtensionRec  __DRIdri3LoaderExtension;
> +
>  /*@}*/
>  
>  
> @@ -966,6 +971,159 @@ struct __DRIdri2ExtensionRec {
>  
>  
>  /**
> + * DRI3 Loader extension.
> + */
> +
> +#define __DRI3_DRIVER_EXTENSIONS "__dri3DriverExtensions"
> +
> +enum __DRI3bufferType {
> +   __DRI3_BUFFER_BACK = 0,
> +   __DRI3_BUFFER_FRONT = 1
> +};
> +
> +struct __DRIdri3BufferRec {
> +   unsigned int size;
> +   unsigned int pitch;
> +   unsigned int cpp;
> +   unsigned int flags;
> +   unsigned int width, height;
> +   enum __DRI3bufferType buffer_type;
> +   uint32_t pixmap;
> +   uint32_t sync_fence;
> +   int32_t *shm_fence;
> +   void *driverPrivate;
> +};

My main concern with this patch is that I'd like to use __DRIimage for
the color buffers instead of this new __DRIdri3Buffer.  __DRIimage is
an opaque structure which we introduced for EGLImage support.  It
essentially wraps an intel_region, so it's similar to __DRI3buffer,
except it's all opaque.  __DRIimage is essentially *the* color buffer
abstraction in the DRI driver interface now and we're already using it
for color buffers in GBM and Wayland.  Using __DRIimage will make
those backends and this patch simpler.

The intel version of __DRIimage is defined in intel_regions.h.  It's
more complicated than __DRIdri3Buffer since it supports planar
buffers, but at the end of the 

[PATCH 5/6] dri3: Add DRI3 support to GLX, DRI common and Intel driver

2013-10-31 Thread Keith Packard
This hooks DRI3 support into the GLX layer, the DRI common layer and the Intel
driver.

Signed-off-by: Keith Packard 
---
 configure.ac  |   10 +-
 include/GL/internal/dri_interface.h   |  158 +++
 src/glx/Makefile.am   |2 +
 src/glx/dri3_common.c |  146 +++
 src/glx/dri3_glx.c| 1539 +
 src/glx/dri3_priv.h   |  128 ++
 src/glx/glxclient.h   |2 +
 src/glx/glxext.c  |6 +-
 src/mesa/drivers/dri/common/dri_util.c|  163 ++-
 src/mesa/drivers/dri/common/dri_util.h|   23 +
 src/mesa/drivers/dri/i915/intel_context.c |  109 +-
 src/mesa/drivers/dri/i915/intel_mipmap_tree.c |   33 +
 src/mesa/drivers/dri/i915/intel_mipmap_tree.h |8 +
 src/mesa/drivers/dri/i965/brw_context.c   |  110 +-
 src/mesa/drivers/dri/i965/intel_mipmap_tree.c |   61 +
 src/mesa/drivers/dri/i965/intel_mipmap_tree.h |8 +
 src/mesa/drivers/dri/i965/intel_screen.c  |  107 +-
 17 files changed, 2594 insertions(+), 19 deletions(-)
 create mode 100644 src/glx/dri3_common.c
 create mode 100644 src/glx/dri3_glx.c
 create mode 100644 src/glx/dri3_priv.h

diff --git a/configure.ac b/configure.ac
index f94c9b9..b6158d9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -38,6 +38,8 @@ LIBDRM_NVVIEUX_REQUIRED=2.4.33
 LIBDRM_NOUVEAU_REQUIRED="2.4.33 libdrm >= 2.4.41"
 LIBDRM_FREEDRENO_REQUIRED=2.4.39
 DRI2PROTO_REQUIRED=2.6
+DRI3PROTO_REQUIRED=1.0
+LIBUDEV_REQUIRED=151
 GLPROTO_REQUIRED=1.4.14
 LIBDRM_XORG_REQUIRED=2.4.24
 LIBKMS_XORG_REQUIRED=1.0.0
@@ -820,10 +822,12 @@ xyesno)
 fi
 PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED])
 GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV libdrm >= $LIBDRM_REQUIRED"
+PKG_CHECK_MODULES([DRI3PROTO], [dri3proto >= $DRI3PROTO_REQUIRED])
+PKG_CHECK_MODULES([LIBUDEV], [libudev >= $LIBUDEV_REQUIRED])
 fi

 # find the DRI deps for libGL
-dri_modules="x11 xext xdamage xfixes x11-xcb xcb-glx >= 1.8.1 xcb-dri2 >= 
1.8"
+dri_modules="x11 xext xdamage xfixes x11-xcb xcb-glx >= 1.8.1 xcb-dri2 >= 
1.8 xcb-dri3 xcb-sync xshmfence"

 # add xf86vidmode if available
 PKG_CHECK_MODULES([XF86VIDMODE], [xxf86vm], HAVE_XF86VIDMODE=yes, 
HAVE_XF86VIDMODE=no)
@@ -833,8 +837,8 @@ xyesno)

 PKG_CHECK_MODULES([DRIGL], [$dri_modules])
 GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV $dri_modules"
-X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS"
-GL_LIB_DEPS="$DRIGL_LIBS"
+X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS $LIBUDEV_CFLAGS"
+GL_LIB_DEPS="$DRIGL_LIBS $LIBUDEV_LIBS"

 # need DRM libs, $PTHREAD_LIBS, etc.
 GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
diff --git a/include/GL/internal/dri_interface.h 
b/include/GL/internal/dri_interface.h
index 48993b9..b06ad8d 100644
--- a/include/GL/internal/dri_interface.h
+++ b/include/GL/internal/dri_interface.h
@@ -86,6 +86,11 @@ typedef struct __DRIdri2LoaderExtensionRec   
__DRIdri2LoaderExtension;
 typedef struct __DRI2flushExtensionRec __DRI2flushExtension;
 typedef struct __DRI2throttleExtensionRec  __DRI2throttleExtension;

+
+typedef struct __DRIdri3BufferRec   __DRIdri3Buffer;
+typedef struct __DRIdri3ExtensionRec__DRIdri3Extension;
+typedef struct __DRIdri3LoaderExtensionRec  __DRIdri3LoaderExtension;
+
 /*@}*/


@@ -966,6 +971,159 @@ struct __DRIdri2ExtensionRec {


 /**
+ * DRI3 Loader extension.
+ */
+
+#define __DRI3_DRIVER_EXTENSIONS "__dri3DriverExtensions"
+
+enum __DRI3bufferType {
+   __DRI3_BUFFER_BACK = 0,
+   __DRI3_BUFFER_FRONT = 1
+};
+
+struct __DRIdri3BufferRec {
+   unsigned int size;
+   unsigned int pitch;
+   unsigned int cpp;
+   unsigned int flags;
+   unsigned int width, height;
+   enum __DRI3bufferType buffer_type;
+   uint32_t pixmap;
+   uint32_t sync_fence;
+   int32_t *shm_fence;
+   void *driverPrivate;
+};
+
+#define __DRI_DRI3_LOADER "DRI_DRI3Loader"
+#define __DRI_DRI3_LOADER_VERSION 1
+
+struct __DRIdri3LoaderExtensionRec {
+__DRIextension base;
+
+   int (*getBuffers)(__DRIdrawable *driDrawable,
+ int *width, int *height,
+ unsigned int format,
+ void *loaderPrivate,
+ int need_front,
+ int need_back,
+ __DRIdri3Buffer **front,
+ __DRIdri3Buffer **back);
+
+/**
+ * Flush pending front-buffer rendering
+ *
+ * Any rendering that has been performed to the
+ * \c __DRI3_BUFFER_FAKE_FRONT_LEFT will be flushed to the
+ * \c __DRI3_BUFFER_FRONT_LEFT.
+ *
+ * \param driDrawableDrawable whose front-buffer is to be flushed
+ * \param loaderPrivate  Loader's private data that was previously passed
+ *   into __DRIdri2ExtensionRec::createNewDrawable
+ */
+void