summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrigori Goronzy <greg@chown.ath.cx>2017-06-29 03:24:15 +0200
committerGrigori Goronzy <greg@chown.ath.cx>2017-06-29 14:39:56 +0200
commit8e6e2aa482cea68015bd6c4dca8812de75b790d9 (patch)
tree878df8574aee7926fbbeafc9da5e559e233dbfd8
parent4c9a701624b4a211f8a8dcabdf2bb41d060eb3fa (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.h21
-rw-r--r--src/gallium/state_trackers/dri/dri2.c6
-rw-r--r--src/gallium/state_trackers/dri/dri_context.c3
-rw-r--r--src/mesa/drivers/dri/common/dri_util.c8
-rw-r--r--src/mesa/drivers/dri/i965/intel_screen.c8
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
};