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

Commit 1ce442f9 authored by Sally Qi's avatar Sally Qi Committed by Automerger Merge Worker
Browse files

Merge "Fix bt2020 linear ext mapping issue in EGL and Vulkan." into main am: d6bfad2e

parents 14019d4c d6bfad2e
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) {
@@ -422,7 +423,13 @@ static android_dataspace dataSpaceFromEGLColorSpace(EGLint colorspace) {
    } else if (colorspace == EGL_GL_COLORSPACE_SCRGB_LINEAR_EXT) {
        return HAL_DATASPACE_V0_SCRGB_LINEAR;
    } 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;
    }
@@ -566,8 +573,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) {
@@ -707,7 +712,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
@@ -518,7 +518,8 @@ PixelFormat GetNativePixelFormat(VkFormat format) {
    return native_format;
}

android_dataspace GetNativeDataspace(VkColorSpaceKHR colorspace) {
android_dataspace GetNativeDataspace(VkColorSpaceKHR colorspace,
                                     PixelFormat pixelFormat) {
    switch (colorspace) {
        case VK_COLOR_SPACE_SRGB_NONLINEAR_KHR:
            return HAL_DATASPACE_V0_SRGB;
@@ -537,7 +538,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 == 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;
            }
        case VK_COLOR_SPACE_HDR10_ST2084_EXT:
            return static_cast<android_dataspace>(
                HAL_DATASPACE_STANDARD_BT2020 | HAL_DATASPACE_TRANSFER_ST2084 |
@@ -547,9 +555,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 |
@@ -1259,7 +1265,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
    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) "