Add HDR dataspaces to EGL
bug: 63710530
Test: adb shell /data/nativetest/EGL_test/EGL_test
Test: adb -d shell am start -n \
com.drawelements.deqp/android.app.NativeActivity \
-e cmdLine '"deqp --deqp-case=dEQP-EGL.functional.hdr_color.* \
--deqp-log-filename=/sdcard/dEQP-Log.qpa"'
Change-Id: I52c43539806c901c674f037489d502d771080a30
diff --git a/opengl/libs/EGL/egl_object.cpp b/opengl/libs/EGL/egl_object.cpp
index 72b4823..13b94b6 100644
--- a/opengl/libs/EGL/egl_object.cpp
+++ b/opengl/libs/EGL/egl_object.cpp
@@ -63,7 +63,9 @@
win(win),
cnx(cnx),
connected(true),
- colorSpace(colorSpace) {
+ colorSpace(colorSpace),
+ smpte2086_metadata({}),
+ cta861_3_metadata({}) {
if (win) {
win->incStrong(this);
}
@@ -86,6 +88,123 @@
}
}
+EGLBoolean egl_surface_t::setSmpte2086Attribute(EGLint attribute, EGLint value) {
+ switch (attribute) {
+ break;
+ case EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT:
+ smpte2086_metadata.displayPrimaryRed.x = value;
+ return EGL_TRUE;
+ case EGL_SMPTE2086_DISPLAY_PRIMARY_RY_EXT:
+ smpte2086_metadata.displayPrimaryRed.y = value;
+ return EGL_TRUE;
+ case EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT:
+ smpte2086_metadata.displayPrimaryGreen.x = value;
+ return EGL_TRUE;
+ case EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT:
+ smpte2086_metadata.displayPrimaryGreen.y = value;
+ return EGL_TRUE;
+ case EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT:
+ smpte2086_metadata.displayPrimaryBlue.x = value;
+ return EGL_TRUE;
+ case EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT:
+ smpte2086_metadata.displayPrimaryBlue.y = value;
+ return EGL_TRUE;
+ case EGL_SMPTE2086_WHITE_POINT_X_EXT:
+ smpte2086_metadata.whitePoint.x = value;
+ return EGL_TRUE;
+ case EGL_SMPTE2086_WHITE_POINT_Y_EXT:
+ smpte2086_metadata.whitePoint.y = value;
+ return EGL_TRUE;
+ case EGL_SMPTE2086_MAX_LUMINANCE_EXT:
+ smpte2086_metadata.maxLuminance = value;
+ return EGL_TRUE;
+ case EGL_SMPTE2086_MIN_LUMINANCE_EXT:
+ smpte2086_metadata.minLuminance = value;
+ return EGL_TRUE;
+ }
+ return EGL_FALSE;
+}
+
+EGLBoolean egl_surface_t::setCta8613Attribute(EGLint attribute, EGLint value) {
+ switch (attribute) {
+ case EGL_CTA861_3_MAX_CONTENT_LIGHT_LEVEL_EXT:
+ cta861_3_metadata.maxContentLightLevel = value;
+ return EGL_TRUE;
+ case EGL_CTA861_3_MAX_FRAME_AVERAGE_LEVEL_EXT:
+ cta861_3_metadata.maxFrameAverageLightLevel = value;
+ return EGL_TRUE;
+ }
+ return EGL_FALSE;
+}
+
+EGLBoolean egl_surface_t::getColorSpaceAttribute(EGLint attribute, EGLint* value) const {
+ if (attribute == EGL_GL_COLORSPACE_KHR) {
+ *value = colorSpace;
+ return EGL_TRUE;
+ }
+ return EGL_FALSE;
+}
+
+EGLBoolean egl_surface_t::getSmpte2086Attribute(EGLint attribute, EGLint *value) const {
+ switch (attribute) {
+ case EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT:
+ *value = *reinterpret_cast<const int*>(&smpte2086_metadata.displayPrimaryRed.x);
+ return EGL_TRUE;
+ break;
+ case EGL_SMPTE2086_DISPLAY_PRIMARY_RY_EXT:
+ *value = *reinterpret_cast<const int*>(&smpte2086_metadata.displayPrimaryRed.y);
+ return EGL_TRUE;
+ break;
+ case EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT:
+ *value = *reinterpret_cast<const int*>(&smpte2086_metadata.displayPrimaryGreen.x);
+ return EGL_TRUE;
+ break;
+ case EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT:
+ *value = *reinterpret_cast<const int*>(&smpte2086_metadata.displayPrimaryGreen.y);
+ return EGL_TRUE;
+ break;
+ case EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT:
+ *value = *reinterpret_cast<const int*>(&smpte2086_metadata.displayPrimaryBlue.x);
+ return EGL_TRUE;
+ break;
+ case EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT:
+ *value = *reinterpret_cast<const int*>(&smpte2086_metadata.displayPrimaryBlue.y);
+ return EGL_TRUE;
+ break;
+ case EGL_SMPTE2086_WHITE_POINT_X_EXT:
+ *value = *reinterpret_cast<const int*>(&smpte2086_metadata.whitePoint.x);
+ return EGL_TRUE;
+ break;
+ case EGL_SMPTE2086_WHITE_POINT_Y_EXT:
+ *value = *reinterpret_cast<const int*>(&smpte2086_metadata.whitePoint.y);
+ return EGL_TRUE;
+ break;
+ case EGL_SMPTE2086_MAX_LUMINANCE_EXT:
+ *value = *reinterpret_cast<const int*>(&smpte2086_metadata.maxLuminance);
+ return EGL_TRUE;
+ break;
+ case EGL_SMPTE2086_MIN_LUMINANCE_EXT:
+ *value = *reinterpret_cast<const int*>(&smpte2086_metadata.minLuminance);
+ return EGL_TRUE;
+ break;
+ }
+ return EGL_FALSE;
+}
+
+EGLBoolean egl_surface_t::getCta8613Attribute(EGLint attribute, EGLint *value) const {
+ switch (attribute) {
+ case EGL_CTA861_3_MAX_CONTENT_LIGHT_LEVEL_EXT:
+ *value = *reinterpret_cast<const int*>(&cta861_3_metadata.maxContentLightLevel);
+ return EGL_TRUE;
+ break;
+ case EGL_CTA861_3_MAX_FRAME_AVERAGE_LEVEL_EXT:
+ *value = *reinterpret_cast<const int*>(&cta861_3_metadata.maxFrameAverageLightLevel);
+ return EGL_TRUE;
+ break;
+ }
+ return EGL_FALSE;
+}
+
void egl_surface_t::terminate() {
disconnect();
egl_object_t::terminate();