Loading libs/hwui/HardwareBitmapUploader.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading libs/hwui/HardwareBitmapUploader.h +2 −0 Original line number Diff line number Diff line Loading @@ -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 }; Loading libs/hwui/renderthread/VulkanManager.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -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, Loading libs/hwui/utils/Color.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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: Loading Loading
libs/hwui/HardwareBitmapUploader.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading
libs/hwui/HardwareBitmapUploader.h +2 −0 Original line number Diff line number Diff line Loading @@ -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 }; Loading
libs/hwui/renderthread/VulkanManager.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -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, Loading
libs/hwui/utils/Color.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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: Loading