Loading libs/hwui/HardwareBitmapUploader.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -310,6 +310,11 @@ bool HardwareBitmapUploader::has1010102Support() { return has101012Support; } bool HardwareBitmapUploader::hasAlpha8Support() { static bool hasAlpha8Support = checkSupport(AHARDWAREBUFFER_FORMAT_R8_UNORM); return hasAlpha8Support; } static FormatInfo determineFormat(const SkBitmap& skBitmap, bool usingGL) { FormatInfo formatInfo; switch (skBitmap.info().colorType()) { Loading Loading @@ -363,6 +368,13 @@ static FormatInfo determineFormat(const SkBitmap& skBitmap, bool usingGL) { } formatInfo.format = GL_RGBA; break; case kAlpha_8_SkColorType: formatInfo.isSupported = HardwareBitmapUploader::hasAlpha8Support(); formatInfo.bufferFormat = AHARDWAREBUFFER_FORMAT_R8_UNORM; formatInfo.format = GL_R8; formatInfo.type = GL_UNSIGNED_BYTE; formatInfo.vkFormat = VK_FORMAT_R8_UNORM; break; default: ALOGW("unable to create hardware bitmap of colortype: %d", skBitmap.info().colorType()); formatInfo.valid = false; Loading libs/hwui/HardwareBitmapUploader.h +2 −0 Original line number Diff line number Diff line Loading @@ -30,11 +30,13 @@ public: #ifdef __ANDROID__ static bool hasFP16Support(); static bool has1010102Support(); static bool hasAlpha8Support(); #else static bool hasFP16Support() { return true; } static bool has1010102Support() { return true; } static bool hasAlpha8Support() { return true; } #endif }; Loading libs/hwui/hwui/Bitmap.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,10 @@ sk_sp<Bitmap> Bitmap::allocateAshmemBitmap(size_t size, const SkImageInfo& info, sk_sp<Bitmap> Bitmap::allocateHardwareBitmap(const SkBitmap& bitmap) { #ifdef __ANDROID__ // Layoutlib does not support hardware acceleration if (bitmap.colorType() == kAlpha_8_SkColorType && !uirenderer::HardwareBitmapUploader::hasAlpha8Support()) { return nullptr; } return uirenderer::HardwareBitmapUploader::allocateHardwareBitmap(bitmap); #else return Bitmap::allocateHeapBitmap(bitmap.info()); Loading Loading
libs/hwui/HardwareBitmapUploader.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -310,6 +310,11 @@ bool HardwareBitmapUploader::has1010102Support() { return has101012Support; } bool HardwareBitmapUploader::hasAlpha8Support() { static bool hasAlpha8Support = checkSupport(AHARDWAREBUFFER_FORMAT_R8_UNORM); return hasAlpha8Support; } static FormatInfo determineFormat(const SkBitmap& skBitmap, bool usingGL) { FormatInfo formatInfo; switch (skBitmap.info().colorType()) { Loading Loading @@ -363,6 +368,13 @@ static FormatInfo determineFormat(const SkBitmap& skBitmap, bool usingGL) { } formatInfo.format = GL_RGBA; break; case kAlpha_8_SkColorType: formatInfo.isSupported = HardwareBitmapUploader::hasAlpha8Support(); formatInfo.bufferFormat = AHARDWAREBUFFER_FORMAT_R8_UNORM; formatInfo.format = GL_R8; formatInfo.type = GL_UNSIGNED_BYTE; formatInfo.vkFormat = VK_FORMAT_R8_UNORM; break; default: ALOGW("unable to create hardware bitmap of colortype: %d", skBitmap.info().colorType()); formatInfo.valid = false; Loading
libs/hwui/HardwareBitmapUploader.h +2 −0 Original line number Diff line number Diff line Loading @@ -30,11 +30,13 @@ public: #ifdef __ANDROID__ static bool hasFP16Support(); static bool has1010102Support(); static bool hasAlpha8Support(); #else static bool hasFP16Support() { return true; } static bool has1010102Support() { return true; } static bool hasAlpha8Support() { return true; } #endif }; Loading
libs/hwui/hwui/Bitmap.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,10 @@ sk_sp<Bitmap> Bitmap::allocateAshmemBitmap(size_t size, const SkImageInfo& info, sk_sp<Bitmap> Bitmap::allocateHardwareBitmap(const SkBitmap& bitmap) { #ifdef __ANDROID__ // Layoutlib does not support hardware acceleration if (bitmap.colorType() == kAlpha_8_SkColorType && !uirenderer::HardwareBitmapUploader::hasAlpha8Support()) { return nullptr; } return uirenderer::HardwareBitmapUploader::allocateHardwareBitmap(bitmap); #else return Bitmap::allocateHeapBitmap(bitmap.info()); Loading