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

Commit 9cfe1ed5 authored by Trevor David Black's avatar Trevor David Black
Browse files

The ahb changes necessary for

- AHARDWAREBUFFER_FORMAT_R16_UINT
- AHARDWAREBUFFER_FORMAT_R16G16_UINT
- AHARDWAREBUFFER_FORMAT_R10G10B10A10_UNORM

Bug: 233033456
Test: Build
Change-Id: Id56fd83b033c899c40648ef64bcfd65aedc5cd24
parent a9e28de9
Loading
Loading
Loading
Loading
+15 −0
Original line number Original line Diff line number Diff line
@@ -617,15 +617,27 @@ bool AHardwareBuffer_isValidPixelFormat(uint32_t format) {
    static_assert(static_cast<int>(aidl::android::hardware::graphics::common::PixelFormat::R_8) ==
    static_assert(static_cast<int>(aidl::android::hardware::graphics::common::PixelFormat::R_8) ==
                          AHARDWAREBUFFER_FORMAT_R8_UNORM,
                          AHARDWAREBUFFER_FORMAT_R8_UNORM,
            "HAL and AHardwareBuffer pixel format don't match");
            "HAL and AHardwareBuffer pixel format don't match");
    static_assert(static_cast<int>(aidl::android::hardware::graphics::common::PixelFormat::R_16_UINT) ==
                          AHARDWAREBUFFER_FORMAT_R16_UINT,
            "HAL and AHardwareBuffer pixel format don't match");
    static_assert(static_cast<int>(aidl::android::hardware::graphics::common::PixelFormat::RG_1616_UINT) ==
                          AHARDWAREBUFFER_FORMAT_R16G16_UINT,
            "HAL and AHardwareBuffer pixel format don't match");
    static_assert(static_cast<int>(aidl::android::hardware::graphics::common::PixelFormat::RGBA_10101010) ==
                          AHARDWAREBUFFER_FORMAT_R10G10B10A10_UNORM,
            "HAL and AHardwareBuffer pixel format don't match");


    switch (format) {
    switch (format) {
        case AHARDWAREBUFFER_FORMAT_R8_UNORM:
        case AHARDWAREBUFFER_FORMAT_R8_UNORM:
        case AHARDWAREBUFFER_FORMAT_R16_UINT:
        case AHARDWAREBUFFER_FORMAT_R16G16_UINT:
        case AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM:
        case AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM:
        case AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM:
        case AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM:
        case AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM:
        case AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM:
        case AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM:
        case AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM:
        case AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT:
        case AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT:
        case AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM:
        case AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM:
        case AHARDWAREBUFFER_FORMAT_R10G10B10A10_UNORM:
        case AHARDWAREBUFFER_FORMAT_BLOB:
        case AHARDWAREBUFFER_FORMAT_BLOB:
        case AHARDWAREBUFFER_FORMAT_D16_UNORM:
        case AHARDWAREBUFFER_FORMAT_D16_UNORM:
        case AHARDWAREBUFFER_FORMAT_D24_UNORM:
        case AHARDWAREBUFFER_FORMAT_D24_UNORM:
@@ -677,6 +689,7 @@ uint32_t AHardwareBuffer_bytesPerPixel(uint32_t format) {
          return 1;
          return 1;
      case AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM:
      case AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM:
      case AHARDWAREBUFFER_FORMAT_D16_UNORM:
      case AHARDWAREBUFFER_FORMAT_D16_UNORM:
      case AHARDWAREBUFFER_FORMAT_R16_UINT:
          return 2;
          return 2;
      case AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM:
      case AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM:
      case AHARDWAREBUFFER_FORMAT_D24_UNORM:
      case AHARDWAREBUFFER_FORMAT_D24_UNORM:
@@ -686,8 +699,10 @@ uint32_t AHardwareBuffer_bytesPerPixel(uint32_t format) {
      case AHARDWAREBUFFER_FORMAT_D32_FLOAT:
      case AHARDWAREBUFFER_FORMAT_D32_FLOAT:
      case AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM:
      case AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM:
      case AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT:
      case AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT:
      case AHARDWAREBUFFER_FORMAT_R16G16_UINT:
          return 4;
          return 4;
      case AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT:
      case AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT:
      case AHARDWAREBUFFER_FORMAT_R10G10B10A10_UNORM:
          return 8;
          return 8;
      default:
      default:
          return 0;
          return 0;
+21 −0
Original line number Original line Diff line number Diff line
@@ -173,6 +173,27 @@ enum AHardwareBuffer_Format {
     *   OpenGL ES: GR_GL_R8
     *   OpenGL ES: GR_GL_R8
     */
     */
    AHARDWAREBUFFER_FORMAT_R8_UNORM                 = 0x38,
    AHARDWAREBUFFER_FORMAT_R8_UNORM                 = 0x38,

    /**
     * Corresponding formats:
     *   Vulkan: VK_FORMAT_R16_UINT
     *   OpenGL ES: GR_GL_R16UI
     */
    AHARDWAREBUFFER_FORMAT_R16_UINT                 = 0x39,

    /**
     * Corresponding formats:
     *   Vulkan: VK_FORMAT_R16G16_UINT
     *   OpenGL ES: GR_GL_RG16UI
     */
    AHARDWAREBUFFER_FORMAT_R16G16_UINT              = 0x3a,

    /**
     * Corresponding formats:
     *   Vulkan: VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16
     *   OpenGL ES: N/A
     */
    AHARDWAREBUFFER_FORMAT_R10G10B10A10_UNORM       = 0x3b,
};
};


/**
/**
+13 −10
Original line number Original line Diff line number Diff line
@@ -63,6 +63,9 @@ enum {
    PIXEL_FORMAT_RGBA_FP16     = HAL_PIXEL_FORMAT_RGBA_FP16,    // 64-bit RGBA
    PIXEL_FORMAT_RGBA_FP16     = HAL_PIXEL_FORMAT_RGBA_FP16,    // 64-bit RGBA
    PIXEL_FORMAT_RGBA_1010102  = HAL_PIXEL_FORMAT_RGBA_1010102, // 32-bit RGBA
    PIXEL_FORMAT_RGBA_1010102  = HAL_PIXEL_FORMAT_RGBA_1010102, // 32-bit RGBA
    PIXEL_FORMAT_R_8           = 0x38,
    PIXEL_FORMAT_R_8           = 0x38,
    PIXEL_FORMAT_R_16_UINT     = 0x39,
    PIXEL_FORMAT_RG_1616_UINT  = 0x3a,
    PIXEL_FORMAT_RGBA_10101010 = 0x3b,
};
};


typedef int32_t PixelFormat;
typedef int32_t PixelFormat;
+20 −0
Original line number Original line Diff line number Diff line
@@ -508,6 +508,10 @@ android::PixelFormat GetNativePixelFormat(VkFormat format) {
        case VK_FORMAT_R8_UNORM:
        case VK_FORMAT_R8_UNORM:
            native_format = android::PIXEL_FORMAT_R_8;
            native_format = android::PIXEL_FORMAT_R_8;
            break;
            break;
        // TODO: Do we need to query for VK_EXT_rgba10x6_formats here?
        case VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:
            native_format = android::PIXEL_FORMAT_RGBA_10101010;
            break;
        default:
        default:
            ALOGV("unsupported swapchain format %d", format);
            ALOGV("unsupported swapchain format %d", format);
            break;
            break;
@@ -855,6 +859,22 @@ VkResult GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice pdev,
        }
        }
    }
    }


    // TODO query VK_EXT_rgba10x6_formats support
    desc.format = AHARDWAREBUFFER_FORMAT_R10G10B10A10_UNORM;
    if (AHardwareBuffer_isSupported(&desc)) {
        all_formats.emplace_back(
            VkSurfaceFormatKHR{VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,
                               VK_COLOR_SPACE_SRGB_NONLINEAR_KHR});
        if (colorspace_ext) {
            all_formats.emplace_back(
                VkSurfaceFormatKHR{VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,
                                   VK_COLOR_SPACE_PASS_THROUGH_EXT});
            all_formats.emplace_back(
                VkSurfaceFormatKHR{VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,
                                   VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT});
        }
    }

    // NOTE: Any new formats that are added must be coordinated across different
    // NOTE: Any new formats that are added must be coordinated across different
    // Android users.  This includes the ANGLE team (a layered implementation of
    // Android users.  This includes the ANGLE team (a layered implementation of
    // OpenGL-ES).
    // OpenGL-ES).