Merge branch 'llvm-cliptest-viewport'
[mesa.git] / src / mesa / drivers / dri / savage / savagecontext.h
index 8978f9247cf44bc944f73b6f40e46241ccdc4c8d..75bec62fa84204a8db3310d1888b7df72a33e4e0 100644 (file)
@@ -31,17 +31,17 @@ typedef struct savage_context_t savageContext;
 typedef struct savage_context_t *savageContextPtr;
 typedef struct savage_texture_object_t *savageTextureObjectPtr;
 
-#include <X11/Xlibint.h>
 #include "dri_util.h"
-#include "mtypes.h"
+#include "main/mtypes.h"
 #include "xf86drm.h"
 #include "drm.h"
 #include "savage_drm.h"
 #include "savage_init.h"
-#include "mm.h"
+#include "savage_3d_reg.h"
+#include "main/mm.h"
 #include "tnl/t_vertex.h"
 
-#include "savagetex.h"
+#include "texmem.h"
 
 #include "xmlconfig.h"
 
@@ -78,7 +78,6 @@ typedef struct savage_texture_object_t *savageTextureObjectPtr;
 #define SAVAGE_UPLOAD_FOGTBL   0x8  /* fog table */
 #define SAVAGE_UPLOAD_GLOBAL   0x10 /* most global regs */
 #define SAVAGE_UPLOAD_TEXGLOBAL 0x20 /* TexBlendColor (S4 only) */
-#define SAVAGE_UPLOAD_CLIPRECTS 0x1000 /* FIXME: get rid of this */
 
 /*define the max numer of vertex in vertex buf*/
 #define SAVAGE_MAX_VERTEXS 0x10000
@@ -86,7 +85,6 @@ typedef struct savage_texture_object_t *savageTextureObjectPtr;
 /* Don't make it too big. We don't want to buffer up a whole frame
  * that would force the application to wait later. */
 #define SAVAGE_CMDBUF_SIZE 1024
-#define SAVAGE_MAX_VERTS_PENDING 1024
 
 /* Use the templated vertex formats:
  */
@@ -131,7 +129,7 @@ typedef void (*savage_point_func)( savageContextPtr, savageVertex * );
 struct savage_vtxbuf_t {
     GLuint total, used, flushed; /* in 32 bit units */
     GLuint idx;                /* for DMA buffers */
-    u_int32_t *buf;
+    uint32_t *buf;
 };
 
 struct savage_cmdbuf_t {
@@ -141,25 +139,23 @@ struct savage_cmdbuf_t {
     drm_savage_cmd_header_t *write; /* append stuff here */
 };
 
+struct savage_elt_t {
+    GLuint n;                          /* number of elts currently allocated */
+    drm_savage_cmd_header_t *cmd;      /* the indexed drawing command */
+};
+
 
 struct savage_context_t {
     GLint refcount;
 
-    GLcontext *glCtx;
+    struct gl_context *glCtx;
 
     int lastTexHeap;
-    savageTextureObjectPtr CurrentTexObj[2];
-   
-    struct savage_texture_object_t TexObjList[SAVAGE_NR_TEX_HEAPS];
-    struct savage_texture_object_t SwappedOut; 
-  
-    GLuint c_texupload;
-    GLuint c_texusage;
-    GLuint tex_thrash;
-   
-    GLuint TextureMode;
-   
-    
+    driTexHeap *textureHeaps[SAVAGE_NR_TEX_HEAPS];
+    driTextureObject swapped;
+
+    driTextureObject *CurrentTexObj[2];
+
     /* Hardware state
      */
 
@@ -173,22 +169,26 @@ struct savage_context_t {
     /* Command buffer */
     struct savage_cmdbuf_t cmdBuf;
 
+    /* Elt book-keeping */
+    struct savage_elt_t elts;
+    GLint firstElt;
+
     /* Vertex buffers */
     struct savage_vtxbuf_t dmaVtxBuf, clientVtxBuf;
     struct savage_vtxbuf_t *vtxBuf;
 
     /* aperture base */
-    GLuint apertureBase[5];
+    GLubyte *apertureBase[5];
     GLuint aperturePitch;
     /* Manage hardware state */
     GLuint dirty;
     GLboolean lostContext;
-    memHeap_t *texHeap[SAVAGE_NR_TEX_HEAPS];
     GLuint bTexEn1;
     /* One of the few bits of hardware state that can't be calculated
      * completely on the fly:
      */
     GLuint LcsCullMode;
+    GLuint texEnvColor;
 
    /* Vertex state 
     */
@@ -225,9 +225,8 @@ struct savage_context_t {
     GLfloat hw_viewport[16];
     /* DRI stuff */
     GLuint bufferSize;
-    GLuint vertsPending;
 
-    GLframebuffer *glBuffer;
+    struct gl_framebuffer *glBuffer;
    
     /* Two flags to keep track of fallbacks. */
     GLuint Fallback;
@@ -236,8 +235,6 @@ struct savage_context_t {
 
     /* These refer to the current draw (front vs. back) buffer:
      */
-    char *drawMap;             /* draw buffer address in virtual mem */
-    char *readMap;     
     int drawX;                 /* origin of drawable in draw buffer */
     int drawY;
     GLuint numClipRects;               /* cliprects for that buffer */
@@ -261,39 +258,41 @@ struct savage_context_t {
     GLuint dirtyAge;
     GLuint any_contend;                /* throttle me harder */
 
-    GLuint scissor;
-    GLboolean scissorChanged;
-    drm_clip_rect_t draw_rect;
-    drm_clip_rect_t scissor_rect;
-
-    /*Texture aging and DMA based aging*/
-    unsigned int texAge[SAVAGE_NR_TEX_HEAPS]; 
+    /* Scissor state needs to be mirrored so buffered commands can be
+     * emitted with the old scissor state when scissor state changes.
+     */
+    struct {
+       GLboolean enabled;
+       GLint x, y;
+       GLsizei w, h;
+    } scissor;
 
     drm_context_t hHWContext;
     drm_hw_lock_t *driHwLock;
     GLuint driFd;
 
-    __DRIdrawablePrivate *driDrawable;
-    __DRIdrawablePrivate *driReadable;
+    __DRIdrawable *driDrawable;
+    __DRIdrawable *driReadable;
 
-    /**
-     * Drawable used by Mesa for software fallbacks for reading and
-     * writing.  It is set by Mesa's \c SetBuffer callback, and will always be
-     * either \c mga_context_t::driDrawable or \c mga_context_t::driReadable.
-     */
-    __DRIdrawablePrivate *mesa_drawable;
-
-    __DRIscreenPrivate *driScreen;
+    __DRIscreen *driScreen;
     savageScreenPrivate *savageScreen; 
     drm_savage_sarea_t *sarea;
 
     GLboolean hw_stencil;
 
+    /* Performance counters
+     */
+    GLuint c_textureSwaps;
+
     /* Configuration cache
      */
     driOptionCache optionCache;
     GLint texture_depth;
     GLboolean no_rast;
+    GLboolean float_depth;
+    GLboolean enable_fastpath;
+    GLboolean enable_vdma;
+    GLboolean sync_frames;
 };
 
 #define SAVAGE_CONTEXT(ctx) ((savageContextPtr)(ctx->DriverCtx))
@@ -307,9 +306,10 @@ extern int SAVAGE_DEBUG;
 
 #define DEBUG_FALLBACKS      0x001
 #define DEBUG_VERBOSE_API    0x002
-#define DEBUG_VERBOSE_LRU    0x004
+#define DEBUG_VERBOSE_TEX    0x004
 #define DEBUG_VERBOSE_MSG    0x008
 #define DEBUG_DMA            0x010
+#define DEBUG_STATE          0x020
 
 #define TARGET_FRONT    0x0
 #define TARGET_BACK     0x1