1 /* 2 * Copyright 2017 The Chromium Authors. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 * DEALINGS IN THE SOFTWARE. 22 */ 23 24 #ifndef ANDROID_SF_PRIVATE_HWCOMPOSER2_ARC_PRIVATE_H 25 #define ANDROID_SF_PRIVATE_HWCOMPOSER2_ARC_PRIVATE_H 26 27 __BEGIN_DECLS 28 29 /* Optional ARC private capabilities. The particular set of supported private 30 * capabilities for a given device may be retrieved using 31 * getArcPrivateCapabilities. */ 32 typedef enum { 33 HWC2_ARC_PRIVATE_CAPABILITY_INVALID = 0, 34 35 /* Specifies that the device supports ARC attribute data. Decoding the data 36 * is an implementation detail for the device. Note that ordinarily the 37 * Android framework does not send this data. It is assumed that a vendor 38 * that wants this data has also modified the framework to send it. */ 39 HWC2_ARC_PRIVATE_CAPABILITY_ATTRIBUTES = 1, 40 41 /* Specifies that the device is an ARC windowing composer. A windowing 42 * composer generates windowed output inside some external 43 * implementation-defined windowing environment. It means that there is no 44 * longer a single output frame buffer being used. The device must handle 45 * all composition, and the client must not do so. The client cannot do any 46 * culling of layers either -- it may not have full knowledge of what is 47 * actually visible or not. */ 48 HWC2_ARC_PRIVATE_CAPABILITY_WINDOWING_COMPOSER = 2, 49 } hwc2_arc_private_capability_t; 50 51 /* ARC private function descriptors for use with getFunction. 52 * The first entry needs to be maintained so there is no overlap with the 53 * constants there. */ 54 typedef enum { 55 HWC2_ARC_PRIVATE_FUNCTION_GET_CAPABILITIES = 0x10000, 56 57 // For HWC2_ARC_PRIVATE_CAPABILITY_WINDOWING_COMPOSER 58 HWC2_ARC_PRIVATE_FUNCTION_GET_DISPLAY_ATTRIBUTE, 59 60 // For HWC2_ARC_PRIVATE_CAPABILITY_ATTRIBUTES 61 HWC2_ARC_PRIVATE_FUNCTION_SET_LAYER_ATTRIBUTES, 62 63 // For HWC2_ARC_PRIVATE_CAPABILITY_WINDOWING_COMPOSER 64 HWC2_ARC_PRIVATE_FUNCTION_SET_LAYER_HIDDEN, 65 66 // For HWC2_ARC_PRIVATE_CAPABILITY_ATTRIBUTES 67 HWC2_ARC_PRIVATE_FUNCTION_ATTRIBUTES_SHOULD_FORCE_UPDATE, 68 } hwc2_arc_private_function_descriptor_t; 69 70 typedef enum { 71 HWC2_ARC_PRIVATE_DISPLAY_ATTRIBUTE_INVALID = 0, 72 HWC2_ARC_PRIVATE_DISPLAY_ATTRIBUTE_OUTPUT_ROTATION = 1, 73 } hwc2_arc_private_display_attribute_t; 74 75 typedef enum { 76 HWC2_ARC_PRIVATE_HIDDEN_INVALID = 0, 77 HWC2_ARC_PRIVATE_HIDDEN_ENABLE = 1, 78 HWC2_ARC_PRIVATE_HIDDEN_DISABLE = 2, 79 } hwc2_arc_private_hidden_t; 80 81 /* 82 * Stringification Functions 83 */ 84 85 #ifdef HWC2_INCLUDE_STRINGIFICATION 86 87 static inline const char* getArcPrivateCapabilityName(hwc2_arc_private_capability_t capability) 88 { 89 switch (capability) { 90 case HWC2_ARC_PRIVATE_CAPABILITY_INVALID: 91 return "Invalid"; 92 case HWC2_ARC_PRIVATE_CAPABILITY_ATTRIBUTES: 93 return "ArcAttributes"; 94 case HWC2_ARC_PRIVATE_CAPABILITY_WINDOWING_COMPOSER: 95 return "ArcWindowingComposer"; 96 default: 97 return "Unknown"; 98 } 99 } 100 101 static inline const char* getArcPrivateFunctionDescriptorName( 102 hwc2_arc_private_function_descriptor_t desc) 103 { 104 switch (desc) { 105 case HWC2_ARC_PRIVATE_FUNCTION_GET_CAPABILITIES: 106 return "ArcGetCapabilities"; 107 case HWC2_ARC_PRIVATE_FUNCTION_GET_DISPLAY_ATTRIBUTE: 108 return "ArcGetDisplayAttribute"; 109 case HWC2_ARC_PRIVATE_FUNCTION_SET_LAYER_ATTRIBUTES: 110 return "ArcSetLayerAttributes"; 111 case HWC2_ARC_PRIVATE_FUNCTION_SET_LAYER_HIDDEN: 112 return "ArcSetLayerHidden"; 113 case HWC2_ARC_PRIVATE_FUNCTION_ATTRIBUTES_SHOULD_FORCE_UPDATE: 114 return "ArcAttributesShouldForceUpdate"; 115 default: 116 return "Unknown"; 117 } 118 } 119 120 static inline const char* getArcPrivateDisplayAttributeName(hwc2_arc_private_display_attribute_t attribute) 121 { 122 switch (attribute) { 123 case HWC2_ARC_PRIVATE_DISPLAY_ATTRIBUTE_INVALID: 124 return "Invalid"; 125 case HWC2_ARC_PRIVATE_DISPLAY_ATTRIBUTE_OUTPUT_ROTATION: 126 return "OutputRotation"; 127 default: 128 return "Unknown"; 129 } 130 } 131 132 static inline const char* getArcPrivateHiddenName(hwc2_arc_private_hidden_t hidden) 133 { 134 switch (hidden) { 135 case HWC2_ARC_PRIVATE_HIDDEN_INVALID: 136 return "Invalid"; 137 case HWC2_ARC_PRIVATE_HIDDEN_ENABLE: 138 return "Enable"; 139 case HWC2_ARC_PRIVATE_HIDDEN_DISABLE: 140 return "Disable"; 141 default: 142 return "Unknown"; 143 } 144 } 145 146 #endif // HWC2_INCLUDE_STRINGIFICATION 147 148 /* 149 * C++11 features 150 */ 151 152 #ifdef HWC2_USE_CPP11 153 __END_DECLS 154 155 #ifdef HWC2_INCLUDE_STRINGIFICATION 156 #include <string> 157 #endif 158 159 namespace HWC2 { 160 161 enum class ArcPrivateCapability : int32_t { 162 Invalid = HWC2_ARC_PRIVATE_CAPABILITY_INVALID, 163 Attributes = HWC2_ARC_PRIVATE_CAPABILITY_ATTRIBUTES, 164 WindowingComposer = HWC2_ARC_PRIVATE_CAPABILITY_WINDOWING_COMPOSER, 165 }; 166 TO_STRING(hwc2_arc_private_capability_t, ArcPrivateCapability, getArcPrivateCapabilityName) 167 168 enum class ArcPrivateFunctionDescriptor : int32_t { 169 // Since we are extending the HWC2 FunctionDescriptor, we duplicate 170 // all of its 171 GetCapabilities = HWC2_ARC_PRIVATE_FUNCTION_GET_CAPABILITIES, 172 GetDisplayAttribute = HWC2_ARC_PRIVATE_FUNCTION_GET_DISPLAY_ATTRIBUTE, 173 SetLayerAttributes = HWC2_ARC_PRIVATE_FUNCTION_SET_LAYER_ATTRIBUTES, 174 SetLayerHidden = HWC2_ARC_PRIVATE_FUNCTION_SET_LAYER_HIDDEN, 175 AttributesShouldForceUpdate = HWC2_ARC_PRIVATE_FUNCTION_ATTRIBUTES_SHOULD_FORCE_UPDATE, 176 }; 177 TO_STRING(hwc2_arc_private_function_descriptor_t, ArcPrivateFunctionDescriptor, 178 getArcPrivateFunctionDescriptorName) 179 180 enum class ArcPrivateDisplayAttribute : int32_t { 181 Invalid = HWC2_ARC_PRIVATE_DISPLAY_ATTRIBUTE_INVALID, 182 OutputRotation = HWC2_ARC_PRIVATE_DISPLAY_ATTRIBUTE_OUTPUT_ROTATION, 183 }; 184 TO_STRING(hwc2_arc_private_display_attribute_t, ArcPrivateDisplayAttribute, 185 getArcPrivateDisplayAttributeName) 186 187 enum class ArcPrivateHidden : int32_t { 188 Invalid = HWC2_ARC_PRIVATE_HIDDEN_INVALID, 189 Enable = HWC2_ARC_PRIVATE_HIDDEN_ENABLE, 190 Disable = HWC2_ARC_PRIVATE_HIDDEN_DISABLE, 191 }; 192 TO_STRING(hwc2_arc_private_hidden_t, ArcPrivateHidden, getArcPrivateHiddenName) 193 194 } // namespace HWC2 195 196 __BEGIN_DECLS 197 #endif // HWC2_USE_CPP11 198 199 /* 200 * ARC Private device Functions 201 * 202 * All of these functions take as their first parameter a device pointer, so 203 * this parameter is omitted from the described parameter lists. 204 */ 205 206 /* arcGetCapabilities(..., outCount, outCapabilities) 207 * Descriptor: HWC2_ARC_PRIVATE_FUNCTION_GET_CAPABILITIES 208 * 209 * Gets additional capabilities supported by the device. 210 * 211 * Parameters: 212 * outCount - if outCapabilities was NULL, the number of capabilities which 213 * would have been returned; if outCapabilities was not NULL, the number 214 * of capabilities returned, which must not exceed the value stored in 215 * outCount priort to the call; pointer will be non-NULL 216 * outCapabilities - an array of capabilities 217 * */ 218 typedef void (*HWC2_ARC_PRIVATE_PFN_GET_CAPABILITIES)(hwc2_device_t* device, uint32_t* outCount, 219 int32_t* /*hwc2_arc_private_capability_t*/ outCapabilities); 220 221 /* 222 * ARC Private display functions 223 * 224 * All of these functions take as their first two parameters a device pointer, 225 * and a display handle for the display. These parameters are omitted from the 226 * described parameter lists. 227 */ 228 229 /* arcGetDisplayAttributes(..., attribute, outValue) 230 * Descriptor: HWC2_ARC_PRIVATE_FUNCTION_GET_DISPLAY_ATTRIBUTE 231 * Provided by HWC2 devices which support 232 * HWC2_ARC_PRIVATE_CAPABILITY_WINDOWING_COMPOSER 233 * 234 * Gets additional display attribute data. 235 * 236 * Parameters: 237 * attribute - The attribute to get 238 * outValue - A location to store the value of the attribute 239 * 240 * Returns HWC2_ERROR_NONE if a value was set, or HWC2_ERROR_BAD_DISPLAY, or 241 * HWC2_ERROR_BAD_PARAMETER 242 */ 243 typedef int32_t /*hwc2_error_t*/ (*HWC2_ARC_PRIVATE_PFN_GET_DISPLAY_ATTRIBUTE)( 244 hwc2_device_t* device, hwc2_display_t display, const int32_t attribute, int32_t* outValue); 245 246 /* 247 * ARC Private layer Functions 248 * 249 * These are functions which operate on layers, but which do not modify state 250 * that must be validated before use. See also 'Layer State Functions' below. 251 * 252 * All of these functions take as their first three parameters a device pointer, 253 * a display handle for the display which contains the layer, and a layer 254 * handle, so these parameters are omitted from the described parameter lists. 255 */ 256 257 /* arcSetLayerAttributes(..., numElements, ids, sizes, values) 258 * Descriptor: HWC2_ARC_PRIVATE_FUNCTION_SET_LAYER_ATTRIBUTES 259 * Provided by HWC2 devices which support 260 * HWC2_ARC_PRIVATE_CAPABILITY_ATTRIBUTES 261 * 262 * Sets additional surface data in the form of id/value pairs sent down by the 263 * framework. The meaning of each attribute is opaque to the client, and is 264 * assumed to be understood by the device implementation. 265 * 266 * Parameters: 267 * numElements - the number of elements in each array. 268 * ids - an array of surface attribute ids 269 * sizes - an array of sizes, giving the size in bytes of each value 270 * values - an array of pointers to the data for each value 271 * 272 * Returns HWC2_ERROR_NONE or one of the following errors: 273 * HWC2_ERROR_BAD_LAYER - an invalid layer handle was passed in 274 */ 275 typedef int32_t /*hwc2_error_t*/ (*HWC2_ARC_PRIVATE_PFN_SET_LAYER_ATTRIBUTES)(hwc2_device_t* device, 276 hwc2_display_t display, hwc2_layer_t layer, uint32_t numElements, const int32_t* ids, 277 const uint32_t* sizes, const uint8_t** values); 278 279 /* arcSetLayerHidden(..., hidden) 280 * Descriptor: HWC2_ARC_PRIVATE_FUNCTION_SET_LAYER_HIDDEN 281 * Provided by HWC2 devices which support 282 * HWC2_ARC_PRIVATE_CAPABILITY_WINDOWING_COMPOSER 283 * 284 * Indicates whether the layer should be hidden or not. This flag is set by the 285 * window manager. 286 * 287 * Parameters: 288 * hidden - the setting to use. 289 * 290 * Returns HWC2_ERROR_NONE or one of the following errors: 291 * HWC2_ERROR_BAD_LAYER - an invalid layer handle was passed in 292 */ 293 typedef int32_t /*hwc2_error_t*/ (*HWC2_ARC_PRIVATE_PFN_SET_LAYER_HIDDEN)( 294 hwc2_device_t* device, hwc2_display_t display, hwc2_layer_t layer, 295 int32_t /* hwc2_arc_private_hidden_t */ hidden); 296 297 /* arcAttributesShouldForceUpdate(..., numElements, ids, sizes, values, outShouldForceUpdate) 298 * Descriptor: HWC2_ARC_PRIVATE_FUNCTION_ATTRIBUTES_SHOULD_FORCE_UPDATE 299 * Provided by HWC2 devices which support 300 * HWC2_ARC_PRIVATE_CAPABILITY_ATTRIBUTES 301 * 302 * Outputs to |outShouldForceUpdate| whether to send geometry updates without 303 * waiting for a matching buffer, given the specified layer attributes. 304 * 305 * Parameters: 306 * numElements - the number of elements in each array. 307 * ids - an array of surface attribute ids 308 * sizes - an array of sizes, giving the size in bytes of each value 309 * values - an array of pointers to the data for each value 310 * outShouldForceUpdate - whether to send geometry updates without waiting 311 * for a matching buffer 312 * 313 * Returns HWC2_ERROR_NONE or one of the following errors: 314 * HWC2_ERROR_BAD_LAYER - an invalid layer handle was passed in 315 */ 316 typedef int32_t /*hwc2_error_t*/ (*HWC2_ARC_PRIVATE_PFN_ATTRIBUTES_SHOULD_FORCE_UPDATE)( 317 hwc2_device_t* device, hwc2_display_t display, hwc2_layer_t layer, 318 uint32_t numElements, const int32_t* ids, const uint32_t* sizes, 319 const uint8_t** values, bool* outShouldForceUpdate); 320 321 __END_DECLS 322 323 #endif 324