Move DRI specific parts of CreateContext into dri_glx.c.

This commit is contained in:
Kristian Høgsberg
2008-03-08 20:02:22 -05:00
parent a1ea6f6198
commit 53dc863636
3 changed files with 43 additions and 29 deletions
+37
View File
@@ -657,6 +657,42 @@ CallCreateNewScreen(Display *dpy, int scrn, __GLXscreenConfigs *psc,
return psp;
}
static void driCreateContext(__GLXscreenConfigs *psc,
const __GLcontextModes *mode,
GLXContext gc,
GLXContext shareList, int renderType)
{
drm_context_t hwContext;
__DRIcontext *shared;
if (psc && psc->driScreen.private) {
shared = (shareList != NULL) ? &shareList->driContext : NULL;
if (!XF86DRICreateContextWithConfig(psc->dpy, psc->scr,
mode->visualID,
&gc->hwContextID, &hwContext))
/* gah, handle this better */
return;
gc->driContext.private =
(*psc->driScreen.createNewContext)( &psc->driScreen,
mode, renderType,
shared,
hwContext,
&gc->driContext );
if (gc->driContext.private) {
gc->isDirect = GL_TRUE;
gc->screen = mode->screen;
gc->psc = psc;
gc->mode = mode;
}
else {
XF86DRIDestroyContext(psc->dpy, psc->scr, gc->hwContextID);
}
}
}
static void driDestroyScreen(__GLXscreenConfigs *psc)
{
/* Free the direct rendering per screen data */
@@ -698,6 +734,7 @@ static void driCreateScreen(__GLXscreenConfigs *psc, int screen,
__glXScrEnableDRIExtension(psc);
psc->driDestroyScreen = driDestroyScreen;
psc->driCreateContext = driCreateContext;
}
/* Called from __glXFreeDisplayPrivate.
+5
View File
@@ -438,6 +438,11 @@ struct __GLXscreenConfigsRec {
void (*driDestroyScreen)(__GLXscreenConfigs *psc);
void (*driCreateContext)(__GLXscreenConfigs *psc,
const __GLcontextModes *mode,
GLXContext gc,
GLXContext shareList, int renderType);
#ifdef __DRI_COPY_SUB_BUFFER
__DRIcopySubBufferExtension *copySubBuffer;
#endif
+1 -29
View File
@@ -378,8 +378,6 @@ CreateContext(Display *dpy, XVisualInfo *vis,
int screen = (fbconfig == NULL) ? vis->screen : fbconfig->screen;
__GLXscreenConfigs * const psc = GetGLXScreenConfigs(dpy, screen);
const __GLcontextModes * mode;
drm_context_t hwContext;
if (fbconfig == NULL) {
mode = _gl_context_modes_find_visual(psc->visuals, vis->visualid);
@@ -400,33 +398,7 @@ CreateContext(Display *dpy, XVisualInfo *vis,
mode = fbconfig;
}
if (psc && psc->driScreen.private) {
__DRIcontext *shared = (shareList != NULL)
? &shareList->driContext : NULL;
if (!XF86DRICreateContextWithConfig(dpy, psc->scr,
mode->visualID,
&gc->hwContextID, &hwContext))
/* gah, handle this better */
return NULL;
gc->driContext.private =
(*psc->driScreen.createNewContext)( &psc->driScreen,
mode, renderType,
shared,
hwContext,
&gc->driContext );
if (gc->driContext.private) {
gc->isDirect = GL_TRUE;
gc->screen = mode->screen;
gc->psc = psc;
gc->mode = mode;
}
else {
XF86DRIDestroyContext(dpy, psc->scr, gc->hwContextID);
}
}
psc->driCreateContext(psc, mode, gc, shareList, renderType);
}
#endif