summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@redhat.com>2008-03-08 19:15:50 -0500
committerKristian Høgsberg <krh@redhat.com>2008-03-08 19:15:50 -0500
commita1ea6f6198d80f716936a308cfab235f18a014e1 (patch)
tree81f3ad6b1c4faf31958b6eca098e2bb4bb113597 /src
parent425f9ed44e576aef27f7ab98968043f7f180d0fd (diff)
Convert driCreateScreen and driDestroyScreen to function pointers.
We avoid leaking the symbols and will be able to replace them with DRI2 implementation later on.
Diffstat (limited to 'src')
-rw-r--r--src/glx/x11/dri_glx.c30
-rw-r--r--src/glx/x11/glxclient.h8
-rw-r--r--src/glx/x11/glxext.c4
3 files changed, 23 insertions, 19 deletions
diff --git a/src/glx/x11/dri_glx.c b/src/glx/x11/dri_glx.c
index fd824f386d..194517a657 100644
--- a/src/glx/x11/dri_glx.c
+++ b/src/glx/x11/dri_glx.c
@@ -657,9 +657,20 @@ CallCreateNewScreen(Display *dpy, int scrn, __GLXscreenConfigs *psc,
return psp;
}
-void
-driCreateScreen(__GLXscreenConfigs *psc, int screen,
- __GLXdisplayPrivate *priv)
+static void driDestroyScreen(__GLXscreenConfigs *psc)
+{
+ /* Free the direct rendering per screen data */
+ if (psc->driScreen.private)
+ (*psc->driScreen.destroyScreen)(&psc->driScreen);
+ psc->driScreen.private = NULL;
+ if (psc->drawHash)
+ __glxHashDestroy(psc->drawHash);
+ if (psc->driver)
+ dlclose(psc->driver);
+}
+
+static void driCreateScreen(__GLXscreenConfigs *psc, int screen,
+ __GLXdisplayPrivate *priv)
{
PFNCREATENEWSCREENFUNC createNewScreen;
__GLXDRIdisplayPrivate *pdp;
@@ -685,18 +696,8 @@ driCreateScreen(__GLXscreenConfigs *psc, int screen,
CallCreateNewScreen(psc->dpy, screen, psc, pdp, createNewScreen);
if (psc->driScreen.private != NULL)
__glXScrEnableDRIExtension(psc);
-}
-void driDestroyScreen(__GLXscreenConfigs *psc)
-{
- /* Free the direct rendering per screen data */
- if (psc->driScreen.private)
- (*psc->driScreen.destroyScreen)(&psc->driScreen);
- psc->driScreen.private = NULL;
- if (psc->drawHash)
- __glxHashDestroy(psc->drawHash);
- if (psc->driver)
- dlclose(psc->driver);
+ psc->driDestroyScreen = driDestroyScreen;
}
/* Called from __glXFreeDisplayPrivate.
@@ -735,6 +736,7 @@ __GLXDRIdisplay *driCreateDisplay(Display *dpy)
pdpyp->driPatch = patch;
pdpyp->base.destroyDisplay = driDestroyDisplay;
+ pdpyp->base.createScreen = driCreateScreen;
return (void *)pdpyp;
}
diff --git a/src/glx/x11/glxclient.h b/src/glx/x11/glxclient.h
index b3f07a30b6..99dbb597a6 100644
--- a/src/glx/x11/glxclient.h
+++ b/src/glx/x11/glxclient.h
@@ -98,6 +98,9 @@ struct __GLXDRIdisplayRec {
* Method to destroy the private DRI display data.
*/
void (*destroyDisplay)(__GLXDRIdisplay *display);
+
+ void (*createScreen)(__GLXscreenConfigs *psc, int screen,
+ __GLXdisplayPrivate *priv);
};
/*
@@ -105,9 +108,6 @@ struct __GLXDRIdisplayRec {
** dependent methods.
*/
extern __GLXDRIdisplay *driCreateDisplay(Display *dpy);
-extern void driCreateScreen(__GLXscreenConfigs *psc, int screen,
- __GLXdisplayPrivate *priv);
-extern void driDestroyScreen(__GLXscreenConfigs *psc);
extern void DRI_glXUseXFont( Font font, int first, int count, int listbase );
@@ -436,6 +436,8 @@ struct __GLXscreenConfigsRec {
int scr;
void *driver;
+ void (*driDestroyScreen)(__GLXscreenConfigs *psc);
+
#ifdef __DRI_COPY_SUB_BUFFER
__DRIcopySubBufferExtension *copySubBuffer;
#endif
diff --git a/src/glx/x11/glxext.c b/src/glx/x11/glxext.c
index b4a03e4057..f71c049acd 100644
--- a/src/glx/x11/glxext.c
+++ b/src/glx/x11/glxext.c
@@ -349,7 +349,7 @@ static void FreeScreenConfigs(__GLXdisplayPrivate *priv)
Xfree((char*) psc->serverGLXexts);
#ifdef GLX_DIRECT_RENDERING
- driDestroyScreen(psc);
+ psc->driDestroyScreen(psc);
#endif
}
XFree((char*) priv->screenConfigs);
@@ -772,7 +772,7 @@ static Bool AllocAndFetchScreenConfigs(Display *dpy, __GLXdisplayPrivate *priv)
psc->scr = i;
psc->dpy = dpy;
#ifdef GLX_DIRECT_RENDERING
- driCreateScreen(psc, i, priv);
+ (*priv->driDisplay->createScreen)(psc, i, priv);
#endif
}
SyncHandle();