xref: /aosp_15_r20/hardware/interfaces/graphics/composer/2.2/IComposerClient.hal (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker/*
2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2018 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker *
4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker *
8*4d7e907cSAndroid Build Coastguard Worker *      http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker *
10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker */
16*4d7e907cSAndroid Build Coastguard Worker
17*4d7e907cSAndroid Build Coastguard Workerpackage [email protected];
18*4d7e907cSAndroid Build Coastguard Worker
19*4d7e907cSAndroid Build Coastguard Workerimport [email protected]::ColorMode;
20*4d7e907cSAndroid Build Coastguard Workerimport [email protected]::Dataspace;
21*4d7e907cSAndroid Build Coastguard Workerimport [email protected]::PixelFormat;
22*4d7e907cSAndroid Build Coastguard Workerimport [email protected]::RenderIntent;
23*4d7e907cSAndroid Build Coastguard Workerimport @2.1::IComposerClient;
24*4d7e907cSAndroid Build Coastguard Workerimport @2.1::Display;
25*4d7e907cSAndroid Build Coastguard Workerimport @2.1::Error;
26*4d7e907cSAndroid Build Coastguard Workerimport @2.1::IComposerClient;
27*4d7e907cSAndroid Build Coastguard Worker
28*4d7e907cSAndroid Build Coastguard Workerinterface IComposerClient extends @2.1::IComposerClient {
29*4d7e907cSAndroid Build Coastguard Worker
30*4d7e907cSAndroid Build Coastguard Worker    enum PowerMode : @2.1::IComposerClient.PowerMode {
31*4d7e907cSAndroid Build Coastguard Worker        /**
32*4d7e907cSAndroid Build Coastguard Worker         * The display is configured as in ON but may stop applying display
33*4d7e907cSAndroid Build Coastguard Worker         * updates from the client. This is effectively a hint to the device
34*4d7e907cSAndroid Build Coastguard Worker         * that drawing to the display has been suspended and that the the
35*4d7e907cSAndroid Build Coastguard Worker         * device must remain on and continue displaying its current contents
36*4d7e907cSAndroid Build Coastguard Worker         * indefinitely until the power mode changes.
37*4d7e907cSAndroid Build Coastguard Worker         *
38*4d7e907cSAndroid Build Coastguard Worker         * This mode may also be used as a signal to enable hardware-based
39*4d7e907cSAndroid Build Coastguard Worker         * functionality to take over the display and manage it autonomously
40*4d7e907cSAndroid Build Coastguard Worker         * to implement a low power always-on display.
41*4d7e907cSAndroid Build Coastguard Worker         */
42*4d7e907cSAndroid Build Coastguard Worker        ON_SUSPEND = 4
43*4d7e907cSAndroid Build Coastguard Worker    };
44*4d7e907cSAndroid Build Coastguard Worker
45*4d7e907cSAndroid Build Coastguard Worker    /**
46*4d7e907cSAndroid Build Coastguard Worker     * Following enums define keys for metadata defined by SMPTE ST 2086:2014
47*4d7e907cSAndroid Build Coastguard Worker     * and CTA 861.3.
48*4d7e907cSAndroid Build Coastguard Worker     */
49*4d7e907cSAndroid Build Coastguard Worker    enum PerFrameMetadataKey : int32_t {
50*4d7e907cSAndroid Build Coastguard Worker        /** SMPTE ST 2084:2014.
51*4d7e907cSAndroid Build Coastguard Worker         * Coordinates defined in CIE 1931 xy chromaticity space
52*4d7e907cSAndroid Build Coastguard Worker         */
53*4d7e907cSAndroid Build Coastguard Worker        /** SMPTE ST 2084:2014 */
54*4d7e907cSAndroid Build Coastguard Worker        DISPLAY_RED_PRIMARY_X,
55*4d7e907cSAndroid Build Coastguard Worker        /** SMPTE ST 2084:2014 */
56*4d7e907cSAndroid Build Coastguard Worker        DISPLAY_RED_PRIMARY_Y,
57*4d7e907cSAndroid Build Coastguard Worker        /** SMPTE ST 2084:2014 */
58*4d7e907cSAndroid Build Coastguard Worker        DISPLAY_GREEN_PRIMARY_X,
59*4d7e907cSAndroid Build Coastguard Worker        /** SMPTE ST 2084:2014 */
60*4d7e907cSAndroid Build Coastguard Worker        DISPLAY_GREEN_PRIMARY_Y,
61*4d7e907cSAndroid Build Coastguard Worker        /** SMPTE ST 2084:2014 */
62*4d7e907cSAndroid Build Coastguard Worker        DISPLAY_BLUE_PRIMARY_X,
63*4d7e907cSAndroid Build Coastguard Worker        /** SMPTE ST 2084:2014 */
64*4d7e907cSAndroid Build Coastguard Worker        DISPLAY_BLUE_PRIMARY_Y,
65*4d7e907cSAndroid Build Coastguard Worker        /** SMPTE ST 2084:2014 */
66*4d7e907cSAndroid Build Coastguard Worker        WHITE_POINT_X,
67*4d7e907cSAndroid Build Coastguard Worker        /** SMPTE ST 2084:2014 */
68*4d7e907cSAndroid Build Coastguard Worker        WHITE_POINT_Y,
69*4d7e907cSAndroid Build Coastguard Worker        /** SMPTE ST 2084:2014.
70*4d7e907cSAndroid Build Coastguard Worker         * Units: nits
71*4d7e907cSAndroid Build Coastguard Worker         * max as defined by ST 2048: 10,000 nits
72*4d7e907cSAndroid Build Coastguard Worker         */
73*4d7e907cSAndroid Build Coastguard Worker        MAX_LUMINANCE,
74*4d7e907cSAndroid Build Coastguard Worker        /** SMPTE ST 2084:2014 */
75*4d7e907cSAndroid Build Coastguard Worker        MIN_LUMINANCE,
76*4d7e907cSAndroid Build Coastguard Worker        /** CTA 861.3 */
77*4d7e907cSAndroid Build Coastguard Worker        MAX_CONTENT_LIGHT_LEVEL,
78*4d7e907cSAndroid Build Coastguard Worker        /** CTA 861.3 */
79*4d7e907cSAndroid Build Coastguard Worker        MAX_FRAME_AVERAGE_LIGHT_LEVEL,
80*4d7e907cSAndroid Build Coastguard Worker    };
81*4d7e907cSAndroid Build Coastguard Worker
82*4d7e907cSAndroid Build Coastguard Worker    struct PerFrameMetadata {
83*4d7e907cSAndroid Build Coastguard Worker        PerFrameMetadataKey key;
84*4d7e907cSAndroid Build Coastguard Worker        float value;
85*4d7e907cSAndroid Build Coastguard Worker    };
86*4d7e907cSAndroid Build Coastguard Worker
87*4d7e907cSAndroid Build Coastguard Worker    struct FloatColor {
88*4d7e907cSAndroid Build Coastguard Worker        float r;
89*4d7e907cSAndroid Build Coastguard Worker        float g;
90*4d7e907cSAndroid Build Coastguard Worker        float b;
91*4d7e907cSAndroid Build Coastguard Worker        float a;
92*4d7e907cSAndroid Build Coastguard Worker    };
93*4d7e907cSAndroid Build Coastguard Worker
94*4d7e907cSAndroid Build Coastguard Worker    enum Command : @2.1::IComposerClient.Command {
95*4d7e907cSAndroid Build Coastguard Worker        /**
96*4d7e907cSAndroid Build Coastguard Worker         * SET_LAYER_PER_FRAME_METADATA has this pseudo prototype
97*4d7e907cSAndroid Build Coastguard Worker         *
98*4d7e907cSAndroid Build Coastguard Worker         *   setLayerPerFrameMetadata(Display display, Layer layer,
99*4d7e907cSAndroid Build Coastguard Worker         *                            vec<PerFrameMetadata> data);
100*4d7e907cSAndroid Build Coastguard Worker         *
101*4d7e907cSAndroid Build Coastguard Worker         * Sets the PerFrameMetadata for the display. This metadata must be used
102*4d7e907cSAndroid Build Coastguard Worker         * by the implementation to better tone map content to that display.
103*4d7e907cSAndroid Build Coastguard Worker         *
104*4d7e907cSAndroid Build Coastguard Worker         * This is a method that may be called every frame. Thus it's
105*4d7e907cSAndroid Build Coastguard Worker         * implemented using buffered transport.
106*4d7e907cSAndroid Build Coastguard Worker         * SET_LAYER_PER_FRAME_METADATA is the command used by the buffered transport
107*4d7e907cSAndroid Build Coastguard Worker         * mechanism.
108*4d7e907cSAndroid Build Coastguard Worker         */
109*4d7e907cSAndroid Build Coastguard Worker        SET_LAYER_PER_FRAME_METADATA = 0x303 << @2.1::IComposerClient.Command:OPCODE_SHIFT,
110*4d7e907cSAndroid Build Coastguard Worker
111*4d7e907cSAndroid Build Coastguard Worker        /**
112*4d7e907cSAndroid Build Coastguard Worker         * SET_LAYER_COLOR has this pseudo prototype
113*4d7e907cSAndroid Build Coastguard Worker         *
114*4d7e907cSAndroid Build Coastguard Worker         *   setLayerColor(FloatColor color);
115*4d7e907cSAndroid Build Coastguard Worker         *
116*4d7e907cSAndroid Build Coastguard Worker         * Sets the color of the given layer. If the composition type of the layer
117*4d7e907cSAndroid Build Coastguard Worker         * is not Composition::SOLID_COLOR, this call must succeed and have no
118*4d7e907cSAndroid Build Coastguard Worker         * other effect.
119*4d7e907cSAndroid Build Coastguard Worker         *
120*4d7e907cSAndroid Build Coastguard Worker         * @param color is the new color using float type.
121*4d7e907cSAndroid Build Coastguard Worker         */
122*4d7e907cSAndroid Build Coastguard Worker        SET_LAYER_FLOAT_COLOR = 0x40c << @2.1::IComposerClient.Command:OPCODE_SHIFT,
123*4d7e907cSAndroid Build Coastguard Worker    };
124*4d7e907cSAndroid Build Coastguard Worker
125*4d7e907cSAndroid Build Coastguard Worker    /**
126*4d7e907cSAndroid Build Coastguard Worker     * Returns the PerFrameMetadataKeys that are supported by this device.
127*4d7e907cSAndroid Build Coastguard Worker     *
128*4d7e907cSAndroid Build Coastguard Worker     * @param display is the display on which to create the layer.
129*4d7e907cSAndroid Build Coastguard Worker     * @return keys is the vector of PerFrameMetadataKey keys that are
130*4d7e907cSAndroid Build Coastguard Worker     *        supported by this device.
131*4d7e907cSAndroid Build Coastguard Worker     * @return error is NONE upon success. Otherwise,
132*4d7e907cSAndroid Build Coastguard Worker     *         UNSUPPORTED if not supported on underlying HAL
133*4d7e907cSAndroid Build Coastguard Worker     */
134*4d7e907cSAndroid Build Coastguard Worker    getPerFrameMetadataKeys(Display display)
135*4d7e907cSAndroid Build Coastguard Worker        generates (Error error,
136*4d7e907cSAndroid Build Coastguard Worker                   vec<PerFrameMetadataKey> keys);
137*4d7e907cSAndroid Build Coastguard Worker
138*4d7e907cSAndroid Build Coastguard Worker    /**
139*4d7e907cSAndroid Build Coastguard Worker     * getReadbackBufferAttributes
140*4d7e907cSAndroid Build Coastguard Worker     * Returns the format which should be used when allocating a buffer for use by
141*4d7e907cSAndroid Build Coastguard Worker     * device readback as well as the dataspace in which its contents should be
142*4d7e907cSAndroid Build Coastguard Worker     * interpreted.
143*4d7e907cSAndroid Build Coastguard Worker     *
144*4d7e907cSAndroid Build Coastguard Worker     * The width and height of this buffer must be those of the currently-active
145*4d7e907cSAndroid Build Coastguard Worker     * display configuration, and the usage flags must consist of the following:
146*4d7e907cSAndroid Build Coastguard Worker     *   BufferUsage::CPU_READ | BufferUsage::GPU_TEXTURE |
147*4d7e907cSAndroid Build Coastguard Worker     *   BufferUsage::COMPOSER_OUTPUT
148*4d7e907cSAndroid Build Coastguard Worker     *
149*4d7e907cSAndroid Build Coastguard Worker     * The format and dataspace provided must be sufficient such that if a
150*4d7e907cSAndroid Build Coastguard Worker     * correctly-configured buffer is passed into setReadbackBuffer, filled by
151*4d7e907cSAndroid Build Coastguard Worker     * the device, and then displayed by the client as a full-screen buffer, the
152*4d7e907cSAndroid Build Coastguard Worker     * output of the display remains the same (subject to the note about protected
153*4d7e907cSAndroid Build Coastguard Worker     * content in the description of setReadbackBuffer).
154*4d7e907cSAndroid Build Coastguard Worker     *
155*4d7e907cSAndroid Build Coastguard Worker     * If the active configuration or color mode of this display has changed
156*4d7e907cSAndroid Build Coastguard Worker     * since a previous call to this function, it must be called again prior to
157*4d7e907cSAndroid Build Coastguard Worker     * setting a readback buffer such that the returned format and dataspace can
158*4d7e907cSAndroid Build Coastguard Worker     * be updated accordingly.
159*4d7e907cSAndroid Build Coastguard Worker     *
160*4d7e907cSAndroid Build Coastguard Worker     * Parameters:
161*4d7e907cSAndroid Build Coastguard Worker     * @param display - the display on which to create the layer.
162*4d7e907cSAndroid Build Coastguard Worker     *
163*4d7e907cSAndroid Build Coastguard Worker     * @return format - the format the client should use when allocating a device
164*4d7e907cSAndroid Build Coastguard Worker     *       readback buffer
165*4d7e907cSAndroid Build Coastguard Worker     * @return dataspace - the dataspace to use when interpreting the
166*4d7e907cSAndroid Build Coastguard Worker     *       contents of a device readback buffer
167*4d7e907cSAndroid Build Coastguard Worker     * @return error is NONE upon success. Otherwise,
168*4d7e907cSAndroid Build Coastguard Worker     *         BAD_DISPLAY when an invalid display handle was passed in.
169*4d7e907cSAndroid Build Coastguard Worker     *         UNSUPPORTED if not supported on underlying HAL
170*4d7e907cSAndroid Build Coastguard Worker     *
171*4d7e907cSAndroid Build Coastguard Worker     * See also:
172*4d7e907cSAndroid Build Coastguard Worker     *   setReadbackBuffer
173*4d7e907cSAndroid Build Coastguard Worker     *   getReadbackBufferFence
174*4d7e907cSAndroid Build Coastguard Worker     */
175*4d7e907cSAndroid Build Coastguard Worker    getReadbackBufferAttributes(Display display)
176*4d7e907cSAndroid Build Coastguard Worker        generates (Error error,
177*4d7e907cSAndroid Build Coastguard Worker                   PixelFormat format,
178*4d7e907cSAndroid Build Coastguard Worker                   Dataspace dataspace);
179*4d7e907cSAndroid Build Coastguard Worker
180*4d7e907cSAndroid Build Coastguard Worker    /**
181*4d7e907cSAndroid Build Coastguard Worker     * getReadbackBufferFence
182*4d7e907cSAndroid Build Coastguard Worker     * Returns an acquire sync fence file descriptor which must signal when the
183*4d7e907cSAndroid Build Coastguard Worker     * buffer provided to setReadbackBuffer has been filled by the device and is
184*4d7e907cSAndroid Build Coastguard Worker     * safe for the client to read.
185*4d7e907cSAndroid Build Coastguard Worker     *
186*4d7e907cSAndroid Build Coastguard Worker     * If it is already safe to read from this buffer, -1 may be returned instead.
187*4d7e907cSAndroid Build Coastguard Worker     * The client takes ownership of this file descriptor and is responsible for
188*4d7e907cSAndroid Build Coastguard Worker     * closing it when it is no longer needed.
189*4d7e907cSAndroid Build Coastguard Worker     *
190*4d7e907cSAndroid Build Coastguard Worker     * This function must be called immediately after the composition cycle being
191*4d7e907cSAndroid Build Coastguard Worker     * captured into the readback buffer. The complete ordering of a readback buffer
192*4d7e907cSAndroid Build Coastguard Worker     * capture is as follows:
193*4d7e907cSAndroid Build Coastguard Worker     *
194*4d7e907cSAndroid Build Coastguard Worker     *   getReadbackBufferAttributes
195*4d7e907cSAndroid Build Coastguard Worker     *   // Readback buffer is allocated
196*4d7e907cSAndroid Build Coastguard Worker     *   // Many frames may pass
197*4d7e907cSAndroid Build Coastguard Worker     *
198*4d7e907cSAndroid Build Coastguard Worker     *   setReadbackBuffer
199*4d7e907cSAndroid Build Coastguard Worker     *   validateDisplay
200*4d7e907cSAndroid Build Coastguard Worker     *   presentDisplay
201*4d7e907cSAndroid Build Coastguard Worker     *   getReadbackBufferFence
202*4d7e907cSAndroid Build Coastguard Worker     *   // Implicitly wait on the acquire fence before accessing the buffer
203*4d7e907cSAndroid Build Coastguard Worker     *
204*4d7e907cSAndroid Build Coastguard Worker     * Parameters:
205*4d7e907cSAndroid Build Coastguard Worker     * @param display - the display on which to create the layer.
206*4d7e907cSAndroid Build Coastguard Worker     *
207*4d7e907cSAndroid Build Coastguard Worker     * @return acquireFence - a sync fence file descriptor as described above; pointer
208*4d7e907cSAndroid Build Coastguard Worker     *       must be non-NULL
209*4d7e907cSAndroid Build Coastguard Worker     * @return error - is HWC2_ERROR_NONE or one of the following errors:
210*4d7e907cSAndroid Build Coastguard Worker     *         BAD_DISPLAY - an invalid display handle was passed in
211*4d7e907cSAndroid Build Coastguard Worker     *         NO_RESOURCES - the readback operation was successful, but
212*4d7e907cSAndroid Build Coastguard Worker     *                        resulted in a different validate result than would
213*4d7e907cSAndroid Build Coastguard Worker     *                        have occurred without readback
214*4d7e907cSAndroid Build Coastguard Worker     *         UNSUPPORTED - the readback operation was unsuccessful because of
215*4d7e907cSAndroid Build Coastguard Worker     *                       resource constraints, the presence of protected
216*4d7e907cSAndroid Build Coastguard Worker     *                       content, or other reasons; -1 must be returned for
217*4d7e907cSAndroid Build Coastguard Worker     *                       acquireFence
218*4d7e907cSAndroid Build Coastguard Worker     *
219*4d7e907cSAndroid Build Coastguard Worker     * See also:
220*4d7e907cSAndroid Build Coastguard Worker     *   getReadbackBufferAttributes
221*4d7e907cSAndroid Build Coastguard Worker     *   setReadbackBuffer
222*4d7e907cSAndroid Build Coastguard Worker     */
223*4d7e907cSAndroid Build Coastguard Worker    getReadbackBufferFence(Display display)
224*4d7e907cSAndroid Build Coastguard Worker                generates (Error error,
225*4d7e907cSAndroid Build Coastguard Worker                           handle acquireFence);
226*4d7e907cSAndroid Build Coastguard Worker
227*4d7e907cSAndroid Build Coastguard Worker    /**
228*4d7e907cSAndroid Build Coastguard Worker     * setReadbackBuffer
229*4d7e907cSAndroid Build Coastguard Worker     * Sets the readback buffer to be filled with the contents of the next
230*4d7e907cSAndroid Build Coastguard Worker     * composition performed for this display (i.e., the contents present at the
231*4d7e907cSAndroid Build Coastguard Worker     * time of the next validateDisplay/presentDisplay cycle).
232*4d7e907cSAndroid Build Coastguard Worker     *
233*4d7e907cSAndroid Build Coastguard Worker     * This buffer must have been allocated as described in
234*4d7e907cSAndroid Build Coastguard Worker     * getReadbackBufferAttributes and is in the dataspace provided by the same.
235*4d7e907cSAndroid Build Coastguard Worker     *
236*4d7e907cSAndroid Build Coastguard Worker     * If there is hardware protected content on the display at the time of the next
237*4d7e907cSAndroid Build Coastguard Worker     * composition, the area of the readback buffer covered by such content must be
238*4d7e907cSAndroid Build Coastguard Worker     * completely black. Any areas of the buffer not covered by such content may
239*4d7e907cSAndroid Build Coastguard Worker     * optionally be black as well.
240*4d7e907cSAndroid Build Coastguard Worker     *
241*4d7e907cSAndroid Build Coastguard Worker     * The release fence file descriptor provided works identically to the one
242*4d7e907cSAndroid Build Coastguard Worker     * described for setOutputBuffer.
243*4d7e907cSAndroid Build Coastguard Worker     *
244*4d7e907cSAndroid Build Coastguard Worker     * This function must not be called between any call to validateDisplay and a
245*4d7e907cSAndroid Build Coastguard Worker     * subsequent call to presentDisplay.
246*4d7e907cSAndroid Build Coastguard Worker     *
247*4d7e907cSAndroid Build Coastguard Worker     * Parameters:
248*4d7e907cSAndroid Build Coastguard Worker     * @param display - the display on which to create the layer.
249*4d7e907cSAndroid Build Coastguard Worker     * @param buffer - the new readback buffer
250*4d7e907cSAndroid Build Coastguard Worker     * @param releaseFence - a sync fence file descriptor as described in setOutputBuffer
251*4d7e907cSAndroid Build Coastguard Worker     *
252*4d7e907cSAndroid Build Coastguard Worker     * @return error - is HWC2_ERROR_NONE or one of the following errors:
253*4d7e907cSAndroid Build Coastguard Worker     *   HWC2_ERROR_BAD_DISPLAY - an invalid display handle was passed in
254*4d7e907cSAndroid Build Coastguard Worker     *   HWC2_ERROR_BAD_PARAMETER - the new readback buffer handle was invalid
255*4d7e907cSAndroid Build Coastguard Worker     *
256*4d7e907cSAndroid Build Coastguard Worker     * See also:
257*4d7e907cSAndroid Build Coastguard Worker     *   getReadbackBufferAttributes
258*4d7e907cSAndroid Build Coastguard Worker     *   getReadbackBufferFence
259*4d7e907cSAndroid Build Coastguard Worker     */
260*4d7e907cSAndroid Build Coastguard Worker    setReadbackBuffer(Display display, handle buffer, handle releaseFence) generates (Error error);
261*4d7e907cSAndroid Build Coastguard Worker
262*4d7e907cSAndroid Build Coastguard Worker    /**
263*4d7e907cSAndroid Build Coastguard Worker     * createVirtualDisplay_2_2
264*4d7e907cSAndroid Build Coastguard Worker     * Creates a new virtual display with the given width and height. The
265*4d7e907cSAndroid Build Coastguard Worker     * format passed into this function is the default format requested by the
266*4d7e907cSAndroid Build Coastguard Worker     * consumer of the virtual display output buffers.
267*4d7e907cSAndroid Build Coastguard Worker     *
268*4d7e907cSAndroid Build Coastguard Worker     * The display must be assumed to be on from the time the first frame is
269*4d7e907cSAndroid Build Coastguard Worker     * presented until the display is destroyed.
270*4d7e907cSAndroid Build Coastguard Worker     *
271*4d7e907cSAndroid Build Coastguard Worker     * @param width is the width in pixels.
272*4d7e907cSAndroid Build Coastguard Worker     * @param height is the height in pixels.
273*4d7e907cSAndroid Build Coastguard Worker     * @param formatHint is the default output buffer format selected by
274*4d7e907cSAndroid Build Coastguard Worker     *        the consumer.
275*4d7e907cSAndroid Build Coastguard Worker     * @param outputBufferSlotCount is the number of output buffer slots to be
276*4d7e907cSAndroid Build Coastguard Worker     *        reserved.
277*4d7e907cSAndroid Build Coastguard Worker     * @return error is NONE upon success. Otherwise,
278*4d7e907cSAndroid Build Coastguard Worker     *         UNSUPPORTED when the width or height is too large for the
279*4d7e907cSAndroid Build Coastguard Worker     *                     device to be able to create a virtual display.
280*4d7e907cSAndroid Build Coastguard Worker     *         NO_RESOURCES when the device is unable to create a new virtual
281*4d7e907cSAndroid Build Coastguard Worker     *                      display at this time.
282*4d7e907cSAndroid Build Coastguard Worker     * @return display is the newly-created virtual display.
283*4d7e907cSAndroid Build Coastguard Worker     * @return format is the format of the buffer the device will produce.
284*4d7e907cSAndroid Build Coastguard Worker     */
285*4d7e907cSAndroid Build Coastguard Worker    @callflow(next="*")
286*4d7e907cSAndroid Build Coastguard Worker    createVirtualDisplay_2_2(uint32_t width,
287*4d7e907cSAndroid Build Coastguard Worker                             uint32_t height,
288*4d7e907cSAndroid Build Coastguard Worker                             PixelFormat formatHint,
289*4d7e907cSAndroid Build Coastguard Worker                             uint32_t outputBufferSlotCount)
290*4d7e907cSAndroid Build Coastguard Worker                  generates (Error error,
291*4d7e907cSAndroid Build Coastguard Worker                             Display display,
292*4d7e907cSAndroid Build Coastguard Worker                             PixelFormat format);
293*4d7e907cSAndroid Build Coastguard Worker
294*4d7e907cSAndroid Build Coastguard Worker    /**
295*4d7e907cSAndroid Build Coastguard Worker     * getClientTargetSupport_2_2
296*4d7e907cSAndroid Build Coastguard Worker     * Returns whether a client target with the given properties can be
297*4d7e907cSAndroid Build Coastguard Worker     * handled by the device.
298*4d7e907cSAndroid Build Coastguard Worker     *
299*4d7e907cSAndroid Build Coastguard Worker     * This function must return true for a client target with width and
300*4d7e907cSAndroid Build Coastguard Worker     * height equal to the active display configuration dimensions,
301*4d7e907cSAndroid Build Coastguard Worker     * PixelFormat::RGBA_8888, and Dataspace::UNKNOWN. It is not required to
302*4d7e907cSAndroid Build Coastguard Worker     * return true for any other configuration.
303*4d7e907cSAndroid Build Coastguard Worker     *
304*4d7e907cSAndroid Build Coastguard Worker     * @param display is the display to query.
305*4d7e907cSAndroid Build Coastguard Worker     * @param width is the client target width in pixels.
306*4d7e907cSAndroid Build Coastguard Worker     * @param height is the client target height in pixels.
307*4d7e907cSAndroid Build Coastguard Worker     * @param format is the client target format.
308*4d7e907cSAndroid Build Coastguard Worker     * @param dataspace is the client target dataspace, as described in
309*4d7e907cSAndroid Build Coastguard Worker     *        setLayerDataspace.
310*4d7e907cSAndroid Build Coastguard Worker     * @return error is NONE upon success. Otherwise,
311*4d7e907cSAndroid Build Coastguard Worker     *         BAD_DISPLAY when an invalid display handle was passed in.
312*4d7e907cSAndroid Build Coastguard Worker     *         UNSUPPORTED when the given configuration is not supported.
313*4d7e907cSAndroid Build Coastguard Worker     */
314*4d7e907cSAndroid Build Coastguard Worker    @callflow(next="*")
315*4d7e907cSAndroid Build Coastguard Worker    getClientTargetSupport_2_2(Display display,
316*4d7e907cSAndroid Build Coastguard Worker                               uint32_t width,
317*4d7e907cSAndroid Build Coastguard Worker                               uint32_t height,
318*4d7e907cSAndroid Build Coastguard Worker                               PixelFormat format,
319*4d7e907cSAndroid Build Coastguard Worker                               Dataspace dataspace)
320*4d7e907cSAndroid Build Coastguard Worker                    generates (Error error);
321*4d7e907cSAndroid Build Coastguard Worker    /**
322*4d7e907cSAndroid Build Coastguard Worker     * setPowerMode_2_2
323*4d7e907cSAndroid Build Coastguard Worker     * Sets the power mode of the given display. The transition must be
324*4d7e907cSAndroid Build Coastguard Worker     * complete when this function returns. It is valid to call this function
325*4d7e907cSAndroid Build Coastguard Worker     * multiple times with the same power mode.
326*4d7e907cSAndroid Build Coastguard Worker     *
327*4d7e907cSAndroid Build Coastguard Worker     * All displays must support PowerMode::ON and PowerMode::OFF.  Whether a
328*4d7e907cSAndroid Build Coastguard Worker     * display supports PowerMode::DOZE or PowerMode::DOZE_SUSPEND may be
329*4d7e907cSAndroid Build Coastguard Worker     * queried using getDozeSupport.
330*4d7e907cSAndroid Build Coastguard Worker     *
331*4d7e907cSAndroid Build Coastguard Worker     * @param display is the display to which the power mode is set.
332*4d7e907cSAndroid Build Coastguard Worker     * @param mode is the new power mode.
333*4d7e907cSAndroid Build Coastguard Worker     * @return error is NONE upon success. Otherwise,
334*4d7e907cSAndroid Build Coastguard Worker     *         BAD_DISPLAY when an invalid display handle was passed in.
335*4d7e907cSAndroid Build Coastguard Worker     *         BAD_PARAMETER when mode was not a valid power mode.
336*4d7e907cSAndroid Build Coastguard Worker     *         UNSUPPORTED when mode is not supported on this display.
337*4d7e907cSAndroid Build Coastguard Worker     */
338*4d7e907cSAndroid Build Coastguard Worker    setPowerMode_2_2(Display display, PowerMode mode) generates (Error error);
339*4d7e907cSAndroid Build Coastguard Worker
340*4d7e907cSAndroid Build Coastguard Worker    /**
341*4d7e907cSAndroid Build Coastguard Worker     * Returns the color modes supported on this display.
342*4d7e907cSAndroid Build Coastguard Worker     *
343*4d7e907cSAndroid Build Coastguard Worker     * All devices must support at least ColorMode::NATIVE.
344*4d7e907cSAndroid Build Coastguard Worker     *
345*4d7e907cSAndroid Build Coastguard Worker     * @param display is the display to query.
346*4d7e907cSAndroid Build Coastguard Worker     * @return error is NONE upon success. Otherwise,
347*4d7e907cSAndroid Build Coastguard Worker     *         BAD_DISPLAY when an invalid display handle was passed in.
348*4d7e907cSAndroid Build Coastguard Worker     * @return modes is an array of color modes.
349*4d7e907cSAndroid Build Coastguard Worker     */
350*4d7e907cSAndroid Build Coastguard Worker    getColorModes_2_2(Display display)
351*4d7e907cSAndroid Build Coastguard Worker           generates (Error error,
352*4d7e907cSAndroid Build Coastguard Worker                      vec<ColorMode> modes);
353*4d7e907cSAndroid Build Coastguard Worker
354*4d7e907cSAndroid Build Coastguard Worker    /**
355*4d7e907cSAndroid Build Coastguard Worker     * Returns the render intents supported by the specified display and color
356*4d7e907cSAndroid Build Coastguard Worker     * mode.
357*4d7e907cSAndroid Build Coastguard Worker     *
358*4d7e907cSAndroid Build Coastguard Worker     * For SDR color modes, RenderIntent::COLORIMETRIC must be supported. For
359*4d7e907cSAndroid Build Coastguard Worker     * HDR color modes, RenderIntent::TONE_MAP_COLORIMETRIC must be supported.
360*4d7e907cSAndroid Build Coastguard Worker     *
361*4d7e907cSAndroid Build Coastguard Worker     * @param display is the display to query.
362*4d7e907cSAndroid Build Coastguard Worker     * @param mode is the color mode to query.
363*4d7e907cSAndroid Build Coastguard Worker     * @return error is NONE upon success. Otherwise,
364*4d7e907cSAndroid Build Coastguard Worker     *         BAD_DISPLAY when an invalid display handle was passed in.
365*4d7e907cSAndroid Build Coastguard Worker     *         BAD_PARAMETER when an invalid color mode was passed in.
366*4d7e907cSAndroid Build Coastguard Worker     * @return intents is an array of render intents.
367*4d7e907cSAndroid Build Coastguard Worker     */
368*4d7e907cSAndroid Build Coastguard Worker    getRenderIntents(Display display, ColorMode mode)
369*4d7e907cSAndroid Build Coastguard Worker          generates (Error error,
370*4d7e907cSAndroid Build Coastguard Worker                     vec<RenderIntent> intents);
371*4d7e907cSAndroid Build Coastguard Worker
372*4d7e907cSAndroid Build Coastguard Worker    /**
373*4d7e907cSAndroid Build Coastguard Worker     * Sets the color mode and render intent of the given display.
374*4d7e907cSAndroid Build Coastguard Worker     *
375*4d7e907cSAndroid Build Coastguard Worker     * The color mode and render intent change must take effect on next
376*4d7e907cSAndroid Build Coastguard Worker     * presentDisplay.
377*4d7e907cSAndroid Build Coastguard Worker     *
378*4d7e907cSAndroid Build Coastguard Worker     * All devices must support at least ColorMode::NATIVE and
379*4d7e907cSAndroid Build Coastguard Worker     * RenderIntent::COLORIMETRIC, and displays are assumed to be in this mode
380*4d7e907cSAndroid Build Coastguard Worker     * upon hotplug.
381*4d7e907cSAndroid Build Coastguard Worker     *
382*4d7e907cSAndroid Build Coastguard Worker     * @param display is the display to which the color mode is set.
383*4d7e907cSAndroid Build Coastguard Worker     * @param mode is the color mode to set to.
384*4d7e907cSAndroid Build Coastguard Worker     * @param intent is the render intent to set to.
385*4d7e907cSAndroid Build Coastguard Worker     * @return error is NONE upon success. Otherwise,
386*4d7e907cSAndroid Build Coastguard Worker     *         BAD_DISPLAY when an invalid display handle was passed in.
387*4d7e907cSAndroid Build Coastguard Worker     *         BAD_PARAMETER when mode or intent is invalid
388*4d7e907cSAndroid Build Coastguard Worker     *         UNSUPPORTED when mode or intent is not supported on this
389*4d7e907cSAndroid Build Coastguard Worker     *                     display.
390*4d7e907cSAndroid Build Coastguard Worker     */
391*4d7e907cSAndroid Build Coastguard Worker    setColorMode_2_2(Display display, ColorMode mode, RenderIntent intent)
392*4d7e907cSAndroid Build Coastguard Worker          generates (Error error);
393*4d7e907cSAndroid Build Coastguard Worker
394*4d7e907cSAndroid Build Coastguard Worker    /*
395*4d7e907cSAndroid Build Coastguard Worker     * By default, layer dataspaces are mapped to the current color mode
396*4d7e907cSAndroid Build Coastguard Worker     * colorimetrically with a few exceptions.
397*4d7e907cSAndroid Build Coastguard Worker     *
398*4d7e907cSAndroid Build Coastguard Worker     * When the layer dataspace is a legacy dataspace (see
399*4d7e907cSAndroid Build Coastguard Worker     * [email protected]::Dataspace) and the display render intent is
400*4d7e907cSAndroid Build Coastguard Worker     * RenderIntent::ENHANCE, the pixel values can go through an
401*4d7e907cSAndroid Build Coastguard Worker     * implementation-defined saturation transform before being mapped to the
402*4d7e907cSAndroid Build Coastguard Worker     * current color mode colorimetrically.
403*4d7e907cSAndroid Build Coastguard Worker     *
404*4d7e907cSAndroid Build Coastguard Worker     * Colors that are out of the gamut of the current color mode are
405*4d7e907cSAndroid Build Coastguard Worker     * hard-clipped.
406*4d7e907cSAndroid Build Coastguard Worker     */
407*4d7e907cSAndroid Build Coastguard Worker
408*4d7e907cSAndroid Build Coastguard Worker    /**
409*4d7e907cSAndroid Build Coastguard Worker     * Returns the saturation matrix of the specified legacy dataspace.
410*4d7e907cSAndroid Build Coastguard Worker     *
411*4d7e907cSAndroid Build Coastguard Worker     * The saturation matrix can be used to approximate the legacy dataspace
412*4d7e907cSAndroid Build Coastguard Worker     * saturation transform. It is to be applied on linear pixel values like
413*4d7e907cSAndroid Build Coastguard Worker     * this:
414*4d7e907cSAndroid Build Coastguard Worker     *
415*4d7e907cSAndroid Build Coastguard Worker     *   (in GLSL)
416*4d7e907cSAndroid Build Coastguard Worker     *   linearSrgb = saturationMatrix * linearSrgb;
417*4d7e907cSAndroid Build Coastguard Worker     *
418*4d7e907cSAndroid Build Coastguard Worker     * @param dataspace must be Dataspace::SRGB_LINEAR.
419*4d7e907cSAndroid Build Coastguard Worker     * @return error is NONE upon success. Otherwise,
420*4d7e907cSAndroid Build Coastguard Worker     *         BAD_PARAMETER when an invalid dataspace was passed in.
421*4d7e907cSAndroid Build Coastguard Worker     * @return matrix is the 4x4 column-major matrix used to approximate the
422*4d7e907cSAndroid Build Coastguard Worker     *         legacy dataspace saturation operation. The last row must be
423*4d7e907cSAndroid Build Coastguard Worker     *         [0.0, 0.0, 0.0, 1.0].
424*4d7e907cSAndroid Build Coastguard Worker     */
425*4d7e907cSAndroid Build Coastguard Worker    getDataspaceSaturationMatrix(Dataspace dataspace)
426*4d7e907cSAndroid Build Coastguard Worker                      generates (Error error,
427*4d7e907cSAndroid Build Coastguard Worker                                 float[4][4] matrix);
428*4d7e907cSAndroid Build Coastguard Worker
429*4d7e907cSAndroid Build Coastguard Worker    /**
430*4d7e907cSAndroid Build Coastguard Worker     * Executes commands from the input command message queue. Return values
431*4d7e907cSAndroid Build Coastguard Worker     * generated by the input commands are written to the output command
432*4d7e907cSAndroid Build Coastguard Worker     * message queue in the form of value commands.
433*4d7e907cSAndroid Build Coastguard Worker     *
434*4d7e907cSAndroid Build Coastguard Worker     * @param inLength is the length of input commands.
435*4d7e907cSAndroid Build Coastguard Worker     * @param inHandles is an array of handles referenced by the input
436*4d7e907cSAndroid Build Coastguard Worker     *        commands.
437*4d7e907cSAndroid Build Coastguard Worker     * @return error is NONE upon success. Otherwise,
438*4d7e907cSAndroid Build Coastguard Worker     *         BAD_PARAMETER when inLength is not equal to the length of
439*4d7e907cSAndroid Build Coastguard Worker     *                       commands in the input command message queue.
440*4d7e907cSAndroid Build Coastguard Worker     *         NO_RESOURCES when the output command message queue was not
441*4d7e907cSAndroid Build Coastguard Worker     *                      properly drained.
442*4d7e907cSAndroid Build Coastguard Worker     * @param outQueueChanged indicates whether the output command message
443*4d7e907cSAndroid Build Coastguard Worker     *        queue has changed.
444*4d7e907cSAndroid Build Coastguard Worker     * @param outLength is the length of output commands.
445*4d7e907cSAndroid Build Coastguard Worker     * @param outHandles is an array of handles referenced by the output
446*4d7e907cSAndroid Build Coastguard Worker     *        commands.
447*4d7e907cSAndroid Build Coastguard Worker     */
448*4d7e907cSAndroid Build Coastguard Worker    executeCommands_2_2(uint32_t inLength,
449*4d7e907cSAndroid Build Coastguard Worker                        vec<handle> inHandles)
450*4d7e907cSAndroid Build Coastguard Worker             generates (Error error,
451*4d7e907cSAndroid Build Coastguard Worker                        bool outQueueChanged,
452*4d7e907cSAndroid Build Coastguard Worker                        uint32_t outLength,
453*4d7e907cSAndroid Build Coastguard Worker                        vec<handle> outHandles);
454*4d7e907cSAndroid Build Coastguard Worker};
455