Move DRI specific parts of CreateContext into dri_glx.c.
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user