15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci NV_half_float 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_NV_half_float 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciContact 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci Pat Brown, NVIDIA Corporation (pbrown 'at' nvidia.com) 125bd8deadSopenharmony_ci 135bd8deadSopenharmony_ciNotice 145bd8deadSopenharmony_ci 155bd8deadSopenharmony_ci Copyright NVIDIA Corporation, 2001-2002. 165bd8deadSopenharmony_ci 175bd8deadSopenharmony_ciIP Status 185bd8deadSopenharmony_ci 195bd8deadSopenharmony_ci NVIDIA Proprietary. 205bd8deadSopenharmony_ci 215bd8deadSopenharmony_ciStatus 225bd8deadSopenharmony_ci 235bd8deadSopenharmony_ci Implemented in CineFX (NV30) Emulation driver, August 2002. 245bd8deadSopenharmony_ci Shipping in Release 40 NVIDIA driver for CineFX hardware, January 2003. 255bd8deadSopenharmony_ci 265bd8deadSopenharmony_ciVersion 275bd8deadSopenharmony_ci 285bd8deadSopenharmony_ci Last Modified Date: 02/25/2004 295bd8deadSopenharmony_ci NVIDIA Revision: 9 305bd8deadSopenharmony_ci 315bd8deadSopenharmony_ciNumber 325bd8deadSopenharmony_ci 335bd8deadSopenharmony_ci 283 345bd8deadSopenharmony_ci 355bd8deadSopenharmony_ciDependencies 365bd8deadSopenharmony_ci 375bd8deadSopenharmony_ci Written based on the wording of the OpenGL 1.3 specification. 385bd8deadSopenharmony_ci 395bd8deadSopenharmony_ci OpenGL 1.1 is required. 405bd8deadSopenharmony_ci 415bd8deadSopenharmony_ci NV_float_buffer affects the definition of this extension. 425bd8deadSopenharmony_ci 435bd8deadSopenharmony_ci EXT_fog_coord affects the definition of this extension. 445bd8deadSopenharmony_ci 455bd8deadSopenharmony_ci EXT_secondary_color affects the definition of this extension. 465bd8deadSopenharmony_ci 475bd8deadSopenharmony_ci EXT_vertex_weighting affects the definition of this extension. 485bd8deadSopenharmony_ci 495bd8deadSopenharmony_ci NV_vertex_program affects the definition of this extension. 505bd8deadSopenharmony_ci 515bd8deadSopenharmony_ciOverview 525bd8deadSopenharmony_ci 535bd8deadSopenharmony_ci This extension introduces a new storage format and data type for 545bd8deadSopenharmony_ci half-precision (16-bit) floating-point quantities. The floating-point 555bd8deadSopenharmony_ci format is very similar to the IEEE single-precision floating-point 565bd8deadSopenharmony_ci standard, except that it has only 5 exponent bits and 10 mantissa bits. 575bd8deadSopenharmony_ci Half-precision floats are smaller than full precision floats and provide a 585bd8deadSopenharmony_ci larger dynamic range than similarly-sized normalized scalar data types. 595bd8deadSopenharmony_ci 605bd8deadSopenharmony_ci This extension allows applications to use half-precision floating point 615bd8deadSopenharmony_ci data when specifying vertices or pixel data. It adds new commands to 625bd8deadSopenharmony_ci specify vertex attributes using the new data type, and extends the 635bd8deadSopenharmony_ci existing vertex array and image specification commands to accept the new 645bd8deadSopenharmony_ci data type. 655bd8deadSopenharmony_ci 665bd8deadSopenharmony_ci This storage format is also used to represent 16-bit components in the 675bd8deadSopenharmony_ci floating-point frame buffers, as defined in the NV_float_buffer extension. 685bd8deadSopenharmony_ci 695bd8deadSopenharmony_ciIssues 705bd8deadSopenharmony_ci 715bd8deadSopenharmony_ci What should the new data type be called? "half"? "hfloat"? In addition, 725bd8deadSopenharmony_ci what should the immediate mode function suffix be? "h"? "hf"? 735bd8deadSopenharmony_ci 745bd8deadSopenharmony_ci RESOLVED: half and "h". This convention builds on the convention of 755bd8deadSopenharmony_ci using the type "double" to describe double-precision floating-point 765bd8deadSopenharmony_ci numbers. Here, "half" will refer to half-precision floating-point 775bd8deadSopenharmony_ci numbers. 785bd8deadSopenharmony_ci 795bd8deadSopenharmony_ci Even though the 16-bit float data type is a first-class data type, it 805bd8deadSopenharmony_ci is still more problematic than the other types in the sense that no 815bd8deadSopenharmony_ci native programming languages support the data type. "hfloat/hf" would 825bd8deadSopenharmony_ci have reflected a second-class status better than "half/h". 835bd8deadSopenharmony_ci 845bd8deadSopenharmony_ci Both names are not without conflicting precedents. The name "half" is 855bd8deadSopenharmony_ci used to connote 16-bit scalar values on some 32-bit CPU architectures 865bd8deadSopenharmony_ci (e.g., PowerPC). The name "hfloat" has been used to describe 128-bit 875bd8deadSopenharmony_ci floating-point data on VAX systems. 885bd8deadSopenharmony_ci 895bd8deadSopenharmony_ci Should we provide immediate-mode entry points for half-precision 905bd8deadSopenharmony_ci floating-point data types? 915bd8deadSopenharmony_ci 925bd8deadSopenharmony_ci RESOLVED: Yes, for orthogonality. Also useful as a fallback for the 935bd8deadSopenharmony_ci "general" case for ArrayElement. 945bd8deadSopenharmony_ci 955bd8deadSopenharmony_ci Should we support half-precision floating-point color index data? 965bd8deadSopenharmony_ci 975bd8deadSopenharmony_ci RESOLVED: No. 985bd8deadSopenharmony_ci 995bd8deadSopenharmony_ci Should half-precision data be accepted by all commands that accept pixel 1005bd8deadSopenharmony_ci data or only a subset? 1015bd8deadSopenharmony_ci 1025bd8deadSopenharmony_ci RESOLVED: All functions. Note that some textures or frame buffers 1035bd8deadSopenharmony_ci may store the half-precision floating-point data natively. 1045bd8deadSopenharmony_ci 1055bd8deadSopenharmony_ci Since half float data would be accepted in some cases, it will be 1065bd8deadSopenharmony_ci necessary for drivers to provide some data conversion code. This code 1075bd8deadSopenharmony_ci can be reused to handle the less common commands. 1085bd8deadSopenharmony_ci 1095bd8deadSopenharmony_ci 1105bd8deadSopenharmony_ciNew Procedures and Functions 1115bd8deadSopenharmony_ci 1125bd8deadSopenharmony_ci void Vertex2hNV(half x, half y); 1135bd8deadSopenharmony_ci void Vertex2hvNV(const half *v); 1145bd8deadSopenharmony_ci void Vertex3hNV(half x, half y, half z); 1155bd8deadSopenharmony_ci void Vertex3hvNV(const half *v); 1165bd8deadSopenharmony_ci void Vertex4hNV(half x, half y, half z, half w); 1175bd8deadSopenharmony_ci void Vertex4hvNV(const half *v); 1185bd8deadSopenharmony_ci void Normal3hNV(half nx, half ny, half nz); 1195bd8deadSopenharmony_ci void Normal3hvNV(const half *v); 1205bd8deadSopenharmony_ci void Color3hNV(half red, half green, half blue); 1215bd8deadSopenharmony_ci void Color3hvNV(const half *v); 1225bd8deadSopenharmony_ci void Color4hNV(half red, half green, half blue, half alpha); 1235bd8deadSopenharmony_ci void Color4hvNV(const half *v); 1245bd8deadSopenharmony_ci void TexCoord1hNV(half s); 1255bd8deadSopenharmony_ci void TexCoord1hvNV(const half *v); 1265bd8deadSopenharmony_ci void TexCoord2hNV(half s, half t); 1275bd8deadSopenharmony_ci void TexCoord2hvNV(const half *v); 1285bd8deadSopenharmony_ci void TexCoord3hNV(half s, half t, half r); 1295bd8deadSopenharmony_ci void TexCoord3hvNV(const half *v); 1305bd8deadSopenharmony_ci void TexCoord4hNV(half s, half t, half r, half q); 1315bd8deadSopenharmony_ci void TexCoord4hvNV(const half *v); 1325bd8deadSopenharmony_ci void MultiTexCoord1hNV(enum target, half s); 1335bd8deadSopenharmony_ci void MultiTexCoord1hvNV(enum target, const half *v); 1345bd8deadSopenharmony_ci void MultiTexCoord2hNV(enum target, half s, half t); 1355bd8deadSopenharmony_ci void MultiTexCoord2hvNV(enum target, const half *v); 1365bd8deadSopenharmony_ci void MultiTexCoord3hNV(enum target, half s, half t, half r); 1375bd8deadSopenharmony_ci void MultiTexCoord3hvNV(enum target, const half *v); 1385bd8deadSopenharmony_ci void MultiTexCoord4hNV(enum target, half s, half t, half r, half q); 1395bd8deadSopenharmony_ci void MultiTexCoord4hvNV(enum target, const half *v); 1405bd8deadSopenharmony_ci void VertexAttrib1hNV(uint index, half x); 1415bd8deadSopenharmony_ci void VertexAttrib1hvNV(uint index, const half *v); 1425bd8deadSopenharmony_ci void VertexAttrib2hNV(uint index, half x, half y); 1435bd8deadSopenharmony_ci void VertexAttrib2hvNV(uint index, const half *v); 1445bd8deadSopenharmony_ci void VertexAttrib3hNV(uint index, half x, half y, half z); 1455bd8deadSopenharmony_ci void VertexAttrib3hvNV(uint index, const half *v); 1465bd8deadSopenharmony_ci void VertexAttrib4hNV(uint index, half x, half y, half z, half w); 1475bd8deadSopenharmony_ci void VertexAttrib4hvNV(uint index, const half *v); 1485bd8deadSopenharmony_ci void VertexAttribs1hvNV(uint index, sizei n, const half *v); 1495bd8deadSopenharmony_ci void VertexAttribs2hvNV(uint index, sizei n, const half *v); 1505bd8deadSopenharmony_ci void VertexAttribs3hvNV(uint index, sizei n, const half *v); 1515bd8deadSopenharmony_ci void VertexAttribs4hvNV(uint index, sizei n, const half *v); 1525bd8deadSopenharmony_ci 1535bd8deadSopenharmony_ci (added if EXT_fog_coord is supported) 1545bd8deadSopenharmony_ci 1555bd8deadSopenharmony_ci void FogCoordhNV(half fog); 1565bd8deadSopenharmony_ci void FogCoordhvNV(const half *fog); 1575bd8deadSopenharmony_ci 1585bd8deadSopenharmony_ci (added if EXT_secondary_color is supported) 1595bd8deadSopenharmony_ci 1605bd8deadSopenharmony_ci void SecondaryColor3hNV(half red, half green, half blue); 1615bd8deadSopenharmony_ci void SecondaryColor3hvNV(const half *v); 1625bd8deadSopenharmony_ci 1635bd8deadSopenharmony_ci (added if EXT_vertex_weighting is supported) 1645bd8deadSopenharmony_ci 1655bd8deadSopenharmony_ci void VertexWeighthNV(half weight); 1665bd8deadSopenharmony_ci void VertexWeighthvNV(const half *weight); 1675bd8deadSopenharmony_ci 1685bd8deadSopenharmony_ciNew Tokens 1695bd8deadSopenharmony_ci 1705bd8deadSopenharmony_ci Accepted by the <type> argument of VertexPointer, NormalPointer, 1715bd8deadSopenharmony_ci ColorPointer, TexCoordPointer, FogCoordPointerEXT, 1725bd8deadSopenharmony_ci SecondaryColorPointerEXT, VertexWeightPointerEXT, VertexAttribPointerNV, 1735bd8deadSopenharmony_ci DrawPixels, ReadPixels, TexImage1D, TexImage2D, TexImage3D, TexSubImage1D, 1745bd8deadSopenharmony_ci TexSubImage2D, TexSubImage3D, and GetTexImage: 1755bd8deadSopenharmony_ci 1765bd8deadSopenharmony_ci HALF_FLOAT_NV 0x140B 1775bd8deadSopenharmony_ci 1785bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 1.3 Specification (OpenGL Operation) 1795bd8deadSopenharmony_ci 1805bd8deadSopenharmony_ci Modify Section 2.3, GL Command Syntax (p. 7) 1815bd8deadSopenharmony_ci 1825bd8deadSopenharmony_ci (Modify the last paragraph, p. 7. In the text below, "e*" represents the 1835bd8deadSopenharmony_ci epsilon character used to indicate no character.) 1845bd8deadSopenharmony_ci 1855bd8deadSopenharmony_ci These examples show the ANSI C declarations for these commands. In 1865bd8deadSopenharmony_ci general, a command declaration has the form 1875bd8deadSopenharmony_ci 1885bd8deadSopenharmony_ci rtype Name{e*1234}{e* b s i h f d ub us ui}{e*v} 1895bd8deadSopenharmony_ci ( [args ,] T arg1, ... , T argN [, args]); 1905bd8deadSopenharmony_ci 1915bd8deadSopenharmony_ci (Modify Table 2.1, p. 8 -- add new row) 1925bd8deadSopenharmony_ci 1935bd8deadSopenharmony_ci Letter Corresponding GL Type 1945bd8deadSopenharmony_ci ------ --------------------- 1955bd8deadSopenharmony_ci h half 1965bd8deadSopenharmony_ci 1975bd8deadSopenharmony_ci (add after last paragraph, p. 8) The half data type is a floating-point 1985bd8deadSopenharmony_ci data type encoded in an unsigned scalar data type. If the unsigned scalar 1995bd8deadSopenharmony_ci holding a half has a value of N, the corresponding floating point number 2005bd8deadSopenharmony_ci is 2015bd8deadSopenharmony_ci 2025bd8deadSopenharmony_ci (-1)^S * 0.0, if E == 0 and M == 0, 2035bd8deadSopenharmony_ci (-1)^S * 2^-14 * (M / 2^10), if E == 0 and M != 0, 2045bd8deadSopenharmony_ci (-1)^S * 2^(E-15) * (1 + M/2^10), if 0 < E < 31, 2055bd8deadSopenharmony_ci (-1)^S * INF, if E == 31 and M == 0, or 2065bd8deadSopenharmony_ci NaN, if E == 31 and M != 0, 2075bd8deadSopenharmony_ci 2085bd8deadSopenharmony_ci where 2095bd8deadSopenharmony_ci 2105bd8deadSopenharmony_ci S = floor((N mod 65536) / 32768), 2115bd8deadSopenharmony_ci E = floor((N mod 32768) / 1024), and 2125bd8deadSopenharmony_ci M = N mod 1024. 2135bd8deadSopenharmony_ci 2145bd8deadSopenharmony_ci INF (Infinity) is a special representation indicating numerical overflow. 2155bd8deadSopenharmony_ci NaN (Not a Number) is a special representation indicating the result of 2165bd8deadSopenharmony_ci illegal arithmetic operations, such as computing the square root or 2175bd8deadSopenharmony_ci logarithm of a negative number. Note that all normal values, zero, and 2185bd8deadSopenharmony_ci INF have an associated sign. -0.0 and +0.0 are considered equivalent for 2195bd8deadSopenharmony_ci the purposes of comparisons. Note also that half is not a native type in 2205bd8deadSopenharmony_ci most CPUs, so some special processing may be required to generate or 2215bd8deadSopenharmony_ci interpret half data. 2225bd8deadSopenharmony_ci 2235bd8deadSopenharmony_ci (Modify Table 2.2, p. 9 -- add new row) 2245bd8deadSopenharmony_ci 2255bd8deadSopenharmony_ci Minimum 2265bd8deadSopenharmony_ci GL Type Bit Width Description 2275bd8deadSopenharmony_ci ------- --------- ----------------------------------- 2285bd8deadSopenharmony_ci half 16 half-precision floating-point value 2295bd8deadSopenharmony_ci encoded in an unsigned scalar 2305bd8deadSopenharmony_ci 2315bd8deadSopenharmony_ci Modify Section 2.7, Vertex Specification, p. 19 2325bd8deadSopenharmony_ci 2335bd8deadSopenharmony_ci (Modify the descriptions of the immediate mode functions in this section, 2345bd8deadSopenharmony_ci including those introduced by extensions.) 2355bd8deadSopenharmony_ci 2365bd8deadSopenharmony_ci void Vertex[234][sihfd]( T coords ); 2375bd8deadSopenharmony_ci void Vertex[234][sihfd]v( T coords ); 2385bd8deadSopenharmony_ci ... 2395bd8deadSopenharmony_ci void TexCoord[1234][sihfd]( T coords ); 2405bd8deadSopenharmony_ci void TexCoord[1234][sihfd]v( T coords ); 2415bd8deadSopenharmony_ci ... 2425bd8deadSopenharmony_ci void MultiTexCoord[1234][sihfd](enum texture, T coords); 2435bd8deadSopenharmony_ci void MultiTexCoord[1234][sihfd]v(enum texture, T coords); 2445bd8deadSopenharmony_ci ... 2455bd8deadSopenharmony_ci void Normal3[bsihfd][ T coords ); 2465bd8deadSopenharmony_ci void Normal3[bsihfd]v( T coords ); 2475bd8deadSopenharmony_ci ... 2485bd8deadSopenharmony_ci void Color[34][bsihfd ubusui]( T components ); 2495bd8deadSopenharmony_ci void Color[34][bsihfd ubusui]v( T components ); 2505bd8deadSopenharmony_ci ... 2515bd8deadSopenharmony_ci void FogCoord[fd]EXT(T fog); 2525bd8deadSopenharmony_ci void FogCoordhNV(T fog); 2535bd8deadSopenharmony_ci void FogCoord[fd]vEXT(T fog); 2545bd8deadSopenharmony_ci void FogCoordhvNV(T fog); 2555bd8deadSopenharmony_ci ... 2565bd8deadSopenharmony_ci void SecondaryColor3[bsihfd ubusui]( T components ); 2575bd8deadSopenharmony_ci void SecondaryColor3hNV( T components ); 2585bd8deadSopenharmony_ci void SecondaryColor3[bsihfd ubusui]v( T components ); 2595bd8deadSopenharmony_ci void SecondaryColor3hvNV( T components ); 2605bd8deadSopenharmony_ci ... 2615bd8deadSopenharmony_ci void VertexWeightfEXT(T weight); 2625bd8deadSopenharmony_ci void VertexWeighthNV(T weight); 2635bd8deadSopenharmony_ci void VertexWeightfvEXT(T weight); 2645bd8deadSopenharmony_ci void VertexWeighthvNV(T weight); 2655bd8deadSopenharmony_ci ... 2665bd8deadSopenharmony_ci void VertexAttrib[1234][shfd]NV(uint index, T components); 2675bd8deadSopenharmony_ci void VertexAttrib4ubNV(uint index, T components); 2685bd8deadSopenharmony_ci void VertexAttrib[1234][shfd]vNV(uint index, T components); 2695bd8deadSopenharmony_ci void VertexAttrib4ubvNV(uint index, T components); 2705bd8deadSopenharmony_ci void VertexAttribs[1234][shfd]vNV(uint index, sizei n, T components); 2715bd8deadSopenharmony_ci void VertexAttribs4ubvNV(uint index, sizei n, T components); 2725bd8deadSopenharmony_ci .... 2735bd8deadSopenharmony_ci 2745bd8deadSopenharmony_ci Modify Section 2.8, Vertex Arrays, p. 21 2755bd8deadSopenharmony_ci 2765bd8deadSopenharmony_ci (Modify 1st paragraph on p. 22) ... For <type>, the values BYTE, SHORT, 2775bd8deadSopenharmony_ci INT, FLOAT, HALF_FLOAT_NV, and DOUBLE indicate types byte, short, int, 2785bd8deadSopenharmony_ci float, half, and double, respectively. ... 2795bd8deadSopenharmony_ci 2805bd8deadSopenharmony_ci (Modify Table 2.4, p. 23) 2815bd8deadSopenharmony_ci 2825bd8deadSopenharmony_ci Command Sizes Types 2835bd8deadSopenharmony_ci ------------------ ------- --------------------------------- 2845bd8deadSopenharmony_ci VertexPointer 2,3,4 short, int, float, half, double 2855bd8deadSopenharmony_ci NormalPointer 3 byte, short, int, float, half, 2865bd8deadSopenharmony_ci double 2875bd8deadSopenharmony_ci ColorPointer 3,4 byte, ubyte, short, ushort, int, 2885bd8deadSopenharmony_ci uint, float, half, double 2895bd8deadSopenharmony_ci IndexPointer 1 ubyte, short, int, float, double 2905bd8deadSopenharmony_ci TexCoordPointer 1,2,3,4 short, int, float, half, double 2915bd8deadSopenharmony_ci EdgeFlagPointer 1 boolean 2925bd8deadSopenharmony_ci FogCoordPointerEXT 1 float, half, double 2935bd8deadSopenharmony_ci SecondaryColorPointerEXT 3 byte, ubyte, short, ushort, int, 2945bd8deadSopenharmony_ci uint, float, half, double 2955bd8deadSopenharmony_ci VertexWeightPointerEXT 1 float, half 2965bd8deadSopenharmony_ci 2975bd8deadSopenharmony_ci Table 2.4: Vertex array sizes (values per vertex) and data types. 2985bd8deadSopenharmony_ci 2995bd8deadSopenharmony_ci Modify Section 2.13, Colors and Coloring, p.44 3005bd8deadSopenharmony_ci 3015bd8deadSopenharmony_ci (Modify Table 2.6, p. 45) Add new row to the table: 3025bd8deadSopenharmony_ci 3035bd8deadSopenharmony_ci GL Type Conversion 3045bd8deadSopenharmony_ci ------- ---------- 3055bd8deadSopenharmony_ci half c 3065bd8deadSopenharmony_ci 3075bd8deadSopenharmony_ci Modify NV_vertex_program_spec, Section 2.14.3, Vertex Arrays for Vertex 3085bd8deadSopenharmony_ci Attributes. 3095bd8deadSopenharmony_ci 3105bd8deadSopenharmony_ci (modify paragraph describing VertexAttribPointer) ... type specifies the 3115bd8deadSopenharmony_ci data type of the values stored in the array. type must be one of SHORT, 3125bd8deadSopenharmony_ci FLOAT, HALF_FLOAT_NV, DOUBLE, or UNSIGNED_BYTE and these values correspond 3135bd8deadSopenharmony_ci to the array types short, int, float, half, double, and ubyte 3145bd8deadSopenharmony_ci respectively. ... 3155bd8deadSopenharmony_ci 3165bd8deadSopenharmony_ci (add to end of paragraph describing mapping of vertex arrays to 3175bd8deadSopenharmony_ci immediate-mode functions) ... For each vertex attribute, the corresponding 3185bd8deadSopenharmony_ci command is VertexAttrib[size][type]v, where size is one of [1,2,3,4], and 3195bd8deadSopenharmony_ci type is one of [s,f,h,d,ub], corresponding to the array types short, int, 3205bd8deadSopenharmony_ci float, half, double, and ubyte respectively. 3215bd8deadSopenharmony_ci 3225bd8deadSopenharmony_ci 3235bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 1.3 Specification (Rasterization) 3245bd8deadSopenharmony_ci 3255bd8deadSopenharmony_ci Modify Section 3.6.4, Rasterization of Pixel Rectangles (p. 91) 3265bd8deadSopenharmony_ci 3275bd8deadSopenharmony_ci (Modify Table 3.5, p. 94 -- add new row) 3285bd8deadSopenharmony_ci 3295bd8deadSopenharmony_ci type Parameter Corresponding Special 3305bd8deadSopenharmony_ci Token Name GL Data Type Interpretation 3315bd8deadSopenharmony_ci -------------- ------------- -------------- 3325bd8deadSopenharmony_ci HALF_FLOAT_NV half No 3335bd8deadSopenharmony_ci 3345bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 1.3 Specification (Per-Fragment 3355bd8deadSopenharmony_ciOperations and the Frame Buffer) 3365bd8deadSopenharmony_ci 3375bd8deadSopenharmony_ci Modify Section 4.3.2, Reading Pixels (p. 173) 3385bd8deadSopenharmony_ci 3395bd8deadSopenharmony_ci (modify Final Conversion, p. 177) For an index, if the type is not FLOAT 3405bd8deadSopenharmony_ci or HALF_FLOAT_NV, final conversion consists of masking the index with the 3415bd8deadSopenharmony_ci value given in Table 4.6; if the type is FLOAT or HALF_FLOAT_NV, then the 3425bd8deadSopenharmony_ci integer index is converted to a GL float or half data value. For an RGBA 3435bd8deadSopenharmony_ci color, components are clamped depending on the data type of the buffer 3445bd8deadSopenharmony_ci being read. For fixed-point buffers, each component is clamped to [0.1]. 3455bd8deadSopenharmony_ci For floating-point buffers, if <type> is not FLOAT or HALF_FLOAT_NV, each 3465bd8deadSopenharmony_ci component is clamped to [0,1] if <type> is unsigned or [-1,1] if <type> is 3475bd8deadSopenharmony_ci signed and then converted according to Table 4.7. 3485bd8deadSopenharmony_ci 3495bd8deadSopenharmony_ci (Modify Table 4.7, p. 178 -- add new row) 3505bd8deadSopenharmony_ci 3515bd8deadSopenharmony_ci type Parameter GL Data Type Component Conversion Formula 3525bd8deadSopenharmony_ci -------------- ------------ ---------------------------- 3535bd8deadSopenharmony_ci HALF_FLOAT_NV half c = f 3545bd8deadSopenharmony_ci 3555bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 1.3 Specification (Special Functions) 3565bd8deadSopenharmony_ci 3575bd8deadSopenharmony_ci None. 3585bd8deadSopenharmony_ci 3595bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 1.3 Specification (State and 3605bd8deadSopenharmony_ciState Requests) 3615bd8deadSopenharmony_ci 3625bd8deadSopenharmony_ci None. 3635bd8deadSopenharmony_ci 3645bd8deadSopenharmony_ciAdditions to Appendix A of the OpenGL 1.3 Specification (Invariance) 3655bd8deadSopenharmony_ci 3665bd8deadSopenharmony_ci None. 3675bd8deadSopenharmony_ci 3685bd8deadSopenharmony_ciAdditions to the AGL/GLX/WGL Specifications 3695bd8deadSopenharmony_ci 3705bd8deadSopenharmony_ci None. 3715bd8deadSopenharmony_ci 3725bd8deadSopenharmony_ciGLX Protocol (Modification to the GLX 1.3 Protocol Encoding Specification) 3735bd8deadSopenharmony_ci 3745bd8deadSopenharmony_ci Add to Section 1.4 (p.2), Common Types 3755bd8deadSopenharmony_ci 3765bd8deadSopenharmony_ci FLOAT16 A 16-bit floating-point value in the format specified 3775bd8deadSopenharmony_ci in the NV_half_float extension specification. 3785bd8deadSopenharmony_ci 3795bd8deadSopenharmony_ci Modify Section 2.3.3 (p. 79), GL Rendering Commands 3805bd8deadSopenharmony_ci 3815bd8deadSopenharmony_ci The following rendering commands are sent to the server as part of a 3825bd8deadSopenharmony_ci glXRender request: 3835bd8deadSopenharmony_ci 3845bd8deadSopenharmony_ci Vertex2hvNV 3855bd8deadSopenharmony_ci 2 8 rendering command length 3865bd8deadSopenharmony_ci 2 4240 rendering command opcode 3875bd8deadSopenharmony_ci 2 FLOAT16 v[0] 3885bd8deadSopenharmony_ci 2 FLOAT16 v[1] 3895bd8deadSopenharmony_ci 3905bd8deadSopenharmony_ci Vertex3hvNV 3915bd8deadSopenharmony_ci 2 12 rendering command length 3925bd8deadSopenharmony_ci 2 4241 rendering command opcode 3935bd8deadSopenharmony_ci 2 FLOAT16 v[0] 3945bd8deadSopenharmony_ci 2 FLOAT16 v[1] 3955bd8deadSopenharmony_ci 2 FLOAT16 v[2] 3965bd8deadSopenharmony_ci 2 unused 3975bd8deadSopenharmony_ci 3985bd8deadSopenharmony_ci Vertex4hvNV 3995bd8deadSopenharmony_ci 2 12 rendering command length 4005bd8deadSopenharmony_ci 2 4242 rendering command opcode 4015bd8deadSopenharmony_ci 2 FLOAT16 v[0] 4025bd8deadSopenharmony_ci 2 FLOAT16 v[1] 4035bd8deadSopenharmony_ci 2 FLOAT16 v[2] 4045bd8deadSopenharmony_ci 2 FLOAT16 v[3] 4055bd8deadSopenharmony_ci 4065bd8deadSopenharmony_ci Normal3hvNV 4075bd8deadSopenharmony_ci 2 12 rendering command length 4085bd8deadSopenharmony_ci 2 4243 rendering command opcode 4095bd8deadSopenharmony_ci 2 FLOAT16 v[0] 4105bd8deadSopenharmony_ci 2 FLOAT16 v[1] 4115bd8deadSopenharmony_ci 2 FLOAT16 v[2] 4125bd8deadSopenharmony_ci 2 unused 4135bd8deadSopenharmony_ci 4145bd8deadSopenharmony_ci Color3hvNV 4155bd8deadSopenharmony_ci 2 12 rendering command length 4165bd8deadSopenharmony_ci 2 4244 rendering command opcode 4175bd8deadSopenharmony_ci 2 FLOAT16 v[0] 4185bd8deadSopenharmony_ci 2 FLOAT16 v[1] 4195bd8deadSopenharmony_ci 2 FLOAT16 v[2] 4205bd8deadSopenharmony_ci 2 unused 4215bd8deadSopenharmony_ci 4225bd8deadSopenharmony_ci Color4hvNV 4235bd8deadSopenharmony_ci 2 12 rendering command length 4245bd8deadSopenharmony_ci 2 4245 rendering command opcode 4255bd8deadSopenharmony_ci 2 FLOAT16 v[0] 4265bd8deadSopenharmony_ci 2 FLOAT16 v[1] 4275bd8deadSopenharmony_ci 2 FLOAT16 v[2] 4285bd8deadSopenharmony_ci 2 FLOAT16 v[3] 4295bd8deadSopenharmony_ci 4305bd8deadSopenharmony_ci TexCoord1hvNV 4315bd8deadSopenharmony_ci 2 8 rendering command length 4325bd8deadSopenharmony_ci 2 4246 rendering command opcode 4335bd8deadSopenharmony_ci 2 FLOAT16 v[0] 4345bd8deadSopenharmony_ci 2 unused 4355bd8deadSopenharmony_ci 4365bd8deadSopenharmony_ci TexCoord2hvNV 4375bd8deadSopenharmony_ci 2 8 rendering command length 4385bd8deadSopenharmony_ci 2 4247 rendering command opcode 4395bd8deadSopenharmony_ci 2 FLOAT16 v[0] 4405bd8deadSopenharmony_ci 2 FLOAT16 v[1] 4415bd8deadSopenharmony_ci 4425bd8deadSopenharmony_ci TexCoord3hvNV 4435bd8deadSopenharmony_ci 2 12 rendering command length 4445bd8deadSopenharmony_ci 2 4248 rendering command opcode 4455bd8deadSopenharmony_ci 2 FLOAT16 v[0] 4465bd8deadSopenharmony_ci 2 FLOAT16 v[1] 4475bd8deadSopenharmony_ci 2 FLOAT16 v[2] 4485bd8deadSopenharmony_ci 2 unused 4495bd8deadSopenharmony_ci 4505bd8deadSopenharmony_ci TexCoord4hvNV 4515bd8deadSopenharmony_ci 2 12 rendering command length 4525bd8deadSopenharmony_ci 2 4249 rendering command opcode 4535bd8deadSopenharmony_ci 2 FLOAT16 v[0] 4545bd8deadSopenharmony_ci 2 FLOAT16 v[1] 4555bd8deadSopenharmony_ci 2 FLOAT16 v[2] 4565bd8deadSopenharmony_ci 2 FLOAT16 v[3] 4575bd8deadSopenharmony_ci 4585bd8deadSopenharmony_ci MultiTexCoord1hvNV 4595bd8deadSopenharmony_ci 2 12 rendering command length 4605bd8deadSopenharmony_ci 2 4250 rendering command opcode 4615bd8deadSopenharmony_ci 4 ENUM target 4625bd8deadSopenharmony_ci 2 FLOAT16 v[0] 4635bd8deadSopenharmony_ci 2 unused 4645bd8deadSopenharmony_ci 4655bd8deadSopenharmony_ci MultiTexCoord2hvNV 4665bd8deadSopenharmony_ci 2 12 rendering command length 4675bd8deadSopenharmony_ci 2 4251 rendering command opcode 4685bd8deadSopenharmony_ci 4 ENUM target 4695bd8deadSopenharmony_ci 2 FLOAT16 v[0] 4705bd8deadSopenharmony_ci 2 FLOAT16 v[1] 4715bd8deadSopenharmony_ci 4725bd8deadSopenharmony_ci MultiTexCoord3hvNV 4735bd8deadSopenharmony_ci 2 16 rendering command length 4745bd8deadSopenharmony_ci 2 4252 rendering command opcode 4755bd8deadSopenharmony_ci 4 ENUM target 4765bd8deadSopenharmony_ci 2 FLOAT16 v[0] 4775bd8deadSopenharmony_ci 2 FLOAT16 v[1] 4785bd8deadSopenharmony_ci 2 FLOAT16 v[2] 4795bd8deadSopenharmony_ci 2 unused 4805bd8deadSopenharmony_ci 4815bd8deadSopenharmony_ci MultiTexCoord4hvNV 4825bd8deadSopenharmony_ci 2 16 rendering command length 4835bd8deadSopenharmony_ci 2 4253 rendering command opcode 4845bd8deadSopenharmony_ci 4 ENUM target 4855bd8deadSopenharmony_ci 2 FLOAT16 v[0] 4865bd8deadSopenharmony_ci 2 FLOAT16 v[1] 4875bd8deadSopenharmony_ci 2 FLOAT16 v[2] 4885bd8deadSopenharmony_ci 2 FLOAT16 v[3] 4895bd8deadSopenharmony_ci 4905bd8deadSopenharmony_ci FogCoordhvNV 4915bd8deadSopenharmony_ci 2 8 rendering command length 4925bd8deadSopenharmony_ci 2 4254 rendering command opcode 4935bd8deadSopenharmony_ci 2 FLOAT16 v[0] 4945bd8deadSopenharmony_ci 2 unused 4955bd8deadSopenharmony_ci 4965bd8deadSopenharmony_ci SecondaryColor3hvNV 4975bd8deadSopenharmony_ci 2 12 rendering command length 4985bd8deadSopenharmony_ci 2 4255 rendering command opcode 4995bd8deadSopenharmony_ci 2 FLOAT16 v[0] 5005bd8deadSopenharmony_ci 2 FLOAT16 v[1] 5015bd8deadSopenharmony_ci 2 FLOAT16 v[2] 5025bd8deadSopenharmony_ci 2 unused 5035bd8deadSopenharmony_ci 5045bd8deadSopenharmony_ci VertexWeighthvNV 5055bd8deadSopenharmony_ci 2 8 rendering command length 5065bd8deadSopenharmony_ci 2 4256 rendering command opcode 5075bd8deadSopenharmony_ci 2 FLOAT16 v[0] 5085bd8deadSopenharmony_ci 2 unused 5095bd8deadSopenharmony_ci 5105bd8deadSopenharmony_ci VertexAttrib1hvNV 5115bd8deadSopenharmony_ci 2 12 rendering command length 5125bd8deadSopenharmony_ci 2 4257 rendering command opcode 5135bd8deadSopenharmony_ci 4 CARD32 index 5145bd8deadSopenharmony_ci 2 FLOAT16 v[0] 5155bd8deadSopenharmony_ci 2 unused 5165bd8deadSopenharmony_ci 5175bd8deadSopenharmony_ci VertexAttrib2hvNV 5185bd8deadSopenharmony_ci 2 12 rendering command length 5195bd8deadSopenharmony_ci 2 4258 rendering command opcode 5205bd8deadSopenharmony_ci 4 CARD32 index 5215bd8deadSopenharmony_ci 2 FLOAT16 v[0] 5225bd8deadSopenharmony_ci 2 FLOAT16 v[1] 5235bd8deadSopenharmony_ci 5245bd8deadSopenharmony_ci VertexAttrib3hvNV 5255bd8deadSopenharmony_ci 2 16 rendering command length 5265bd8deadSopenharmony_ci 2 4259 rendering command opcode 5275bd8deadSopenharmony_ci 4 CARD32 index 5285bd8deadSopenharmony_ci 2 FLOAT16 v[0] 5295bd8deadSopenharmony_ci 2 FLOAT16 v[1] 5305bd8deadSopenharmony_ci 2 FLOAT16 v[2] 5315bd8deadSopenharmony_ci 2 unused 5325bd8deadSopenharmony_ci 5335bd8deadSopenharmony_ci VertexAttrib4hvNV 5345bd8deadSopenharmony_ci 2 16 rendering command length 5355bd8deadSopenharmony_ci 2 4260 rendering command opcode 5365bd8deadSopenharmony_ci 4 CARD32 index 5375bd8deadSopenharmony_ci 2 FLOAT16 v[0] 5385bd8deadSopenharmony_ci 2 FLOAT16 v[1] 5395bd8deadSopenharmony_ci 2 FLOAT16 v[2] 5405bd8deadSopenharmony_ci 2 FLOAT16 v[3] 5415bd8deadSopenharmony_ci 5425bd8deadSopenharmony_ci VertexAttribs1hvNV 5435bd8deadSopenharmony_ci 2 12+2*n+p rendering command length 5445bd8deadSopenharmony_ci 2 4261 rendering command opcode 5455bd8deadSopenharmony_ci 4 CARD32 index 5465bd8deadSopenharmony_ci 4 CARD32 n 5475bd8deadSopenharmony_ci 2*n LISTofFLOAT16 v 5485bd8deadSopenharmony_ci p unused, p=pad(2*n) 5495bd8deadSopenharmony_ci 5505bd8deadSopenharmony_ci VertexAttribs2hvNV 5515bd8deadSopenharmony_ci 2 12+4*n rendering command length 5525bd8deadSopenharmony_ci 2 4262 rendering command opcode 5535bd8deadSopenharmony_ci 4 CARD32 index 5545bd8deadSopenharmony_ci 4 CARD32 n 5555bd8deadSopenharmony_ci 4*n LISTofFLOAT16 v 5565bd8deadSopenharmony_ci 5575bd8deadSopenharmony_ci VertexAttribs3hvNV 5585bd8deadSopenharmony_ci 2 12+6*n+p rendering command length 5595bd8deadSopenharmony_ci 2 4263 rendering command opcode 5605bd8deadSopenharmony_ci 4 CARD32 index 5615bd8deadSopenharmony_ci 4 CARD32 n 5625bd8deadSopenharmony_ci 6*n LISTofFLOAT16 v 5635bd8deadSopenharmony_ci p unused, p=pad(6*n) 5645bd8deadSopenharmony_ci 5655bd8deadSopenharmony_ci VertexAttribs4hvNV 5665bd8deadSopenharmony_ci 2 12+8*n rendering command length 5675bd8deadSopenharmony_ci 2 4264 rendering command opcode 5685bd8deadSopenharmony_ci 4 CARD32 index 5695bd8deadSopenharmony_ci 4 CARD32 n 5705bd8deadSopenharmony_ci 8*n LISTofFLOAT16 v 5715bd8deadSopenharmony_ci 5725bd8deadSopenharmony_ci 5735bd8deadSopenharmony_ci Modify Section 2.3.4, GL Rendering Commands That May Be Large (p. 127) 5745bd8deadSopenharmony_ci 5755bd8deadSopenharmony_ci (Modify the ARRAY_INFO portion of the DrawArrays encoding (p.129) to 5765bd8deadSopenharmony_ci reflect the new data type supported by vertex arrays.) 5775bd8deadSopenharmony_ci 5785bd8deadSopenharmony_ci ARRAY_INFO 5795bd8deadSopenharmony_ci 5805bd8deadSopenharmony_ci 4 enum data type 5815bd8deadSopenharmony_ci 0x1400 i=1 BYTE 5825bd8deadSopenharmony_ci 0x1401 i=1 UNSIGNED_BYTE 5835bd8deadSopenharmony_ci 0x1402 i=2 SHORT 5845bd8deadSopenharmony_ci ... 5855bd8deadSopenharmony_ci 0x140B i=2 HALF_FLOAT_NV 5865bd8deadSopenharmony_ci 4 INT32 j 5875bd8deadSopenharmony_ci 4 ENUM array type 5885bd8deadSopenharmony_ci ... 5895bd8deadSopenharmony_ci 5905bd8deadSopenharmony_ci Modify Appendix A, Pixel Data (p. 148) 5915bd8deadSopenharmony_ci 5925bd8deadSopenharmony_ci (Modify Table A.1, p. 149 -- add new row for HALF_FLOAT_NV data) 5935bd8deadSopenharmony_ci 5945bd8deadSopenharmony_ci type Encoding Protocol Type nbytes 5955bd8deadSopenharmony_ci ------------- -------- ------------- ------ 5965bd8deadSopenharmony_ci HALF_FLOAT_NV 0x140B CARD16 2 5975bd8deadSopenharmony_ci 5985bd8deadSopenharmony_ci 5995bd8deadSopenharmony_ciDependencies on NV_float_buffer 6005bd8deadSopenharmony_ci 6015bd8deadSopenharmony_ci If NV_float_buffer is not supported, the fixed and floating-point color 6025bd8deadSopenharmony_ci buffer language in ReadPixels "Final Conversion" should be removed. 6035bd8deadSopenharmony_ci 6045bd8deadSopenharmony_ci 6055bd8deadSopenharmony_ciDependencies on EXT_fog_coord, EXT_secondary_color, and EXT_vertex_weighting 6065bd8deadSopenharmony_ci 6075bd8deadSopenharmony_ci If EXT_fog_coord, EXT_secondary_color, or EXT_vertex_weighting are not 6085bd8deadSopenharmony_ci supported, references to FogCoordPointerEXT, SecondaryColorPointerEXT, and 6095bd8deadSopenharmony_ci VertexWeightPointerEXT, respectively, should be removed. 6105bd8deadSopenharmony_ci 6115bd8deadSopenharmony_ci If EXT_fog_coord is not supported, remove language adding immediate mode 6125bd8deadSopenharmony_ci FogCoordh[v]NV APIs. 6135bd8deadSopenharmony_ci 6145bd8deadSopenharmony_ci If EXT_secondary_color is not supported, remove language adding immediate 6155bd8deadSopenharmony_ci mode SecondaryColor3h[v]NV APIs. 6165bd8deadSopenharmony_ci 6175bd8deadSopenharmony_ci If EXT_vertex_weighting is not supported, remove language adding immediate 6185bd8deadSopenharmony_ci mode VertexWeighth[v]NV APIs. 6195bd8deadSopenharmony_ci 6205bd8deadSopenharmony_ciDependencies on NV_vertex_program 6215bd8deadSopenharmony_ci 6225bd8deadSopenharmony_ci If NV_vertex_program is not supported, references to VertexAttribPointerNV 6235bd8deadSopenharmony_ci should be removed, as should references to VertexAttrib*h[v] commands. 6245bd8deadSopenharmony_ci 6255bd8deadSopenharmony_ci 6265bd8deadSopenharmony_ciErrors 6275bd8deadSopenharmony_ci 6285bd8deadSopenharmony_ci None. 6295bd8deadSopenharmony_ci 6305bd8deadSopenharmony_ci 6315bd8deadSopenharmony_ciNew State 6325bd8deadSopenharmony_ci 6335bd8deadSopenharmony_ci None. 6345bd8deadSopenharmony_ci 6355bd8deadSopenharmony_ci 6365bd8deadSopenharmony_ciNew Implementation Dependent State 6375bd8deadSopenharmony_ci 6385bd8deadSopenharmony_ci None. 6395bd8deadSopenharmony_ci 6405bd8deadSopenharmony_ci 6415bd8deadSopenharmony_ciRevision History 6425bd8deadSopenharmony_ci 6435bd8deadSopenharmony_ci Rev. Date Author Changes 6445bd8deadSopenharmony_ci ---- -------- -------- -------------------------------------------- 6455bd8deadSopenharmony_ci 10 03/21/10 pbrown Clarify that FogCoord*, SecondaryColor*, and 6465bd8deadSopenharmony_ci VertexWeight* APIs are supported only if 6475bd8deadSopenharmony_ci corresponding extensions are also supported. 6485bd8deadSopenharmony_ci Recent NVIDIA drivers and GPUs do not support 6495bd8deadSopenharmony_ci EXT_vertex_weighting. 6505bd8deadSopenharmony_ci 6515bd8deadSopenharmony_ci 9 02/25/04 pbrown Fixed incorrect language using division by zero 6525bd8deadSopenharmony_ci as an example of something producing a NaN. 6535bd8deadSopenharmony_ci 6545bd8deadSopenharmony_ci 8 07/19/02 pbrown Add GLX protocol. Modified enumerant value for 6555bd8deadSopenharmony_ci HALF_FLOAT_NV to use new value assigned from the 6565bd8deadSopenharmony_ci registry. 6575bd8deadSopenharmony_ci 6585bd8deadSopenharmony_ci 7 01/31/02 pbrown Add revision history. 6595bd8deadSopenharmony_ci 6605bd8deadSopenharmony_ci 6 12/26/01 pbrown Add immediate-mode entry points for all functions 6615bd8deadSopenharmony_ci that may accept half-precision float vertex data. 6625bd8deadSopenharmony_ci 6635bd8deadSopenharmony_ci 4 10/19/01 pbrown Fixed incorrect description of encoding of hfloat 6645bd8deadSopenharmony_ci denorms. Addressed issue that there's no reason 6655bd8deadSopenharmony_ci to require hfloats to be exactly 16 bits on all 6665bd8deadSopenharmony_ci architectures. Instead, they are documented as 6675bd8deadSopenharmony_ci needing to be at least 16 bits, and as using only 6685bd8deadSopenharmony_ci the 16 least significant bits. Practically 6695bd8deadSopenharmony_ci speaking, they will probably always be 16 bits. 670