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 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)