Add support for AHARDWAREBUFFER_FORMAT_R10G10B10A10_UNORM

Bug: 283989374
Test: local compiling
Flag: EXEMPT bugfix
Change-Id: I6486a664a74959a7c5e0fde4c80df9e318d9d4b1
diff --git a/libs/hwui/HardwareBitmapUploader.cpp b/libs/hwui/HardwareBitmapUploader.cpp
index 27ea150..7fc3776 100644
--- a/libs/hwui/HardwareBitmapUploader.cpp
+++ b/libs/hwui/HardwareBitmapUploader.cpp
@@ -318,6 +318,11 @@
     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 @@
             }
             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) {