xorg_tracker.h revision bb80a93c9eabb430914011513852b18c943c8cfa
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 /* winsys hocks */ 118 Bool (*winsys_screen_init)(ScrnInfoPtr pScr); 119 Bool (*winsys_screen_close)(ScrnInfoPtr pScr); 120 void *winsys_priv; 121 122#ifdef DRM_MODE_FEATURE_DIRTYFB 123 DamagePtr damage; 124#endif 125} modesettingRec, *modesettingPtr; 126 127#define modesettingPTR(p) ((modesettingPtr)((p)->driverPrivate)) 128 129 130/*********************************************************************** 131 * xorg_exa.c 132 */ 133struct pipe_texture * 134xorg_exa_get_texture(PixmapPtr pPixmap); 135 136unsigned 137xorg_exa_get_pixmap_handle(PixmapPtr pPixmap, unsigned *stride); 138 139int 140xorg_exa_set_displayed_usage(PixmapPtr pPixmap); 141 142int 143xorg_exa_set_shared_usage(PixmapPtr pPixmap); 144 145Bool 146xorg_exa_set_texture(PixmapPtr pPixmap, struct pipe_texture *tex); 147 148struct pipe_texture * 149xorg_exa_create_root_texture(ScrnInfoPtr pScrn, 150 int width, int height, 151 int depth, int bpp); 152 153void * 154xorg_exa_init(ScrnInfoPtr pScrn, Bool accel); 155 156void 157xorg_exa_close(ScrnInfoPtr pScrn); 158 159 160/*********************************************************************** 161 * xorg_dri2.c 162 */ 163Bool 164xorg_dri2_init(ScreenPtr pScreen); 165 166void 167xorg_dri2_close(ScreenPtr pScreen); 168 169 170/*********************************************************************** 171 * xorg_crtc.c 172 */ 173void 174xorg_crtc_init(ScrnInfoPtr pScrn); 175 176void 177xorg_crtc_cursor_destroy(xf86CrtcPtr crtc); 178 179 180/*********************************************************************** 181 * xorg_output.c 182 */ 183void 184xorg_output_init(ScrnInfoPtr pScrn); 185 186 187/*********************************************************************** 188 * xorg_xv.c 189 */ 190void 191xorg_xv_init(ScreenPtr pScreen); 192 193 194#endif /* _XORG_TRACKER_H_ */ 195