diff options
author | 2023-04-20 10:23:22 +0100 | |
---|---|---|
committer | 2023-04-20 15:48:45 +0000 | |
commit | 9f746f631d3608cabbc749bd06dcccf4e6949126 (patch) | |
tree | 96bed927dfe61e0c6a8dc0404f30bcbdc3877a69 | |
parent | 8e521bbbfe86abb0ab6191f3ccbf6aa448a4c0e1 (diff) |
Add support for EGL_EXT_gl_colorspace_bt2020_hlg to libEGL
This implements EGL_EXT_gl_colorspace_bt2020_hlg in terms of HAL
data formats such that applications can create HLG encoded surfaces. As
per the spec, applications need to ensure correct HLG encoding, which
made it possible to implement this extension without involving the
driver.
The change includes a manual update of eglext.h because the spec
is not yet ready.
https://github.com/KhronosGroup/EGL-Registry/pull/177
Test: Manually ran tests implemented in dEQP in a separate change
https://gerrit.khronos.org/c/vk-gl-cts/+/11608
Bug: 277210442
Change-Id: I3e011a786930d978fbc0d86aad29d25e4cdcc148
(cherry picked from commit 82396e8990bdffde91b9249a4edbeb03b3e73819)
Merged-In: I3e011a786930d978fbc0d86aad29d25e4cdcc148
-rw-r--r-- | opengl/include/EGL/eglext.h | 5 | ||||
-rw-r--r-- | opengl/libs/EGL/egl_display.cpp | 5 | ||||
-rw-r--r-- | opengl/libs/EGL/egl_platform_entries.cpp | 9 |
3 files changed, 16 insertions, 3 deletions
diff --git a/opengl/include/EGL/eglext.h b/opengl/include/EGL/eglext.h index 501bf58531..32c21f61b9 100644 --- a/opengl/include/EGL/eglext.h +++ b/opengl/include/EGL/eglext.h @@ -697,6 +697,11 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribEXT (EGLDisplay dpy, EGLint a #define EGL_EXT_device_query 1 #endif /* EGL_EXT_device_query */ +#ifndef EGL_EXT_gl_colorspace_bt2020_hlg +#define EGL_EXT_gl_colorspace_bt2020_hlg 1 +#define EGL_GL_COLORSPACE_BT2020_HLG_EXT 0x333E +#endif /* EGL_EXT_gl_colorspace_bt2020_hlg */ + #ifndef EGL_EXT_gl_colorspace_bt2020_linear #define EGL_EXT_gl_colorspace_bt2020_linear 1 #define EGL_GL_COLORSPACE_BT2020_LINEAR_EXT 0x333F diff --git a/opengl/libs/EGL/egl_display.cpp b/opengl/libs/EGL/egl_display.cpp index c2c856e22a..9823fc839e 100644 --- a/opengl/libs/EGL/egl_display.cpp +++ b/opengl/libs/EGL/egl_display.cpp @@ -353,8 +353,9 @@ EGLBoolean egl_display_t::initialize(EGLint* major, EGLint* minor) { // Typically that means there is an HDR capable display attached, but could be // support for attaching an HDR display. In either case, advertise support for // HDR color spaces. - mExtensionString.append( - "EGL_EXT_gl_colorspace_bt2020_linear EGL_EXT_gl_colorspace_bt2020_pq "); + mExtensionString.append("EGL_EXT_gl_colorspace_bt2020_hlg " + "EGL_EXT_gl_colorspace_bt2020_linear " + "EGL_EXT_gl_colorspace_bt2020_pq "); } char const* start = gExtensionString; diff --git a/opengl/libs/EGL/egl_platform_entries.cpp b/opengl/libs/EGL/egl_platform_entries.cpp index 2bca14d2f9..48718bb78a 100644 --- a/opengl/libs/EGL/egl_platform_entries.cpp +++ b/opengl/libs/EGL/egl_platform_entries.cpp @@ -18,6 +18,7 @@ #include "egl_platform_entries.h" +#include <aidl/android/hardware/graphics/common/PixelFormat.h> #include <android-base/properties.h> #include <android-base/strings.h> #include <android/hardware_buffer.h> @@ -29,7 +30,6 @@ #include <private/android/AHardwareBufferHelpers.h> #include <stdlib.h> #include <string.h> -#include <aidl/android/hardware/graphics/common/PixelFormat.h> #include <condition_variable> #include <deque> @@ -421,11 +421,14 @@ static android_dataspace dataSpaceFromEGLColorSpace(EGLint colorspace) { return HAL_DATASPACE_V0_SCRGB; } else if (colorspace == EGL_GL_COLORSPACE_SCRGB_LINEAR_EXT) { return HAL_DATASPACE_V0_SCRGB_LINEAR; + } else if (colorspace == EGL_GL_COLORSPACE_BT2020_HLG_EXT) { + return static_cast<android_dataspace>(HAL_DATASPACE_BT2020_HLG); } else if (colorspace == EGL_GL_COLORSPACE_BT2020_LINEAR_EXT) { return HAL_DATASPACE_BT2020_LINEAR; } else if (colorspace == EGL_GL_COLORSPACE_BT2020_PQ_EXT) { return HAL_DATASPACE_BT2020_PQ; } + return HAL_DATASPACE_UNKNOWN; } @@ -452,6 +455,9 @@ static std::vector<EGLint> getDriverColorSpaces(egl_display_t* dp) { if (findExtension(dp->disp.queryString.extensions, "EGL_EXT_gl_colorspace_scrgb_linear")) { colorSpaces.push_back(EGL_GL_COLORSPACE_SCRGB_LINEAR_EXT); } + if (findExtension(dp->disp.queryString.extensions, "EGL_EXT_gl_colorspace_bt2020_hlg")) { + colorSpaces.push_back(EGL_GL_COLORSPACE_BT2020_HLG_EXT); + } if (findExtension(dp->disp.queryString.extensions, "EGL_EXT_gl_colorspace_bt2020_linear")) { colorSpaces.push_back(EGL_GL_COLORSPACE_BT2020_LINEAR_EXT); } @@ -485,6 +491,7 @@ static EGLBoolean processAttributes(egl_display_t* dp, ANativeWindow* window, case EGL_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH_EXT: case EGL_GL_COLORSPACE_SCRGB_LINEAR_EXT: case EGL_GL_COLORSPACE_SCRGB_EXT: + case EGL_GL_COLORSPACE_BT2020_HLG_EXT: case EGL_GL_COLORSPACE_BT2020_LINEAR_EXT: case EGL_GL_COLORSPACE_BT2020_PQ_EXT: case EGL_GL_COLORSPACE_DISPLAY_P3_LINEAR_EXT: |