summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/unichrome/via_context.h
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2005-03-22 14:25:55 +0000
committerKeith Whitwell <keith@tungstengraphics.com>2005-03-22 14:25:55 +0000
commit050b77a9ac45afc5c3acb4d018f1d4858c2f4cc7 (patch)
tree9c8a33e48be56fe1218b6e6beee8bb8136ebc29f /src/mesa/drivers/dri/unichrome/via_context.h
parent59b4b7e07e1374d63eede85c93665e4630a359b1 (diff)
merge unichrome changes from branch
Diffstat (limited to 'src/mesa/drivers/dri/unichrome/via_context.h')
-rw-r--r--src/mesa/drivers/dri/unichrome/via_context.h464
1 files changed, 249 insertions, 215 deletions
diff --git a/src/mesa/drivers/dri/unichrome/via_context.h b/src/mesa/drivers/dri/unichrome/via_context.h
index 28da220029..9db382d49c 100644
--- a/src/mesa/drivers/dri/unichrome/via_context.h
+++ b/src/mesa/drivers/dri/unichrome/via_context.h
@@ -26,10 +26,6 @@
#ifndef _VIACONTEXT_H
#define _VIACONTEXT_H
-typedef struct via_context_t viaContext;
-typedef struct via_context_t *viaContextPtr;
-typedef struct via_texture_object_t *viaTextureObjectPtr;
-
#include "dri_util.h"
#include "mtypes.h"
@@ -41,6 +37,8 @@ typedef struct via_texture_object_t *viaTextureObjectPtr;
#include "via_tex.h"
#include "via_common.h"
+struct via_context;
+
/* Chip tags. These are used to group the adapters into
* related families.
*/
@@ -79,39 +77,84 @@ enum VIACHIPTAGS {
#include "tnl_dd/t_dd_vertex.h"
#undef TAG
-typedef void (*via_tri_func)(viaContextPtr, viaVertex *, viaVertex *,
+typedef void (*via_tri_func)(struct via_context *, viaVertex *, viaVertex *,
viaVertex *);
-typedef void (*via_line_func)(viaContextPtr, viaVertex *, viaVertex *);
-typedef void (*via_point_func)(viaContextPtr, viaVertex *);
-
-typedef struct {
- drm_handle_t handle;
- drmSize size;
- GLuint offset;
- GLuint index;
- GLuint pitch;
- GLuint bpp;
- char *map;
- GLuint orig; /* The drawing origin,
- * at (drawX,drawY) in screen space.
- */
- char *origMap;
-} viaBuffer, *viaBufferPtr;
-
-
-struct via_context_t {
- GLint refcount;
- GLcontext *glCtx;
- GLcontext *shareCtx;
- viaBuffer front;
- viaBuffer back;
- viaBuffer depth;
- GLboolean hasBack;
- GLboolean hasDepth;
- GLboolean hasStencil;
- GLboolean hasAccum;
- GLuint depthBits;
- GLuint stencilBits;
+typedef void (*via_line_func)(struct via_context *, viaVertex *, viaVertex *);
+typedef void (*via_point_func)(struct via_context *, viaVertex *);
+
+struct via_buffer {
+ drm_handle_t handle;
+ drmSize size;
+ GLuint offset;
+ GLuint index;
+ GLuint pitch;
+ GLuint bpp;
+ char *map;
+ GLuint orig; /* The drawing origin,
+ * at (drawX,drawY) in screen space.
+ */
+ char *origMap;
+};
+
+
+#define VIA_MAX_TEXLEVELS 10
+
+struct via_tex_buffer {
+ struct via_tex_buffer *next, *prev;
+ struct via_texture_image *image;
+ GLuint index;
+ GLuint offset;
+ GLuint size;
+ GLuint memType;
+ unsigned char *bufAddr;
+ GLuint texBase;
+ GLuint lastUsed;
+};
+
+
+
+struct via_texture_image {
+ struct gl_texture_image image;
+ struct via_tex_buffer *texMem;
+ GLint pitchLog2;
+};
+
+struct via_texture_object {
+ struct gl_texture_object obj; /* The "parent" object */
+
+ GLuint texelBytes;
+ GLuint memType;
+
+ GLuint regTexFM;
+ GLuint regTexWidthLog2[2];
+ GLuint regTexHeightLog2[2];
+ GLuint regTexBaseH[4];
+ struct {
+ GLuint baseL;
+ GLuint pitchLog2;
+ } regTexBaseAndPitch[12];
+
+ GLint firstLevel, lastLevel; /* upload tObj->Image[first .. lastLevel] */
+};
+
+
+
+struct via_context {
+ GLint refcount;
+ GLcontext *glCtx;
+ GLcontext *shareCtx;
+
+ struct via_buffer front;
+ struct via_buffer back;
+ struct via_buffer depth;
+ struct via_buffer breadcrumb;
+
+ GLboolean hasBack;
+ GLboolean hasDepth;
+ GLboolean hasStencil;
+ GLboolean hasAccum;
+ GLuint depthBits;
+ GLuint stencilBits;
GLboolean have_hw_stencil;
GLuint ClearDepth;
@@ -120,174 +163,148 @@ struct via_context_t {
GLfloat depth_max;
GLfloat polygon_offset_scale;
- GLubyte *dma;
- viaRegion tex;
+ GLubyte *dma;
+ viaRegion tex;
- GLuint isAGP;
+ /* Bit flag to keep 0track of fallbacks.
+ */
+ GLuint Fallback;
- /* Textures
+ /* State for via_tris.c.
*/
- viaTextureObjectPtr CurrentTexObj[2];
- struct via_texture_object_t TexObjList;
- struct via_texture_object_t SwappedOut;
- memHeap_t *texHeap;
-
- /* Bit flag to keep 0track of fallbacks.
- */
- GLuint Fallback;
-
- /* State for via_tris.c.
- */
- GLuint newState; /* _NEW_* flags */
- GLuint newEmitState; /* _NEW_* flags */
- GLuint newRenderState; /* _NEW_* flags */
-
- struct tnl_attr_map vertex_attrs[VERT_ATTRIB_MAX];
- GLuint vertex_attr_count;
-
- GLuint setupIndex;
- GLuint renderIndex;
- GLmatrix ViewportMatrix;
- GLenum renderPrimitive;
- GLenum hwPrimitive;
- unsigned char *verts;
-
- /* drmBufPtr dma_buffer;
+ GLuint newState; /* _NEW_* flags */
+ GLuint newEmitState; /* _NEW_* flags */
+ GLuint newRenderState; /* _NEW_* flags */
+
+ struct tnl_attr_map vertex_attrs[VERT_ATTRIB_MAX];
+ GLuint vertex_attr_count;
+
+ GLuint setupIndex;
+ GLuint renderIndex;
+ GLmatrix ViewportMatrix;
+ GLenum renderPrimitive;
+ GLenum hwPrimitive;
+ unsigned char *verts;
+
+ /* drmBufPtr dma_buffer;
*/
- GLuint dmaLow;
- GLuint dmaCliprectAddr;
- GLuint dmaLastPrim;
- GLboolean useAgp;
+ GLuint dmaLow;
+ GLuint dmaCliprectAddr;
+ GLuint dmaLastPrim;
+ GLboolean useAgp;
- /* Fallback rasterization functions
- */
- via_point_func drawPoint;
- via_line_func drawLine;
- via_tri_func drawTri;
-
- /* Hardware register
- */
- GLuint regCmdA_End;
- GLuint regCmdB;
-
- GLuint regEnable;
- GLuint regHFBBMSKL;
- GLuint regHROP;
-
- GLuint regHZWTMD;
- GLuint regHSTREF;
- GLuint regHSTMD;
-
- GLuint regHATMD;
- GLuint regHABLCsat;
- GLuint regHABLCop;
- GLuint regHABLAsat;
- GLuint regHABLAop;
- GLuint regHABLRCa;
- GLuint regHABLRFCa;
- GLuint regHABLRCbias;
- GLuint regHABLRCb;
- GLuint regHABLRFCb;
- GLuint regHABLRAa;
- GLuint regHABLRAb;
- GLuint regHFogLF;
- GLuint regHFogCL;
- GLuint regHFogCH;
-
- GLuint regHLP;
- GLuint regHLPRF;
-
- GLuint regHTXnTB_0;
- GLuint regHTXnMPMD_0;
- GLuint regHTXnTBLCsat_0;
- GLuint regHTXnTBLCop_0;
- GLuint regHTXnTBLMPfog_0;
- GLuint regHTXnTBLAsat_0;
- GLuint regHTXnTBLRCb_0;
- GLuint regHTXnTBLRAa_0;
- GLuint regHTXnTBLRFog_0;
- /*=* John Sheng [2003.7.18] texture combine *=*/
- GLuint regHTXnTBLRCa_0;
- GLuint regHTXnTBLRCc_0;
- GLuint regHTXnTBLRCbias_0;
-
- GLuint regHTXnTB_1;
- GLuint regHTXnMPMD_1;
- GLuint regHTXnTBLCsat_1;
- GLuint regHTXnTBLCop_1;
- GLuint regHTXnTBLMPfog_1;
- GLuint regHTXnTBLAsat_1;
- GLuint regHTXnTBLRCb_1;
- GLuint regHTXnTBLRAa_1;
- GLuint regHTXnTBLRFog_1;
- GLuint regHTXnTBLRCa_1;
- GLuint regHTXnTBLRCc_1;
- GLuint regHTXnTBLRCbias_1;
-
- int vertexSize;
- int hwVertexSize;
- GLboolean ptexHack;
- int coloroffset;
- int specoffset;
-
- GLint lastStamp;
-
- GLenum TexEnvImageFmt[2];
- GLuint ClearColor;
- GLuint ClearMask;
-
- /* DRI stuff
- */
- GLuint needClip;
- GLframebuffer *glBuffer;
- GLboolean doPageFlip;
- /*=* John Sheng [2003.5.31] flip *=*/
- GLuint currentPage;
-
- viaBuffer *drawBuffer;
- viaBuffer *readBuffer;
- int drawX; /* origin of drawable in draw buffer */
- int drawY;
-
- int drawW;
- int drawH;
-
- int drawXoff;
- GLuint numClipRects; /* cliprects for that buffer */
- drm_clip_rect_t *pClipRects;
-
- int lastSwap;
- int texAge;
- int ctxAge;
- int dirtyAge;
-
- GLboolean scissor;
- drm_clip_rect_t drawRect;
- drm_clip_rect_t scissorRect;
-
- drm_context_t hHWContext;
- drm_hw_lock_t *driHwLock;
- int driFd;
- __DRInativeDisplay *display;
-
- __DRIdrawablePrivate *driDrawable;
- __DRIscreenPrivate *driScreen;
- viaScreenPrivate *viaScreen;
- drm_via_sarea_t *sarea;
- volatile GLuint* regMMIOBase;
- volatile GLuint* pnGEMode;
- volatile GLuint* regEngineStatus;
- volatile GLuint* regTranSet;
- volatile GLuint* regTranSpace;
- GLuint* agpBase;
- GLuint drawType;
+ /* Fallback rasterization functions
+ */
+ via_point_func drawPoint;
+ via_line_func drawLine;
+ via_tri_func drawTri;
+
+ /* Hardware register
+ */
+ GLuint regCmdA_End;
+ GLuint regCmdB;
+
+ GLuint regEnable;
+ GLuint regHFBBMSKL;
+ GLuint regHROP;
+
+ GLuint regHZWTMD;
+ GLuint regHSTREF;
+ GLuint regHSTMD;
+
+ GLuint regHATMD;
+ GLuint regHABLCsat;
+ GLuint regHABLCop;
+ GLuint regHABLAsat;
+ GLuint regHABLAop;
+ GLuint regHABLRCa;
+ GLuint regHABLRFCa;
+ GLuint regHABLRCbias;
+ GLuint regHABLRCb;
+ GLuint regHABLRFCb;
+ GLuint regHABLRAa;
+ GLuint regHABLRAb;
+ GLuint regHFogLF;
+ GLuint regHFogCL;
+ GLuint regHFogCH;
+
+ GLuint regHLP;
+ GLuint regHLPRF;
+
+ GLuint regHTXnCLOD[2];
+ GLuint regHTXnTB[2];
+ GLuint regHTXnMPMD[2];
+ GLuint regHTXnTBLCsat[2];
+ GLuint regHTXnTBLCop[2];
+ GLuint regHTXnTBLMPfog[2];
+ GLuint regHTXnTBLAsat[2];
+ GLuint regHTXnTBLRCb[2];
+ GLuint regHTXnTBLRAa[2];
+ GLuint regHTXnTBLRFog[2];
+ GLuint regHTXnTBLRCa[2];
+ GLuint regHTXnTBLRCc[2];
+ GLuint regHTXnTBLRCbias[2];
+ GLuint regHTXnTBC[2];
+ GLuint regHTXnTRAH[2];
+
+ int vertexSize;
+ int hwVertexSize;
+ GLboolean ptexHack;
+ int coloroffset;
+ int specoffset;
+
+ GLint lastStamp;
+
+ GLuint ClearColor;
+ GLuint ClearMask;
+
+ /* DRI stuff
+ */
+ GLboolean doPageFlip;
+
+ struct via_buffer *drawBuffer;
+ struct via_buffer *readBuffer;
+
+ int drawX; /* origin of drawable in draw buffer */
+ int drawY;
+ int drawW;
+ int drawH;
+
+ int drawXoff; /* drawX is 32byte aligned - this is
+ * the delta to the real origin, in
+ * pixel units.
+ */
+
+ GLuint numClipRects; /* cliprects for that buffer */
+ drm_clip_rect_t *pClipRects;
+
+ GLboolean scissor;
+ drm_clip_rect_t drawRect;
+ drm_clip_rect_t scissorRect;
+
+ drm_context_t hHWContext;
+ drm_hw_lock_t *driHwLock;
+ int driFd;
+ __DRInativeDisplay *display;
+
+ __DRIdrawablePrivate *driDrawable;
+ __DRIscreenPrivate *driScreen;
+ viaScreenPrivate *viaScreen;
+ drm_via_sarea_t *sarea;
+ volatile GLuint* regMMIOBase;
+ volatile GLuint* pnGEMode;
+ volatile GLuint* regEngineStatus;
+ volatile GLuint* regTranSet;
+ volatile GLuint* regTranSpace;
+ GLuint* agpBase;
+ GLuint drawType;
GLuint nDoneFirstFlip;
GLuint agpFullCount;
- GLboolean strictConformance;
GLboolean clearTexCache;
+ GLboolean thrashing;
/* Configuration cache
*/
@@ -304,14 +321,25 @@ struct via_context_t {
PFNGLXGETUSTPROC get_ust;
+ GLuint pfCurrentOffset;
+ GLboolean allowPageFlip;
+
+ GLuint lastBreadcrumbRead;
+ GLuint lastBreadcrumbWrite;
+ GLuint lastSwap[2];
+ GLuint lastDma;
+
+ GLuint total_alloc[VIA_MEM_SYSTEM+1];
+
+ struct via_tex_buffer tex_image_list[VIA_MEM_SYSTEM+1];
+ struct via_tex_buffer freed_tex_buffers;
+
};
-#define VIA_CONTEXT(ctx) ((viaContextPtr)(ctx->DriverCtx))
+#define VIA_CONTEXT(ctx) ((struct via_context *)(ctx->DriverCtx))
-#define GET_DISPATCH_AGE(vmesa) vmesa->sarea->lastDispatch
-#define GET_ENQUEUE_AGE(vmesa) vmesa->sarea->lastEnqueue
/* Lock the hardware and validate our state.
@@ -331,31 +359,37 @@ struct via_context_t {
#define UNLOCK_HARDWARE(vmesa) \
DRM_UNLOCK(vmesa->driFd, vmesa->driHwLock, vmesa->hHWContext);
-#define WAIT_IDLE(vmesa) \
- do { \
- if ((((GLuint)*vmesa->regEngineStatus) & 0xFFFEFFFF) == 0x00020000) \
- break; \
- } while (1)
-#ifdef DEBUG
extern GLuint VIA_DEBUG;
-#else
-#define VIA_DEBUG 0
-#endif
-
-extern void viaGetLock(viaContextPtr vmesa, GLuint flags);
-extern void viaLock(viaContextPtr vmesa, GLuint flags);
-extern void viaUnLock(viaContextPtr vmesa, GLuint flags);
-extern void viaEmitHwStateLocked(viaContextPtr vmesa);
-extern void viaEmitScissorValues(viaContextPtr vmesa, int box_nr, int emit);
-extern void viaXMesaSetBackClipRects(viaContextPtr vmesa);
-extern void viaXMesaSetFrontClipRects(viaContextPtr vmesa);
+#define DEBUG_TEXTURE 0x1
+#define DEBUG_STATE 0x2
+#define DEBUG_IOCTL 0x4
+#define DEBUG_PRIMS 0x8
+#define DEBUG_VERTS 0x10
+#define DEBUG_FALLBACKS 0x20
+#define DEBUG_VERBOSE 0x40
+#define DEBUG_DRI 0x80
+#define DEBUG_DMA 0x100
+#define DEBUG_SANITY 0x200
+#define DEBUG_SYNC 0x400
+#define DEBUG_SLEEP 0x800
+#define DEBUG_PIXEL 0x1000
+#define DEBUG_2D 0x2000
+
+
+extern void viaGetLock(struct via_context *vmesa, GLuint flags);
+extern void viaLock(struct via_context *vmesa, GLuint flags);
+extern void viaUnLock(struct via_context *vmesa, GLuint flags);
+extern void viaEmitHwStateLocked(struct via_context *vmesa);
+extern void viaEmitScissorValues(struct via_context *vmesa, int box_nr, int emit);
+extern void viaXMesaSetBackClipRects(struct via_context *vmesa);
+extern void viaXMesaSetFrontClipRects(struct via_context *vmesa);
extern void viaReAllocateBuffers(GLframebuffer *drawbuffer);
-extern void viaXMesaWindowMoved(viaContextPtr vmesa);
+extern void viaXMesaWindowMoved(struct via_context *vmesa);
-extern GLboolean viaTexCombineState(viaContextPtr vmesa,
+extern GLboolean viaTexCombineState(struct via_context *vmesa,
const struct gl_tex_env_combine_state * combine,
unsigned unit );