Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b12c31ea authored by Sally Qi's avatar Sally Qi Committed by Android (Google) Code Review
Browse files

Merge "Fix bt2020 linear ext mapping issue in EGL and Vulkan." into udc-qpr-dev

parents 639f5cb5 8eb16576
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@
#include "egl_trace.h"

using namespace android;
using PixelFormat = aidl::android::hardware::graphics::common::PixelFormat;

// ----------------------------------------------------------------------------

@@ -406,7 +407,7 @@ EGLBoolean eglGetConfigAttribImpl(EGLDisplay dpy, EGLConfig config, EGLint attri
// ----------------------------------------------------------------------------

// Translates EGL color spaces to Android data spaces.
static android_dataspace dataSpaceFromEGLColorSpace(EGLint colorspace) {
static android_dataspace dataSpaceFromEGLColorSpace(EGLint colorspace, PixelFormat pixelFormat) {
    if (colorspace == EGL_GL_COLORSPACE_LINEAR_KHR) {
        return HAL_DATASPACE_UNKNOWN;
    } else if (colorspace == EGL_GL_COLORSPACE_SRGB_KHR) {
@@ -424,7 +425,13 @@ static android_dataspace dataSpaceFromEGLColorSpace(EGLint colorspace) {
    } 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) {
        if (pixelFormat == PixelFormat::RGBA_FP16) {
            return static_cast<android_dataspace>(HAL_DATASPACE_STANDARD_BT2020 |
                                                  HAL_DATASPACE_TRANSFER_LINEAR |
                                                  HAL_DATASPACE_RANGE_EXTENDED);
        } else {
            return HAL_DATASPACE_BT2020_LINEAR;
        }
    } else if (colorspace == EGL_GL_COLORSPACE_BT2020_PQ_EXT) {
        return HAL_DATASPACE_BT2020_PQ;
    }
@@ -573,8 +580,6 @@ void convertAttribs(const EGLAttrib* attribList, std::vector<EGLint>& newList) {
    newList.push_back(EGL_NONE);
}

using PixelFormat = aidl::android::hardware::graphics::common::PixelFormat;

// Gets the native pixel format corrsponding to the passed EGLConfig.
void getNativePixelFormat(EGLDisplay dpy, egl_connection_t* cnx, EGLConfig config,
                          PixelFormat* format) {
@@ -714,7 +719,7 @@ EGLSurface eglCreateWindowSurfaceTmpl(egl_display_t* dp, egl_connection_t* cnx,
            return setError(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE);
        }

        android_dataspace dataSpace = dataSpaceFromEGLColorSpace(colorSpace);
        android_dataspace dataSpace = dataSpaceFromEGLColorSpace(colorSpace, format);
        // Set dataSpace even if it could be HAL_DATASPACE_UNKNOWN.
        // HAL_DATASPACE_UNKNOWN is the default value, but it may have changed
        // at this point.
+12 −6
Original line number Diff line number Diff line
@@ -532,7 +532,8 @@ android::PixelFormat GetNativePixelFormat(VkFormat format) {
    return native_format;
}

android_dataspace GetNativeDataspace(VkColorSpaceKHR colorspace) {
android_dataspace GetNativeDataspace(VkColorSpaceKHR colorspace,
                                     android::PixelFormat pixelFormat) {
    switch (colorspace) {
        case VK_COLOR_SPACE_SRGB_NONLINEAR_KHR:
            return HAL_DATASPACE_V0_SRGB;
@@ -551,7 +552,14 @@ android_dataspace GetNativeDataspace(VkColorSpaceKHR colorspace) {
        case VK_COLOR_SPACE_BT709_NONLINEAR_EXT:
            return HAL_DATASPACE_V0_SRGB;
        case VK_COLOR_SPACE_BT2020_LINEAR_EXT:
            if (pixelFormat == HAL_PIXEL_FORMAT_RGBA_FP16) {
                return static_cast<android_dataspace>(
                    HAL_DATASPACE_STANDARD_BT2020 |
                    HAL_DATASPACE_TRANSFER_LINEAR |
                    HAL_DATASPACE_RANGE_EXTENDED);
            } else {
                return HAL_DATASPACE_BT2020_LINEAR;
            }
        case VK_COLOR_SPACE_HDR10_ST2084_EXT:
            return static_cast<android_dataspace>(
                HAL_DATASPACE_STANDARD_BT2020 | HAL_DATASPACE_TRANSFER_ST2084 |
@@ -561,9 +569,7 @@ android_dataspace GetNativeDataspace(VkColorSpaceKHR colorspace) {
                HAL_DATASPACE_STANDARD_BT2020 | HAL_DATASPACE_TRANSFER_ST2084 |
                HAL_DATASPACE_RANGE_FULL);
        case VK_COLOR_SPACE_HDR10_HLG_EXT:
            return static_cast<android_dataspace>(
                HAL_DATASPACE_STANDARD_BT2020 | HAL_DATASPACE_TRANSFER_HLG |
                HAL_DATASPACE_RANGE_FULL);
            return static_cast<android_dataspace>(HAL_DATASPACE_BT2020_HLG);
        case VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT:
            return static_cast<android_dataspace>(
                HAL_DATASPACE_STANDARD_ADOBE_RGB |
@@ -1364,7 +1370,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
    android::PixelFormat native_pixel_format =
        GetNativePixelFormat(create_info->imageFormat);
    android_dataspace native_dataspace =
        GetNativeDataspace(create_info->imageColorSpace);
        GetNativeDataspace(create_info->imageColorSpace, native_pixel_format);
    if (native_dataspace == HAL_DATASPACE_UNKNOWN) {
        ALOGE(
            "CreateSwapchainKHR(VkSwapchainCreateInfoKHR.imageColorSpace = %d) "