summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/s3v/s3v_dri.h
blob: 339c579f7f7075856519caf5ac7bf81cacfd9fa6 (plain)
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