This is speculative, pending Mesa growing something like: http://patchwork.freedesktop.org/patch/49733/
Signed-off-by: Adam Jackson <[email protected]> --- glx/createcontext.c | 13 ++++++++++--- glx/extension_string.c | 1 + glx/extension_string.h | 1 + glx/glxdri2.c | 11 +++++++++++ glx/glxdriswrast.c | 11 +++++++++++ 5 files changed, 34 insertions(+), 3 deletions(-) diff --git a/glx/createcontext.c b/glx/createcontext.c index d06bc1f..10eaaef 100644 --- a/glx/createcontext.c +++ b/glx/createcontext.c @@ -29,9 +29,16 @@ #include "glxext.h" #include "indirect_dispatch.h" -#define ALL_VALID_FLAGS \ - (GLX_CONTEXT_DEBUG_BIT_ARB | GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB \ - | GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB) +#ifndef GLX_CONTEXT_RESET_ISOLATION_BIT_ARB +#define GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x8 +#endif + +#define ALL_VALID_FLAGS (\ + GLX_CONTEXT_DEBUG_BIT_ARB | \ + GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB | \ + GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB | \ + GLX_CONTEXT_RESET_ISOLATION_BIT_ARB | \ + 0) static Bool validate_GL_version(int major_version, int minor_version) diff --git a/glx/extension_string.c b/glx/extension_string.c index b0f53cf..bbab850 100644 --- a/glx/extension_string.c +++ b/glx/extension_string.c @@ -79,6 +79,7 @@ static const struct extension_info known_glx_extensions[] = { { GLX(ARB_fbconfig_float), VER(0,0), N, }, { GLX(ARB_framebuffer_sRGB), VER(0,0), N, }, { GLX(ARB_multisample), VER(1,4), Y, }, + { GLX(ARB_robustness_isolation), VER(0,0), N, }, { GLX(EXT_create_context_es2_profile), VER(0,0), N, }, { GLX(EXT_framebuffer_sRGB), VER(0,0), N, }, diff --git a/glx/extension_string.h b/glx/extension_string.h index ce10918..0c7bbdf 100644 --- a/glx/extension_string.h +++ b/glx/extension_string.h @@ -43,6 +43,7 @@ enum { ARB_fbconfig_float_bit, ARB_framebuffer_sRGB_bit, ARB_multisample_bit, + ARB_robustness_isolation_bit, EXT_create_context_es2_profile_bit, EXT_import_context_bit, EXT_stereo_tree_bit, diff --git a/glx/glxdri2.c b/glx/glxdri2.c index d5f47ab..ebcf218 100644 --- a/glx/glxdri2.c +++ b/glx/glxdri2.c @@ -848,6 +848,7 @@ initializeExtensions(__GLXDRIscreen * screen) { ScreenPtr pScreen = screen->base.pScreen; const __DRIextension **extensions; + uint32_t context_flags = 0; int i; extensions = screen->core->getExtensions(screen->driScreen); @@ -868,6 +869,16 @@ initializeExtensions(__GLXDRIscreen * screen) "AIGLX: enabled GLX_EXT_create_context_es2_profile\n"); } +#if __DRI_DRI2_VERSION > 5 + if (screen->dri2->base.version >= 5) { + context_flags = screen->dri2->contextFlags(screen->driScreen); + } +#endif + + if (context_flags & __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS) + __glXEnableExtension(screen->glx_enable_bits, + "GLX_ARB_robustness_isolation"); + if (DRI2HasSwapControl(pScreen)) { __glXEnableExtension(screen->glx_enable_bits, "GLX_INTEL_swap_event"); __glXEnableExtension(screen->glx_enable_bits, "GLX_SGI_swap_control"); diff --git a/glx/glxdriswrast.c b/glx/glxdriswrast.c index 9add2a1..a3e7a06 100644 --- a/glx/glxdriswrast.c +++ b/glx/glxdriswrast.c @@ -394,6 +394,7 @@ static void initializeExtensions(__GLXDRIscreen * screen) { const __DRIextension **extensions; + uint32_t context_flags = 0; int i; if (screen->swrast->base.version >= 3) { @@ -405,6 +406,16 @@ initializeExtensions(__GLXDRIscreen * screen) "GLX_EXT_create_context_es2_profile"); } +#if __DRI_SWRAST_VERSION > 5 + if (screen->swrast->base.version >= 5) { + context_flags = screen->swrast->contextFlags(screen->driScreen); + } +#endif + + if (context_flags & __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS) + __glXEnableExtension(screen->glx_enable_bits, + "GLX_ARB_robustness_isolation"); + /* these are harmless to enable unconditionally */ __glXEnableExtension(screen->glx_enable_bits, "GLX_EXT_framebuffer_sRGB"); __glXEnableExtension(screen->glx_enable_bits, "GLX_ARB_fbconfig_float"); -- 2.4.1 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
