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