15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    ARB_vertex_attrib_64bit
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_ARB_vertex_attrib_64bit
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContact
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Graham Sellers, AMD (graham.sellers 'at' amd.com)
125bd8deadSopenharmony_ci    Pat Brown, NVIDIA (pbrown 'at' nvidia.com)
135bd8deadSopenharmony_ci    Piers Daniell, NVIDIA (pdaniell 'at' nvidia.com)
145bd8deadSopenharmony_ci
155bd8deadSopenharmony_ciContributors
165bd8deadSopenharmony_ci
175bd8deadSopenharmony_ci    Barthold Lichtenbelt, NVIDIA
185bd8deadSopenharmony_ci    Bill Licea-Kane, AMD
195bd8deadSopenharmony_ci    Eric Werness, NVIDIA
205bd8deadSopenharmony_ci    Graham Sellers, AMD
215bd8deadSopenharmony_ci    Greg Roth, NVIDIA
225bd8deadSopenharmony_ci    Jeff Bolz, NVIDIA
235bd8deadSopenharmony_ci    Nick Haemel, AMD
245bd8deadSopenharmony_ci    Pierre Boudier, AMD
255bd8deadSopenharmony_ci    Piers Daniell, NVIDIA
265bd8deadSopenharmony_ci
275bd8deadSopenharmony_ciNotice
285bd8deadSopenharmony_ci
295bd8deadSopenharmony_ci    Copyright (c) 2010-2013 The Khronos Group Inc. Copyright terms at
305bd8deadSopenharmony_ci        http://www.khronos.org/registry/speccopyright.html
315bd8deadSopenharmony_ci
325bd8deadSopenharmony_ciSpecification Update Policy
335bd8deadSopenharmony_ci
345bd8deadSopenharmony_ci    Khronos-approved extension specifications are updated in response to
355bd8deadSopenharmony_ci    issues and bugs prioritized by the Khronos OpenGL Working Group. For
365bd8deadSopenharmony_ci    extensions which have been promoted to a core Specification, fixes will
375bd8deadSopenharmony_ci    first appear in the latest version of that core Specification, and will
385bd8deadSopenharmony_ci    eventually be backported to the extension document. This policy is
395bd8deadSopenharmony_ci    described in more detail at
405bd8deadSopenharmony_ci        https://www.khronos.org/registry/OpenGL/docs/update_policy.php
415bd8deadSopenharmony_ci
425bd8deadSopenharmony_ciStatus
435bd8deadSopenharmony_ci
445bd8deadSopenharmony_ci    Complete. Approved by the ARB on June 9, 2010.
455bd8deadSopenharmony_ci    Approved by the Khronos Board of Promoters on July 23, 2010.
465bd8deadSopenharmony_ci
475bd8deadSopenharmony_ciVersion
485bd8deadSopenharmony_ci
495bd8deadSopenharmony_ci    Last Modified Date:         June 10, 2014
505bd8deadSopenharmony_ci    Revision:                   10
515bd8deadSopenharmony_ci
525bd8deadSopenharmony_ciNumber
535bd8deadSopenharmony_ci
545bd8deadSopenharmony_ci    ARB Extension #99
555bd8deadSopenharmony_ci
565bd8deadSopenharmony_ciDependencies
575bd8deadSopenharmony_ci
585bd8deadSopenharmony_ci    This extension is written against the OpenGL 3.2 specification
595bd8deadSopenharmony_ci    (Compatibility Profile).
605bd8deadSopenharmony_ci
615bd8deadSopenharmony_ci    This extension is written against version 1.50 (revision 09) of the OpenGL
625bd8deadSopenharmony_ci    Shading Language Specification.
635bd8deadSopenharmony_ci
645bd8deadSopenharmony_ci    OpenGL 3.0 and GLSL 1.30 are required.
655bd8deadSopenharmony_ci
665bd8deadSopenharmony_ci    ARB_gpu_shader_fp64 (or equivalent functionality) is required.
675bd8deadSopenharmony_ci
685bd8deadSopenharmony_ci    This extension interacts with OpenGL 3.1 implementations not supporting
695bd8deadSopenharmony_ci    ARB_compatibility and with the core profile of OpenGL 3.2.
705bd8deadSopenharmony_ci
715bd8deadSopenharmony_ci    This extension interacts with EXT_direct_state_access.
725bd8deadSopenharmony_ci
735bd8deadSopenharmony_ci    This extension interacts with NV_gpu_shader5.
745bd8deadSopenharmony_ci
755bd8deadSopenharmony_ci    This extension interacts with NV_vertex_attrib_integer_64bit.
765bd8deadSopenharmony_ci
775bd8deadSopenharmony_ci    This extension interacts with ARB_explicit_attrib_location,
785bd8deadSopenharmony_ci    ARB_separate_shader_objects, OpenGL 3.3, and OpenGL 4.1.
795bd8deadSopenharmony_ci
805bd8deadSopenharmony_ciOverview
815bd8deadSopenharmony_ci
825bd8deadSopenharmony_ci    This extension provides OpenGL shading language support for vertex shader
835bd8deadSopenharmony_ci    inputs with 64-bit floating-point components and OpenGL API support for
845bd8deadSopenharmony_ci    specifying the value of those inputs using vertex array or immediate mode
855bd8deadSopenharmony_ci    entry points.  This builds on the support for general-purpose support for
865bd8deadSopenharmony_ci    64-bit floating-point values in the ARB_gpu_shader_fp64 extension.
875bd8deadSopenharmony_ci
885bd8deadSopenharmony_ci    This extension provides a new class of vertex attribute functions,
895bd8deadSopenharmony_ci    beginning with "VertexAttribL" ("L" for "long"), that can be used to
905bd8deadSopenharmony_ci    specify attributes with 64-bit floating-point components.  This extension
915bd8deadSopenharmony_ci    provides no automatic type conversion between attribute and shader
925bd8deadSopenharmony_ci    variables; single-precision attributes are not automatically converted to
935bd8deadSopenharmony_ci    double-precision or vice versa.  For shader variables with 64-bit
945bd8deadSopenharmony_ci    component types, the "VertexAttribL" functions must be used to specify
955bd8deadSopenharmony_ci    attribute values.  For other shader variables, the "VertexAttribL"
965bd8deadSopenharmony_ci    functions must not be used.  If a vertex attribute is specified using the
975bd8deadSopenharmony_ci    wrong attribute function, the values of the corresponding shader input are
985bd8deadSopenharmony_ci    undefined.  This approach requiring matching types is identical to that
995bd8deadSopenharmony_ci    used for the "VertexAttribI" functions provided by OpenGL 3.0 and the
1005bd8deadSopenharmony_ci    EXT_gpu_shader4 extension.
1015bd8deadSopenharmony_ci
1025bd8deadSopenharmony_ci    Additionally, some vertex shader inputs using the wider 64-bit components
1035bd8deadSopenharmony_ci    may count double against the implementation-dependent limit on the number
1045bd8deadSopenharmony_ci    of vertex shader attribute vectors.  A 64-bit scalar or a two-component
1055bd8deadSopenharmony_ci    vector consumes only a single generic vertex attribute; three- and
1065bd8deadSopenharmony_ci    four-component "long" may count as two.  This approach is similar to the
1075bd8deadSopenharmony_ci    one used in the current GL where matrix attributes consume multiple
1085bd8deadSopenharmony_ci    attributes.
1095bd8deadSopenharmony_ci
1105bd8deadSopenharmony_ci    Note that 64-bit generic vertex attributes were nominally supported
1115bd8deadSopenharmony_ci    beginning with the introduction of vertex shaders in OpenGL 2.0.  However,
1125bd8deadSopenharmony_ci    the OpenGL Shading Language at the time had no support for 64-bit data
1135bd8deadSopenharmony_ci    types, so any such values were automatically converted to 32-bit.
1145bd8deadSopenharmony_ci
1155bd8deadSopenharmony_ci    Support for 64-bit floating-point vertex attributes in this extension can
1165bd8deadSopenharmony_ci    be combined with other extensions.  In particular, this extension provides
1175bd8deadSopenharmony_ci    an entry point that can be used with EXT_direct_state_access to directly
1185bd8deadSopenharmony_ci    set state for any vertex array object.  Also, the related
1195bd8deadSopenharmony_ci    NV_vertex_attrib_integer_64bit extension provides an entry point to
1205bd8deadSopenharmony_ci    specify bindless vertex attribute arrays with 64-bit components, integer
1215bd8deadSopenharmony_ci    or floating-point.
1225bd8deadSopenharmony_ci
1235bd8deadSopenharmony_ciIP Status
1245bd8deadSopenharmony_ci
1255bd8deadSopenharmony_ci    No known IP claims.
1265bd8deadSopenharmony_ci
1275bd8deadSopenharmony_ciNew Procedures and Functions
1285bd8deadSopenharmony_ci
1295bd8deadSopenharmony_ci    void VertexAttribL1d(uint index, double x);
1305bd8deadSopenharmony_ci    void VertexAttribL2d(uint index, double x, double y);
1315bd8deadSopenharmony_ci    void VertexAttribL3d(uint index, double x, double y, double z);
1325bd8deadSopenharmony_ci    void VertexAttribL4d(uint index, double x, double y, double z, double w);
1335bd8deadSopenharmony_ci    void VertexAttribL1dv(uint index, const double *v);
1345bd8deadSopenharmony_ci    void VertexAttribL2dv(uint index, const double *v);
1355bd8deadSopenharmony_ci    void VertexAttribL3dv(uint index, const double *v);
1365bd8deadSopenharmony_ci    void VertexAttribL4dv(uint index, const double *v);
1375bd8deadSopenharmony_ci
1385bd8deadSopenharmony_ci    void VertexAttribLPointer(uint index, int size, enum type, sizei stride,
1395bd8deadSopenharmony_ci                              const void *pointer);
1405bd8deadSopenharmony_ci
1415bd8deadSopenharmony_ci    void GetVertexAttribLdv(uint index, enum pname, double *params);
1425bd8deadSopenharmony_ci
1435bd8deadSopenharmony_ci    void VertexArrayVertexAttribLOffsetEXT(uint vaobj, uint buffer,
1445bd8deadSopenharmony_ci                                           uint index, int size,
1455bd8deadSopenharmony_ci                                           enum type, sizei stride,
1465bd8deadSopenharmony_ci                                           intptr offset);
1475bd8deadSopenharmony_ci
1485bd8deadSopenharmony_ci    (note:  VertexArrayVertexAttribLOffsetEXT is provided only if
1495bd8deadSopenharmony_ci    EXT_direct_state_access is supported.)
1505bd8deadSopenharmony_ci
1515bd8deadSopenharmony_ciNew Tokens
1525bd8deadSopenharmony_ci
1535bd8deadSopenharmony_ci    Returned in the <type> parameter of GetActiveAttrib:
1545bd8deadSopenharmony_ci
1555bd8deadSopenharmony_ci        DOUBLE
1565bd8deadSopenharmony_ci        DOUBLE_VEC2                                     0x8FFC
1575bd8deadSopenharmony_ci        DOUBLE_VEC3                                     0x8FFD
1585bd8deadSopenharmony_ci        DOUBLE_VEC4                                     0x8FFE
1595bd8deadSopenharmony_ci        DOUBLE_MAT2                                     0x8F46
1605bd8deadSopenharmony_ci        DOUBLE_MAT3                                     0x8F47
1615bd8deadSopenharmony_ci        DOUBLE_MAT4                                     0x8F48
1625bd8deadSopenharmony_ci        DOUBLE_MAT2x3                                   0x8F49
1635bd8deadSopenharmony_ci        DOUBLE_MAT2x4                                   0x8F4A
1645bd8deadSopenharmony_ci        DOUBLE_MAT3x2                                   0x8F4B
1655bd8deadSopenharmony_ci        DOUBLE_MAT3x4                                   0x8F4C
1665bd8deadSopenharmony_ci        DOUBLE_MAT4x2                                   0x8F4D
1675bd8deadSopenharmony_ci        DOUBLE_MAT4x3                                   0x8F4E
1685bd8deadSopenharmony_ci
1695bd8deadSopenharmony_ci    Note: These enums are defined in ARB_gpu_shader_fp64, which is required
1705bd8deadSopenharmony_ci    by this extension. They are included here only for completeness.
1715bd8deadSopenharmony_ci
1725bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 3.2 (Compatibility Profile) Specification
1735bd8deadSopenharmony_ci(OpenGL Operation)
1745bd8deadSopenharmony_ci
1755bd8deadSopenharmony_ci    Modify Section 2.7, Vertex Specification (p. 24)
1765bd8deadSopenharmony_ci
1775bd8deadSopenharmony_ci    (delete third paragraph, p. 33, beginning with "The resulting attribute
1785bd8deadSopenharmony_ci    values are undefined")
1795bd8deadSopenharmony_ci
1805bd8deadSopenharmony_ci    (rework the description of the VertexAttribI* commands, and add support
1815bd8deadSopenharmony_ci    for new VertexAttribL* commands, p. 33)
1825bd8deadSopenharmony_ci
1835bd8deadSopenharmony_ci    To load values into a generic shader attribute declared as a signed or
1845bd8deadSopenharmony_ci    unsigned integer or integer vector, use the commands
1855bd8deadSopenharmony_ci
1865bd8deadSopenharmony_ci      void VertexAttribI{1,2,3,4}{i,ui}( uint index, T values );
1875bd8deadSopenharmony_ci      void VertexAttribI{1,2,3,4}{i,ui}v( uint index, T values );
1885bd8deadSopenharmony_ci      void VertexAttribI4{b,s,ub,us}v( uint index, T values );
1895bd8deadSopenharmony_ci
1905bd8deadSopenharmony_ci    These commands specify values that are extended to full signed or unsigned
1915bd8deadSopenharmony_ci    integers, then loaded into the generic attribute at slot index in the same
1925bd8deadSopenharmony_ci    fashion as described above.
1935bd8deadSopenharmony_ci
1945bd8deadSopenharmony_ci    To load values into a generic shader attribute declared as a double, or
1955bd8deadSopenharmony_ci    into vectors or matrices thereof, use the commands
1965bd8deadSopenharmony_ci
1975bd8deadSopenharmony_ci      void VertexAttribL{1,2,3,4}d(uint index, T values);
1985bd8deadSopenharmony_ci      void VertexAttribL{1,2,3,4}dv(uint index, T values);
1995bd8deadSopenharmony_ci
2005bd8deadSopenharmony_ci    These commands specify one, two, three or four values.  Note that attribute
2015bd8deadSopenharmony_ci    variables declared with "double" types must be loaded with
2025bd8deadSopenharmony_ci    VertexAttribL*d{v}; loading attributes with VertexAttrib*d{v} will
2035bd8deadSopenharmony_ci    produce undefined results.
2045bd8deadSopenharmony_ci
2055bd8deadSopenharmony_ci    For all VertexAttrib* commands, the error INVALID_VALUE is generated if
2065bd8deadSopenharmony_ci    <index> is greater than or equal to MAX_VERTEX_ATTRIBS.
2075bd8deadSopenharmony_ci
2085bd8deadSopenharmony_ci    The full set of VertexAttrib* commands specify generic attributes whose
2095bd8deadSopenharmony_ci    components are one of the data types:
2105bd8deadSopenharmony_ci
2115bd8deadSopenharmony_ci      * floating-point values (VertexAttrib*),
2125bd8deadSopenharmony_ci      * signed or unsigned integers (VertexAttribI*), and
2135bd8deadSopenharmony_ci      * double-precision floating-point values (VertexAttribL*d*)
2145bd8deadSopenharmony_ci
2155bd8deadSopenharmony_ci    The values loaded into a shader attribute variable bound to generic
2165bd8deadSopenharmony_ci    attribute <index> are undefined if the data type of the attribute
2175bd8deadSopenharmony_ci    components specified by the most recent VertexAttrib* command do not match
2185bd8deadSopenharmony_ci    the data type of the variable.
2195bd8deadSopenharmony_ci
2205bd8deadSopenharmony_ci
2215bd8deadSopenharmony_ci    Modify Section 2.8, Vertex Arrays, p. 34
2225bd8deadSopenharmony_ci
2235bd8deadSopenharmony_ci    (insert new paragraph after first paragraph, p. 37)  
2245bd8deadSopenharmony_ci
2255bd8deadSopenharmony_ci    The command
2265bd8deadSopenharmony_ci
2275bd8deadSopenharmony_ci      void VertexAttribLPointer(uint index, int size, enum type,
2285bd8deadSopenharmony_ci                                sizei stride, const void *pointer);
2295bd8deadSopenharmony_ci
2305bd8deadSopenharmony_ci    specifies state for a generic vertex attribute array associated with a
2315bd8deadSopenharmony_ci    shader attribute variable declared with 64-bit double precision components.
2325bd8deadSopenharmony_ci    <type> must be DOUBLE.  <index>, <size>, and <stride> behave as defined in
2335bd8deadSopenharmony_ci    all other vertex commands; <size> may be one, two, three or four.
2345bd8deadSopenharmony_ci
2355bd8deadSopenharmony_ci    Each component of an array specified by VertexAttribLPointer will be
2365bd8deadSopenharmony_ci    encoded into one or more generic attribute components as specified for the
2375bd8deadSopenharmony_ci    VertexAttribL* commands in Section 2.7.  The error INVALID_VALUE is
2385bd8deadSopenharmony_ci    generated if <index> is greater than or equal to MAX_VERTEX_ATTRIBS.
2395bd8deadSopenharmony_ci
2405bd8deadSopenharmony_ci
2415bd8deadSopenharmony_ci    (modify pseudo-code, p. 38, to handle VertexAttribLPointer)
2425bd8deadSopenharmony_ci
2435bd8deadSopenharmony_ci      ...
2445bd8deadSopenharmony_ci      for (j = 1; j < genericAttributes; j++) {
2455bd8deadSopenharmony_ci        if (generic vertex attribute j array enabled) {
2465bd8deadSopenharmony_ci          if (generic attribute j array set by VertexAttribLPointer) {
2475bd8deadSopenharmony_ci            VertexAttribL[size][type]v(j, generic vertex attribute j
2485bd8deadSopenharmony_ci                                          array element i);
2495bd8deadSopenharmony_ci          } else if (generic attribute j array set by VertexAttribIPointer) {
2505bd8deadSopenharmony_ci            VertexAttribI[size][type]v(j, generic vertex attribute j
2515bd8deadSopenharmony_ci                                          array element i);
2525bd8deadSopenharmony_ci          } else if (generic vertex attribute j array normalization flag 
2535bd8deadSopenharmony_ci                     is set, and type is not FLOAT or DOUBLE) {
2545bd8deadSopenharmony_ci            VertexAttrib[size]N[type]v(j, generic vertex attribute j
2555bd8deadSopenharmony_ci                                          array element i);
2565bd8deadSopenharmony_ci          } else {
2575bd8deadSopenharmony_ci            VertexAttrib[size][type]v(j, generic vertex attribute j 
2585bd8deadSopenharmony_ci                                         array element i);
2595bd8deadSopenharmony_ci          }
2605bd8deadSopenharmony_ci        }
2615bd8deadSopenharmony_ci      }
2625bd8deadSopenharmony_ci
2635bd8deadSopenharmony_ci        if (generic attribute 0 array enabled) {
2645bd8deadSopenharmony_ci          if (generic attribute 0 array set by VertexAttribLPointers) {
2655bd8deadSopenharmony_ci            VertexAttribL[size][type]v(0, generic vertex attribute 0
2665bd8deadSopenharmony_ci                                          array element i);
2675bd8deadSopenharmony_ci          } else if (generic attribute 0 array set by VertexAttribIPointer) {
2685bd8deadSopenharmony_ci            VertexAttribI[size][type]v(0, generic vertex attribute 0
2695bd8deadSopenharmony_ci                                          array element i);
2705bd8deadSopenharmony_ci          } else if (generic vertex attribute 0 array normalization flag 
2715bd8deadSopenharmony_ci                     is set, and type is not FLOAT or DOUBLE) {
2725bd8deadSopenharmony_ci            VertexAttrib[size]N[type]v(0, generic vertex attribute 0
2735bd8deadSopenharmony_ci                                          array element i);
2745bd8deadSopenharmony_ci          } else {
2755bd8deadSopenharmony_ci            VertexAttrib[size][type]v(0, generic vertex attribute 0
2765bd8deadSopenharmony_ci                                         array element i);
2775bd8deadSopenharmony_ci          }
2785bd8deadSopenharmony_ci        } else if (vertex array enabled) {
2795bd8deadSopenharmony_ci          ...
2805bd8deadSopenharmony_ci
2815bd8deadSopenharmony_ci
2825bd8deadSopenharmony_ci    Modify the "Add to the end of Section 2.10 (Vertex Array Objects)" section
2835bd8deadSopenharmony_ci    of EXT_direct_state_access
2845bd8deadSopenharmony_ci
2855bd8deadSopenharmony_ci    (add a new function prototype to the initial list of commands)
2865bd8deadSopenharmony_ci
2875bd8deadSopenharmony_ci      void VertexArrayVertexAttribLOffsetEXT(uint vaobj, uint buffer,
2885bd8deadSopenharmony_ci                                             uint index, int size,
2895bd8deadSopenharmony_ci                                             enum type, sizei stride,
2905bd8deadSopenharmony_ci                                             intptr offset);
2915bd8deadSopenharmony_ci
2925bd8deadSopenharmony_ci    (No edits are made to the language added in this section.  The same
2935bd8deadSopenharmony_ci    general rules described in EXT_direct_state_access apply here -- <vaobj>
2945bd8deadSopenharmony_ci    identifies a vertex array object used instead of the currently bound one,
2955bd8deadSopenharmony_ci    <buffer> is used in place of the buffer object bound to ARRAY_BUFFER, and
2965bd8deadSopenharmony_ci    the command otherwise behaves like VertexAttribLPointer with <pointer>
2975bd8deadSopenharmony_ci    set to <offset>.)
2985bd8deadSopenharmony_ci
2995bd8deadSopenharmony_ci
3005bd8deadSopenharmony_ci    Modify Section 2.14.3, Vertex Attributes, p. 86
3015bd8deadSopenharmony_ci
3025bd8deadSopenharmony_ci    (replace last paragraph, p. 86)
3035bd8deadSopenharmony_ci
3045bd8deadSopenharmony_ci    When an attribute variable declared using one of the scalar or vector data
3055bd8deadSopenharmony_ci    types enumerated in Table X.1 and is bound to a generic attribute index
3065bd8deadSopenharmony_ci    <i>, its value(s) are taken from the components of generic attribute <i>.
3075bd8deadSopenharmony_ci    Scalars are extracted from the x component; two-, three-, and
3085bd8deadSopenharmony_ci    four-component vectors are extracted from the, (x, y), (x, y, z), or (x,
3095bd8deadSopenharmony_ci    y, z, w) components, respectively.
3105bd8deadSopenharmony_ci
3115bd8deadSopenharmony_ci      Data type                         Command
3125bd8deadSopenharmony_ci      -------------------------------   ----------------------------------
3135bd8deadSopenharmony_ci      int    int8_t  int16_t  int32_t   VertexAttribI1i
3145bd8deadSopenharmony_ci      ivec2  i8vec2  i16vec2  i32vec2   VertexAttribI2i
3155bd8deadSopenharmony_ci      ivec3  i8vec3  i16vec3  i32vec3   VertexAttribI3i
3165bd8deadSopenharmony_ci      ivec4  i8vec4  i16vec4  i32vec4   VertexAttribI4i
3175bd8deadSopenharmony_ci
3185bd8deadSopenharmony_ci      uint   uint8_t uint16_t uint32_t  VertexAttribI1ui
3195bd8deadSopenharmony_ci      uvec2  u8vec2  u16vec2  u32vec2   VertexAttribI2ui
3205bd8deadSopenharmony_ci      uvec3  u8vec3  u16vec3  u32vec3   VertexAttribI3ui
3215bd8deadSopenharmony_ci      uvec4  u8vec4  u16vec4  u32vec4   VertexAttribI4ui
3225bd8deadSopenharmony_ci
3235bd8deadSopenharmony_ci      float  float16_t float32_t        VertexAttrib1{f,b,s,i,ub,us,ui,d}
3245bd8deadSopenharmony_ci      vec2   f16vec2   f32vec2          VertexAttrib2{f,b,s,i,ub,us,ui,d}
3255bd8deadSopenharmony_ci      vec3   f16vec3   f32vec3          VertexAttrib3{f,b,s,i,ub,us,ui,d}
3265bd8deadSopenharmony_ci      vec4   f16vec4   f32vec4          VertexAttrib4{f,b,s,i,ub,us,ui,d}
3275bd8deadSopenharmony_ci
3285bd8deadSopenharmony_ci      double    float64_t               VertexAttribL1d
3295bd8deadSopenharmony_ci      dvec2     f64vec2                 VertexAttribL2d
3305bd8deadSopenharmony_ci      dvec3     f64vec3                 VertexAttribL3d
3315bd8deadSopenharmony_ci      dvec4     f64vec4                 VertexAttribL4d
3325bd8deadSopenharmony_ci
3335bd8deadSopenharmony_ci
3345bd8deadSopenharmony_ci      Table X.1:  Scalar and vector vertex attribute types and VertexAttrib*
3355bd8deadSopenharmony_ci      commands used to set the values of the corresponding generic attribute.
3365bd8deadSopenharmony_ci
3375bd8deadSopenharmony_ci    When an attribute variable is declared as a mat2, mat3x2, mat4x2, its
3385bd8deadSopenharmony_ci    matrix columns are taken from the (x, y) components of generic attributes
3395bd8deadSopenharmony_ci    <i> and <i>+1 (mat2, dmat2), from attributes <i> through <i>+2 (mat3x2),
3405bd8deadSopenharmony_ci    or from attributes <i> through <i>+3 (mat4x2). When an attribute variable
3415bd8deadSopenharmony_ci    is declared as a mat2x3, mat3 or mat4x3, its matrix columns are taken from
3425bd8deadSopenharmony_ci    the (x, y, z) components of generic attributes i and <i>+1 (mat2x3), from
3435bd8deadSopenharmony_ci    attributes <i> through <i>+2 (mat3), or from attributes i through <i>+3
3445bd8deadSopenharmony_ci    (mat4x3). When an attribute variable is declared as a mat2x4, mat3x4 or
3455bd8deadSopenharmony_ci    mat4, its matrix columns are taken from the (x, y, z, w) components of
3465bd8deadSopenharmony_ci    generic attributes <i> and <i>+1 (mat2x4), from attributes <i> through
3475bd8deadSopenharmony_ci    <i>+2 (mat3x4), or from attributes <i> through <i>+3 (mat4).  When an
3485bd8deadSopenharmony_ci    attribute variable is declared as a double-precision matrix (dmat2, dmat3,
3495bd8deadSopenharmony_ci    dmat4, dmat2x3, dmat2x4, dmat3x2, dmat3x4, dmat4x2, dmat4x3), its matrix
3505bd8deadSopenharmony_ci    columns are taken from the same generic attributes as the equivalent
3515bd8deadSopenharmony_ci    single-precision matrix type, with values specified using the
3525bd8deadSopenharmony_ci    VertexAttribL* or VertexAttribLPointer commands.
3535bd8deadSopenharmony_ci
3545bd8deadSopenharmony_ci    For the 64-bit double precision types listed in Table X.1, no default
3555bd8deadSopenharmony_ci    attribute values are provided if the values of the vertex attribute variable
3565bd8deadSopenharmony_ci    are specified with fewer components than required for the attribute
3575bd8deadSopenharmony_ci    variable.  For example, the fourth component of a variable of type dvec4
3585bd8deadSopenharmony_ci    will be undefined if specified using VertexAttribL3dv or using a vertex
3595bd8deadSopenharmony_ci    array specified with VertexAttribLPointer and a size of three.
3605bd8deadSopenharmony_ci
3615bd8deadSopenharmony_ci
3625bd8deadSopenharmony_ci    (modify the second paragraph, p. 87) ... exceeds MAX_VERTEX_ATTRIBS.  For
3635bd8deadSopenharmony_ci    the purposes of this comparison, attribute variables of the type dvec3,
3645bd8deadSopenharmony_ci    dvec4, dmat2x3, dmat2x4, dmat3, dmat3x4, dmat4x3, and dmat4 may count as
3655bd8deadSopenharmony_ci    consuming twice as many attributes as equivalent single-precision types.
3665bd8deadSopenharmony_ci    While these types use the same number of generic attributes as their
3675bd8deadSopenharmony_ci    single-precision equivalents, implementations are permitted to consume two
3685bd8deadSopenharmony_ci    single-precision vectors of internal storage for each three- or
3695bd8deadSopenharmony_ci    four-component double-precision vector.
3705bd8deadSopenharmony_ci
3715bd8deadSopenharmony_ci    (extend the list of types in the first paragraph, p. 88)
3725bd8deadSopenharmony_ci    ... UNSIGNED_INT_VEC3, UNSIGNED_INT_VEC4, DOUBLE, DOUBLE_VEC2,
3735bd8deadSopenharmony_ci    DOUBLE_VEC3, DOUBLE_VEC4, DOUBLE_MAT2, DOUBLE_MAT3, DOUBLE_MAT4,
3745bd8deadSopenharmony_ci    DOUBLE_MAT2x3, DOUBLE_MAT2x4, DOUBLE_MAT3x2, DOUBLE_MAT3x4, DOUBLE_MAT4x2,
3755bd8deadSopenharmony_ci    or DOUBLE_MAT4x3.
3765bd8deadSopenharmony_ci
3775bd8deadSopenharmony_ci    (add the following entries to table 2.13: OpenGL Shading Language type
3785bd8deadSopenharmony_ci     tokens returned by GetActiveUniform and GetActiveUniformsiv, and
3795bd8deadSopenharmony_ci     corresponding shading language keywords declaring each such type., p. 96)
3805bd8deadSopenharmony_ci
3815bd8deadSopenharmony_ci                    Type Name Token    |    Keyword
3825bd8deadSopenharmony_ci                    ---------------------------------
3835bd8deadSopenharmony_ci                    DOUBLE             |    double
3845bd8deadSopenharmony_ci                    DOUBLE_VEC2        |    dvec2
3855bd8deadSopenharmony_ci                    DOUBLE_VEC3        |    dvec3
3865bd8deadSopenharmony_ci                    DOUBLE_VEC4        |    dvec4
3875bd8deadSopenharmony_ci                    DOUBLE_MAT2        |    dmat2
3885bd8deadSopenharmony_ci                    DOUBLE_MAT3        |    dmat3
3895bd8deadSopenharmony_ci                    DOUBLE_MAT4        |    dmat4
3905bd8deadSopenharmony_ci                    DOUBLE_MAT2x3      |    dmat2x3
3915bd8deadSopenharmony_ci                    DOUBLE_MAT2x4      |    dmat2x4
3925bd8deadSopenharmony_ci                    DOUBLE_MAT3x2      |    dmat3x2
3935bd8deadSopenharmony_ci                    DOUBLE_MAT3x4      |    dmat3x4
3945bd8deadSopenharmony_ci                    DOUBLE_MAT4x2      |    dmat4x2
3955bd8deadSopenharmony_ci                    DOUBLE_MAT4x3      |    dmat4x3
3965bd8deadSopenharmony_ci
3975bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 3.2 (Compatibility Profile) Specification
3985bd8deadSopenharmony_ci(Rasterization)
3995bd8deadSopenharmony_ci
4005bd8deadSopenharmony_ci    None.
4015bd8deadSopenharmony_ci
4025bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 3.2 (Compatibility Profile) Specification
4035bd8deadSopenharmony_ci(Per-Fragment Operations and the Frame Buffer)
4045bd8deadSopenharmony_ci
4055bd8deadSopenharmony_ci    None.
4065bd8deadSopenharmony_ci
4075bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 3.2 (Compatibility Profile) Specification
4085bd8deadSopenharmony_ci(Special Functions)
4095bd8deadSopenharmony_ci
4105bd8deadSopenharmony_ci    Modify Section 5.4.1, Commands Not Usable in Display Lists, p. 358
4115bd8deadSopenharmony_ci
4125bd8deadSopenharmony_ci    (add to "Vertex arrays" list) VertexAttribLPointer, and
4135bd8deadSopenharmony_ci    VertexArrayVertexAttribLOffsetEXT.
4145bd8deadSopenharmony_ci
4155bd8deadSopenharmony_ci    (note:  GetVertexAttribL* commands are also not allowed in display lists,
4165bd8deadSopenharmony_ci    but is already covered by blanket language in "Other queries")
4175bd8deadSopenharmony_ci
4185bd8deadSopenharmony_ci
4195bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 3.2 (Compatibility Profile) Specification
4205bd8deadSopenharmony_ci(State and State Requests)
4215bd8deadSopenharmony_ci
4225bd8deadSopenharmony_ci    Modify Section 6.1.15, Shader and Program Queries, p. 384
4235bd8deadSopenharmony_ci
4245bd8deadSopenharmony_ci    (add to the last list of commands, p. 387)
4255bd8deadSopenharmony_ci
4265bd8deadSopenharmony_ci      void GetVertexAttribLdv(uint index, enum pname, double *params);
4275bd8deadSopenharmony_ci
4285bd8deadSopenharmony_ci    (modify the third paragraph, p. 388) The query CURRENT_VERTEX_ATTRIB
4295bd8deadSopenharmony_ci    returns the current value for the generic attribute
4305bd8deadSopenharmony_ci    <index>. GetVertexAttribdv and GetVertexAttribfv read and return the
4315bd8deadSopenharmony_ci    current attribute values as four single-precision floating-point values;
4325bd8deadSopenharmony_ci    GetVertexAttribiv reads them as floating-point values and converts them to
4335bd8deadSopenharmony_ci    four integer values; GetVertexAttribIiv reads and returns them as signed
4345bd8deadSopenharmony_ci    integers; GetVertexAttribIuiv reads and returns them as four unsigned
4355bd8deadSopenharmony_ci    integers; GetVertexAttribLdv reads and returns them as four double-precision
4365bd8deadSopenharmony_ci    floating-point values.  The results of the query are undefined if the
4375bd8deadSopenharmony_ci    current attribute values are read using one data type but were specified
4385bd8deadSopenharmony_ci    using a different one.  The error INVALID_OPERATION is generated if index
4395bd8deadSopenharmony_ci    is zero, as there is no current value for generic attribute zero.
4405bd8deadSopenharmony_ci
4415bd8deadSopenharmony_ci
4425bd8deadSopenharmony_ciAdditions to Appendix A of the OpenGL 3.2 (Compatibility Profile)
4435bd8deadSopenharmony_ciSpecification (Invariance)
4445bd8deadSopenharmony_ci
4455bd8deadSopenharmony_ci    None.
4465bd8deadSopenharmony_ci
4475bd8deadSopenharmony_ciAdditions to the AGL/GLX/WGL Specifications
4485bd8deadSopenharmony_ci
4495bd8deadSopenharmony_ci    None.
4505bd8deadSopenharmony_ci
4515bd8deadSopenharmony_ciModifications to The OpenGL Shading Language Specification, Version 1.50
4525bd8deadSopenharmony_ci(Revision 09)
4535bd8deadSopenharmony_ci
4545bd8deadSopenharmony_ci    Including the following line in a shader can be used to control the
4555bd8deadSopenharmony_ci    language features described in this extension:
4565bd8deadSopenharmony_ci
4575bd8deadSopenharmony_ci      #extension GL_ARB_vertex_attrib_64bit : <behavior>
4585bd8deadSopenharmony_ci
4595bd8deadSopenharmony_ci    where <behavior> is as specified in section 3.3.
4605bd8deadSopenharmony_ci
4615bd8deadSopenharmony_ci    New preprocessor #defines are added to the OpenGL Shading Language:
4625bd8deadSopenharmony_ci
4635bd8deadSopenharmony_ci      #define GL_ARB_vertex_attrib_64bit    1
4645bd8deadSopenharmony_ci
4655bd8deadSopenharmony_ci
4665bd8deadSopenharmony_ci    Modify Section 4.3.4, Inputs, p. 31
4675bd8deadSopenharmony_ci
4685bd8deadSopenharmony_ci    (modify third paragraph of the section, p. 31, allowing double-precision
4695bd8deadSopenharmony_ci    vertex shader inputs) ... Vertex shader inputs can only be single- or
4705bd8deadSopenharmony_ci    double-precision floating-point scalars, vectors, or matrices, or signed
4715bd8deadSopenharmony_ci    and unsigned integers and integer vectors.  Vertex shader inputs can also
4725bd8deadSopenharmony_ci    form arrays of these types, but not structures.
4735bd8deadSopenharmony_ci
4745bd8deadSopenharmony_ci
4755bd8deadSopenharmony_ciGLX Protocol
4765bd8deadSopenharmony_ci
4775bd8deadSopenharmony_ci    !!! TBD !!!
4785bd8deadSopenharmony_ci
4795bd8deadSopenharmony_ciDependencies on OpenGL 3.1 and OpenGL 3.2
4805bd8deadSopenharmony_ci
4815bd8deadSopenharmony_ci    When using an OpenGL 3.1 context without support for the ARB_compatibility
4825bd8deadSopenharmony_ci    extension or the core profile of OpenGL 3.2, remove the pseudocode
4835bd8deadSopenharmony_ci    describing the operation of ArrayElement.  The core profile specifies
4845bd8deadSopenharmony_ci    commands like DrawArrays and DrawElements more concisely.  Additionally,
4855bd8deadSopenharmony_ci    remove edits relevant to (deleted) display list functionality.
4865bd8deadSopenharmony_ci
4875bd8deadSopenharmony_ciDependencies on EXT_direct_state_access
4885bd8deadSopenharmony_ci
4895bd8deadSopenharmony_ci    If EXT_direct_state_access is not supported, references to the function
4905bd8deadSopenharmony_ci    VertexArrayVertexAttribLOffsetEXT should be removed.
4915bd8deadSopenharmony_ci
4925bd8deadSopenharmony_ciDependencies on NV_gpu_shader5
4935bd8deadSopenharmony_ci
4945bd8deadSopenharmony_ci    If NV_gpu_shader5 is not supported, references to the sized data types
4955bd8deadSopenharmony_ci    provided by these extensions (e.g., int8_t, float16_t, u16vec4, f64vec2)
4965bd8deadSopenharmony_ci    in Table X.1 should be removed.  The full set of types in the table is
4975bd8deadSopenharmony_ci    provided for completeness.
4985bd8deadSopenharmony_ci
4995bd8deadSopenharmony_ciDependencies on NV_vertex_attrib_integer_64bit
5005bd8deadSopenharmony_ci
5015bd8deadSopenharmony_ci    The extension NV_vertex_attrib_integer_64bit provides similar
5025bd8deadSopenharmony_ci    VertexAttribL* support for 64-bit signed and unsigned integer vertex
5035bd8deadSopenharmony_ci    shader inputs.  That extension also uses the VertexAttribLPointer
5045bd8deadSopenharmony_ci    function to specify 64-bit integer vertex attribute arrays.
5055bd8deadSopenharmony_ci
5065bd8deadSopenharmony_ci    Even if an application only uses 64-bit floating-point values in their
5075bd8deadSopenharmony_ci    vertex shader, NV_vertex_attrib_integer_64bit may still be useful.  That
5085bd8deadSopenharmony_ci    extension also provides the VertexAttribLFormatNV function, which allows
5095bd8deadSopenharmony_ci    the "bindless" vertex attribute array support provided by the
5105bd8deadSopenharmony_ci    NV_vertex_buffer_unified_memory extension to be used with 64-bit
5115bd8deadSopenharmony_ci    components, integer or floating-point.
5125bd8deadSopenharmony_ci
5135bd8deadSopenharmony_ciDependencies on ARB_explicit_attrib_location, ARB_separate_shader_objects,
5145bd8deadSopenharmony_ciOpenGL 3.3, and OpenGL 4.1
5155bd8deadSopenharmony_ci
5165bd8deadSopenharmony_ci    If ARB_explicit_attrib_location (or OpenGL 3.3) is supported, vertex
5175bd8deadSopenharmony_ci    shader input variables (including ones with double-precision components)
5185bd8deadSopenharmony_ci    can select associated generic attributes with an explicit location layout
5195bd8deadSopenharmony_ci    qualifier in lieu of calling BindAttribLocation.  If
5205bd8deadSopenharmony_ci    ARB_separate_shader_objects (or OpenGL 4.1) is supported, the layout
5215bd8deadSopenharmony_ci    location qualifier introduced by this extension is extended to apply to
5225bd8deadSopenharmony_ci    inputs for non-vertex shaders and outputs for non-fragment shaders.  As
5235bd8deadSopenharmony_ci    this extension requires ARB_gpu_shader_fp64 (or OpenGL 4.0), such inputs
5245bd8deadSopenharmony_ci    and outputs can have double-precision component types.
5255bd8deadSopenharmony_ci
5265bd8deadSopenharmony_ci    When these extensions are supported, there are special rules for the
5275bd8deadSopenharmony_ci    number of locations consumed by "dvec3" and "dvec4" types, which require
5285bd8deadSopenharmony_ci    more storage than is available in a four-component single-precision
5295bd8deadSopenharmony_ci    vector.  The rules are:
5305bd8deadSopenharmony_ci
5315bd8deadSopenharmony_ci      * dvec3/dvec4 vertex inputs consume one location (generic vertex
5325bd8deadSopenharmony_ci        attribute), but can count as two vectors for the purposes of
5335bd8deadSopenharmony_ci        determining if the vertex shader consumes too many inputs
5345bd8deadSopenharmony_ci
5355bd8deadSopenharmony_ci      * dvec3/dvec4 inputs and outputs for other stages consume two locations
5365bd8deadSopenharmony_ci
5375bd8deadSopenharmony_ci    The relevant spec edits (modifying language introduced by
5385bd8deadSopenharmony_ci    ARB_explicit_attrib_location) can be found in the
5395bd8deadSopenharmony_ci    ARB_separate_shader_objects extension.
5405bd8deadSopenharmony_ci
5415bd8deadSopenharmony_ciErrors
5425bd8deadSopenharmony_ci
5435bd8deadSopenharmony_ci    For all VertexAttrib* commands, the error INVALID_VALUE is generated if
5445bd8deadSopenharmony_ci    <index> is greater than or equal to MAX_VERTEX_ATTRIBS.
5455bd8deadSopenharmony_ci
5465bd8deadSopenharmony_ci    For VertexAttribLPointer, VertexAttribLFormat, and
5475bd8deadSopenharmony_ci    VertexArrayVertexAttribLOffsetEXT, the error INVALID_VALUE is generated if
5485bd8deadSopenharmony_ci    <index> is greater than or equal to MAX_VERTEX_ATTRIBS.
5495bd8deadSopenharmony_ci
5505bd8deadSopenharmony_ciNew State
5515bd8deadSopenharmony_ci
5525bd8deadSopenharmony_ci    None.
5535bd8deadSopenharmony_ci
5545bd8deadSopenharmony_ciNew Implementation Dependent State
5555bd8deadSopenharmony_ci
5565bd8deadSopenharmony_ci    None.
5575bd8deadSopenharmony_ci
5585bd8deadSopenharmony_ciIssues
5595bd8deadSopenharmony_ci
5605bd8deadSopenharmony_ci    (1) Should we allow 64-bit double-precision vertex attributes in the OpenGL
5615bd8deadSopenharmony_ci        API?  If so, how should we handle 64-bit double-precision values?
5625bd8deadSopenharmony_ci
5635bd8deadSopenharmony_ci      RESOLVED:  Yes, we will allow vertex shader inputs to have any scalar
5645bd8deadSopenharmony_ci      or vector type, including sized types.  Doubles appear to the API as any
5655bd8deadSopenharmony_ci      other type.  The new 'L' versions of the entry points are added to
5665bd8deadSopenharmony_ci      distinguish 64-bit attributes from existing DOUBLE support, where doubles
5675bd8deadSopenharmony_ci      are down-converted to floats.
5685bd8deadSopenharmony_ci
5695bd8deadSopenharmony_ci    (2) How does the handling of 64-bit vertex attribute components in this
5705bd8deadSopenharmony_ci        extension interact with the existing vertex attribute functions that
5715bd8deadSopenharmony_ci        support doubles?
5725bd8deadSopenharmony_ci
5735bd8deadSopenharmony_ci      RESOLVED:  While it is possible for fixed-function pipeline
5745bd8deadSopenharmony_ci      implementations to operate directly on doubles, most (if not all) such
5755bd8deadSopenharmony_ci      implementations simply convert doubles to floats.  The OpenGL Shading
5765bd8deadSopenharmony_ci      Language has not supported double-precision types to date, so all
5775bd8deadSopenharmony_ci      previous shading language inputs needed to be converted to float by
5785bd8deadSopenharmony_ci      necessity.
5795bd8deadSopenharmony_ci
5805bd8deadSopenharmony_ci      While it would be possible to support the existing double-precision
5815bd8deadSopenharmony_ci      vertex APIs (e.g., VertexAttrib4dv) to feed shading language variables
5825bd8deadSopenharmony_ci      with double-precision types, any such approach involves the prohibitive
5835bd8deadSopenharmony_ci      dynamic typing overhead discussed above.  As a result, we chose to
5845bd8deadSopenharmony_ci      create a parallel VertexAttribL* API.  
5855bd8deadSopenharmony_ci
5865bd8deadSopenharmony_ci      A similar approach was chosen for the integer attributes in OpenGL 3.0,
5875bd8deadSopenharmony_ci      where there was a pre-existing set of vertex APIs that accepted integers
5885bd8deadSopenharmony_ci      that were converted to floating-point values via straight value
5895bd8deadSopenharmony_ci      conversion or normalization.  Re-using existing integer APIs to feed the
5905bd8deadSopenharmony_ci      (new) integer variable types would have required similarly expensive
5915bd8deadSopenharmony_ci      dynamic typing.
5925bd8deadSopenharmony_ci
5935bd8deadSopenharmony_ci    (3) How should we handle vertex attributes for three- and four-component
5945bd8deadSopenharmony_ci        vectors with double-precision components?  How do we support these
5955bd8deadSopenharmony_ci        with vertex arrays?
5965bd8deadSopenharmony_ci
5975bd8deadSopenharmony_ci      RESOLVED:  Double-precision attributes may consume twice as much
5985bd8deadSopenharmony_ci      internal storage as their single-precision counterparts.  For the
5995bd8deadSopenharmony_ci      purposes of determining if a vertex shader uses "too many" attribute
6005bd8deadSopenharmony_ci      vectors in LinkProgram, implementations are permitted (but not required)
6015bd8deadSopenharmony_ci      to count "dvec3" and "dvec4" vertex shader inputs as consuming twice as
6025bd8deadSopenharmony_ci      many input vectors as corresponding single-precision types.
6035bd8deadSopenharmony_ci      Implementations are required to count inputs of type "double" and
6045bd8deadSopenharmony_ci      "dvec2" as a single vector, since these types require no more storage
6055bd8deadSopenharmony_ci      than a "vec4".
6065bd8deadSopenharmony_ci
6075bd8deadSopenharmony_ci      Note however, that for the purposes of mapping inputs to generic vertex
6085bd8deadSopenharmony_ci      attributes, "dvec3" and "dvec4" inputs are counted as consuming one
6095bd8deadSopenharmony_ci      attribute/location.  For example, if a vertex shader specifies:
6105bd8deadSopenharmony_ci
6115bd8deadSopenharmony_ci        layout(location=4) in dvec4 attribs[4];
6125bd8deadSopenharmony_ci
6135bd8deadSopenharmony_ci      the values for the four elements of "attribs" will be taken from vertex
6145bd8deadSopenharmony_ci      attributes 4-7, though "attribs" may be counted as consuming eight
6155bd8deadSopenharmony_ci      vectors worth of attributes.
6165bd8deadSopenharmony_ci
6175bd8deadSopenharmony_ci    (4) Are default values supported for vertex attributes with 64-bit
6185bd8deadSopenharmony_ci        components?
6195bd8deadSopenharmony_ci
6205bd8deadSopenharmony_ci      RESOLVED:  No.  With existing APIs, calling VertexAttrib3f() defines a
6215bd8deadSopenharmony_ci      FOUR-component vector where the fourth component assumes the value 1.0.
6225bd8deadSopenharmony_ci      No such defaults are provided for 64-bit components; if you load the
6235bd8deadSopenharmony_ci      values of an attribute of type "dvec4" with VertexAttribL3dv(), the
6245bd8deadSopenharmony_ci      value of the fourth component of the attribute variable will be
6255bd8deadSopenharmony_ci      undefined.
6265bd8deadSopenharmony_ci
6275bd8deadSopenharmony_ci      The APIs for loading 64-bit vertex attributes were designed to limit the
6285bd8deadSopenharmony_ci      amount of data type conversion required of the implementation; providing
6295bd8deadSopenharmony_ci      new type-dependent default values runs contrary to that design.  
6305bd8deadSopenharmony_ci
6315bd8deadSopenharmony_ci      Note that the original defaults were present in part to accommodate
6325bd8deadSopenharmony_ci      fixed-function vertex and fragment processing, where certain operations
6335bd8deadSopenharmony_ci      were defined in the most general form but reasonable defaults allowed
6345bd8deadSopenharmony_ci      targeted optimizations.  For example, vertex transformations were
6355bd8deadSopenharmony_ci      defined to operate on four-component object coordinates, even though
6365bd8deadSopenharmony_ci      four-component input positions are relatively rare.  Specifying a
6375bd8deadSopenharmony_ci      default W value of 1.0 allows for a fully-general implementation that
6385bd8deadSopenharmony_ci      doesn't need to do special cases based on the input position, but can
6395bd8deadSopenharmony_ci      still choose to do so as an optimization.  Programmable shaders, on the
6405bd8deadSopenharmony_ci      other hand, can easily be written to ignore irrelevant components and
6415bd8deadSopenharmony_ci      substitute constants themselves.
6425bd8deadSopenharmony_ci
6435bd8deadSopenharmony_ci    (5) Should this have a separate extension string entry or be simply
6445bd8deadSopenharmony_ci        implied by extensions such as ARB_gpu_shader5 or ARB_gpu_shader_fp64?
6455bd8deadSopenharmony_ci
6465bd8deadSopenharmony_ci      RESOLVED:  Treat as a separate extension, since there may be several
6475bd8deadSopenharmony_ci      such extensions with varying capabilities.
6485bd8deadSopenharmony_ci
6495bd8deadSopenharmony_ci      Additionally, we provide a separate GLSL "#extension" identifier for
6505bd8deadSopenharmony_ci      this extension because ARB_gpu_shader_fp64 was adopted without support
6515bd8deadSopenharmony_ci      for vertex inputs with 64-bit components.
6525bd8deadSopenharmony_ci
6535bd8deadSopenharmony_ci    (6) How does this extension provide 64-bit vertex attribute components for
6545bd8deadSopenharmony_ci        assembly programs supported by NV_gpu_program5?
6555bd8deadSopenharmony_ci
6565bd8deadSopenharmony_ci      RESOLVED:  NV_gpu_program5 allows programs to declare input variables
6575bd8deadSopenharmony_ci      with 64-bit components using the "LONG ATTRIB" declaration syntax.
6585bd8deadSopenharmony_ci      These inputs will be matched up against corresponding vertex attributes
6595bd8deadSopenharmony_ci      in the same manner as with GLSL.  Also, as with GLSL, the values of each
6605bd8deadSopenharmony_ci      vertex program input must be specified with the correct API function
6615bd8deadSopenharmony_ci      (VertexAttrib* vs. VertexAttribL*).
6625bd8deadSopenharmony_ci
6635bd8deadSopenharmony_ci
6645bd8deadSopenharmony_ciRevision History
6655bd8deadSopenharmony_ci
6665bd8deadSopenharmony_ci    Rev.    Date    Author    Changes
6675bd8deadSopenharmony_ci    ----  --------  --------  -----------------------------------------------
6685bd8deadSopenharmony_ci    10    06/10/14  Jon Leech Fix typo in name of EXT_direct_state_access
6695bd8deadSopenharmony_ci                              (Bug 7704).
6705bd8deadSopenharmony_ci
6715bd8deadSopenharmony_ci     9    08/01/11  pbrown    Clarify that "dvec3" and "dvec4" vertex shader
6725bd8deadSopenharmony_ci                              inputs consume only a single "location" for the
6735bd8deadSopenharmony_ci                              purpose of matching inputs to generic vertex
6745bd8deadSopenharmony_ci                              attributes, but may consume two vectors for the
6755bd8deadSopenharmony_ci                              purposes of determining if too many attribute
6765bd8deadSopenharmony_ci                              vectors are used (bug 7809).  Also, add missing
6775bd8deadSopenharmony_ci                              language describing the set of attributes
6785bd8deadSopenharmony_ci                              consumed by matrix vertex attributes (copied
6795bd8deadSopenharmony_ci                              from OpenGL 4.1), with fixes to explicitly
6805bd8deadSopenharmony_ci                              address "dmat*" types.  Fix issue (3) to match.
6815bd8deadSopenharmony_ci
6825bd8deadSopenharmony_ci     8    01/18/11  Jon Leech Make description of component data types
6835bd8deadSopenharmony_ci                              match the commands specifying them
6845bd8deadSopenharmony_ci                              (Bug 7235).
6855bd8deadSopenharmony_ci
6865bd8deadSopenharmony_ci     7    07/06/10  pbrown    Fix cut-and-paste errors in table mapping
6875bd8deadSopenharmony_ci                              GLSL types to API entry points.
6885bd8deadSopenharmony_ci
6895bd8deadSopenharmony_ci     6    04/09/10  pdaniell  ARBify the spec for inclusion in OpenGL 4.1.
6905bd8deadSopenharmony_ci    
6915bd8deadSopenharmony_ci     5    03/21/10  pbrown    Minor wording updates to the spec overview, 
6925bd8deadSopenharmony_ci                              dependencies, issues, and body.
6935bd8deadSopenharmony_ci
6945bd8deadSopenharmony_ci     4    01/29/10  pbrown    Update extension to accomodate the removal of
6955bd8deadSopenharmony_ci                              fp64 vertex inputs from ARB_gpu_shader_fp64 (bug
6965bd8deadSopenharmony_ci                              5953).  The API support for enumerating fp64
6975bd8deadSopenharmony_ci                              inputs and the GLSL support allowing fp64 vertex
6985bd8deadSopenharmony_ci                              inputs now belongs to this extension.  For the
6995bd8deadSopenharmony_ci                              GLSL support, we add a "#extension" token to
7005bd8deadSopenharmony_ci                              specify that fp64 vertex inputs should be
7015bd8deadSopenharmony_ci                              allowed.  Also, update several issues.
7025bd8deadSopenharmony_ci
7035bd8deadSopenharmony_ci     3              gsellers  Updates based on discussion
7045bd8deadSopenharmony_ci
7055bd8deadSopenharmony_ci     2              gsellers  EXT'ify.
7065bd8deadSopenharmony_ci
7075bd8deadSopenharmony_ci     1              pbrown    Internal revisions.
708