| Name |
| |
| OES_texture_half_float |
| OES_texture_float |
| |
| Name Strings |
| |
| GL_OES_texture_half_float, GL_OES_texture_float |
| |
| Contact |
| |
| Benj Lipchak, Apple (lipchak 'at' apple.com) |
| |
| Notice |
| |
| Copyright (c) 2005-2013 The Khronos Group Inc. Copyright terms at |
| http://www.khronos.org/registry/speccopyright.html |
| |
| Specification Update Policy |
| |
| Khronos-approved extension specifications are updated in response to |
| issues and bugs prioritized by the Khronos OpenGL ES Working Group. For |
| extensions which have been promoted to a core Specification, fixes will |
| first appear in the latest version of that core Specification, and will |
| eventually be backported to the extension document. This policy is |
| described in more detail at |
| https://www.khronos.org/registry/OpenGL/docs/update_policy.php |
| |
| IP Status |
| |
| Please refer to the ARB_texture_float extension. |
| |
| Status |
| |
| Ratified by the Khronos BOP, July 22, 2005. |
| |
| Version |
| |
| Last Modified Date: November 9, 2011 |
| |
| Number |
| |
| OpenGL ES Extension #36 |
| |
| Dependencies |
| |
| This extension is written against the OpenGL ES 2.0 Specification. |
| |
| OES_texture_3D affects the definition of this extension. |
| |
| Overview |
| |
| These extensions add texture formats with 16- (aka half float) and 32-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. |
| |
| The OES_texture_half_float extension string indicates that the |
| implementation supports 16-bit floating pt texture formats. |
| |
| The OES_texture_float extension string indicates that the |
| implementation supports 32-bit floating pt texture formats. |
| |
| Both these extensions only require NEAREST magnification filter and |
| NEAREST, and NEAREST_MIPMAP_NEAREST minification filters to be supported. |
| |
| Issues |
| |
| 1. What should we do if magnification filter for a texture with half-float |
| or float channels is set to LINEAR. |
| |
| RESOLUTION: The texture will be marked as incomplete. |
| Only the NEAREST filter is supported. |
| |
| The cost of doing a LINEAR filter for these texture formats can be |
| quite prohibitive. There was a discussion on having the shader |
| generate code to do LINEAR filter by making individual texture calls with a |
| NEAREST filter but again the computational and memory b/w costs decided |
| against mandating this approach. The decision was that this extension |
| would only enable NEAREST magnification filter. Support for LINEAR |
| magnification filter would be done through a separate extension. |
| |
| 2. What should we do if minification filter is set to LINEAR or |
| LINEAR_MIPMAP_NEAREST, NEAREST_MIPMAP_LINEAR and LINEAR_MIPMAP_LINEAR. |
| |
| RESOLUTION: The texture will be marked as incomplete. Only the NEAREST |
| and NEAREST_MIPMAP_NEAREST minification filters are supported. |
| |
| This was decided for the same reasons given in issue #1. The decision |
| was that this extension would only enable NEAREST and NEAREST_MIPMAP_NEAREST |
| minification filters, and the remaining OpenGL ES minification filters |
| would be supported through a separate extension. |
| |
| 3. Should CopyTexImage2D, CopyTexSubImage{2D|3D} be supported for textures |
| with half-float and float channels? |
| |
| RESOLUTION: No. |
| |
| New Procedures and Functions |
| |
| None |
| |
| New Tokens |
| |
| Accepted by the <type> parameter of TexImage2D, TexSubImage2D, |
| TexImage3D, and TexSubImage3D |
| |
| HALF_FLOAT_OES 0x8D61 |
| FLOAT 0x1406 |
| |
| Additions to Chapter 2 of the OpenGL ES 2.0 Specification (OpenGL Operation) |
| |
| Add a new section called 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." |
| |
| Add to Table 2.2, p. 12: |
| |
| Minimum |
| GL Type Bit Width Description |
| ------- --------- ----------------------------------- |
| half 16 Half-precision floating-point value |
| encoded in an unsigned scalar |
| |
| Additions to Chapter 3 of the OpenGL ES 2.0 Specification (Rasterization) |
| |
| Add to Table 3.2, p. 62: |
| |
| type Parameter Corresponding Special |
| Token Name GL Data Type Interpretation |
| -------------- ------------- -------------- |
| HALF_FLOAT_OES half No |
| |
| Modify first sentence of "Unpacking", p. 62: |
| |
| "Data are taken from client memory as a sequence of one of the GL data |
| types listed in Table 3.2. These elements are..." |
| |
| Add to Table 3.4, p. 63: |
| |
| Format Type Bytes per Pixel |
| --------- -------------- --------------- |
| RGBA FLOAT 16 |
| RGB FLOAT 12 |
| LUMINANCE_ALPHA FLOAT 8 |
| LUMINANCE FLOAT 4 |
| ALPHA FLOAT 4 |
| RGBA HALF_FLOAT_OES 8 |
| RGB HALF_FLOAT_OES 6 |
| LUMINANCE_ALPHA HALF_FLOAT_OES 4 |
| LUMINANCE HALF_FLOAT_OES 2 |
| ALPHA HALF_FLOAT_OES 2 |
| |
| Modify fifth paragraph of 3.7.1 Texture Image Specification, p. 67: |
| |
| "The selected groups are processed as described in section 3.6.2, stopping |
| after final expansion to RGBA. If the internal format of the texture is |
| fixed-point, components are clamped to [0,1]. Otherwise, values are not |
| modified." |
| |
| Interactions with OES_texture_3D |
| |
| If OES_texture_3D is not supported, ignore references to TexImage3D and |
| TexSubImage3D. |
| |
| Revision History |
| |
| 04/29/2005 0.1 Original draft. |
| 06/29/2005 0.2 Added issues on why only NEAREST and |
| NEAREST_MIPMAP_NEAREST filters are required. |
| 04/21/2006 0.3 Added TexSubImage2D and TexSubImage3D as |
| functions that take the new tokens. |
| 06/14/2006 0.4 CopyTexImage2D, CopyTexSubImag{2D|3D} are |
| not supported. |
| 07/26/2011 0.5 Fix several omissions discovered while writing |
| EXT_color_buffer_half_float. |
| 11/09/2011 0.6 Fix missing FLOAT entries in Table 3.4, |
| add interaction with OES_texture_3D. |