1e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian/*
2e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian * Copyright (C) 2010 The Android Open Source Project
3e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian *
4e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
5e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian * you may not use this file except in compliance with the License.
6e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian * You may obtain a copy of the License at
7e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian *
8e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
9e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian *
10e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian * Unless required by applicable law or agreed to in writing, software
11e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
12e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian * See the License for the specific language governing permissions and
14e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian * limitations under the License.
15e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian */
16e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
17e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian#ifndef ANDROID_INCLUDE_HARDWARE_HWCOMPOSER_DEFS_H
18e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian#define ANDROID_INCLUDE_HARDWARE_HWCOMPOSER_DEFS_H
19e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
20e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian#include <stdint.h>
21e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian#include <sys/cdefs.h>
22e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
23e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian#include <hardware/gralloc.h>
24e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian#include <hardware/hardware.h>
25e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian#include <cutils/native_handle.h>
26e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
27e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian__BEGIN_DECLS
28e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
294e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza/* Shared by HWC1 and HWC2 */
30e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
313f5b522ac9a472de756c08b16f357acd6dc26e34Jesse Hall#define HWC_HEADER_VERSION          1
32e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
33903811cd0020f555d826870f018823b9063b37abJesse Hall#define HWC_MODULE_API_VERSION_0_1  HARDWARE_MODULE_API_VERSION(0, 1)
343f5b522ac9a472de756c08b16f357acd6dc26e34Jesse Hall
353f5b522ac9a472de756c08b16f357acd6dc26e34Jesse Hall#define HWC_DEVICE_API_VERSION_1_0  HARDWARE_DEVICE_API_VERSION_2(1, 0, HWC_HEADER_VERSION)
363f5b522ac9a472de756c08b16f357acd6dc26e34Jesse Hall#define HWC_DEVICE_API_VERSION_1_1  HARDWARE_DEVICE_API_VERSION_2(1, 1, HWC_HEADER_VERSION)
373f5b522ac9a472de756c08b16f357acd6dc26e34Jesse Hall#define HWC_DEVICE_API_VERSION_1_2  HARDWARE_DEVICE_API_VERSION_2(1, 2, HWC_HEADER_VERSION)
383b4732c9d5462daf52a2ee1a42410bb0220fd28fMathias Agopian#define HWC_DEVICE_API_VERSION_1_3  HARDWARE_DEVICE_API_VERSION_2(1, 3, HWC_HEADER_VERSION)
398c79c08578b51a1385759eddf25b0ec5f03e5198Jesse Hall#define HWC_DEVICE_API_VERSION_1_4  HARDWARE_DEVICE_API_VERSION_2(1, 4, HWC_HEADER_VERSION)
40811445a3f31023985b498312da3d9690dc20ca11Dan Stoza#define HWC_DEVICE_API_VERSION_1_5  HARDWARE_DEVICE_API_VERSION_2(1, 5, HWC_HEADER_VERSION)
41e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
424e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza#define HWC_DEVICE_API_VERSION_2_0  HARDWARE_DEVICE_API_VERSION_2(2, 0, HWC_HEADER_VERSION)
434e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza
444e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza/**
454e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza * The id of this module
464e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza */
474e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza#define HWC_HARDWARE_MODULE_ID "hwcomposer"
484e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza
494e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza/**
504e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza * Name of the sensors device to open
514e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza */
524e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza#define HWC_HARDWARE_COMPOSER "composer"
534e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza
544e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stozatypedef struct hwc_color {
554e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    uint8_t r;
564e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    uint8_t g;
574e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    uint8_t b;
584e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    uint8_t a;
594e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza} hwc_color_t;
604e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza
614e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stozatypedef struct hwc_frect {
624e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    float left;
634e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    float top;
644e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    float right;
654e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    float bottom;
664e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza} hwc_frect_t;
674e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza
684e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stozatypedef struct hwc_rect {
694e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    int left;
704e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    int top;
714e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    int right;
724e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    int bottom;
734e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza} hwc_rect_t;
744e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza
754e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stozatypedef struct hwc_region {
764e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    size_t numRects;
774e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    hwc_rect_t const* rects;
784e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza} hwc_region_t;
794e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza
804e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza/*
814e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza * hwc_layer_t::transform values
824e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza */
834e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stozatypedef enum {
844e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    /* flip source image horizontally */
854e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    HWC_TRANSFORM_FLIP_H = HAL_TRANSFORM_FLIP_H,
864e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    /* flip source image vertically */
874e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    HWC_TRANSFORM_FLIP_V = HAL_TRANSFORM_FLIP_V,
884e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    /* rotate source image 90 degrees clock-wise */
894e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    HWC_TRANSFORM_ROT_90 = HAL_TRANSFORM_ROT_90,
904e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    /* rotate source image 180 degrees */
914e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    HWC_TRANSFORM_ROT_180 = HAL_TRANSFORM_ROT_180,
924e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    /* rotate source image 270 degrees clock-wise */
934e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    HWC_TRANSFORM_ROT_270 = HAL_TRANSFORM_ROT_270,
944e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    /* flip source image horizontally, the rotate 90 degrees clock-wise */
954e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    HWC_TRANSFORM_FLIP_H_ROT_90 = HAL_TRANSFORM_FLIP_H | HAL_TRANSFORM_ROT_90,
964e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    /* flip source image vertically, the rotate 90 degrees clock-wise */
974e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza    HWC_TRANSFORM_FLIP_V_ROT_90 = HAL_TRANSFORM_FLIP_V | HAL_TRANSFORM_ROT_90,
984e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza} hwc_transform_t;
994e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza
1004e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza/*******************************************************************************
1014e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza * Beyond this point are things only used by HWC1, which should be ignored when
1024e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza * implementing a HWC2 device
1034e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza ******************************************************************************/
1044e9221bd8785c2f2de9fe2c0e315e5c590fefd9fDan Stoza
105e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopianenum {
106e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    /* hwc_composer_device_t::set failed in EGL */
107e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    HWC_EGL_ERROR = -1
108e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian};
109e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
110e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian/*
111e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian * hwc_layer_t::hints values
112e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian * Hints are set by the HAL and read by SurfaceFlinger
113e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian */
114e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopianenum {
115e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    /*
116e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian     * HWC can set the HWC_HINT_TRIPLE_BUFFER hint to indicate to SurfaceFlinger
117e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian     * that it should triple buffer this layer. Typically HWC does this when
118e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian     * the layer will be unavailable for use for an extended period of time,
119e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian     * e.g. if the display will be fetching data directly from the layer and
120e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian     * the layer can not be modified until after the next set().
121e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian     */
122e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    HWC_HINT_TRIPLE_BUFFER  = 0x00000001,
123e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
124e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    /*
125e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian     * HWC sets HWC_HINT_CLEAR_FB to tell SurfaceFlinger that it should clear the
126e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian     * framebuffer with transparent pixels where this layer would be.
127e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian     * SurfaceFlinger will only honor this flag when the layer has no blending
128e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian     *
129e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian     */
130e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    HWC_HINT_CLEAR_FB       = 0x00000002
131e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian};
132e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
133e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian/*
134e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian * hwc_layer_t::flags values
135e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian * Flags are set by SurfaceFlinger and read by the HAL
136e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian */
137e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopianenum {
138e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    /*
139e203b369a97d31e26672d068dd483ff50330b37aFabien Sanglard     * HWC_SKIP_LAYER is set by SurfaceFlinger to indicate that the HAL
140e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian     * shall not consider this layer for composition as it will be handled
141e203b369a97d31e26672d068dd483ff50330b37aFabien Sanglard     * by SurfaceFlinger (just as if compositionType was set to HWC_FRAMEBUFFER).
142e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian     */
143e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    HWC_SKIP_LAYER = 0x00000001,
1444a6788b02fb2bd174ac9e2386029785f084b7fddRiley Andrews
1454a6788b02fb2bd174ac9e2386029785f084b7fddRiley Andrews    /*
1464a6788b02fb2bd174ac9e2386029785f084b7fddRiley Andrews     * HWC_IS_CURSOR_LAYER is set by surfaceflinger to indicate that this
1474a6788b02fb2bd174ac9e2386029785f084b7fddRiley Andrews     * layer is being used as a cursor on this particular display, and that
1484a6788b02fb2bd174ac9e2386029785f084b7fddRiley Andrews     * surfaceflinger can potentially perform asynchronous position updates for
1494a6788b02fb2bd174ac9e2386029785f084b7fddRiley Andrews     * this layer. If a call to prepare() returns HWC_CURSOR_OVERLAY for the
1504a6788b02fb2bd174ac9e2386029785f084b7fddRiley Andrews     * composition type of this layer, then the hwcomposer will allow async
1514a6788b02fb2bd174ac9e2386029785f084b7fddRiley Andrews     * position updates to this layer via setCursorPositionAsync().
1524a6788b02fb2bd174ac9e2386029785f084b7fddRiley Andrews     */
1534a6788b02fb2bd174ac9e2386029785f084b7fddRiley Andrews    HWC_IS_CURSOR_LAYER = 0x00000002
154e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian};
155e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
156e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian/*
157e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian * hwc_layer_t::compositionType values
158e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian */
159e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopianenum {
160e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    /* this layer is to be drawn into the framebuffer by SurfaceFlinger */
161e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    HWC_FRAMEBUFFER = 0,
162e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
163e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    /* this layer will be handled in the HWC */
164e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    HWC_OVERLAY = 1,
165e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
166e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    /* this is the background layer. it's used to set the background color.
167e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian     * there is only a single background layer */
168e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    HWC_BACKGROUND = 2,
169d18c83fc044a5f1d74ebe59bea7763b75c4d00d7Jesse Hall
170d18c83fc044a5f1d74ebe59bea7763b75c4d00d7Jesse Hall    /* this layer holds the result of compositing the HWC_FRAMEBUFFER layers.
171d18c83fc044a5f1d74ebe59bea7763b75c4d00d7Jesse Hall     * Added in HWC_DEVICE_API_VERSION_1_1. */
172d18c83fc044a5f1d74ebe59bea7763b75c4d00d7Jesse Hall    HWC_FRAMEBUFFER_TARGET = 3,
1738c79c08578b51a1385759eddf25b0ec5f03e5198Jesse Hall
1748c79c08578b51a1385759eddf25b0ec5f03e5198Jesse Hall    /* this layer's contents are taken from a sideband buffer stream.
1758c79c08578b51a1385759eddf25b0ec5f03e5198Jesse Hall     * Added in HWC_DEVICE_API_VERSION_1_4. */
1768c79c08578b51a1385759eddf25b0ec5f03e5198Jesse Hall    HWC_SIDEBAND = 4,
177e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
1784a6788b02fb2bd174ac9e2386029785f084b7fddRiley Andrews    /* this layer's composition will be handled by hwcomposer by dedicated
1794a6788b02fb2bd174ac9e2386029785f084b7fddRiley Andrews       cursor overlay hardware. hwcomposer will also all async position updates
1804a6788b02fb2bd174ac9e2386029785f084b7fddRiley Andrews       of this layer outside of the normal prepare()/set() loop. Added in
1814a6788b02fb2bd174ac9e2386029785f084b7fddRiley Andrews       HWC_DEVICE_API_VERSION_1_4. */
1824a6788b02fb2bd174ac9e2386029785f084b7fddRiley Andrews    HWC_CURSOR_OVERLAY =  5
1834a6788b02fb2bd174ac9e2386029785f084b7fddRiley Andrews };
184e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian/*
185e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian * hwc_layer_t::blending values
186e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian */
187e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopianenum {
188e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    /* no blending */
189e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    HWC_BLENDING_NONE     = 0x0100,
190e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
191e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    /* ONE / ONE_MINUS_SRC_ALPHA */
192e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    HWC_BLENDING_PREMULT  = 0x0105,
193e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
194e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    /* SRC_ALPHA / ONE_MINUS_SRC_ALPHA */
195e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    HWC_BLENDING_COVERAGE = 0x0405
196e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian};
197e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
198e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian/* attributes queriable with query() */
199e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopianenum {
200e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    /*
2012c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall     * Must return 1 if the background layer is supported, 0 otherwise.
202e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian     */
203e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    HWC_BACKGROUND_LAYER_SUPPORTED      = 0,
204e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
205e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    /*
2062c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall     * Returns the vsync period in nanoseconds.
2072c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall     *
2082c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall     * This query is not used for HWC_DEVICE_API_VERSION_1_1 and later.
2092c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall     * Instead, the per-display attribute HWC_DISPLAY_VSYNC_PERIOD is used.
210e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian     */
211e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    HWC_VSYNC_PERIOD                    = 1,
21243b51d9fdd7a447c9de7bf30960a1963c93ff5c3Jesse Hall
21343b51d9fdd7a447c9de7bf30960a1963c93ff5c3Jesse Hall    /*
2142c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall     * Availability: HWC_DEVICE_API_VERSION_1_1
2152c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall     * Returns a mask of supported display types.
21643b51d9fdd7a447c9de7bf30960a1963c93ff5c3Jesse Hall     */
21743b51d9fdd7a447c9de7bf30960a1963c93ff5c3Jesse Hall    HWC_DISPLAY_TYPES_SUPPORTED         = 2,
218e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian};
219e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
2202c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall/* display attributes returned by getDisplayAttributes() */
2212c13759c61dd111efc9509ddf37330f50f706f64Jesse Hallenum {
2222c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall    /* Indicates the end of an attribute list */
2232c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall    HWC_DISPLAY_NO_ATTRIBUTE                = 0,
2242c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall
2252c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall    /* The vsync period in nanoseconds */
2262c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall    HWC_DISPLAY_VSYNC_PERIOD                = 1,
2272c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall
2282c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall    /* The number of pixels in the horizontal and vertical directions. */
2297cb03d79b3040d9b43ffc81414e9853e8a57adb1Jesse Hall    HWC_DISPLAY_WIDTH                       = 2,
2307cb03d79b3040d9b43ffc81414e9853e8a57adb1Jesse Hall    HWC_DISPLAY_HEIGHT                      = 3,
2312c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall
2322c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall    /* The number of pixels per thousand inches of this configuration.
2332c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall     *
2342c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall     * Scaling DPI by 1000 allows it to be stored in an int without losing
2352c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall     * too much precision.
2362c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall     *
2372c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall     * If the DPI for a configuration is unavailable or the HWC implementation
2382c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall     * considers it unreliable, it should set these attributes to zero.
2392c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall     */
2402c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall    HWC_DISPLAY_DPI_X                       = 4,
2412c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall    HWC_DISPLAY_DPI_Y                       = 5,
24295f017990ba70ba3ed22eac4f61c4f02cfc79045Dan Stoza
24395f017990ba70ba3ed22eac4f61c4f02cfc79045Dan Stoza    /* Indicates which of the vendor-defined color transforms is provided by
24495f017990ba70ba3ed22eac4f61c4f02cfc79045Dan Stoza     * this configuration. */
24595f017990ba70ba3ed22eac4f61c4f02cfc79045Dan Stoza    HWC_DISPLAY_COLOR_TRANSFORM             = 6,
2462c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall};
2472c13759c61dd111efc9509ddf37330f50f706f64Jesse Hall
248e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian/* Allowed events for hwc_methods::eventControl() */
249e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopianenum {
250e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian    HWC_EVENT_VSYNC     = 0
251e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian};
252e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
25343b51d9fdd7a447c9de7bf30960a1963c93ff5c3Jesse Hall/* Display types and associated mask bits. */
25443b51d9fdd7a447c9de7bf30960a1963c93ff5c3Jesse Hallenum {
25543b51d9fdd7a447c9de7bf30960a1963c93ff5c3Jesse Hall    HWC_DISPLAY_PRIMARY     = 0,
25643b51d9fdd7a447c9de7bf30960a1963c93ff5c3Jesse Hall    HWC_DISPLAY_EXTERNAL    = 1,    // HDMI, DP, etc.
257fc0ff2a8700eb11aef7a961b279d846c8a1c04c5Jesse Hall    HWC_DISPLAY_VIRTUAL     = 2,
258fc0ff2a8700eb11aef7a961b279d846c8a1c04c5Jesse Hall
259fc0ff2a8700eb11aef7a961b279d846c8a1c04c5Jesse Hall    HWC_NUM_PHYSICAL_DISPLAY_TYPES = 2,
260fc0ff2a8700eb11aef7a961b279d846c8a1c04c5Jesse Hall    HWC_NUM_DISPLAY_TYPES          = 3,
26143b51d9fdd7a447c9de7bf30960a1963c93ff5c3Jesse Hall};
26243b51d9fdd7a447c9de7bf30960a1963c93ff5c3Jesse Hall
26343b51d9fdd7a447c9de7bf30960a1963c93ff5c3Jesse Hallenum {
26443b51d9fdd7a447c9de7bf30960a1963c93ff5c3Jesse Hall    HWC_DISPLAY_PRIMARY_BIT     = 1 << HWC_DISPLAY_PRIMARY,
26543b51d9fdd7a447c9de7bf30960a1963c93ff5c3Jesse Hall    HWC_DISPLAY_EXTERNAL_BIT    = 1 << HWC_DISPLAY_EXTERNAL,
266fc0ff2a8700eb11aef7a961b279d846c8a1c04c5Jesse Hall    HWC_DISPLAY_VIRTUAL_BIT     = 1 << HWC_DISPLAY_VIRTUAL,
26743b51d9fdd7a447c9de7bf30960a1963c93ff5c3Jesse Hall};
26843b51d9fdd7a447c9de7bf30960a1963c93ff5c3Jesse Hall
26902b31986cba2cd1612155a1bb72d0fb17b55b219Prashant Malani/* Display power modes */
27002b31986cba2cd1612155a1bb72d0fb17b55b219Prashant Malanienum {
271842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown    /* The display is turned off (blanked). */
27202b31986cba2cd1612155a1bb72d0fb17b55b219Prashant Malani    HWC_POWER_MODE_OFF      = 0,
273842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown    /* The display is turned on and configured in a low power state
274842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown     * that is suitable for presenting ambient information to the user,
275842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown     * possibly with lower fidelity than normal but greater efficiency. */
27602b31986cba2cd1612155a1bb72d0fb17b55b219Prashant Malani    HWC_POWER_MODE_DOZE     = 1,
277842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown    /* The display is turned on normally. */
27802b31986cba2cd1612155a1bb72d0fb17b55b219Prashant Malani    HWC_POWER_MODE_NORMAL   = 2,
279842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown    /* The display is configured as in HWC_POWER_MODE_DOZE but may
280842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown     * stop applying frame buffer updates from the graphics subsystem.
281842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown     * This power mode is effectively a hint from the doze dream to
282842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown     * tell the hardware that it is done drawing to the display for the
283842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown     * time being and that the display should remain on in a low power
284842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown     * state and continue showing its current contents indefinitely
285842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown     * until the mode changes.
286842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown     *
287842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown     * This mode may also be used as a signal to enable hardware-based doze
288842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown     * functionality.  In this case, the doze dream is effectively
289842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown     * indicating that the hardware is free to take over the display
290842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown     * and manage it autonomously to implement low power always-on display
291842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown     * functionality. */
292842b906dd44bf874e17334d0343ede76d3e87c50Jeff Brown    HWC_POWER_MODE_DOZE_SUSPEND  = 3,
29302b31986cba2cd1612155a1bb72d0fb17b55b219Prashant Malani};
29402b31986cba2cd1612155a1bb72d0fb17b55b219Prashant Malani
295e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian/*****************************************************************************/
296e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
297e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian__END_DECLS
298e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian
299e291f71e0a25ac9bb39fb754c599b710ab8f59d5Mathias Agopian#endif /* ANDROID_INCLUDE_HARDWARE_HWCOMPOSER_DEFS_H */
300