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