Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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