summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/dri/dri_context.c
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2015-04-29 17:52:02 +0200
committerMarek Olšák <marek.olsak@amd.com>2015-05-12 19:38:45 +0200
commitf1c42475a589531919194c95b97e7558b448eb5c (patch)
tree3eb3ed68cdc04d19bad5a06acea05ea158ecf928 /src/gallium/state_trackers/dri/dri_context.c
parenta0ad18580335d2255d4e1bf222886418c8e2302e (diff)
downloadexternal_mesa3d-f1c42475a589531919194c95b97e7558b448eb5c.zip
external_mesa3d-f1c42475a589531919194c95b97e7558b448eb5c.tar.gz
external_mesa3d-f1c42475a589531919194c95b97e7558b448eb5c.tar.bz2
st/dri: add support for create_context_robustness GLX and EGL extensions
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Diffstat (limited to 'src/gallium/state_trackers/dri/dri_context.c')
-rw-r--r--src/gallium/state_trackers/dri/dri_context.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/gallium/state_trackers/dri/dri_context.c b/src/gallium/state_trackers/dri/dri_context.c
index 8ac81b7..9f11b15 100644
--- a/src/gallium/state_trackers/dri/dri_context.c
+++ b/src/gallium/state_trackers/dri/dri_context.c
@@ -56,6 +56,21 @@ dri_create_context(gl_api api, const struct gl_config * visual,
struct st_context_iface *st_share = NULL;
struct st_context_attribs attribs;
enum st_context_error ctx_err = 0;
+ unsigned allowed_flags = __DRI_CTX_FLAG_DEBUG |
+ __DRI_CTX_FLAG_FORWARD_COMPATIBLE;
+
+ if (screen->has_reset_status_query)
+ allowed_flags |= __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS;
+
+ if (flags & ~allowed_flags) {
+ *error = __DRI_CTX_ERROR_UNKNOWN_FLAG;
+ goto fail;
+ }
+
+ if (!screen->has_reset_status_query && notify_reset) {
+ *error = __DRI_CTX_ERROR_UNKNOWN_ATTRIBUTE;
+ goto fail;
+ }
memset(&attribs, 0, sizeof(attribs));
switch (api) {
@@ -83,15 +98,11 @@ dri_create_context(gl_api api, const struct gl_config * visual,
if ((flags & __DRI_CTX_FLAG_DEBUG) != 0)
attribs.flags |= ST_CONTEXT_FLAG_DEBUG;
- if (flags & ~(__DRI_CTX_FLAG_DEBUG | __DRI_CTX_FLAG_FORWARD_COMPATIBLE)) {
- *error = __DRI_CTX_ERROR_UNKNOWN_FLAG;
- goto fail;
- }
+ if (flags & __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS)
+ attribs.flags |= ST_CONTEXT_FLAG_ROBUST_ACCESS;
- if (notify_reset) {
- *error = __DRI_CTX_ERROR_UNKNOWN_ATTRIBUTE;
- goto fail;
- }
+ if (notify_reset)
+ attribs.flags |= ST_CONTEXT_FLAG_RESET_NOTIFICATION_ENABLED;
if (sharedContextPrivate) {
st_share = ((struct dri_context *)sharedContextPrivate)->st;