| Arun Kumar K.R | 6b353bd | 2012-11-27 17:18:45 -0800 | [diff] [blame] | 1 | /* Copyright (c) 2010-2013, The Linux Foundation. All rights reserved. | 
| Naseer Ahmed | 29a2681 | 2012-06-14 00:56:20 -0700 | [diff] [blame] | 2 |  * | 
 | 3 |  * Redistribution and use in source and binary forms, with or without | 
 | 4 |  * modification, are permitted provided that the following conditions are | 
 | 5 |  * met: | 
 | 6 |  *     * Redistributions of source code must retain the above copyright | 
 | 7 |  *       notice, this list of conditions and the following disclaimer. | 
 | 8 |  *     * Redistributions in binary form must reproduce the above | 
 | 9 |  *       copyright notice, this list of conditions and the following | 
 | 10 |  *       disclaimer in the documentation and/or other materials provided | 
 | 11 |  *       with the distribution. | 
| Arun Kumar K.R | 6b353bd | 2012-11-27 17:18:45 -0800 | [diff] [blame] | 12 |  *     * Neither the name of The Linux Foundation. nor the names of its | 
| Naseer Ahmed | 29a2681 | 2012-06-14 00:56:20 -0700 | [diff] [blame] | 13 |  *       contributors may be used to endorse or promote products derived | 
 | 14 |  *       from this software without specific prior written permission. | 
 | 15 |  * | 
 | 16 |  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED | 
 | 17 |  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | 
 | 18 |  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT | 
 | 19 |  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS | 
 | 20 |  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 
 | 21 |  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 
 | 22 |  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR | 
 | 23 |  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | 
 | 24 |  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE | 
 | 25 |  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN | 
 | 26 |  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
 | 27 |  * | 
 | 28 |  */ | 
 | 29 | #ifndef __c2d2_h_ | 
 | 30 | #define __c2d2_h_ | 
 | 31 |  | 
 | 32 | #ifdef __cplusplus | 
 | 33 | extern "C" { | 
 | 34 | #endif | 
 | 35 |  | 
 | 36 | #ifndef C2D_API | 
 | 37 | #define C2D_API /* define API export as needed */ | 
 | 38 | #endif | 
 | 39 | #if !defined(int32) && !defined(_INT32_DEFINED) | 
 | 40 | typedef int                     int32; | 
 | 41 | #define _INT32_DEFINED | 
 | 42 | #endif | 
 | 43 | #if !defined(uint32) && !defined(_UINT32_DEFINED) | 
 | 44 | typedef unsigned int            uint32; | 
 | 45 | #define _UINT32_DEFINED | 
 | 46 | #endif | 
 | 47 |  | 
 | 48 | /*****************************************************************************/ | 
 | 49 | /*********************** Blit definitions *****************************/ | 
 | 50 | /*****************************************************************************/ | 
 | 51 |  | 
 | 52 | /* Status codes, returned by any blit function */ | 
 | 53 | typedef enum { | 
 | 54 |     C2D_STATUS_OK              = 0, | 
 | 55 |     C2D_STATUS_NOT_SUPPORTED   = 1, | 
 | 56 |     C2D_STATUS_OUT_OF_MEMORY   = 2, | 
 | 57 |     C2D_STATUS_INVALID_PARAM   = 3, | 
 | 58 |     C2D_STATUS_SURFACE_IN_USE  = 4, | 
 | 59 | } C2D_STATUS; | 
 | 60 |  | 
 | 61 |  | 
 | 62 | /* Definitions of color format modes, used together with color formats */ | 
 | 63 | typedef enum { | 
 | 64 |     C2D_FORMAT_PACK_INTO_32BIT   = (1 <<  8), /* pack into dword if set */ | 
 | 65 |     C2D_FORMAT_SWAP_ENDIANNESS   = (1 <<  9), /* swaps the order */ | 
 | 66 |     C2D_FORMAT_LINEAR_SPACE      = (1 << 10), /* linear color space */ | 
 | 67 |     C2D_FORMAT_PREMULTIPLIED     = (1 << 11), /* alpha premultiplied */ | 
 | 68 |     C2D_FORMAT_INVERT_ALPHA      = (1 << 12), /* inverts alpha */ | 
 | 69 |     C2D_FORMAT_DISABLE_ALPHA     = (1 << 13), /* disables alpha */ | 
 | 70 |     C2D_FORMAT_INTERLACED        = (1 << 14), /* YUV line-interlaced */ | 
 | 71 |     C2D_FORMAT_TRANSPARENT       = (1 << 15), /* YUV 1-bit alpha in Y */ | 
 | 72 |     C2D_FORMAT_MACROTILED        = (1 << 16), /* tiled in macro level */ | 
 | 73 |     C2D_FORMAT_TILED_4x4         = (1 << 17), /* 4x4 tiled format */ | 
 | 74 |     C2D_FORMAT_SWAP_RB           = (1 << 18), /* Swap R & B color components */ | 
 | 75 | } C2D_FORMAT_MODE; | 
 | 76 |  | 
 | 77 | /* Definitions of supported RGB formats, used in C2D_RGB_SURFACE_DEF. | 
 | 78 |  * The bits of each color channel are packed into a machine word | 
 | 79 |  * representing a single pixel from left to right (MSB to LSB) in the | 
 | 80 |  * order indicated by format name. For the sub-byte formats the pixels | 
 | 81 |  * are packed into bytes from left to right (MSbit to LSBit). | 
 | 82 |  * If the C2D_FORMAT_PACK_INTO_32BIT bit is set, the minimal | 
 | 83 |  * machine word used for pixel storage is 32-bit and the whole word | 
 | 84 |  * is reversed if endianness is swapped. | 
 | 85 |  * If the C2D_FORMAT_SWAP_ENDIANNESS bit is set, the order within a | 
 | 86 |  * minimal machine word representing a pixel | 
 | 87 |  * is reversed for both sub-byte and multi-byte formats. | 
 | 88 |  * If the C2D_FORMAT_LINEAR_SPACE bit is set, the color space of | 
 | 89 |  * the formats below is considered linear, if applicable. | 
 | 90 |  * If the C2D_FORMAT_PREMULTIPLIED bit is set, the color channels | 
 | 91 |  * are premultiplied with the alpha, if applicable. | 
 | 92 |  * If the C2D_FORMAT_INVERT_ALPHA bit is set, the alpha interpretation | 
 | 93 |  * is inverted: 0 - opaque, 1 - transparent, if applicable. | 
 | 94 |  * If the C2D_FORMAT_DISABLE_ALPHA bit is set, the alpha channel serves | 
 | 95 |  * as a placeholder and is ignored during blit, if applicable. | 
 | 96 |  * If the C2D_FORMAT_MACROTILED bit is set, the surface is in the | 
 | 97 |  * tiled format : 64x32 for 8bpp, 32x32 for 16bpp formats  */ | 
 | 98 | typedef enum { | 
 | 99 |     C2D_COLOR_FORMAT_1            = 0,   /* 1-bit alpha/color expansion */ | 
 | 100 |  | 
 | 101 |     C2D_COLOR_FORMAT_2_PALETTE    = 1,   /* 2-bit indices for palette */ | 
 | 102 |     C2D_COLOR_FORMAT_4_PALETTE    = 2,   /* 4-bit indices for palette */ | 
 | 103 |     C2D_COLOR_FORMAT_8_PALETTE    = 3,   /* 8-bit indices for palette */ | 
 | 104 |  | 
 | 105 |     C2D_COLOR_FORMAT_2_L          = 4,   /* 2-bit grayscale */ | 
 | 106 |     C2D_COLOR_FORMAT_4_L          = 5,   /* 4-bit grayscale */ | 
 | 107 |     C2D_COLOR_FORMAT_8_L          = 6,   /* 8-bit grayscale */ | 
 | 108 |  | 
 | 109 |     C2D_COLOR_FORMAT_2_A          = 7,   /* 2-bit alpha only */ | 
 | 110 |     C2D_COLOR_FORMAT_4_A          = 8,   /* 4-bit alpha only */ | 
 | 111 |     C2D_COLOR_FORMAT_8_A          = 9,   /* 8-bit alpha only */ | 
 | 112 |  | 
 | 113 |     C2D_COLOR_FORMAT_444_RGB      = 10,  /* 12-bit colors */ | 
 | 114 |     C2D_COLOR_FORMAT_565_RGB      = 11,  /* 16-bit colors */ | 
 | 115 |     C2D_COLOR_FORMAT_888_RGB      = 12,  /* 24-bit colors */ | 
 | 116 |  | 
 | 117 |     C2D_COLOR_FORMAT_1555_ARGB    = 13,  /* 16-bit colors (1-bit alpha) */ | 
 | 118 |     C2D_COLOR_FORMAT_4444_ARGB    = 14,  /* 16-bit colors (4-bit alpha) */ | 
 | 119 |     C2D_COLOR_FORMAT_8565_ARGB    = 15,  /* 24-bit colors (8-bit alpha) */ | 
 | 120 |     C2D_COLOR_FORMAT_8888_ARGB    = 16,  /* 32-bit colors (8-bit alpha) */ | 
 | 121 |  | 
 | 122 |     C2D_COLOR_FORMAT_5551_RGBA    = 17,  /* 16-bit colors (1-bit alpha) */ | 
 | 123 |     C2D_COLOR_FORMAT_4444_RGBA    = 18,  /* 16-bit colors (4-bit alpha) */ | 
 | 124 |     C2D_COLOR_FORMAT_5658_RGBA    = 19,  /* 24-bit colors (8-bit alpha) */ | 
 | 125 |     C2D_COLOR_FORMAT_8888_RGBA    = 20,  /* 32-bit colors (8-bit alpha) */ | 
 | 126 |  | 
 | 127 |     /* derived RGB color formats (base format + mode bits) */ | 
 | 128 |  | 
 | 129 | } C2D_RGB_FORMAT; | 
 | 130 |  | 
 | 131 | /* Definitions of supported YUV formats, used in C2D_YUV_SURFACE_DEF. | 
 | 132 |  * Each of Y,U,V channels usually takes 1 byte and therefore is | 
 | 133 |  * individually addressable. The definitions below show how Y,U,V | 
 | 134 |  * channels are packed into macropixels for each particular format. | 
 | 135 |  * The order is from left (smaller byte addresses) to right (larger | 
 | 136 |  * byte addresses). The first three digits (4xx) denote the chroma | 
 | 137 |  * subsampling in standard YUV notation. The digits in the macropixel | 
 | 138 |  * denote that the whole block (from the previous digit or from the | 
 | 139 |  * beginning) has to be repeated the number of times. Underscores | 
 | 140 |  * between Y,U,V channels are used to describe separate planes for | 
 | 141 |  * planar YUV formats. Formats are mapped to numbers so that future | 
 | 142 |  * versions with various YUV permutations are easy to add. | 
 | 143 |  * If the C2D_FORMAT_INTERLACED bit is set, the line order is | 
 | 144 |  * interlaced: 0,2,4,...1,3,5... if applicable. | 
 | 145 |  * If the C2D_FORMAT_TRANSPARENT bit is set, the least significant | 
 | 146 |  * bit of Y channel serves as alpha: 0 - transparent, 1 - opaque. */ | 
 | 147 | typedef enum { | 
 | 148 |     C2D_COLOR_FORMAT_411_YYUYYV   = 110, /* packed, 12-bit         */ | 
 | 149 |     C2D_COLOR_FORMAT_411_YUYYVY   = 111, /* packed, 12-bit         */ | 
 | 150 |     C2D_COLOR_FORMAT_411_UYYVYY   = 112, /* packed, 12-bit, "Y411" */ | 
 | 151 |     C2D_COLOR_FORMAT_411_YUYV2Y4  = 116, /* packed, 12-bit         */ | 
 | 152 |     C2D_COLOR_FORMAT_411_UYVY2Y4  = 117, /* packed, 12-bit, "Y41P" */ | 
 | 153 |  | 
 | 154 |     C2D_COLOR_FORMAT_422_YUYV     = 120, /* packed, 16-bit, "YUY2" */ | 
 | 155 |     C2D_COLOR_FORMAT_422_UYVY     = 121, /* packed, 16-bit, "UYVY" */ | 
 | 156 |     C2D_COLOR_FORMAT_422_YVYU     = 122, /* packed, 16-bit, "YVYU" */ | 
 | 157 |     C2D_COLOR_FORMAT_422_VYUY     = 123, /* packed, 16-bit         */ | 
 | 158 |  | 
 | 159 |     C2D_COLOR_FORMAT_444_YUV      = 130, /* packed, 24-bit         */ | 
 | 160 |     C2D_COLOR_FORMAT_444_UYV      = 131, /* packed, 24-bit, "IYU2" */ | 
 | 161 |     C2D_COLOR_FORMAT_444_AYUV     = 136, /* packed, 24-bit, "AYUV" */ | 
 | 162 |  | 
 | 163 |     C2D_COLOR_FORMAT_410_Y_UV     = 150, /* planar, Y + interleaved UV */ | 
 | 164 |     C2D_COLOR_FORMAT_411_Y_UV     = 151, /* planar, Y + interleaved UV */ | 
 | 165 |     C2D_COLOR_FORMAT_420_Y_UV     = 152, /* planar, Y + interleaved UV */ | 
 | 166 |     C2D_COLOR_FORMAT_422_Y_UV     = 153, /* planar, Y + interleaved UV */ | 
 | 167 |     C2D_COLOR_FORMAT_444_Y_UV     = 154, /* planar, Y + interleaved UV */ | 
 | 168 |  | 
 | 169 |     C2D_COLOR_FORMAT_410_Y_VU     = 160, /* planar, Y + interleaved VU */ | 
 | 170 |     C2D_COLOR_FORMAT_411_Y_VU     = 161, /* planar, Y + interleaved VU */ | 
 | 171 |     C2D_COLOR_FORMAT_420_Y_VU     = 162, /* planar, Y + interleaved VU */ | 
 | 172 |     C2D_COLOR_FORMAT_422_Y_VU     = 163, /* planar, Y + interleaved VU */ | 
 | 173 |     C2D_COLOR_FORMAT_444_Y_VU     = 164, /* planar, Y + interleaved VU */ | 
 | 174 |  | 
 | 175 |     C2D_COLOR_FORMAT_410_Y_U_V    = 170, /* planar, Y + U + V separate */ | 
 | 176 |     C2D_COLOR_FORMAT_411_Y_U_V    = 171, /* planar, Y + U + V separate */ | 
 | 177 |     C2D_COLOR_FORMAT_420_Y_V_U    = 172, /* planar, Y + V + U separate */ | 
 | 178 |     C2D_COLOR_FORMAT_420_Y_U_V    = 173, /* planar, Y + U + V separate */ | 
 | 179 |     C2D_COLOR_FORMAT_422_Y_U_V    = 174, /* planar, Y + U + V separate */ | 
 | 180 |     C2D_COLOR_FORMAT_444_Y_U_V    = 175, /* planar, Y + U + V separate */ | 
 | 181 |  | 
 | 182 |     C2D_COLOR_FORMAT_800_Y        = 190, /* planar, Y only, grayscale */ | 
 | 183 |  | 
 | 184 |     /* derived YUV color formats (base format + mode bits), FOURCC */ | 
 | 185 |  | 
 | 186 |     C2D_COLOR_FORMAT_411_Y411     = 112, | 
 | 187 |     C2D_COLOR_FORMAT_411_Y41P     = 117, | 
 | 188 |     C2D_COLOR_FORMAT_411_IY41     = 117 | (1 << 14), | 
 | 189 |     C2D_COLOR_FORMAT_411_Y41T     = 117 | (1 << 15), | 
 | 190 |  | 
 | 191 |     C2D_COLOR_FORMAT_422_YUY2     = 120, | 
 | 192 |     C2D_COLOR_FORMAT_422_IUYV     = 121 | (1 << 14), | 
 | 193 |     C2D_COLOR_FORMAT_422_Y42T     = 121 | (1 << 15), | 
 | 194 |     C2D_COLOR_FORMAT_444_IYU2     = 131, | 
 | 195 |  | 
 | 196 |     C2D_COLOR_FORMAT_420_NV12     = 152, | 
 | 197 |     C2D_COLOR_FORMAT_420_NV21     = 162, | 
 | 198 |  | 
 | 199 |     C2D_COLOR_FORMAT_410_YUV9     = 170, | 
 | 200 |     C2D_COLOR_FORMAT_410_YVU9     = 170, | 
 | 201 |     C2D_COLOR_FORMAT_411_Y41B     = 171, | 
 | 202 |     C2D_COLOR_FORMAT_420_YV12     = 172, | 
 | 203 |     C2D_COLOR_FORMAT_420_IYUV     = 173, | 
 | 204 |     C2D_COLOR_FORMAT_420_I420     = 173, | 
 | 205 |     C2D_COLOR_FORMAT_422_YV16     = 174, | 
 | 206 |     C2D_COLOR_FORMAT_422_Y42B     = 174, | 
 | 207 |  | 
 | 208 |     C2D_COLOR_FORMAT_800_Y800     = 190, | 
 | 209 |  | 
 | 210 | } C2D_YUV_FORMAT; | 
 | 211 |  | 
 | 212 |  | 
 | 213 | /* Configuration bits, used in the config_mask field of C2D_OBJECT struct */ | 
 | 214 | typedef enum { | 
 | 215 |     C2D_SOURCE_RECT_BIT      = (1 <<  0), /* enables source_rect field */ | 
 | 216 |     C2D_MIRROR_H_BIT         = (1 <<  1), /* enables horizontal flipping */ | 
 | 217 |     C2D_MIRROR_V_BIT         = (1 <<  2), /* enables vertical flipping */ | 
 | 218 |     C2D_SOURCE_TILE_BIT      = (1 <<  3), /* enables source surface tiling */ | 
 | 219 |     C2D_TARGET_RECT_BIT      = (1 <<  4), /* enables target_rect field */ | 
 | 220 |     C2D_ROTATE_BIT           = (1 <<  5), /* enables all rotation fields */ | 
 | 221 |     C2D_SCISSOR_RECT_BIT     = (1 <<  6), /* enables scissor_rect field */ | 
 | 222 |     C2D_MASK_SURFACE_BIT     = (1 <<  7), /* enables mask_surface_id field */ | 
 | 223 |     C2D_MASK_ALIGN_BIT       = (1 <<  8), /* aligns mask to source_rect */ | 
 | 224 |     C2D_MASK_SCALE_BIT       = (1 <<  9), /* enables mask surface scaling */ | 
 | 225 |     C2D_MASK_TILE_BIT        = (1 << 10), /* enables mask surface tiling */ | 
 | 226 |     C2D_GLOBAL_ALPHA_BIT     = (1 << 11), /* enables global_alpha field */ | 
 | 227 |     C2D_COLOR_KEY_BIT        = (1 << 12), /* enables color_key field */ | 
 | 228 |     C2D_NO_PIXEL_ALPHA_BIT   = (1 << 13), /* disables source alpha channel */ | 
 | 229 |     C2D_NO_BILINEAR_BIT      = (1 << 14), /* disables bilinear on scaling */ | 
 | 230 |     C2D_NO_ANTIALIASING_BIT  = (1 << 15), /* disables antialiasing on edges */ | 
 | 231 |     C2D_DRAW_LINE_BIT        = (1 << 16), /* enables line drawing with source rectangle */ | 
 | 232 |     C2D_DRAW_LINE_NOLAST     = (1 << 17), /* disable last pixel draw for line */ | 
 | 233 | } C2D_SOURCE_CONFIG; | 
 | 234 |  | 
| Arun Kumar K.R | 6b353bd | 2012-11-27 17:18:45 -0800 | [diff] [blame] | 235 |  | 
| Naseer Ahmed | 29a2681 | 2012-06-14 00:56:20 -0700 | [diff] [blame] | 236 | /* Target configuration bits, defines rotation + mirroring. | 
 | 237 |  * Mirror is applied prior to rotation if enabled. */ | 
 | 238 | typedef enum { | 
 | 239 |     C2D_TARGET_MIRROR_H        = (1 << 0), /* horizontal flip */ | 
 | 240 |     C2D_TARGET_MIRROR_V        = (1 << 1), /* vertical flip */ | 
 | 241 |     C2D_TARGET_ROTATE_0        = (0 << 2), /* no rotation */ | 
 | 242 |     C2D_TARGET_ROTATE_90       = (1 << 2), /* 90 degree rotation */ | 
 | 243 |     C2D_TARGET_ROTATE_180      = (2 << 2), /* 180 degree rotation */ | 
 | 244 |     C2D_TARGET_ROTATE_270      = (3 << 2), /* 270 degree rotation, 90 + 180 */ | 
 | 245 |     C2D_TARGET_MASK_ALIGN      = (1 << 4), /* aligns mask to target scissor */ | 
 | 246 |     C2D_TARGET_MASK_SCALE      = (1 << 5), /* enables mask scaling */ | 
 | 247 |     C2D_TARGET_MASK_TILE       = (1 << 6), /* enables mask tiling */ | 
 | 248 |     C2D_TARGET_COLOR_KEY       = (1 << 7), /* enables target_color_key */ | 
 | 249 |     C2D_TARGET_NO_PIXEL_ALPHA  = (1 << 8), /* disables target alpha channel */ | 
 | 250 | } C2D_TARGET_CONFIG; | 
 | 251 |  | 
 | 252 | #define C2D_TARGET_ROTATION_MASK  (C2D_TARGET_ROTATE_90*3) | 
 | 253 |  | 
 | 254 | /* Additional blend modes, can be used with both source and target configs. | 
 | 255 |    If none of the below is set, the default "SRC over DST" is applied. */ | 
 | 256 | typedef enum { | 
 | 257 |     C2D_ALPHA_BLEND_SRC_OVER   = (0  << 20), /* Default, Porter-Duff "SRC over DST" */ | 
 | 258 |     C2D_ALPHA_BLEND_SRC        = (1  << 20), /* Porter-Duff "SRC" */ | 
 | 259 |     C2D_ALPHA_BLEND_SRC_IN     = (2  << 20), /* Porter-Duff "SRC in DST" */ | 
 | 260 |     C2D_ALPHA_BLEND_DST_IN     = (3  << 20), /* Porter-Duff "DST in SRC" */ | 
 | 261 |     C2D_ALPHA_BLEND_SRC_OUT    = (4  << 20), /* Porter-Duff "SRC out DST" */ | 
 | 262 |     C2D_ALPHA_BLEND_DST_OUT    = (5  << 20), /* Porter-Duff "DST out SRC" */ | 
 | 263 |     C2D_ALPHA_BLEND_DST_OVER   = (6  << 20), /* Porter-Duff "DST over SRC" */ | 
 | 264 |     C2D_ALPHA_BLEND_SRC_ATOP   = (7  << 20), /* Porter-Duff "SRC ATOP" */ | 
 | 265 |     C2D_ALPHA_BLEND_DST_ATOP   = (8  << 20), /* Porter-Duff "DST ATOP" */ | 
 | 266 |     C2D_ALPHA_BLEND_XOR        = (9  << 20), /* Xor */ | 
 | 267 |     C2D_ALPHA_BLEND_MULTIPLY   = (10 << 20), /* OpenVG "MULTIPLY" */ | 
 | 268 |     C2D_ALPHA_BLEND_SCREEN     = (11 << 20), /* OpenVG "SCREEN" */ | 
 | 269 |     C2D_ALPHA_BLEND_DARKEN     = (12 << 20), /* OpenVG "DARKEN" */ | 
 | 270 |     C2D_ALPHA_BLEND_LIGHTEN    = (13 << 20), /* OpenVG "LIGHTEN" */ | 
 | 271 |     C2D_ALPHA_BLEND_ADDITIVE   = (14 << 20), /* OpenVG "ADDITIVE" */ | 
 | 272 |     C2D_ALPHA_BLEND_DIRECT     = (15 << 20), /* Direct alpha blitting */ | 
 | 273 |     C2D_ALPHA_BLEND_INVERTC    = (16 << 20), /* Invert color */ | 
 | 274 |     C2D_ALPHA_BLEND_NONE       = (1  << 25), /* disables alpha blending */ | 
 | 275 | } C2D_ALPHA_BLEND_MODE; | 
 | 276 |  | 
| Arun Kumar K.R | 6b353bd | 2012-11-27 17:18:45 -0800 | [diff] [blame] | 277 | /* Configuration bits, used in the config_mask field of C2D_OBJECT struct */ | 
 | 278 | typedef enum { | 
 | 279 |     C2D_OVERRIDE_GLOBAL_TARGET_ROTATE_CONFIG = (1 << 27), /* Overrides TARGET Config */ | 
 | 280 |     C2D_OVERRIDE_TARGET_ROTATE_0             = (0 << 28), /* no rotation             */ | 
 | 281 |     C2D_OVERRIDE_TARGET_ROTATE_90            = (1 << 28), /* 90 degree rotation      */ | 
 | 282 |     C2D_OVERRIDE_TARGET_ROTATE_180           = (2 << 28), /* 180 degree rotation     */ | 
 | 283 |     C2D_OVERRIDE_TARGET_ROTATE_270           = (3 << 28), /* 270 degree rotation     */ | 
 | 284 | } C2D_SOURCE_TARGET_CONFIG; | 
 | 285 |  | 
 | 286 | #define C2D_OVERRIDE_SOURCE_CONFIG_TARGET_ROTATION_SHIFT_MASK  28 | 
 | 287 | #define C2D_OVERRIDE_TARGET_CONFIG_TARGET_ROTATION_SHIFT_MASK  2 | 
 | 288 |  | 
| Naseer Ahmed | 29a2681 | 2012-06-14 00:56:20 -0700 | [diff] [blame] | 289 |  | 
 | 290 | /* Surface caps enumeration */ | 
 | 291 | typedef enum { | 
 | 292 |     C2D_SOURCE          = (1 << 0), /* allows to use as a source */ | 
 | 293 |     C2D_TARGET          = (1 << 1), /* allows to use as a target */ | 
 | 294 |     C2D_MASK            = (1 << 2), /* allows to use as a mask */ | 
 | 295 |     C2D_PALETTE         = (1 << 3), /* allows to use as a palette */ | 
 | 296 | } C2D_SURFACE_BITS; | 
 | 297 |  | 
 | 298 | /* Surface type enumeration */ | 
 | 299 | typedef enum { | 
 | 300 |     C2D_SURFACE_RGB_HOST        = 1, /* Host memory RGB surface */ | 
 | 301 |     C2D_SURFACE_RGB_EXT         = 2, /* External memory RGB surface */ | 
 | 302 |     C2D_SURFACE_YUV_HOST        = 3, /* Host memory YUV surface */ | 
 | 303 |     C2D_SURFACE_YUV_EXT         = 4, /* External memory YUV surface */ | 
 | 304 |     C2D_SURFACE_WITH_PHYS       = (1<<3), /* physical address already mapped */ | 
 | 305 |                                         /* this bit is valid with HOST types */ | 
 | 306 |     C2D_SURFACE_WITH_PHYS_DUMMY = (1<<4), /* physical address already mapped */ | 
 | 307 |                                         /* this bit is valid with HOST types */ | 
 | 308 | } C2D_SURFACE_TYPE; | 
 | 309 |  | 
 | 310 | /* Structure for registering a RGB buffer as a blit surface */ | 
 | 311 | typedef struct { | 
 | 312 |     uint32 format;   /* RGB color format plus additional mode bits */ | 
 | 313 |     uint32 width;    /* defines width in pixels */ | 
 | 314 |     uint32 height;   /* defines height in pixels */ | 
 | 315 |     void  *buffer;   /* pointer to the RGB buffer */ | 
 | 316 |     void  *phys;     /* physical address */ | 
 | 317 |     int32  stride;   /* defines stride in bytes, negative stride is allowed */ | 
 | 318 | } C2D_RGB_SURFACE_DEF; | 
 | 319 |  | 
 | 320 | /* Structure for registering a YUV plane(s) as a blit surface */ | 
 | 321 | typedef struct { | 
 | 322 |     uint32 format;   /* YUV color format plus additional mode bits */ | 
 | 323 |     uint32 width;    /* defines width in pixels */ | 
 | 324 |     uint32 height;   /* defines height in pixels */ | 
 | 325 |     void  *plane0;  /* holds the whole buffer if YUV format is not planar */ | 
 | 326 |     void  *phys0;   /* physical address */ | 
 | 327 |     int32  stride0; /* stride in bytes if YUV format is not planar */ | 
 | 328 |     void  *plane1;  /* holds UV or VU plane for planar interleaved */ | 
 | 329 |     void  *phys1;   /* physical address */ | 
 | 330 |     int32  stride1; /* stride for UV or VU plane for planar interleaved */ | 
 | 331 |     void  *plane2;  /* holds the 3. plane, ignored if YUV format is not planar */ | 
 | 332 |     void  *phys2;    /* physical address */ | 
 | 333 |     int32  stride2; /* stride for the 3. plane, ignored if YUV format is not planar */ | 
 | 334 | } C2D_YUV_SURFACE_DEF; | 
 | 335 |  | 
 | 336 |  | 
 | 337 | /* Rectangle definition */ | 
 | 338 | typedef struct { | 
 | 339 |     int32 x;        /* upper-left x */ | 
 | 340 |     int32 y;        /* upper-left y */ | 
 | 341 |     int32 width;    /* width */ | 
 | 342 |     int32 height;   /* height */ | 
 | 343 | } C2D_RECT; | 
 | 344 |  | 
 | 345 | /* C2D_OBJECT encapsulates the blit parameters for a source surface. | 
 | 346 |  * The fg_color defines color in target format for bits equal to 1 | 
 | 347 |  * in the source C2D_COLOR_FORMAT_1 format. It also defines rendering | 
 | 348 |  * color for all alpha-only source formats. If the surface_id is 0 | 
 | 349 |  * the fg_color defines a constant fill color used instead of the surface. | 
 | 350 |  * The bg_color defines color in target format for bits equal to 0 | 
 | 351 |  * in the source C2D_COLOR_FORMAT_1 format, otherwise both are ignored. | 
 | 352 |  * The palette_id is used for all palette source formats, otherwise ignored. | 
 | 353 |  | 
 | 354 |  * The source_rect first defines the content of the source surface, | 
 | 355 |  * it is then horizontally/vertically flipped if C2D_MIRROR_*_BIT is set, | 
 | 356 |  * then scaled with bilinear interpolation to exactly fit target_rect | 
 | 357 |  * or repeated across target_rect if C2D_SOURCE_TILE_BIT is set, | 
 | 358 |  * target_rect is then rotated clockwise by an arbitrary angle in degrees | 
 | 359 |  * around the rot_orig_x/y, defined relative to target_rect's top left point, | 
 | 360 |  * and then clipped to scissor_rect defined in target coordinate system. | 
 | 361 |  | 
 | 362 |  * Finally alpha blending is applied before pixels get written into the target. | 
 | 363 |  * Surface's pixel alpha is combined with mask alpha and with global alpha. | 
 | 364 |  * Mask surface follows all transformations applied to the source surface. | 
 | 365 |  * Source color key defines transparent color, applied together with alpha. */ | 
 | 366 | typedef struct C2D_OBJECT_STR { | 
 | 367 |     uint32 surface_id;      /* source surface */ | 
 | 368 |  | 
 | 369 |     uint32 fg_color;        /* foreground color */ | 
 | 370 |     uint32 bg_color;        /* background color */ | 
 | 371 |     uint32 palette_id;      /* one-dimensional horizontal palette surface */ | 
 | 372 |  | 
 | 373 |     uint32 config_mask;     /* defines which fields below are enabled */ | 
 | 374 |  | 
 | 375 |     C2D_RECT source_rect;  /* region of the source surface,   16.16 fp */ | 
 | 376 |     C2D_RECT target_rect;  /* position and scaling in target, 16.16 fp */ | 
 | 377 |  | 
 | 378 |     int32 rot_orig_x;       /* rotation origin relative to target_rect's... */ | 
 | 379 |     int32 rot_orig_y;       /* ...top left point,     both are 16.16 fp */ | 
 | 380 |     int32 rotation;         /* clock-wise rotation in degrees, 16.16 fp */ | 
 | 381 |  | 
 | 382 |     C2D_RECT scissor_rect; /* defines the clip rectangle in target surface */ | 
 | 383 |  | 
 | 384 |     uint32 mask_surface_id; /* source alpha-mask surface */ | 
 | 385 |     uint32 global_alpha;    /* 0 = fully transparent, 255 = fully opaque */ | 
 | 386 |     uint32 color_key;       /* transparent color for the source surface */ | 
 | 387 |  | 
 | 388 |     struct C2D_OBJECT_STR *next; /* pointer to the next object or NULL */ | 
 | 389 | } C2D_OBJECT; | 
 | 390 |  | 
| Arun Kumar K.R | eb128aa | 2012-12-18 12:38:28 -0800 | [diff] [blame] | 391 | /* Configuration bits, driver capabilities used by 2Dapplications */ | 
 | 392 | typedef enum { | 
 | 393 |     C2D_DRIVER_SUPPORTS_GLOBAL_ALPHA_OP           = (1 << 0), | 
 | 394 |     C2D_DRIVER_SUPPORTS_TILE_OP                   = (1 << 1), | 
 | 395 |     C2D_DRIVER_SUPPORTS_COLOR_KEY_OP              = (1 << 2), | 
 | 396 |     C2D_DRIVER_SUPPORTS_NO_PIXEL_ALPHA_OP         = (1 << 3), | 
 | 397 |     C2D_DRIVER_SUPPORTS_TARGET_ROTATE_OP          = (1 << 4), | 
 | 398 |     C2D_DRIVER_SUPPORTS_ANTI_ALIASING_OP          = (1 << 5), /* antialiasing */ | 
 | 399 |     C2D_DRIVER_SUPPORTS_BILINEAR_FILTER_OP        = (1 << 6), | 
 | 400 |     C2D_DRIVER_SUPPORTS_LENS_CORRECTION_OP        = (1 << 7), | 
 | 401 |     C2D_DRIVER_SUPPORTS_OVERRIDE_TARGET_ROTATE_OP = (1 << 8), | 
 | 402 |     C2D_DRIVER_SUPPORTS_SHADER_BLOB_OP            = (1 << 9), | 
 | 403 |     C2D_DRIVER_SUPPORTS_MASK_SURFACE_OP           = (1 << 10), /* mask surface */ | 
 | 404 |     C2D_DRIVER_SUPPORTS_MIRROR_H_OP               = (1 << 11), /* horizontal flip */ | 
 | 405 |     C2D_DRIVER_SUPPORTS_MIRROR_V_OP               = (1 << 12), /* vertical flip */ | 
 | 406 |     C2D_DRIVER_SUPPORTS_SCISSOR_RECT_OP           = (1 << 13), | 
 | 407 |     C2D_DRIVER_SUPPORTS_SOURCE_RECT_OP            = (1 << 14), | 
 | 408 |     C2D_DRIVER_SUPPORTS_TARGET_RECT_OP            = (1 << 15), | 
 | 409 |     C2D_DRIVER_SUPPORTS_ROTATE_OP                 = (1 << 16), /* all rotations */ | 
 | 410 |     C2D_DRIVER_SUPPORTS_FLUSH_WITH_FENCE_FD_OP    = (1 << 17), /* all rotations */ | 
 | 411 |     C2D_DRIVER_SUPPORTS_ALL_CAPABILITIES_OP       = ((0xFFFFFFFF) >> (31 - 17)) /* mask for all capabilities supported */ | 
 | 412 | } C2D_DRIVER_CAPABILITIES; | 
 | 413 |  | 
 | 414 | /* 2D driver workaround bits used by the 2D applications */ | 
 | 415 | typedef enum { | 
 | 416 |     C2D_DRIVER_WORKAROUND_NONE  = 0, /* NO workaround */ | 
 | 417 |     C2D_DRIVER_WORKAROUND_SWAP_UV_FOR_YUV_TARGET  = (1 << 0), /* Swap UV when this flag set */ | 
 | 418 | } C2D_DRIVER_WORKAROUND; | 
 | 419 |  | 
 | 420 | /* Structure to query Driver information */ | 
 | 421 | typedef struct { | 
 | 422 |     uint32 capabilities_mask; | 
 | 423 |     uint32 workaround_mask; | 
 | 424 |     uint32 reserved1; | 
 | 425 |     uint32 reserved2; | 
 | 426 |     uint32 reserved3; | 
 | 427 | } C2D_DRIVER_INFO; | 
 | 428 |  | 
 | 429 | /* Structure to query Driver information */ | 
 | 430 | typedef struct { | 
 | 431 |     uint32          max_surface_template_needed; | 
 | 432 |     uint32          reserved1; | 
 | 433 |     uint32          reserved2; | 
 | 434 |     uint32          reserved3; | 
 | 435 | } C2D_DRIVER_SETUP_INFO; | 
| Naseer Ahmed | 29a2681 | 2012-06-14 00:56:20 -0700 | [diff] [blame] | 436 |  | 
 | 437 | /*****************************************************************************/ | 
 | 438 | /**************************** C2D API 2.0 ********************************/ | 
 | 439 | /*****************************************************************************/ | 
 | 440 |  | 
 | 441 | /****************************************************************************** | 
 | 442 |  * Functions to create/destroy surfaces */ | 
 | 443 |  | 
 | 444 | /* Creates a generic blit surface according to its type. | 
 | 445 |  * Pass a combination of desired surface bits according to planned usage. | 
 | 446 |  * Accepted values for surface_bits may include bits from C2D_SURFACE_BITS, | 
 | 447 |  * and also from C2D_DISPLAY for compatibility with HW display controller. | 
 | 448 |  * For host memory types the memory is preallocated outside the API | 
 | 449 |  * and should remain valid until surface is destroyed. | 
 | 450 |  * For external memory types the memory is allocated within API. | 
 | 451 |  * On success, the non-zero surface identifier is returned. | 
 | 452 |  * All numbers greater that 0 are valid surface identifiers, 0 is invalid. | 
 | 453 |  | 
 | 454 |  * Host memory RGB surface: | 
 | 455 |  * surface_type       = C2D_SURFACE_RGB_HOST | 
 | 456 |  * surface_definition = C2D_RGB_SURFACE_DEF | 
 | 457 |  * all fields in definition structure should be set | 
 | 458 |  | 
 | 459 |  * External memory RGB surface: | 
 | 460 |  * surface_type       = C2D_SURFACE_RGB_EXT | 
 | 461 |  * surface_definition = C2D_RGB_SURFACE_DEF | 
 | 462 |  * buffer field in definition structure is ignored | 
 | 463 |  | 
 | 464 |  * Host memory YUV surface: | 
 | 465 |  * surface_type       = C2D_SURFACE_YUV_HOST | 
 | 466 |  * surface_definition = C2D_YUV_SURFACE_DEF | 
 | 467 |  * one or all plane and stride fields in definition structure | 
 | 468 |  * should be set depending on whether the format is planar or not | 
 | 469 |  | 
 | 470 |  * External memory YUV surface: | 
 | 471 |  * surface_type       = C2D_SURFACE_YUV_EXT | 
 | 472 |  * surface_definition = C2D_YUV_SURFACE_DEF | 
 | 473 |  * all plane and stride fields in definition structure are ignored */ | 
 | 474 | C2D_API C2D_STATUS c2dCreateSurface( uint32 *surface_id, | 
 | 475 |                          uint32 surface_bits, | 
 | 476 |                          C2D_SURFACE_TYPE surface_type, | 
 | 477 |                          void *surface_definition ); | 
 | 478 |  | 
 | 479 | /* Requests properties of the specified surface. */ | 
 | 480 | C2D_API C2D_STATUS c2dQuerySurface( uint32 surface_id, | 
 | 481 |                          uint32 *surface_bits, | 
 | 482 |                          C2D_SURFACE_TYPE *surface_type, | 
 | 483 |                          uint32 *width, uint32 *height, | 
 | 484 |                          uint32 *format ); | 
 | 485 |  | 
 | 486 | /* Destroys a generic blit surface. | 
 | 487 |  * For external memory surfaces also deallocates the memory. | 
 | 488 |  * It is safe to free any external resources associated with a given | 
 | 489 |  * surface on c2dCreateSurface call after this function returns. */ | 
 | 490 | C2D_API C2D_STATUS c2dDestroySurface( uint32 surface_id ); | 
 | 491 |  | 
 | 492 |  | 
 | 493 | /****************************************************************************** | 
 | 494 |  * Functions to modify/exchange surface data */ | 
 | 495 |  | 
 | 496 | /* The format of fill_color is the same as color format being used | 
 | 497 |  * for specified surface. If fill_rect is NULL the whole surface is filled. | 
 | 498 |  * Alpha-blending is not performed while filling. | 
 | 499 |  * The operation is complete when function returns. */ | 
 | 500 | C2D_API C2D_STATUS c2dFillSurface( uint32 surface_id, | 
 | 501 |                          uint32 fill_color, | 
 | 502 |                          C2D_RECT *fill_rect ); | 
 | 503 |  | 
 | 504 | /* Writes data located in host memory into the specified surface. | 
 | 505 |  * The chunk of host memory is identified with surface_type and | 
 | 506 |  * surface_definition, no surface registration needed in this case. | 
 | 507 |  * Only C2D_SURFACE_RGB_HOST, C2D_SURFACE_YUV_HOST are accepted. | 
 | 508 |  * If only part of the host memory buffer should be loaded, it should | 
 | 509 |  * be configured in surface_definition using width, height and stride. | 
 | 510 |  * The x and y are defined in target surface coordinate space. | 
 | 511 |  * Color conversion has to be done, if color formats differ. | 
 | 512 |  * Alpha-blending is not performed while writing. | 
 | 513 |  * The operation is complete when function returns. */ | 
 | 514 | C2D_API C2D_STATUS c2dWriteSurface( uint32 surface_id, | 
 | 515 |                          C2D_SURFACE_TYPE surface_type, | 
 | 516 |                          void *surface_definition, | 
 | 517 |                          int32 x, int32 y ); | 
 | 518 |  | 
 | 519 | /* Reads data from the specified surface into the host memory. | 
 | 520 |  * The chunk of host memory is identified with surface_type and | 
 | 521 |  * surface_definition, no surface registration needed in this case. | 
 | 522 |  * Only C2D_SURFACE_RGB_HOST, C2D_SURFACE_YUV_HOST are accepted. | 
 | 523 |  * If only part of the surface should be read, it should | 
 | 524 |  * be configured in surface_definition using width, height and stride. | 
 | 525 |  * The x and y are defined in source surface coordinate space. | 
 | 526 |  * Color conversion has to be done, if color formats differ. | 
 | 527 |  * Alpha-blending is not performed while reading. | 
 | 528 |  * The operation is complete when function returns. */ | 
 | 529 | C2D_API C2D_STATUS c2dReadSurface( uint32 surface_id, | 
 | 530 |                          C2D_SURFACE_TYPE surface_type, | 
 | 531 |                          void *surface_definition, | 
 | 532 |                          int32 x, int32 y ); | 
 | 533 |  | 
 | 534 | /* Notifies c2d imlementation that surface has been updated from outside the API, | 
 | 535 |  * if updated_rect is NULL then the whole surface has been updated. */ | 
 | 536 | C2D_API C2D_STATUS c2dSurfaceUpdated( uint32 surface_id, | 
 | 537 |                          C2D_RECT *updated_rect ); | 
 | 538 |  | 
 | 539 | /* Updates surface information. | 
 | 540 |  * Could be called only for host surfaces set with parameter "C2D_SURFACE_WITH_PHYS". | 
 | 541 |  * Count for surface planes have to be same than for already allocated surface */ | 
 | 542 | C2D_API C2D_STATUS c2dUpdateSurface( uint32 surface_id, | 
 | 543 |                          uint32 surface_bits, | 
 | 544 |                          C2D_SURFACE_TYPE surface_type, | 
 | 545 |                          void *surface_definition ); | 
 | 546 |  | 
 | 547 | /****************************************************************************** | 
 | 548 |  * Functions to do actual blit */ | 
 | 549 |  | 
 | 550 | /* Draw a list of blit objects into the given target. | 
 | 551 |  * The target_config is a bitwise OR of values from C2D_TARGET_CONFIG. | 
 | 552 |  * The target transformation creates the effect that target surface | 
 | 553 |  * is transformed before the blit and then transformed back | 
 | 554 |  * after blit, however no physical target transform is performed. | 
 | 555 |  * The objects_list is a linked list of blit objects, no more | 
 | 556 |  * than num_objects is drawn from the given list. | 
 | 557 |  * If num_objects is 0, the whole list is drawn. | 
 | 558 |  * The blit is not guaranteed to complete after function returns. */ | 
 | 559 | C2D_API C2D_STATUS c2dDraw( uint32 target_id, | 
 | 560 |                          uint32 target_config, C2D_RECT *target_scissor, | 
 | 561 |                          uint32 target_mask_id, uint32 target_color_key, | 
 | 562 |                          C2D_OBJECT *objects_list, uint32 num_objects ); | 
 | 563 |  | 
 | 564 |  | 
 | 565 | /* timstamp set in the blit commands flush */ | 
 | 566 | typedef void*                   c2d_ts_handle; | 
 | 567 |  | 
 | 568 | /* Forces any pending blit to complete for a given target. | 
 | 569 |  * Non-blocking. All input surfaces for this target except those | 
 | 570 |  * which are shared with other targets are expected to be immediately | 
 | 571 |  * writable after client has been waiting returned timestamp with | 
 | 572 |  * c2dWaitTimestamp funtion or c2dFinish has been called for same target */ | 
 | 573 | C2D_API C2D_STATUS c2dFlush( uint32 target_id, c2d_ts_handle *timestamp); | 
 | 574 |  | 
 | 575 |  | 
 | 576 | /* Waits the pending timestamp */ | 
 | 577 | C2D_API C2D_STATUS c2dWaitTimestamp( c2d_ts_handle timestamp ); | 
 | 578 |  | 
 | 579 |  | 
 | 580 | /* Forces any pending blit to complete for a given target. | 
 | 581 |  * Blocking version, returns when blit is done. | 
 | 582 |  * All input surfaces for this target except those which are shared with | 
 | 583 |  * other targets are expected to be immediately | 
 | 584 |  * writable after this function returns. */ | 
 | 585 | C2D_API C2D_STATUS c2dFinish( uint32 target_id ); | 
 | 586 |  | 
 | 587 |  | 
 | 588 | /*****************************************************************************/ | 
 | 589 | /****************************** Display API **********************************/ | 
 | 590 | /*****************************************************************************/ | 
 | 591 |  | 
 | 592 |  | 
 | 593 | /* Display input enumeration */ | 
 | 594 | typedef enum { | 
 | 595 |     C2D_DISPLAY_INPUT_0      = 0,       /*!< default input */ | 
 | 596 |     C2D_DISPLAY_INPUT_1      = (1<<16), /*!< Overlay 1     */ | 
 | 597 |     C2D_DISPLAY_INPUT_2      = (1<<17), /*!< Overlay 2...    */ | 
 | 598 | } C2D_DISPLAY_INPUT; | 
 | 599 |  | 
 | 600 |  | 
 | 601 | /****************************************************************************** | 
 | 602 |  * Functions for display output. */ | 
 | 603 |  | 
 | 604 | /* Functionality described in this section is optional and is | 
 | 605 |  * provided only for the cases when blit HW | 
 | 606 |  * is tightly bound to the display controller. */ | 
 | 607 |  | 
 | 608 | /* Display enumeration, may also be used in surface caps */ | 
 | 609 | typedef enum { | 
 | 610 |     C2D_DISPLAY_MAIN         = (1 << 10), /* main display */ | 
 | 611 |     C2D_DISPLAY_SECONDARY    = (1 << 11), /* secondary display */ | 
 | 612 |     C2D_DISPLAY_TV_OUT       = (1 << 12), /* tv-out */ | 
 | 613 | } C2D_DISPLAY; | 
 | 614 |  | 
 | 615 | /* Display window enumeration */ | 
 | 616 | typedef enum { | 
 | 617 |     C2D_DISPLAY_OVERLAY      = C2D_DISPLAY_INPUT_1, /*!< Overlay window bit. This defines display input. | 
 | 618 |                                                 When defined the surface is set on the overlay window | 
 | 619 |                                                 otherwise the surface is set on the background window. */ | 
 | 620 | } C2D_DISPLAY_WINDOW;                    /*!< Window bit set with display parameter */ | 
 | 621 |  | 
 | 622 |  | 
 | 623 | /* Display update modes */ | 
 | 624 | typedef enum { | 
 | 625 |     C2D_DISPLAY_MODE_TEAR_SYNC   = (1 << 0), /* enables tearing sync */ | 
 | 626 |     C2D_DISPLAY_MODE_SURF_REMOVE = (1 << 1), /* Remove surface from given display + input */ | 
 | 627 | } C2D_DISPLAY_MODE; | 
 | 628 |  | 
 | 629 |  | 
 | 630 | /* Sets the given surface as a current display front buffer. | 
 | 631 |  * Several displays can be specified as an output if supported. | 
 | 632 |  * Still only one input can be specified at a time fro display/displays. | 
 | 633 |  * The surface remains shown until it gets replaced with another one. */ | 
 | 634 | C2D_API C2D_STATUS c2dDisplaySetSurface( uint32 display, | 
 | 635 |                          uint32 surface_id, uint32 mode ); | 
 | 636 |  | 
 | 637 | /* Returns the current surface for a particular display. | 
 | 638 |  * Only one display can be specified at a time. | 
 | 639 |  * The latest surface set with compDisplaySetSurface or | 
 | 640 |  * the default pre-allocated surface is returned. */ | 
 | 641 | C2D_API C2D_STATUS c2dDisplayGetSurface( uint32 display, | 
 | 642 |                          uint32 *surface_id ); | 
 | 643 |  | 
 | 644 | /* Returns the properties for a particular display. | 
 | 645 |  * Only one display can be specified at a time. */ | 
 | 646 | C2D_API C2D_STATUS c2dDisplayGetProperties( uint32 display, | 
 | 647 |                          uint32 *width, uint32 *height, | 
 | 648 |                          uint32 *format ); | 
 | 649 |  | 
 | 650 | /* Sets the properties for a particular display input. | 
 | 651 |  * Only one display + input can be specified at a time. | 
 | 652 |  * C2D_OBJECT used to set input rect(target rect), | 
 | 653 |  * blending operations, rotation...etc for display source */ | 
 | 654 | C2D_API C2D_STATUS c2dDisplaySetObject( uint32 display, | 
 | 655 |                          uint32 target_config, uint32 target_color_key, | 
 | 656 |                          C2D_OBJECT * c2dObject, uint32 mode); | 
 | 657 |  | 
 | 658 | /* allows user to map a memory region to the gpu. only supported on linux | 
 | 659 |  * mem_fd is the fd of the memory region, hostptr is the host pointer to the region, | 
 | 660 |  * len and offset are the size and offset of the memory. | 
 | 661 |  * flags is one of the memory types supported by gsl | 
 | 662 |  * gpaddr is passed by refernce back to the user | 
 | 663 |  */ | 
 | 664 | C2D_API C2D_STATUS c2dMapAddr ( int mem_fd, void * hostptr, uint32 len, uint32 offset, uint32 flags, void ** gpuaddr); | 
 | 665 |  | 
 | 666 | /* allows user to unmap memory region mapped by c2dMapAddr. | 
 | 667 |  * gpaddr is the gpuaddr to unmap */ | 
 | 668 | C2D_API C2D_STATUS c2dUnMapAddr (void * gpuaddr); | 
 | 669 |  | 
| Arun Kumar K.R | 6b353bd | 2012-11-27 17:18:45 -0800 | [diff] [blame] | 670 | /* allows user to query driver capabilities. | 
 | 671 |  * driver_info is the information about driver */ | 
 | 672 | C2D_API C2D_STATUS c2dGetDriverCapabilities( C2D_DRIVER_INFO * driver_info); | 
 | 673 |  | 
| Arun Kumar K.R | eb128aa | 2012-12-18 12:38:28 -0800 | [diff] [blame] | 674 | /* create a fence fd for the timestamp */ | 
 | 675 | C2D_API C2D_STATUS c2dCreateFenceFD( uint32 target_id, c2d_ts_handle timestamp, int32 *fd); | 
 | 676 |  | 
| Naseer Ahmed | 29a2681 | 2012-06-14 00:56:20 -0700 | [diff] [blame] | 677 | /*****************************************************************************/ | 
 | 678 |  | 
 | 679 | #ifdef __cplusplus | 
 | 680 | } | 
 | 681 | #endif | 
 | 682 |  | 
 | 683 | #endif /* __c2d2_h_ */ |