Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /**********************************************************
  2.  * Copyright 2009-2011 VMware, Inc. All rights reserved.
  3.  *
  4.  * Permission is hereby granted, free of charge, to any person
  5.  * obtaining a copy of this software and associated documentation
  6.  * files (the "Software"), to deal in the Software without
  7.  * restriction, including without limitation the rights to use, copy,
  8.  * modify, merge, publish, distribute, sublicense, and/or sell copies
  9.  * of the Software, and to permit persons to whom the Software is
  10.  * furnished to do so, subject to the following conditions:
  11.  *
  12.  * The above copyright notice and this permission notice shall be
  13.  * included in all copies or substantial portions of the Software.
  14.  *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  16.  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  17.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  18.  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  19.  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  20.  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  21.  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  22.  * SOFTWARE.
  23.  *
  24.  * The format encoding idea is partially borrowed from libpixman, but it is not
  25.  * considered a "substantial part of the software", so the pixman copyright
  26.  * is left out for simplicity, and acknowledgment is instead given in this way.
  27.  *
  28.  *********************************************************
  29.  * Authors:
  30.  * Zack Rusin <zackr-at-vmware-dot-com>
  31.  * Thomas Hellstrom <thellstrom-at-vmware-dot-com>
  32.  */
  33.  
  34. #ifndef _XA_TRACKER_H_
  35. #define _XA_TRACKER_H_
  36.  
  37. #include <stdint.h>
  38.  
  39. #define XA_TRACKER_VERSION_MAJOR 1
  40. #define XA_TRACKER_VERSION_MINOR 0
  41. #define XA_TRACKER_VERSION_PATCH 0
  42.  
  43. #define XA_FLAG_SHARED         (1 << 0)
  44. #define XA_FLAG_RENDER_TARGET  (1 << 1)
  45. #define XA_FLAG_SCANOUT        (1 << 2)
  46.  
  47. #define XA_MAP_READ            (1 << 0)
  48. #define XA_MAP_WRITE           (1 << 1)
  49.  
  50. #define XA_ERR_NONE            0
  51. #define XA_ERR_NORES           1
  52. #define XA_ERR_INVAL           2
  53. #define XA_ERR_BUSY            3
  54.  
  55. enum xa_surface_type {
  56.     xa_type_other,
  57.     xa_type_a,
  58.     xa_type_argb,
  59.     xa_type_abgr,
  60.     xa_type_bgra,
  61.     xa_type_z,
  62.     xa_type_zs,
  63.     xa_type_sz,
  64.     xa_type_yuv_component
  65. };
  66.  
  67. /*
  68.  * Note that these formats should not be assumed to be binary compatible with
  69.  * pixman formats, but with the below macros and a format type map,
  70.  * conversion should be simple. Macros for now. We might replace with
  71.  * inline functions.
  72.  */
  73.  
  74. #define xa_format(bpp,type,a,r,g,b)     (((bpp) << 24) |  \
  75.                                          ((type) << 16) | \
  76.                                          ((a) << 12) |    \
  77.                                          ((r) << 8) |     \
  78.                                          ((g) << 4) |     \
  79.                                          ((b)))
  80. /*
  81.  *  Non-RGBA one- and two component formats.
  82.  */
  83.  
  84. #define xa_format_c(bpp,type,c1,c2) (((bpp) << 24) |      \
  85.                                      ((type) << 16) |     \
  86.                                      ((c1) << 8) |        \
  87.                                      ((c2)))
  88. #define xa_format_bpp(f)        (((f) >> 24)       )
  89. #define xa_format_type(f)       (((f) >> 16) & 0xff)
  90. #define xa_format_a(f)  (((f) >> 12) & 0x0f)
  91. #define xa_format_r(f)  (((f) >>  8) & 0x0f)
  92. #define xa_format_g(f)  (((f) >>  4) & 0x0f)
  93. #define xa_format_b(f)  (((f)      ) & 0x0f)
  94. #define xa_format_rgb(f)        (((f)      ) & 0xfff)
  95. #define xa_format_c1(f)          (((f) >> 8 ) & 0xff)
  96. #define xa_format_c2(f)          (((f)      ) & 0xff)
  97. #define xa_format_argb_depth(f) (xa_format_a(f) +       \
  98.                                  xa_format_r(f) +       \
  99.                                  xa_format_g(f) +       \
  100.                                  xa_format_b(f))
  101. #define xa_format_c_depth(f)    (xa_format_c1(f) + \
  102.                                  xa_format_c2(f))
  103.  
  104. static inline int
  105. xa_format_type_is_color(uint32_t xa_format)
  106. {
  107.     return (xa_format_type(xa_format) < xa_type_z);
  108. }
  109.  
  110. static inline unsigned int
  111. xa_format_depth(uint32_t xa_format)
  112. {
  113.     return ((xa_format_type_is_color(xa_format)) ?
  114.             xa_format_argb_depth(xa_format) : xa_format_c_depth(xa_format));
  115. }
  116.  
  117. enum xa_formats {
  118.     xa_format_unknown = 0,
  119.     xa_format_a8 = xa_format(8, xa_type_a, 8, 0, 0, 0),
  120.  
  121.     xa_format_a8r8g8b8 = xa_format(32, xa_type_argb, 8, 8, 8, 8),
  122.     xa_format_x8r8g8b8 = xa_format(32, xa_type_argb, 0, 8, 8, 8),
  123.     xa_format_r5g6b5 = xa_format(16, xa_type_argb, 0, 5, 6, 5),
  124.     xa_format_x1r5g5b5 = xa_format(16, xa_type_argb, 0, 5, 5, 5),
  125.  
  126.     xa_format_z16 = xa_format_c(16, xa_type_z, 16, 0),
  127.     xa_format_z32 = xa_format_c(32, xa_type_z, 32, 0),
  128.     xa_format_z24 = xa_format_c(32, xa_type_z, 24, 0),
  129.  
  130.     xa_format_x8z24 = xa_format_c(32, xa_type_sz, 24, 0),
  131.     xa_format_s8z24 = xa_format_c(32, xa_type_sz, 24, 8),
  132.     xa_format_z24x8 = xa_format_c(32, xa_type_zs, 24, 0),
  133.     xa_format_z24s8 = xa_format_c(32, xa_type_zs, 24, 8),
  134.  
  135.     xa_format_yuv8 = xa_format_c(8, xa_type_yuv_component, 8, 0)
  136. };
  137.  
  138. struct xa_tracker;
  139. struct xa_surface;
  140.  
  141. struct xa_box {
  142.     uint16_t x1, y1, x2, y2;
  143. };
  144.  
  145. extern void xa_tracker_version(int *major, int *minor, int *patch);
  146.  
  147. extern struct xa_tracker *xa_tracker_create(int drm_fd);
  148.  
  149. extern void xa_tracker_destroy(struct xa_tracker *xa);
  150.  
  151. extern int xa_format_check_supported(struct xa_tracker *xa,
  152.                                      enum xa_formats xa_format,
  153.                                      unsigned int flags);
  154.  
  155. extern struct xa_surface *xa_surface_create(struct xa_tracker *xa,
  156.                                             int width,
  157.                                             int height,
  158.                                             int depth,
  159.                                             enum xa_surface_type stype,
  160.                                             enum xa_formats pform,
  161.                                             unsigned int flags);
  162.  
  163. enum xa_formats xa_surface_format(const struct xa_surface *srf);
  164.  
  165. extern void xa_surface_destroy(struct xa_surface *srf);
  166.  
  167. extern int xa_surface_redefine(struct xa_surface *srf,
  168.                                int width,
  169.                                int height,
  170.                                int depth,
  171.                                enum xa_surface_type stype,
  172.                                enum xa_formats rgb_format,
  173.                                unsigned int new_flags,
  174.                                int copy_contents);
  175.  
  176. extern int xa_surface_handle(struct xa_surface *srf,
  177.                              uint32_t * handle, unsigned int *byte_stride);
  178.  
  179. #endif
  180.