1054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Copyright (c) 2010-2013, The Linux Foundation. All rights reserved. 2054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * 3054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Redistribution and use in source and binary forms, with or without 4054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * modification, are permitted provided that the following conditions are 5054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * met: 6054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * * Redistributions of source code must retain the above copyright 7054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * notice, this list of conditions and the following disclaimer. 8054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * * Redistributions in binary form must reproduce the above 9054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * copyright notice, this list of conditions and the following 10054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * disclaimer in the documentation and/or other materials provided 11054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * with the distribution. 12054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * * Neither the name of The Linux Foundation. nor the names of its 13054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * contributors may be used to endorse or promote products derived 14054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * from this software without specific prior written permission. 15054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * 16054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * 28054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin */ 29054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#ifndef __c2d2_h_ 30054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#define __c2d2_h_ 31054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 32054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#ifdef __cplusplus 33054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinextern "C" { 34054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#endif 35054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 36054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#ifndef C2D_API 37054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#define C2D_API /* define API export as needed */ 38054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#endif 39054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#if !defined(int32) && !defined(_INT32_DEFINED) 40054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef int int32; 41054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#define _INT32_DEFINED 42054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#endif 43054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#if !defined(uint32) && !defined(_UINT32_DEFINED) 44054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef unsigned int uint32; 45054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#define _UINT32_DEFINED 46054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#endif 47054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 48054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/*****************************************************************************/ 49054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/*********************** Blit definitions *****************************/ 50054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/*****************************************************************************/ 51054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 52054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Status codes, returned by any blit function */ 53054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef enum { 54054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_STATUS_OK = 0, 55054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_STATUS_NOT_SUPPORTED = 1, 56054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_STATUS_OUT_OF_MEMORY = 2, 57054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_STATUS_INVALID_PARAM = 3, 58054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_STATUS_SURFACE_IN_USE = 4, 59054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_STATUS; 60054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 61054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 62054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Definitions of color format modes, used together with color formats */ 63054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef enum { 64054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_FORMAT_PACK_INTO_32BIT = (1 << 8), /* pack into dword if set */ 65054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_FORMAT_SWAP_ENDIANNESS = (1 << 9), /* swaps the order */ 66054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_FORMAT_LINEAR_SPACE = (1 << 10), /* linear color space */ 67054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_FORMAT_PREMULTIPLIED = (1 << 11), /* alpha premultiplied */ 68054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_FORMAT_INVERT_ALPHA = (1 << 12), /* inverts alpha */ 69054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_FORMAT_DISABLE_ALPHA = (1 << 13), /* disables alpha */ 70054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_FORMAT_INTERLACED = (1 << 14), /* YUV line-interlaced */ 71054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_FORMAT_TRANSPARENT = (1 << 15), /* YUV 1-bit alpha in Y */ 72054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_FORMAT_MACROTILED = (1 << 16), /* tiled in macro level */ 73054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_FORMAT_TILED_4x4 = (1 << 17), /* 4x4 tiled format */ 74054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_FORMAT_SWAP_RB = (1 << 18), /* Swap R & B color components */ 75054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_FORMAT_MODE; 76054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 77054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Definitions of supported RGB formats, used in C2D_RGB_SURFACE_DEF. 78054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The bits of each color channel are packed into a machine word 79054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * representing a single pixel from left to right (MSB to LSB) in the 80054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * order indicated by format name. For the sub-byte formats the pixels 81054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * are packed into bytes from left to right (MSbit to LSBit). 82054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * If the C2D_FORMAT_PACK_INTO_32BIT bit is set, the minimal 83054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * machine word used for pixel storage is 32-bit and the whole word 84054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * is reversed if endianness is swapped. 85054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * If the C2D_FORMAT_SWAP_ENDIANNESS bit is set, the order within a 86054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * minimal machine word representing a pixel 87054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * is reversed for both sub-byte and multi-byte formats. 88054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * If the C2D_FORMAT_LINEAR_SPACE bit is set, the color space of 89054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * the formats below is considered linear, if applicable. 90054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * If the C2D_FORMAT_PREMULTIPLIED bit is set, the color channels 91054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * are premultiplied with the alpha, if applicable. 92054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * If the C2D_FORMAT_INVERT_ALPHA bit is set, the alpha interpretation 93054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * is inverted: 0 - opaque, 1 - transparent, if applicable. 94054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * If the C2D_FORMAT_DISABLE_ALPHA bit is set, the alpha channel serves 95054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * as a placeholder and is ignored during blit, if applicable. 96054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * If the C2D_FORMAT_MACROTILED bit is set, the surface is in the 97054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * tiled format : 64x32 for 8bpp, 32x32 for 16bpp formats */ 98054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef enum { 99054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_1 = 0, /* 1-bit alpha/color expansion */ 100054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 101054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_2_PALETTE = 1, /* 2-bit indices for palette */ 102054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_4_PALETTE = 2, /* 4-bit indices for palette */ 103054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_8_PALETTE = 3, /* 8-bit indices for palette */ 104054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 105054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_2_L = 4, /* 2-bit grayscale */ 106054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_4_L = 5, /* 4-bit grayscale */ 107054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_8_L = 6, /* 8-bit grayscale */ 108054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 109054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_2_A = 7, /* 2-bit alpha only */ 110054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_4_A = 8, /* 4-bit alpha only */ 111054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_8_A = 9, /* 8-bit alpha only */ 112054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 113054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_444_RGB = 10, /* 12-bit colors */ 114054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_565_RGB = 11, /* 16-bit colors */ 115054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_888_RGB = 12, /* 24-bit colors */ 116054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 117054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_1555_ARGB = 13, /* 16-bit colors (1-bit alpha) */ 118054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_4444_ARGB = 14, /* 16-bit colors (4-bit alpha) */ 119054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_8565_ARGB = 15, /* 24-bit colors (8-bit alpha) */ 120054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_8888_ARGB = 16, /* 32-bit colors (8-bit alpha) */ 121054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 122054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_5551_RGBA = 17, /* 16-bit colors (1-bit alpha) */ 123054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_4444_RGBA = 18, /* 16-bit colors (4-bit alpha) */ 124054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_5658_RGBA = 19, /* 24-bit colors (8-bit alpha) */ 125054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_8888_RGBA = 20, /* 32-bit colors (8-bit alpha) */ 126054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 127054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* derived RGB color formats (base format + mode bits) */ 128054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 129054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_RGB_FORMAT; 130054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 131054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Definitions of supported YUV formats, used in C2D_YUV_SURFACE_DEF. 132054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Each of Y,U,V channels usually takes 1 byte and therefore is 133054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * individually addressable. The definitions below show how Y,U,V 134054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * channels are packed into macropixels for each particular format. 135054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The order is from left (smaller byte addresses) to right (larger 136054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * byte addresses). The first three digits (4xx) denote the chroma 137054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * subsampling in standard YUV notation. The digits in the macropixel 138054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * denote that the whole block (from the previous digit or from the 139054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * beginning) has to be repeated the number of times. Underscores 140054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * between Y,U,V channels are used to describe separate planes for 141054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * planar YUV formats. Formats are mapped to numbers so that future 142054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * versions with various YUV permutations are easy to add. 143054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * If the C2D_FORMAT_INTERLACED bit is set, the line order is 144054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * interlaced: 0,2,4,...1,3,5... if applicable. 145054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * If the C2D_FORMAT_TRANSPARENT bit is set, the least significant 146054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * bit of Y channel serves as alpha: 0 - transparent, 1 - opaque. */ 147054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef enum { 148054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_411_YYUYYV = 110, /* packed, 12-bit */ 149054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_411_YUYYVY = 111, /* packed, 12-bit */ 150054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_411_UYYVYY = 112, /* packed, 12-bit, "Y411" */ 151054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_411_YUYV2Y4 = 116, /* packed, 12-bit */ 152054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_411_UYVY2Y4 = 117, /* packed, 12-bit, "Y41P" */ 153054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 154054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_422_YUYV = 120, /* packed, 16-bit, "YUY2" */ 155054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_422_UYVY = 121, /* packed, 16-bit, "UYVY" */ 156054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_422_YVYU = 122, /* packed, 16-bit, "YVYU" */ 157054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_422_VYUY = 123, /* packed, 16-bit */ 158054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 159054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_444_YUV = 130, /* packed, 24-bit */ 160054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_444_UYV = 131, /* packed, 24-bit, "IYU2" */ 161054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_444_AYUV = 136, /* packed, 24-bit, "AYUV" */ 162054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 163054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_410_Y_UV = 150, /* planar, Y + interleaved UV */ 164054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_411_Y_UV = 151, /* planar, Y + interleaved UV */ 165054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_420_Y_UV = 152, /* planar, Y + interleaved UV */ 166054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_422_Y_UV = 153, /* planar, Y + interleaved UV */ 167054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_444_Y_UV = 154, /* planar, Y + interleaved UV */ 168054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 169054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_410_Y_VU = 160, /* planar, Y + interleaved VU */ 170054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_411_Y_VU = 161, /* planar, Y + interleaved VU */ 171054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_420_Y_VU = 162, /* planar, Y + interleaved VU */ 172054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_422_Y_VU = 163, /* planar, Y + interleaved VU */ 173054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_444_Y_VU = 164, /* planar, Y + interleaved VU */ 174054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 175054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_410_Y_U_V = 170, /* planar, Y + U + V separate */ 176054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_411_Y_U_V = 171, /* planar, Y + U + V separate */ 177054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_420_Y_V_U = 172, /* planar, Y + V + U separate */ 178054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_420_Y_U_V = 173, /* planar, Y + U + V separate */ 179054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_422_Y_U_V = 174, /* planar, Y + U + V separate */ 180054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_444_Y_U_V = 175, /* planar, Y + U + V separate */ 181054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 182054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_800_Y = 190, /* planar, Y only, grayscale */ 183054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 184054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* derived YUV color formats (base format + mode bits), FOURCC */ 185054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 186054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_411_Y411 = 112, 187054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_411_Y41P = 117, 188054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_411_IY41 = 117 | (1 << 14), 189054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_411_Y41T = 117 | (1 << 15), 190054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 191054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_422_YUY2 = 120, 192054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_422_IUYV = 121 | (1 << 14), 193054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_422_Y42T = 121 | (1 << 15), 194054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_444_IYU2 = 131, 195054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 196054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_420_NV12 = 152, 197054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_420_NV21 = 162, 198054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 199054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_410_YUV9 = 170, 200054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_410_YVU9 = 170, 201054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_411_Y41B = 171, 202054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_420_YV12 = 172, 203054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_420_IYUV = 173, 204054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_420_I420 = 173, 205054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_422_YV16 = 174, 206054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_422_Y42B = 174, 207054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 208054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_FORMAT_800_Y800 = 190, 209054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 210054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_YUV_FORMAT; 211054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 212054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 213054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Configuration bits, used in the config_mask field of C2D_OBJECT struct */ 214054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef enum { 215054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_SOURCE_RECT_BIT = (1 << 0), /* enables source_rect field */ 216054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_MIRROR_H_BIT = (1 << 1), /* enables horizontal flipping */ 217054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_MIRROR_V_BIT = (1 << 2), /* enables vertical flipping */ 218054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_SOURCE_TILE_BIT = (1 << 3), /* enables source surface tiling */ 219054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_TARGET_RECT_BIT = (1 << 4), /* enables target_rect field */ 220054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ROTATE_BIT = (1 << 5), /* enables all rotation fields */ 221054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_SCISSOR_RECT_BIT = (1 << 6), /* enables scissor_rect field */ 222054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_MASK_SURFACE_BIT = (1 << 7), /* enables mask_surface_id field */ 223054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_MASK_ALIGN_BIT = (1 << 8), /* aligns mask to source_rect */ 224054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_MASK_SCALE_BIT = (1 << 9), /* enables mask surface scaling */ 225054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_MASK_TILE_BIT = (1 << 10), /* enables mask surface tiling */ 226054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_GLOBAL_ALPHA_BIT = (1 << 11), /* enables global_alpha field */ 227054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_COLOR_KEY_BIT = (1 << 12), /* enables color_key field */ 228054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_NO_PIXEL_ALPHA_BIT = (1 << 13), /* disables source alpha channel */ 229054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_NO_BILINEAR_BIT = (1 << 14), /* disables bilinear on scaling */ 230054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_NO_ANTIALIASING_BIT = (1 << 15), /* disables antialiasing on edges */ 231054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRAW_LINE_BIT = (1 << 16), /* enables line drawing with source rectangle */ 232054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRAW_LINE_NOLAST = (1 << 17), /* disable last pixel draw for line */ 233054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_SOURCE_CONFIG; 234054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 235054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 236054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Target configuration bits, defines rotation + mirroring. 237054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Mirror is applied prior to rotation if enabled. */ 238054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef enum { 239054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_TARGET_MIRROR_H = (1 << 0), /* horizontal flip */ 240054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_TARGET_MIRROR_V = (1 << 1), /* vertical flip */ 241054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_TARGET_ROTATE_0 = (0 << 2), /* no rotation */ 242054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_TARGET_ROTATE_90 = (1 << 2), /* 90 degree rotation */ 243054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_TARGET_ROTATE_180 = (2 << 2), /* 180 degree rotation */ 244054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_TARGET_ROTATE_270 = (3 << 2), /* 270 degree rotation, 90 + 180 */ 245054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_TARGET_MASK_ALIGN = (1 << 4), /* aligns mask to target scissor */ 246054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_TARGET_MASK_SCALE = (1 << 5), /* enables mask scaling */ 247054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_TARGET_MASK_TILE = (1 << 6), /* enables mask tiling */ 248054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_TARGET_COLOR_KEY = (1 << 7), /* enables target_color_key */ 249054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_TARGET_NO_PIXEL_ALPHA = (1 << 8), /* disables target alpha channel */ 250054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_TARGET_CONFIG; 251054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 252054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#define C2D_TARGET_ROTATION_MASK (C2D_TARGET_ROTATE_90*3) 253054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 254054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Additional blend modes, can be used with both source and target configs. 255054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin If none of the below is set, the default "SRC over DST" is applied. */ 256054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef enum { 257054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_SRC_OVER = (0 << 20), /* Default, Porter-Duff "SRC over DST" */ 258054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_SRC = (1 << 20), /* Porter-Duff "SRC" */ 259054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_SRC_IN = (2 << 20), /* Porter-Duff "SRC in DST" */ 260054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_DST_IN = (3 << 20), /* Porter-Duff "DST in SRC" */ 261054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_SRC_OUT = (4 << 20), /* Porter-Duff "SRC out DST" */ 262054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_DST_OUT = (5 << 20), /* Porter-Duff "DST out SRC" */ 263054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_DST_OVER = (6 << 20), /* Porter-Duff "DST over SRC" */ 264054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_SRC_ATOP = (7 << 20), /* Porter-Duff "SRC ATOP" */ 265054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_DST_ATOP = (8 << 20), /* Porter-Duff "DST ATOP" */ 266054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_XOR = (9 << 20), /* Xor */ 267054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_MULTIPLY = (10 << 20), /* OpenVG "MULTIPLY" */ 268054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_SCREEN = (11 << 20), /* OpenVG "SCREEN" */ 269054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_DARKEN = (12 << 20), /* OpenVG "DARKEN" */ 270054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_LIGHTEN = (13 << 20), /* OpenVG "LIGHTEN" */ 271054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_ADDITIVE = (14 << 20), /* OpenVG "ADDITIVE" */ 272054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_DIRECT = (15 << 20), /* Direct alpha blitting */ 273054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_INVERTC = (16 << 20), /* Invert color */ 274054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_ALPHA_BLEND_NONE = (1 << 25), /* disables alpha blending */ 275054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_ALPHA_BLEND_MODE; 276054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 277054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Configuration bits, used in the config_mask field of C2D_OBJECT struct */ 278054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef enum { 279054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_OVERRIDE_GLOBAL_TARGET_ROTATE_CONFIG = (1 << 27), /* Overrides TARGET Config */ 280054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_OVERRIDE_TARGET_ROTATE_0 = (0 << 28), /* no rotation */ 281054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_OVERRIDE_TARGET_ROTATE_90 = (1 << 28), /* 90 degree rotation */ 282054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_OVERRIDE_TARGET_ROTATE_180 = (2 << 28), /* 180 degree rotation */ 283054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_OVERRIDE_TARGET_ROTATE_270 = (3 << 28), /* 270 degree rotation */ 284054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_SOURCE_TARGET_CONFIG; 285054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 286054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#define C2D_OVERRIDE_SOURCE_CONFIG_TARGET_ROTATION_SHIFT_MASK 28 287054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#define C2D_OVERRIDE_TARGET_CONFIG_TARGET_ROTATION_SHIFT_MASK 2 288054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 289054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 290054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Surface caps enumeration */ 291054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef enum { 292054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_SOURCE = (1 << 0), /* allows to use as a source */ 293054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_TARGET = (1 << 1), /* allows to use as a target */ 294054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_MASK = (1 << 2), /* allows to use as a mask */ 295054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_PALETTE = (1 << 3), /* allows to use as a palette */ 296054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_SURFACE_BITS; 297054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 298054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Surface type enumeration */ 299054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef enum { 300054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_SURFACE_RGB_HOST = 1, /* Host memory RGB surface */ 301054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_SURFACE_RGB_EXT = 2, /* External memory RGB surface */ 302054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_SURFACE_YUV_HOST = 3, /* Host memory YUV surface */ 303054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_SURFACE_YUV_EXT = 4, /* External memory YUV surface */ 304054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_SURFACE_WITH_PHYS = (1<<3), /* physical address already mapped */ 305054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* this bit is valid with HOST types */ 306054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_SURFACE_WITH_PHYS_DUMMY = (1<<4), /* physical address already mapped */ 307054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin /* this bit is valid with HOST types */ 308054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_SURFACE_TYPE; 309054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 310054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Structure for registering a RGB buffer as a blit surface */ 311054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef struct { 312054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 format; /* RGB color format plus additional mode bits */ 313054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 width; /* defines width in pixels */ 314054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 height; /* defines height in pixels */ 315054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void *buffer; /* pointer to the RGB buffer */ 316054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void *phys; /* physical address */ 317054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int32 stride; /* defines stride in bytes, negative stride is allowed */ 318054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_RGB_SURFACE_DEF; 319054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 320054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Structure for registering a YUV plane(s) as a blit surface */ 321054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef struct { 322054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 format; /* YUV color format plus additional mode bits */ 323054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 width; /* defines width in pixels */ 324054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 height; /* defines height in pixels */ 325054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void *plane0; /* holds the whole buffer if YUV format is not planar */ 326054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void *phys0; /* physical address */ 327054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int32 stride0; /* stride in bytes if YUV format is not planar */ 328054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void *plane1; /* holds UV or VU plane for planar interleaved */ 329054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void *phys1; /* physical address */ 330054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int32 stride1; /* stride for UV or VU plane for planar interleaved */ 331054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void *plane2; /* holds the 3. plane, ignored if YUV format is not planar */ 332054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void *phys2; /* physical address */ 333054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int32 stride2; /* stride for the 3. plane, ignored if YUV format is not planar */ 334054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_YUV_SURFACE_DEF; 335054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 336054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 337054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Rectangle definition */ 338054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef struct { 339054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int32 x; /* upper-left x */ 340054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int32 y; /* upper-left y */ 341054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int32 width; /* width */ 342054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int32 height; /* height */ 343054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_RECT; 344054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 345054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* C2D_OBJECT encapsulates the blit parameters for a source surface. 346054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The fg_color defines color in target format for bits equal to 1 347054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * in the source C2D_COLOR_FORMAT_1 format. It also defines rendering 348054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * color for all alpha-only source formats. If the surface_id is 0 349054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * the fg_color defines a constant fill color used instead of the surface. 350054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The bg_color defines color in target format for bits equal to 0 351054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * in the source C2D_COLOR_FORMAT_1 format, otherwise both are ignored. 352054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The palette_id is used for all palette source formats, otherwise ignored. 353054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 354054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The source_rect first defines the content of the source surface, 355054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * it is then horizontally/vertically flipped if C2D_MIRROR_*_BIT is set, 356054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * then scaled with bilinear interpolation to exactly fit target_rect 357054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * or repeated across target_rect if C2D_SOURCE_TILE_BIT is set, 358054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * target_rect is then rotated clockwise by an arbitrary angle in degrees 359054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * around the rot_orig_x/y, defined relative to target_rect's top left point, 360054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * and then clipped to scissor_rect defined in target coordinate system. 361054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 362054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Finally alpha blending is applied before pixels get written into the target. 363054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Surface's pixel alpha is combined with mask alpha and with global alpha. 364054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Mask surface follows all transformations applied to the source surface. 365054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Source color key defines transparent color, applied together with alpha. */ 366054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef struct C2D_OBJECT_STR { 367054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 surface_id; /* source surface */ 368054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 369054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 fg_color; /* foreground color */ 370054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 bg_color; /* background color */ 371054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 palette_id; /* one-dimensional horizontal palette surface */ 372054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 373054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 config_mask; /* defines which fields below are enabled */ 374054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 375054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_RECT source_rect; /* region of the source surface, 16.16 fp */ 376054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_RECT target_rect; /* position and scaling in target, 16.16 fp */ 377054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 378054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int32 rot_orig_x; /* rotation origin relative to target_rect's... */ 379054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int32 rot_orig_y; /* ...top left point, both are 16.16 fp */ 380054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int32 rotation; /* clock-wise rotation in degrees, 16.16 fp */ 381054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 382054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_RECT scissor_rect; /* defines the clip rectangle in target surface */ 383054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 384054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 mask_surface_id; /* source alpha-mask surface */ 385054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 global_alpha; /* 0 = fully transparent, 255 = fully opaque */ 386054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 color_key; /* transparent color for the source surface */ 387054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 388054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin struct C2D_OBJECT_STR *next; /* pointer to the next object or NULL */ 389054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_OBJECT; 390054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 391054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Configuration bits, driver capabilities used by 2Dapplications */ 392054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef enum { 393054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_GLOBAL_ALPHA_OP = (1 << 0), 394054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_TILE_OP = (1 << 1), 395054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_COLOR_KEY_OP = (1 << 2), 396054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_NO_PIXEL_ALPHA_OP = (1 << 3), 397054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_TARGET_ROTATE_OP = (1 << 4), 398054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_ANTI_ALIASING_OP = (1 << 5), /* antialiasing */ 399054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_BILINEAR_FILTER_OP = (1 << 6), 400054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_LENS_CORRECTION_OP = (1 << 7), 401054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_OVERRIDE_TARGET_ROTATE_OP = (1 << 8), 402054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_SHADER_BLOB_OP = (1 << 9), 403054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_MASK_SURFACE_OP = (1 << 10), /* mask surface */ 404054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_MIRROR_H_OP = (1 << 11), /* horizontal flip */ 405054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_MIRROR_V_OP = (1 << 12), /* vertical flip */ 406054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_SCISSOR_RECT_OP = (1 << 13), 407054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_SOURCE_RECT_OP = (1 << 14), 408054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_TARGET_RECT_OP = (1 << 15), 409054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_ROTATE_OP = (1 << 16), /* all rotations */ 410054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_FLUSH_WITH_FENCE_FD_OP = (1 << 17), /* all rotations */ 411054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_SUPPORTS_ALL_CAPABILITIES_OP = ((0xFFFFFFFF) >> (31 - 17)) /* mask for all capabilities supported */ 412054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_DRIVER_CAPABILITIES; 413054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 414054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* 2D driver workaround bits used by the 2D applications */ 415054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef enum { 416054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_WORKAROUND_NONE = 0, /* NO workaround */ 417054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DRIVER_WORKAROUND_SWAP_UV_FOR_YUV_TARGET = (1 << 0), /* Swap UV when this flag set */ 418054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_DRIVER_WORKAROUND; 419054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 420054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Structure to query Driver information */ 421054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef struct { 422054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 capabilities_mask; 423054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 workaround_mask; 424054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 reserved1; 425054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 reserved2; 426054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 reserved3; 427054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_DRIVER_INFO; 428054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 429054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Structure to query Driver information */ 430054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef struct { 431054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 max_surface_template_needed; 432054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 reserved1; 433054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 reserved2; 434054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 reserved3; 435054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_DRIVER_SETUP_INFO; 436054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 437054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/*****************************************************************************/ 438054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/**************************** C2D API 2.0 ********************************/ 439054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/*****************************************************************************/ 440054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 441054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/****************************************************************************** 442054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Functions to create/destroy surfaces */ 443054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 444054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Creates a generic blit surface according to its type. 445054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Pass a combination of desired surface bits according to planned usage. 446054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Accepted values for surface_bits may include bits from C2D_SURFACE_BITS, 447054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * and also from C2D_DISPLAY for compatibility with HW display controller. 448054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * For host memory types the memory is preallocated outside the API 449054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * and should remain valid until surface is destroyed. 450054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * For external memory types the memory is allocated within API. 451054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * On success, the non-zero surface identifier is returned. 452054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * All numbers greater that 0 are valid surface identifiers, 0 is invalid. 453054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 454054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Host memory RGB surface: 455054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * surface_type = C2D_SURFACE_RGB_HOST 456054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * surface_definition = C2D_RGB_SURFACE_DEF 457054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * all fields in definition structure should be set 458054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 459054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * External memory RGB surface: 460054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * surface_type = C2D_SURFACE_RGB_EXT 461054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * surface_definition = C2D_RGB_SURFACE_DEF 462054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * buffer field in definition structure is ignored 463054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 464054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Host memory YUV surface: 465054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * surface_type = C2D_SURFACE_YUV_HOST 466054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * surface_definition = C2D_YUV_SURFACE_DEF 467054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * one or all plane and stride fields in definition structure 468054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * should be set depending on whether the format is planar or not 469054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 470054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * External memory YUV surface: 471054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * surface_type = C2D_SURFACE_YUV_EXT 472054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * surface_definition = C2D_YUV_SURFACE_DEF 473054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * all plane and stride fields in definition structure are ignored */ 474054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dCreateSurface( uint32 *surface_id, 475054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 surface_bits, 476054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_SURFACE_TYPE surface_type, 477054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void *surface_definition ); 478054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 479054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Requests properties of the specified surface. */ 480054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dQuerySurface( uint32 surface_id, 481054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 *surface_bits, 482054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_SURFACE_TYPE *surface_type, 483054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 *width, uint32 *height, 484054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 *format ); 485054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 486054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Destroys a generic blit surface. 487054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * For external memory surfaces also deallocates the memory. 488054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * It is safe to free any external resources associated with a given 489054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * surface on c2dCreateSurface call after this function returns. */ 490054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dDestroySurface( uint32 surface_id ); 491054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 492054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 493054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/****************************************************************************** 494054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Functions to modify/exchange surface data */ 495054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 496054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* The format of fill_color is the same as color format being used 497054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * for specified surface. If fill_rect is NULL the whole surface is filled. 498054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Alpha-blending is not performed while filling. 499054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The operation is complete when function returns. */ 500054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dFillSurface( uint32 surface_id, 501054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 fill_color, 502054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_RECT *fill_rect ); 503054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 504054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Writes data located in host memory into the specified surface. 505054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The chunk of host memory is identified with surface_type and 506054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * surface_definition, no surface registration needed in this case. 507054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Only C2D_SURFACE_RGB_HOST, C2D_SURFACE_YUV_HOST are accepted. 508054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * If only part of the host memory buffer should be loaded, it should 509054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * be configured in surface_definition using width, height and stride. 510054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The x and y are defined in target surface coordinate space. 511054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Color conversion has to be done, if color formats differ. 512054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Alpha-blending is not performed while writing. 513054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The operation is complete when function returns. */ 514054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dWriteSurface( uint32 surface_id, 515054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_SURFACE_TYPE surface_type, 516054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void *surface_definition, 517054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int32 x, int32 y ); 518054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 519054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Reads data from the specified surface into the host memory. 520054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The chunk of host memory is identified with surface_type and 521054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * surface_definition, no surface registration needed in this case. 522054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Only C2D_SURFACE_RGB_HOST, C2D_SURFACE_YUV_HOST are accepted. 523054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * If only part of the surface should be read, it should 524054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * be configured in surface_definition using width, height and stride. 525054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The x and y are defined in source surface coordinate space. 526054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Color conversion has to be done, if color formats differ. 527054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Alpha-blending is not performed while reading. 528054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The operation is complete when function returns. */ 529054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dReadSurface( uint32 surface_id, 530054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_SURFACE_TYPE surface_type, 531054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void *surface_definition, 532054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int32 x, int32 y ); 533054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 534054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Notifies c2d imlementation that surface has been updated from outside the API, 535054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * if updated_rect is NULL then the whole surface has been updated. */ 536054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dSurfaceUpdated( uint32 surface_id, 537054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_RECT *updated_rect ); 538054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 539054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Updates surface information. 540054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Could be called only for host surfaces set with parameter "C2D_SURFACE_WITH_PHYS". 541054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Count for surface planes have to be same than for already allocated surface */ 542054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dUpdateSurface( uint32 surface_id, 543054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 surface_bits, 544054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_SURFACE_TYPE surface_type, 545054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void *surface_definition ); 546054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 547054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/****************************************************************************** 548054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Functions to do actual blit */ 549054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 550054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Draw a list of blit objects into the given target. 551054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The target_config is a bitwise OR of values from C2D_TARGET_CONFIG. 552054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The target transformation creates the effect that target surface 553054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * is transformed before the blit and then transformed back 554054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * after blit, however no physical target transform is performed. 555054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The objects_list is a linked list of blit objects, no more 556054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * than num_objects is drawn from the given list. 557054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * If num_objects is 0, the whole list is drawn. 558054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The blit is not guaranteed to complete after function returns. */ 559054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dDraw( uint32 target_id, 560054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 target_config, C2D_RECT *target_scissor, 561054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 target_mask_id, uint32 target_color_key, 562054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_OBJECT *objects_list, uint32 num_objects ); 563054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 564054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 565054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* timstamp set in the blit commands flush */ 566054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef void* c2d_ts_handle; 567054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 568054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Forces any pending blit to complete for a given target. 569054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Non-blocking. All input surfaces for this target except those 570054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * which are shared with other targets are expected to be immediately 571054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * writable after client has been waiting returned timestamp with 572054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * c2dWaitTimestamp funtion or c2dFinish has been called for same target */ 573054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dFlush( uint32 target_id, c2d_ts_handle *timestamp); 574054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 575054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 576054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Waits the pending timestamp */ 577054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dWaitTimestamp( c2d_ts_handle timestamp ); 578054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 579054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 580054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Forces any pending blit to complete for a given target. 581054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Blocking version, returns when blit is done. 582054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * All input surfaces for this target except those which are shared with 583054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * other targets are expected to be immediately 584054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * writable after this function returns. */ 585054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dFinish( uint32 target_id ); 586054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 587054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 588054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/*****************************************************************************/ 589054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/****************************** Display API **********************************/ 590054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/*****************************************************************************/ 591054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 592054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 593054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Display input enumeration */ 594054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef enum { 595054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DISPLAY_INPUT_0 = 0, /*!< default input */ 596054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DISPLAY_INPUT_1 = (1<<16), /*!< Overlay 1 */ 597054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DISPLAY_INPUT_2 = (1<<17), /*!< Overlay 2... */ 598054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_DISPLAY_INPUT; 599054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 600054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 601054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/****************************************************************************** 602054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Functions for display output. */ 603054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 604054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Functionality described in this section is optional and is 605054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * provided only for the cases when blit HW 606054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * is tightly bound to the display controller. */ 607054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 608054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Display enumeration, may also be used in surface caps */ 609054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef enum { 610054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DISPLAY_MAIN = (1 << 10), /* main display */ 611054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DISPLAY_SECONDARY = (1 << 11), /* secondary display */ 612054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DISPLAY_TV_OUT = (1 << 12), /* tv-out */ 613054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_DISPLAY; 614054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 615054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Display window enumeration */ 616054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef enum { 617054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DISPLAY_OVERLAY = C2D_DISPLAY_INPUT_1, /*!< Overlay window bit. This defines display input. 618054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin When defined the surface is set on the overlay window 619054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin otherwise the surface is set on the background window. */ 620054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_DISPLAY_WINDOW; /*!< Window bit set with display parameter */ 621054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 622054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 623054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Display update modes */ 624054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjintypedef enum { 625054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DISPLAY_MODE_TEAR_SYNC = (1 << 0), /* enables tearing sync */ 626054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_DISPLAY_MODE_SURF_REMOVE = (1 << 1), /* Remove surface from given display + input */ 627054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} C2D_DISPLAY_MODE; 628054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 629054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 630054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Sets the given surface as a current display front buffer. 631054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Several displays can be specified as an output if supported. 632054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Still only one input can be specified at a time fro display/displays. 633054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The surface remains shown until it gets replaced with another one. */ 634054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dDisplaySetSurface( uint32 display, 635054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 surface_id, uint32 mode ); 636054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 637054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Returns the current surface for a particular display. 638054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Only one display can be specified at a time. 639054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * The latest surface set with compDisplaySetSurface or 640054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * the default pre-allocated surface is returned. */ 641054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dDisplayGetSurface( uint32 display, 642054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 *surface_id ); 643054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 644054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Returns the properties for a particular display. 645054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Only one display can be specified at a time. */ 646054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dDisplayGetProperties( uint32 display, 647054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 *width, uint32 *height, 648054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 *format ); 649054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 650054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* Sets the properties for a particular display input. 651054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Only one display + input can be specified at a time. 652054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * C2D_OBJECT used to set input rect(target rect), 653054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * blending operations, rotation...etc for display source */ 654054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dDisplaySetObject( uint32 display, 655054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin uint32 target_config, uint32 target_color_key, 656054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin C2D_OBJECT * c2dObject, uint32 mode); 657054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 658054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* allows user to map a memory region to the gpu. only supported on linux 659054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * mem_fd is the fd of the memory region, hostptr is the host pointer to the region, 660054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * len and offset are the size and offset of the memory. 661054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * flags is one of the memory types supported by gsl 662054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * gpaddr is passed by refernce back to the user 663054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin */ 664054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dMapAddr ( int mem_fd, void * hostptr, uint32 len, uint32 offset, uint32 flags, void ** gpuaddr); 665054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 666054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* allows user to unmap memory region mapped by c2dMapAddr. 667054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * gpaddr is the gpuaddr to unmap */ 668054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dUnMapAddr (void * gpuaddr); 669054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 670054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* allows user to query driver capabilities. 671054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * driver_info is the information about driver */ 672054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dGetDriverCapabilities( C2D_DRIVER_INFO * driver_info); 673054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 674054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* create a fence fd for the timestamp */ 675054df959aef7dce630a7f41d4aba6626c130756bPatrick TjinC2D_API C2D_STATUS c2dCreateFenceFD( uint32 target_id, c2d_ts_handle timestamp, int32 *fd); 676054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 677054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/*****************************************************************************/ 678054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 679054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#ifdef __cplusplus 680054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} 681054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#endif 682054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 683054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#endif /* __c2d2_h_ */ 684