/* * Copyright 2017 The Chromium Authors. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ #ifndef ANDROID_SF_PRIVATE_HWCOMPOSER2_ARC_PRIVATE_H #define ANDROID_SF_PRIVATE_HWCOMPOSER2_ARC_PRIVATE_H __BEGIN_DECLS /* Optional ARC private capabilities. The particular set of supported private * capabilities for a given device may be retrieved using * getArcPrivateCapabilities. */ typedef enum { HWC2_ARC_PRIVATE_CAPABILITY_INVALID = 0, /* Specifies that the device supports ARC attribute data. Decoding the data * is an implementation detail for the device. Note that ordinarily the * Android framework does not send this data. It is assumed that a vendor * that wants this data has also modified the framework to send it. */ HWC2_ARC_PRIVATE_CAPABILITY_ATTRIBUTES = 1, /* Specifies that the device is an ARC windowing composer. A windowing * composer generates windowed output inside some external * implementation-defined windowing environment. It means that there is no * longer a single output frame buffer being used. The device must handle * all composition, and the client must not do so. The client cannot do any * culling of layers either -- it may not have full knowledge of what is * actually visible or not. */ HWC2_ARC_PRIVATE_CAPABILITY_WINDOWING_COMPOSER = 2, } hwc2_arc_private_capability_t; /* ARC private function descriptors for use with getFunction. * The first entry needs to be maintained so there is no overlap with the * constants there. */ typedef enum { HWC2_ARC_PRIVATE_FUNCTION_GET_CAPABILITIES = 0x10000, // For HWC2_ARC_PRIVATE_CAPABILITY_WINDOWING_COMPOSER HWC2_ARC_PRIVATE_FUNCTION_GET_DISPLAY_ATTRIBUTE, // For HWC2_ARC_PRIVATE_CAPABILITY_ATTRIBUTES HWC2_ARC_PRIVATE_FUNCTION_SET_LAYER_ATTRIBUTES, // For HWC2_ARC_PRIVATE_CAPABILITY_WINDOWING_COMPOSER HWC2_ARC_PRIVATE_FUNCTION_SET_LAYER_HIDDEN, // For HWC2_ARC_PRIVATE_CAPABILITY_ATTRIBUTES HWC2_ARC_PRIVATE_FUNCTION_ATTRIBUTES_SHOULD_FORCE_UPDATE, } hwc2_arc_private_function_descriptor_t; typedef enum { HWC2_ARC_PRIVATE_DISPLAY_ATTRIBUTE_INVALID = 0, HWC2_ARC_PRIVATE_DISPLAY_ATTRIBUTE_OUTPUT_ROTATION = 1, } hwc2_arc_private_display_attribute_t; typedef enum { HWC2_ARC_PRIVATE_HIDDEN_INVALID = 0, HWC2_ARC_PRIVATE_HIDDEN_ENABLE = 1, HWC2_ARC_PRIVATE_HIDDEN_DISABLE = 2, } hwc2_arc_private_hidden_t; /* * Stringification Functions */ #ifdef HWC2_INCLUDE_STRINGIFICATION static inline const char* getArcPrivateCapabilityName(hwc2_arc_private_capability_t capability) { switch (capability) { case HWC2_ARC_PRIVATE_CAPABILITY_INVALID: return "Invalid"; case HWC2_ARC_PRIVATE_CAPABILITY_ATTRIBUTES: return "ArcAttributes"; case HWC2_ARC_PRIVATE_CAPABILITY_WINDOWING_COMPOSER: return "ArcWindowingComposer"; default: return "Unknown"; } } static inline const char* getArcPrivateFunctionDescriptorName( hwc2_arc_private_function_descriptor_t desc) { switch (desc) { case HWC2_ARC_PRIVATE_FUNCTION_GET_CAPABILITIES: return "ArcGetCapabilities"; case HWC2_ARC_PRIVATE_FUNCTION_GET_DISPLAY_ATTRIBUTE: return "ArcGetDisplayAttribute"; case HWC2_ARC_PRIVATE_FUNCTION_SET_LAYER_ATTRIBUTES: return "ArcSetLayerAttributes"; case HWC2_ARC_PRIVATE_FUNCTION_SET_LAYER_HIDDEN: return "ArcSetLayerHidden"; case HWC2_ARC_PRIVATE_FUNCTION_ATTRIBUTES_SHOULD_FORCE_UPDATE: return "ArcAttributesShouldForceUpdate"; default: return "Unknown"; } } static inline const char* getArcPrivateDisplayAttributeName(hwc2_arc_private_display_attribute_t attribute) { switch (attribute) { case HWC2_ARC_PRIVATE_DISPLAY_ATTRIBUTE_INVALID: return "Invalid"; case HWC2_ARC_PRIVATE_DISPLAY_ATTRIBUTE_OUTPUT_ROTATION: return "OutputRotation"; default: return "Unknown"; } } static inline const char* getArcPrivateHiddenName(hwc2_arc_private_hidden_t hidden) { switch (hidden) { case HWC2_ARC_PRIVATE_HIDDEN_INVALID: return "Invalid"; case HWC2_ARC_PRIVATE_HIDDEN_ENABLE: return "Enable"; case HWC2_ARC_PRIVATE_HIDDEN_DISABLE: return "Disable"; default: return "Unknown"; } } #endif // HWC2_INCLUDE_STRINGIFICATION /* * C++11 features */ #ifdef HWC2_USE_CPP11 __END_DECLS #ifdef HWC2_INCLUDE_STRINGIFICATION #include #endif namespace HWC2 { enum class ArcPrivateCapability : int32_t { Invalid = HWC2_ARC_PRIVATE_CAPABILITY_INVALID, Attributes = HWC2_ARC_PRIVATE_CAPABILITY_ATTRIBUTES, WindowingComposer = HWC2_ARC_PRIVATE_CAPABILITY_WINDOWING_COMPOSER, }; TO_STRING(hwc2_arc_private_capability_t, ArcPrivateCapability, getArcPrivateCapabilityName) enum class ArcPrivateFunctionDescriptor : int32_t { // Since we are extending the HWC2 FunctionDescriptor, we duplicate // all of its GetCapabilities = HWC2_ARC_PRIVATE_FUNCTION_GET_CAPABILITIES, GetDisplayAttribute = HWC2_ARC_PRIVATE_FUNCTION_GET_DISPLAY_ATTRIBUTE, SetLayerAttributes = HWC2_ARC_PRIVATE_FUNCTION_SET_LAYER_ATTRIBUTES, SetLayerHidden = HWC2_ARC_PRIVATE_FUNCTION_SET_LAYER_HIDDEN, AttributesShouldForceUpdate = HWC2_ARC_PRIVATE_FUNCTION_ATTRIBUTES_SHOULD_FORCE_UPDATE, }; TO_STRING(hwc2_arc_private_function_descriptor_t, ArcPrivateFunctionDescriptor, getArcPrivateFunctionDescriptorName) enum class ArcPrivateDisplayAttribute : int32_t { Invalid = HWC2_ARC_PRIVATE_DISPLAY_ATTRIBUTE_INVALID, OutputRotation = HWC2_ARC_PRIVATE_DISPLAY_ATTRIBUTE_OUTPUT_ROTATION, }; TO_STRING(hwc2_arc_private_display_attribute_t, ArcPrivateDisplayAttribute, getArcPrivateDisplayAttributeName) enum class ArcPrivateHidden : int32_t { Invalid = HWC2_ARC_PRIVATE_HIDDEN_INVALID, Enable = HWC2_ARC_PRIVATE_HIDDEN_ENABLE, Disable = HWC2_ARC_PRIVATE_HIDDEN_DISABLE, }; TO_STRING(hwc2_arc_private_hidden_t, ArcPrivateHidden, getArcPrivateHiddenName) } // namespace HWC2 __BEGIN_DECLS #endif // HWC2_USE_CPP11 /* * ARC Private device Functions * * All of these functions take as their first parameter a device pointer, so * this parameter is omitted from the described parameter lists. */ /* arcGetCapabilities(..., outCount, outCapabilities) * Descriptor: HWC2_ARC_PRIVATE_FUNCTION_GET_CAPABILITIES * * Gets additional capabilities supported by the device. * * Parameters: * outCount - if outCapabilities was NULL, the number of capabilities which * would have been returned; if outCapabilities was not NULL, the number * of capabilities returned, which must not exceed the value stored in * outCount priort to the call; pointer will be non-NULL * outCapabilities - an array of capabilities * */ typedef void (*HWC2_ARC_PRIVATE_PFN_GET_CAPABILITIES)(hwc2_device_t* device, uint32_t* outCount, int32_t* /*hwc2_arc_private_capability_t*/ outCapabilities); /* * ARC Private display functions * * All of these functions take as their first two parameters a device pointer, * and a display handle for the display. These parameters are omitted from the * described parameter lists. */ /* arcGetDisplayAttributes(..., attribute, outValue) * Descriptor: HWC2_ARC_PRIVATE_FUNCTION_GET_DISPLAY_ATTRIBUTE * Provided by HWC2 devices which support * HWC2_ARC_PRIVATE_CAPABILITY_WINDOWING_COMPOSER * * Gets additional display attribute data. * * Parameters: * attribute - The attribute to get * outValue - A location to store the value of the attribute * * Returns HWC2_ERROR_NONE if a value was set, or HWC2_ERROR_BAD_DISPLAY, or * HWC2_ERROR_BAD_PARAMETER */ typedef int32_t /*hwc2_error_t*/ (*HWC2_ARC_PRIVATE_PFN_GET_DISPLAY_ATTRIBUTE)( hwc2_device_t* device, hwc2_display_t display, const int32_t attribute, int32_t* outValue); /* * ARC Private layer Functions * * These are functions which operate on layers, but which do not modify state * that must be validated before use. See also 'Layer State Functions' below. * * All of these functions take as their first three parameters a device pointer, * a display handle for the display which contains the layer, and a layer * handle, so these parameters are omitted from the described parameter lists. */ /* arcSetLayerAttributes(..., numElements, ids, sizes, values) * Descriptor: HWC2_ARC_PRIVATE_FUNCTION_SET_LAYER_ATTRIBUTES * Provided by HWC2 devices which support * HWC2_ARC_PRIVATE_CAPABILITY_ATTRIBUTES * * Sets additional surface data in the form of id/value pairs sent down by the * framework. The meaning of each attribute is opaque to the client, and is * assumed to be understood by the device implementation. * * Parameters: * numElements - the number of elements in each array. * ids - an array of surface attribute ids * sizes - an array of sizes, giving the size in bytes of each value * values - an array of pointers to the data for each value * * Returns HWC2_ERROR_NONE or one of the following errors: * HWC2_ERROR_BAD_LAYER - an invalid layer handle was passed in */ typedef int32_t /*hwc2_error_t*/ (*HWC2_ARC_PRIVATE_PFN_SET_LAYER_ATTRIBUTES)(hwc2_device_t* device, hwc2_display_t display, hwc2_layer_t layer, uint32_t numElements, const int32_t* ids, const uint32_t* sizes, const uint8_t** values); /* arcSetLayerHidden(..., hidden) * Descriptor: HWC2_ARC_PRIVATE_FUNCTION_SET_LAYER_HIDDEN * Provided by HWC2 devices which support * HWC2_ARC_PRIVATE_CAPABILITY_WINDOWING_COMPOSER * * Indicates whether the layer should be hidden or not. This flag is set by the * window manager. * * Parameters: * hidden - the setting to use. * * Returns HWC2_ERROR_NONE or one of the following errors: * HWC2_ERROR_BAD_LAYER - an invalid layer handle was passed in */ typedef int32_t /*hwc2_error_t*/ (*HWC2_ARC_PRIVATE_PFN_SET_LAYER_HIDDEN)( hwc2_device_t* device, hwc2_display_t display, hwc2_layer_t layer, int32_t /* hwc2_arc_private_hidden_t */ hidden); /* arcAttributesShouldForceUpdate(..., numElements, ids, sizes, values, outShouldForceUpdate) * Descriptor: HWC2_ARC_PRIVATE_FUNCTION_ATTRIBUTES_SHOULD_FORCE_UPDATE * Provided by HWC2 devices which support * HWC2_ARC_PRIVATE_CAPABILITY_ATTRIBUTES * * Outputs to |outShouldForceUpdate| whether to send geometry updates without * waiting for a matching buffer, given the specified layer attributes. * * Parameters: * numElements - the number of elements in each array. * ids - an array of surface attribute ids * sizes - an array of sizes, giving the size in bytes of each value * values - an array of pointers to the data for each value * outShouldForceUpdate - whether to send geometry updates without waiting * for a matching buffer * * Returns HWC2_ERROR_NONE or one of the following errors: * HWC2_ERROR_BAD_LAYER - an invalid layer handle was passed in */ typedef int32_t /*hwc2_error_t*/ (*HWC2_ARC_PRIVATE_PFN_ATTRIBUTES_SHOULD_FORCE_UPDATE)( hwc2_device_t* device, hwc2_display_t display, hwc2_layer_t layer, uint32_t numElements, const int32_t* ids, const uint32_t* sizes, const uint8_t** values, bool* outShouldForceUpdate); __END_DECLS #endif