Name

    ATI_texture_float

Name Strings

    GL_ATI_texture_float

Contact

    Rob Mace, AMD (rob.mace 'at' amd.com)

Status

    Complete.

Version

    Last Modified Date: November 4, 2006
    Revision: 5

Number

    280

Dependencies

    OpenGL 1.1 or EXT_texture is required.

    The extension is written against the OpenGL 1.3 Specification.


Overview

    This extension adds texture internal formats with 32 and 16 bit
    floating-point components.  The 32 bit floating-point components
    are in the standard IEEE float format.  The 16 bit floating-point
    components have 1 sign bit, 5 exponent bits, and 10 mantissa bits.
    Floating-point components are clamped to the limits of the range
    representable by their format.


Issues

    1. Should we expose a GL_FLOAT16_ATI pixel type so that the 16 bit
       float textures can be directly loaded?

       RESOLUTION:  This will be exposed in a separate extension.


New Procedures and Functions

   None


New Tokens

    Accepted by the <internalFormat> parameter of TexImage1D,
    TexImage2D, and TexImage3D:

        RGBA_FLOAT32_ATI                 0x8814
        RGB_FLOAT32_ATI                  0x8815
        ALPHA_FLOAT32_ATI                0x8816
        INTENSITY_FLOAT32_ATI            0x8817
        LUMINANCE_FLOAT32_ATI            0x8818
        LUMINANCE_ALPHA_FLOAT32_ATI      0x8819
        RGBA_FLOAT16_ATI                 0x881A
        RGB_FLOAT16_ATI                  0x881B
        ALPHA_FLOAT16_ATI                0x881C
        INTENSITY_FLOAT16_ATI            0x881D
        LUMINANCE_FLOAT16_ATI            0x881E
        LUMINANCE_ALPHA_FLOAT16_ATI      0x881F



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

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

      2.1.2  16 Bit Floating-Point

      A 16 bit floating-point number has 1 sign bit (s), 5 exponent
      bits (e), and 10 mantissa bits (m).  The value (v) of a 16 bit
      floating-point number is determined by the following pseudo code:

        if (e != 0)
            v = (-1)^s * 2^(e-15) * 1.m  # normalized
        else if (f == 0)
            v = (-1)^s * 0               # zero
        else
            v = (-1)^s * 2^(e-14) * 0.m  # denormalized

      It is acceptable for an implementation to treat denormalized 16 bit
      floating-point numbers as zero.

      There are no NAN or infinity values for 16 bit floating-point.


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

    Section 3.8.1, (p. 116), change the last sentence on the page to:

      Each R, G, B, and A value so generated is clamped based on the
      component type in the <internalFormat>.  Fixed-point components
      are clamped to [0, 1].  Floating-point components are clamped
      to the limits of the range representable by their format.  32
      bit floating- point components are in the standard IEEE float
      format.  16 bit floating-point components have 1 sign bit, 5
      exponent bits, and 10 mantissa bits.

    Section 3.8.1, (p. 119), add the following to table 3.16:

      Sized                       Base             R    G    B    A    L    I
      Internal Format             Internal Format bits bits bits bits bits bits
      --------------------------- --------------- ---- ---- ---- ---- ---- ----
      RGBA_FLOAT32_ATI            RGBA            f32  f32  f32  f32 
      RGB_FLOAT32_ATI             RGB             f32  f32  f32 
      ALPHA_FLOAT32_ATI           ALPHA                          f32
      INTENSITY_FLOAT32_ATI       INTENSITY                                f32
      LUMINANCE_FLOAT32_ATI       LUMINANCE                           f32
      LUMINANCE_ALPHA_FLOAT32_ATI LUMINANCE_ALPHA                f32  f32
      RGBA_FLOAT16_ATI            RGBA            f16  f16  f16  f16 
      RGB_FLOAT16_ATI             RGB             f16  f16  f16 
      ALPHA_FLOAT16_ATI           ALPHA                          f16
      INTENSITY_FLOAT16_ATI       INTENSITY                                f16
      LUMINANCE_FLOAT16_ATI       LUMINANCE                           f16
      LUMINANCE_ALPHA_FLOAT16_ATI LUMINANCE_ALPHA                f16  f16


Additions to Chapter 4 of the OpenGL 1.3 Specification (Per-Fragment
Operations and the Frame Buffer)

    None


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

    None


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

    None


Errors
  
    None


New State

    None


New Implementation Dependent State

    None


Revision History

   Date: 11/4/2006
   Revision: 5
      - Updated contact info after ATI/AMD merger.

   Date: 12/4/2002
   Revision: 4
      - Added Section 2.1.2 16 Bit Floating-Point.

   Date: 9/11/2002
   Revision: 3
      - Changed description of float clamping to be consistent with
        WGL_ATI_pixel_format_float.

   Date: 9/6/2002
   Revision: 2
      - Changed unsigned integer components to fixed-point components.
      - Resolved GL_FLOAT16_ATI issue.
      - Cleaned up typos.

   Date: 8/18/2002
   Revision: 1
      - First draft for circulation.
