blob: f161e195420927d42a296685715d545a99792d7f [file] [log] [blame]
Name
EXT_texture_format_sRGB_override
Name Strings
GL_EXT_texture_format_sRGB_override
Contributors
Jeff Leger, Qualcomm
Jonathan Wicks, Qualcomm
John Carmack, Oculus
Cass Everitt, Oculus
Graeme Leese, Broadcom
Daniel Koch, NVidia
Contact
Jeff Leger, Qualcomm (jleger 'at' qti.qualcomm.com)
Status
Complete.
Version
Last Modified Date: Feb 21, 2018
Revision: #1
Number
OpenGL ES Extension #299
Dependencies
OpenGL ES 3.0 or EXT_sRGB are required for OpenGL ES.
This extension is written against OpenGL ES 3.2.
EXT_texture_compression_s3tc interacts with this extension.
EXT_texture_sRGB_decode interacts with this extension.
EXT_texture_compression_bptc interacts with this extension.
GL_NV_sRGB_formats interacts with this extension.
EXT_texture_sRGB_R8 interacts with this extension.
EXT_texture_sRGB_RG8 interacts with this extension.
OES_EGL_image_external interacts with this extension.
This extension is written against the wording of the OpenGL ES 3.2 specification
(November 3, 2016).
Overview
This extension provides a new texture parameter to override the internal
format of a texture object; allowing a non-sRGB format to be overridden to
a corresponding sRGB format. For example, an RGB8 texture can be overridden
to SRGB8. Such an override will cause the RGB components to be "decoded" from
sRGB color space to linear as part of texture filtering. This can be useful for
applications where a texture was written with sRGB data using EXT_sRGB_write_control
or when sampling from an EGLImage that is known to contain sRGB color values.
IP Status
No known IP claims.
New Procedures and Functions
None.
New Tokens
Accepted by the <pname> parameter of
TexParameterf, TexParameterfv,
TexParameteri, TexParameteriv,
TexParameterIiv, TexParameterIuiv,
TexParameterIivEXT, TexParameterIuivEXT,
GetTexParameterfv, GetTexParameteriv,
GetTexParameterIiv, GetTexParameterIuiv,
GetTexParameterIivEXT, GetTexParameterIuivEXT:
TEXTURE_FORMAT_SRGB_OVERRIDE_EXT 0x8FBF
Changes to Section 8.19 (Texture State) of the OpenGL ES 3.2 Specification
Add to the end of the fifth paragraph describing texture properties, the
following sentence:
"In addition, each set includes the selected sRGB override setting."
Add to the end of the sixth paragraph describing initial texture state, the
following sentence:
"The value of TEXTURE_FORMAT_SRGB_OVERRIDE_EXT is NONE."
Changes to Table 8.19 (Texture parameters and their values):
Name | Type | Legal Values
------------------------------------------------------------
TEXTURE_FORMAT_SRGB_OVERRIDE_EXT | enum | SRGB,
NONE
Changes to Section 8.21 (sRGB Texture Color Conversion) of the OpenGL ES 3.2 Specification:
Add the following to the beginning of this section:
"If the currently bound texture's internal format is one of the non-sRGB formats
listed below, and if the texture has TEXTURE_FORMAT_SRGB_OVERRIDE_EXT
set to the value SRGB, then the effective internal format is overridden
to be the sRGB Override Format as listed below:
Internal Format sRGB Override Format
============================== ==============================
RGB8 SRGB8
RGBA8 SRGB8_ALPHA8
COMPRESSED_RGB8_ETC2 COMPRESSED_SRGB8_ETC2
COMPRESSED_RGBA8_ETC2_EAC COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
COMPRESSED_RGBA_ASTC_4x4 COMPRESSED_SRGB8_ALPHA8_ASTC_4x4
COMPRESSED_RGBA_ASTC_5x4 COMPRESSED_SRGB8_ALPHA8_ASTC_5x4
COMPRESSED_RGBA_ASTC_5x5 COMPRESSED_SRGB8_ALPHA8_ASTC_5x5
COMPRESSED_RGBA_ASTC_6x5 COMPRESSED_SRGB8_ALPHA8_ASTC_6x5
COMPRESSED_RGBA_ASTC_6x6 COMPRESSED_SRGB8_ALPHA8_ASTC_6x6
COMPRESSED_RGBA_ASTC_8x5 COMPRESSED_SRGB8_ALPHA8_ASTC_8x5
COMPRESSED_RGBA_ASTC_8x6 COMPRESSED_SRGB8_ALPHA8_ASTC_8x6
COMPRESSED_RGBA_ASTC_8x8 COMPRESSED_SRGB8_ALPHA8_ASTC_8x8
COMPRESSED_RGBA_ASTC_10x5 COMPRESSED_SRGB8_ALPHA8_ASTC_10x5
COMPRESSED_RGBA_ASTC_10x6 COMPRESSED_SRGB8_ALPHA8_ASTC_10x6
COMPRESSED_RGBA_ASTC_10x8 COMPRESSED_SRGB8_ALPHA8_ASTC_10x8
COMPRESSED_RGBA_ASTC_10x10 COMPRESSED_SRGB8_ALPHA8_ASTC_10x10
COMPRESSED_RGBA_ASTC_12x10 COMPRESSED_SRGB8_ALPHA8_ASTC_12x10
COMPRESSED_RGBA_ASTC_12x12 COMPRESSED_SRGB8_ALPHA8_ASTC_12x12
[[ The following additional formats apply if EXT_texture_compression_s3tc_srgb is supported.]]
COMPRESSED_RGB_S3TC_DXT1_EXT COMPRESSED_SRGB_S3TC_DXT1_EXT
COMPRESSED_RGBA_S3TC_DXT1_EXT COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT
COMPRESSED_RGBA_S3TC_DXT3_EXT COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT
COMPRESSED_RGBA_S3TC_DXT5_EXT COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT
[[ The following additional formats apply if EXT_texture_compression_s3tc_srgb is not supported,
but EXT_texture_compression_s3tc and GL_NV_sRGB_formats are supported.]]
COMPRESSED_RGB_S3TC_DXT1_EXT COMPRESSED_SRGB_S3TC_DXT1_NV
COMPRESSED_RGBA_S3TC_DXT1_EXT COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV
COMPRESSED_RGBA_S3TC_DXT3_EXT COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV
COMPRESSED_RGBA_S3TC_DXT5_EXT COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV
[[ The following additional format applies only if EXT_texture_sRGB_R8 is supported.]]
R8 SR8_EXT
[[ The following additional format applies only if EXT_texture_sRGB_RG8 is supported.]]
RG8 SRG8_EXT
[[ The following additional format applies if EXT_texture_compression_bptc is supported.]]
COMPRESSED_RGBA_BPTC_UNORM_EXT COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT
If the internal format is not one of the above formats, then
the value of TEXTURE_FORMAT_SRGB_OVERRIDE_EXT is ignored.
If the value of TEXTURE_FORMAT_SRGB_OVERRIDE_EXT is NONE, then
the internal format is not overridden.
If the internal format is overridden, the effect of the override is limited
to sRGB texture color conversion as described in this section. For example,
the override has no effect on per-fragment sRGB conversion described in section
15.1.6 when when the texture is attached as a renderbuffer or framebuffer.
It is invalid to modify the value of TEXTURE_FORMAT_SRGB_OVERRIDE_EXT
for a immutable-format texture.
[[ The following applies if OES_EGL_image_external is supported.]]
If the texture target is an EGLImage, then the internal format may be unknown
and not otherwise supported by OpenGL ES. It is up to the implementation to
determine whether specific EGLImage formats will support
TEXTURE_FORMAT_SRGB_OVERRIDE_EXT."
Errors
INVALID_ENUM is generated if the <pname> parameter of
TexParameter[i,f,Ii,Iui][v][EXT], TextureParameter[i,f,Ii,Iui][v]EXT
is TEXTURE_FORMAT_SRGB_OVERRIDE_EXT and the <param> parameter is not
SRGB or NONE.
INVALID_OPERATION is generated if the <pname> parameter of
TexParameter[i,f,Ii,Iui][v][EXT], TextureParameter[i,f,Ii,Iui][v]EXT
is TEXTURE_FORMAT_SRGB_OVERRIDE_EXT when TEXTURE_IMMUTABLE_FORMAT is TRUE.
New State
In table 21.10, Textures ((state per texture object), p. 454, add the following:
Get Value Type Get Command Initial Value Description Sec.
-------------------------------- ---- -------------------- ------------- ---------------- -----
TEXTURE_FORMAT_SRGB_OVERRIDE_EXT E GetTexParameter[if]v NONE Indicates the 8.21
sRBG internal
format override.
Issues
1) Why is this parameter only added to texture state and not sampler state?
RESOLVED: Hardware implementations typically treat sRGB handling as a
texture state and not a sampler state. Supporting this property for
sampler state adds driver overhead that implementors would prefer to
avoid.
2) What is the interaction of this extension with EXT_texture_sRGB_decode
RESOLVED: Both extensions can be used in combination. This extension
allows a non-sRGB format (e.g. RGB8) to be overridden so that it behaves
as an sRGB format (e.g. SRGB8), with the corresponding texture sRGB-decode
operation enabled by default. Using EXT_texture_sRGB_decode extension with
SKIP_DECODE_EXT value, it is possible to skip (disable) the decode operation.
Revision History
Rev. Date Author Changes
---- -------- -------- ----------------------------------------------
1 02/21/18 jleger Initial version.