Name

    ARB_half_float_pixel

Name Strings

    GL_ARB_half_float_pixel

Contributors

    Pat Brown
    Jon Leech
    Rob Mace
    Brian Paul

Contact

    Dale Kirkland, NVIDIA (dkirkland 'at' nvidia.com)

Notice

    Copyright (c) 2004-2013 The Khronos Group Inc. Copyright terms at
        http://www.khronos.org/registry/speccopyright.html

Status

    Complete. Approved by the ARB on October 22, 2004.

Version

    Last Modified Date:  October 1, 2004
    Version:             6

Number

    ARB Extension #40

Dependencies

    This extension is written against the OpenGL 2.0 Specification
    but will work with the OpenGL 1.5 Specification.

    Based on the NV_half_float extension.

    This extension interacts with ARB_color_buffer_float.

Overview

    This extension introduces a new data type for half-precision (16-bit)
    floating-point quantities.  The floating-point format is very similar
    to the IEEE single-precision floating-point standard, except that it
    has only 5 exponent bits and 10 mantissa bits.  Half-precision floats
    are smaller than full precision floats and provide a larger dynamic
    range than similarly sized normalized scalar data types.

    This extension allows applications to use half-precision floating-
    point data when specifying pixel data.  It extends the existing image
    specification commands to accept the new data type.

    Floating-point data is clamped to [0, 1] at various places in the
    GL unless clamping is disabled with the ARB_color_buffer_float
    extension.

IP Status

    SGI owns US Patent #6,650,327, issued November 18, 2003. SGI
    believes this patent contains necessary IP for graphics systems
    implementing floating point (FP) rasterization and FP framebuffer
    capabilities.

    SGI will not grant the ARB royalty-free use of this IP for use in
    OpenGL, but will discuss licensing on RAND terms, on an individual
    basis with companies wishing to use this IP in the context of
    conformant OpenGL implementations. SGI does not plan to make any
    special exemption for open source implementations.

    Contact Doug Crisman at SGI Legal for the complete IP disclosure.

Issues

    1. How is this extension different from the NV_half_float extension?

       This extension does not add new commands for specifying half-
       precision vertex data, and all imaging functions have been listed
       for supporting the "half" type.

    2. What should the new data type be called?  "half"?  "hfloat"?

       RESOLVED:  half .  This convention builds on the convention of
       using the type "double" to describe double-precision floating-
       point numbers.  Here, "half" will refer to half-precision
       floating-point numbers.

       Even though the 16-bit float data type is a first-class data type,
       it is still more problematic than the other types in the sense
       that no native programming languages support the data type.
       "hfloat/hf" would have reflected a second-class status better
       than "half/h".

       Both names are not without conflicting precedents.  The name "half"
       is used to connote 16-bit scalar values on some 32-bit CPU
       architectures (e.g., PowerPC).  The name "hfloat" has been used to
       describe 128-bit floating-point data on VAX systems.

    3. Should half-precision data be accepted by commands in the imaging
       subset that accept pixel data?

       RESOLVED:  Yes, all functions in the core OpenGL and the imaging
       subset that accept pixel data accept half-precision data.

    4. Should the special representations NaN, INF, and denormal be
       supported?

       RESOLVED:  Implementation dependent.  The spec reflects that Nan
       and INF produce unspecified results.  Denormalized numbers can
       be treated as a value of 0.


New Tokens

    Accepted by the <type> parameter of DrawPixels, ReadPixels,
    TexImage1D, TexImage2D, TexImage3D, GetTexImage, TexSubImage1D,
    TexSubImage2D, TexSubImage3D, GetHistogram, GetMinmax,
    ConvolutionFilter1D, ConvolutionFilter2D, GetConvolutionFilter,
    SeparableFilter2D, GetSeparableFilter, ColorTable, ColorSubTable,
    and GetColorTable:

        HALF_FLOAT_ARB                                0x140B

Additions to Chapter 2 of the OpenGL 2.0 Specification (OpenGL Operation)

    Add a new Section 2.1.2, (p. 6):

    2.1.2  16-Bit Floating-Point Numbers

    A 16-bit floating-point number has a 1-bit sign (S), a 5-bit
    exponent (E), and a 10-bit mantissa (M).  The value of a 16-bit
    floating-point number is determined by the following:

        (-1)^S * 0.0,                        if E == 0 and M == 0,
        (-1)^S * 2^-14 * (M / 2^10),         if E == 0 and M != 0,
        (-1)^S * 2^(E-15) * (1 + M/2^10),    if 0 < E < 31,
        (-1)^S * INF,                        if E == 31 and M == 0, or
        NaN,                                 if E == 31 and M != 0,

    where

        S = floor((N mod 65536) / 32768),
        E = floor((N mod 32768) / 1024), and
        M = N mod 1024.

    Implementations are also allowed to use any of the following
    alternative encodings:

        (-1)^S * 0.0,                        if E == 0 and M != 0,
        (-1)^S * 2^(E-15) * (1 + M/2^10),    if E == 31 and M == 0, or
        (-1)^S * 2^(E-15) * (1 + M/2^10),    if E == 31 and M != 0,

    Any representable 16-bit floating-point value is legal as input
    to a GL command that accepts 16-bit floating-point data.  The
    result of providing a value that is not a floating-point number
    (such as infinity or NaN) to such a command is unspecified, but
    must not lead to GL interruption or termination.  Providing a
    denormalized number or negative zero to GL must yield predictable
    results.

    (modify Table 2.2, p. 9) -- add new row

                   Minimum
       GL Type    Bit Width    Description
       -------    ---------    -----------------------------------
       half          16        half-precision floating-point value
                               encoded in an unsigned scalar

    Modify Section 2.14, (Colors and Coloring), p. 59

    (modify Table 2.9, p. 59)  Add new row to the table:

         GL Type    Conversion
         -------    ----------
         half          c


Additions to Chapter 3 of the OpenGL 2.0 Specification (Rasterization)

    Modify Section 3.6.4, Rasterization of Pixel Rectangles (p. 126)

    (modify Table 3.5, p. 128 -- add new row)

        type Parameter     Corresponding       Special
        Token Name         GL Data Type     Interpretation
        --------------     -------------    --------------
        HALF_FLOAT_ARB         half               No

    (modify Unpacking, p. 129)  Data are taken from host memory as a
    sequence of signed or unsigned bytes (GL data types byte and ubyte),
    signed or unsigned integers (GL data types int and uint), or
    floating-point values (GL data types half and float).

Additions to Chapter 4 of the OpenGL 2.0 Specification (Per-Fragment
Operations and the Framebuffer)

    Modify Section 4.3.2, Reading Pixels (p. 219)

    (modify Final Conversion, p. 222) For an index, if the type is not
    FLOAT or HALF_FLOAT_ARB, final conversion consists of masking the
    index with the value given in Table 4.6; if the type is FLOAT or
    HALF_FLOAT_ARB, then the integer index is converted to a GL float
    or half data value.

    (modify Table 4.7, p. 224 -- add new row)

        type Parameter    GL Data Type    Component Conversion Formula
        --------------    ------------    ----------------------------
        HALF_FLOAT_ARB        half                  c = f

Additions to Chapter 5 of the OpenGL 2.0 Specification (Special Functions)

    None

Additions to Chapter 6 of the OpenGL 2.0 Specification (State and
State Requests)

    None

Additions to the AGL/GLX/WGL Specifications

    None

GLX Protocol (Modification to the GLX 1.3 Protocol Encoding Specification)

    Modify Appendix A, Pixel Data (p. 148)

      (Modify Table A.1, p. 149 -- add new row for HALF_FLOAT_ARB data)

          type             Encoding    Protocol Type    nbytes
          -------------    --------    -------------    ------
          HALF_FLOAT_ARB    0x140B      CARD16           2

Errors

    None

New State

    None

New Implementation Dependent State

    None

Revision History

    Rev.    Date    Author    Changes
    ----  -------- ---------  --------------------------------------------
      1   12/15/03 Kirkland   Initial version based on the NV_half_float
                              specification.

      2   2/26/04  Kirkland   Changed NVIDIA_xxx to NV_xxx.
                              Changed the issue resolution for INF and NaN.

      3   3/11/04  Kirkland   Updated language for float16 number handling.
                              Added bit encodings for half values.
                              Added issue dealing with name "half".

      4   7/23/04  Kirkland   Added alternative encodings options for
                              float16 format.

      5   9/17/04  Kirkland   Updated to reference OpenGL 2.0 spec.

      6   10/1/04  Kirkland   Updated IP section.
