libui: use IMapper::createDescriptor_2_1

Update using's in Gralloc2.h to be based on common@1.1 and
mapper@2.1.  Use IMapper::createDescriptor_2_1 when it is available.

Test: manual
Change-Id: Id4f805a93a5e9a6cde9ecece7dd4954dec337060
diff --git a/libs/ui/Gralloc2.cpp b/libs/ui/Gralloc2.cpp
index 60ec38c..153d35a 100644
--- a/libs/ui/Gralloc2.cpp
+++ b/libs/ui/Gralloc2.cpp
@@ -57,8 +57,7 @@
         for (const auto bit : hardware::hidl_enum_iterator<BufferUsage>()) {
             bits = bits | bit;
         }
-        // Return only the overlapping bits.
-        return bits & ~getValid10UsageBits();
+        return bits;
     }();
     return valid11UsageBits;
 }
@@ -71,7 +70,7 @@
 
 Mapper::Mapper()
 {
-    mMapper = IMapper::getService();
+    mMapper = hardware::graphics::mapper::V2_0::IMapper::getService();
     if (mMapper == nullptr) {
         LOG_ALWAYS_FATAL("gralloc-mapper is missing");
     }
@@ -80,7 +79,7 @@
     }
 
     // IMapper 2.1 is optional
-    mMapperV2_1 = hardware::graphics::mapper::V2_1::IMapper::castFrom(mMapper);
+    mMapperV2_1 = IMapper::castFrom(mMapper);
 }
 
 Gralloc2::Error Mapper::validateBufferDescriptorInfo(
@@ -102,30 +101,34 @@
         const IMapper::BufferDescriptorInfo& descriptorInfo,
         BufferDescriptor* outDescriptor) const
 {
-    Error error;
-
-    if (descriptorInfo.usage & getValid11UsageBits()) {
-        // TODO(b/66900669): Use mMapperV2_1->createDescriptorV2_1().
-        ALOGW("full support for new usage bits is unimplemented 0x%" PRIx64,
-              descriptorInfo.usage & getValid11UsageBits());
-        return Error::BAD_VALUE;
-    }
-
-    error = validateBufferDescriptorInfo(descriptorInfo);
+    Error error = validateBufferDescriptorInfo(descriptorInfo);
     if (error != Error::NONE) {
         return error;
     }
 
-    auto ret = mMapper->createDescriptor(descriptorInfo,
-            [&](const auto& tmpError, const auto& tmpDescriptor)
-            {
-                error = tmpError;
-                if (error != Error::NONE) {
-                    return;
-                }
+    auto hidl_cb = [&](const auto& tmpError, const auto& tmpDescriptor)
+                   {
+                       error = tmpError;
+                       if (error != Error::NONE) {
+                           return;
+                       }
 
-                *outDescriptor = tmpDescriptor;
-            });
+                       *outDescriptor = tmpDescriptor;
+                   };
+
+    hardware::Return<void> ret;
+    if (mMapperV2_1 != nullptr) {
+        ret = mMapperV2_1->createDescriptor_2_1(descriptorInfo, hidl_cb);
+    } else {
+        const hardware::graphics::mapper::V2_0::IMapper::BufferDescriptorInfo info = {
+            descriptorInfo.width,
+            descriptorInfo.height,
+            descriptorInfo.layerCount,
+            static_cast<hardware::graphics::common::V1_0::PixelFormat>(descriptorInfo.format),
+            descriptorInfo.usage,
+        };
+        ret = mMapper->createDescriptor(info, hidl_cb);
+    }
 
     return (ret.isOk()) ? error : kTransactionError;
 }