diff options
Diffstat (limited to 'src/mesa/drivers/dri/s3v/s3v_dri.h')
-rw-r--r-- | src/mesa/drivers/dri/s3v/s3v_dri.h | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/s3v/s3v_dri.h b/src/mesa/drivers/dri/s3v/s3v_dri.h new file mode 100644 index 0000000000..339c579f7f --- /dev/null +++ b/src/mesa/drivers/dri/s3v/s3v_dri.h @@ -0,0 +1,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 |