blob: 665f7bf887b3a6d54a8bfe8931bc450eb5fc67b5 [file] [log] [blame]
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.