Subversion Repositories Kolibri OS

Rev

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

  1. /*
  2.  * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
  3.  * All Rights Reserved.
  4.  *
  5.  * Permission is hereby granted, free of charge, to any person obtaining a
  6.  * copy of this software and associated documentation files (the
  7.  * "Software"), to deal in the Software without restriction, including
  8.  * without limitation the rights to use, copy, modify, merge, publish,
  9.  * distribute, sub license, and/or sell copies of the Software, and to
  10.  * permit persons to whom the Software is furnished to do so, subject to
  11.  * the following conditions:
  12.  *
  13.  * The above copyright notice and this permission notice (including the
  14.  * next paragraph) shall be included in all copies or substantial portions
  15.  * of the Software.
  16.  *
  17.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  18.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  19.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  20.  * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
  21.  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  22.  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  23.  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  24.  *
  25.  *
  26.  * Author: Alan Hourihane <alanh@tungstengraphics.com>
  27.  * Author: Jakob Bornecrantz <wallbraker@gmail.com>
  28.  *
  29.  */
  30.  
  31. #ifndef _XORG_TRACKER_H_
  32. #define _XORG_TRACKER_H_
  33.  
  34. #include <stddef.h>
  35. #include <stdint.h>
  36. #include <errno.h>
  37. #include <drm.h>
  38. #include <xf86drm.h>
  39. #include <xf86drmMode.h>
  40. #include <xorg-server.h>
  41. #include <xf86.h>
  42. #include "xf86Crtc.h"
  43. #include <exa.h>
  44.  
  45. #ifdef DRM_MODE_FEATURE_DIRTYFB
  46. #include <damage.h>
  47. #endif
  48.  
  49. /* Prevent symbol clash */
  50. #undef Absolute
  51.  
  52. #include "compat-api.h"
  53. #include "pipe/p_screen.h"
  54. #include "util/u_inlines.h"
  55. #include "util/u_debug.h"
  56.  
  57. #define DRV_ERROR(msg)  xf86DrvMsg(pScrn->scrnIndex, X_ERROR, msg);
  58.  
  59. struct kms_bo;
  60. struct kms_driver;
  61. struct exa_context;
  62.  
  63. typedef struct
  64. {
  65.     int lastInstance;
  66.     int refCount;
  67.     ScrnInfoPtr pScrn_1;
  68.     ScrnInfoPtr pScrn_2;
  69. } EntRec, *EntPtr;
  70.  
  71. #define XORG_NR_FENCES 3
  72.  
  73. enum xorg_throttling_reason {
  74.     THROTTLE_RENDER,
  75.     THROTTLE_SWAP
  76. };
  77.  
  78. typedef struct _CustomizerRec
  79. {
  80.     Bool dirty_throttling;
  81.     Bool swap_throttling;
  82.     Bool no_3d;
  83.     Bool unhidden_hw_cursor_update;
  84.     Bool (*winsys_pre_init) (struct _CustomizerRec *cust, int fd);
  85.     Bool (*winsys_screen_init)(struct _CustomizerRec *cust);
  86.     Bool (*winsys_screen_close)(struct _CustomizerRec *cust);
  87.     Bool (*winsys_enter_vt)(struct _CustomizerRec *cust);
  88.     Bool (*winsys_leave_vt)(struct _CustomizerRec *cust);
  89.     void (*winsys_context_throttle)(struct _CustomizerRec *cust,
  90.                                     struct pipe_context *pipe,
  91.                                     enum xorg_throttling_reason reason);
  92.     Bool (*winsys_check_fb_size) (struct _CustomizerRec *cust,
  93.                                   unsigned long pitch,
  94.                                   unsigned long height);
  95. } CustomizerRec, *CustomizerPtr;
  96.  
  97. typedef struct _modesettingRec
  98. {
  99.     /* drm */
  100.     int fd;
  101.     unsigned fb_id;
  102.  
  103.     /* X */
  104.     EntPtr entityPrivate;
  105.  
  106.     int Chipset;
  107.     EntityInfoPtr pEnt;
  108.     struct pci_device *PciInfo;
  109.  
  110.     Bool noAccel;
  111.     Bool SWCursor;
  112.     CursorPtr cursor;
  113.     Bool swapThrottling;
  114.     Bool dirtyThrottling;
  115.     CloseScreenProcPtr CloseScreen;
  116.     Bool no3D;
  117.     Bool from_3D;
  118.     Bool isMaster;
  119.  
  120.     /* Broken-out options. */
  121.     OptionInfoPtr Options;
  122.  
  123.     void (*blockHandler)(BLOCKHANDLER_ARGS_DECL);
  124.     struct pipe_fence_handle *fence[XORG_NR_FENCES];
  125.  
  126.     CreateScreenResourcesProcPtr createScreenResources;
  127.  
  128.     /* for frontbuffer backing store */
  129.     Bool (*destroy_front_buffer)(ScrnInfoPtr pScrn);
  130.     Bool (*create_front_buffer)(ScrnInfoPtr pScrn);
  131.     Bool (*bind_front_buffer)(ScrnInfoPtr pScrn);
  132.  
  133.     /* kms */
  134.     struct kms_driver *kms;
  135.     struct kms_bo *root_bo;
  136.     uint16_t lut_r[256], lut_g[256], lut_b[256];
  137.  
  138.     /* gallium */
  139.     struct pipe_screen *screen;
  140.     struct pipe_context *ctx;
  141.     boolean d_depth_bits_last;
  142.     boolean ds_depth_bits_last;
  143.     struct pipe_resource *root_texture;
  144.  
  145.     /* exa */
  146.     struct exa_context *exa;
  147.     Bool noEvict;
  148.     Bool accelerate_2d;
  149.     Bool debug_fallback;
  150.  
  151.     CustomizerPtr cust;
  152.  
  153. #ifdef DRM_MODE_FEATURE_DIRTYFB
  154.     DamagePtr damage;
  155. #endif
  156. } modesettingRec, *modesettingPtr;
  157.  
  158. #define modesettingPTR(p) ((modesettingPtr)((p)->driverPrivate))
  159.  
  160. CustomizerPtr xorg_customizer(ScrnInfoPtr pScrn);
  161.  
  162. Bool xorg_has_gallium(ScrnInfoPtr pScrn);
  163.  
  164. void xorg_flush(ScreenPtr pScreen);
  165. /***********************************************************************
  166.  * xorg_exa.c
  167.  */
  168. struct pipe_resource *
  169. xorg_exa_get_texture(PixmapPtr pPixmap);
  170.  
  171. int
  172. xorg_exa_set_displayed_usage(PixmapPtr pPixmap);
  173.  
  174. int
  175. xorg_exa_set_shared_usage(PixmapPtr pPixmap);
  176.  
  177. Bool
  178. xorg_exa_set_texture(PixmapPtr pPixmap, struct  pipe_resource *tex);
  179.  
  180. struct pipe_resource *
  181. xorg_exa_create_root_texture(ScrnInfoPtr pScrn,
  182.                              int width, int height,
  183.                              int depth, int bpp);
  184.  
  185. void *
  186. xorg_exa_init(ScrnInfoPtr pScrn, Bool accel);
  187.  
  188. void
  189. xorg_exa_close(ScrnInfoPtr pScrn);
  190.  
  191.  
  192. /***********************************************************************
  193.  * xorg_dri2.c
  194.  */
  195. Bool
  196. xorg_dri2_init(ScreenPtr pScreen);
  197.  
  198. void
  199. xorg_dri2_close(ScreenPtr pScreen);
  200.  
  201.  
  202. /***********************************************************************
  203.  * xorg_crtc.c
  204.  */
  205. void
  206. xorg_crtc_init(ScrnInfoPtr pScrn);
  207.  
  208. void
  209. xorg_crtc_cursor_destroy(xf86CrtcPtr crtc);
  210.  
  211.  
  212. /***********************************************************************
  213.  * xorg_output.c
  214.  */
  215. void
  216. xorg_output_init(ScrnInfoPtr pScrn);
  217.  
  218. unsigned
  219. xorg_output_get_id(xf86OutputPtr output);
  220.  
  221.  
  222. /***********************************************************************
  223.  * xorg_xv.c
  224.  */
  225. void
  226. xorg_xv_init(ScreenPtr pScreen);
  227.  
  228.  
  229. /***********************************************************************
  230.  * xorg_xvmc.c
  231.  */
  232. void
  233. xorg_xvmc_init(ScreenPtr pScreen, char *name);
  234.  
  235.  
  236. #endif /* _XORG_TRACKER_H_ */
  237.