summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Hall <jessehall@google.com>2012-08-22 11:42:57 -0700
committerJesse Hall <jessehall@google.com>2012-08-22 12:10:06 -0700
commit43b51d9fdd7a447c9de7bf30960a1963c93ff5c3 (patch)
treeff180815003c85392f02b269ebebc36d26b968eb
parentf4e4624ef78fa72dd976b201c08ceb394564279c (diff)
downloadhardware_libhardware-43b51d9fdd7a447c9de7bf30960a1963c93ff5c3.zip
hardware_libhardware-43b51d9fdd7a447c9de7bf30960a1963c93ff5c3.tar.gz
hardware_libhardware-43b51d9fdd7a447c9de7bf30960a1963c93ff5c3.tar.bz2
Add NUM_DISPLAY_TYPES query and refine display list semantics
Change-Id: I740859bfa2b126edcdf06f7b2c8208770bc864f9
-rw-r--r--include/hardware/hwcomposer.h24
-rw-r--r--include/hardware/hwcomposer_defs.h18
2 files changed, 38 insertions, 4 deletions
diff --git a/include/hardware/hwcomposer.h b/include/hardware/hwcomposer.h
index 27b9197..a6358e4 100644
--- a/include/hardware/hwcomposer.h
+++ b/include/hardware/hwcomposer.h
@@ -342,8 +342,16 @@ typedef struct hwc_composer_device_1 {
* handles have been updated. Typically this happens (but is not limited to)
* when a window is added, removed, resized or moved.
*
- * The numDisplays parameter will always be greater than zero, displays
- * will be non-NULL, and the array entries will be non-NULL.
+ * For HWC 1.0, numDisplays will always be one, and displays[0] will be
+ * non-NULL.
+ *
+ * For HWC 1.1, numDisplays will always be HWC_NUM_DISPLAY_TYPES. Entries
+ * for unsupported or disabled/disconnected display types will be NULL.
+ *
+ * For HWC 1.2 and later, numDisplays will be HWC_NUM_DISPLAY_TYPES or more.
+ * The extra entries correspond to enabled virtual displays, and will be
+ * non-NULL. In HWC 1.2, support for one virtual display is required, and
+ * no more than one will be used. Future HWC versions might require more.
*
* returns: 0 on success. An negative error code on error. If an error is
* returned, SurfaceFlinger will assume that none of the layer will be
@@ -368,8 +376,16 @@ typedef struct hwc_composer_device_1 {
* been handled by SurfaceFlinger with OpenGL ES. In this case, (*set)()
* behaves just like eglSwapBuffers().
*
- * The numDisplays parameter will always be greater than zero, displays
- * will be non-NULL, and the array entries will be non-NULL.
+ * For HWC 1.0, numDisplays will always be one, and displays[0] will be
+ * non-NULL.
+ *
+ * For HWC 1.1, numDisplays will always be HWC_NUM_DISPLAY_TYPES. Entries
+ * for unsupported or disabled/disconnected display types will be NULL.
+ *
+ * For HWC 1.2 and later, numDisplays will be HWC_NUM_DISPLAY_TYPES or more.
+ * The extra entries correspond to enabled virtual displays, and will be
+ * non-NULL. In HWC 1.2, support for one virtual display is required, and
+ * no more than one will be used. Future HWC versions might require more.
*
* IMPORTANT NOTE: there is an implicit layer containing opaque black
* pixels behind all the layers in the list. It is the responsibility of
diff --git a/include/hardware/hwcomposer_defs.h b/include/hardware/hwcomposer_defs.h
index a5df8f0..f0f97fc 100644
--- a/include/hardware/hwcomposer_defs.h
+++ b/include/hardware/hwcomposer_defs.h
@@ -139,6 +139,12 @@ enum {
* returns the vsync period in nanosecond
*/
HWC_VSYNC_PERIOD = 1,
+
+ /*
+ * availability: HWC_DEVICE_API_VERSION_1_1
+ * returns a mask of supported display types
+ */
+ HWC_DISPLAY_TYPES_SUPPORTED = 2,
};
/* Allowed events for hwc_methods::eventControl() */
@@ -146,6 +152,18 @@ enum {
HWC_EVENT_VSYNC = 0
};
+/* Display types and associated mask bits. */
+enum {
+ HWC_DISPLAY_PRIMARY = 0,
+ HWC_DISPLAY_EXTERNAL = 1, // HDMI, DP, etc.
+ HWC_NUM_DISPLAY_TYPES
+};
+
+enum {
+ HWC_DISPLAY_PRIMARY_BIT = 1 << HWC_DISPLAY_PRIMARY,
+ HWC_DISPLAY_EXTERNAL_BIT = 1 << HWC_DISPLAY_EXTERNAL,
+};
+
/*****************************************************************************/
__END_DECLS