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