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 */
__glXScrEnableDRIExtension(psc);
psc->driDestroyScreen = driDestroyScreen;
+ psc->driCreateContext = driCreateContext;
}
/* Called from __glXFreeDisplayPrivate.
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
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);
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