xorg_tracker.h revision 0b1c0460a0ec52a7bff7887022f080d85228a658
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#include "pipe/p_screen.h" 50#include "util/u_inlines.h" 51#include "util/u_debug.h" 52 53#define DRV_ERROR(msg) xf86DrvMsg(pScrn->scrnIndex, X_ERROR, msg); 54 55struct kms_bo; 56struct kms_driver; 57struct exa_context; 58 59typedef struct 60{ 61 int lastInstance; 62 int refCount; 63 ScrnInfoPtr pScrn_1; 64 ScrnInfoPtr pScrn_2; 65} EntRec, *EntPtr; 66 67#define XORG_NR_FENCES 3 68 69enum xorg_throttling_reason { 70 THROTTLE_RENDER, 71 THROTTLE_SWAP 72}; 73 74typedef struct _CustomizerRec 75{ 76 Bool dirty_throttling; 77 Bool swap_throttling; 78 Bool no_3d; 79 Bool unhidden_hw_cursor_update; 80 Bool (*winsys_pre_init) (struct _CustomizerRec *cust, int fd); 81 Bool (*winsys_screen_init)(struct _CustomizerRec *cust); 82 Bool (*winsys_screen_close)(struct _CustomizerRec *cust); 83 Bool (*winsys_enter_vt)(struct _CustomizerRec *cust); 84 Bool (*winsys_leave_vt)(struct _CustomizerRec *cust); 85 void (*winsys_context_throttle)(struct _CustomizerRec *cust, 86 struct pipe_context *pipe, 87 enum xorg_throttling_reason reason); 88 Bool (*winsys_check_fb_size) (struct _CustomizerRec *cust, 89 unsigned long pitch, 90 unsigned long height); 91} CustomizerRec, *CustomizerPtr; 92 93typedef struct _modesettingRec 94{ 95 /* drm */ 96 int fd; 97 unsigned fb_id; 98 99 /* X */ 100 EntPtr entityPrivate; 101 102 int Chipset; 103 EntityInfoPtr pEnt; 104 struct pci_device *PciInfo; 105 106 Bool noAccel; 107 Bool SWCursor; 108 CursorPtr cursor; 109 Bool swapThrottling; 110 Bool dirtyThrottling; 111 CloseScreenProcPtr CloseScreen; 112 Bool no3D; 113 Bool from_3D; 114 Bool isMaster; 115 116 /* Broken-out options. */ 117 OptionInfoPtr Options; 118 119 void (*blockHandler)(int, pointer, pointer, pointer); 120 struct pipe_fence_handle *fence[XORG_NR_FENCES]; 121 122 CreateScreenResourcesProcPtr createScreenResources; 123 124 /* for frontbuffer backing store */ 125 Bool (*destroy_front_buffer)(ScrnInfoPtr pScrn); 126 Bool (*create_front_buffer)(ScrnInfoPtr pScrn); 127 Bool (*bind_front_buffer)(ScrnInfoPtr pScrn); 128 129 /* kms */ 130 struct kms_driver *kms; 131 struct kms_bo *root_bo; 132 133 /* gallium */ 134 struct pipe_screen *screen; 135 struct pipe_context *ctx; 136 boolean d_depth_bits_last; 137 boolean ds_depth_bits_last; 138 struct pipe_resource *root_texture; 139 140 /* exa */ 141 struct exa_context *exa; 142 Bool noEvict; 143 Bool accelerate_2d; 144 Bool debug_fallback; 145 146 CustomizerPtr cust; 147 148#ifdef DRM_MODE_FEATURE_DIRTYFB 149 DamagePtr damage; 150#endif 151} modesettingRec, *modesettingPtr; 152 153#define modesettingPTR(p) ((modesettingPtr)((p)->driverPrivate)) 154 155CustomizerPtr xorg_customizer(ScrnInfoPtr pScrn); 156 157Bool xorg_has_gallium(ScrnInfoPtr pScrn); 158 159void xorg_flush(ScreenPtr pScreen); 160/*********************************************************************** 161 * xorg_exa.c 162 */ 163struct pipe_resource * 164xorg_exa_get_texture(PixmapPtr pPixmap); 165 166int 167xorg_exa_set_displayed_usage(PixmapPtr pPixmap); 168 169int 170xorg_exa_set_shared_usage(PixmapPtr pPixmap); 171 172Bool 173xorg_exa_set_texture(PixmapPtr pPixmap, struct pipe_resource *tex); 174 175struct pipe_resource * 176xorg_exa_create_root_texture(ScrnInfoPtr pScrn, 177 int width, int height, 178 int depth, int bpp); 179 180void * 181xorg_exa_init(ScrnInfoPtr pScrn, Bool accel); 182 183void 184xorg_exa_close(ScrnInfoPtr pScrn); 185 186 187/*********************************************************************** 188 * xorg_dri2.c 189 */ 190Bool 191xorg_dri2_init(ScreenPtr pScreen); 192 193void 194xorg_dri2_close(ScreenPtr pScreen); 195 196 197/*********************************************************************** 198 * xorg_crtc.c 199 */ 200void 201xorg_crtc_init(ScrnInfoPtr pScrn); 202 203void 204xorg_crtc_cursor_destroy(xf86CrtcPtr crtc); 205 206 207/*********************************************************************** 208 * xorg_output.c 209 */ 210void 211xorg_output_init(ScrnInfoPtr pScrn); 212 213unsigned 214xorg_output_get_id(xf86OutputPtr output); 215 216 217/*********************************************************************** 218 * xorg_xv.c 219 */ 220void 221xorg_xv_init(ScreenPtr pScreen); 222 223 224#endif /* _XORG_TRACKER_H_ */ 225