OSDN Git Service

[HWC2on1Adapter]: Add support for HWC2_PFN_GET_CLIENT_TARGET_SUPPORT
authorFabien Sanglard <sanglardf@google.com>
Fri, 17 Mar 2017 18:16:52 +0000 (11:16 -0700)
committerFabien Sanglard <sanglardf@google.com>
Fri, 17 Mar 2017 21:26:14 +0000 (14:26 -0700)
Test: Ryu, Marlin
Change-Id: I6209c1a4290010b04fedbcb3d30c3a1d56cfb3e9

libs/hwc2on1adapter/HWC2On1Adapter.cpp
libs/hwc2on1adapter/include/hwc2on1adapter/HWC2On1Adapter.h

index 5ad05c7..03297ca 100644 (file)
@@ -245,6 +245,11 @@ hwc2_function_pointer_t HWC2On1Adapter::doGetFunction(
             return asFP<HWC2_PFN_VALIDATE_DISPLAY>(
                     displayHook<decltype(&Display::validate),
                     &Display::validate, uint32_t*, uint32_t*>);
+        case FunctionDescriptor::GetClientTargetSupport:
+            return asFP<HWC2_PFN_GET_CLIENT_TARGET_SUPPORT>(
+                    displayHook<decltype(&Display::getClientTargetSupport),
+                    &Display::getClientTargetSupport, uint32_t, uint32_t,
+                                                      int32_t, int32_t>);
 
         // Layer functions
         case FunctionDescriptor::SetCursorPosition:
@@ -1009,6 +1014,22 @@ Error HWC2On1Adapter::Display::updateLayerZ(hwc2_layer_t layerId, uint32_t z) {
     return Error::None;
 }
 
+Error HWC2On1Adapter::Display::getClientTargetSupport(uint32_t width, uint32_t height,
+                                      int32_t format, int32_t dataspace){
+    if (mActiveConfig == nullptr) {
+        return Error::Unsupported;
+    }
+
+    if (width == mActiveConfig->getAttribute(Attribute::Width) &&
+            height == mActiveConfig->getAttribute(Attribute::Height) &&
+            format == HAL_PIXEL_FORMAT_RGBA_8888 &&
+            dataspace == HAL_DATASPACE_UNKNOWN) {
+        return Error::None;
+    }
+
+    return Error::Unsupported;
+}
+
 static constexpr uint32_t ATTRIBUTES_WITH_COLOR[] = {
     HWC_DISPLAY_VSYNC_PERIOD,
     HWC_DISPLAY_WIDTH,
index a1d2c88..3badfce 100644 (file)
@@ -248,6 +248,9 @@ private:
 
             HWC2::Error updateLayerZ(hwc2_layer_t layerId, uint32_t z);
 
+            HWC2::Error getClientTargetSupport(uint32_t width, uint32_t height,
+                     int32_t format, int32_t dataspace);
+
             // Read configs from HWC1 device
             void populateConfigs();