[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