blob: 6ef280e5d18d7b70806cfc26ffd01a5ccd2c1e7e [file] [log] [blame]
Name
QCOM_ycbcr_degamma
Name Strings
GL_QCOM_ycbcr_degamma
Contributors
Ashish Mathur
Tate Hornbeck
Contact
Ashish Mathur - asmathur 'at' qti.qualcomm.com
Status
Final
Version
Last Modified Date: May 17, 2024
Revision: #1
Number
OpenGL ES Extension #346
Dependencies
OpenGL ES 3.0 is required. This extension is written against OpenGL ES 3.2 specification.
Requires either EGL 1.5 or EGL 1.4 with EGL_KHR_image_base or EGL_KHR_image extensions.
This extension interacts with GL_EXT_YUV_target, GL_OES_EGL_image, GL_OES_EGL_image_external,
GL_OES_EGL_image_external_essl3, GL_EXT_EGL_image_storage, and GL_EXT_EGL_image_array.
Overview
The OpenGL ES extensions OES_EGL_image_external and EXT_EGL_image_storage provide a mechanism for creating
GL textures sharing storage with EGLImage objects which can encapsulate an external YCbCr buffer.
The YCbCr data is stored according to the colorspace standards like ITU BT.601, BT.709, or BT.2020,
and a transfer function like ITU OETF or sRGB EOTF, which translates the YCbCr data into non-linear space Y'CbCr.
When sampling a Y'CbCr texture containing texels encoded, the conversion back to linear RGB requires
conversion from non-linear RGB space to linear RGB space using an inverse transfer function.
This operation of applying the inverse transfer function is also called "degamma".
Currently, degamma operation is not executed as part of texture sampling, and instead
application's shader code is expected to perform it separately. This computation can be somewhat expensive in the shader.
This extension allows implementations to use "sRGB EOTF" inverse transform function defined in Khronos
data format 1.3 specification, for degamma operation. The degamma is performed during texture filtering,
allowing texture filtering to operate in a linear space. The extension provides this functionality by
selectively enabling degamma for both the luminance{Y} and/or chrominance {CbCr} components of any
8 bit YCbCr format.
This new functionality is layered on top of the OES_EGL_image_external and EXT_EGL_image_storage
extensions.
New Procedures and Functions
None
New Tokens
Accepted by the <pname> parameter of TexParameteri and TexGetParameteri:
TEXTURE_Y_DEGAMMA_QCOM 0x9710
TEXTURE_CBCR_DEGAMMA_QCOM 0x9711
Changes to 8.10 Texture Parameters
Add to Table 8.19 : Texture parameters and their values:
-------------------------------------------------------------
Name | Type | Legal Value
-------------------------------------------------------------
TEXTURE_Y_DEGAMMA_QCOM | Boolean | GL_TRUE, GL_FALSE
TEXTURE_CBCR_DEGAMMA_QCOM | Boolean | GL_TRUE, GL_FALSE
-------------------------------------------------------------
Additions to Chapter 8 of the OpenGL ES 3.2 Specification
(Textures and Samplers)
Add a new section "8.24 External Textures p.221" below section "8.23 Texture Image Loads and Stores p.215"
The wording will be the same as in extension "OES_EGL_image_external".
Add a new section "8.24.1 Degamma - sRGB transfer function" inside the section "8.24 External Textures".
Add the following paragraph to section 8.24.1 p.221 (Degamma - sRGB transfer function)
If texture parameter TEXTURE_Y_DEGAMMA_QCOM is set to GL_TRUE then non-linear to linear conversion is
applied to the R component before the color conversion to linear RGB space.
If texture parameter TEXTURE_CBCR_DEGAMMA_QCOM is set to GL_TRUE then non-linear to linear conversion is
applied to the G and B component before the color conversion to linear RGB space.
Alpha component, if present, remains unchanged.
Thus, clients must set both the parameters to TRUE to have sRGB transfer function applied to all components
of non-linear RGB space.
If either texture parameter TEXTURE_Y_DEGAMMA_QCOM or TEXTURE_CBCR_DEGAMMA_QCOM is set to GL_FALSE (also the default value),
the corresponding color component(s) remain in non-linear space.
Errors
A GL_INVALID_OPERATION will be returned at draw time if either of the parameters, TEXTURE_Y_DEGAMMA_QCOM or
TEXTURE_CBCR_DEGAMMA_QCOM, is set to GL_TRUE for 10-bit depth YCbCr formats textures.
Issues
1) Which Y′CBCR formats support the degamma feature?
RESOLVED: For implementations that support the extension, each format that contains 8-bit R, G, and B components.
2) Why apply sRGB transfer function instead of ITU transfer function ?
RESOLVED: Y′CBCR is frequently stored according to standards (e.g. BT.601 and BT.709) that specify that the the
conversion between linear and non-linear should use the ITU Transfer function.
The ITU transfer function is mathematically different from the sRGB transfer function and while sRGB
and ITU define similar curves, the difference is significant. Nonetheless, if the
difference is acceptable, use of sRGB degamma via this extension can siginifciantly improve the performance.
On the other hand using sRGB can make sense for certain use-cases where camera YCbCr images are known to be
in the sRGB space and known to use full-range encoding.
For those use-cases, this extension leverages the GPU ability to enable sRGB degamma at little cost,
and can improve quality because texture filtering is able to occur in linear space.
Revision History:
Revision: 1 2024-05-17 (asmathur)