12ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Copyright (c) 2010-2013, The Linux Foundation. All rights reserved. 22ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * 32ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Redistribution and use in source and binary forms, with or without 42ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * modification, are permitted provided that the following conditions are 52ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * met: 62ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * * Redistributions of source code must retain the above copyright 72ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * notice, this list of conditions and the following disclaimer. 82ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * * Redistributions in binary form must reproduce the above 92ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * copyright notice, this list of conditions and the following 102ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * disclaimer in the documentation and/or other materials provided 112ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * with the distribution. 122ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * * Neither the name of The Linux Foundation. nor the names of its 132ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * contributors may be used to endorse or promote products derived 142ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * from this software without specific prior written permission. 152ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * 162ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 172ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 182ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 192ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 202ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 212ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 222ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 232ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 242ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 252ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 262ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * 282ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel */ 292ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#ifndef __c2d2_h_ 302ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define __c2d2_h_ 312ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 322ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#ifdef __cplusplus 332ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelextern "C" { 342ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#endif 352ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 362ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#ifndef C2D_API 372ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define C2D_API /* define API export as needed */ 382ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#endif 392ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#if !defined(int32) && !defined(_INT32_DEFINED) 402ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef int int32; 412ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define _INT32_DEFINED 422ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#endif 432ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#if !defined(uint32) && !defined(_UINT32_DEFINED) 442ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef unsigned int uint32; 452ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define _UINT32_DEFINED 462ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#endif 472ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 482ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/*****************************************************************************/ 492ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/*********************** Blit definitions *****************************/ 502ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/*****************************************************************************/ 512ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 522ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Status codes, returned by any blit function */ 532ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef enum { 542ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_STATUS_OK = 0, 552ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_STATUS_NOT_SUPPORTED = 1, 562ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_STATUS_OUT_OF_MEMORY = 2, 572ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_STATUS_INVALID_PARAM = 3, 582ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_STATUS_SURFACE_IN_USE = 4, 592ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_STATUS; 602ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 612ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 622ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Definitions of color format modes, used together with color formats */ 632ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef enum { 642ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_FORMAT_PACK_INTO_32BIT = (1 << 8), /* pack into dword if set */ 652ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_FORMAT_SWAP_ENDIANNESS = (1 << 9), /* swaps the order */ 662ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_FORMAT_LINEAR_SPACE = (1 << 10), /* linear color space */ 672ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_FORMAT_PREMULTIPLIED = (1 << 11), /* alpha premultiplied */ 682ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_FORMAT_INVERT_ALPHA = (1 << 12), /* inverts alpha */ 692ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_FORMAT_DISABLE_ALPHA = (1 << 13), /* disables alpha */ 702ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_FORMAT_INTERLACED = (1 << 14), /* YUV line-interlaced */ 712ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_FORMAT_TRANSPARENT = (1 << 15), /* YUV 1-bit alpha in Y */ 722ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_FORMAT_MACROTILED = (1 << 16), /* tiled in macro level */ 732ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_FORMAT_TILED_4x4 = (1 << 17), /* 4x4 tiled format */ 742ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_FORMAT_SWAP_RB = (1 << 18), /* Swap R & B color components */ 752ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_FORMAT_UBWC_COMPRESSED = (1 << 23), /* UBWC compressed format */ 762ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_FORMAT_MODE; 772ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 782ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Definitions of supported RGB formats, used in C2D_RGB_SURFACE_DEF. 792ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The bits of each color channel are packed into a machine word 802ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * representing a single pixel from left to right (MSB to LSB) in the 812ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * order indicated by format name. For the sub-byte formats the pixels 822ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * are packed into bytes from left to right (MSbit to LSBit). 832ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * If the C2D_FORMAT_PACK_INTO_32BIT bit is set, the minimal 842ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * machine word used for pixel storage is 32-bit and the whole word 852ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * is reversed if endianness is swapped. 862ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * If the C2D_FORMAT_SWAP_ENDIANNESS bit is set, the order within a 872ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * minimal machine word representing a pixel 882ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * is reversed for both sub-byte and multi-byte formats. 892ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * If the C2D_FORMAT_LINEAR_SPACE bit is set, the color space of 902ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * the formats below is considered linear, if applicable. 912ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * If the C2D_FORMAT_PREMULTIPLIED bit is set, the color channels 922ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * are premultiplied with the alpha, if applicable. 932ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * If the C2D_FORMAT_INVERT_ALPHA bit is set, the alpha interpretation 942ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * is inverted: 0 - opaque, 1 - transparent, if applicable. 952ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * If the C2D_FORMAT_DISABLE_ALPHA bit is set, the alpha channel serves 962ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * as a placeholder and is ignored during blit, if applicable. 972ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * If the C2D_FORMAT_MACROTILED bit is set, the surface is in the 982ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * tiled format : 64x32 for 8bpp, 32x32 for 16bpp formats */ 992ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef enum { 1002ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_1 = 0, /* 1-bit alpha/color expansion */ 1012ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1022ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_2_PALETTE = 1, /* 2-bit indices for palette */ 1032ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_4_PALETTE = 2, /* 4-bit indices for palette */ 1042ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_8_PALETTE = 3, /* 8-bit indices for palette */ 1052ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1062ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_2_L = 4, /* 2-bit grayscale */ 1072ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_4_L = 5, /* 4-bit grayscale */ 1082ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_8_L = 6, /* 8-bit grayscale */ 1092ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1102ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_2_A = 7, /* 2-bit alpha only */ 1112ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_4_A = 8, /* 4-bit alpha only */ 1122ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_8_A = 9, /* 8-bit alpha only */ 1132ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1142ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_444_RGB = 10, /* 12-bit colors */ 1152ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_565_RGB = 11, /* 16-bit colors */ 1162ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_888_RGB = 12, /* 24-bit colors */ 1172ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1182ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_1555_ARGB = 13, /* 16-bit colors (1-bit alpha) */ 1192ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_4444_ARGB = 14, /* 16-bit colors (4-bit alpha) */ 1202ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_8565_ARGB = 15, /* 24-bit colors (8-bit alpha) */ 1212ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_8888_ARGB = 16, /* 32-bit colors (8-bit alpha) */ 1222ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1232ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_5551_RGBA = 17, /* 16-bit colors (1-bit alpha) */ 1242ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_4444_RGBA = 18, /* 16-bit colors (4-bit alpha) */ 1252ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_5658_RGBA = 19, /* 24-bit colors (8-bit alpha) */ 1262ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_8888_RGBA = 20, /* 32-bit colors (8-bit alpha) */ 1272ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1282ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel /* derived RGB color formats (base format + mode bits) */ 1292ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1302ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_RGB_FORMAT; 1312ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1322ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Definitions of supported YUV formats, used in C2D_YUV_SURFACE_DEF. 1332ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Each of Y,U,V channels usually takes 1 byte and therefore is 1342ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * individually addressable. The definitions below show how Y,U,V 1352ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * channels are packed into macropixels for each particular format. 1362ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The order is from left (smaller byte addresses) to right (larger 1372ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * byte addresses). The first three digits (4xx) denote the chroma 1382ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * subsampling in standard YUV notation. The digits in the macropixel 1392ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * denote that the whole block (from the previous digit or from the 1402ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * beginning) has to be repeated the number of times. Underscores 1412ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * between Y,U,V channels are used to describe separate planes for 1422ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * planar YUV formats. Formats are mapped to numbers so that future 1432ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * versions with various YUV permutations are easy to add. 1442ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * If the C2D_FORMAT_INTERLACED bit is set, the line order is 1452ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * interlaced: 0,2,4,...1,3,5... if applicable. 1462ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * If the C2D_FORMAT_TRANSPARENT bit is set, the least significant 1472ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * bit of Y channel serves as alpha: 0 - transparent, 1 - opaque. */ 1482ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef enum { 1492ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_411_YYUYYV = 110, /* packed, 12-bit */ 1502ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_411_YUYYVY = 111, /* packed, 12-bit */ 1512ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_411_UYYVYY = 112, /* packed, 12-bit, "Y411" */ 1522ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_411_YUYV2Y4 = 116, /* packed, 12-bit */ 1532ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_411_UYVY2Y4 = 117, /* packed, 12-bit, "Y41P" */ 1542ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1552ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_422_YUYV = 120, /* packed, 16-bit, "YUY2" */ 1562ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_422_UYVY = 121, /* packed, 16-bit, "UYVY" */ 1572ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_422_YVYU = 122, /* packed, 16-bit, "YVYU" */ 1582ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_422_VYUY = 123, /* packed, 16-bit */ 1592ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1602ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_444_YUV = 130, /* packed, 24-bit */ 1612ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_444_UYV = 131, /* packed, 24-bit, "IYU2" */ 1622ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_444_AYUV = 136, /* packed, 24-bit, "AYUV" */ 1632ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1642ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_410_Y_UV = 150, /* planar, Y + interleaved UV */ 1652ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_411_Y_UV = 151, /* planar, Y + interleaved UV */ 1662ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_420_Y_UV = 152, /* planar, Y + interleaved UV */ 1672ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_422_Y_UV = 153, /* planar, Y + interleaved UV */ 1682ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_444_Y_UV = 154, /* planar, Y + interleaved UV */ 1692ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1702ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_410_Y_VU = 160, /* planar, Y + interleaved VU */ 1712ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_411_Y_VU = 161, /* planar, Y + interleaved VU */ 1722ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_420_Y_VU = 162, /* planar, Y + interleaved VU */ 1732ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_422_Y_VU = 163, /* planar, Y + interleaved VU */ 1742ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_444_Y_VU = 164, /* planar, Y + interleaved VU */ 1752ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1762ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_410_Y_U_V = 170, /* planar, Y + U + V separate */ 1772ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_411_Y_U_V = 171, /* planar, Y + U + V separate */ 1782ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_420_Y_V_U = 172, /* planar, Y + V + U separate */ 1792ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_420_Y_U_V = 173, /* planar, Y + U + V separate */ 1802ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_422_Y_U_V = 174, /* planar, Y + U + V separate */ 1812ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_444_Y_U_V = 175, /* planar, Y + U + V separate */ 1822ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1832ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_800_Y = 190, /* planar, Y only, grayscale */ 1842ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1852ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel /* derived YUV color formats (base format + mode bits), FOURCC */ 1862ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1872ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_411_Y411 = 112, 1882ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_411_Y41P = 117, 1892ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_411_IY41 = 117 | (1 << 14), 1902ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_411_Y41T = 117 | (1 << 15), 1912ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1922ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_422_YUY2 = 120, 1932ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_422_IUYV = 121 | (1 << 14), 1942ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_422_Y42T = 121 | (1 << 15), 1952ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_444_IYU2 = 131, 1962ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1972ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_420_NV12 = 152, 1982ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_420_NV21 = 162, 1992ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 2002ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_410_YUV9 = 170, 2012ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_410_YVU9 = 170, 2022ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_411_Y41B = 171, 2032ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_420_YV12 = 172, 2042ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_420_IYUV = 173, 2052ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_420_I420 = 173, 2062ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_422_YV16 = 174, 2072ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_422_Y42B = 174, 2082ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 2092ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_FORMAT_800_Y800 = 190, 2102ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 2112ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_YUV_FORMAT; 2122ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 2132ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 2142ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Configuration bits, used in the config_mask field of C2D_OBJECT struct */ 2152ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef enum { 2162ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_SOURCE_RECT_BIT = (1 << 0), /* enables source_rect field */ 2172ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_MIRROR_H_BIT = (1 << 1), /* enables horizontal flipping */ 2182ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_MIRROR_V_BIT = (1 << 2), /* enables vertical flipping */ 2192ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_SOURCE_TILE_BIT = (1 << 3), /* enables source surface tiling */ 2202ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_TARGET_RECT_BIT = (1 << 4), /* enables target_rect field */ 2212ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ROTATE_BIT = (1 << 5), /* enables all rotation fields */ 2222ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_SCISSOR_RECT_BIT = (1 << 6), /* enables scissor_rect field */ 2232ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_MASK_SURFACE_BIT = (1 << 7), /* enables mask_surface_id field */ 2242ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_MASK_ALIGN_BIT = (1 << 8), /* aligns mask to source_rect */ 2252ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_MASK_SCALE_BIT = (1 << 9), /* enables mask surface scaling */ 2262ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_MASK_TILE_BIT = (1 << 10), /* enables mask surface tiling */ 2272ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_GLOBAL_ALPHA_BIT = (1 << 11), /* enables global_alpha field */ 2282ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_COLOR_KEY_BIT = (1 << 12), /* enables color_key field */ 2292ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_NO_PIXEL_ALPHA_BIT = (1 << 13), /* disables source alpha channel */ 2302ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_NO_BILINEAR_BIT = (1 << 14), /* disables bilinear on scaling */ 2312ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_NO_ANTIALIASING_BIT = (1 << 15), /* disables antialiasing on edges */ 2322ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRAW_LINE_BIT = (1 << 16), /* enables line drawing with source rectangle */ 2332ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRAW_LINE_NOLAST = (1 << 17), /* disable last pixel draw for line */ 2342ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_SOURCE_CONFIG; 2352ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 2362ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 2372ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Target configuration bits, defines rotation + mirroring. 2382ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Mirror is applied prior to rotation if enabled. */ 2392ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef enum { 2402ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_TARGET_MIRROR_H = (1 << 0), /* horizontal flip */ 2412ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_TARGET_MIRROR_V = (1 << 1), /* vertical flip */ 2422ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_TARGET_ROTATE_0 = (0 << 2), /* no rotation */ 2432ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_TARGET_ROTATE_90 = (1 << 2), /* 90 degree rotation */ 2442ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_TARGET_ROTATE_180 = (2 << 2), /* 180 degree rotation */ 2452ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_TARGET_ROTATE_270 = (3 << 2), /* 270 degree rotation, 90 + 180 */ 2462ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_TARGET_MASK_ALIGN = (1 << 4), /* aligns mask to target scissor */ 2472ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_TARGET_MASK_SCALE = (1 << 5), /* enables mask scaling */ 2482ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_TARGET_MASK_TILE = (1 << 6), /* enables mask tiling */ 2492ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_TARGET_COLOR_KEY = (1 << 7), /* enables target_color_key */ 2502ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_TARGET_NO_PIXEL_ALPHA = (1 << 8), /* disables target alpha channel */ 2512ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_TARGET_CONFIG; 2522ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 2532ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define C2D_TARGET_ROTATION_MASK (C2D_TARGET_ROTATE_90*3) 2542ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 2552ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Additional blend modes, can be used with both source and target configs. 2562ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel If none of the below is set, the default "SRC over DST" is applied. */ 2572ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef enum { 2582ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_SRC_OVER = (0 << 20), /* Default, Porter-Duff "SRC over DST" */ 2592ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_SRC = (1 << 20), /* Porter-Duff "SRC" */ 2602ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_SRC_IN = (2 << 20), /* Porter-Duff "SRC in DST" */ 2612ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_DST_IN = (3 << 20), /* Porter-Duff "DST in SRC" */ 2622ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_SRC_OUT = (4 << 20), /* Porter-Duff "SRC out DST" */ 2632ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_DST_OUT = (5 << 20), /* Porter-Duff "DST out SRC" */ 2642ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_DST_OVER = (6 << 20), /* Porter-Duff "DST over SRC" */ 2652ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_SRC_ATOP = (7 << 20), /* Porter-Duff "SRC ATOP" */ 2662ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_DST_ATOP = (8 << 20), /* Porter-Duff "DST ATOP" */ 2672ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_XOR = (9 << 20), /* Xor */ 2682ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_MULTIPLY = (10 << 20), /* OpenVG "MULTIPLY" */ 2692ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_SCREEN = (11 << 20), /* OpenVG "SCREEN" */ 2702ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_DARKEN = (12 << 20), /* OpenVG "DARKEN" */ 2712ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_LIGHTEN = (13 << 20), /* OpenVG "LIGHTEN" */ 2722ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_ADDITIVE = (14 << 20), /* OpenVG "ADDITIVE" */ 2732ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_DIRECT = (15 << 20), /* Direct alpha blitting */ 2742ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_INVERTC = (16 << 20), /* Invert color */ 2752ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_ALPHA_BLEND_NONE = (1 << 25), /* disables alpha blending */ 2762ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_ALPHA_BLEND_MODE; 2772ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 2782ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Configuration bits, used in the config_mask field of C2D_OBJECT struct */ 2792ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef enum { 2802ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_OVERRIDE_GLOBAL_TARGET_ROTATE_CONFIG = (1 << 27), /* Overrides TARGET Config */ 2812ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_OVERRIDE_TARGET_ROTATE_0 = (0 << 28), /* no rotation */ 2822ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_OVERRIDE_TARGET_ROTATE_90 = (1 << 28), /* 90 degree rotation */ 2832ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_OVERRIDE_TARGET_ROTATE_180 = (2 << 28), /* 180 degree rotation */ 2842ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_OVERRIDE_TARGET_ROTATE_270 = (3 << 28), /* 270 degree rotation */ 2852ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_SOURCE_TARGET_CONFIG; 2862ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 2872ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define C2D_OVERRIDE_SOURCE_CONFIG_TARGET_ROTATION_SHIFT_MASK 28 2882ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define C2D_OVERRIDE_TARGET_CONFIG_TARGET_ROTATION_SHIFT_MASK 2 2892ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 2902ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 2912ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Surface caps enumeration */ 2922ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef enum { 2932ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_SOURCE = (1 << 0), /* allows to use as a source */ 2942ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_TARGET = (1 << 1), /* allows to use as a target */ 2952ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_MASK = (1 << 2), /* allows to use as a mask */ 2962ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_PALETTE = (1 << 3), /* allows to use as a palette */ 2972ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_SURFACE_BITS; 2982ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 2992ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Surface type enumeration */ 3002ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef enum { 3012ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_SURFACE_RGB_HOST = 1, /* Host memory RGB surface */ 3022ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_SURFACE_RGB_EXT = 2, /* External memory RGB surface */ 3032ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_SURFACE_YUV_HOST = 3, /* Host memory YUV surface */ 3042ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_SURFACE_YUV_EXT = 4, /* External memory YUV surface */ 3052ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_SURFACE_WITH_PHYS = (1<<3), /* physical address already mapped */ 3062ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel /* this bit is valid with HOST types */ 3072ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_SURFACE_WITH_PHYS_DUMMY = (1<<4), /* physical address already mapped */ 3082ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel /* this bit is valid with HOST types */ 3092ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_SURFACE_TYPE; 3102ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 3112ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Structure for registering a RGB buffer as a blit surface */ 3122ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef struct { 3132ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 format; /* RGB color format plus additional mode bits */ 3142ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 width; /* defines width in pixels */ 3152ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 height; /* defines height in pixels */ 3162ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel void *buffer; /* pointer to the RGB buffer */ 3172ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel void *phys; /* physical address */ 3182ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int32 stride; /* defines stride in bytes, negative stride is allowed */ 3192ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_RGB_SURFACE_DEF; 3202ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 3212ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Structure for registering a YUV plane(s) as a blit surface */ 3222ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef struct { 3232ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 format; /* YUV color format plus additional mode bits */ 3242ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 width; /* defines width in pixels */ 3252ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 height; /* defines height in pixels */ 3262ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel void *plane0; /* holds the whole buffer if YUV format is not planar */ 3272ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel void *phys0; /* physical address */ 3282ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int32 stride0; /* stride in bytes if YUV format is not planar */ 3292ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel void *plane1; /* holds UV or VU plane for planar interleaved */ 3302ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel void *phys1; /* physical address */ 3312ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int32 stride1; /* stride for UV or VU plane for planar interleaved */ 3322ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel void *plane2; /* holds the 3. plane, ignored if YUV format is not planar */ 3332ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel void *phys2; /* physical address */ 3342ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int32 stride2; /* stride for the 3. plane, ignored if YUV format is not planar */ 3352ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_YUV_SURFACE_DEF; 3362ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 3372ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 3382ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Rectangle definition */ 3392ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef struct { 3402ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int32 x; /* upper-left x */ 3412ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int32 y; /* upper-left y */ 3422ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int32 width; /* width */ 3432ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int32 height; /* height */ 3442ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_RECT; 3452ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 3462ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* C2D_OBJECT encapsulates the blit parameters for a source surface. 3472ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The fg_color defines color in target format for bits equal to 1 3482ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * in the source C2D_COLOR_FORMAT_1 format. It also defines rendering 3492ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * color for all alpha-only source formats. If the surface_id is 0 3502ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * the fg_color defines a constant fill color used instead of the surface. 3512ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The bg_color defines color in target format for bits equal to 0 3522ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * in the source C2D_COLOR_FORMAT_1 format, otherwise both are ignored. 3532ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The palette_id is used for all palette source formats, otherwise ignored. 3542ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 3552ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The source_rect first defines the content of the source surface, 3562ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * it is then horizontally/vertically flipped if C2D_MIRROR_*_BIT is set, 3572ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * then scaled with bilinear interpolation to exactly fit target_rect 3582ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * or repeated across target_rect if C2D_SOURCE_TILE_BIT is set, 3592ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * target_rect is then rotated clockwise by an arbitrary angle in degrees 3602ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * around the rot_orig_x/y, defined relative to target_rect's top left point, 3612ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * and then clipped to scissor_rect defined in target coordinate system. 3622ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 3632ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Finally alpha blending is applied before pixels get written into the target. 3642ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Surface's pixel alpha is combined with mask alpha and with global alpha. 3652ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Mask surface follows all transformations applied to the source surface. 3662ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Source color key defines transparent color, applied together with alpha. */ 3672ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef struct C2D_OBJECT_STR { 3682ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 surface_id; /* source surface */ 3692ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 3702ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 fg_color; /* foreground color */ 3712ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 bg_color; /* background color */ 3722ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 palette_id; /* one-dimensional horizontal palette surface */ 3732ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 3742ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 config_mask; /* defines which fields below are enabled */ 3752ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 3762ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_RECT source_rect; /* region of the source surface, 16.16 fp */ 3772ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_RECT target_rect; /* position and scaling in target, 16.16 fp */ 3782ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 3792ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int32 rot_orig_x; /* rotation origin relative to target_rect's... */ 3802ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int32 rot_orig_y; /* ...top left point, both are 16.16 fp */ 3812ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int32 rotation; /* clock-wise rotation in degrees, 16.16 fp */ 3822ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 3832ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_RECT scissor_rect; /* defines the clip rectangle in target surface */ 3842ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 3852ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 mask_surface_id; /* source alpha-mask surface */ 3862ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 global_alpha; /* 0 = fully transparent, 255 = fully opaque */ 3872ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 color_key; /* transparent color for the source surface */ 3882ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 3892ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel struct C2D_OBJECT_STR *next; /* pointer to the next object or NULL */ 3902ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_OBJECT; 3912ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 3922ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Configuration bits, driver capabilities used by 2Dapplications */ 3932ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef enum { 3942ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_GLOBAL_ALPHA_OP = (1 << 0), 3952ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_TILE_OP = (1 << 1), 3962ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_COLOR_KEY_OP = (1 << 2), 3972ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_NO_PIXEL_ALPHA_OP = (1 << 3), 3982ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_TARGET_ROTATE_OP = (1 << 4), 3992ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_ANTI_ALIASING_OP = (1 << 5), /* antialiasing */ 4002ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_BILINEAR_FILTER_OP = (1 << 6), 4012ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_LENS_CORRECTION_OP = (1 << 7), 4022ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_OVERRIDE_TARGET_ROTATE_OP = (1 << 8), 4032ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_SHADER_BLOB_OP = (1 << 9), 4042ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_MASK_SURFACE_OP = (1 << 10), /* mask surface */ 4052ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_MIRROR_H_OP = (1 << 11), /* horizontal flip */ 4062ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_MIRROR_V_OP = (1 << 12), /* vertical flip */ 4072ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_SCISSOR_RECT_OP = (1 << 13), 4082ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_SOURCE_RECT_OP = (1 << 14), 4092ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_TARGET_RECT_OP = (1 << 15), 4102ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_ROTATE_OP = (1 << 16), /* all rotations */ 4112ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_FLUSH_WITH_FENCE_FD_OP = (1 << 17), /* all rotations */ 4122ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_UBWC_COMPRESSED_OP = (1 << 18), /* UBWC Compression */ 4132ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_SUPPORTS_ALL_CAPABILITIES_OP = ((0xFFFFFFFF) >> (31 - 18)) /* mask for all capabilities supported */ 4142ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_DRIVER_CAPABILITIES; 4152ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 4162ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* 2D driver workaround bits used by the 2D applications */ 4172ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef enum { 4182ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_WORKAROUND_NONE = 0, /* NO workaround */ 4192ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DRIVER_WORKAROUND_SWAP_UV_FOR_YUV_TARGET = (1 << 0), /* Swap UV when this flag set */ 4202ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_DRIVER_WORKAROUND; 4212ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 4222ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Structure to query Driver information */ 4232ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef struct { 4242ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 capabilities_mask; 4252ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 workaround_mask; 4262ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 reserved1; 4272ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 reserved2; 4282ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 reserved3; 4292ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_DRIVER_INFO; 4302ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 4312ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Structure to query Driver information */ 4322ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef struct { 4332ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 max_surface_template_needed; 4342ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 reserved1; 4352ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 reserved2; 4362ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 reserved3; 4372ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_DRIVER_SETUP_INFO; 4382ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 4392ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/*****************************************************************************/ 4402ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/**************************** C2D API 2.0 ********************************/ 4412ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/*****************************************************************************/ 4422ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 4432ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/****************************************************************************** 4442ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Functions to create/destroy surfaces */ 4452ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 4462ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Creates a generic blit surface according to its type. 4472ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Pass a combination of desired surface bits according to planned usage. 4482ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Accepted values for surface_bits may include bits from C2D_SURFACE_BITS, 4492ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * and also from C2D_DISPLAY for compatibility with HW display controller. 4502ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * For host memory types the memory is preallocated outside the API 4512ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * and should remain valid until surface is destroyed. 4522ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * For external memory types the memory is allocated within API. 4532ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * On success, the non-zero surface identifier is returned. 4542ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * All numbers greater that 0 are valid surface identifiers, 0 is invalid. 4552ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 4562ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Host memory RGB surface: 4572ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * surface_type = C2D_SURFACE_RGB_HOST 4582ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * surface_definition = C2D_RGB_SURFACE_DEF 4592ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * all fields in definition structure should be set 4602ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 4612ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * External memory RGB surface: 4622ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * surface_type = C2D_SURFACE_RGB_EXT 4632ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * surface_definition = C2D_RGB_SURFACE_DEF 4642ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * buffer field in definition structure is ignored 4652ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 4662ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Host memory YUV surface: 4672ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * surface_type = C2D_SURFACE_YUV_HOST 4682ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * surface_definition = C2D_YUV_SURFACE_DEF 4692ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * one or all plane and stride fields in definition structure 4702ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * should be set depending on whether the format is planar or not 4712ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 4722ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * External memory YUV surface: 4732ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * surface_type = C2D_SURFACE_YUV_EXT 4742ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * surface_definition = C2D_YUV_SURFACE_DEF 4752ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * all plane and stride fields in definition structure are ignored */ 4762ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dCreateSurface( uint32 *surface_id, 4772ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 surface_bits, 4782ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_SURFACE_TYPE surface_type, 4792ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel void *surface_definition ); 4802ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 4812ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Requests properties of the specified surface. */ 4822ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dQuerySurface( uint32 surface_id, 4832ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 *surface_bits, 4842ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_SURFACE_TYPE *surface_type, 4852ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 *width, uint32 *height, 4862ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 *format ); 4872ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 4882ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Destroys a generic blit surface. 4892ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * For external memory surfaces also deallocates the memory. 4902ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * It is safe to free any external resources associated with a given 4912ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * surface on c2dCreateSurface call after this function returns. */ 4922ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dDestroySurface( uint32 surface_id ); 4932ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 4942ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 4952ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/****************************************************************************** 4962ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Functions to modify/exchange surface data */ 4972ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 4982ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* The format of fill_color is the same as color format being used 4992ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * for specified surface. If fill_rect is NULL the whole surface is filled. 5002ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Alpha-blending is not performed while filling. 5012ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The operation is complete when function returns. */ 5022ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dFillSurface( uint32 surface_id, 5032ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 fill_color, 5042ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_RECT *fill_rect ); 5052ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 5062ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Writes data located in host memory into the specified surface. 5072ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The chunk of host memory is identified with surface_type and 5082ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * surface_definition, no surface registration needed in this case. 5092ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Only C2D_SURFACE_RGB_HOST, C2D_SURFACE_YUV_HOST are accepted. 5102ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * If only part of the host memory buffer should be loaded, it should 5112ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * be configured in surface_definition using width, height and stride. 5122ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The x and y are defined in target surface coordinate space. 5132ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Color conversion has to be done, if color formats differ. 5142ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Alpha-blending is not performed while writing. 5152ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The operation is complete when function returns. */ 5162ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dWriteSurface( uint32 surface_id, 5172ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_SURFACE_TYPE surface_type, 5182ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel void *surface_definition, 5192ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int32 x, int32 y ); 5202ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 5212ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Reads data from the specified surface into the host memory. 5222ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The chunk of host memory is identified with surface_type and 5232ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * surface_definition, no surface registration needed in this case. 5242ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Only C2D_SURFACE_RGB_HOST, C2D_SURFACE_YUV_HOST are accepted. 5252ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * If only part of the surface should be read, it should 5262ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * be configured in surface_definition using width, height and stride. 5272ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The x and y are defined in source surface coordinate space. 5282ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Color conversion has to be done, if color formats differ. 5292ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Alpha-blending is not performed while reading. 5302ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The operation is complete when function returns. */ 5312ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dReadSurface( uint32 surface_id, 5322ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_SURFACE_TYPE surface_type, 5332ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel void *surface_definition, 5342ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel int32 x, int32 y ); 5352ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 5362ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Notifies c2d imlementation that surface has been updated from outside the API, 5372ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * if updated_rect is NULL then the whole surface has been updated. */ 5382ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dSurfaceUpdated( uint32 surface_id, 5392ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_RECT *updated_rect ); 5402ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 5412ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Updates surface information. 5422ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Could be called only for host surfaces set with parameter "C2D_SURFACE_WITH_PHYS". 5432ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Count for surface planes have to be same than for already allocated surface */ 5442ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dUpdateSurface( uint32 surface_id, 5452ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 surface_bits, 5462ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_SURFACE_TYPE surface_type, 5472ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel void *surface_definition ); 5482ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 5492ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/****************************************************************************** 5502ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Functions to do actual blit */ 5512ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 5522ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Draw a list of blit objects into the given target. 5532ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The target_config is a bitwise OR of values from C2D_TARGET_CONFIG. 5542ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The target transformation creates the effect that target surface 5552ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * is transformed before the blit and then transformed back 5562ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * after blit, however no physical target transform is performed. 5572ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The objects_list is a linked list of blit objects, no more 5582ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * than num_objects is drawn from the given list. 5592ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * If num_objects is 0, the whole list is drawn. 5602ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The blit is not guaranteed to complete after function returns. */ 5612ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dDraw( uint32 target_id, 5622ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 target_config, C2D_RECT *target_scissor, 5632ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 target_mask_id, uint32 target_color_key, 5642ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_OBJECT *objects_list, uint32 num_objects ); 5652ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 5662ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 5672ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* timstamp set in the blit commands flush */ 5682ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef void* c2d_ts_handle; 5692ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 5702ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Forces any pending blit to complete for a given target. 5712ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Non-blocking. All input surfaces for this target except those 5722ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * which are shared with other targets are expected to be immediately 5732ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * writable after client has been waiting returned timestamp with 5742ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * c2dWaitTimestamp funtion or c2dFinish has been called for same target */ 5752ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dFlush( uint32 target_id, c2d_ts_handle *timestamp); 5762ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 5772ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 5782ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Waits the pending timestamp */ 5792ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dWaitTimestamp( c2d_ts_handle timestamp ); 5802ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 5812ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 5822ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Forces any pending blit to complete for a given target. 5832ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Blocking version, returns when blit is done. 5842ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * All input surfaces for this target except those which are shared with 5852ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * other targets are expected to be immediately 5862ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * writable after this function returns. */ 5872ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dFinish( uint32 target_id ); 5882ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 5892ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 5902ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/*****************************************************************************/ 5912ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/****************************** Display API **********************************/ 5922ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/*****************************************************************************/ 5932ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 5942ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 5952ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Display input enumeration */ 5962ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef enum { 5972ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DISPLAY_INPUT_0 = 0, /*!< default input */ 5982ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DISPLAY_INPUT_1 = (1<<16), /*!< Overlay 1 */ 5992ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DISPLAY_INPUT_2 = (1<<17), /*!< Overlay 2... */ 6002ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_DISPLAY_INPUT; 6012ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6022ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6032ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/****************************************************************************** 6042ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Functions for display output. */ 6052ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6062ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Functionality described in this section is optional and is 6072ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * provided only for the cases when blit HW 6082ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * is tightly bound to the display controller. */ 6092ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6102ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Display enumeration, may also be used in surface caps */ 6112ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef enum { 6122ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DISPLAY_MAIN = (1 << 10), /* main display */ 6132ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DISPLAY_SECONDARY = (1 << 11), /* secondary display */ 6142ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DISPLAY_TV_OUT = (1 << 12), /* tv-out */ 6152ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_DISPLAY; 6162ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6172ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Display window enumeration */ 6182ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef enum { 6192ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DISPLAY_OVERLAY = C2D_DISPLAY_INPUT_1, /*!< Overlay window bit. This defines display input. 6202ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel When defined the surface is set on the overlay window 6212ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel otherwise the surface is set on the background window. */ 6222ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_DISPLAY_WINDOW; /*!< Window bit set with display parameter */ 6232ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6242ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6252ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Display update modes */ 6262ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeltypedef enum { 6272ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DISPLAY_MODE_TEAR_SYNC = (1 << 0), /* enables tearing sync */ 6282ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_DISPLAY_MODE_SURF_REMOVE = (1 << 1), /* Remove surface from given display + input */ 6292ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} C2D_DISPLAY_MODE; 6302ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6312ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6322ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Sets the given surface as a current display front buffer. 6332ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Several displays can be specified as an output if supported. 6342ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Still only one input can be specified at a time fro display/displays. 6352ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The surface remains shown until it gets replaced with another one. */ 6362ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dDisplaySetSurface( uint32 display, 6372ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 surface_id, uint32 mode ); 6382ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6392ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Returns the current surface for a particular display. 6402ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Only one display can be specified at a time. 6412ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * The latest surface set with compDisplaySetSurface or 6422ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * the default pre-allocated surface is returned. */ 6432ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dDisplayGetSurface( uint32 display, 6442ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 *surface_id ); 6452ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6462ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Returns the properties for a particular display. 6472ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Only one display can be specified at a time. */ 6482ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dDisplayGetProperties( uint32 display, 6492ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 *width, uint32 *height, 6502ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 *format ); 6512ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6522ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* Sets the properties for a particular display input. 6532ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Only one display + input can be specified at a time. 6542ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * C2D_OBJECT used to set input rect(target rect), 6552ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * blending operations, rotation...etc for display source */ 6562ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dDisplaySetObject( uint32 display, 6572ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32 target_config, uint32 target_color_key, 6582ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel C2D_OBJECT * c2dObject, uint32 mode); 6592ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6602ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* allows user to map a memory region to the gpu. only supported on linux 6612ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * mem_fd is the fd of the memory region, hostptr is the host pointer to the region, 6622ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * len and offset are the size and offset of the memory. 6632ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * flags is one of the memory types supported by gsl 6642ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * gpaddr is passed by refernce back to the user 6652ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel */ 6662ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dMapAddr ( int mem_fd, void * hostptr, uint32 len, uint32 offset, uint32 flags, void ** gpuaddr); 6672ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6682ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* allows user to unmap memory region mapped by c2dMapAddr. 6692ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * gpaddr is the gpuaddr to unmap */ 6702ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dUnMapAddr (void * gpuaddr); 6712ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6722ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* allows user to query driver capabilities. 6732ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * driver_info is the information about driver */ 6742ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dGetDriverCapabilities( C2D_DRIVER_INFO * driver_info); 6752ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6762ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* create a fence fd for the timestamp */ 6772ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry StrudelC2D_API C2D_STATUS c2dCreateFenceFD( uint32 target_id, c2d_ts_handle timestamp, int32 *fd); 6782ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6792ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/*****************************************************************************/ 6802ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6812ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#ifdef __cplusplus 6822ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} 6832ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#endif 6842ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 6852ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#endif /* __c2d2_h_ */ 686