15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    ARB_draw_indirect
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_ARB_draw_indirect
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContact
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Jeff Bolz, NVIDIA Corporation (jbolz 'at' nvidia.com)
125bd8deadSopenharmony_ci    Pat Brown, NVIDIA Corporation (pbrown 'at' nvidia.com)
135bd8deadSopenharmony_ci
145bd8deadSopenharmony_ciContributors
155bd8deadSopenharmony_ci
165bd8deadSopenharmony_ci    Barthold Lichtenbelt, NVIDIA
175bd8deadSopenharmony_ci    Bill Licea-Kane, AMD
185bd8deadSopenharmony_ci    Bruce Merry, ARM
195bd8deadSopenharmony_ci    Graham Sellers, AMD
205bd8deadSopenharmony_ci    Greg Roth, NVIDIA
215bd8deadSopenharmony_ci    Nick Haemel, AMD
225bd8deadSopenharmony_ci    Pierre Boudier, AMD
235bd8deadSopenharmony_ci    Piers Daniell, NVIDIA
245bd8deadSopenharmony_ci
255bd8deadSopenharmony_ciNotice
265bd8deadSopenharmony_ci
275bd8deadSopenharmony_ci    Copyright (c) 2010-2013 The Khronos Group Inc. Copyright terms at
285bd8deadSopenharmony_ci        http://www.khronos.org/registry/speccopyright.html
295bd8deadSopenharmony_ci
305bd8deadSopenharmony_ciSpecification Update Policy
315bd8deadSopenharmony_ci
325bd8deadSopenharmony_ci    Khronos-approved extension specifications are updated in response to
335bd8deadSopenharmony_ci    issues and bugs prioritized by the Khronos OpenGL Working Group. For
345bd8deadSopenharmony_ci    extensions which have been promoted to a core Specification, fixes will
355bd8deadSopenharmony_ci    first appear in the latest version of that core Specification, and will
365bd8deadSopenharmony_ci    eventually be backported to the extension document. This policy is
375bd8deadSopenharmony_ci    described in more detail at
385bd8deadSopenharmony_ci        https://www.khronos.org/registry/OpenGL/docs/update_policy.php
395bd8deadSopenharmony_ci
405bd8deadSopenharmony_ciStatus
415bd8deadSopenharmony_ci
425bd8deadSopenharmony_ci    Complete. Approved by the ARB at the 2010/01/22 F2F meeting.
435bd8deadSopenharmony_ci    Approved by the Khronos Board of Promoters on March 10, 2010.
445bd8deadSopenharmony_ci
455bd8deadSopenharmony_ciVersion
465bd8deadSopenharmony_ci
475bd8deadSopenharmony_ci    Last Modified Date:         09/17/2012
485bd8deadSopenharmony_ci    Revision:                   7
495bd8deadSopenharmony_ci
505bd8deadSopenharmony_ciNumber
515bd8deadSopenharmony_ci
525bd8deadSopenharmony_ci    ARB Extension #87
535bd8deadSopenharmony_ci
545bd8deadSopenharmony_ciDependencies
555bd8deadSopenharmony_ci
565bd8deadSopenharmony_ci    OpenGL 3.1 is required.
575bd8deadSopenharmony_ci
585bd8deadSopenharmony_ci    This extension is written against the OpenGL 3.2 specification with 
595bd8deadSopenharmony_ci    the Compatibility Profile.
605bd8deadSopenharmony_ci
615bd8deadSopenharmony_ci    This extension interacts with NV_vertex_buffer_unified_memory.
625bd8deadSopenharmony_ci
635bd8deadSopenharmony_ci    This extension interacts with ARB_instanced_arrays.
645bd8deadSopenharmony_ci
655bd8deadSopenharmony_ci    This extension interacts with ARB_compatibility.
665bd8deadSopenharmony_ci
675bd8deadSopenharmony_ciOverview
685bd8deadSopenharmony_ci
695bd8deadSopenharmony_ci    This extension provides a mechanism for supplying the arguments to a 
705bd8deadSopenharmony_ci    DrawArraysInstanced or DrawElementsInstancedBaseVertex from buffer object
715bd8deadSopenharmony_ci    memory. This is not particularly useful for applications where the CPU 
725bd8deadSopenharmony_ci    knows the values of the arguments beforehand, but is helpful when the 
735bd8deadSopenharmony_ci    values will be generated on the GPU through any mechanism that can write
745bd8deadSopenharmony_ci    to a buffer object including image stores, atomic counters, or compute
755bd8deadSopenharmony_ci    interop. This allows the GPU to consume these arguments without a round-
765bd8deadSopenharmony_ci    trip to the CPU or the expensive synchronization that would involve. This
775bd8deadSopenharmony_ci    is similar to the DrawTransformFeedbackEXT command from 
785bd8deadSopenharmony_ci    EXT_transform_feedback2, but offers much more flexibility in both 
795bd8deadSopenharmony_ci    generating the arguments and in the type of Draws that can be accomplished.
805bd8deadSopenharmony_ci
815bd8deadSopenharmony_ciIP Status
825bd8deadSopenharmony_ci
835bd8deadSopenharmony_ci    No known IP claims.
845bd8deadSopenharmony_ci
855bd8deadSopenharmony_ciNew Procedures and Functions
865bd8deadSopenharmony_ci
875bd8deadSopenharmony_ci    void DrawArraysIndirect(enum mode, const void *indirect);
885bd8deadSopenharmony_ci    void DrawElementsIndirect(enum mode, enum type, const void *indirect);
895bd8deadSopenharmony_ci
905bd8deadSopenharmony_ciNew Tokens
915bd8deadSopenharmony_ci
925bd8deadSopenharmony_ci    Accepted by the <target> parameters of BindBuffer, BufferData,
935bd8deadSopenharmony_ci    BufferSubData, MapBuffer, UnmapBuffer, GetBufferSubData,
945bd8deadSopenharmony_ci    GetBufferPointerv, MapBufferRange, FlushMappedBufferRange,
955bd8deadSopenharmony_ci    GetBufferParameteriv, and CopyBufferSubData:
965bd8deadSopenharmony_ci
975bd8deadSopenharmony_ci        DRAW_INDIRECT_BUFFER                            0x8F3F
985bd8deadSopenharmony_ci
995bd8deadSopenharmony_ci    Accepted by the <value> parameter of GetIntegerv, GetBooleanv, GetFloatv,
1005bd8deadSopenharmony_ci    and GetDoublev:
1015bd8deadSopenharmony_ci
1025bd8deadSopenharmony_ci        DRAW_INDIRECT_BUFFER_BINDING                    0x8F43
1035bd8deadSopenharmony_ci
1045bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 3.2 Specification (OpenGL Operation)
1055bd8deadSopenharmony_ci
1065bd8deadSopenharmony_ci    Add to Section 2.8.1 p. 40 (Drawing Commands)
1075bd8deadSopenharmony_ci
1085bd8deadSopenharmony_ci    The command
1095bd8deadSopenharmony_ci
1105bd8deadSopenharmony_ci        DrawArraysIndirect(enum mode, const void *indirect);
1115bd8deadSopenharmony_ci
1125bd8deadSopenharmony_ci    behaves as follows:
1135bd8deadSopenharmony_ci
1145bd8deadSopenharmony_ci        typedef struct {
1155bd8deadSopenharmony_ci          GLuint count;
1165bd8deadSopenharmony_ci          GLuint primCount;
1175bd8deadSopenharmony_ci          GLuint first;
1185bd8deadSopenharmony_ci          GLuint reservedMustBeZero;
1195bd8deadSopenharmony_ci        } DrawArraysIndirectCommand;
1205bd8deadSopenharmony_ci
1215bd8deadSopenharmony_ci        if (mode is invalid) {
1225bd8deadSopenharmony_ci            generate appropriate error
1235bd8deadSopenharmony_ci        } else {
1245bd8deadSopenharmony_ci            DrawArraysIndirectCommand *cmd = (DrawArraysIndirectCommand *)indirect;
1255bd8deadSopenharmony_ci            DrawArraysInstanced(mode, cmd->first, cmd->count, cmd->primCount);
1265bd8deadSopenharmony_ci        }
1275bd8deadSopenharmony_ci
1285bd8deadSopenharmony_ci    As with regular DrawArraysInstanced commands, the vertex attributes 
1295bd8deadSopenharmony_ci    may be sourced from client arrays or vertex buffer objects (if buffers 
1305bd8deadSopenharmony_ci    are bound). Unlike regular DrawArraysInstanced commands, the <first>
1315bd8deadSopenharmony_ci    argument is unsigned and cannot cause an error. The results are undefined
1325bd8deadSopenharmony_ci    if <reservedMustBeZero> is non-zero and may not result in program
1335bd8deadSopenharmony_ci    termination.
1345bd8deadSopenharmony_ci
1355bd8deadSopenharmony_ci    The command
1365bd8deadSopenharmony_ci
1375bd8deadSopenharmony_ci        DrawElementsIndirect(enum mode, enum type, const void *indirect);
1385bd8deadSopenharmony_ci
1395bd8deadSopenharmony_ci    behaves as follows:
1405bd8deadSopenharmony_ci
1415bd8deadSopenharmony_ci        typedef struct {
1425bd8deadSopenharmony_ci          GLuint count;
1435bd8deadSopenharmony_ci          GLuint primCount;
1445bd8deadSopenharmony_ci          GLuint firstIndex;
1455bd8deadSopenharmony_ci          GLint  baseVertex;
1465bd8deadSopenharmony_ci          GLuint reservedMustBeZero;
1475bd8deadSopenharmony_ci        } DrawElementsIndirectCommand;
1485bd8deadSopenharmony_ci
1495bd8deadSopenharmony_ci        if (mode or type is invalid, or no index buffer) {
1505bd8deadSopenharmony_ci            generate appropriate error
1515bd8deadSopenharmony_ci        } else {
1525bd8deadSopenharmony_ci            DrawElementsIndirectCommand *cmd = (DrawElementsIndirectCommand *)indirect;
1535bd8deadSopenharmony_ci
1545bd8deadSopenharmony_ci            DrawElementsInstancedBaseVertex(mode, cmd->count, type,
1555bd8deadSopenharmony_ci                cmd->firstIndex * size-of-type, cmd->primCount, cmd->baseVertex);
1565bd8deadSopenharmony_ci        }
1575bd8deadSopenharmony_ci
1585bd8deadSopenharmony_ci    As with regular DrawElementsInstancedBaseVertex commands, the vertex 
1595bd8deadSopenharmony_ci    attributes may be sourced from client arrays or vertex buffer objects 
1605bd8deadSopenharmony_ci    (if objects are bound). Unlike regular DrawElementsInstancedBaseVertex 
1615bd8deadSopenharmony_ci    commands, the indices may not come from a client array and must come from 
1625bd8deadSopenharmony_ci    an index buffer. If no element array buffer is bound, an INVALID_OPERATION 
1635bd8deadSopenharmony_ci    error is generated. The results are undefined if <reservedMustBeZero> is
1645bd8deadSopenharmony_ci    non-zero and may not result in program termination.
1655bd8deadSopenharmony_ci
1665bd8deadSopenharmony_ci    All elements of DrawArraysIndirectCommand and 
1675bd8deadSopenharmony_ci    DrawElementsIndirectCommand are 32bit values, and both structures are
1685bd8deadSopenharmony_ci    tightly packed.
1695bd8deadSopenharmony_ci
1705bd8deadSopenharmony_ci    Add to Section 2.9 (Buffer Objects)
1715bd8deadSopenharmony_ci
1725bd8deadSopenharmony_ci    Add to Table 2.7 (p. 48):
1735bd8deadSopenharmony_ci
1745bd8deadSopenharmony_ci    Target name                 Purpose                 Described in sections(s)
1755bd8deadSopenharmony_ci    -----------------------     ----------              -------------------------
1765bd8deadSopenharmony_ci    DRAW_INDIRECT_BUFFER        Indirect draw commands  2.9.9
1775bd8deadSopenharmony_ci
1785bd8deadSopenharmony_ci    Add a new Section 2.9.9 (Indirect Commands in Buffer Objects)
1795bd8deadSopenharmony_ci
1805bd8deadSopenharmony_ci    Arguments to DrawArraysIndirect and DrawElementsIndirect commands 
1815bd8deadSopenharmony_ci    may be stored in buffer objects.
1825bd8deadSopenharmony_ci
1835bd8deadSopenharmony_ci    Initially zero is bound to DRAW_INDIRECT_BUFFER. In the
1845bd8deadSopenharmony_ci    compatibility profile, this indicates that DrawArraysIndirect and
1855bd8deadSopenharmony_ci    DrawElementsIndirect are to source their arguments directly from the 
1865bd8deadSopenharmony_ci    pointer passed as their <indirect> parameters. In the core profile,
1875bd8deadSopenharmony_ci    an INVALID_OPERATION error is generated if zero is bound to
1885bd8deadSopenharmony_ci    DRAW_INDIRECT_BUFFER and DrawArraysIndirect or DrawElementsIndirect
1895bd8deadSopenharmony_ci    is called.
1905bd8deadSopenharmony_ci
1915bd8deadSopenharmony_ci    A buffer object is bound to DRAW_INDIRECT_BUFFER by calling 
1925bd8deadSopenharmony_ci    BindBuffer with <target> set to DRAW_INDIRECT_BUFFER, and <buffer>
1935bd8deadSopenharmony_ci    set to the name of the buffer object. If no corresponding buffer 
1945bd8deadSopenharmony_ci    object exists, one is initialized as defined in section 2.9.
1955bd8deadSopenharmony_ci
1965bd8deadSopenharmony_ci    While a non-zero buffer object name is bound to DRAW_INDIRECT_BUFFER,
1975bd8deadSopenharmony_ci    DrawArraysIndirect and DrawElementsIndirect source their arguments
1985bd8deadSopenharmony_ci    from that buffer object, using their <indirect> parameters as offsets
1995bd8deadSopenharmony_ci    into the buffer object in the same fashion as described in section 2.9.3.
2005bd8deadSopenharmony_ci    An INVALID_OPERATION error is generated if the commands source data
2015bd8deadSopenharmony_ci    beyond the end of the buffer object or if <indirect> is not word aligned.
2025bd8deadSopenharmony_ci
2035bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 3.2 Specification (Rasterization)
2045bd8deadSopenharmony_ci
2055bd8deadSopenharmony_ci    None.
2065bd8deadSopenharmony_ci
2075bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 3.2 Specification (Per-Fragment
2085bd8deadSopenharmony_ciOperations and the Frame Buffer)
2095bd8deadSopenharmony_ci
2105bd8deadSopenharmony_ci    None.
2115bd8deadSopenharmony_ci
2125bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 3.2 Specification (Special Functions)
2135bd8deadSopenharmony_ci
2145bd8deadSopenharmony_ci    None.
2155bd8deadSopenharmony_ci
2165bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 3.2 Specification (State and
2175bd8deadSopenharmony_ciState Requests)
2185bd8deadSopenharmony_ci
2195bd8deadSopenharmony_ci    None.
2205bd8deadSopenharmony_ci
2215bd8deadSopenharmony_ciAdditions to Appendix A of the OpenGL 3.2 Specification (Invariance)
2225bd8deadSopenharmony_ci
2235bd8deadSopenharmony_ci    None.
2245bd8deadSopenharmony_ci
2255bd8deadSopenharmony_ciAdditions to the AGL/GLX/WGL Specifications
2265bd8deadSopenharmony_ci
2275bd8deadSopenharmony_ci    None.
2285bd8deadSopenharmony_ci
2295bd8deadSopenharmony_ciGLX Protocol
2305bd8deadSopenharmony_ci
2315bd8deadSopenharmony_ci    TBD.
2325bd8deadSopenharmony_ci
2335bd8deadSopenharmony_ciErrors
2345bd8deadSopenharmony_ci
2355bd8deadSopenharmony_ci    INVALID_ENUM is generated by DrawArraysIndirect/DrawElementsIndirect
2365bd8deadSopenharmony_ci    if <mode> is not a valid begin mode.
2375bd8deadSopenharmony_ci
2385bd8deadSopenharmony_ci    INVALID_ENUM is generated by DrawElementsIndirect if <type> is not 
2395bd8deadSopenharmony_ci    one of UNSIGNED_BYTE, UNSIGNED_SHORT, or UNSIGNED_INT.
2405bd8deadSopenharmony_ci
2415bd8deadSopenharmony_ci    INVALID_OPERATION is generated by DrawElementsIndirect if no buffer 
2425bd8deadSopenharmony_ci    is bound to ELEMENT_ARRAY_BUFFER.
2435bd8deadSopenharmony_ci
2445bd8deadSopenharmony_ci    INVALID_OPERATION is generated by DrawArraysIndirect and
2455bd8deadSopenharmony_ci    DrawElementsIndirect if zero is bound to DRAW_INDIRECT_BUFFER and if
2465bd8deadSopenharmony_ci    the OpenGL context implements the core profile.
2475bd8deadSopenharmony_ci
2485bd8deadSopenharmony_ci    INVALID_OPERATION is generated by DrawArraysIndirect and
2495bd8deadSopenharmony_ci    DrawElementsIndirect if commands source data beyond the end of a buffer
2505bd8deadSopenharmony_ci    object or if <indirect> is not word aligned.
2515bd8deadSopenharmony_ci
2525bd8deadSopenharmony_ciNew State
2535bd8deadSopenharmony_ci
2545bd8deadSopenharmony_ci    Update Table 6.11, p. 405 (Vertex Array Data not in Vertex Array objects)
2555bd8deadSopenharmony_ci
2565bd8deadSopenharmony_ci    Get Value                           Type    Get Command         Initial Value   Sec     Attribute
2575bd8deadSopenharmony_ci    ---------                           ----    -----------         -------------   ---     ---------
2585bd8deadSopenharmony_ci    DRAW_INDIRECT_BUFFER_BINDING         Z+     GetIntegerv               0         2.9     none
2595bd8deadSopenharmony_ci
2605bd8deadSopenharmony_ciNew Implementation Dependent State
2615bd8deadSopenharmony_ci
2625bd8deadSopenharmony_ci    None.
2635bd8deadSopenharmony_ci
2645bd8deadSopenharmony_ciDependencies on NV_vertex_buffer_unified_memory
2655bd8deadSopenharmony_ci
2665bd8deadSopenharmony_ci    If NV_vertex_buffer_unified_memory is supported, the following additional
2675bd8deadSopenharmony_ci    edits are required:
2685bd8deadSopenharmony_ci        
2695bd8deadSopenharmony_ci    Accepted by the <cap> parameter of GetBufferParameterui64vNV:
2705bd8deadSopenharmony_ci
2715bd8deadSopenharmony_ci        DRAW_INDIRECT_BUFFER.
2725bd8deadSopenharmony_ci
2735bd8deadSopenharmony_ci    Accepted by the <cap> parameter of DisableClientState, 
2745bd8deadSopenharmony_ci    EnableClientState, IsEnabled:
2755bd8deadSopenharmony_ci
2765bd8deadSopenharmony_ci        DRAW_INDIRECT_UNIFIED_NV                        0x8F40
2775bd8deadSopenharmony_ci
2785bd8deadSopenharmony_ci    Accepted by the <pname> parameter of BufferAddressRangeNV 
2795bd8deadSopenharmony_ci    and the <value> parameter of GetIntegerui64vNV: 
2805bd8deadSopenharmony_ci
2815bd8deadSopenharmony_ci        DRAW_INDIRECT_ADDRESS_NV                        0x8F41
2825bd8deadSopenharmony_ci
2835bd8deadSopenharmony_ci    Accepted by the <value> parameter of GetIntegerv:
2845bd8deadSopenharmony_ci
2855bd8deadSopenharmony_ci        DRAW_INDIRECT_LENGTH_NV                         0x8F42
2865bd8deadSopenharmony_ci
2875bd8deadSopenharmony_ci    In Section 2.8.1, mention that vertex attributes and indices may be 
2885bd8deadSopenharmony_ci    sourced from GPU addresses if VERTEX_ATTRIB_ARRAY_UNIFIED_NV/
2895bd8deadSopenharmony_ci    ELEMENT_ARRAY_UNIFIED_NV are enabled.
2905bd8deadSopenharmony_ci
2915bd8deadSopenharmony_ci    Add to Section 2.9:
2925bd8deadSopenharmony_ci
2935bd8deadSopenharmony_ci    While DRAW_INDIRECT_UNIFIED_NV is enabled, DrawArraysIndirect and 
2945bd8deadSopenharmony_ci    DrawElementsIndirect, source their arguments from the address 
2955bd8deadSopenharmony_ci    specified by the command BufferAddressRange where <pname> is 
2965bd8deadSopenharmony_ci    DRAW_INDIRECT_ADDRESS_NV and <index> is zero, added to the <indirect> 
2975bd8deadSopenharmony_ci    parameter. If the commands source data beyond and including (<address>
2985bd8deadSopenharmony_ci    + <length>), an INVALID_OPERATION error will be generated. If the draw
2995bd8deadSopenharmony_ci    indirect address range does not belong to a buffer object that is 
3005bd8deadSopenharmony_ci    resident at the time of the Draw, undefined results, possibly 
3015bd8deadSopenharmony_ci    including program termination, may occur.
3025bd8deadSopenharmony_ci
3035bd8deadSopenharmony_ci    INVALID_OPERATION is generated by DrawElementsIndirect if no buffer 
3045bd8deadSopenharmony_ci    is bound to ELEMENT_ARRAY_BUFFER and DRAW_INDIRECT_UNIFIED_NV is 
3055bd8deadSopenharmony_ci    disabled.
3065bd8deadSopenharmony_ci
3075bd8deadSopenharmony_ci    INVALID_OPERATION is generated by DrawArraysIndirect and 
3085bd8deadSopenharmony_ci    DrawElementsIndirect if DRAW_INDIRECT_UNIFIED_NV is enabled and
3095bd8deadSopenharmony_ci    commands source data beyond and including (address + length).
3105bd8deadSopenharmony_ci
3115bd8deadSopenharmony_ci    Update Table 6.11:
3125bd8deadSopenharmony_ci
3135bd8deadSopenharmony_ci    Get Value                           Type    Get Command         Initial Value   Sec     Attribute
3145bd8deadSopenharmony_ci    ---------                           ----    -----------         -------------   ---     ---------
3155bd8deadSopenharmony_ci    DRAW_INDIRECT_UNIFIED_NV             B      IsEnabled               FALSE       2.9     none
3165bd8deadSopenharmony_ci    DRAW_INDIRECT_ADDRESS_NV            Z64+    GetIntegerui64vNV         0         2.9     none
3175bd8deadSopenharmony_ci    DRAW_INDIRECT_LENGTH_NV              Z+     GetIntegerv               0         2.9     none
3185bd8deadSopenharmony_ci
3195bd8deadSopenharmony_ciDependencies on NV_vertex_buffer_unified_memory and ARB_compatibility
3205bd8deadSopenharmony_ci
3215bd8deadSopenharmony_ci    If the context version is greater than 3.0 and does not include 
3225bd8deadSopenharmony_ci    ARB_compatibility functionality, then EnableClientState and 
3235bd8deadSopenharmony_ci    DisableClientState have been deprecated and removed. This extension
3245bd8deadSopenharmony_ci    adds back those commands if NV_vertex_buffer_unified_memory is supported, 
3255bd8deadSopenharmony_ci    but only requires that they accept the DRAW_INDIRECT_UNIFIED_NV token.
3265bd8deadSopenharmony_ci
3275bd8deadSopenharmony_ciDependencies on ARB_compatibility
3285bd8deadSopenharmony_ci
3295bd8deadSopenharmony_ci    When the ARB_compatibility extension is not supported, client arrays
3305bd8deadSopenharmony_ci    cannot be used to source vertex attribute data.
3315bd8deadSopenharmony_ci
3325bd8deadSopenharmony_ciDependencies on ARB_instanced_arrays
3335bd8deadSopenharmony_ci
3345bd8deadSopenharmony_ci    This extension does not require ARB_instanced_arrays, but reserves 
3355bd8deadSopenharmony_ci    space in the Command structures such that a future extension could
3365bd8deadSopenharmony_ci    add a "firstInstance" member which would initialize the instance 
3375bd8deadSopenharmony_ci    counter used for computing which vertex attrib array element to use.
3385bd8deadSopenharmony_ci    Note that ARB_instanced_arrays does not currently support 
3395bd8deadSopenharmony_ci    "firstInstance", it only has a frequency divider.
3405bd8deadSopenharmony_ci
3415bd8deadSopenharmony_ciIssues
3425bd8deadSopenharmony_ci
3435bd8deadSopenharmony_ci    (1) What is this good for? 
3445bd8deadSopenharmony_ci    
3455bd8deadSopenharmony_ci    RESOLVED: Compute interoperability. Recirculating results written via
3465bd8deadSopenharmony_ci    image stores or atomic counters.
3475bd8deadSopenharmony_ci
3485bd8deadSopenharmony_ci    (2) Should we allow indirect draws from client memory?  Should we have a 
3495bd8deadSopenharmony_ci    buffer object binding for this?
3505bd8deadSopenharmony_ci
3515bd8deadSopenharmony_ci    RESOLVED: YES. Although, using client vertex arrays would somewhat defeat 
3525bd8deadSopenharmony_ci    the purpose of this extension. Note that this issue only applies to 
3535bd8deadSopenharmony_ci    implementations supporting the ARB_compatibility extension. 
3545bd8deadSopenharmony_ci
3555bd8deadSopenharmony_ci    One non-obvious restriction is that DrawElementsIndirect doesn't accept
3565bd8deadSopenharmony_ci    an <indices> parameter, so an index buffer is required.    
3575bd8deadSopenharmony_ci
3585bd8deadSopenharmony_ci    (3) How do we specify the index size for DrawElements calls?
3595bd8deadSopenharmony_ci
3605bd8deadSopenharmony_ci    RESOLVED: Passed into the command, not pulled out of the struct.
3615bd8deadSopenharmony_ci
3625bd8deadSopenharmony_ci    (4) For DrawElements calls, in what unit are the offsets into the index
3635bd8deadSopenharmony_ci    buffer.
3645bd8deadSopenharmony_ci
3655bd8deadSopenharmony_ci    RESOLVED: In indices, not in bytes.
3665bd8deadSopenharmony_ci
3675bd8deadSopenharmony_ci    (5) Should the new state be part of the VAO?
3685bd8deadSopenharmony_ci
3695bd8deadSopenharmony_ci    RESOLVED: No. 
3705bd8deadSopenharmony_ci
3715bd8deadSopenharmony_ci    (6) Should gl.h/glext.h provide structure definitions?
3725bd8deadSopenharmony_ci
3735bd8deadSopenharmony_ci    RESOLVED. No. It is not possible to define the structures in such a way
3745bd8deadSopenharmony_ci    that all compilers would pack them correctly.
3755bd8deadSopenharmony_ci
3765bd8deadSopenharmony_ciRevision History
3775bd8deadSopenharmony_ci
3785bd8deadSopenharmony_ci    Rev.    Date    Author    Changes
3795bd8deadSopenharmony_ci    ----  --------  --------  ------------------------------------------------
3805bd8deadSopenharmony_ci     7   09/17/2012 Jon Leech Remove BindBufferRange/Base from commands for
3815bd8deadSopenharmony_ci                              which DRAW_INDIRECT_BUFFER is a valid target
3825bd8deadSopenharmony_ci                              (Bug 7794).
3835bd8deadSopenharmony_ci
3845bd8deadSopenharmony_ci     6   03/07/2012 Jon Leech Add missing error when no indirect buffer is
3855bd8deadSopenharmony_ci                              bound and the indirect draw commands are
3865bd8deadSopenharmony_ci                              called (Bug 7211).
3875bd8deadSopenharmony_ci
3885bd8deadSopenharmony_ci     5   12/07/2009 pdaniell  Remove ARB suffix from new tokens for core spec.
3895bd8deadSopenharmony_ci
3905bd8deadSopenharmony_ci     4   10/29/2009 pdaniell  Convert to ARB.
3915bd8deadSopenharmony_ci
3925bd8deadSopenharmony_ci     3   10/21/2009 pdaniell  Minor edits based on Bruce's feedback. Added
3935bd8deadSopenharmony_ci                              full list of Get* calls for new
3945bd8deadSopenharmony_ci                              DRAW_INDIRECT_BUFFER_BINDING_EXT token.
3955bd8deadSopenharmony_ci                              Specified behavior when reservedMustBeZero is
3965bd8deadSopenharmony_ci                              non-zero. Added INVALID_VALUE error when
3975bd8deadSopenharmony_ci                              <indirect> is not a multiple of GLuint.
3985bd8deadSopenharmony_ci
3995bd8deadSopenharmony_ci     2              jbolz     Internal revisions.
4005bd8deadSopenharmony_ci
4015bd8deadSopenharmony_ci     1              pbrown    Internal revisions.
402