Merge "Support ALPHA_8 + HARDWARE" into tm-dev

This commit is contained in:
Leon Scroggins
2022-03-17 18:57:43 +00:00
committed by Android (Google) Code Review
3 changed files with 18 additions and 0 deletions

View File

@@ -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()) {
@@ -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;

View File

@@ -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
};

View File

@@ -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());