[Mesa-dev] [RFC 1/3] dri: add support for CONTEXT_FLAG_NO_ERROR_BIT_KHR
Nicolai Hähnle
nhaehnle at gmail.com
Tue Mar 28 15:12:28 UTC 2017
On 28.03.2017 06:35, Timothy Arceri wrote:
> The KHR_no_error spec says:
>
> "CONTEXT_FLAG_NO_ERROR_BIT_KHR is only supported if the
> OpenGL version has support for context flags (as defined
> in the OpenGL 4.5 core spec) or an extension supporting
> equivalent functionality is exposed."
>
> But the OpenGL 4.5 core spec just has referenced to
> {WGL,GLX}_ARB_create_context. There is also no
> GLX_create_context_no_error so I'm unsure if the text from
> the spec implies that it extends {WGL,GLX}_ARB_create_context
> or if a new extension is actually required.
WGL/GLX extensions for this are in progress and should be released
reasonably soon.
Cheers,
Nicolai
> ---
> include/GL/internal/dri_interface.h | 2 ++
> src/mesa/drivers/dri/common/dri_util.c | 16 +++++++++++++++-
> 2 files changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h
> index 86efd1b..44840a9 100644
> --- a/include/GL/internal/dri_interface.h
> +++ b/include/GL/internal/dri_interface.h
> @@ -1041,20 +1041,22 @@ struct __DRIdri2LoaderExtensionRec {
> #define __DRI_CTX_ATTRIB_RESET_STRATEGY 3
>
> #define __DRI_CTX_FLAG_DEBUG 0x00000001
> #define __DRI_CTX_FLAG_FORWARD_COMPATIBLE 0x00000002
>
> /**
> * \requires __DRI2_ROBUSTNESS.
> */
> #define __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS 0x00000004
>
> +#define __DRI_CTX_FLAG_NO_ERROR 0x00000008
> +
> /**
> * \name Context reset strategies.
> */
> /*@{*/
> #define __DRI_CTX_RESET_NO_NOTIFICATION 0
> #define __DRI_CTX_RESET_LOSE_CONTEXT 1
> /*@}*/
>
> /**
> * \name Reasons that __DRIdri2Extension::createContextAttribs might fail
> diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c
> index f6df488..6d7f1df 100644
> --- a/src/mesa/drivers/dri/common/dri_util.c
> +++ b/src/mesa/drivers/dri/common/dri_util.c
> @@ -418,21 +418,22 @@ driCreateContextAttribs(__DRIscreen *screen, int api,
> * requested API to API_OPENGL_CORE.
> *
> * In Mesa, a debug context is the same as a regular context.
> */
> if ((flags & __DRI_CTX_FLAG_FORWARD_COMPATIBLE) != 0) {
> mesa_api = API_OPENGL_CORE;
> }
>
> const uint32_t allowed_flags = (__DRI_CTX_FLAG_DEBUG
> | __DRI_CTX_FLAG_FORWARD_COMPATIBLE
> - | __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS);
> + | __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS
> + | __DRI_CTX_FLAG_NO_ERROR);
> if (flags & ~allowed_flags) {
> *error = __DRI_CTX_ERROR_UNKNOWN_FLAG;
> return NULL;
> }
>
> if (!validate_context_version(screen, mesa_api,
> major_version, minor_version, error))
> return NULL;
>
> context = calloc(1, sizeof *context);
> @@ -459,20 +460,33 @@ driCreateContextAttribs(__DRIscreen *screen, int api,
> }
>
> void
> driContextSetFlags(struct gl_context *ctx, uint32_t flags)
> {
> if ((flags & __DRI_CTX_FLAG_FORWARD_COMPATIBLE) != 0)
> ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT;
> if ((flags & __DRI_CTX_FLAG_DEBUG) != 0) {
> _mesa_set_debug_state_int(ctx, GL_DEBUG_OUTPUT, GL_TRUE);
> ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_DEBUG_BIT;
> + } else if ((flags & __DRI_CTX_FLAG_NO_ERROR) != 0) {
> + /* From Issue (1) of the KHR_no_error spec:
> + *
> + * "How does this extension interact with KHR_robustness and debug
> + * contexts?
> + *
> + * RESOLVED: The EGL/WGL/GLX layers should prevent these features
> + * from being enabled at the same time. However, if they are
> + * somehow enabled at the same time this extension should be
> + * ignored."
> + */
> + if ((flags & __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS) == 0)
> + ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR;
> }
> }
>
> static __DRIcontext *
> driCreateNewContextForAPI(__DRIscreen *screen, int api,
> const __DRIconfig *config,
> __DRIcontext *shared, void *data)
> {
> unsigned error;
>
>
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
More information about the mesa-dev
mailing list