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