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