15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    EXT_base_instance
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_EXT_base_instance
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContact
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Daniel Koch, NVIDIA (dkoch 'at' nvidia.com)
125bd8deadSopenharmony_ci
135bd8deadSopenharmony_ciContributors
145bd8deadSopenharmony_ci
155bd8deadSopenharmony_ci    Dominik Witczak, Mobica
165bd8deadSopenharmony_ci    Jonas Gustavsson, Sony Mobile
175bd8deadSopenharmony_ci    Slawomir Grajewski, Intel
185bd8deadSopenharmony_ci    Contributors to ARB_base_instance
195bd8deadSopenharmony_ci
205bd8deadSopenharmony_ciNotice
215bd8deadSopenharmony_ci
225bd8deadSopenharmony_ci    Copyright (c) 2011-2014 The Khronos Group Inc. Copyright terms at
235bd8deadSopenharmony_ci        http://www.khronos.org/registry/speccopyright.html
245bd8deadSopenharmony_ci
255bd8deadSopenharmony_ci    Portions Copyright (c) 2014 NVIDIA Corporation.
265bd8deadSopenharmony_ci
275bd8deadSopenharmony_ciStatus
285bd8deadSopenharmony_ci
295bd8deadSopenharmony_ci    Complete
305bd8deadSopenharmony_ci
315bd8deadSopenharmony_ciVersion
325bd8deadSopenharmony_ci
335bd8deadSopenharmony_ci    Last Modified Date:         October 24, 2014
345bd8deadSopenharmony_ci    Author Revision:            4
355bd8deadSopenharmony_ci
365bd8deadSopenharmony_ciNumber
375bd8deadSopenharmony_ci
385bd8deadSopenharmony_ci    OpenGL ES Extension #203
395bd8deadSopenharmony_ci
405bd8deadSopenharmony_ciDependencies
415bd8deadSopenharmony_ci
425bd8deadSopenharmony_ci    This specification is written against the OpenGL ES 3.1 (June 4, 2014)
435bd8deadSopenharmony_ci    Specification, although it can apply to previous versions.
445bd8deadSopenharmony_ci
455bd8deadSopenharmony_ci    OpenGL ES 3.0 is required.
465bd8deadSopenharmony_ci
475bd8deadSopenharmony_ci    EXT_draw_elements_base_vertex is required.
485bd8deadSopenharmony_ci
495bd8deadSopenharmony_ci    This extension interacts with EXT_multi_draw_indirect.
505bd8deadSopenharmony_ci
515bd8deadSopenharmony_ciOverview
525bd8deadSopenharmony_ci
535bd8deadSopenharmony_ci    This extension allows the offset within buffer objects used for instanced
545bd8deadSopenharmony_ci    rendering to be specified. This is congruent with the <first> parameter
555bd8deadSopenharmony_ci    in glDrawArrays and the <basevertex> parameter in glDrawElements. When
565bd8deadSopenharmony_ci    instanced rendering is performed (for example, through
575bd8deadSopenharmony_ci    glDrawArraysInstanced), instanced vertex attributes whose vertex attribute
585bd8deadSopenharmony_ci    divisors are non-zero are fetched from enabled vertex arrays per-instance
595bd8deadSopenharmony_ci    rather than per-vertex. However, in unextended OpenGL ES, there is no way
605bd8deadSopenharmony_ci    to define the offset into those arrays from which the attributes are
615bd8deadSopenharmony_ci    fetched. This extension adds that offset in the form of a <baseinstance>
625bd8deadSopenharmony_ci    parameter to several new procedures.
635bd8deadSopenharmony_ci
645bd8deadSopenharmony_ci    The <baseinstance> parameter is added to the index of the array element,
655bd8deadSopenharmony_ci    after division by the vertex attribute divisor. This allows several sets of
665bd8deadSopenharmony_ci    instanced vertex attribute data to be stored in a single vertex array, and
675bd8deadSopenharmony_ci    the base offset of that data to be specified for each draw. Further, this
685bd8deadSopenharmony_ci    extension exposes the <baseinstance> parameter as the final and previously
695bd8deadSopenharmony_ci    undefined structure member of the draw-indirect data structure.
705bd8deadSopenharmony_ci
715bd8deadSopenharmony_ciIP Status
725bd8deadSopenharmony_ci
735bd8deadSopenharmony_ci    None.
745bd8deadSopenharmony_ci
755bd8deadSopenharmony_ciNew Procedures and Functions
765bd8deadSopenharmony_ci
775bd8deadSopenharmony_ci    void DrawArraysInstancedBaseInstanceEXT(enum mode,
785bd8deadSopenharmony_ci                                            int first,
795bd8deadSopenharmony_ci                                            sizei count,
805bd8deadSopenharmony_ci                                            sizei instancecount,
815bd8deadSopenharmony_ci                                            uint baseinstance);
825bd8deadSopenharmony_ci
835bd8deadSopenharmony_ci    void DrawElementsInstancedBaseInstanceEXT(enum mode,
845bd8deadSopenharmony_ci                                              sizei count,
855bd8deadSopenharmony_ci                                              enum type,
865bd8deadSopenharmony_ci                                              const void *indices,
875bd8deadSopenharmony_ci                                              sizei instancecount,
885bd8deadSopenharmony_ci                                              uint baseinstance);
895bd8deadSopenharmony_ci
905bd8deadSopenharmony_ci    void DrawElementsInstancedBaseVertexBaseInstanceEXT(enum mode,
915bd8deadSopenharmony_ci                                                        sizei count,
925bd8deadSopenharmony_ci                                                        enum type,
935bd8deadSopenharmony_ci                                                        const void *indices,
945bd8deadSopenharmony_ci                                                        sizei instancecount,
955bd8deadSopenharmony_ci                                                        int basevertex,
965bd8deadSopenharmony_ci                                                        uint baseinstance);
975bd8deadSopenharmony_ci
985bd8deadSopenharmony_ciNew Tokens
995bd8deadSopenharmony_ci
1005bd8deadSopenharmony_ci    None.
1015bd8deadSopenharmony_ci
1025bd8deadSopenharmony_ciModifications to Chapter 10 of the OpenGL ES 3.1 Specification (Vertex
1035bd8deadSopenharmony_ciSpecification and Drawing Commands)
1045bd8deadSopenharmony_ci
1055bd8deadSopenharmony_ci    Modification to Section 10.5, "Drawing Commands using Vertex Arrays"
1065bd8deadSopenharmony_ci
1075bd8deadSopenharmony_ci    (Modify the definition of DrawArraysOneInstance, to define the
1085bd8deadSopenharmony_ci    behaviour of the <baseinstance> parameter. Modify the 3rd paragraph
1095bd8deadSopenharmony_ci    of the definition of the command, p.247, as follows)
1105bd8deadSopenharmony_ci
1115bd8deadSopenharmony_ci    "If an enabled vertex attribute array is instanced (it has a non-zero
1125bd8deadSopenharmony_ci    <divisor> as specified by VertexAttribDivisor), the element index that
1135bd8deadSopenharmony_ci    is transferred to the GL, for all vertices, is given by
1145bd8deadSopenharmony_ci
1155bd8deadSopenharmony_ci        floor(<instance> / <divisor>) + <baseinstance>"
1165bd8deadSopenharmony_ci
1175bd8deadSopenharmony_ci
1185bd8deadSopenharmony_ci    (Replace the description of DrawArraysInstanced, p.248, with the
1195bd8deadSopenharmony_ci    following)
1205bd8deadSopenharmony_ci
1215bd8deadSopenharmony_ci    "The command
1225bd8deadSopenharmony_ci
1235bd8deadSopenharmony_ci        void DrawArraysInstancedBaseInstanceEXT(enum mode,
1245bd8deadSopenharmony_ci                                                int first,
1255bd8deadSopenharmony_ci                                                sizei count,
1265bd8deadSopenharmony_ci                                                sizei instancecount,
1275bd8deadSopenharmony_ci                                                uint baseinstance);
1285bd8deadSopenharmony_ci
1295bd8deadSopenharmony_ci    behaves identically to DrawArrays, except that <instancecount> instances of
1305bd8deadSopenharmony_ci    the range of elements are executed and the value of <instance> advances for
1315bd8deadSopenharmony_ci    each iteration. Those attributes that have non-zero values for <divisor>,
1325bd8deadSopenharmony_ci    as specified by VertexAttribDivisor, advance once every <divisor>
1335bd8deadSopenharmony_ci    instances. Additionally, the first element within those instanced vertex
1345bd8deadSopenharmony_ci    attributes is specified in <baseinstance>.
1355bd8deadSopenharmony_ci
1365bd8deadSopenharmony_ci    DrawArraysInstancedBaseInstanceEXT is equivalent to
1375bd8deadSopenharmony_ci
1385bd8deadSopenharmony_ci        if (<mode>, <count>, or <instancecount> is invalid)
1395bd8deadSopenharmony_ci            generate  appropriate  error
1405bd8deadSopenharmony_ci        else {
1415bd8deadSopenharmony_ci            for  (i = 0; i < <instancecount>; i++) {
1425bd8deadSopenharmony_ci                DrawArraysOneInstance(<mode>, <first>, <count>, i,
1435bd8deadSopenharmony_ci                                      <baseinstance>);
1445bd8deadSopenharmony_ci            }
1455bd8deadSopenharmony_ci        }
1465bd8deadSopenharmony_ci
1475bd8deadSopenharmony_ci    The command
1485bd8deadSopenharmony_ci
1495bd8deadSopenharmony_ci        void DrawArraysInstanced(enum mode,
1505bd8deadSopenharmony_ci                                 int first,
1515bd8deadSopenharmony_ci                                 sizei count,
1525bd8deadSopenharmony_ci                                 sizei primcount);
1535bd8deadSopenharmony_ci
1545bd8deadSopenharmony_ci    is equivalent to
1555bd8deadSopenharmony_ci
1565bd8deadSopenharmony_ci        DrawArraysInstancedBaseInstanceEXT(<mode>, <first>, <count>,
1575bd8deadSopenharmony_ci                                           <instancecount>, 0);"
1585bd8deadSopenharmony_ci
1595bd8deadSopenharmony_ci
1605bd8deadSopenharmony_ci
1615bd8deadSopenharmony_ci    (Update the definition of DrawArraysIndirect on p.248 as follows)
1625bd8deadSopenharmony_ci
1635bd8deadSopenharmony_ci    "The command
1645bd8deadSopenharmony_ci
1655bd8deadSopenharmony_ci        void  DrawArraysIndirect(enum mode, const void *indirect);
1665bd8deadSopenharmony_ci
1675bd8deadSopenharmony_ci    is equivalent to
1685bd8deadSopenharmony_ci
1695bd8deadSopenharmony_ci        typedef  struct {
1705bd8deadSopenharmony_ci            uint  count;
1715bd8deadSopenharmony_ci            uint  instanceCount;
1725bd8deadSopenharmony_ci            uint  first;
1735bd8deadSopenharmony_ci            uint  baseInstance;
1745bd8deadSopenharmony_ci        } DrawArraysIndirectCommand;
1755bd8deadSopenharmony_ci
1765bd8deadSopenharmony_ci        DrawArraysIndirectCommand  *cmd  =
1775bd8deadSopenharmony_ci            (DrawArraysIndirectCommand *)indirect;
1785bd8deadSopenharmony_ci
1795bd8deadSopenharmony_ci        DrawArraysInstancedBaseInstanceEXT(mode,
1805bd8deadSopenharmony_ci                                           cmd->first,
1815bd8deadSopenharmony_ci                                           cmd->count,
1825bd8deadSopenharmony_ci                                           cmd->instanceCount,
1835bd8deadSopenharmony_ci                                           cmd->baseInstance);"
1845bd8deadSopenharmony_ci
1855bd8deadSopenharmony_ci    (Retain the remainder the description of DrawArraysIndirect, but
1865bd8deadSopenharmony_ci    delete the sentence "Results are undefined if <reservedMustBeZero> is
1875bd8deadSopenharmony_ci    non-zero, but may not result in program termination." from the Errors
1885bd8deadSopenharmony_ci    section.)
1895bd8deadSopenharmony_ci
1905bd8deadSopenharmony_ci
1915bd8deadSopenharmony_ci    (Modify the definition of DrawElementsOneInstance, to define the
1925bd8deadSopenharmony_ci    behaviour of the <baseinstance> parameter. Modify the 3rd paragraph
1935bd8deadSopenharmony_ci    of the definition of the command, p.249, as follows)
1945bd8deadSopenharmony_ci
1955bd8deadSopenharmony_ci    "If an enabled vertex attribute array is instanced (it has a non-zero
1965bd8deadSopenharmony_ci    attribute divisor as specified by VertexAttribDivisor), the element that
1975bd8deadSopenharmony_ci    is transferred to the GL is given by:
1985bd8deadSopenharmony_ci
1995bd8deadSopenharmony_ci        floor(<instance> / <divisor>) + <baseinstance>"
2005bd8deadSopenharmony_ci
2015bd8deadSopenharmony_ci
2025bd8deadSopenharmony_ci    (Update the text describing DrawElements, p.250, to mention the
2035bd8deadSopenharmony_ci    <baseinstance> parameter)
2045bd8deadSopenharmony_ci
2055bd8deadSopenharmony_ci    "The command
2065bd8deadSopenharmony_ci
2075bd8deadSopenharmony_ci        void DrawElements(enum mode,
2085bd8deadSopenharmony_ci                          sizei count,
2095bd8deadSopenharmony_ci                          enum type,
2105bd8deadSopenharmony_ci                          const void *indices);
2115bd8deadSopenharmony_ci
2125bd8deadSopenharmony_ci    behaves identically to DrawElementsOneInstance with the <instance> and
2135bd8deadSopenharmony_ci    <baseinstance> parameters set to zero; the effect of calling ..."
2145bd8deadSopenharmony_ci
2155bd8deadSopenharmony_ci
2165bd8deadSopenharmony_ci    (Replace the description of DrawElementsInstanced, p.251, with the
2175bd8deadSopenharmony_ci    following)
2185bd8deadSopenharmony_ci
2195bd8deadSopenharmony_ci    "The command
2205bd8deadSopenharmony_ci
2215bd8deadSopenharmony_ci        void DrawElementsInstancedBaseInstanceEXT(enum mode,
2225bd8deadSopenharmony_ci                                                  sizei count,
2235bd8deadSopenharmony_ci                                                  enum type,
2245bd8deadSopenharmony_ci                                                  const void *indices,
2255bd8deadSopenharmony_ci                                                  sizei instancecount,
2265bd8deadSopenharmony_ci                                                  uint baseinstance);
2275bd8deadSopenharmony_ci
2285bd8deadSopenharmony_ci    behaves identically to DrawElements except that <instancecount> instances
2295bd8deadSopenharmony_ci    of the set of elements are executed, the value of <instance> advances
2305bd8deadSopenharmony_ci    between each set. Instanced attributes are advanced as they do during
2315bd8deadSopenharmony_ci    execution of DrawArraysInstancedBaseInstaceEXT, and <baseinstance> has
2325bd8deadSopenharmony_ci    the same effect. It is equivalent to:
2335bd8deadSopenharmony_ci
2345bd8deadSopenharmony_ci        if  (<mode>, <count>, <type> or <instancecount> is invalid)
2355bd8deadSopenharmony_ci            generate  appropriate  error
2365bd8deadSopenharmony_ci        else {
2375bd8deadSopenharmony_ci            for (int i = 0; i < <instancecount>;  i++) {
2385bd8deadSopenharmony_ci                DrawElementsOneInstance(<mode>, <count>, <type>, <indices>,
2395bd8deadSopenharmony_ci                                        i, <baseinstance>);
2405bd8deadSopenharmony_ci            }
2415bd8deadSopenharmony_ci        }
2425bd8deadSopenharmony_ci
2435bd8deadSopenharmony_ci    The command
2445bd8deadSopenharmony_ci
2455bd8deadSopenharmony_ci        void DrawElementsInstanced(enum mode, sizei count, enum type,
2465bd8deadSopenharmony_ci                                   const void *indices, sizei instancecount);
2475bd8deadSopenharmony_ci
2485bd8deadSopenharmony_ci    behaves identically to DrawElementsInstancedBaseInstanceEXT except that
2495bd8deadSopenharmony_ci    <baseinstance> is zero. It is equivalent to
2505bd8deadSopenharmony_ci
2515bd8deadSopenharmony_ci        DrawElementsInstancedBaseInstanceEXT(<mode>, <count>, <type>,
2525bd8deadSopenharmony_ci                                             <indices>, <instancecount>, 0);"
2535bd8deadSopenharmony_ci
2545bd8deadSopenharmony_ci
2555bd8deadSopenharmony_ci    (Add to the list of functions which include DrawElementsBaseVertexEXT,
2565bd8deadSopenharmony_ci    DrawRangeElementsBaseVertexEXT, and DrawElementsInstancedBaseVertexEXT
2575bd8deadSopenharmony_ci    (as added by EXT_draw_elements_base_vertex))
2585bd8deadSopenharmony_ci
2595bd8deadSopenharmony_ci        void DrawElementsInstancedBaseVertexBaseInstanceEXT(enum mode,
2605bd8deadSopenharmony_ci                                                        sizei count,
2615bd8deadSopenharmony_ci                                                        enum type,
2625bd8deadSopenharmony_ci                                                        const void *indices,
2635bd8deadSopenharmony_ci                                                        sizei instancecount,
2645bd8deadSopenharmony_ci                                                        int basevertex,
2655bd8deadSopenharmony_ci                                                        uint baseinstance);
2665bd8deadSopenharmony_ci
2675bd8deadSopenharmony_ci    (Append a new paragraph after the description of DrawElementsBaseVertexEXT,
2685bd8deadSopenharmony_ci    DrawRangeElementsBaseVertexEXT, and DrawElementsInstancedBaseVertexEXT
2695bd8deadSopenharmony_ci    (as added by EXT_draw_elements_base_vertex))
2705bd8deadSopenharmony_ci
2715bd8deadSopenharmony_ci    "For DrawElementsInstancedBaseVertexBaseInstanceEXT, <baseinstance> is
2725bd8deadSopenharmony_ci    used to offset the element from which instanced vertex attributes (those
2735bd8deadSopenharmony_ci    with a non-zero divisor as specified by VertexAttribDivisor) are taken."
2745bd8deadSopenharmony_ci
2755bd8deadSopenharmony_ci
2765bd8deadSopenharmony_ci    (Update the definition of DrawElementsIndirect on p.252 as follows)
2775bd8deadSopenharmony_ci
2785bd8deadSopenharmony_ci    "The command
2795bd8deadSopenharmony_ci
2805bd8deadSopenharmony_ci        void  DrawElementsIndirect(enum mode,
2815bd8deadSopenharmony_ci                                   enum type,
2825bd8deadSopenharmony_ci                                   const void *indirect );
2835bd8deadSopenharmony_ci
2845bd8deadSopenharmony_ci    is equivalent to:
2855bd8deadSopenharmony_ci
2865bd8deadSopenharmony_ci        typedef  struct {
2875bd8deadSopenharmony_ci            uint  count;
2885bd8deadSopenharmony_ci            uint  instanceCount;
2895bd8deadSopenharmony_ci            uint  firstIndex;
2905bd8deadSopenharmony_ci            int   baseVertex;
2915bd8deadSopenharmony_ci            uint  baseInstance;
2925bd8deadSopenharmony_ci        } DrawElementsIndirectCommand;
2935bd8deadSopenharmony_ci
2945bd8deadSopenharmony_ci        if  (no element array buffer is bound) {
2955bd8deadSopenharmony_ci            generate appropriate error
2965bd8deadSopenharmony_ci        } else {
2975bd8deadSopenharmony_ci            DrawElementsIndirectCommand *cmd =
2985bd8deadSopenharmony_ci                (DrawElementsIndirectCommand *)indirect;
2995bd8deadSopenharmony_ci
3005bd8deadSopenharmony_ci            DrawElementsInstancedBaseVertexBaseInstanceEXT(
3015bd8deadSopenharmony_ci                                            mode,
3025bd8deadSopenharmony_ci                                            cmd->count,
3035bd8deadSopenharmony_ci                                            type,
3045bd8deadSopenharmony_ci                                            cmd->firstIndex * size-of-type,
3055bd8deadSopenharmony_ci                                            cmd->instanceCount,
3065bd8deadSopenharmony_ci                                            cmd->baseVertex,
3075bd8deadSopenharmony_ci                                            cmd->baseInstance);
3085bd8deadSopenharmony_ci        }"
3095bd8deadSopenharmony_ci
3105bd8deadSopenharmony_ci    (Retain the remainder of the description of DrawElementsIndirect, but
3115bd8deadSopenharmony_ci    delete the sentence "Results are undefined if <reservedMustBeZero> is
3125bd8deadSopenharmony_ci    non-zero, but may not result in program termination." from the Errors
3135bd8deadSopenharmony_ci    section.)
3145bd8deadSopenharmony_ci
3155bd8deadSopenharmony_ciAdditions to the EGL/AGL/GLX/WGL Specifications
3165bd8deadSopenharmony_ci
3175bd8deadSopenharmony_ci    None.
3185bd8deadSopenharmony_ci
3195bd8deadSopenharmony_ciDependencies on EXT_multi_draw_indirect.
3205bd8deadSopenharmony_ci
3215bd8deadSopenharmony_ci    If EXT_multi_draw_indirect is supported, this extension adds <baseInstance>
3225bd8deadSopenharmony_ci    support for the MultiDraw*Indirect commands as well, because they share
3235bd8deadSopenharmony_ci    the same command structures.
3245bd8deadSopenharmony_ci
3255bd8deadSopenharmony_ciErrors
3265bd8deadSopenharmony_ci
3275bd8deadSopenharmony_ci    The errors for DrawArraysInstancedBaseInstanceEXT are equivalent to the
3285bd8deadSopenharmony_ci    errors for DrawArraysInstanced, but are repeated here for clarity:
3295bd8deadSopenharmony_ci
3305bd8deadSopenharmony_ci    - An INVALID_ENUM error is generated if <mode> is not one of the primitive
3315bd8deadSopenharmony_ci      types defined in section 10.1.
3325bd8deadSopenharmony_ci    - Specifying <first> < 0 results in undefined behavior. Generating an
3335bd8deadSopenharmony_ci      INVALID_VALUE error is recommended in this case.
3345bd8deadSopenharmony_ci    - An INVALID_VALUE error is generated if <count> is negative.
3355bd8deadSopenharmony_ci
3365bd8deadSopenharmony_ci    The errors for DrawElementsInstancedBaseInstanceEXT and
3375bd8deadSopenharmony_ci    DrawElementsInstancedBaseVertexBaseInstanceEXT are equivalent to the
3385bd8deadSopenharmony_ci    errors for DrawElementsInstanced, but are repeated here for clarity:
3395bd8deadSopenharmony_ci
3405bd8deadSopenharmony_ci    - An INVALID_ENUM error is generated if <mode> is not one of the primitive
3415bd8deadSopenharmony_ci      types defined in section 10.1.
3425bd8deadSopenharmony_ci    - An INVALID_ENUM error is generated if <type> is not UNSIGNED_BYTE,
3435bd8deadSopenharmony_ci      UNSIGNED_SHORT, or UNSIGNED_INT.
3445bd8deadSopenharmony_ci    - Using an index value greater than MAX_ELEMENT_INDEX will result in
3455bd8deadSopenharmony_ci      undefined implementation-dependent behavior, unless primitive restart is
3465bd8deadSopenharmony_ci      enabled (see section 10.3.4) and the index value is 2^32 − 1.
3475bd8deadSopenharmony_ci
3485bd8deadSopenharmony_ciNew State
3495bd8deadSopenharmony_ci
3505bd8deadSopenharmony_ci    None.
3515bd8deadSopenharmony_ci
3525bd8deadSopenharmony_ciNew Implementation Dependent State
3535bd8deadSopenharmony_ci
3545bd8deadSopenharmony_ci    None.
3555bd8deadSopenharmony_ci
3565bd8deadSopenharmony_ciConformance Testing
3575bd8deadSopenharmony_ci
3585bd8deadSopenharmony_ci    TBD.
3595bd8deadSopenharmony_ci
3605bd8deadSopenharmony_ciIssues
3615bd8deadSopenharmony_ci
3625bd8deadSopenharmony_ci    Note: These issues apply specifically to the definition of the
3635bd8deadSopenharmony_ci    EXT_base_instance specification, which is based on the OpenGL
3645bd8deadSopenharmony_ci    extension ARB_base_instance as updated in OpenGL 4.4.
3655bd8deadSopenharmony_ci    ARB_base_instance can be found in the OpenGL Registry.
3665bd8deadSopenharmony_ci
3675bd8deadSopenharmony_ci    (1) What functionality was removed from ARB_base_instance?
3685bd8deadSopenharmony_ci
3695bd8deadSopenharmony_ci    Nothing. Although there is less language here because ES 3.1 already
3705bd8deadSopenharmony_ci    includes some of the reorganizing that the original extension added.
3715bd8deadSopenharmony_ci
3725bd8deadSopenharmony_ci    (2) What functionality was changed and added relative to
3735bd8deadSopenharmony_ci        ARB_base_instance?
3745bd8deadSopenharmony_ci
3755bd8deadSopenharmony_ci      - EXT_base_instance more closely matches the language of OpenGL 4.4
3765bd8deadSopenharmony_ci      - the <primCount> parameter was renamed to <instanceCount>
3775bd8deadSopenharmony_ci
3785bd8deadSopenharmony_ci    (3) Do these new draw calls require a vertex array object to be bound?
3795bd8deadSopenharmony_ci
3805bd8deadSopenharmony_ci    RESOLVED: No. The DrawArrays and DrawArraysInstanced commands do not
3815bd8deadSopenharmony_ci    require a vertex array object to be bound in ES 3.1 and since these are
3825bd8deadSopenharmony_ci    specializations of DrawArraysInstancedBaseInstanceEXT, it also does not
3835bd8deadSopenharmony_ci    require one to be bound.  Similarly the DrawElements and
3845bd8deadSopenharmony_ci    DrawElementsInstanced commands do not require a vertex array object to be
3855bd8deadSopenharmony_ci    bound in ES 3.1, and since these commands are specializations of
3865bd8deadSopenharmony_ci    DrawElementsInstancedBaseInstanceEXT and
3875bd8deadSopenharmony_ci    DrawElementsInstancedBaseVertexBaseInstanceEXT, these commands also do not
3885bd8deadSopenharmony_ci    require one to be bound.
3895bd8deadSopenharmony_ci
3905bd8deadSopenharmony_ci    (4) Do these new draw calls support client memory arrays?
3915bd8deadSopenharmony_ci
3925bd8deadSopenharmony_ci    RESOLVED: Yes. There are no restrictions on using client-side memory for
3935bd8deadSopenharmony_ci    the other direct drawing commands in ES 3.1, so these command support
3945bd8deadSopenharmony_ci    them as well. As per issue (3), the old commands are specializations of
3955bd8deadSopenharmony_ci    the new commands, so we keep a comparable feature set.
3965bd8deadSopenharmony_ci
3975bd8deadSopenharmony_ci
3985bd8deadSopenharmony_ciRevision History
3995bd8deadSopenharmony_ci
4005bd8deadSopenharmony_ci    Rev.    Date      Author    Changes
4015bd8deadSopenharmony_ci    ----  ----------  --------  -----------------------------------------
4025bd8deadSopenharmony_ci    4     10/24/2014  dkoch     Mark complete and issues resolved.
4035bd8deadSopenharmony_ci
4045bd8deadSopenharmony_ci    3     06/24/2014  dkoch     Fix typographical issues noted by Dominik.
4055bd8deadSopenharmony_ci
4065bd8deadSopenharmony_ci    2     06/20/2014  dkoch     Add interaction with EXT_multi_draw_indirect.
4075bd8deadSopenharmony_ci
4085bd8deadSopenharmony_ci    1     06/13/2014  dkoch     Initial version for ES based on v6 of
4095bd8deadSopenharmony_ci                                ARB_base_instance.
410