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