xorg_tracker.h revision d9a8cd76e5a156eb8af686eba614b9fada7258fe
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
59struct kms_bo;
60struct kms_driver;
61struct exa_context;
62
63typedef 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
73enum xorg_throttling_reason {
74    THROTTLE_RENDER,
75    THROTTLE_SWAP
76};
77
78typedef 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
97typedef 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
160CustomizerPtr xorg_customizer(ScrnInfoPtr pScrn);
161
162Bool xorg_has_gallium(ScrnInfoPtr pScrn);
163
164void xorg_flush(ScreenPtr pScreen);
165/***********************************************************************
166 * xorg_exa.c
167 */
168struct pipe_resource *
169xorg_exa_get_texture(PixmapPtr pPixmap);
170
171int
172xorg_exa_set_displayed_usage(PixmapPtr pPixmap);
173
174int
175xorg_exa_set_shared_usage(PixmapPtr pPixmap);
176
177Bool
178xorg_exa_set_texture(PixmapPtr pPixmap, struct  pipe_resource *tex);
179
180struct pipe_resource *
181xorg_exa_create_root_texture(ScrnInfoPtr pScrn,
182			     int width, int height,
183			     int depth, int bpp);
184
185void *
186xorg_exa_init(ScrnInfoPtr pScrn, Bool accel);
187
188void
189xorg_exa_close(ScrnInfoPtr pScrn);
190
191
192/***********************************************************************
193 * xorg_dri2.c
194 */
195Bool
196xorg_dri2_init(ScreenPtr pScreen);
197
198void
199xorg_dri2_close(ScreenPtr pScreen);
200
201
202/***********************************************************************
203 * xorg_crtc.c
204 */
205void
206xorg_crtc_init(ScrnInfoPtr pScrn);
207
208void
209xorg_crtc_cursor_destroy(xf86CrtcPtr crtc);
210
211
212/***********************************************************************
213 * xorg_output.c
214 */
215void
216xorg_output_init(ScrnInfoPtr pScrn);
217
218unsigned
219xorg_output_get_id(xf86OutputPtr output);
220
221
222/***********************************************************************
223 * xorg_xv.c
224 */
225void
226xorg_xv_init(ScreenPtr pScreen);
227
228
229/***********************************************************************
230 * xorg_xvmc.c
231 */
232void
233xorg_xvmc_init(ScreenPtr pScreen, char *name);
234
235
236#endif /* _XORG_TRACKER_H_ */
237