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