xwin/glx: Enable GLX_SGI_make_current_read unconditionally (v2)
This seems to be fairly universal these days, and if it doesn't exist the only thing you break is separate drawable and readable, which is a rare feature to use. So pretend it's always there and just throw an error on MakeCurrent if it isn't, and don't consider it when computing the GLX version number. v2: Fix type-o for glxWinScreen (Jon Turney) Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-by: Emil Velikov <emil.velikov@collabora.com> Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
parent
b2ef7df476
commit
9b2fc6d986
@ -143,6 +143,7 @@ struct __GLXWinScreen {
|
|||||||
Bool has_WGL_ARB_pixel_format;
|
Bool has_WGL_ARB_pixel_format;
|
||||||
Bool has_WGL_ARB_pbuffer;
|
Bool has_WGL_ARB_pbuffer;
|
||||||
Bool has_WGL_ARB_render_texture;
|
Bool has_WGL_ARB_render_texture;
|
||||||
|
Bool has_WGL_ARB_make_current_read;
|
||||||
|
|
||||||
/* wrapped screen functions */
|
/* wrapped screen functions */
|
||||||
RealizeWindowProcPtr RealizeWindow;
|
RealizeWindowProcPtr RealizeWindow;
|
||||||
@ -637,8 +638,6 @@ glxWinScreenProbe(ScreenPtr pScreen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
Bool glx_sgi_make_current_read = FALSE;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Based on the WGL extensions available, enable various GLX extensions
|
// Based on the WGL extensions available, enable various GLX extensions
|
||||||
// XXX: make this table-driven ?
|
// XXX: make this table-driven ?
|
||||||
@ -650,13 +649,10 @@ glxWinScreenProbe(ScreenPtr pScreen)
|
|||||||
__glXEnableExtension(screen->glx_enable_bits, "GLX_EXT_import_context");
|
__glXEnableExtension(screen->glx_enable_bits, "GLX_EXT_import_context");
|
||||||
__glXEnableExtension(screen->glx_enable_bits, "GLX_OML_swap_method");
|
__glXEnableExtension(screen->glx_enable_bits, "GLX_OML_swap_method");
|
||||||
__glXEnableExtension(screen->glx_enable_bits, "GLX_SGIX_fbconfig");
|
__glXEnableExtension(screen->glx_enable_bits, "GLX_SGIX_fbconfig");
|
||||||
|
__glXEnableExtension(screen->glx_enable_bits, "GLX_SGI_make_current_read");
|
||||||
|
|
||||||
if (strstr(wgl_extensions, "WGL_ARB_make_current_read")) {
|
if (strstr(wgl_extensions, "WGL_ARB_make_current_read"))
|
||||||
__glXEnableExtension(screen->glx_enable_bits,
|
screen->has_WGL_ARB_make_current_read = TRUE;
|
||||||
"GLX_SGI_make_current_read");
|
|
||||||
LogMessage(X_INFO, "AIGLX: enabled GLX_SGI_make_current_read\n");
|
|
||||||
glx_sgi_make_current_read = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strstr(gl_extensions, "GL_WIN_swap_hint")) {
|
if (strstr(gl_extensions, "GL_WIN_swap_hint")) {
|
||||||
__glXEnableExtension(screen->glx_enable_bits,
|
__glXEnableExtension(screen->glx_enable_bits,
|
||||||
@ -753,7 +749,7 @@ glxWinScreenProbe(ScreenPtr pScreen)
|
|||||||
// SGIX_fbconfig && SGIX_pbuffer && SGI_make_current_read -> 1.3
|
// SGIX_fbconfig && SGIX_pbuffer && SGI_make_current_read -> 1.3
|
||||||
// ARB_multisample -> 1.4
|
// ARB_multisample -> 1.4
|
||||||
//
|
//
|
||||||
if (screen->has_WGL_ARB_pbuffer && glx_sgi_make_current_read) {
|
if (screen->has_WGL_ARB_pbuffer) {
|
||||||
if (screen->has_WGL_ARB_multisample) {
|
if (screen->has_WGL_ARB_multisample) {
|
||||||
screen->base.GLXmajor = 1;
|
screen->base.GLXmajor = 1;
|
||||||
screen->base.GLXminor = 4;
|
screen->base.GLXminor = 4;
|
||||||
@ -1429,6 +1425,7 @@ static int
|
|||||||
glxWinContextMakeCurrent(__GLXcontext * base)
|
glxWinContextMakeCurrent(__GLXcontext * base)
|
||||||
{
|
{
|
||||||
__GLXWinContext *gc = (__GLXWinContext *) base;
|
__GLXWinContext *gc = (__GLXWinContext *) base;
|
||||||
|
glxWinScreen *scr = (glxWinScreen *)base->pGlxScreen;
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
HDC drawDC;
|
HDC drawDC;
|
||||||
HDC readDC = NULL;
|
HDC readDC = NULL;
|
||||||
@ -1461,7 +1458,14 @@ glxWinContextMakeCurrent(__GLXcontext * base)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((gc->base.readPriv != NULL) && (gc->base.readPriv != gc->base.drawPriv)) {
|
if ((gc->base.readPriv != NULL) && (gc->base.readPriv != gc->base.drawPriv)) {
|
||||||
// XXX: should only occur with WGL_ARB_make_current_read
|
/*
|
||||||
|
* We enable GLX_SGI_make_current_read unconditionally, but the
|
||||||
|
* renderer might not support it. It's fairly rare to use this
|
||||||
|
* feature so just error out if it can't work.
|
||||||
|
*/
|
||||||
|
if (!scr->has_WGL_ARB_make_current_read)
|
||||||
|
return False;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If there is a separate read drawable, create a separate read DC, and
|
If there is a separate read drawable, create a separate read DC, and
|
||||||
use the wglMakeContextCurrent extension to make the context current drawing
|
use the wglMakeContextCurrent extension to make the context current drawing
|
||||||
|
Loading…
Reference in New Issue
Block a user