mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-25 00:30:37 +02:00
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.
This commit is contained in:
parent
bc7b2f0dc3
commit
52cf8db428
1 changed files with 29 additions and 31 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue