1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
/*
* Author: Max Lingua <sunmax@libero.it>
*/
#ifndef _S3V_DRI
#define _S3V_DRI
#include "s3v_common.h"
#define S3V_MAX_DRAWABLES (S3V_DMA_BUF_NR/2) /* 32 */ /* 256 */ /* FIXME */
typedef struct
{
int deviceID;
int width;
int height;
int mem;
int cpp;
int bitsPerPixel;
int fbOffset;
int fbStride;
int logTextureGranularity;
int textureOffset;
drm_handle_t regs;
drmSize regsSize;
unsigned int sarea_priv_offset;
/*
drmAddress regsMap;
drmSize textureSize;
drm_handle_t textures;
*/
#if 0
drm_handle_t agp_buffers;
drmSize agp_buf_size;
#endif
/*
drmBufMapPtr drmBufs;
int irq;
unsigned int sarea_priv_offset;
*/
/* FIXME: cleanup ! */
drmSize registerSize; /* == S3V_MMIO_REGSIZE */
drm_handle_t registerHandle;
drmSize pciSize;
drm_handle_t pciMemHandle;
drmSize frontSize; /* == videoRambytes */
/* drm_handle_t frontHandle; */
unsigned long frontOffset; /* == fbOffset */
int frontPitch;
/* unsigned char *front; */
unsigned int bufferSize; /* size of depth/back buffer */
drmSize backSize;
/* drm_handle_t backHandle; */
unsigned long backOffset;
int backPitch;
/* unsigned char *back; */
drmSize depthSize;
/* drm_handle_t depthHandle; */
unsigned long depthOffset;
int depthPitch;
/* unsigned char *depth; */
drmSize texSize;
/* drm_handle_t texHandle; */
unsigned long texOffset;
int texPitch;
/* unsigned char *tex; */
drmSize dmaBufSize; /* Size of buffers (in bytes) */
drm_handle_t dmaBufHandle; /* Handle from drmAddMap */
unsigned long dmaBufOffset; /* Offset/Start */
int dmaBufPitch; /* Pitch */
unsigned char *dmaBuf; /* Map */
int bufNumBufs; /* Number of buffers */
drmBufMapPtr buffers; /* Buffer map */
} S3VDRIRec, *S3VDRIPtr;
/* WARNING: Do not change the SAREA structure without changing the kernel
* as well */
typedef struct {
unsigned char next, prev; /* indices to form a circular LRU */
unsigned char in_use; /* owned by a client, or free? */
int age; /* tracked by clients to update local LRU's */
} S3VTexRegionRec, *S3VTexRegionPtr;
typedef struct {
unsigned int nbox;
drm_clip_rect_t boxes[S3V_NR_SAREA_CLIPRECTS];
/* Maintain an LRU of contiguous regions of texture space. If
* you think you own a region of texture memory, and it has an
* age different to the one you set, then you are mistaken and
* it has been stolen by another client. If global texAge
* hasn't changed, there is no need to walk the list.
*
* These regions can be used as a proxy for the fine-grained
* texture information of other clients - by maintaining them
* in the same lru which is used to age their own textures,
* clients have an approximate lru for the whole of global
* texture space, and can make informed decisions as to which
* areas to kick out. There is no need to choose whether to
* kick out your own texture or someone else's - simply eject
* them all in LRU order.
*/
S3VTexRegionRec texList[S3V_NR_TEX_REGIONS+1]; /* Last elt is sentinal */
int texAge; /* last time texture was uploaded */
int last_enqueue; /* last time a buffer was enqueued */
int last_dispatch; /* age of the most recently dispatched buffer */
int last_quiescent; /* */
int ctxOwner; /* last context to upload state */
} S3VSAREARec, *S3VSAREAPtr;
typedef struct {
/* Nothing here yet */
int dummy;
} S3VConfigPrivRec, *S3VConfigPrivPtr;
typedef struct {
/* Nothing here yet */
int dummy;
} S3VDRIContextRec, *S3VDRIContextPtr;
#endif
|