/* * Author: Max Lingua */ #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