Convert all DRI entrypoints to take pointers to __DRI* types.
authorKristian Høgsberg <krh@hinata.boston.redhat.com>
Fri, 11 May 2007 20:43:20 +0000 (16:43 -0400)
committerKristian Høgsberg <krh@redhat.com>
Wed, 10 Oct 2007 22:00:18 +0000 (18:00 -0400)
The entrypoints take a mix of __DRIscreen * and void * (screen private)
arguments (similarly for contexts and drawables).  This patch does away
with passing the private void pointer and always only passes the fully
typed __DRIscreen pointer and always as the first argument.

This makes the interface more consistent and increases type safety, and
catches a bug where we would pass a screen private to DRIdrawable::getSBC.

include/GL/internal/dri_interface.h
src/glx/x11/glxcmds.c
src/glx/x11/glxext.c
src/mesa/drivers/dri/common/dri_util.c

index 752dd417dcc622c1cba1f340fdd410fdf305dc95..178134270d14626a0a1f5d5ff4c4ef95c5c81a26 100644 (file)
@@ -273,7 +273,7 @@ struct __DRIscreenRec {
     /**
      * Method to destroy the private DRI screen data.
      */
-    void (*destroyScreen)(void *screenPrivate);
+    void (*destroyScreen)(__DRIscreen *screen);
 
     /**
      * Method to create the private DRI drawable data and initialize the
@@ -298,7 +298,7 @@ struct __DRIscreenRec {
      * 
      * \since Internal API version 20030317.
      */
-    int (*getMSC)( void *screenPrivate, int64_t *msc );
+    int (*getMSC)(__DRIscreen *screen, int64_t *msc);
 
     /**
      * Functions associated with MESA_allocate_memory.
@@ -348,7 +348,7 @@ struct __DRIcontextRec {
     /**
      * Method to destroy the private DRI context data.
      */
-    void (*destroyContext)(void *contextPrivate);
+    void (*destroyContext)(__DRIcontext *context);
 
     /**
      * Opaque pointer to private per context direct rendering data.
@@ -362,9 +362,9 @@ struct __DRIcontextRec {
      *
      * \since Internal API version 20050727.
      */
-    GLboolean (*bindContext)(__DRIdrawable *pdraw,
-                            __DRIdrawable *pread,
-                            __DRIcontext *ctx);
+    GLboolean (*bindContext)(__DRIcontext *ctx,
+                            __DRIdrawable *pdraw,
+                            __DRIdrawable *pread);
 
     /**
      * Method to unbind a DRI drawable from a DRI graphics context.
@@ -384,12 +384,12 @@ struct __DRIdrawableRec {
     /**
      * Method to destroy the private DRI drawable data.
      */
-    void (*destroyDrawable)(void *drawablePrivate);
+    void (*destroyDrawable)(__DRIdrawable *drawable);
 
     /**
      * Method to swap the front and back buffers.
      */
-    void (*swapBuffers)(void *drawablePrivate);
+    void (*swapBuffers)(__DRIdrawable *drawable);
 
     /**
      * Opaque pointer to private per drawable direct rendering data.
@@ -403,16 +403,16 @@ struct __DRIdrawableRec {
      *
      * \since Internal API version 20030317.
      */
-    int (*getSBC)(void *drawablePrivate, int64_t *sbc );
+    int (*getSBC)(__DRIdrawable *drawable, int64_t *sbc);
 
     /**
      * Wait for the SBC to be greater than or equal target_sbc.
      *
      * \since Internal API version 20030317.
      */
-    int (*waitForSBC)( void *drawablePriv,
-                      int64_t target_sbc,
-                      int64_t * msc, int64_t * sbc );
+    int (*waitForSBC)(__DRIdrawable *drawable,
+                     int64_t target_sbc,
+                     int64_t * msc, int64_t * sbc);
 
     /**
      * Wait for the MSC to equal target_msc, or, if that has already passed,
@@ -422,9 +422,9 @@ struct __DRIdrawableRec {
      * 
      * \since Internal API version 20030317.
      */
-    int (*waitForMSC)( void *drawablePriv,
-                      int64_t target_msc, int64_t divisor, int64_t remainder,
-                      int64_t * msc, int64_t * sbc );
+    int (*waitForMSC)(__DRIdrawable *drawable,
+                     int64_t target_msc, int64_t divisor, int64_t remainder,
+                     int64_t * msc, int64_t * sbc);
 
     /**
      * Like \c swapBuffers, but does NOT have an implicit \c glFlush.  Once
@@ -435,7 +435,7 @@ struct __DRIdrawableRec {
      * 
      * \since Internal API version 20030317.
      */
-    int64_t (*swapBuffersMSC)(void *drawablePrivate,
+    int64_t (*swapBuffersMSC)(__DRIdrawable *drawable,
                              int64_t target_msc,
                              int64_t divisor, int64_t remainder);
 
@@ -444,16 +444,16 @@ struct __DRIdrawableRec {
      * 
      * \since Internal API version 20030317.
      */
-    int (*frameTracking)(void *drawablePrivate, GLboolean enable);
+    int (*frameTracking)(__DRIdrawable *drawable, GLboolean enable);
 
     /**
      * Retrieve frame usage information.
      * 
      * \since Internal API version 20030317.
      */
-    int (*queryFrameTracking)(void *drawablePrivate,
+    int (*queryFrameTracking)(__DRIdrawable *drawable,
                              int64_t * sbc, int64_t * missedFrames,
-                             float * lastMissedUsage, float * usage );
+                             float * lastMissedUsage, float * usage);
 
     /**
      * Used by drivers that implement the GLX_SGI_swap_control or
@@ -468,7 +468,7 @@ struct __DRIdrawableRec {
      *
      * \since Internal API version 20060314.
      */
-    void (*copySubBuffer)(void *drawablePrivate,
+    void (*copySubBuffer)(__DRIdrawable *drawable,
                          int x, int y, int w, int h);
 };
 
index 313164638111ac5c3a8e4509446ce4ca8224f043..6b8824d8243778575af26c20eb85183af26cf0ed 100644 (file)
@@ -99,7 +99,7 @@ static void GarbageCollectDRIDrawables(Display *dpy, __GLXscreenConfigs *sc)
            if (!windowExistsFlag) {
                /* Destroy the local drawable data, if the drawable no
                   longer exists in the Xserver */
-               (*pdraw->driDrawable.destroyDrawable)(pdraw->driDrawable.private);
+               (*pdraw->driDrawable.destroyDrawable)(&pdraw->driDrawable);
                XF86DRIDestroyDrawable(dpy, sc->scr, draw);
                Xfree(pdraw);
            }
@@ -530,7 +530,7 @@ DestroyContext(Display *dpy, GLXContext gc)
     /* Destroy the direct rendering context */
     if (gc->isDirect) {
        if (gc->driContext.private) {
-           (*gc->driContext.destroyContext)(gc->driContext.private);
+           (*gc->driContext.destroyContext)(&gc->driContext);
            XF86DRIDestroyContext(dpy, gc->psc->scr, gc->hwContextID);
            gc->driContext.private = NULL;
        }
@@ -859,7 +859,7 @@ PUBLIC void glXSwapBuffers(Display *dpy, GLXDrawable drawable)
     __DRIdrawable *pdraw = GetDRIDrawable( dpy, drawable, NULL );
 
     if ( pdraw != NULL ) {
-       (*pdraw->swapBuffers)(pdraw->private);
+       (*pdraw->swapBuffers)(pdraw);
        return;
     }
 #endif
@@ -1845,7 +1845,7 @@ static GLint __glXBeginFrameTrackingMESA(Display *dpy, GLXDrawable drawable)
 
    if ( (pdraw != NULL) && (pdraw->frameTracking != NULL)
        && __glXExtensionBitIsEnabled( psc, MESA_swap_frame_usage_bit ) ) {
-      status = pdraw->frameTracking( pdraw->private, GL_TRUE );
+      status = pdraw->frameTracking(pdraw, GL_TRUE);
    }
 #else
    (void) dpy;
@@ -1865,7 +1865,7 @@ static GLint __glXEndFrameTrackingMESA(Display *dpy, GLXDrawable drawable)
 
    if ( (pdraw != NULL) && (pdraw->frameTracking != NULL)
        && __glXExtensionBitIsEnabled( psc, MESA_swap_frame_usage_bit ) ) {
-      status = pdraw->frameTracking( pdraw->private, GL_FALSE );
+      status = pdraw->frameTracking(pdraw, GL_FALSE);
    }
 #else
    (void) dpy;
@@ -1889,9 +1889,8 @@ static GLint __glXGetFrameUsageMESA(Display *dpy, GLXDrawable drawable,
       int64_t sbc, missedFrames;
       float   lastMissedUsage;
 
-      status = pdraw->queryFrameTracking( pdraw->private, &sbc,
-                                         &missedFrames, &lastMissedUsage,
-                                         usage );
+      status = pdraw->queryFrameTracking(pdraw, &sbc, &missedFrames,
+                                        &lastMissedUsage, usage);
    }
 #else
    (void) dpy;
@@ -1916,9 +1915,8 @@ static GLint __glXQueryFrameTrackingMESA(Display *dpy, GLXDrawable drawable,
        && __glXExtensionBitIsEnabled( psc, MESA_swap_frame_usage_bit ) ) {
       float   usage;
 
-      status = pdraw->queryFrameTracking( pdraw->private, sbc,
-                                         missedFrames, lastMissedUsage,
-                                         & usage );
+      status = pdraw->queryFrameTracking(pdraw, sbc, missedFrames,
+                                        lastMissedUsage, &usage);
    }
 #else
    (void) dpy;
@@ -1952,7 +1950,7 @@ static int __glXGetVideoSyncSGI(unsigned int *count)
         int       ret;
         int64_t   temp;
 
-        ret = psc->driScreen.getMSC( psc->driScreen.private, & temp );
+        ret = psc->driScreen.getMSC(&psc->driScreen, &temp);
         *count = (unsigned) temp;
         return (ret == 0) ? 0 : GLX_BAD_CONTEXT;
       }
@@ -1983,9 +1981,8 @@ static int __glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count
            int64_t   msc;
            int64_t   sbc;
 
-           ret = (*pdraw->waitForMSC)( pdraw->private,
-                                       0, divisor, remainder,
-                                       & msc, & sbc );
+           ret = (*pdraw->waitForMSC)(pdraw, 0,
+                                      divisor, remainder, &msc, &sbc);
            *count = (unsigned) msc;
            return (ret == 0) ? 0 : GLX_BAD_CONTEXT;
         }
@@ -2151,8 +2148,8 @@ static Bool __glXGetSyncValuesOML(Display *dpy, GLXDrawable drawable,
        assert( (pdraw == NULL) || (i != -1) );
        return ( (pdraw && pdraw->getSBC && psc->driScreen.getMSC)
                 && __glXExtensionBitIsEnabled( psc, OML_sync_control_bit )
-                && ((*psc->driScreen.getMSC)( psc->driScreen.private, msc ) == 0)
-                && ((*pdraw->getSBC)( psc->driScreen.private, sbc ) == 0)
+                && ((*psc->driScreen.getMSC)(&psc->driScreen, msc) == 0)
+                && ((*pdraw->getSBC)(pdraw, sbc ) == 0)
                 && (__glXGetUST( ust ) == 0) );
     }
 #else
@@ -2275,8 +2272,7 @@ static int64_t __glXSwapBuffersMscOML(Display *dpy, GLXDrawable drawable,
 
    if ( (pdraw != NULL) && (pdraw->swapBuffersMSC != NULL)
        && __glXExtensionBitIsEnabled( psc, OML_sync_control_bit ) ) {
-      return (*pdraw->swapBuffersMSC)(pdraw->private, target_msc,
-                                     divisor, remainder);
+      return (*pdraw->swapBuffersMSC)(pdraw, target_msc, divisor, remainder);
    }
 #else
    (void) dpy;
@@ -2310,8 +2306,8 @@ static Bool __glXWaitForMscOML(Display * dpy, GLXDrawable drawable,
 
    if ( (pdraw != NULL) && (pdraw->waitForMSC != NULL)
        && __glXExtensionBitIsEnabled( psc, OML_sync_control_bit ) ) {
-      ret = (*pdraw->waitForMSC)( pdraw->private, target_msc,
-                                 divisor, remainder, msc, sbc );
+      ret = (*pdraw->waitForMSC)(pdraw, target_msc,
+                                divisor, remainder, msc, sbc);
 
       /* __glXGetUST returns zero on success and non-zero on failure.
        * This function returns True on success and False on failure.
@@ -2350,7 +2346,7 @@ static Bool __glXWaitForSbcOML(Display * dpy, GLXDrawable drawable,
 
    if ( (pdraw != NULL) && (pdraw->waitForSBC != NULL)
        && __glXExtensionBitIsEnabled( psc, OML_sync_control_bit )) {
-      ret = (*pdraw->waitForSBC)( pdraw->private, target_sbc, msc, sbc );
+      ret = (*pdraw->waitForSBC)(pdraw, target_sbc, msc, sbc);
 
       /* __glXGetUST returns zero on success and non-zero on failure.
        * This function returns True on success and False on failure.
@@ -2508,7 +2504,7 @@ static void __glXCopySubBufferMESA(Display *dpy, GLXDrawable drawable,
     if ( pdraw != NULL ) {
        __GLXscreenConfigs * const psc = GetGLXScreenConfigs( dpy, screen );
        if ( __glXExtensionBitIsEnabled( psc, MESA_copy_sub_buffer_bit ) ) {
-           (*pdraw->copySubBuffer)(pdraw->private, x, y, width, height);
+           (*pdraw->copySubBuffer)(pdraw, x, y, width, height);
        }
 
        return;
index 45b1dde91b6595bdc8b5e6078440b640a91a671c..8c12ae254ad78f735d2bfa5da60496e7b2af17e4 100644 (file)
@@ -360,7 +360,7 @@ static void FreeScreenConfigs(__GLXdisplayPrivate *priv)
 #ifdef GLX_DIRECT_RENDERING
        /* Free the direct rendering per screen data */
        if (psc->driScreen.private)
-           (*psc->driScreen.destroyScreen)(psc->driScreen.private);
+           (*psc->driScreen.destroyScreen)(&psc->driScreen);
        psc->driScreen.private = NULL;
        __glxHashDestroy(psc->drawHash);
 #endif
@@ -1656,7 +1656,7 @@ FetchDRIDrawable( Display *dpy, GLXDrawable drawable, GLXContext gc)
     }
 
     if (__glxHashInsert(sc->drawHash, drawable, pdraw)) {
-       (*pdraw->driDrawable.destroyDrawable)(pdraw->driDrawable.private);
+       (*pdraw->driDrawable.destroyDrawable)(&pdraw->driDrawable);
        XF86DRIDestroyDrawable(dpy, sc->scr, drawable);
        Xfree(pdraw);
        return NULL;
@@ -1671,7 +1671,7 @@ static Bool BindContextWrapper( Display *dpy, GLXContext gc,
     __DRIdrawable *pdraw = FetchDRIDrawable(dpy, draw, gc);
     __DRIdrawable *pread = FetchDRIDrawable(dpy, read, gc);
 
-    return (*gc->driContext.bindContext)(pdraw, pread, &gc->driContext);
+    return (*gc->driContext.bindContext)(&gc->driContext, pdraw, pread);
 }
 
 
@@ -1789,7 +1789,7 @@ USED static Bool MakeContextCurrent(Display *dpy, GLXDrawable draw,
                if (oldGC->isDirect) {
                    if (oldGC->driContext.private) {
                        (*oldGC->driContext.destroyContext)
-                           (oldGC->driContext.private);
+                           (&oldGC->driContext);
                        XF86DRIDestroyContext(oldGC->createDpy,
                                              oldGC->psc->scr,
                                              gc->hwContextID);
index 31438b827107ea9cc062c918e44e495e7f7a19da..48cde4c4e37f7fb94268cd782e5d26218928e366 100644 (file)
@@ -53,7 +53,7 @@ static const int empty_attribute_list[1] = { None };
 static int api_ver = 0;
 
 /* forward declarations */
-static int driQueryFrameTracking( void *priv,
+static int driQueryFrameTracking( __DRIdrawable *drawable,
                                   int64_t *sbc, int64_t *missedFrames,
                                   float *lastMissedUsage, float *usage );
 
@@ -63,7 +63,7 @@ static void *driCreateNewDrawable(__DRIscreen *screen,
                                  drm_drawable_t hwDrawable,
                                   int renderType, const int *attrs);
 
-static void driDestroyDrawable(void *drawablePrivate);
+static void driDestroyDrawable(__DRIdrawable *drawable);
 
 
 /**
@@ -169,9 +169,9 @@ static GLboolean driUnbindContext(__DRIcontext *ctx)
  * for \c glXMakeCurrentReadSGI or GLX 1.3's \c glXMakeContextCurrent
  * function.
  */
-static GLboolean DoBindContext(__DRIdrawable *pdraw,
-                              __DRIdrawable *pread,
-                              __DRIcontext *ctx)
+static GLboolean DoBindContext(__DRIcontext *ctx,
+                              __DRIdrawable *pdraw,
+                              __DRIdrawable *pread)
 {
     __DRIdrawablePrivate *pdp;
     __DRIdrawablePrivate *prp;
@@ -218,9 +218,9 @@ static GLboolean DoBindContext(__DRIdrawable *pdraw,
  * for \c glXMakeCurrentReadSGI or GLX 1.3's \c glXMakeContextCurrent
  * function.
  */
-static GLboolean driBindContext(__DRIdrawable *pdraw,
-                               __DRIdrawable *pread,
-                               __DRIcontext * ctx)
+static GLboolean driBindContext(__DRIcontext * ctx,
+                               __DRIdrawable *pdraw,
+                               __DRIdrawable *pread)
 {
     /*
     ** Assume error checking is done properly in glXMakeCurrent before
@@ -230,7 +230,7 @@ static GLboolean driBindContext(__DRIdrawable *pdraw,
     if (ctx == NULL || pdraw == None || pread == None)
        return GL_FALSE;
 
-    return DoBindContext( pdraw, pread, ctx );
+    return DoBindContext( ctx, pdraw, pread );
 }
 /*@}*/
 
@@ -328,9 +328,9 @@ __driUtilUpdateDrawableInfo(__DRIdrawablePrivate *pdp)
  * 
  * Is called directly from glXSwapBuffers().
  */
-static void driSwapBuffers(void *drawablePrivate)
+static void driSwapBuffers(__DRIdrawable *drawable)
 {
-    __DRIdrawablePrivate *dPriv = (__DRIdrawablePrivate *) drawablePrivate;
+    __DRIdrawablePrivate *dPriv = drawable->private;
     drm_clip_rect_t rect;
 
     dPriv->swapBuffers(dPriv);
@@ -356,9 +356,9 @@ static void driSwapBuffers(void *drawablePrivate)
 /**
  * Called directly from a number of higher-level GLX functions.
  */
-static int driGetMSC( void *screenPrivate, int64_t *msc )
+static int driGetMSC( __DRIscreen *screen, int64_t *msc )
 {
-    __DRIscreenPrivate *sPriv = (__DRIscreenPrivate *) screenPrivate;
+    __DRIscreenPrivate *sPriv = screen->private;
 
     return sPriv->DriverAPI.GetMSC( sPriv, msc );
 }
@@ -366,9 +366,9 @@ static int driGetMSC( void *screenPrivate, int64_t *msc )
 /**
  * Called directly from a number of higher-level GLX functions.
  */
-static int driGetSBC( void *drawablePrivate, int64_t *sbc )
+static int driGetSBC(__DRIdrawable *drawable, int64_t *sbc)
 {
-   __DRIdrawablePrivate *dPriv = (__DRIdrawablePrivate *) drawablePrivate;
+   __DRIdrawablePrivate *dPriv = drawable->private;
    __DRIswapInfo  sInfo;
    int  status;
 
@@ -379,20 +379,20 @@ static int driGetSBC( void *drawablePrivate, int64_t *sbc )
    return status;
 }
 
-static int driWaitForSBC( void *drawablePriv, int64_t target_sbc,
-                         int64_t * msc, int64_t * sbc )
+static int driWaitForSBC(__DRIdrawable *drawable, int64_t target_sbc,
+                        int64_t * msc, int64_t * sbc)
 {
-    __DRIdrawablePrivate *dPriv = (__DRIdrawablePrivate *) drawablePriv;
+    __DRIdrawablePrivate *dPriv = drawable->private;
 
     return dPriv->driScreenPriv->DriverAPI.WaitForSBC( dPriv, target_sbc,
                                                        msc, sbc );
 }
 
-static int driWaitForMSC( void *drawablePriv, int64_t target_msc,
-                         int64_t divisor, int64_t remainder,
-                         int64_t * msc, int64_t * sbc )
+static int driWaitForMSC(__DRIdrawable *drawable, int64_t target_msc,
+                        int64_t divisor, int64_t remainder,
+                        int64_t * msc, int64_t * sbc)
 {
-    __DRIdrawablePrivate *dPriv = (__DRIdrawablePrivate *) drawablePriv;
+    __DRIdrawablePrivate *dPriv = drawable->private;
     __DRIswapInfo  sInfo;
     int  status;
 
@@ -414,20 +414,20 @@ static int driWaitForMSC( void *drawablePriv, int64_t target_msc,
     return status;
 }
 
-static int64_t driSwapBuffersMSC( void *drawablePriv, int64_t target_msc,
-                                 int64_t divisor, int64_t remainder )
+static int64_t driSwapBuffersMSC(__DRIdrawable *drawable, int64_t target_msc,
+                                int64_t divisor, int64_t remainder)
 {
-    __DRIdrawablePrivate *dPriv = (__DRIdrawablePrivate *) drawablePriv;
+    __DRIdrawablePrivate *dPriv = drawable->private;
 
     return dPriv->driScreenPriv->DriverAPI.SwapBuffersMSC( dPriv, target_msc,
                                                            divisor, 
                                                            remainder );
 }
 
-static void driCopySubBuffer( void *drawablePrivate,
+static void driCopySubBuffer(__DRIdrawable *drawable,
                              int x, int y, int w, int h)
 {
-    __DRIdrawablePrivate *dPriv = (__DRIdrawablePrivate *) drawablePrivate;
+    __DRIdrawablePrivate *dPriv = drawable->private;
     dPriv->driScreenPriv->DriverAPI.CopySubBuffer(dPriv, x, y, w, h);
 }
 
@@ -508,9 +508,9 @@ static void *driCreateNewDrawable(__DRIscreen *screen,
 }
 
 static void
-driDestroyDrawable(void *drawablePrivate)
+driDestroyDrawable(__DRIdrawable *drawable)
 {
-    __DRIdrawablePrivate *pdp = (__DRIdrawablePrivate *) drawablePrivate;
+    __DRIdrawablePrivate *pdp = drawable->private;
     __DRIscreenPrivate *psp;
 
     if (pdp) {
@@ -546,9 +546,9 @@ driDestroyDrawable(void *drawablePrivate)
  * drmDestroyContext(), and finally frees \p contextPrivate.
  */
 static void
-driDestroyContext(void *contextPrivate)
+driDestroyContext(__DRIcontext *context)
 {
-    __DRIcontextPrivate  *pcp   = (__DRIcontextPrivate *) contextPrivate;
+    __DRIcontextPrivate  *pcp   = context->private;
 
     if (pcp) {
        (*pcp->driScreenPriv->DriverAPI.DestroyContext)(pcp);
@@ -641,9 +641,9 @@ driCreateNewContext(__DRIscreen *screen, const __GLcontextModes *modes,
  * This function calls __DriverAPIRec::DestroyScreen on \p screenPrivate, calls
  * drmClose(), and finally frees \p screenPrivate.
  */
-static void driDestroyScreen(void *screenPrivate)
+static void driDestroyScreen(__DRIscreen *screen)
 {
-    __DRIscreenPrivate *psp = (__DRIscreenPrivate *) screenPrivate;
+    __DRIscreenPrivate *psp = screen->private;
 
     if (psp) {
        /* No interaction with the X-server is possible at this point.  This
@@ -808,14 +808,14 @@ int driCompareGLXAPIVersion( GLint required_version )
 
 
 static int
-driQueryFrameTracking( void * priv,
-                      int64_t * sbc, int64_t * missedFrames,
-                      float * lastMissedUsage, float * usage )
+driQueryFrameTracking(__DRIdrawable *drawable,
+                     int64_t * sbc, int64_t * missedFrames,
+                     float * lastMissedUsage, float * usage)
 {
    __DRIswapInfo   sInfo;
    int             status;
    int64_t         ust;
-   __DRIdrawablePrivate * dpriv = (__DRIdrawablePrivate *) priv;
+   __DRIdrawablePrivate * dpriv = drawable->private;
 
 
    status = dpriv->driScreenPriv->DriverAPI.GetSwapInfo( dpriv, & sInfo );