diff options
author | Grigori Goronzy <greg@chown.ath.cx> | 2017-06-29 03:24:15 +0200 |
---|---|---|
committer | Grigori Goronzy <greg@chown.ath.cx> | 2017-06-29 14:39:56 +0200 |
commit | 8e6e2aa482cea68015bd6c4dca8812de75b790d9 (patch) | |
tree | 878df8574aee7926fbbeafc9da5e559e233dbfd8 | |
parent | 4c9a701624b4a211f8a8dcabdf2bb41d060eb3fa (diff) |
dri: add no-error extension
This basic extension allows usage of the __DRI_CTX_FLAG_NO_ERROR flag.
-rw-r--r-- | include/GL/internal/dri_interface.h | 21 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/dri2.c | 6 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/dri_context.c | 3 | ||||
-rw-r--r-- | src/mesa/drivers/dri/common/dri_util.c | 8 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_screen.c | 8 |
5 files changed, 42 insertions, 4 deletions
diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index ff70ba0c52..777dbc33e0 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -1050,6 +1050,14 @@ struct __DRIdri2LoaderExtensionRec { #define __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS 0x00000004 /** + * \requires __DRI2_NO_ERROR. + * + * The lower bits of the flags attribute are reserved for EGL/GLX compatible + * flags, in case new flags are added by EGL/GLX. + */ +#define __DRI_CTX_FLAG_NO_ERROR 0x00010000 + +/** * \name Context reset strategies. */ /*@{*/ @@ -1610,6 +1618,19 @@ struct __DRIrobustnessExtensionRec { }; /** + * No-error context driver extension. + * + * Existence of this extension means the driver can accept the + * __DRI_CTX_FLAG_NO_ERROR flag. + */ +#define __DRI2_NO_ERROR "DRI_NoError" +#define __DRI2_NO_ERROR_VERSION 1 + +typedef struct __DRInoErrorExtensionRec { + __DRIextension base; +} __DRInoErrorExtension; + +/** * DRI config options extension. * * This extension provides the XML string containing driver options for use by diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c index 5da1c4e89f..244a6ad11d 100644 --- a/src/gallium/state_trackers/dri/dri2.c +++ b/src/gallium/state_trackers/dri/dri2.c @@ -1667,6 +1667,10 @@ static const __DRIrobustnessExtension dri2Robustness = { .base = { __DRI2_ROBUSTNESS, 1 } }; +static const __DRInoErrorExtension driNoError = { + .base = { __DRI2_NO_ERROR, 1 } +}; + static int dri2_interop_query_device_info(__DRIcontext *_ctx, struct mesa_glinterop_device_info *out) @@ -2002,6 +2006,7 @@ static const __DRIextension *dri_screen_extensions[] = { &dri2ThrottleExtension.base, &dri2FenceExtension.base, &dri2InteropExtension.base, + &driNoError.base, NULL }; @@ -2015,6 +2020,7 @@ static const __DRIextension *dri_robust_screen_extensions[] = { &dri2FenceExtension.base, &dri2InteropExtension.base, &dri2Robustness.base, + &driNoError.base, NULL }; diff --git a/src/gallium/state_trackers/dri/dri_context.c b/src/gallium/state_trackers/dri/dri_context.c index ec555e44d7..e25f186deb 100644 --- a/src/gallium/state_trackers/dri/dri_context.c +++ b/src/gallium/state_trackers/dri/dri_context.c @@ -57,7 +57,8 @@ dri_create_context(gl_api api, const struct gl_config * visual, struct st_context_attribs attribs; enum st_context_error ctx_err = 0; unsigned allowed_flags = __DRI_CTX_FLAG_DEBUG | - __DRI_CTX_FLAG_FORWARD_COMPATIBLE; + __DRI_CTX_FLAG_FORWARD_COMPATIBLE | + __DRI_CTX_FLAG_NO_ERROR; const __DRIbackgroundCallableExtension *backgroundCallable = screen->sPriv->dri2.backgroundCallable; diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c index f6df48802f..174356f9e9 100644 --- a/src/mesa/drivers/dri/common/dri_util.c +++ b/src/mesa/drivers/dri/common/dri_util.c @@ -403,7 +403,8 @@ driCreateContextAttribs(__DRIscreen *screen, int api, if (mesa_api != API_OPENGL_COMPAT && mesa_api != API_OPENGL_CORE && (flags & ~(__DRI_CTX_FLAG_DEBUG | - __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS))) { + __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS | + __DRI_CTX_FLAG_NO_ERROR))) { *error = __DRI_CTX_ERROR_BAD_FLAG; return NULL; } @@ -425,7 +426,8 @@ driCreateContextAttribs(__DRIscreen *screen, int api, 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; @@ -467,6 +469,8 @@ driContextSetFlags(struct gl_context *ctx, uint32_t flags) _mesa_set_debug_state_int(ctx, GL_DEBUG_OUTPUT, GL_TRUE); ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_DEBUG_BIT; } + if ((flags & __DRI_CTX_FLAG_NO_ERROR) != 0) + ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR; } static __DRIcontext * diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index 0e03c56cf8..08be5631ae 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -1244,7 +1244,11 @@ static const __DRI2rendererQueryExtension intelRendererQueryExtension = { }; static const __DRIrobustnessExtension dri2Robustness = { - .base = { __DRI2_ROBUSTNESS, 1 } + .base = { __DRI2_NO_ERROR, 1 } +}; + +static const __DRInoErrorExtension driNoErrorExtension = { + .base = { __DRI2_NO_ERROR, 1 } }; static const __DRIextension *screenExtensions[] = { @@ -1254,6 +1258,7 @@ static const __DRIextension *screenExtensions[] = { &intelImageExtension.base, &intelRendererQueryExtension.base, &dri2ConfigQueryExtension.base, + &driNoErrorExtension.base, NULL }; @@ -1265,6 +1270,7 @@ static const __DRIextension *intelRobustScreenExtensions[] = { &intelRendererQueryExtension.base, &dri2ConfigQueryExtension.base, &dri2Robustness.base, + &driNoErrorExtension.base, NULL }; |