[PATCH 9/9] glx/dri2: Enable GLX_ARB_create_context_robustness
Matt Turner
mattst88 at gmail.com
Wed Jul 11 22:37:22 PDT 2012
On Wed, Jul 4, 2012 at 3:21 PM, Ian Romanick <idr at freedesktop.org> wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> If the driver supports __DRI2_ROBUSTNESS, then enable
> GLX_ARB_create_cotnext_robustness as well. If robustness values are
> passed to glXCreateContextAttribsARB and the driver doesn't support
> __DRI2_ROBUSTNESS, existing drivers will already generate the correct
> error values (so that the correct GLX errors are generated).
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
> glx/glxdri2.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
> 1 files changed, 58 insertions(+), 3 deletions(-)
>
> diff --git a/glx/glxdri2.c b/glx/glxdri2.c
> index 8210a2b..1e99179 100644
> --- a/glx/glxdri2.c
> +++ b/glx/glxdri2.c
> @@ -59,6 +59,16 @@ typedef struct __GLXDRIscreen __GLXDRIscreen;
> typedef struct __GLXDRIcontext __GLXDRIcontext;
> typedef struct __GLXDRIdrawable __GLXDRIdrawable;
>
> +
> +#ifdef __DRI2_ROBUSTNESS
> +#define ALL_DRI_CTX_FLAGS (__DRI_CTX_FLAG_DEBUG \
> + | __DRI_CTX_FLAG_FORWARD_COMPATIBLE \
> + | __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS)
> +#else
> +#define ALL_DRI_CTX_FLAGS (__DRI_CTX_FLAG_DEBUG \
> + | __DRI_CTX_FLAG_FORWARD_COMPATIBLE)
> +#endif
> +
> struct __GLXDRIscreen {
> __GLXscreen base;
> __DRIscreen *driScreen;
> @@ -381,7 +391,7 @@ __glXDRIscreenDestroy(__GLXscreen * baseScreen)
> static Bool
> dri2_convert_glx_attribs(unsigned num_attribs, const uint32_t *attribs,
> unsigned *major_ver, unsigned *minor_ver,
> - uint32_t *flags, int *api, unsigned *error)
> + uint32_t *flags, int *api, int *reset, unsigned *error)
> {
> unsigned i;
>
> @@ -395,6 +405,11 @@ dri2_convert_glx_attribs(unsigned num_attribs, const uint32_t *attribs,
>
> *major_ver = 1;
> *minor_ver = 0;
> +#ifdef __DRI2_ROBUSTNESS
> + *reset = __DRI_CTX_RESET_NO_NOTIFICATION;
> +#else
> + (void) reset;
> +#endif
>
> for (i = 0; i < num_attribs; i++) {
> switch (attribs[i * 2]) {
> @@ -425,6 +440,26 @@ dri2_convert_glx_attribs(unsigned num_attribs, const uint32_t *attribs,
> return False;
> }
> break;
> +#ifdef __DRI2_ROBUSTNESS
> + case GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB:
> + if (screen->dri2->base.version >= 4) {
> + *error = BadValue;
> + return False;
> + }
> +
> + switch (attribs[i * 2 + 1]) {
> + case GLX_NO_RESET_NOTIFICATION_ARB:
> + *reset = __DRI_CTX_RESET_NO_NOTIFICATION;
> + break;
> + case GLX_LOSE_CONTEXT_ON_RESET_ARB:
> + *reset = __DRI_CTX_RESET_LOSE_CONTEXT;
> + break;
> + default:
> + *error = BadValue;
> + return False;
> + }
> + break;
> +#endif
> default:
> /* If an unknown attribute is received, fail.
> */
> @@ -435,7 +470,7 @@ dri2_convert_glx_attribs(unsigned num_attribs, const uint32_t *attribs,
>
> /* Unknown flag value.
> */
> - if (*flags & ~(__DRI_CTX_FLAG_DEBUG | __DRI_CTX_FLAG_FORWARD_COMPATIBLE)) {
> + if ((*flags & ~ALL_DRI_CTX_FLAGS) != 0) {
> *error = BadValue;
> return False;
> }
> @@ -473,12 +508,14 @@ create_driver_context(__GLXDRIcontext * context,
> unsigned major_ver;
> unsigned minor_ver;
> uint32_t flags;
> + int reset;
> int api;
>
> if (num_attribs != 0) {
> if (!dri2_convert_glx_attribs(num_attribs, attribs,
> &major_ver, &minor_ver,
> - &flags, &api, (unsigned *) error))
> + &flags, &api, &reset,
> + (unsigned *) error))
> return NULL;
>
> ctx_attribs[num_ctx_attribs++] = __DRI_CTX_ATTRIB_MAJOR_VERSION;
> @@ -494,6 +531,14 @@ create_driver_context(__GLXDRIcontext * context,
> */
> ctx_attribs[num_ctx_attribs++] = flags;
> }
> +
> +#ifdef __DRI2_ROBUSTNESS
> + if (reset != __DRI_CTX_NO_RESET_NOTIFICATION) {
> + ctx_attribs[num_ctx_attribs++] =
> + __DRI_CTX_ATTRIB_RESET_NOTIFICATION;
Where is __DRI_CTX_ATTRIB_RESET_NOTIFICATION defined?
The only place I can find it defined is in the robustness branch of
your Mesa tree:
http://cgit.freedesktop.org/~idr/mesa/commit/?h=robustness&id=60435317099e463da60a351a212bd217f06904f5
Should that be upstream?
More information about the xorg-devel
mailing list