diff options
-rw-r--r-- | include/GL/internal/dri_interface.h | 6 | ||||
-rw-r--r-- | src/egl/drivers/dri2/egl_dri2.c | 38 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/dri_context.c | 1 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/dri_context.h | 1 | ||||
-rw-r--r-- | src/mesa/drivers/dri/common/dri_util.c | 7 | ||||
-rw-r--r-- | src/mesa/drivers/dri/common/dri_util.h | 9 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i915/intel_screen.c | 11 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.c | 7 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.h | 17 | ||||
-rw-r--r-- | src/mesa/drivers/dri/nouveau/nouveau_context.c | 1 | ||||
-rw-r--r-- | src/mesa/drivers/dri/nouveau/nouveau_context.h | 4 | ||||
-rw-r--r-- | src/mesa/drivers/dri/r200/r200_context.c | 1 | ||||
-rw-r--r-- | src/mesa/drivers/dri/r200/r200_context.h | 1 | ||||
-rw-r--r-- | src/mesa/drivers/dri/radeon/radeon_context.c | 1 | ||||
-rw-r--r-- | src/mesa/drivers/dri/radeon/radeon_context.h | 1 | ||||
-rw-r--r-- | src/mesa/drivers/dri/swrast/swrast.c | 1 |
16 files changed, 77 insertions, 30 deletions
diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index 7ed0169a984..98402eae057 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -1100,6 +1100,12 @@ struct __DRIdri2LoaderExtensionRec { #define __DRI_CTX_RESET_LOSE_CONTEXT 1 /*@}*/ +#define __DRI_CTX_ATTRIB_PRIORITY 4 + +#define __DRI_CTX_PRIORITY_LOW 0 +#define __DRI_CTX_PRIORITY_MEDIUM 1 +#define __DRI_CTX_PRIORITY_HIGH 2 + /** * \name Reasons that __DRIdri2Extension::createContextAttribs might fail */ diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index e18e05e4a99..503450542e5 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -92,6 +92,8 @@ #define DRM_FORMAT_MOD_INVALID ((1ULL<<56) - 1) #endif +#define NUM_ATTRIBS 10 + static void dri_set_background_context(void *loaderPrivate) { @@ -1166,7 +1168,7 @@ dri2_fill_context_attribs(struct dri2_egl_context *dri2_ctx, { int pos = 0; - assert(*num_attribs >= 8); + assert(*num_attribs >= NUM_ATTRIBS); ctx_attribs[pos++] = __DRI_CTX_ATTRIB_MAJOR_VERSION; ctx_attribs[pos++] = dri2_ctx->base.ClientMajorVersion; @@ -1203,6 +1205,28 @@ dri2_fill_context_attribs(struct dri2_egl_context *dri2_ctx, ctx_attribs[pos++] = __DRI_CTX_RESET_LOSE_CONTEXT; } + if (dri2_ctx->base.ContextPriority != EGL_CONTEXT_PRIORITY_MEDIUM_IMG) { + unsigned val; + + switch (dri2_ctx->base.ContextPriority) { + case EGL_CONTEXT_PRIORITY_HIGH_IMG: + val = __DRI_CTX_PRIORITY_HIGH; + break; + case EGL_CONTEXT_PRIORITY_MEDIUM_IMG: + val = __DRI_CTX_PRIORITY_MEDIUM; + break; + case EGL_CONTEXT_PRIORITY_LOW_IMG: + val = __DRI_CTX_PRIORITY_LOW; + break; + default: + _eglError(EGL_BAD_CONFIG, "eglCreateContext"); + return false; + } + + ctx_attribs[pos++] = __DRI_CTX_ATTRIB_PRIORITY; + ctx_attribs[pos++] = val; + } + *num_attribs = pos; return true; @@ -1317,8 +1341,8 @@ dri2_create_context(_EGLDriver *drv, _EGLDisplay *disp, _EGLConfig *conf, if (dri2_dpy->image_driver) { unsigned error; - unsigned num_attribs = 8; - uint32_t ctx_attribs[8]; + unsigned num_attribs = NUM_ATTRIBS; + uint32_t ctx_attribs[NUM_ATTRIBS]; if (!dri2_fill_context_attribs(dri2_ctx, dri2_dpy, ctx_attribs, &num_attribs)) @@ -1337,8 +1361,8 @@ dri2_create_context(_EGLDriver *drv, _EGLDisplay *disp, _EGLConfig *conf, } else if (dri2_dpy->dri2) { if (dri2_dpy->dri2->base.version >= 3) { unsigned error; - unsigned num_attribs = 8; - uint32_t ctx_attribs[8]; + unsigned num_attribs = NUM_ATTRIBS; + uint32_t ctx_attribs[NUM_ATTRIBS]; if (!dri2_fill_context_attribs(dri2_ctx, dri2_dpy, ctx_attribs, &num_attribs)) @@ -1366,8 +1390,8 @@ dri2_create_context(_EGLDriver *drv, _EGLDisplay *disp, _EGLConfig *conf, assert(dri2_dpy->swrast); if (dri2_dpy->swrast->base.version >= 3) { unsigned error; - unsigned num_attribs = 8; - uint32_t ctx_attribs[8]; + unsigned num_attribs = NUM_ATTRIBS; + uint32_t ctx_attribs[NUM_ATTRIBS]; if (!dri2_fill_context_attribs(dri2_ctx, dri2_dpy, ctx_attribs, &num_attribs)) diff --git a/src/gallium/state_trackers/dri/dri_context.c b/src/gallium/state_trackers/dri/dri_context.c index 8b9323faa4f..8776aacc093 100644 --- a/src/gallium/state_trackers/dri/dri_context.c +++ b/src/gallium/state_trackers/dri/dri_context.c @@ -47,6 +47,7 @@ dri_create_context(gl_api api, const struct gl_config * visual, unsigned minor_version, uint32_t flags, bool notify_reset, + unsigned priority, unsigned *error, void *sharedContextPrivate) { diff --git a/src/gallium/state_trackers/dri/dri_context.h b/src/gallium/state_trackers/dri/dri_context.h index 96f06442fa0..afa9c49ff3b 100644 --- a/src/gallium/state_trackers/dri/dri_context.h +++ b/src/gallium/state_trackers/dri/dri_context.h @@ -90,6 +90,7 @@ dri_create_context(gl_api api, unsigned minor_version, uint32_t flags, bool notify_reset, + unsigned priority, unsigned *error, void *sharedContextPrivate); diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c index 31a3040365a..1cff0ddb2de 100644 --- a/src/mesa/drivers/dri/common/dri_util.c +++ b/src/mesa/drivers/dri/common/dri_util.c @@ -306,6 +306,7 @@ driCreateContextAttribs(__DRIscreen *screen, int api, unsigned minor_version = 0; uint32_t flags = 0; bool notify_reset = false; + unsigned priority = __DRI_CTX_PRIORITY_MEDIUM; assert((num_attribs == 0) || (attribs != NULL)); @@ -348,6 +349,9 @@ driCreateContextAttribs(__DRIscreen *screen, int api, notify_reset = (attribs[i * 2 + 1] != __DRI_CTX_RESET_NO_NOTIFICATION); break; + case __DRI_CTX_ATTRIB_PRIORITY: + priority = attribs[i * 2 + 1]; + break; default: /* We can't create a context that satisfies the requirements of an * attribute that we don't understand. Return failure. @@ -451,7 +455,8 @@ driCreateContextAttribs(__DRIscreen *screen, int api, if (!screen->driver->CreateContext(mesa_api, modes, context, major_version, minor_version, - flags, notify_reset, error, shareCtx)) { + flags, notify_reset, priority, + error, shareCtx)) { free(context); return NULL; } diff --git a/src/mesa/drivers/dri/common/dri_util.h b/src/mesa/drivers/dri/common/dri_util.h index 25a3ae47a23..ecc2a475073 100644 --- a/src/mesa/drivers/dri/common/dri_util.h +++ b/src/mesa/drivers/dri/common/dri_util.h @@ -85,11 +85,12 @@ struct __DriverAPIRec { GLboolean (*CreateContext)(gl_api api, const struct gl_config *glVis, __DRIcontext *driContextPriv, - unsigned major_version, - unsigned minor_version, - uint32_t flags, + unsigned major_version, + unsigned minor_version, + uint32_t flags, bool notify_reset, - unsigned *error, + unsigned priority, + unsigned *error, void *sharedContextPrivate); void (*DestroyContext)(__DRIcontext *driContextPriv); diff --git a/src/mesa/drivers/dri/i915/intel_screen.c b/src/mesa/drivers/dri/i915/intel_screen.c index ba49e90fef5..1621a6246ba 100644 --- a/src/mesa/drivers/dri/i915/intel_screen.c +++ b/src/mesa/drivers/dri/i915/intel_screen.c @@ -956,13 +956,14 @@ i915CreateContext(int api, static GLboolean intelCreateContext(gl_api api, - const struct gl_config * mesaVis, + const struct gl_config * mesaVis, __DRIcontext * driContextPriv, - unsigned major_version, - unsigned minor_version, - uint32_t flags, + unsigned major_version, + unsigned minor_version, + uint32_t flags, bool notify_reset, - unsigned *error, + unsigned priority, + unsigned *error, void *sharedContextPrivate) { bool success = false; diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index 609d8150641..a86367cc46b 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -820,14 +820,15 @@ brw_process_driconf_options(struct brw_context *brw) GLboolean brwCreateContext(gl_api api, - const struct gl_config *mesaVis, - __DRIcontext *driContextPriv, + const struct gl_config *mesaVis, + __DRIcontext *driContextPriv, unsigned major_version, unsigned minor_version, uint32_t flags, bool notify_reset, + unsigned priority, unsigned *dri_ctx_error, - void *sharedContextPrivate) + void *sharedContextPrivate) { struct gl_context *shareCtx = (struct gl_context *) sharedContextPrivate; struct intel_screen *screen = driContextPriv->driScreenPriv->driverPrivate; diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index 679b848c505..26e71e62b54 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -1240,14 +1240,15 @@ void intel_resolve_for_dri2_flush(struct brw_context *brw, __DRIdrawable *drawable); GLboolean brwCreateContext(gl_api api, - const struct gl_config *mesaVis, - __DRIcontext *driContextPriv, - unsigned major_version, - unsigned minor_version, - uint32_t flags, - bool notify_reset, - unsigned *error, - void *sharedContextPrivate); + const struct gl_config *mesaVis, + __DRIcontext *driContextPriv, + unsigned major_version, + unsigned minor_version, + uint32_t flags, + bool notify_reset, + unsigned priority, + unsigned *error, + void *sharedContextPrivate); /*====================================================================== * brw_misc_state.c diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.c b/src/mesa/drivers/dri/nouveau/nouveau_context.c index d6f9e533848..39620e10214 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_context.c +++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c @@ -55,6 +55,7 @@ nouveau_context_create(gl_api api, unsigned minor_version, uint32_t flags, bool notify_reset, + unsigned priority, unsigned *error, void *share_ctx) { diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.h b/src/mesa/drivers/dri/nouveau/nouveau_context.h index b6cbde44ac6..6ab865c7bde 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_context.h +++ b/src/mesa/drivers/dri/nouveau/nouveau_context.h @@ -111,8 +111,8 @@ GLboolean nouveau_context_create(gl_api api, const struct gl_config *visual, __DRIcontext *dri_ctx, unsigned major_version, unsigned minor_version, - uint32_t flags, bool notify_reset, unsigned *error, - void *share_ctx); + uint32_t flags, bool notify_reset, unsigned priority, + unsigned *error, void *share_ctx); GLboolean nouveau_context_init(struct gl_context *ctx, gl_api api, diff --git a/src/mesa/drivers/dri/r200/r200_context.c b/src/mesa/drivers/dri/r200/r200_context.c index b6354dccbb9..bd4f8b62cd2 100644 --- a/src/mesa/drivers/dri/r200/r200_context.c +++ b/src/mesa/drivers/dri/r200/r200_context.c @@ -178,6 +178,7 @@ GLboolean r200CreateContext( gl_api api, unsigned minor_version, uint32_t flags, bool notify_reset, + unsigned priority, unsigned *error, void *sharedContextPrivate) { diff --git a/src/mesa/drivers/dri/r200/r200_context.h b/src/mesa/drivers/dri/r200/r200_context.h index 550203d24da..200e0a24312 100644 --- a/src/mesa/drivers/dri/r200/r200_context.h +++ b/src/mesa/drivers/dri/r200/r200_context.h @@ -632,6 +632,7 @@ extern GLboolean r200CreateContext( gl_api api, unsigned minor_version, uint32_t flags, bool notify_reset, + unsigned priority, unsigned *error, void *sharedContextPrivate); extern GLboolean r200MakeCurrent( __DRIcontext *driContextPriv, diff --git a/src/mesa/drivers/dri/radeon/radeon_context.c b/src/mesa/drivers/dri/radeon/radeon_context.c index c1ee8d8a767..866dc80c98f 100644 --- a/src/mesa/drivers/dri/radeon/radeon_context.c +++ b/src/mesa/drivers/dri/radeon/radeon_context.c @@ -144,6 +144,7 @@ r100CreateContext( gl_api api, unsigned minor_version, uint32_t flags, bool notify_reset, + unsigned priority, unsigned *error, void *sharedContextPrivate) { diff --git a/src/mesa/drivers/dri/radeon/radeon_context.h b/src/mesa/drivers/dri/radeon/radeon_context.h index 88a295386ca..4124f50db5e 100644 --- a/src/mesa/drivers/dri/radeon/radeon_context.h +++ b/src/mesa/drivers/dri/radeon/radeon_context.h @@ -456,6 +456,7 @@ extern GLboolean r100CreateContext( gl_api api, unsigned minor_version, uint32_t flags, bool notify_reset, + unsigned priority, unsigned *error, void *sharedContextPrivate); diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c index 45d8279d364..6b71d806f09 100644 --- a/src/mesa/drivers/dri/swrast/swrast.c +++ b/src/mesa/drivers/dri/swrast/swrast.c @@ -756,6 +756,7 @@ dri_create_context(gl_api api, unsigned minor_version, uint32_t flags, bool notify_reset, + unsigned priority, unsigned *error, void *sharedContextPrivate) { |