egl+glx: Always support no_error contexts.

Since we know we're loading this Mesa build, we know that no_error is
always supported (the renderer query always returned true).

Reviewed-by: Adam Jackson <ajax@redhat.com>
Acked-by: Eric Engestrom <eric@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20069>
This commit is contained in:
Emma Anholt
2022-11-29 12:39:00 -08:00
committed by Marge Bot
parent 895ec843d3
commit a42feab5ae
6 changed files with 8 additions and 35 deletions

View File

@@ -1847,8 +1847,8 @@ struct __DRIrobustnessExtensionRec {
* Existence of this extension means the driver can accept the * Existence of this extension means the driver can accept the
* __DRI_CTX_FLAG_NO_ERROR flag. * __DRI_CTX_FLAG_NO_ERROR flag.
* *
* This extension is deprecated, and modern loaders will not use it. Please * This extension is deprecated, and modern Mesa knows that it's always
* use __DRI2_RENDERER_HAS_NO_ERROR_CONTEXT instead. * supported.
* *
* Not used by the X server. * Not used by the X server.
*/ */
@@ -1932,7 +1932,6 @@ typedef struct __DRIconfigOptionsExtensionRec {
#define __DRI2_RENDERER_HAS_FRAMEBUFFER_SRGB 0x000c #define __DRI2_RENDERER_HAS_FRAMEBUFFER_SRGB 0x000c
#define __DRI2_RENDERER_PREFER_BACK_BUFFER_REUSE 0x000f #define __DRI2_RENDERER_PREFER_BACK_BUFFER_REUSE 0x000f
#define __DRI2_RENDERER_HAS_NO_ERROR_CONTEXT 0x0010
typedef struct __DRI2rendererQueryExtensionRec __DRI2rendererQueryExtension; typedef struct __DRI2rendererQueryExtensionRec __DRI2rendererQueryExtension;
struct __DRI2rendererQueryExtensionRec { struct __DRI2rendererQueryExtensionRec {

View File

@@ -875,6 +875,7 @@ dri2_setup_screen(_EGLDisplay *disp)
assert(dri2_dpy->image_driver || dri2_dpy->dri2 || dri2_dpy->swrast); assert(dri2_dpy->image_driver || dri2_dpy->dri2 || dri2_dpy->swrast);
disp->Extensions.KHR_create_context = EGL_TRUE; disp->Extensions.KHR_create_context = EGL_TRUE;
disp->Extensions.KHR_create_context_no_error = EGL_TRUE;
disp->Extensions.KHR_no_config_context = EGL_TRUE; disp->Extensions.KHR_no_config_context = EGL_TRUE;
disp->Extensions.KHR_surfaceless_context = EGL_TRUE; disp->Extensions.KHR_surfaceless_context = EGL_TRUE;
@@ -894,10 +895,6 @@ dri2_setup_screen(_EGLDisplay *disp)
if (dri2_dpy->robustness) if (dri2_dpy->robustness)
disp->Extensions.EXT_create_context_robustness = EGL_TRUE; disp->Extensions.EXT_create_context_robustness = EGL_TRUE;
if (dri2_renderer_query_integer(dri2_dpy,
__DRI2_RENDERER_HAS_NO_ERROR_CONTEXT))
disp->Extensions.KHR_create_context_no_error = EGL_TRUE;
if (dri2_dpy->fence) { if (dri2_dpy->fence) {
disp->Extensions.KHR_fence_sync = EGL_TRUE; disp->Extensions.KHR_fence_sync = EGL_TRUE;
disp->Extensions.KHR_wait_sync = EGL_TRUE; disp->Extensions.KHR_wait_sync = EGL_TRUE;

View File

@@ -18,7 +18,6 @@
* - \c __DRI2_RENDERER_OPENGL_COMPATIBLITY_PROFILE_VERSION * - \c __DRI2_RENDERER_OPENGL_COMPATIBLITY_PROFILE_VERSION
* - \c __DRI2_RENDERER_ES_PROFILE_VERSION * - \c __DRI2_RENDERER_ES_PROFILE_VERSION
* - \c __DRI2_RENDERER_ES2_PROFILE_VERSION * - \c __DRI2_RENDERER_ES2_PROFILE_VERSION
* - \c __DRI2_RENDERER_HAS_NO_ERROR_CONTEXT
* *
* \returns * \returns
* Zero if a recognized value of \c param is supplied, -1 otherwise. * Zero if a recognized value of \c param is supplied, -1 otherwise.
@@ -69,9 +68,6 @@ driQueryRendererIntegerCommon(struct dri_screen *screen, int param, unsigned int
value[0] = screen->max_gl_es2_version / 10; value[0] = screen->max_gl_es2_version / 10;
value[1] = screen->max_gl_es2_version % 10; value[1] = screen->max_gl_es2_version % 10;
return 0; return 0;
case __DRI2_RENDERER_HAS_NO_ERROR_CONTEXT:
value[0] = GL_TRUE;
return 0;
default: default:
break; break;
} }

View File

@@ -965,6 +965,7 @@ dri2BindExtensions(struct dri2_screen *psc, struct glx_display * priv,
__glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context"); __glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context");
__glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context_profile"); __glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context_profile");
__glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context_no_error");
__glXEnableDirectExtension(&psc->base, "GLX_EXT_no_config_context"); __glXEnableDirectExtension(&psc->base, "GLX_EXT_no_config_context");
if ((mask & ((1 << __DRI_API_GLES) | if ((mask & ((1 << __DRI_API_GLES) |
@@ -1000,15 +1001,8 @@ dri2BindExtensions(struct dri2_screen *psc, struct glx_display * priv,
if (psc->texBuffer) if (psc->texBuffer)
__glXEnableDirectExtension(&psc->base, "GLX_EXT_texture_from_pixmap"); __glXEnableDirectExtension(&psc->base, "GLX_EXT_texture_from_pixmap");
if (psc->rendererQuery) { if (psc->rendererQuery)
__glXEnableDirectExtension(&psc->base, "GLX_MESA_query_renderer"); __glXEnableDirectExtension(&psc->base, "GLX_MESA_query_renderer");
unsigned int no_error = 0;
if (psc->rendererQuery->queryInteger(psc->driScreen,
__DRI2_RENDERER_HAS_NO_ERROR_CONTEXT,
&no_error) == 0 && no_error)
__glXEnableDirectExtension(&psc->base,
"GLX_ARB_create_context_no_error");
}
} }
static char * static char *

View File

@@ -739,6 +739,7 @@ dri3_bind_extensions(struct dri3_screen *psc, struct glx_display * priv,
__glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context"); __glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context");
__glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context_profile"); __glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context_profile");
__glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context_no_error");
__glXEnableDirectExtension(&psc->base, "GLX_EXT_no_config_context"); __glXEnableDirectExtension(&psc->base, "GLX_EXT_no_config_context");
if ((mask & ((1 << __DRI_API_GLES) | if ((mask & ((1 << __DRI_API_GLES) |
@@ -779,16 +780,8 @@ dri3_bind_extensions(struct dri3_screen *psc, struct glx_display * priv,
"GLX_ARB_context_flush_control"); "GLX_ARB_context_flush_control");
} }
if (psc->rendererQuery) { if (psc->rendererQuery)
__glXEnableDirectExtension(&psc->base, "GLX_MESA_query_renderer"); __glXEnableDirectExtension(&psc->base, "GLX_MESA_query_renderer");
unsigned int no_error = 0;
if (psc->rendererQuery->queryInteger(psc->driScreen,
__DRI2_RENDERER_HAS_NO_ERROR_CONTEXT,
&no_error) == 0 && no_error) {
__glXEnableDirectExtension(&psc->base,
"GLX_ARB_create_context_no_error");
}
}
} }
static char * static char *

View File

@@ -811,6 +811,7 @@ driswBindExtensions(struct drisw_screen *psc, const __DRIextension **extensions)
__glXEnableDirectExtension(&psc->base, "GLX_SGI_make_current_read"); __glXEnableDirectExtension(&psc->base, "GLX_SGI_make_current_read");
__glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context"); __glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context");
__glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context_profile"); __glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context_profile");
__glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context_no_error");
__glXEnableDirectExtension(&psc->base, "GLX_EXT_no_config_context"); __glXEnableDirectExtension(&psc->base, "GLX_EXT_no_config_context");
/* DRISW version >= 2 implies support for OpenGL ES. */ /* DRISW version >= 2 implies support for OpenGL ES. */
@@ -848,13 +849,6 @@ driswBindExtensions(struct drisw_screen *psc, const __DRIextension **extensions)
if (psc->rendererQuery) { if (psc->rendererQuery) {
__glXEnableDirectExtension(&psc->base, "GLX_MESA_query_renderer"); __glXEnableDirectExtension(&psc->base, "GLX_MESA_query_renderer");
unsigned int no_error = 0;
if (psc->rendererQuery->queryInteger(psc->driScreen,
__DRI2_RENDERER_HAS_NO_ERROR_CONTEXT,
&no_error) == 0 && no_error) {
__glXEnableDirectExtension(&psc->base,
"GLX_ARB_create_context_no_error");
}
} }
if (psc->kopper) { if (psc->kopper) {