Name

    GLX_ARB_robustness_isolation

Name Strings

    GLX_ARB_robustness_application_isolation
    GLX_ARB_robustness_share_group_isolation

Contributors

    Tim Johansson, Opera (timj 'at' opera.com)
    Bill Licea-Kane (bill.licea-kane 'at' amd.com)
    <TBD>

Contact

    Kenneth Russell, Google (kbr 'at' google.com)

Notice

    Copyright (c) 2012-2013 The Khronos Group Inc. Copyright terms at
        http://www.khronos.org/registry/speccopyright.html

Status

    Complete.
    Approved by the ARB on 2012/06/12.

Version

    Last Modified Date:  August 13, 2012
    Version:             6

Number

    ARB Extension #142

Dependencies

    GLX 1.4 is required.

    GLX_ARB_create_context_robustness is required.

Overview

    GL_ARB_robustness and GLX_ARB_create_context_robustness allow
    creating an OpenGL context supporting graphics reset notification
    behavior.  GLX_ARB_robustness_application_isolation and
    GLX_ARB_robustness_share_group_isolation provide stronger
    guarantees about the possible side-effects of a graphics reset.

IP Status

    No known IP claims.

New Procedures and Functions

    None.

New Types

    None.

New Tokens

    Accepted as a bit in the attribute value for GLX_CONTEXT_FLAGS_ARB
    in the <*attrib_list> argument to glXCreateContextAttribsARB:

        GLX_CONTEXT_RESET_ISOLATION_BIT_ARB             0x00000008    

Additions to the OpenGL / AGL / WGL Specifications

    None. This specification is written for GLX.

Additions to the GLX specification

    Add the following new paragraphs to the description of
    glXCreateContextAttribsARB, after that added by
    GLX_ARB_create_context_robustness:

    "If the application creates all of its OpenGL contexts with the
    GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB attribute set to
    GLX_LOSE_CONTEXT_ON_RESET_ARB, and the
    GLX_CONTEXT_RESET_ISOLATION_BIT_ARB bit set, then:

      If the graphics driver advertises the
      GLX_ARB_robustness_application_isolation extension string, then
      the driver guarantees that if a particular application causes a
      graphics reset to occur:

      1. No other application on the system is affected by the
         graphics reset.

      2. No other application on the system receives any notification
         that the graphics reset occurred.
    
      If the graphics driver advertises the
      GLX_ARB_robustness_share_group_isolation extension string, then
      the driver guarantees that if a context in a particular share
      group causes a graphics reset to occur:

      1. No other share group within the application, nor any other
         application on the system, is affected by the graphics reset.

      2. No other share group within the application, nor any other
         application on the system, receives any notification that the
         graphics reset occurred.

    The GLX_ARB_robustness_application_isolation and
    GLX_ARB_robustness_share_group_isolation extensions do not provide
    guarantees for graphics resets caused by applications which did
    not create their contexts with both the LOSE_CONTEXT_ON_RESET_ARB
    reset notification strategy and the
    GLX_CONTEXT_RESET_ISOLATION_BIT_ARB bit."

    Add a new context creation error to glXCreateContextAttribsARB:

   "* If the reset isolation bits of <share_context> and the newly
    created context are different, BadMatch is generated."

GLX Errors

    None

GLX Protocol

    None

Errors

    GLXBadFBConfig is generated if GLX_CONTEXT_RESET_ISOLATION_BIT_ARB
    is set in attribute GLX_CONTEXT_FLAGS_ARB, and no GL context
    supporting the GL_ARB_robustness_isolation extension with either
    application or share group isolation can be created.

    BadMatch is generated if the reset isolation bit of
    <share_context> does not match the reset isolation bit of the
    context being created.

New State

    None

New Implementation Dependent State

    None

Conformance Tests

    TBD

Sample Code

    TBD

Issues

    1) Do GPU vendors all agree that the share_group_isolation variant
       is supportable? If so, we could drop the application_isolation
       variant, which would simplify the spec.

    2) How will these extension strings be handled and exposed on EGL
       and Mac OS?

Revision History

    Rev.    Date       Author     Changes
    ----  ------------ ---------  ----------------------------------------
      1   18 Apr 2011  kbr        Initial version
      2   28 Apr 2011  kbr        Renamed context_isolation to share_group_isolation
      3   08 Jun 2011  kbr        Made guarantees conditional on using LOSE_CONTEXT_ON_RESET_ARB
      4   17 Aug 2011  kbr        Renamed file to GLX_ARB_robustness_isolation
      5   24 Apr 2012  kbr        Added GLX_CONTEXT_RESET_ISOLATION_BIT_ARB on feedback from Bill Licea-Kane
      6   08 Aug 2012  Jon Leech  Renumbered from #145 to #142
