/*
|
* 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 <string>
|
#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
|