aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2010-02-04 16:59:10 -0800
committerIan Romanick <[email protected]>2010-02-11 15:40:29 -0800
commit52cf8db428909156b062f17a9e6251a38178dec3 (patch)
tree8e7f55957a6bc52f424d61a78129468eec86420c /src
parentbc7b2f0dc33753f6d6b55bd4058e82ddf0997967 (diff)
glx: Move work of converting a visual to an fbconfig
For the direct rendering case, the DRI createContext function wants an fbconfig. When glXCreateContext is called, we have to convert the visual to an fbconfig. This work was done in CreateContext, but it makes more sense for it to be done in glXCreateContext.
Diffstat (limited to 'src')
-rw-r--r--src/glx/glxcmds.c60
1 files changed, 29 insertions, 31 deletions
diff --git a/src/glx/glxcmds.c b/src/glx/glxcmds.c
index b08cad8435c..1be6ff39794 100644
--- a/src/glx/glxcmds.c
+++ b/src/glx/glxcmds.c
@@ -387,37 +387,12 @@ CreateContext(Display * dpy, XVisualInfo * vis,
#ifdef GLX_DIRECT_RENDERING
if (allowDirect && psc->driScreen) {
- const __GLcontextModes *mode;
-
- if (fbconfig == NULL) {
- mode = _gl_context_modes_find_visual(psc->visuals, vis->visualid);
- if (mode == NULL) {
- xError error;
-
- error.errorCode = BadValue;
- error.resourceID = vis->visualid;
- error.sequenceNumber = dpy->request;
- error.type = X_Error;
- error.majorCode = gc->majorOpcode;
- error.minorCode = X_GLXCreateContext;
- _XError(dpy, &error);
- return None;
- }
- if (renderType == 0) {
- /* Initialize renderType now */
- renderType = mode->rgbMode ? GLX_RGBA_TYPE : GLX_COLOR_INDEX_TYPE;
- }
- }
- else {
- mode = fbconfig;
- }
-
- gc->driContext = psc->driScreen->createContext(psc, mode, gc, shareList,
- renderType);
+ gc->driContext = psc->driScreen->createContext(psc, fbconfig, gc,
+ shareList, renderType);
if (gc->driContext != NULL) {
- gc->screen = mode->screen;
+ gc->screen = screen;
gc->psc = psc;
- gc->mode = mode;
+ gc->mode = fbconfig;
gc->isDirect = GL_TRUE;
}
}
@@ -497,8 +472,31 @@ PUBLIC GLXContext
glXCreateContext(Display * dpy, XVisualInfo * vis,
GLXContext shareList, Bool allowDirect)
{
- return CreateContext(dpy, vis, NULL, shareList, allowDirect,
- X_GLXCreateContext, 0, vis->screen);
+ const __GLcontextModes *mode = NULL;
+ int renderType = 0;
+
+#ifdef GLX_DIRECT_RENDERING
+ __GLXscreenConfigs *const psc = GetGLXScreenConfigs(dpy, vis->screen);
+
+ mode = _gl_context_modes_find_visual(psc->visuals, vis->visualid);
+ if (mode == NULL) {
+ xError error;
+
+ error.errorCode = BadValue;
+ error.resourceID = vis->visualid;
+ error.sequenceNumber = dpy->request;
+ error.type = X_Error;
+ error.majorCode = __glXSetupForCommand(dpy);
+ error.minorCode = X_GLXCreateContext;
+ _XError(dpy, &error);
+ return None;
+ }
+
+ renderType = mode->rgbMode ? GLX_RGBA_TYPE : GLX_COLOR_INDEX_TYPE;
+#endif
+
+ return CreateContext(dpy, vis, mode, shareList, allowDirect,
+ X_GLXCreateContext, renderType, vis->screen);
}
_X_HIDDEN void