15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    ARB_robustness
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_ARB_robustness
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContributors
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Acorn Pooley, NVIDIA
125bd8deadSopenharmony_ci    Anton Staaf, Google
135bd8deadSopenharmony_ci    Barthold Lichtenbelt, NVIDIA
145bd8deadSopenharmony_ci    Bruce Merry, ARM
155bd8deadSopenharmony_ci    Chris Marrin, Apple
165bd8deadSopenharmony_ci    Greg Roth, NVIDIA
175bd8deadSopenharmony_ci    Jeff Bolz, NVIDIA
185bd8deadSopenharmony_ci    Jon Leech 
195bd8deadSopenharmony_ci    Kenneth Russell, Google
205bd8deadSopenharmony_ci    Kent Miller, Apple
215bd8deadSopenharmony_ci    Piers Daniell, NVIDIA
225bd8deadSopenharmony_ci    Vladimir Vukicevic, Mozilla
235bd8deadSopenharmony_ci
245bd8deadSopenharmony_ciContact
255bd8deadSopenharmony_ci
265bd8deadSopenharmony_ci    Mark Kilgard, NVIDIA (mjk 'at' nvidia.com)
275bd8deadSopenharmony_ci
285bd8deadSopenharmony_ciNotice
295bd8deadSopenharmony_ci
305bd8deadSopenharmony_ci    Copyright (c) 2010-2013 The Khronos Group Inc. Copyright terms at
315bd8deadSopenharmony_ci        http://www.khronos.org/registry/speccopyright.html
325bd8deadSopenharmony_ci
335bd8deadSopenharmony_ciSpecification Update Policy
345bd8deadSopenharmony_ci
355bd8deadSopenharmony_ci    Khronos-approved extension specifications are updated in response to
365bd8deadSopenharmony_ci    issues and bugs prioritized by the Khronos OpenGL Working Group. For
375bd8deadSopenharmony_ci    extensions which have been promoted to a core Specification, fixes will
385bd8deadSopenharmony_ci    first appear in the latest version of that core Specification, and will
395bd8deadSopenharmony_ci    eventually be backported to the extension document. This policy is
405bd8deadSopenharmony_ci    described in more detail at
415bd8deadSopenharmony_ci        https://www.khronos.org/registry/OpenGL/docs/update_policy.php
425bd8deadSopenharmony_ci
435bd8deadSopenharmony_ciStatus
445bd8deadSopenharmony_ci
455bd8deadSopenharmony_ci    Complete. Approved by the ARB on June 9, 2010.
465bd8deadSopenharmony_ci    Approved by the Khronos Board of Promoters on July 23, 2010.
475bd8deadSopenharmony_ci
485bd8deadSopenharmony_ciVersion
495bd8deadSopenharmony_ci
505bd8deadSopenharmony_ci    Last Modified Date:  June 25, 2014
515bd8deadSopenharmony_ci    Version:             18
525bd8deadSopenharmony_ci
535bd8deadSopenharmony_ciNumber
545bd8deadSopenharmony_ci
555bd8deadSopenharmony_ci    ARB Extension #105
565bd8deadSopenharmony_ci
575bd8deadSopenharmony_ciDependencies
585bd8deadSopenharmony_ci
595bd8deadSopenharmony_ci    This extension is written against the OpenGL 3.2 Compatibility
605bd8deadSopenharmony_ci    Profile Specification but can apply to OpenGL 1.1 and up.
615bd8deadSopenharmony_ci
625bd8deadSopenharmony_ci    This specification interacts with the ARB_imaging subset of the OpenGL
635bd8deadSopenharmony_ci    3.2 Compatibility Profile.
645bd8deadSopenharmony_ci
655bd8deadSopenharmony_ci    This specification interacts with the OpenGL 3.2 Core Profile.
665bd8deadSopenharmony_ci
675bd8deadSopenharmony_ci    This specification interacts with EXT_direct_state_access.
685bd8deadSopenharmony_ci
695bd8deadSopenharmony_ci    GLX_ARB_create_context_robustness and
705bd8deadSopenharmony_ci    WGL_ARB_create_context_robustness are used to determine if a context
715bd8deadSopenharmony_ci    implementing this extension supports robust buffer access, and if it
725bd8deadSopenharmony_ci    supports reset notification. Equivalent platform-dependent
735bd8deadSopenharmony_ci    mechanisms in other window-system integration layers such as EGL and
745bd8deadSopenharmony_ci    AGL may exist for those platforms.
755bd8deadSopenharmony_ci
765bd8deadSopenharmony_ciOverview
775bd8deadSopenharmony_ci
785bd8deadSopenharmony_ci    Several recent trends in how OpenGL integrates into modern computer
795bd8deadSopenharmony_ci    systems have created new requirements for robustness and security
805bd8deadSopenharmony_ci    for OpenGL rendering contexts.
815bd8deadSopenharmony_ci    
825bd8deadSopenharmony_ci    Additionally GPU architectures now support hardware fault detection;
835bd8deadSopenharmony_ci    for example, video memory supporting ECC (error correcting codes)
845bd8deadSopenharmony_ci    and error detection.  OpenGL contexts should be capable of recovering
855bd8deadSopenharmony_ci    from hardware faults such as uncorrectable memory errors.  Along with
865bd8deadSopenharmony_ci    recovery from such hardware faults, the recovery mechanism can
875bd8deadSopenharmony_ci    also allow recovery from video memory access exceptions and system
885bd8deadSopenharmony_ci    software failures.  System software failures can be due to device
895bd8deadSopenharmony_ci    changes or driver failures.
905bd8deadSopenharmony_ci
915bd8deadSopenharmony_ci    Demands for increased software robustness and concerns about malware
925bd8deadSopenharmony_ci    exploiting buffer overflows have lead API designers to provide
935bd8deadSopenharmony_ci    additional "safe" APIs that bound the amount of data returned by
945bd8deadSopenharmony_ci    an API query.  For example, the safer "snprintf" or "_snprintf"
955bd8deadSopenharmony_ci    routines are prefered over "sprintf".
965bd8deadSopenharmony_ci    
975bd8deadSopenharmony_ci    The OpenGL API has many such robustness perils.  OpenGL queries
985bd8deadSopenharmony_ci    return (write) some number of bytes to a buffer indicated by a
995bd8deadSopenharmony_ci    pointer parameter.  The exact number of bytes written by existing
1005bd8deadSopenharmony_ci    OpenGL queries is not expressed directly by any specific parameter;
1015bd8deadSopenharmony_ci    instead the number of bytes returned is a complex function of one
1025bd8deadSopenharmony_ci    or more query arguments, sometimes context state such as pixel
1035bd8deadSopenharmony_ci    store modes or the active texture selector, and the current state
1045bd8deadSopenharmony_ci    of an object (such as a texture level's number of total texels).
1055bd8deadSopenharmony_ci    By the standards of modern API design, such queries are not "safe".
1065bd8deadSopenharmony_ci    Making these queries safer involves introducing a new query API with
1075bd8deadSopenharmony_ci    an additional parameter that specifies the number of bytes in the
1085bd8deadSopenharmony_ci    buffer and never writing bytes beyond that limit.
1095bd8deadSopenharmony_ci
1105bd8deadSopenharmony_ci    Multi-threaded use of OpenGL contexts in a "share group" allow
1115bd8deadSopenharmony_ci    sharing of objects such as textures and programs.  Such sharing in
1125bd8deadSopenharmony_ci    conjunction with concurrent OpenGL commands stream execution by two
1135bd8deadSopenharmony_ci    or more contexts introduces hazards whereby one context can change
1145bd8deadSopenharmony_ci    objects in ways that can cause buffer overflows for another context's
1155bd8deadSopenharmony_ci    OpenGL queries.
1165bd8deadSopenharmony_ci
1175bd8deadSopenharmony_ci    The original ARB_vertex_buffer_object extension includes an issue
1185bd8deadSopenharmony_ci    that explicitly states program termination is allowed when
1195bd8deadSopenharmony_ci    out-of-bounds vertex buffer object fetches occur. Modern GPUs
1205bd8deadSopenharmony_ci    capable of DirectX 10 enforce the well-defined behavior of always
1215bd8deadSopenharmony_ci    returning zero values for indices or non-fixed components in this
1225bd8deadSopenharmony_ci    case. Older GPUs may require extra checks to enforce well-defined
1235bd8deadSopenharmony_ci    (and termination free) behavior, but this expense is warranted when
1245bd8deadSopenharmony_ci    processing potentially untrusted content.
1255bd8deadSopenharmony_ci
1265bd8deadSopenharmony_ci    The intent of this extension is to address some specific robustness
1275bd8deadSopenharmony_ci    goals:
1285bd8deadSopenharmony_ci
1295bd8deadSopenharmony_ci    *   For all existing OpenGL queries, provide additional "safe" APIs 
1305bd8deadSopenharmony_ci        that limit data written to user pointers to a buffer size in 
1315bd8deadSopenharmony_ci        bytes that is an explicit additional parameter of the query.
1325bd8deadSopenharmony_ci
1335bd8deadSopenharmony_ci    *   Provide a mechanism for an OpenGL application to learn about
1345bd8deadSopenharmony_ci        graphics resets that affect the context.  When a graphics reset
1355bd8deadSopenharmony_ci        occurs, the OpenGL context becomes unusable and the application
1365bd8deadSopenharmony_ci        must create a new context to continue operation. Detecting a
1375bd8deadSopenharmony_ci        graphics reset happens through an inexpensive query.
1385bd8deadSopenharmony_ci
1395bd8deadSopenharmony_ci    *   Provide an enable to guarantee that out-of-bounds buffer object
1405bd8deadSopenharmony_ci        accesses by the GPU will have deterministic behavior and preclude
1415bd8deadSopenharmony_ci        application instability or termination due to an incorrect buffer
1425bd8deadSopenharmony_ci        access.  Such accesses include vertex buffer fetches of
1435bd8deadSopenharmony_ci        attributes and indices, and indexed reads of uniforms or
1445bd8deadSopenharmony_ci        parameters from buffers.
1455bd8deadSopenharmony_ci
1465bd8deadSopenharmony_ci    In one anticipated usage model, WebGL contexts may make use of these
1475bd8deadSopenharmony_ci    robust features to grant greater stability when using untrusted code.
1485bd8deadSopenharmony_ci    WebGL contexts cannot call OpenGL commands directly but rather must
1495bd8deadSopenharmony_ci    route all OpenGL API calls through the web browser.  It is then the
1505bd8deadSopenharmony_ci    web browser that configures the context, using the commands in this
1515bd8deadSopenharmony_ci    extension, to enforce safe behavior. In this scenario, the WebGL
1525bd8deadSopenharmony_ci    content cannot specify or change the use of this extension's features
1535bd8deadSopenharmony_ci    itself; the web browser enforces this policy.
1545bd8deadSopenharmony_ci
1555bd8deadSopenharmony_ci    There are other well-known robustness issues with the OpenGL API
1565bd8deadSopenharmony_ci    which this extension does not address.  For example, selector-based
1575bd8deadSopenharmony_ci    OpenGL commands are a well-known source of programming errors.
1585bd8deadSopenharmony_ci    Code to manipulate texture state may assume the active texture
1595bd8deadSopenharmony_ci    selector is set appropriately when an intervening function call
1605bd8deadSopenharmony_ci    obscures a change to the active texture state resulting in
1615bd8deadSopenharmony_ci    incorrectly updated or queried state.  The EXT_direct_state_access
1625bd8deadSopenharmony_ci    extension introduces selector-free OpenGL commands and queries to
1635bd8deadSopenharmony_ci    address that particular issue so this extension does not.
1645bd8deadSopenharmony_ci
1655bd8deadSopenharmony_ci    The intent of this extension is NOT to deprecate any existing API
1665bd8deadSopenharmony_ci    and thereby introduce compatibility issues and coding burdens on
1675bd8deadSopenharmony_ci    existing code, but rather to provide new APIs to ensure a level of
1685bd8deadSopenharmony_ci    robustness commensurate with the expectations of modern applications
1695bd8deadSopenharmony_ci    of OpenGL.
1705bd8deadSopenharmony_ci
1715bd8deadSopenharmony_ciIP Status
1725bd8deadSopenharmony_ci
1735bd8deadSopenharmony_ci    No known IP claims.
1745bd8deadSopenharmony_ci
1755bd8deadSopenharmony_ciNew Procedures and Functions
1765bd8deadSopenharmony_ci
1775bd8deadSopenharmony_ci    GRAPHICS RESET DETECTION AND RECOVERY
1785bd8deadSopenharmony_ci
1795bd8deadSopenharmony_ci        enum GetGraphicsResetStatusARB();
1805bd8deadSopenharmony_ci
1815bd8deadSopenharmony_ci    SIZED BUFFER QUERIES
1825bd8deadSopenharmony_ci
1835bd8deadSopenharmony_ci    OpenGL 1.0 sized buffer queries
1845bd8deadSopenharmony_ci
1855bd8deadSopenharmony_ci        void GetnMapdvARB(enum target, enum query, sizei bufSize, double *v);
1865bd8deadSopenharmony_ci        void GetnMapfvARB(enum target, enum query, sizei bufSize, float *v);
1875bd8deadSopenharmony_ci        void GetnMapivARB(enum target, enum query, sizei bufSize, int *v);
1885bd8deadSopenharmony_ci
1895bd8deadSopenharmony_ci        void GetnPixelMapfvARB(enum map, sizei bufSize, float *values);
1905bd8deadSopenharmony_ci        void GetnPixelMapuivARB(enum map, sizei bufSize, uint *values);
1915bd8deadSopenharmony_ci        void GetnPixelMapusvARB(enum map, sizei bufSize, ushort *values);
1925bd8deadSopenharmony_ci
1935bd8deadSopenharmony_ci        void GetnPolygonStippleARB(sizei bufSize, ubyte *pattern);
1945bd8deadSopenharmony_ci
1955bd8deadSopenharmony_ci        void GetnTexImageARB(enum target, int level, enum format,
1965bd8deadSopenharmony_ci                             enum type, sizei bufSize, void *img);
1975bd8deadSopenharmony_ci
1985bd8deadSopenharmony_ci        void ReadnPixelsARB(int x, int y, sizei width, sizei height,
1995bd8deadSopenharmony_ci                            enum format, enum type, sizei bufSize,
2005bd8deadSopenharmony_ci                            void *data);
2015bd8deadSopenharmony_ci
2025bd8deadSopenharmony_ci    ARB_imaging sized buffer queries
2035bd8deadSopenharmony_ci
2045bd8deadSopenharmony_ci        void GetnColorTableARB(enum target, enum format, enum type,
2055bd8deadSopenharmony_ci                               sizei bufSize, void *table);
2065bd8deadSopenharmony_ci        void GetnConvolutionFilterARB(enum target, enum format,
2075bd8deadSopenharmony_ci                                      enum type, sizei bufSize, void *image);
2085bd8deadSopenharmony_ci        void GetnSeparableFilterARB(enum target, enum format, enum type,
2095bd8deadSopenharmony_ci                                    sizei rowBufSize, void *row,
2105bd8deadSopenharmony_ci                                    sizei columnBufSize, void *column,
2115bd8deadSopenharmony_ci                                    void *span);
2125bd8deadSopenharmony_ci        void GetnHistogramARB(enum target, boolean reset, enum format,
2135bd8deadSopenharmony_ci                              enum type, sizei bufSize, void *values);
2145bd8deadSopenharmony_ci        void GetnMinmaxARB(enum target, boolean reset, enum format,
2155bd8deadSopenharmony_ci                           enum type, sizei bufSize, void *values);
2165bd8deadSopenharmony_ci
2175bd8deadSopenharmony_ci    OpenGL 1.3 sized buffer queries
2185bd8deadSopenharmony_ci
2195bd8deadSopenharmony_ci        void GetnCompressedTexImageARB(enum target, int lod,
2205bd8deadSopenharmony_ci                                       sizei bufSize, void *img);
2215bd8deadSopenharmony_ci
2225bd8deadSopenharmony_ci    OpenGL 2.0 sized buffer queries
2235bd8deadSopenharmony_ci
2245bd8deadSopenharmony_ci        void GetnUniformfvARB(uint program, int location, sizei bufSize,
2255bd8deadSopenharmony_ci                              float *params);
2265bd8deadSopenharmony_ci        void GetnUniformivARB(uint program, int location, sizei bufSize,
2275bd8deadSopenharmony_ci                              int *params);
2285bd8deadSopenharmony_ci        void GetnUniformuivARB(uint program, int location, sizei bufSize,
2295bd8deadSopenharmony_ci                               uint *params);
2305bd8deadSopenharmony_ci        void GetnUniformdvARB(uint program, int location, sizei bufSize,
2315bd8deadSopenharmony_ci                              double *params);
2325bd8deadSopenharmony_ci
2335bd8deadSopenharmony_ciNew Tokens
2345bd8deadSopenharmony_ci
2355bd8deadSopenharmony_ci    Returned by GetGraphicsResetStatusARB:
2365bd8deadSopenharmony_ci
2375bd8deadSopenharmony_ci        NO_ERROR                                        0x0000
2385bd8deadSopenharmony_ci        GUILTY_CONTEXT_RESET_ARB                        0x8253
2395bd8deadSopenharmony_ci        INNOCENT_CONTEXT_RESET_ARB                      0x8254
2405bd8deadSopenharmony_ci        UNKNOWN_CONTEXT_RESET_ARB                       0x8255
2415bd8deadSopenharmony_ci
2425bd8deadSopenharmony_ci    Accepted by the <value> parameter of GetBooleanv, GetIntegerv,
2435bd8deadSopenharmony_ci    GetInteger64v, GetFloatv, and GetDoublev:
2445bd8deadSopenharmony_ci
2455bd8deadSopenharmony_ci        RESET_NOTIFICATION_STRATEGY_ARB                 0x8256
2465bd8deadSopenharmony_ci
2475bd8deadSopenharmony_ci    Returned by GetIntegerv and related simple queries when
2485bd8deadSopenharmony_ci    <value> is RESET_NOTIFICATION_STRATEGY_ARB:
2495bd8deadSopenharmony_ci
2505bd8deadSopenharmony_ci        LOSE_CONTEXT_ON_RESET_ARB                       0x8252
2515bd8deadSopenharmony_ci        NO_RESET_NOTIFICATION_ARB                       0x8261
2525bd8deadSopenharmony_ci
2535bd8deadSopenharmony_ci    Returned by GetIntegerv when <pname> is CONTEXT_FLAGS:
2545bd8deadSopenharmony_ci
2555bd8deadSopenharmony_ci        CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB          0x00000004
2565bd8deadSopenharmony_ci
2575bd8deadSopenharmony_ci
2585bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 3.2 (Compatibility Profile)
2595bd8deadSopenharmony_ciSpecification (OpenGL Operation)
2605bd8deadSopenharmony_ci
2615bd8deadSopenharmony_ciAdd a new subsection after 2.5 "GL Errors" and renumber subsequent
2625bd8deadSopenharmony_cisections accordingly
2635bd8deadSopenharmony_ci
2645bd8deadSopenharmony_ci    2.6 "Graphics Reset Recovery"
2655bd8deadSopenharmony_ci
2665bd8deadSopenharmony_ci    Certain events can result in a reset of the GL context. Such a reset
2675bd8deadSopenharmony_ci    causes all context state to be lost. Recovery from such events
2685bd8deadSopenharmony_ci    requires recreation of all objects in the affected context. The
2695bd8deadSopenharmony_ci    current status of the graphics reset state is returned by
2705bd8deadSopenharmony_ci
2715bd8deadSopenharmony_ci        enum GetGraphicsResetStatusARB();
2725bd8deadSopenharmony_ci
2735bd8deadSopenharmony_ci    The symbolic constant returned indicates if the GL context has been
2745bd8deadSopenharmony_ci    in a reset state at any point since the last call to
2755bd8deadSopenharmony_ci    GetGraphicsResetStatusARB. NO_ERROR indicates that the GL context
2765bd8deadSopenharmony_ci    has not been in a reset state since the last call.
2775bd8deadSopenharmony_ci    GUILTY_CONTEXT_RESET_ARB indicates that a reset has been detected
2785bd8deadSopenharmony_ci    that is attributable to the current GL context.
2795bd8deadSopenharmony_ci    INNOCENT_CONTEXT_RESET_ARB indicates a reset has been detected that
2805bd8deadSopenharmony_ci    is not attributable to the current GL context.
2815bd8deadSopenharmony_ci    UNKNOWN_CONTEXT_RESET_ARB indicates a detected graphics reset whose
2825bd8deadSopenharmony_ci    cause is unknown.
2835bd8deadSopenharmony_ci
2845bd8deadSopenharmony_ci    If a reset status other than NO_ERROR is returned and subsequent
2855bd8deadSopenharmony_ci    calls return NO_ERROR, the context reset was encountered and
2865bd8deadSopenharmony_ci    completed. If a reset status is repeatedly returned, the context may
2875bd8deadSopenharmony_ci    be in the process of resetting.
2885bd8deadSopenharmony_ci
2895bd8deadSopenharmony_ci    Reset notification behavior is determined at context creation time,
2905bd8deadSopenharmony_ci    and may be queried by calling GetIntegerv with the symbolic constant
2915bd8deadSopenharmony_ci    RESET_NOTIFICATION_STRATEGY_ARB.
2925bd8deadSopenharmony_ci
2935bd8deadSopenharmony_ci    If the reset notification behavior is NO_RESET_NOTIFICATION_ARB,
2945bd8deadSopenharmony_ci    then the implementation will never deliver notification of reset
2955bd8deadSopenharmony_ci    events, and GetGraphicsResetStatusARB will always return
2965bd8deadSopenharmony_ci    NO_ERROR[fn1].
2975bd8deadSopenharmony_ci       [fn1: In this case it is recommended that implementations should
2985bd8deadSopenharmony_ci        not allow loss of context state no matter what events occur.
2995bd8deadSopenharmony_ci        However, this is only a recommendation, and cannot be relied
3005bd8deadSopenharmony_ci        upon by applications.]
3015bd8deadSopenharmony_ci
3025bd8deadSopenharmony_ci    If the behavior is LOSE_CONTEXT_ON_RESET_ARB, a graphics reset will
3035bd8deadSopenharmony_ci    result in the loss of all context state, requiring the recreation of
3045bd8deadSopenharmony_ci    all associated objects. In this case GetGraphicsResetStatusARB. may
3055bd8deadSopenharmony_ci    return any of the values described above.
3065bd8deadSopenharmony_ci
3075bd8deadSopenharmony_ci    If a graphics reset notification occurs in a context, a notification
3085bd8deadSopenharmony_ci    must also occur in all other contexts which share objects with that
3095bd8deadSopenharmony_ci    context[fn2].
3105bd8deadSopenharmony_ci       [fn2: The values returned by GetGraphicsResetStatusARB in the
3115bd8deadSopenharmony_ci        different contexts may differ.]
3125bd8deadSopenharmony_ci
3135bd8deadSopenharmony_ci    Add to Section 2.8 "Vertex Arrays" before 2.8.1 "Drawing Commands"
3145bd8deadSopenharmony_ci
3155bd8deadSopenharmony_ci    Robust buffer access is enabled by creating a context with robust
3165bd8deadSopenharmony_ci    access enabled through the window system binding APIs. When enabled,
3175bd8deadSopenharmony_ci    indices within the vertex array that lie outside the arrays defined
3185bd8deadSopenharmony_ci    for enabled attributes result in undefined values for the
3195bd8deadSopenharmony_ci    corresponding attributes, but cannot result in application failure.
3205bd8deadSopenharmony_ci
3215bd8deadSopenharmony_ci
3225bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 3.2 (Compatibility Profile)
3235bd8deadSopenharmony_ciSpecification (Rasterization)
3245bd8deadSopenharmony_ci
3255bd8deadSopenharmony_ci    None
3265bd8deadSopenharmony_ci
3275bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 3.2 (Compatibility Profile)
3285bd8deadSopenharmony_ciSpecification (Per-Fragment Operations and the Frame Buffer)
3295bd8deadSopenharmony_ci
3305bd8deadSopenharmony_ci    Modify section 4.3.2 "Reading Pixels"
3315bd8deadSopenharmony_ci
3325bd8deadSopenharmony_ci    Pixels are read using
3335bd8deadSopenharmony_ci
3345bd8deadSopenharmony_ci        void ReadPixels(int x, int y, sizei width, sizei height,
3355bd8deadSopenharmony_ci                        enum format, enum type, void *data);
3365bd8deadSopenharmony_ci        void ReadnPixelsARB(int x, int y, sizei width, sizei height,
3375bd8deadSopenharmony_ci                            enum format, enum type, sizei bufSize,
3385bd8deadSopenharmony_ci                            void *data);
3395bd8deadSopenharmony_ci
3405bd8deadSopenharmony_ci    The arguments after <x> and <y> to ReadPixels are described in
3415bd8deadSopenharmony_ci    section 3.7.4. The pixel storage modes that apply to ReadPixels and
3425bd8deadSopenharmony_ci    other commands that query images (see section 6.1) are summarized in
3435bd8deadSopenharmony_ci    table 4.7.  ReadnPixelsARB behaves identically to ReadPixels except
3445bd8deadSopenharmony_ci    that it does not write more than <bufSize> bytes into <data>.
3455bd8deadSopenharmony_ci
3465bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 3.2 (Compatibility Profile)
3475bd8deadSopenharmony_ciSpecification (Special Functions)
3485bd8deadSopenharmony_ci
3495bd8deadSopenharmony_ci    None
3505bd8deadSopenharmony_ci
3515bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 3.2 (Compatibility Profile)
3525bd8deadSopenharmony_ciSpecification (State and State Requests)
3535bd8deadSopenharmony_ci
3545bd8deadSopenharmony_ci      Modify Section 6.1.3 "Enumerated Queries"
3555bd8deadSopenharmony_ci
3565bd8deadSopenharmony_ci          void GetPixelMap{ui us f}v(enum map, T data);
3575bd8deadSopenharmony_ci          void GetnPixelMap{ui us f}vARB(enum map, sizei bufSize, T data);
3585bd8deadSopenharmony_ci
3595bd8deadSopenharmony_ci      return all values in the pixel map <map> in <data>. <map> must be
3605bd8deadSopenharmony_ci      a map name from table 3.3. GetPixelMapuiv, GetnPixelMapuivARB,
3615bd8deadSopenharmony_ci      GetPixelMapusv, and GetnPixelMapusvARB convert floating point pixel
3625bd8deadSopenharmony_ci      map values to integers according to the UNSIGNED_INT and
3635bd8deadSopenharmony_ci      UNSIGNED_SHORT entries, respectively, of table 4.9.
3645bd8deadSopenharmony_ci          GetnPixelMap{ui us f}vARB does not write more than <bufSize>
3655bd8deadSopenharmony_ci      bytes into <data>.
3665bd8deadSopenharmony_ci          If a pixel pack buffer ...
3675bd8deadSopenharmony_ci      ... an INVALID_OPERATIONS_ERROR results. When calling
3685bd8deadSopenharmony_ci      GetnPixelMap{ui us f}vARB, if a pixel pack buffer object is bound
3695bd8deadSopenharmony_ci      and <n> is greater than <bufSize>, but <data>+<n> does not exceed
3705bd8deadSopenharmony_ci      the size of the buffer, no error results.
3715bd8deadSopenharmony_ci
3725bd8deadSopenharmony_ci      ... 
3735bd8deadSopenharmony_ci
3745bd8deadSopenharmony_ci          void GetMap{ifd}v(enum map, enum value, T data);
3755bd8deadSopenharmony_ci          void GetnMap{ifd}vARB(enum map, enum value, sizei bufSize, T data);
3765bd8deadSopenharmony_ci
3775bd8deadSopenharmony_ci      places information about <value> for <map> in <data>. <map> must
3785bd8deadSopenharmony_ci      be one of the map types described in section 5.1, and <value> must
3795bd8deadSopenharmony_ci      be one of ORDER, COEFF, or DOMAIN. GetnMap{ifd}vARB does not write
3805bd8deadSopenharmony_ci      more than <bufSize> bytes into <data>.
3815bd8deadSopenharmony_ci
3825bd8deadSopenharmony_ci      Section 6.1.4 "Texture Queries"
3835bd8deadSopenharmony_ci
3845bd8deadSopenharmony_ci      
3855bd8deadSopenharmony_ci      Modify the description of GetTexImage:
3865bd8deadSopenharmony_ci
3875bd8deadSopenharmony_ci      "The commands
3885bd8deadSopenharmony_ci
3895bd8deadSopenharmony_ci          void GetTexImage(enum tex, int lod, enum format, enum type,
3905bd8deadSopenharmony_ci                           void *img );
3915bd8deadSopenharmony_ci          void GetnTexImageARB(enum tex, int lod, enum format, enum type,
3925bd8deadSopenharmony_ci                               sizei bufSize, void *img );
3935bd8deadSopenharmony_ci
3945bd8deadSopenharmony_ci      are used to obtain texture images. ...
3955bd8deadSopenharmony_ci      ... <type> is a pixel type from table 3.5. GetnTexImageARB does
3965bd8deadSopenharmony_ci      not write more than <bufSize> bytes into <img>."
3975bd8deadSopenharmony_ci
3985bd8deadSopenharmony_ci      Add to the end of the sixth paragraph:
3995bd8deadSopenharmony_ci
4005bd8deadSopenharmony_ci      "When calling GetnTextureImageARB, if a pixel pack buffer object
4015bd8deadSopenharmony_ci      is bound and packing a texture image into buffer memory would
4025bd8deadSopenharmony_ci      exceed <bufSize> but not the size of the buffer, no error results."
4035bd8deadSopenharmony_ci
4045bd8deadSopenharmony_ci      Modify the description of GetCompressedTexImage:
4055bd8deadSopenharmony_ci
4065bd8deadSopenharmony_ci      "The commands
4075bd8deadSopenharmony_ci
4085bd8deadSopenharmony_ci          void GetCompressedTexImage(enum target, int lod, void *img);
4095bd8deadSopenharmony_ci          void GetnCompressedTexImageARB(enum target, int lod, sizei bufSize,
4105bd8deadSopenharmony_ci                                         void *img );
4115bd8deadSopenharmony_ci          
4125bd8deadSopenharmony_ci      are used to obtain texture images stored in compressed form. The
4135bd8deadSopenharmony_ci      parameters <target>, <lod>, and <img> are interpreted in the same
4145bd8deadSopenharmony_ci      manner as in GetTexImage and GetnTexImageARB respectively. When
4155bd8deadSopenharmony_ci      called, GetCompressedTexImage and GetnCompressedTexImageARB write
4165bd8deadSopenharmony_ci      MIN(n,bufSize) ubytes of compressed image data ...
4175bd8deadSopenharmony_ci
4185bd8deadSopenharmony_ci      ... If a pixel pack buffer object is bound and img + n is greater
4195bd8deadSopenharmony_ci      than the size of the buffer, an INVALID_OPERATION error results.
4205bd8deadSopenharmony_ci      When calling GetnCompressedTextureImageARB, if a pixel pack buffer
4215bd8deadSopenharmony_ci      object is bound and <n> is greater than <bufSize> but <img>+<n>
4225bd8deadSopenharmony_ci      does not exceed the size of the buffer, no error results."
4235bd8deadSopenharmony_ci
4245bd8deadSopenharmony_ci      Modify Section 6.1.5 "Stipple Query"
4255bd8deadSopenharmony_ci      
4265bd8deadSopenharmony_ci      The commands
4275bd8deadSopenharmony_ci
4285bd8deadSopenharmony_ci          void GetPolygonStipple(void *pattern);
4295bd8deadSopenharmony_ci          void GetnPolygonStippleARB(sizei bufSize, void *pattern);
4305bd8deadSopenharmony_ci
4315bd8deadSopenharmony_ci      obtain the polygon stipple. The pattern is packed into pixel pack
4325bd8deadSopenharmony_ci      buffer or client memory according to the procedure given in section
4335bd8deadSopenharmony_ci      4.3.2 for ReadPixels; it is as if the <height> and <width> passed
4345bd8deadSopenharmony_ci      to that command were both equal to 32, the type were BITMAP, and
4355bd8deadSopenharmony_ci      the format were COLOR_INDEX. GetnPolygonStippleARB does not write
4365bd8deadSopenharmony_ci      more than <bufSize> bytes into <pattern>.
4375bd8deadSopenharmony_ci
4385bd8deadSopenharmony_ci      Modify Section 6.1.7 "Color Table Query"
4395bd8deadSopenharmony_ci
4405bd8deadSopenharmony_ci      The current contents of a color table are queried using
4415bd8deadSopenharmony_ci
4425bd8deadSopenharmony_ci          void GetColorTable(enum target, enum format, enum type,
4435bd8deadSopenharmony_ci                             void *table );
4445bd8deadSopenharmony_ci          void GetnColorTableARB(enum target, enum format, enum type,
4455bd8deadSopenharmony_ci                                 sizei bufSize, void *table);
4465bd8deadSopenharmony_ci          
4475bd8deadSopenharmony_ci      <target> must be one of the regular color table names listed in
4485bd8deadSopenharmony_ci      table 3.4. ...
4495bd8deadSopenharmony_ci      ... to the components requested by format are described in table
4505bd8deadSopenharmony_ci      6.1. GetnColorTableARB does not write more than <bufSize> bytes
4515bd8deadSopenharmony_ci      into <table>.
4525bd8deadSopenharmony_ci
4535bd8deadSopenharmony_ci      Modify Section 6.1.8 "Convolution Query"
4545bd8deadSopenharmony_ci
4555bd8deadSopenharmony_ci      The current contents of a convolution filter image are queried
4565bd8deadSopenharmony_ci      with the command
4575bd8deadSopenharmony_ci
4585bd8deadSopenharmony_ci          void GetConvolutionFilter(enum target, enum format, enum type,
4595bd8deadSopenharmony_ci                                    void *image );
4605bd8deadSopenharmony_ci          void GetnConvolutionFilterARB(enum target, enum format,
4615bd8deadSopenharmony_ci                                     enum type, sizei bufSize, void *image);
4625bd8deadSopenharmony_ci
4635bd8deadSopenharmony_ci      <target> must be CONVOLUTION_1D or CONVOLUTION_2D. ...
4645bd8deadSopenharmony_ci      ... Pixel processing and component mapping are identical to those
4655bd8deadSopenharmony_ci      of GetTexImage. GetnConvolutionFilterARB does not write more than
4665bd8deadSopenharmony_ci      <bufSize> bytes into <image>.
4675bd8deadSopenharmony_ci
4685bd8deadSopenharmony_ci      ...
4695bd8deadSopenharmony_ci
4705bd8deadSopenharmony_ci      The current contents of a separable filter image are queried using
4715bd8deadSopenharmony_ci
4725bd8deadSopenharmony_ci          void GetSeparableFilter(enum target, enum format, enum type,
4735bd8deadSopenharmony_ci                                  void *row, void *column, void *span );
4745bd8deadSopenharmony_ci          void GetnSeparableFilterARB(enum target, enum format, enum type,
4755bd8deadSopenharmony_ci                                      sizei rowBufSize, void *row,
4765bd8deadSopenharmony_ci                                      sizei columnBufSize, void *column,
4775bd8deadSopenharmony_ci                                      void *span);
4785bd8deadSopenharmony_ci
4795bd8deadSopenharmony_ci      ... The row and column images are returned to pixel pack buffer or
4805bd8deadSopenharmony_ci      client memory starting at row and column respectively.
4815bd8deadSopenharmony_ci      GetnSeparableFilterARB does not write more than <rowBufSize> bytes
4825bd8deadSopenharmony_ci      into <row> and no more than <columnBufSize> bytes into <column>.
4835bd8deadSopenharmony_ci      <span> is currently unused. ...
4845bd8deadSopenharmony_ci      
4855bd8deadSopenharmony_ci
4865bd8deadSopenharmony_ci      Modify Section 6.1.9 "Histogram Query"
4875bd8deadSopenharmony_ci
4885bd8deadSopenharmony_ci      The current contents of the histogram table are queried using
4895bd8deadSopenharmony_ci
4905bd8deadSopenharmony_ci          void GetHistogram(enum target, boolean reset, enum format,
4915bd8deadSopenharmony_ci                            enum type, void* values );
4925bd8deadSopenharmony_ci          void GetnHistogramARB(enum target, boolean reset, enum format,
4935bd8deadSopenharmony_ci                             enum type, sizei bufSize, void* values);
4945bd8deadSopenharmony_ci
4955bd8deadSopenharmony_ci      ... component values are simply clamped to the range of the target
4965bd8deadSopenharmony_ci      data type. GetnHistogramARB does not write more than <bufSize>
4975bd8deadSopenharmony_ci      bytes into <values>.
4985bd8deadSopenharmony_ci
4995bd8deadSopenharmony_ci      Modify Section 6.1.10 "Minmax Query"
5005bd8deadSopenharmony_ci
5015bd8deadSopenharmony_ci      The current contents of the minmax table are queried using
5025bd8deadSopenharmony_ci
5035bd8deadSopenharmony_ci          void GetMinmax(enum target, boolean reset, enum format,
5045bd8deadSopenharmony_ci                         enum type, void* values );
5055bd8deadSopenharmony_ci          void GetnMinmaxARB(enum target, boolean reset, enum format,
5065bd8deadSopenharmony_ci                          enum type, sizei bufSize, void* values);
5075bd8deadSopenharmony_ci
5085bd8deadSopenharmony_ci      ... A one-dimensional image of width 2 is returned to pixel pack
5095bd8deadSopenharmony_ci      buffer or client memory starting at <values>. GetnMinmaxARB does
5105bd8deadSopenharmony_ci      not write more than <bufSize> bytes into <values>.
5115bd8deadSopenharmony_ci
5125bd8deadSopenharmony_ci      Modify Section 6.1.11 "Pointer and String Queries"
5135bd8deadSopenharmony_ci
5145bd8deadSopenharmony_ci      Add to the paragraph describing the context profile mask and flags
5155bd8deadSopenharmony_ci      (preceding the description of GetStringi) on page 379:
5165bd8deadSopenharmony_ci
5175bd8deadSopenharmony_ci     "If CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB is set in CONTEXT_FLAGS,
5185bd8deadSopenharmony_ci      then robust buffer access will be enabled for drawing commands
5195bd8deadSopenharmony_ci      using vertex arrays, as described in section 2.8."
5205bd8deadSopenharmony_ci
5215bd8deadSopenharmony_ci      Modify Section 6.1.16 "Shader and Program Queries"
5225bd8deadSopenharmony_ci
5235bd8deadSopenharmony_ci      The commands
5245bd8deadSopenharmony_ci
5255bd8deadSopenharmony_ci          void GetUniformfv(uint program, int location, float *params);
5265bd8deadSopenharmony_ci          void GetnUniformfvARB(uint program, int location, sizei bufSize,
5275bd8deadSopenharmony_ci                                float *params);
5285bd8deadSopenharmony_ci          void GetUniformiv(uint program, int location, int *params);
5295bd8deadSopenharmony_ci          void GetnUniformivARB(uint program, int location, sizei bufSize,
5305bd8deadSopenharmony_ci                                int *params);
5315bd8deadSopenharmony_ci          void GetUniformuiv(uint program, int location, uint *params);
5325bd8deadSopenharmony_ci          void GetnUniformuivARB(uint program, int location, sizei bufSize,
5335bd8deadSopenharmony_ci                                 uint *params);
5345bd8deadSopenharmony_ci          void GetUniformdv(uint program, int location, double *params);
5355bd8deadSopenharmony_ci          void GetnUniformdvARB(uint program, int location, sizei bufSize,
5365bd8deadSopenharmony_ci                                double *params);
5375bd8deadSopenharmony_ci
5385bd8deadSopenharmony_ci      return the value or values of the uniform at location location of
5395bd8deadSopenharmony_ci      the default uniform block for program object program in the array
5405bd8deadSopenharmony_ci      params. GetnUniformfvARB, GetnUniformivARB, GetnUniformuivARB and
5415bd8deadSopenharmony_ci      GetnUniformdvARB do not write any data to <params> if <bufSize> is
5425bd8deadSopenharmony_ci      less than the size of the requested data.
5435bd8deadSopenharmony_ci      ...
5445bd8deadSopenharmony_ci
5455bd8deadSopenharmony_ciAdditions to the AGL/GLX/WGL Specifications
5465bd8deadSopenharmony_ci
5475bd8deadSopenharmony_ci    None
5485bd8deadSopenharmony_ci
5495bd8deadSopenharmony_ciAdditions to The OpenGL Shading Language Specification, Version 1.50.11
5505bd8deadSopenharmony_ci
5515bd8deadSopenharmony_ci    Change the first paragraph of section 4.1.9 "Arrays"
5525bd8deadSopenharmony_ci
5535bd8deadSopenharmony_ci    ... Undefined behavior results from indexing an array with a
5545bd8deadSopenharmony_ci    non-constant expression that's greater than or equal to the array's
5555bd8deadSopenharmony_ci    size or less than 0. If robust buffer access is enabled via the
5565bd8deadSopenharmony_ci    OpenGL API, such indexing must not result in abnormal program
5575bd8deadSopenharmony_ci    termination. The results are still undefined, but implementations
5585bd8deadSopenharmony_ci    are encouraged to produce zero values for such accesses. Only
5595bd8deadSopenharmony_ci    one-dimensional arrays may be declared. ...
5605bd8deadSopenharmony_ci
5615bd8deadSopenharmony_ciGLX Protocol
5625bd8deadSopenharmony_ci
5635bd8deadSopenharmony_ci    XXX
5645bd8deadSopenharmony_ci
5655bd8deadSopenharmony_ciInteractions with GLX_ARB_create_context_robustness
5665bd8deadSopenharmony_ci
5675bd8deadSopenharmony_ci    If the GLX window-system binding API is used to create a context,
5685bd8deadSopenharmony_ci    the GLX_ARB_create_context_robustness extension is supported, and
5695bd8deadSopenharmony_ci    the bit GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB is set in
5705bd8deadSopenharmony_ci    GLX_CONTEXT_FLAGS when glXCreateContextAttribsARB is called, the
5715bd8deadSopenharmony_ci    resulting context will perform robust buffer access as described
5725bd8deadSopenharmony_ci    above in section 2.8, and the CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB bit
5735bd8deadSopenharmony_ci    will be set in CONTEXT_FLAGS as described above in section 6.1.11.
5745bd8deadSopenharmony_ci
5755bd8deadSopenharmony_ci    If the GLX window-system binding API is used to create a context and
5765bd8deadSopenharmony_ci    the GLX_ARB_create_context_robustness extension is supported, then
5775bd8deadSopenharmony_ci    the value of attribute GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB
5785bd8deadSopenharmony_ci    determines the reset notification behavior and the value of
5795bd8deadSopenharmony_ci    RESET_NOTIFICATION_STRATEGY_ARB, as described in section 2.6.
5805bd8deadSopenharmony_ci
5815bd8deadSopenharmony_ciInteractions with WGL_ARB_create_context_robustness
5825bd8deadSopenharmony_ci
5835bd8deadSopenharmony_ci    If the WGL window-system binding API is used to create a context,
5845bd8deadSopenharmony_ci    the WGL_ARB_create_context_robustness extension is supported, and
5855bd8deadSopenharmony_ci    the bit WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB is set in
5865bd8deadSopenharmony_ci    WGL_CONTEXT_FLAGS when wglCreateContextAttribsARB is called, the
5875bd8deadSopenharmony_ci    resulting context will perform robust buffer access as described
5885bd8deadSopenharmony_ci    above in section 2.8, and the CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB bit
5895bd8deadSopenharmony_ci    will be set in CONTEXT_FLAGS as described above in section 6.1.11.
5905bd8deadSopenharmony_ci
5915bd8deadSopenharmony_ci    If the WGL window-system binding API is used to create a context and
5925bd8deadSopenharmony_ci    the WGL_ARB_create_context_robustness extension is supported, then
5935bd8deadSopenharmony_ci    the value of attribute WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB
5945bd8deadSopenharmony_ci    determines the reset notification behavior and the value of
5955bd8deadSopenharmony_ci    RESET_NOTIFICATION_STRATEGY_ARB, as described in section 2.6.
5965bd8deadSopenharmony_ci
5975bd8deadSopenharmony_ciErrors
5985bd8deadSopenharmony_ci
5995bd8deadSopenharmony_ci    GetnMapdvARB, GetnMapfvARB, GetnMapivARB, GetnPixelMapfvARB,
6005bd8deadSopenharmony_ci    GetnPixelMapuivARB, GetnPixelMapusvARB, GetnPolygonStippleARB,
6015bd8deadSopenharmony_ci    GetnTexImageARB, ReadnPixelsARB, GetnColorTableARB,
6025bd8deadSopenharmony_ci    GetnConvolutionFilterARB, GetnSeparableFilterARB, GetnHistogramARB,
6035bd8deadSopenharmony_ci    GetnMinmaxARB, GetnCompressedTexImageARB, GetnUniformfvARB,
6045bd8deadSopenharmony_ci    GetnUniformivARB, GetnUniformuivARB and GetnUniformdvARB share all the
6055bd8deadSopenharmony_ci    errors of their unsized buffer query counterparts with the addition
6065bd8deadSopenharmony_ci    that INVALID_OPERATION is generated if the buffer size required to
6075bd8deadSopenharmony_ci    fill all the requested data is greater than <bufSize>.
6085bd8deadSopenharmony_ci
6095bd8deadSopenharmony_ciNew State
6105bd8deadSopenharmony_ci
6115bd8deadSopenharmony_ci    Get Value                            Type  Get Command            Value     Description                  Sec     Attribute
6125bd8deadSopenharmony_ci    --------------------------      ----  -----------   ------------  ---------------------------  ------  ---------
6135bd8deadSopenharmony_ci    RESET_NOTIFICATION_STRATEGY_ARB Z_2   GetIntegerv   See sec. 2.6  Reset notification behavior  2.6     -
6145bd8deadSopenharmony_ci
6155bd8deadSopenharmony_ci
6165bd8deadSopenharmony_ciNew Implementation Dependent State
6175bd8deadSopenharmony_ci
6185bd8deadSopenharmony_ci    None
6195bd8deadSopenharmony_ci
6205bd8deadSopenharmony_ciDependencies on the ARB_imaging subset
6215bd8deadSopenharmony_ci
6225bd8deadSopenharmony_ci    If the ARB_imaging subset of the OpenGL 3.2 Compatibility Profile is not
6235bd8deadSopenharmony_ci    supported, the commands GetnColorTableARB, GetnConvolutionFilterARB,
6245bd8deadSopenharmony_ci    GetnHistogramARB, GetnMap*ARB, GetnMinmaxARB, GetnPixelMap*ARB, and
6255bd8deadSopenharmony_ci    GetnSeparableFilterARB defined by this extension are not supported, and
6265bd8deadSopenharmony_ci    all references to them should be ignored.
6275bd8deadSopenharmony_ci
6285bd8deadSopenharmony_ciDependencies on OpenGL 3.2 (Core Profile)
6295bd8deadSopenharmony_ci
6305bd8deadSopenharmony_ci    If only the core profile of OpenGL 3.2 is supported, the commands
6315bd8deadSopenharmony_ci    GetnColorTableARB, GetnConvolutionFilterARB, GetnHistogramARB,
6325bd8deadSopenharmony_ci    GetnMap*ARB, GetnMinmaxARB, GetnPixelMap*ARB, GetnPolygonStippleARB, and
6335bd8deadSopenharmony_ci    GetnSeparableFilterARB defined by this extension are not supported, and
6345bd8deadSopenharmony_ci    all references to them should be ignored.
6355bd8deadSopenharmony_ci
6365bd8deadSopenharmony_ciIssues
6375bd8deadSopenharmony_ci
6385bd8deadSopenharmony_ci    1.  Does robust buffer access affect vertex pulling from vertex
6395bd8deadSopenharmony_ci        buffer objects, client vertex arrays, or both?
6405bd8deadSopenharmony_ci
6415bd8deadSopenharmony_ci        RESOLVED:  Only vertex buffer objects.
6425bd8deadSopenharmony_ci
6435bd8deadSopenharmony_ci        DirectX 10-era GPUs are guaranteed to provide guarantees
6445bd8deadSopenharmony_ci        consistent with those required by robust buffer access.
6455bd8deadSopenharmony_ci
6465bd8deadSopenharmony_ci        Client memory vertex arrays should not be expected to be used
6475bd8deadSopenharmony_ci        directly in situations requiring robust operation.
6485bd8deadSopenharmony_ci
6495bd8deadSopenharmony_ci        Historically the original EXT_vertex_array extension provided a
6505bd8deadSopenharmony_ci        "GLsizei count" parameter to indicate how long vertex arrays
6515bd8deadSopenharmony_ci        should be.  This proved to be unworkable in practice because
6525bd8deadSopenharmony_ci        applications typically found it too difficult to properly compute
6535bd8deadSopenharmony_ci        the count; instead a very large integer was passed, obviating any
6545bd8deadSopenharmony_ci        practical use for the parameter.  When vertex arrays were added
6555bd8deadSopenharmony_ci        to core OpenGL in version 1.1, the "GLsizei count" parameter
6565bd8deadSopenharmony_ci        was eliminated for this reason.
6575bd8deadSopenharmony_ci
6585bd8deadSopenharmony_ci        There are other problems too.  Clever applications using client
6595bd8deadSopenharmony_ci        memory vertex arrays can specify the base pointer to be NULL
6605bd8deadSopenharmony_ci        (address 0) and then use indices that essentially correspond
6615bd8deadSopenharmony_ci        to pointers divided by the stride.  There's also no guarantee a
6625bd8deadSopenharmony_ci        pointer itself has a contiguous range of memory allocate within
6635bd8deadSopenharmony_ci        a given range.
6645bd8deadSopenharmony_ci
6655bd8deadSopenharmony_ci        Moreover client memory vertex arrays are no longer a performance
6665bd8deadSopenharmony_ci        path so they simply are not particularly interesting to address.
6675bd8deadSopenharmony_ci
6685bd8deadSopenharmony_ci        The result is there's really no practical way to bound client
6695bd8deadSopenharmony_ci        vertex array access in a way that's likely to be practically
6705bd8deadSopenharmony_ci        useful.
6715bd8deadSopenharmony_ci
6725bd8deadSopenharmony_ci        Vertex buffer objects do not have this same problem because
6735bd8deadSopenharmony_ci        buffer objects have a bounded index-able range.
6745bd8deadSopenharmony_ci
6755bd8deadSopenharmony_ci        Robust applications should simply use vertex buffer objects for
6765bd8deadSopenharmony_ci        robust vertex pulling (ignoring client memory vertex arrays for
6775bd8deadSopenharmony_ci        an rendering that must be done robustly).
6785bd8deadSopenharmony_ci
6795bd8deadSopenharmony_ci    2.  If robust buffer access is supported and a vertex index is large
6805bd8deadSopenharmony_ci        enough to fetch beyond the size of an enabled vertex buffer
6815bd8deadSopenharmony_ci        object, what happens?
6825bd8deadSopenharmony_ci
6835bd8deadSopenharmony_ci        RESOLVED:  Undefined values are read for the varying (non-fixed)
6845bd8deadSopenharmony_ci        components.
6855bd8deadSopenharmony_ci
6865bd8deadSopenharmony_ci        A fixed-component would be a component such as the W component
6875bd8deadSopenharmony_ci        when only a 2- or 3-component position is fetched.  In this case,
6885bd8deadSopenharmony_ci        the W component is fixed as 1.0 and that will be the case still
6895bd8deadSopenharmony_ci        if the index would have resulted in an out-of-bounds fetch.
6905bd8deadSopenharmony_ci
6915bd8deadSopenharmony_ci        Undefined results are required for implementations that can't
6925bd8deadSopenharmony_ci        guarantee any particular value. It make testing this behavior
6935bd8deadSopenharmony_ci        difficult, but it's required for certain implementations.
6945bd8deadSopenharmony_ci
6955bd8deadSopenharmony_ci    3.  If robust buffer access is supported and an element array buffer
6965bd8deadSopenharmony_ci        is accessed beyond the size of the element array buffer so
6975bd8deadSopenharmony_ci        there's not a valide index, what happens?
6985bd8deadSopenharmony_ci
6995bd8deadSopenharmony_ci        RESOLVED:  The value of the index is undefined.
7005bd8deadSopenharmony_ci
7015bd8deadSopenharmony_ci        Undefined results are required for implementations that can't
7025bd8deadSopenharmony_ci        guarantee any particular value. It make testing this behavior
7035bd8deadSopenharmony_ci        difficult, but it's required for certain implementations.
7045bd8deadSopenharmony_ci
7055bd8deadSopenharmony_ci    4.  What query commands actually need a new "GLsizei bufSize"
7065bd8deadSopenharmony_ci        parameter?
7075bd8deadSopenharmony_ci
7085bd8deadSopenharmony_ci        RESOLVED:  If the number of bytes returned by the query is not
7095bd8deadSopenharmony_ci        *completely* determined by the parameters to the function (in
7105bd8deadSopenharmony_ci        the absence of errors) and not already bounded by an existing
7115bd8deadSopenharmony_ci        GLsizei buffer size parameter, a new query is needed.
7125bd8deadSopenharmony_ci
7135bd8deadSopenharmony_ci        This means commands such as glGetClipPlane, glGetIntegerv,
7145bd8deadSopenharmony_ci        etc. do NOT need new versions.
7155bd8deadSopenharmony_ci
7165bd8deadSopenharmony_ci        This means queries that depend on pixel store pack state need
7175bd8deadSopenharmony_ci        new queries.  Examples: glReadPixels, glGetPolygonStipple,
7185bd8deadSopenharmony_ci        glGetTexImage, glGetConvolutionFilter, etc.
7195bd8deadSopenharmony_ci
7205bd8deadSopenharmony_ci        This means queries that query an object's state which can
7215bd8deadSopenharmony_ci        vary in size need new queries.  Examples:  glGetTexImage,
7225bd8deadSopenharmony_ci        glGetCompressedTexImage, glGetUniformfv, glGetUniformuiv, etc.
7235bd8deadSopenharmony_ci
7245bd8deadSopenharmony_ci        This means queries that query context state which can vary
7255bd8deadSopenharmony_ci        depending on other context state variables need new queries.
7265bd8deadSopenharmony_ci        Examples:  glGetHistogram, glGetPixelMapfv, glGetColorTable, etc.
7275bd8deadSopenharmony_ci
7285bd8deadSopenharmony_ci        If the command already has a parameter that limits the amount
7295bd8deadSopenharmony_ci        of data returned through a pointer, no new command is needed.
7305bd8deadSopenharmony_ci        Examples: glGetActiveAttrib, glGetActiveUniform, glGetInfoLog,
7315bd8deadSopenharmony_ci        glGetAttachedShaders, glGetAttachedObjects, glGetShaderSource,
7325bd8deadSopenharmony_ci        glGetActiveAttrib, glGetBufferSubData, glGen*, etc.
7335bd8deadSopenharmony_ci
7345bd8deadSopenharmony_ci    5.  If a new query with an explicit buffer size is called and the buffer
7355bd8deadSopenharmony_ci        size is not sufficient to return the data, what happens?
7365bd8deadSopenharmony_ci
7375bd8deadSopenharmony_ci        RESOLVED:  Return an INVALID_OPERATION error and ignore the query.
7385bd8deadSopenharmony_ci
7395bd8deadSopenharmony_ci        Some consideration was given to clearing the entire buffer range.
7405bd8deadSopenharmony_ci        This might arguably avoid applications subsequently reading from
7415bd8deadSopenharmony_ci        uninitialized buffers.
7425bd8deadSopenharmony_ci
7435bd8deadSopenharmony_ci        This was rejected for several reasons:
7445bd8deadSopenharmony_ci
7455bd8deadSopenharmony_ci        1)  Doing something when there's an error is inconsistent with
7465bd8deadSopenharmony_ci            the rest of OpenGL's operation.
7475bd8deadSopenharmony_ci
7485bd8deadSopenharmony_ci        2)  If the buffer is left untouched, the application can initialize
7495bd8deadSopenharmony_ci            the buffer to some bogus value (NaN or an invalid negative
7505bd8deadSopenharmony_ci            value) and notice that the buffer was left unmodified after
7515bd8deadSopenharmony_ci            the query without the expense of checking for OpenGL errors.
7525bd8deadSopenharmony_ci
7535bd8deadSopenharmony_ci        3)  Many commands return information through packing pixels based
7545bd8deadSopenharmony_ci            on the pixel store state.  The pixel store state allows skipping
7555bd8deadSopenharmony_ci            over some data (GL_SKIP_PIXELS, GL_SKIP_ROWS, etc.) so zero'ing
7565bd8deadSopenharmony_ci            memory for the entire buffer isn't a good idea.
7575bd8deadSopenharmony_ci
7585bd8deadSopenharmony_ci
7595bd8deadSopenharmony_ci    6.  Can you explain why various glGet queries do NOT have new
7605bd8deadSopenharmony_ci        "sized" versions?
7615bd8deadSopenharmony_ci
7625bd8deadSopenharmony_ci        RESOLVED:
7635bd8deadSopenharmony_ci
7645bd8deadSopenharmony_ci        Queries always returning a constant number of bytes:
7655bd8deadSopenharmony_ci
7665bd8deadSopenharmony_ci            OpenGL 1.0
7675bd8deadSopenharmony_ci                glGetClipPlane
7685bd8deadSopenharmony_ci                    - always 4*sizeof(GLdouble)
7695bd8deadSopenharmony_ci            OpenGL 2.0
7705bd8deadSopenharmony_ci                glGetVertexAttribdv
7715bd8deadSopenharmony_ci                    - always 4*sizeof(GLdouble)
7725bd8deadSopenharmony_ci                glGetVertexAttribfv
7735bd8deadSopenharmony_ci                    - always 4*sizeof(GLfloat)
7745bd8deadSopenharmony_ci                glGetVertexAttribiv
7755bd8deadSopenharmony_ci                    - always 4*sizeof(GLint)
7765bd8deadSopenharmony_ci
7775bd8deadSopenharmony_ci        Queries with an effective buffer size parameter already:
7785bd8deadSopenharmony_ci
7795bd8deadSopenharmony_ci            OpenGL 1.5
7805bd8deadSopenharmony_ci                glGetBufferSubData
7815bd8deadSopenharmony_ci                    - returns size (parameter) bytes
7825bd8deadSopenharmony_ci
7835bd8deadSopenharmony_ci        Queries with an effective buffer bound (no more bytes than)
7845bd8deadSopenharmony_ci        parameter already:
7855bd8deadSopenharmony_ci
7865bd8deadSopenharmony_ci            OpenGL 2.0
7875bd8deadSopenharmony_ci                glGetAttachedShaders
7885bd8deadSopenharmony_ci                    - returns no more than sizeof(GLuint)*maxCount
7895bd8deadSopenharmony_ci                      to count and no more than sizeof(GLuint)*maxCount
7905bd8deadSopenharmony_ci                      to shaders
7915bd8deadSopenharmony_ci                glGetShaderInfoLog
7925bd8deadSopenharmony_ci                glGetProgramInfoLog
7935bd8deadSopenharmony_ci                glGetShaderSource
7945bd8deadSopenharmony_ci                glGetActiveAttrib
7955bd8deadSopenharmony_ci                glGetActiveUniform
7965bd8deadSopenharmony_ci                    - returns no more than bufSize bytes
7975bd8deadSopenharmony_ci            OpenGL 3.0
7985bd8deadSopenharmony_ci                glGetTransformFeedbackVarying
7995bd8deadSopenharmony_ci                    - returns no more than bufSize bytes
8005bd8deadSopenharmony_ci            OpenGL 3.2
8015bd8deadSopenharmony_ci                glGetUniformIndices
8025bd8deadSopenharmony_ci                    - returns sizeof(GLuint)*uniformCount bytes
8035bd8deadSopenharmony_ci                glGetActiveUniformName
8045bd8deadSopenharmony_ci                glGetActiveUniformBlockName
8055bd8deadSopenharmony_ci                    - returns no more than bufSize bytes
8065bd8deadSopenharmony_ci
8075bd8deadSopenharmony_ci        Query's some function of enumeration parameters fully determine
8085bd8deadSopenharmony_ci        the number bytes returned:
8095bd8deadSopenharmony_ci
8105bd8deadSopenharmony_ci            OpenGL 1.0
8115bd8deadSopenharmony_ci                glGetIntegerv
8125bd8deadSopenharmony_ci                glGetFloatv
8135bd8deadSopenharmony_ci                glGetDoublev
8145bd8deadSopenharmony_ci                glGetBooleanv
8155bd8deadSopenharmony_ci                glGetLightiv
8165bd8deadSopenharmony_ci                glGetLightfv
8175bd8deadSopenharmony_ci                glGetMaterialfv
8185bd8deadSopenharmony_ci                glGetMaterialiv
8195bd8deadSopenharmony_ci                glGetTexEnvfv
8205bd8deadSopenharmony_ci                glGetTexEnviv
8215bd8deadSopenharmony_ci                glGetTexGendv
8225bd8deadSopenharmony_ci                glGetTexGenfv
8235bd8deadSopenharmony_ci                glGetTexGeniv
8245bd8deadSopenharmony_ci                glGetTexParameterfv
8255bd8deadSopenharmony_ci                glGetTexParameteriv
8265bd8deadSopenharmony_ci                glGetTexLevelParameterfv
8275bd8deadSopenharmony_ci                glGetTexLevelParameteriv
8285bd8deadSopenharmony_ci                    - fully determined by pname parameter
8295bd8deadSopenharmony_ci            OpenGL 1.1
8305bd8deadSopenharmony_ci                glGetPointerv
8315bd8deadSopenharmony_ci                    - fully determined by pname parameter
8325bd8deadSopenharmony_ci                glGenTextures
8335bd8deadSopenharmony_ci                    - sizeof(GLuint)*n
8345bd8deadSopenharmony_ci            ARB_imaging
8355bd8deadSopenharmony_ci                glGetColorTableParameterfv
8365bd8deadSopenharmony_ci                glGetColorTableParameteriv
8375bd8deadSopenharmony_ci                glGetConvolutionParameterfv
8385bd8deadSopenharmony_ci                glGetConvolutionParameteriv
8395bd8deadSopenharmony_ci                glGetHistogramParameterfv
8405bd8deadSopenharmony_ci                glGetHistogramParameteriv
8415bd8deadSopenharmony_ci                glGetMinmaxParameterfv
8425bd8deadSopenharmony_ci                glGetMinmaxParameteriv
8435bd8deadSopenharmony_ci                    - fully determined by pname parameter
8445bd8deadSopenharmony_ci            OpenGL 1.5
8455bd8deadSopenharmony_ci                glGenBuffers
8465bd8deadSopenharmony_ci                glGenQueries
8475bd8deadSopenharmony_ci                    - sizeof(GLuint)*n
8485bd8deadSopenharmony_ci                glGetBufferParameteriv
8495bd8deadSopenharmony_ci                glGetQueryObjectiv
8505bd8deadSopenharmony_ci                glGetQueryObjectfv
8515bd8deadSopenharmony_ci                glGetQueryiv
8525bd8deadSopenharmony_ci                    - fully determined by pname parameter
8535bd8deadSopenharmony_ci            OpenGL 2.0
8545bd8deadSopenharmony_ci                glGetVertexAttribPointerv
8555bd8deadSopenharmony_ci                glGetShaderiv
8565bd8deadSopenharmony_ci                glGetProgramiv
8575bd8deadSopenharmony_ci                    - fully determined by pname parameter
8585bd8deadSopenharmony_ci            OpenGL 3.0
8595bd8deadSopenharmony_ci                glGenRenderbuffers
8605bd8deadSopenharmony_ci                glGenFramebuffers
8615bd8deadSopenharmony_ci                glGenVertexArrays
8625bd8deadSopenharmony_ci                    - sizeof(GLuint)*n
8635bd8deadSopenharmony_ci            OpenGL 3.2
8645bd8deadSopenharmony_ci                glGetActiveUniformBlockiv
8655bd8deadSopenharmony_ci                    - function of pname and uniformCount
8665bd8deadSopenharmony_ci                glGetActiveUniformsiv
8675bd8deadSopenharmony_ci                    - function of pname
8685bd8deadSopenharmony_ci
8695bd8deadSopenharmony_ci            NV_vertex_program
8705bd8deadSopenharmony_ci                glGenProgramsNV
8715bd8deadSopenharmony_ci                    - sizeof(GLuint)*n
8725bd8deadSopenharmony_ci            ARB_vertex_program
8735bd8deadSopenharmony_ci                glGenProgramsARB
8745bd8deadSopenharmony_ci                    - sizeof(GLuint)*n
8755bd8deadSopenharmony_ci
8765bd8deadSopenharmony_ci    7. What can cause a graphics reset?
8775bd8deadSopenharmony_ci
8785bd8deadSopenharmony_ci       Either user or implementor errors may result in a graphics reset.
8795bd8deadSopenharmony_ci       If the application attempts to perform a rendering that takes too long
8805bd8deadSopenharmony_ci       whether due to an infinite loop in a shader or even just a rendering
8815bd8deadSopenharmony_ci       operation that takes too long on the given hardware. Implementation
8825bd8deadSopenharmony_ci       errors may produce badly formed hardware commands. Memory access errors
8835bd8deadSopenharmony_ci       may result from user or implementor mistakes. Any of these events may
8845bd8deadSopenharmony_ci       result in a graphics reset event that will be detectable by the mechanism
8855bd8deadSopenharmony_ci       described in this extension.
8865bd8deadSopenharmony_ci
8875bd8deadSopenharmony_ci    8. How should the application react to a reset context event?
8885bd8deadSopenharmony_ci
8895bd8deadSopenharmony_ci       RESOLVED: For this extension, the application is expected to query
8905bd8deadSopenharmony_ci       the reset status until NO_ERROR is returned. If a reset is encountered,
8915bd8deadSopenharmony_ci       at least one *RESET* status will be returned. Once NO_ERROR is
8925bd8deadSopenharmony_ci       encountered, the application can safely destroy the old context and
8935bd8deadSopenharmony_ci       create a new one.
8945bd8deadSopenharmony_ci
8955bd8deadSopenharmony_ci       After a reset event, apps should not use a context for any purpose
8965bd8deadSopenharmony_ci       other than determining its reset status, and then destroying it. If a
8975bd8deadSopenharmony_ci       context receives a reset event, all other contexts in its share group
8985bd8deadSopenharmony_ci       will also receive reset events, and should be destroyed and
8995bd8deadSopenharmony_ci       recreated.
9005bd8deadSopenharmony_ci
9015bd8deadSopenharmony_ci       Apps should be cautious in interpreting the GUILTY and INNOCENT reset
9025bd8deadSopenharmony_ci       statuses. These are guidelines to the immediate cause of a reset, but
9035bd8deadSopenharmony_ci       not guarantees of the ultimate cause.
9045bd8deadSopenharmony_ci
9055bd8deadSopenharmony_ci    9. If a graphics reset occurs in a shared context, what happens in
9065bd8deadSopenharmony_ci       shared contexts?
9075bd8deadSopenharmony_ci
9085bd8deadSopenharmony_ci       RESOLVED: A reset in one context will result in a reset in all other
9095bd8deadSopenharmony_ci       contexts in its share group. This is mandated, not recommended
9105bd8deadSopenharmony_ci       behavior as of revision 14.
9115bd8deadSopenharmony_ci
9125bd8deadSopenharmony_ci   10. How can an application query for robust buffer access support,
9135bd8deadSopenharmony_ci       since this is now determined at context creation time?
9145bd8deadSopenharmony_ci
9155bd8deadSopenharmony_ci       RESOLVED. The application can query the CONTEXT_FLAGS bitfield
9165bd8deadSopenharmony_ci       using GetIntegerv and check for the presence of CONTEXT_FLAG_-
9175bd8deadSopenharmony_ci       ROBUST_ACCESS_BIT_ARB.
9185bd8deadSopenharmony_ci
9195bd8deadSopenharmony_ci   11. How is the reset notification behavior controlled?
9205bd8deadSopenharmony_ci
9215bd8deadSopenharmony_ci       RESOLVED: Reset notification behavior is determined at context
9225bd8deadSopenharmony_ci       creation time using GLX/WGL/etc. mechanisms. In order that shared
9235bd8deadSopenharmony_ci       objects be handled predictably, a context cannot share with
9245bd8deadSopenharmony_ci       another context unless both have the same reset notification
9255bd8deadSopenharmony_ci       behavior.
9265bd8deadSopenharmony_ci
9275bd8deadSopenharmony_ciRevision History
9285bd8deadSopenharmony_ci
9295bd8deadSopenharmony_ci    Rev.    Date       Author     Changes
9305bd8deadSopenharmony_ci    ----  ------------ ---------  --------------------------------------------
9315bd8deadSopenharmony_ci     18   25 Jun 2014  Jon Leech  Fix type of <params> in Get*Uniformdv.
9325bd8deadSopenharmony_ci     17   17 Sep 2012  Jon Leech  Clarify that GetnUniform* does not write
9335bd8deadSopenharmony_ci                                  any data if bufSize is less than required
9345bd8deadSopenharmony_ci                                  (Bug 8739).
9355bd8deadSopenharmony_ci     16   25 Jun 2012  Jon Leech  Add interactions with ARB_imaging and 
9365bd8deadSopenharmony_ci                                  core profile.
9375bd8deadSopenharmony_ci     15   10 Apr 2012  Jon Leech  Fix description of INVALID_OPERATION
9385bd8deadSopenharmony_ci                                  error to be when required data size is
9395bd8deadSopenharmony_ci                                  *greater* than bufSize, not *less*.
9405bd8deadSopenharmony_ci     14   22 Jul 2010  Jon Leech  Require resets to be delivered to all
9415bd8deadSopenharmony_ci                                  contexts which share objects. Expand on
9425bd8deadSopenharmony_ci                                  recommended recovery behavior in Issues 8
9435bd8deadSopenharmony_ci                                  and 9. Assign enum for new token.
9445bd8deadSopenharmony_ci     13   21 Jul 2010  Jon Leech  Remove RequestGraphicsResetNotificationARB
9455bd8deadSopenharmony_ci                                  and determine graphics reset notification
9465bd8deadSopenharmony_ci                                  behavior at context creation time in
9475bd8deadSopenharmony_ci                                  separate GLX/WGL extensions.
9485bd8deadSopenharmony_ci     12   19 Jul 2010  pdaniell   Added missing GetnUniformdARB. Add additional
9495bd8deadSopenharmony_ci                                  language to the "Graphics Reset Recovery"
9505bd8deadSopenharmony_ci                                  section to clarify objects of shared contexts.
9515bd8deadSopenharmony_ci                                  Revert revision #7 changes to restore the
9525bd8deadSopenharmony_ci                                  old "bufSize" behavior and remove the new
9535bd8deadSopenharmony_ci                                  "length" parameter, both of which proved
9545bd8deadSopenharmony_ci                                  problematic with implementation. Truncating
9555bd8deadSopenharmony_ci                                  the output buffer data written to "bufSize"
9565bd8deadSopenharmony_ci                                  length is hard to implement efficiently in
9575bd8deadSopenharmony_ci                                  software and impossible with some hardware
9585bd8deadSopenharmony_ci                                  paths. Also the additional "length" parameter
9595bd8deadSopenharmony_ci                                  caused PBO based async calls to become sync,
9605bd8deadSopenharmony_ci                                  which is undesirable.
9615bd8deadSopenharmony_ci     11   07 Jun 2010  groth      Clarify PBO errors/sized queries interaction
9625bd8deadSopenharmony_ci                                  Make consistent the app response to a reset
9635bd8deadSopenharmony_ci                                  Resolve issue 10 per revision 10 changes.
9645bd8deadSopenharmony_ci     10   07 Jun 2010  Jon Leech  Add a bit to the context flags query
9655bd8deadSopenharmony_ci                                  indicating whether or not robust buffer
9665bd8deadSopenharmony_ci                                  access was enabled at context creation.
9675bd8deadSopenharmony_ci      9   06 Jun 2010  Jon Leech  Note interactions with context creation
9685bd8deadSopenharmony_ci                                  extensions enabling robust buffer
9695bd8deadSopenharmony_ci                                  access, and add issue 10 regarding
9705bd8deadSopenharmony_ci                                  queries for robust buffer access.
9715bd8deadSopenharmony_ci                                  Remove dangling references to old
9725bd8deadSopenharmony_ci                                  ROBUST_BUFFER_ACCESS token.
9735bd8deadSopenharmony_ci      8   21 May 2010  groth      bmerry comment response
9745bd8deadSopenharmony_ci                                  Restore ARB suffixes in light of rejection from core
9755bd8deadSopenharmony_ci      7   20 May 2010  groth      Allow bounds checking using context creation flag
9765bd8deadSopenharmony_ci                                  Fix issues.
9775bd8deadSopenharmony_ci                                  Revise bounded queries to take and return lengths.
9785bd8deadSopenharmony_ci                                  Add query for current reset strategy.
9795bd8deadSopenharmony_ci                                  72 column resizing.
9805bd8deadSopenharmony_ci      6   06 May 2010  groth      ARBify, catch a few sized gets that hadn't
9815bd8deadSopenharmony_ci                                  been named correctly.
9825bd8deadSopenharmony_ci      5   05 May 2010  groth      Add clarification regarding recovered reset
9835bd8deadSopenharmony_ci                                  detection.
9845bd8deadSopenharmony_ci      4   02 May 2010  groth      Remove references to deleted functionality.
9855bd8deadSopenharmony_ci                                  Add issue addressing differences with 
9865bd8deadSopenharmony_ci      3   15 Apr 2010  groth      Describe GLSL array behavior when using
9875bd8deadSopenharmony_ci                                  robust arrays.
9885bd8deadSopenharmony_ci                                  Add issue explaining graphics reset causes.
9895bd8deadSopenharmony_ci      2   22 Mar 2010  groth      Flesh out missing secions. Remove vestiges of
9905bd8deadSopenharmony_ci                                  specified limits API. Rename sized queries.
9915bd8deadSopenharmony_ci                                  Various grammar corrections and clarifications.
9925bd8deadSopenharmony_ci      1   19 Jan 2010  mjk        Initial version
993