15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    ANGLE_instanced_arrays
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_ANGLE_instanced_arrays
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContributors
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Contributors to ARB_instanced_arrays
125bd8deadSopenharmony_ci    Nicolas Capens, TransGaming Inc.
135bd8deadSopenharmony_ci    James Helferty, TransGaming Inc.
145bd8deadSopenharmony_ci    Kenneth Russell, Google Inc.
155bd8deadSopenharmony_ci    Vangelis Kokkevis, Google Inc.
165bd8deadSopenharmony_ci
175bd8deadSopenharmony_ciContact
185bd8deadSopenharmony_ci
195bd8deadSopenharmony_ci    Daniel Koch, TransGaming Inc. (daniel 'at' transgaming.com)
205bd8deadSopenharmony_ci
215bd8deadSopenharmony_ciStatus
225bd8deadSopenharmony_ci
235bd8deadSopenharmony_ci    Implemented in ANGLE r976.
245bd8deadSopenharmony_ci
255bd8deadSopenharmony_ciVersion
265bd8deadSopenharmony_ci
275bd8deadSopenharmony_ci    Last Modified Date: February 3, 2017
285bd8deadSopenharmony_ci    Author Revision: 4
295bd8deadSopenharmony_ci
305bd8deadSopenharmony_ciNumber
315bd8deadSopenharmony_ci
325bd8deadSopenharmony_ci    OpenGL ES Extension #109
335bd8deadSopenharmony_ci
345bd8deadSopenharmony_ciDependencies
355bd8deadSopenharmony_ci
365bd8deadSopenharmony_ci    OpenGL ES 2.0 is required.
375bd8deadSopenharmony_ci
385bd8deadSopenharmony_ci    This extension is written against the OpenGL ES 2.0 Specification.
395bd8deadSopenharmony_ci
405bd8deadSopenharmony_ciOverview
415bd8deadSopenharmony_ci
425bd8deadSopenharmony_ci    A common use case in GL for some applications is to be able to
435bd8deadSopenharmony_ci    draw the same object, or groups of similar objects that share
445bd8deadSopenharmony_ci    vertex data, primitive count and type, multiple times.  This
455bd8deadSopenharmony_ci    extension provides a means of accelerating such use cases while
465bd8deadSopenharmony_ci    restricting the number of API calls, and keeping the amount of
475bd8deadSopenharmony_ci    duplicate data to a minimum.
485bd8deadSopenharmony_ci
495bd8deadSopenharmony_ci    This extension introduces an array "divisor" for generic
505bd8deadSopenharmony_ci    vertex array attributes, which when non-zero specifies that the
515bd8deadSopenharmony_ci    attribute is "instanced."  An instanced attribute does not
525bd8deadSopenharmony_ci    advance per-vertex as usual, but rather after every <divisor>
535bd8deadSopenharmony_ci    conceptual draw calls.
545bd8deadSopenharmony_ci
555bd8deadSopenharmony_ci    (Attributes which aren't instanced are repeated in their entirety
565bd8deadSopenharmony_ci    for every conceptual draw call.)
575bd8deadSopenharmony_ci
585bd8deadSopenharmony_ci    By specifying transform data in an instanced attribute or series
595bd8deadSopenharmony_ci    of instanced attributes, vertex shaders can, in concert with the
605bd8deadSopenharmony_ci    instancing draw calls, draw multiple instances of an object with
615bd8deadSopenharmony_ci    one draw call.
625bd8deadSopenharmony_ci
635bd8deadSopenharmony_ciIP Status
645bd8deadSopenharmony_ci
655bd8deadSopenharmony_ci    No known IP claims.
665bd8deadSopenharmony_ci
675bd8deadSopenharmony_ciNew Tokens
685bd8deadSopenharmony_ci
695bd8deadSopenharmony_ci    Accepted by the <pname> parameters of GetVertexAttribfv and
705bd8deadSopenharmony_ci    GetVertexAttribiv:
715bd8deadSopenharmony_ci
725bd8deadSopenharmony_ci        VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE               0x88FE
735bd8deadSopenharmony_ci
745bd8deadSopenharmony_ciNew Procedures and Functions
755bd8deadSopenharmony_ci
765bd8deadSopenharmony_ci    void DrawArraysInstancedANGLE(enum mode, int first, sizei count,
775bd8deadSopenharmony_ci            sizei primcount);
785bd8deadSopenharmony_ci
795bd8deadSopenharmony_ci    void DrawElementsInstancedANGLE(enum mode, sizei count, enum type,
805bd8deadSopenharmony_ci            const void *indices, sizei primcount);
815bd8deadSopenharmony_ci
825bd8deadSopenharmony_ci    void VertexAttribDivisorANGLE(uint index, uint divisor);
835bd8deadSopenharmony_ci
845bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL ES 2.0 Specification
855bd8deadSopenharmony_ci(OpenGL ES Operation)
865bd8deadSopenharmony_ci
875bd8deadSopenharmony_ci    Modify section 2.8 (Vertex Arrays), p. 21
885bd8deadSopenharmony_ci
895bd8deadSopenharmony_ci    After description of EnableVertexAttribArray / DisableVertexAttribArray
905bd8deadSopenharmony_ci    add the following:
915bd8deadSopenharmony_ci
925bd8deadSopenharmony_ci    "The command
935bd8deadSopenharmony_ci
945bd8deadSopenharmony_ci        void VertexAttribDivisorANGLE(uint index, uint divisor);
955bd8deadSopenharmony_ci
965bd8deadSopenharmony_ci    modifies the rate at which generic vertex attributes advance when
975bd8deadSopenharmony_ci    rendering multiple instances of primitives in a single draw call
985bd8deadSopenharmony_ci    (see DrawArraysInstancedANGLE and DrawElementsInstancedANGLE below).
995bd8deadSopenharmony_ci    If <divisor> is zero, the attribute at slot <index> advances once
1005bd8deadSopenharmony_ci    per vertex.  If <divisor> is non-zero, the attribute advances once
1015bd8deadSopenharmony_ci    per <divisor> instances of the primitives being rendered.
1025bd8deadSopenharmony_ci    An attribute is referred to as "instanced" if its <divisor> value is
1035bd8deadSopenharmony_ci    non-zero."
1045bd8deadSopenharmony_ci
1055bd8deadSopenharmony_ci    Replace the text describing DrawArrays and DrawElements in the
1065bd8deadSopenharmony_ci    "Transferring Array Elements" subsection of 2.8, from the second paragraph
1075bd8deadSopenharmony_ci    through the end of the section with the following:
1085bd8deadSopenharmony_ci
1095bd8deadSopenharmony_ci    "The command
1105bd8deadSopenharmony_ci
1115bd8deadSopenharmony_ci        void DrawArraysOneInstance( enum mode, int first, sizei count, int instance );
1125bd8deadSopenharmony_ci
1135bd8deadSopenharmony_ci    does not exist in the GL, but is used to describe functionality in
1145bd8deadSopenharmony_ci    the rest of this section.  This function constructs a sequence of
1155bd8deadSopenharmony_ci    geometric primitives by transferring elements <first> through <first> +
1165bd8deadSopenharmony_ci    <count> - 1 of each enabled non-instanced array to the GL. <mode>
1175bd8deadSopenharmony_ci    specifies what kind of primitives are constructed, as defined in section
1185bd8deadSopenharmony_ci    2.6.1.
1195bd8deadSopenharmony_ci
1205bd8deadSopenharmony_ci    If an enabled vertex attribute array is instanced (it has a non-zero
1215bd8deadSopenharmony_ci    attribute <divisor> as specified by VertexAttribDivisorANGLE), the element
1225bd8deadSopenharmony_ci    that is transferred to the GL is given by:
1235bd8deadSopenharmony_ci
1245bd8deadSopenharmony_ci        floor( <instance> / <divisor> ).
1255bd8deadSopenharmony_ci
1265bd8deadSopenharmony_ci    If an array corresponding to a generic attribute required by a vertex shader
1275bd8deadSopenharmony_ci    is not enabled, then the corresponding element is taken from the current
1285bd8deadSopenharmony_ci    generic attribute state (see section 2.7).
1295bd8deadSopenharmony_ci
1305bd8deadSopenharmony_ci    If an array corresponding to a generic attribute required by a vertex shader
1315bd8deadSopenharmony_ci    is enabled, the corresponding current generic attribute value is unaffected
1325bd8deadSopenharmony_ci    by the execution of DrawArraysOneInstance.
1335bd8deadSopenharmony_ci
1345bd8deadSopenharmony_ci    Specifying <first> < 0 results in undefined behavior. Generating the error
1355bd8deadSopenharmony_ci    INVALID_VALUE is recommended in this case.
1365bd8deadSopenharmony_ci
1375bd8deadSopenharmony_ci    The command
1385bd8deadSopenharmony_ci
1395bd8deadSopenharmony_ci        void DrawArrays( enum mode, int first, sizei count );
1405bd8deadSopenharmony_ci
1415bd8deadSopenharmony_ci    is equivalent to the command sequence
1425bd8deadSopenharmony_ci
1435bd8deadSopenharmony_ci        DrawArraysOneInstance(mode, first, count, 0);
1445bd8deadSopenharmony_ci
1455bd8deadSopenharmony_ci    The command
1465bd8deadSopenharmony_ci
1475bd8deadSopenharmony_ci        void DrawArraysInstancedANGLE(enum mode, int first, sizei count,
1485bd8deadSopenharmony_ci                sizei primcount);
1495bd8deadSopenharmony_ci
1505bd8deadSopenharmony_ci    behaves identically to DrawArrays except that <primcount>
1515bd8deadSopenharmony_ci    instances of the range of elements are executed, and the
1525bd8deadSopenharmony_ci    <instance> advances for each iteration. Instanced attributes that
1535bd8deadSopenharmony_ci    have <divisor> N, (where N > 0, as specified by
1545bd8deadSopenharmony_ci    VertexAttribDivisorANGLE) advance once every N instances.
1555bd8deadSopenharmony_ci
1565bd8deadSopenharmony_ci    It has the same effect as:
1575bd8deadSopenharmony_ci
1585bd8deadSopenharmony_ci        if (mode, count, or primcount is invalid)
1595bd8deadSopenharmony_ci            generate appropriate error
1605bd8deadSopenharmony_ci        else {
1615bd8deadSopenharmony_ci            for (i = 0; i < primcount; i++) {
1625bd8deadSopenharmony_ci                DrawArraysOneInstance(mode, first, count, i);
1635bd8deadSopenharmony_ci            }
1645bd8deadSopenharmony_ci        }
1655bd8deadSopenharmony_ci
1665bd8deadSopenharmony_ci    The command
1675bd8deadSopenharmony_ci
1685bd8deadSopenharmony_ci       void DrawElementsOneInstance( enum mode, sizei count, enum type,
1695bd8deadSopenharmony_ci            void *indices, int instance );
1705bd8deadSopenharmony_ci
1715bd8deadSopenharmony_ci    does not exist in the GL, but is used to describe functionality in
1725bd8deadSopenharmony_ci    the rest of this section.  This command constructs a sequence of
1735bd8deadSopenharmony_ci    geometric primitives by successively transferring the <count> elements
1745bd8deadSopenharmony_ci    whose indices are stored in the currently bound element array buffer
1755bd8deadSopenharmony_ci    (see section 2.9.2) at the offset defined by <indices> to the GL.
1765bd8deadSopenharmony_ci    The <i>-th element transferred by DrawElementsOneInstance will be taken
1775bd8deadSopenharmony_ci    from element <indices>[i] of each enabled non-instanced array.
1785bd8deadSopenharmony_ci    <type> must be one of UNSIGNED_BYTE, UNSIGNED_SHORT, or UNSIGNED_INT,
1795bd8deadSopenharmony_ci    indicating that the index values are of GL type ubyte, ushort, or uint
1805bd8deadSopenharmony_ci    respectively. <mode> specifies what kind of primitives are constructed,
1815bd8deadSopenharmony_ci    as defined in section 2.6.1.
1825bd8deadSopenharmony_ci
1835bd8deadSopenharmony_ci    If an enabled vertex attribute array is instanced (it has a non-zero
1845bd8deadSopenharmony_ci    attribute <divisor> as specified by VertexAttribDivisorANGLE), the element
1855bd8deadSopenharmony_ci    that is transferred to the GL is given by:
1865bd8deadSopenharmony_ci
1875bd8deadSopenharmony_ci        floor( <instance> / <divisor> );
1885bd8deadSopenharmony_ci
1895bd8deadSopenharmony_ci    If an array corresponding to a generic attribute required by a vertex
1905bd8deadSopenharmony_ci    shader is not enabled, then the corresponding element is taken from the
1915bd8deadSopenharmony_ci    current generic attribute state (see section 2.7). Otherwise, if an array
1925bd8deadSopenharmony_ci    is enabled, the corresponding current generic attribute value is
1935bd8deadSopenharmony_ci    unaffected by the execution of DrawElementsOneInstance.
1945bd8deadSopenharmony_ci
1955bd8deadSopenharmony_ci    The command
1965bd8deadSopenharmony_ci
1975bd8deadSopenharmony_ci        void DrawElements( enum mode, sizei count, enum type,
1985bd8deadSopenharmony_ci             const void *indices);
1995bd8deadSopenharmony_ci
2005bd8deadSopenharmony_ci    behaves identically to DrawElementsOneInstance with the <instance>
2015bd8deadSopenharmony_ci    parameter set to zero; the effect of calling
2025bd8deadSopenharmony_ci
2035bd8deadSopenharmony_ci        DrawElements(mode, count, type, indices);
2045bd8deadSopenharmony_ci
2055bd8deadSopenharmony_ci    is equivalent to the command sequence:
2065bd8deadSopenharmony_ci
2075bd8deadSopenharmony_ci       if (mode, count or type is invalid )
2085bd8deadSopenharmony_ci            generate appropriate error
2095bd8deadSopenharmony_ci        else
2105bd8deadSopenharmony_ci            DrawElementsOneInstance(mode, count, type, indices, 0);
2115bd8deadSopenharmony_ci
2125bd8deadSopenharmony_ci    The command
2135bd8deadSopenharmony_ci
2145bd8deadSopenharmony_ci        void DrawElementsInstancedANGLE(enum mode, sizei count, enum type,
2155bd8deadSopenharmony_ci                const void *indices, sizei primcount);
2165bd8deadSopenharmony_ci
2175bd8deadSopenharmony_ci    behaves identically to DrawElements except that <primcount>
2185bd8deadSopenharmony_ci    instances of the set of elements are executed and the instance
2195bd8deadSopenharmony_ci    advances between each set. Instanced attributes are advanced as they do
2205bd8deadSopenharmony_ci    during the execution of DrawArraysInstancedANGLE. It has the same effect as:
2215bd8deadSopenharmony_ci
2225bd8deadSopenharmony_ci        if (mode, count, primcount, or type is invalid )
2235bd8deadSopenharmony_ci            generate appropriate error
2245bd8deadSopenharmony_ci        else {
2255bd8deadSopenharmony_ci            for (int i = 0; i < primcount; i++) {
2265bd8deadSopenharmony_ci                DrawElementsOneInstance(mode, count, type, indices, i);
2275bd8deadSopenharmony_ci            }
2285bd8deadSopenharmony_ci        }
2295bd8deadSopenharmony_ci
2305bd8deadSopenharmony_ci    If the number of supported generic vertex attributes (the value of
2315bd8deadSopenharmony_ci    MAX_VERTEX_ATTRIBS) is <n>, then the client state required to implement
2325bd8deadSopenharmony_ci    vertex arrays consists of <n> boolean values, <n> memory pointers, <n>
2335bd8deadSopenharmony_ci    integer stride values, <n> symbolic constants representing array types,
2345bd8deadSopenharmony_ci    <n> integers representing values per element, <n> boolean values
2355bd8deadSopenharmony_ci    indicating normalization, and <n> integers representing vertex attribute
2365bd8deadSopenharmony_ci    divisors.
2375bd8deadSopenharmony_ci
2385bd8deadSopenharmony_ci    In the initial state, the boolean values are each false, the memory
2395bd8deadSopenharmony_ci    pointers are each NULL, the strides are each zero, the array types are
2405bd8deadSopenharmony_ci    each FLOAT, the integers representing values per element are each four,
2415bd8deadSopenharmony_ci    and the divisors are each zero."
2425bd8deadSopenharmony_ci
2435bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL ES 2.0 Specification (Rasterization)
2445bd8deadSopenharmony_ci
2455bd8deadSopenharmony_ci    None
2465bd8deadSopenharmony_ci
2475bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL ES 2.0 Specification (Per-Fragment
2485bd8deadSopenharmony_ciOperations and the Framebuffer)
2495bd8deadSopenharmony_ci
2505bd8deadSopenharmony_ci    None
2515bd8deadSopenharmony_ci
2525bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL ES 2.0 Specification (Special Functions)
2535bd8deadSopenharmony_ci
2545bd8deadSopenharmony_ci    None
2555bd8deadSopenharmony_ci
2565bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL ES 2.0 Specification (State and State
2575bd8deadSopenharmony_ciRequests)
2585bd8deadSopenharmony_ci
2595bd8deadSopenharmony_ci    In section 6.1.8, add VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE to the list of
2605bd8deadSopenharmony_ci    pnames accepted by GetVertexAttribfv and GetVertexAttribiv.
2615bd8deadSopenharmony_ci
2625bd8deadSopenharmony_ciAdditions to the AGL/EGL/GLX/WGL Specifications
2635bd8deadSopenharmony_ci
2645bd8deadSopenharmony_ci    None
2655bd8deadSopenharmony_ci
2665bd8deadSopenharmony_ciDependencies on OES_element_index_uint
2675bd8deadSopenharmony_ci
2685bd8deadSopenharmony_ci    If OES_element_index_uint is not supported, removed all references
2695bd8deadSopenharmony_ci    to UNSIGNED_INT indices and the associated GL data type uint in
2705bd8deadSopenharmony_ci    the description of DrawElementsOneInstance.
2715bd8deadSopenharmony_ci
2725bd8deadSopenharmony_ciErrors
2735bd8deadSopenharmony_ci
2745bd8deadSopenharmony_ci    INVALID_VALUE is generated by VertexAttribDivisorANGLE if <index>
2755bd8deadSopenharmony_ci    is greater than or equal to MAX_VERTEX_ATTRIBS.
2765bd8deadSopenharmony_ci
2775bd8deadSopenharmony_ci    INVALID_ENUM is generated by DrawElementsInstancedANGLE if <type> is
2785bd8deadSopenharmony_ci    not one of UNSIGNED_BYTE, UNSIGNED_SHORT or UNSIGNED_INT.
2795bd8deadSopenharmony_ci
2805bd8deadSopenharmony_ci    INVALID_VALUE is generated by DrawArraysInstancedANGLE if <first>,
2815bd8deadSopenharmony_ci    <count>, or <primcount> is less than zero.
2825bd8deadSopenharmony_ci
2835bd8deadSopenharmony_ci    INVALID_ENUM is generated by DrawArraysInstancedANGLE or
2845bd8deadSopenharmony_ci    DrawElementsInstancedANGLE if <mode> is not one of the modes described in
2855bd8deadSopenharmony_ci    section 2.6.1.
2865bd8deadSopenharmony_ci
2875bd8deadSopenharmony_ci    INVALID_VALUE is generated by DrawElementsInstancedANGLE if <count> or
2885bd8deadSopenharmony_ci    <primcount> is less than zero.
2895bd8deadSopenharmony_ci
2905bd8deadSopenharmony_ci    INVALID_OPERATION is generated by DrawArraysInstancedANGLE or
2915bd8deadSopenharmony_ci    DrawElementsInstancedANGLE if there is not at least one enabled
2925bd8deadSopenharmony_ci    vertex attribute array that has a <divisor> of zero and is bound to an
2935bd8deadSopenharmony_ci    active generic attribute value in the program used for the draw command.
2945bd8deadSopenharmony_ci
2955bd8deadSopenharmony_ciNew State
2965bd8deadSopenharmony_ci
2975bd8deadSopenharmony_ci    Changes to table 6.2, p. 136 (Vertex Array Data)
2985bd8deadSopenharmony_ci
2995bd8deadSopenharmony_ci                                                               Initial
3005bd8deadSopenharmony_ci    Get Value                          Type   Get Command      Value    Description       Sec.
3015bd8deadSopenharmony_ci    ---------                          -----  -----------      -------  -----------       ----
3025bd8deadSopenharmony_ci    VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE  8*xZ+  GetVertexAttrib  0        Instance Divisor  2.8
3035bd8deadSopenharmony_ci
3045bd8deadSopenharmony_ciIssues
3055bd8deadSopenharmony_ci
3065bd8deadSopenharmony_ci    1) Should vertex attribute zero be instance-able?
3075bd8deadSopenharmony_ci
3085bd8deadSopenharmony_ci       Resolved: Yes.
3095bd8deadSopenharmony_ci       Discussion: In Direct3D 9 stream 0 must be specified as indexed data
3105bd8deadSopenharmony_ci       and it cannot be instanced. In ANGLE we can work around this by
3115bd8deadSopenharmony_ci       remapping any other stream that does have indexed data (ie a zero
3125bd8deadSopenharmony_ci       attribute divisor) to stream 0 in D3D9. This works because the HLSL
3135bd8deadSopenharmony_ci       vertex shader matches attributes against the stream by using the
3145bd8deadSopenharmony_ci       shader semantic index.
3155bd8deadSopenharmony_ci
3165bd8deadSopenharmony_ci    2) Can all vertex attributes be instanced simultaneously?
3175bd8deadSopenharmony_ci
3185bd8deadSopenharmony_ci       Resolved: No
3195bd8deadSopenharmony_ci       Discussion: In rare cases it is possible for no attribute to have a
3205bd8deadSopenharmony_ci       divisor of 0, meaning that all attributes are instanced and none of
3215bd8deadSopenharmony_ci       them are regularly indexed. This in turn means each instance can only
3225bd8deadSopenharmony_ci       have a single position element, and so it only actually renders
3235bd8deadSopenharmony_ci       something when rendering point primitives. This is not a very
3245bd8deadSopenharmony_ci       meaningful way of using instancing (which is likely why D3D restricts
3255bd8deadSopenharmony_ci       stream 0 to be indexed regularly for position data in the first place).
3265bd8deadSopenharmony_ci       We could implement it by drawing these points one at a time (essentially
3275bd8deadSopenharmony_ci       emulating instancing), but it would not be very efficient and there
3285bd8deadSopenharmony_ci       seems to be little-to-no value in doing so.
3295bd8deadSopenharmony_ci
3305bd8deadSopenharmony_ci       If all of the enabled vertex attribute arrays that are bound to active
3315bd8deadSopenharmony_ci       generic attributes in the program have a non-zero divisor, the draw
3325bd8deadSopenharmony_ci       call should return INVALID_OPERATION.
3335bd8deadSopenharmony_ci
3345bd8deadSopenharmony_ci    3) Direct3D 9 only supports instancing for DrawIndexedPrimitive which
3355bd8deadSopenharmony_ci       corresponds to DrawElementsInstanced.  Should we support
3365bd8deadSopenharmony_ci       DrawArraysInstanced?
3375bd8deadSopenharmony_ci
3385bd8deadSopenharmony_ci       Resolved: Yes
3395bd8deadSopenharmony_ci       Discussion: This can be supported easily enough by simply manufacturing
3405bd8deadSopenharmony_ci       a linear index buffer of sufficient size and using that to do indexed
3415bd8deadSopenharmony_ci       D3D9 drawing.
3425bd8deadSopenharmony_ci
3435bd8deadSopenharmony_ci    4) How much data is needed in a buffer for an instanced attribute?
3445bd8deadSopenharmony_ci
3455bd8deadSopenharmony_ci       Resolved: Where stride is the value passed to VertexAttribPointer:
3465bd8deadSopenharmony_ci
3475bd8deadSopenharmony_ci       if stride > 0
3485bd8deadSopenharmony_ci         size = stride * ceil(primcount / divisor);
3495bd8deadSopenharmony_ci       else
3505bd8deadSopenharmony_ci         size = elementsize * ceil(primcount / divisor);
3515bd8deadSopenharmony_ci
3525bd8deadSopenharmony_ciRevision History
3535bd8deadSopenharmony_ci
3545bd8deadSopenharmony_ci    #4 February 3, 2017 Jon Leech
3555bd8deadSopenharmony_ci       - Correct reference to ES 2.0 state table from 6.7 to 6.2 (public bug
3565bd8deadSopenharmony_ci         1390)
3575bd8deadSopenharmony_ci    #3 February 8, 2012 dgkoch
3585bd8deadSopenharmony_ci       - clarify Issue 3 and the error condition for no indexed attributes
3595bd8deadSopenharmony_ci    #2 January 24, 2012 dgkoch
3605bd8deadSopenharmony_ci       - fix typos, add clarifications, and more errors
3615bd8deadSopenharmony_ci    #1 January 17, 2012 dgkoch
3625bd8deadSopenharmony_ci       - initial GLES2 version from ARB_instanced_arrays
363