Subversion Repositories Kolibri OS

Rev

Rev 3291 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3254 Serge 1
/**************************************************************************
2
 
3
Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
4
Copyright © 2002 David Dawes
5
 
6
All Rights Reserved.
7
 
8
Permission is hereby granted, free of charge, to any person obtaining a
9
copy of this software and associated documentation files (the
10
"Software"), to deal in the Software without restriction, including
11
without limitation the rights to use, copy, modify, merge, publish,
12
distribute, sub license, and/or sell copies of the Software, and to
13
permit persons to whom the Software is furnished to do so, subject to
14
the following conditions:
15
 
16
The above copyright notice and this permission notice (including the
17
next paragraph) shall be included in all copies or substantial portions
18
of the Software.
19
 
20
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
23
IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
24
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
25
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
26
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27
 
28
**************************************************************************/
29
 
30
/*
31
 * Authors:
32
 *   Keith Whitwell 
33
 *   David Dawes 
34
 *
35
 */
36
 
37
#ifndef _SNA_H_
38
#define _SNA_H_
39
 
40
#ifdef HAVE_CONFIG_H
41
#include "config.h"
42
#endif
43
 
44
#include 
45
#include 
46
#include 
3263 Serge 47
#include 
3254 Serge 48
 
49
#include "intel_driver.h"
50
#include "pciaccess.h"
51
 
52
#include "compiler.h"
53
 
54
//#define DBG(x)
55
//#define DBG(x) ErrorF x
56
 
57
#define assert(x)
58
 
59
 
3258 Serge 60
int drmIoctl(int fd, unsigned long request, void *arg);
3254 Serge 61
 
3258 Serge 62
 
3256 Serge 63
#define SRV_GET_PCI_INFO            20
64
#define SRV_GET_PARAM               21
65
#define SRV_I915_GEM_CREATE         22
66
#define SRV_DRM_GEM_CLOSE           23
67
#define SRV_I915_GEM_PIN            24
68
#define SRV_I915_GEM_SET_CACHEING   25
69
#define SRV_I915_GEM_GET_APERTURE   26
3258 Serge 70
#define SRV_I915_GEM_PWRITE         27
71
#define SRV_I915_GEM_BUSY           28
72
#define SRV_I915_GEM_SET_DOMAIN     29
73
#define SRV_I915_GEM_MMAP           30
3263 Serge 74
#define SRV_I915_GEM_THROTTLE       32
75
#define SRV_FBINFO                  33
76
#define SRV_I915_GEM_EXECBUFFER2    34
3278 Serge 77
#define SRV_MASK_UPDATE             35
3263 Serge 78
 
3258 Serge 79
#define SRV_I915_GEM_MMAP_GTT       31
3254 Serge 80
 
81
 
3258 Serge 82
#define DRM_IOCTL_GEM_CLOSE         SRV_DRM_GEM_CLOSE
3254 Serge 83
 
84
#define PIXMAN_FORMAT(bpp,type,a,r,g,b) (((bpp) << 24) |    \
85
                                        ((type) << 16) |    \
86
                                        ((a) << 12)    |    \
87
                                        ((r) << 8) |        \
88
                                        ((g) << 4) |        \
89
                                        ((b)))
90
#define PIXMAN_TYPE_OTHER	0
91
#define PIXMAN_TYPE_A		1
92
#define PIXMAN_TYPE_ARGB	2
93
#define PIXMAN_TYPE_ABGR	3
94
#define PIXMAN_TYPE_COLOR	4
95
#define PIXMAN_TYPE_GRAY	5
96
#define PIXMAN_TYPE_YUY2	6
97
#define PIXMAN_TYPE_YV12	7
98
#define PIXMAN_TYPE_BGRA	8
99
#define PIXMAN_TYPE_RGBA	9
100
#define PIXMAN_TYPE_ARGB_SRGB	10
101
 
102
/* 32bpp formats */
103
typedef enum {
104
    PIXMAN_a8r8g8b8 =    PIXMAN_FORMAT(32,PIXMAN_TYPE_ARGB,8,8,8,8),
105
    PIXMAN_x8r8g8b8 =    PIXMAN_FORMAT(32,PIXMAN_TYPE_ARGB,0,8,8,8),
106
    PIXMAN_a8b8g8r8 =    PIXMAN_FORMAT(32,PIXMAN_TYPE_ABGR,8,8,8,8),
107
    PIXMAN_x8b8g8r8 =    PIXMAN_FORMAT(32,PIXMAN_TYPE_ABGR,0,8,8,8),
108
    PIXMAN_b8g8r8a8 =    PIXMAN_FORMAT(32,PIXMAN_TYPE_BGRA,8,8,8,8),
109
    PIXMAN_b8g8r8x8 =    PIXMAN_FORMAT(32,PIXMAN_TYPE_BGRA,0,8,8,8),
110
    PIXMAN_r8g8b8a8 =    PIXMAN_FORMAT(32,PIXMAN_TYPE_RGBA,8,8,8,8),
111
    PIXMAN_r8g8b8x8 =    PIXMAN_FORMAT(32,PIXMAN_TYPE_RGBA,0,8,8,8),
112
    PIXMAN_x14r6g6b6 =   PIXMAN_FORMAT(32,PIXMAN_TYPE_ARGB,0,6,6,6),
113
    PIXMAN_x2r10g10b10 = PIXMAN_FORMAT(32,PIXMAN_TYPE_ARGB,0,10,10,10),
114
    PIXMAN_a2r10g10b10 = PIXMAN_FORMAT(32,PIXMAN_TYPE_ARGB,2,10,10,10),
115
    PIXMAN_x2b10g10r10 = PIXMAN_FORMAT(32,PIXMAN_TYPE_ABGR,0,10,10,10),
3278 Serge 116
    PIXMAN_a2b10g10r10 = PIXMAN_FORMAT(32,PIXMAN_TYPE_ABGR,2,10,10,10),
3254 Serge 117
 
3278 Serge 118
    PIXMAN_a8 =		 PIXMAN_FORMAT(8,PIXMAN_TYPE_A,8,0,0,0)
119
 
3254 Serge 120
} pixman_format_code_t;
121
 
3278 Serge 122
typedef enum _PictFormatShort {
3254 Serge 123
 
3278 Serge 124
    PICT_a8r8g8b8 = PIXMAN_a8r8g8b8,
125
    PICT_x8r8g8b8 = PIXMAN_x8r8g8b8,
126
    PICT_a8b8g8r8 = PIXMAN_a8b8g8r8,
127
    PICT_x8b8g8r8 = PIXMAN_x8b8g8r8,
128
    PICT_b8g8r8a8 = PIXMAN_b8g8r8a8,
129
    PICT_b8g8r8x8 = PIXMAN_b8g8r8x8,
130
 
131
/* 8bpp formats */
132
    PICT_a8 = PIXMAN_a8,
133
 
134
/* 4bpp formats */
135
} PictFormatShort;
136
 
3291 Serge 137
#define PIXMAN_FORMAT_A(f)	(((f) >> 12) & 0x0f)
3299 Serge 138
#define PIXMAN_FORMAT_RGB(f)	(((f)      ) & 0xfff)
3291 Serge 139
 
140
#define PICT_FORMAT_A(f)	PIXMAN_FORMAT_A(f)
141
 
3278 Serge 142
#define RepeatNone                          0
143
#define RepeatNormal                        1
144
#define RepeatPad                           2
145
#define RepeatReflect                       3
146
 
147
#define PictFilterNearest	0
148
#define PictFilterBilinear	1
149
 
150
#define PictFilterFast		2
151
#define PictFilterGood		3
152
#define PictFilterBest		4
153
 
154
#define PictFilterConvolution	5
155
 
156
typedef int32_t			pixman_fixed_16_16_t;
157
typedef pixman_fixed_16_16_t	pixman_fixed_t;
158
 
159
struct pixman_transform
160
{
161
    pixman_fixed_t	matrix[3][3];
162
};
163
 
3254 Serge 164
typedef unsigned long   Picture;
165
typedef unsigned long   PictFormat;
166
 
167
typedef struct _Pixmap  *PixmapPtr;
168
typedef struct _Picture *PicturePtr;
3278 Serge 169
typedef struct _Drawable *DrawablePtr;
170
typedef struct _PictFormat *PictFormatPtr;
3254 Serge 171
 
3278 Serge 172
typedef struct pixman_transform PictTransform, *PictTransformPtr;
173
 
174
 
175
 
3254 Serge 176
typedef struct _Drawable {
177
    unsigned char type;         /* DRAWABLE_ */
178
    unsigned char class;        /* specific to type */
179
    unsigned char depth;
180
    unsigned char bitsPerPixel;
181
    unsigned int   id;           /* resource id */
182
    short x;                    /* window: screen absolute, pixmap: 0 */
183
    short y;                    /* window: screen absolute, pixmap: 0 */
184
    unsigned short width;
185
    unsigned short height;
186
} DrawableRec;
187
 
188
/*
189
 * PIXMAP -- device dependent
190
 */
191
 
192
typedef struct _Pixmap {
193
    DrawableRec drawable;
194
//    PrivateRec *devPrivates;
195
    int refcnt;
196
    int devKind;                /* This is the pitch of the pixmap, typically width*bpp/8. */
197
//    DevUnion devPrivate;        /* When !NULL, devPrivate.ptr points to the raw pixel data. */
198
#ifdef COMPOSITE
199
    short screen_x;
200
    short screen_y;
201
#endif
202
    unsigned usage_hint;        /* see CREATE_PIXMAP_USAGE_* */
203
 
204
    PixmapPtr master_pixmap;    /* pointer to master copy of pixmap for pixmap sharing */
205
} PixmapRec;
206
 
3278 Serge 207
typedef struct _PictFormat {
208
    uint32_t id;
209
    uint32_t format;              /* except bpp */
210
    unsigned char type;
211
    unsigned char depth;
212
//    DirectFormatRec direct;
213
//   IndexFormatRec index;
214
} PictFormatRec;
3254 Serge 215
 
3278 Serge 216
typedef struct _Picture {
217
    DrawablePtr pDrawable;
218
//    PictFormatPtr pFormat;
219
    PictFormatShort format;     /* PICT_FORMAT */
220
    int refcnt;
221
    uint32_t id;
222
    unsigned int repeat:1;
223
    unsigned int graphicsExposures:1;
224
    unsigned int subWindowMode:1;
225
    unsigned int polyEdge:1;
226
    unsigned int polyMode:1;
227
    unsigned int freeCompClip:1;
228
    unsigned int clientClipType:2;
229
    unsigned int componentAlpha:1;
230
    unsigned int repeatType:2;
231
    unsigned int filter:3;
232
//    unsigned int stateChanges:CPLastBit;
233
//    unsigned int unused:18 - CPLastBit;
234
 
235
//    PicturePtr alphaMap;
236
 
237
//    PictTransform *transform;
238
 
239
//    SourcePictPtr pSourcePict;
240
//    xFixed *filter_params;
241
//    int filter_nparams;
242
} PictureRec;
243
 
244
#define PolyModePrecise			    0
245
#define PolyModeImprecise		    1
246
 
247
 
3263 Serge 248
struct sna_fb
249
{
250
    uint32_t  width;
251
    uint32_t  height;
252
    uint32_t  pitch;
253
    uint32_t  tiling;
254
 
255
    struct kgem_bo *fb_bo;
256
};
3254 Serge 257
 
258
struct pixman_box16
259
{
260
    int16_t x1, y1, x2, y2;
261
};
262
 
263
typedef struct pixman_box16 BoxRec;
264
typedef unsigned int   CARD32;
265
typedef unsigned short CARD16;
266
 
267
#include "sna_render.h"
268
#include "kgem.h"
269
 
270
#define GXclear                 0x0
271
#define GXcopy                  0x3
272
 
273
#define PictOpClear             0
274
#define PictOpSrc               1
275
#define PictOpDst               2
276
#define PictOpOver              3
277
#define PictOpOverReverse       4
278
#define PictOpIn                5
279
#define PictOpInReverse         6
280
#define PictOpOut               7
281
#define PictOpOutReverse        8
282
#define PictOpAtop              9
283
#define PictOpAtopReverse       10
284
#define PictOpXor               11
285
#define PictOpAdd               12
286
#define PictOpSaturate          13
287
#define PictOpMaximum           13
288
 
289
 
290
 
291
struct sna {
292
    unsigned flags;
293
#define SNA_NO_WAIT		0x1
294
#define SNA_NO_FLIP		0x2
295
#define SNA_TRIPLE_BUFFER	0x4
296
#define SNA_TEAR_FREE		0x10
297
#define SNA_FORCE_SHADOW	0x20
298
 
299
	struct list flush_pixmaps;
300
	struct list active_pixmaps;
301
 
302
 
303
 
304
//    int vblank_interval;
305
 
306
//    struct list deferred_free;
307
//    struct list dirty_pixmaps;
308
//    struct list active_pixmaps;
309
//    struct list inactive_clock[2];
310
 
311
    unsigned int tiling;
312
#define SNA_TILING_DISABLE  0x0
313
#define SNA_TILING_FB       0x1
314
#define SNA_TILING_2D       0x2
315
#define SNA_TILING_ALL     (~0)
316
 
317
	struct pci_device *PciInfo;
318
	const struct intel_device_info *info;
319
 
320
//    PicturePtr clear;
321
    struct {
322
        uint32_t fill_bo;
323
        uint32_t fill_pixel;
324
        uint32_t fill_alu;
325
    } blt_state;
326
    union {
327
//        struct gen2_render_state gen2;
3280 Serge 328
        struct gen3_render_state gen3;
329
        struct gen4_render_state gen4;
330
        struct gen5_render_state gen5;
3254 Serge 331
        struct gen6_render_state gen6;
332
		struct gen7_render_state gen7;
333
    } render_state;
334
 
335
 
336
    /* Broken-out options. */
337
//    OptionInfoPtr Options;
338
 
339
    /* Driver phase/state information */
340
//    Bool suspended;
341
 
342
    struct kgem kgem;
343
    struct sna_render render;
344
 
345
#if DEBUG_MEMORY
346
	struct {
347
	       int shadow_pixels_allocs;
348
	       int cpu_bo_allocs;
349
	       size_t shadow_pixels_bytes;
350
	       size_t cpu_bo_bytes;
351
	} debug_memory;
352
#endif
353
};
354
 
3280 Serge 355
static inline struct sna *
356
to_sna_from_kgem(struct kgem *kgem)
357
{
358
	return container_of(kgem, struct sna, kgem);
359
}
3254 Serge 360
 
361
#ifndef ARRAY_SIZE
362
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
363
#endif
364
 
365
#ifndef ALIGN
366
#define ALIGN(i,m)	(((i) + (m) - 1) & ~((m) - 1))
367
#endif
368
 
369
#ifndef MIN
370
#define MIN(a,b)	((a) <= (b) ? (a) : (b))
371
#endif
372
 
373
#ifndef MAX
374
#define MAX(a,b)	((a) >= (b) ? (a) : (b))
375
#endif
376
#endif /* _SNA_H */