[PATCH 9/9] glx/dri2: Enable GLX_ARB_create_context_robustness

Ian Romanick idr at freedesktop.org
Thu Jul 12 10:33:40 PDT 2012


On 07/11/2012 10:37 PM, Matt Turner wrote:
> 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?

No, it should have been __DRI_CTX_ATTRIB_RESET_STRATEGY. :(  I making 
changes across multiple repos across multiple sets of review comments. 
I'll change the name in Mesa back to __DRI_CTX_ATTRIB_RESET_NOTIFICATION.


More information about the xorg-devel mailing list