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

Commit 7f8fb20e authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add support for AHARDWAREBUFFER_FORMAT_R10G10B10A10_UNORM" into main

parents 3e3fe4d9 e77ab7aa
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -318,6 +318,11 @@ bool HardwareBitmapUploader::has1010102Support() {
    return has101012Support;
}

bool HardwareBitmapUploader::has10101010Support() {
    static bool has1010110Support = checkSupport(AHARDWAREBUFFER_FORMAT_R10G10B10A10_UNORM);
    return has1010110Support;
}

bool HardwareBitmapUploader::hasAlpha8Support() {
    static bool hasAlpha8Support = checkSupport(AHARDWAREBUFFER_FORMAT_R8_UNORM);
    return hasAlpha8Support;
@@ -376,6 +381,19 @@ static FormatInfo determineFormat(const SkBitmap& skBitmap, bool usingGL) {
            }
            formatInfo.format = GL_RGBA;
            break;
        case kRGBA_10x6_SkColorType:
            formatInfo.isSupported = HardwareBitmapUploader::has10101010Support();
            if (formatInfo.isSupported) {
                formatInfo.type = 0;  // Not supported in GL
                formatInfo.bufferFormat = AHARDWAREBUFFER_FORMAT_R10G10B10A10_UNORM;
                formatInfo.vkFormat = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16;
            } else {
                formatInfo.type = GL_UNSIGNED_BYTE;
                formatInfo.bufferFormat = AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM;
                formatInfo.vkFormat = VK_FORMAT_R8G8B8A8_UNORM;
            }
            formatInfo.format = 0;  // Not supported in GL
            break;
        case kAlpha_8_SkColorType:
            formatInfo.isSupported = HardwareBitmapUploader::hasAlpha8Support();
            if (formatInfo.isSupported) {
+2 −0
Original line number Diff line number Diff line
@@ -33,12 +33,14 @@ public:
#ifdef __ANDROID__
    static bool hasFP16Support();
    static bool has1010102Support();
    static bool has10101010Support();
    static bool hasAlpha8Support();
#else
    static bool hasFP16Support() {
        return true;
    }
    static bool has1010102Support() { return true; }
    static bool has10101010Support() { return true; }
    static bool hasAlpha8Support() { return true; }
#endif
};
+9 −0
Original line number Diff line number Diff line
@@ -318,6 +318,15 @@ void VulkanManager::setupDevice(skgpu::VulkanExtensions& grExtensions,
        tailPNext = &deviceFaultFeatures->pNext;
    }

    if (grExtensions.hasExtension(VK_EXT_RGBA10X6_FORMATS_EXTENSION_NAME, 1)) {
        VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT* formatFeatures =
                new VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT;
        formatFeatures->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT;
        formatFeatures->pNext = nullptr;
        *tailPNext = formatFeatures;
        tailPNext = &formatFeatures->pNext;
    }

    // query to get the physical device features
    mGetPhysicalDeviceFeatures2(mPhysicalDevice, &features);
    // this looks like it would slow things down,
+8 −0
Original line number Diff line number Diff line
@@ -49,6 +49,10 @@ static inline SkImageInfo createImageInfo(int32_t width, int32_t height, int32_t
            colorType = kRGBA_1010102_SkColorType;
            alphaType = kPremul_SkAlphaType;
            break;
        case AHARDWAREBUFFER_FORMAT_R10G10B10A10_UNORM:
            colorType = kRGBA_10x6_SkColorType;
            alphaType = kPremul_SkAlphaType;
            break;
        case AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT:
            colorType = kRGBA_F16_SkColorType;
            alphaType = kPremul_SkAlphaType;
@@ -86,6 +90,8 @@ uint32_t ColorTypeToBufferFormat(SkColorType colorType) {
            return AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM;
        case kRGBA_1010102_SkColorType:
            return AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM;
        case kRGBA_10x6_SkColorType:
            return AHARDWAREBUFFER_FORMAT_R10G10B10A10_UNORM;
        case kARGB_4444_SkColorType:
            // Hardcoding the value from android::PixelFormat
            static constexpr uint64_t kRGBA4444 = 7;
@@ -108,6 +114,8 @@ SkColorType BufferFormatToColorType(uint32_t format) {
            return kRGB_565_SkColorType;
        case AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM:
            return kRGBA_1010102_SkColorType;
        case AHARDWAREBUFFER_FORMAT_R10G10B10A10_UNORM:
            return kRGBA_10x6_SkColorType;
        case AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT:
            return kRGBA_F16_SkColorType;
        case AHARDWAREBUFFER_FORMAT_R8_UNORM: