Merge branch 'master' into gallium-0.2
[mesa.git] / src / mesa / drivers / dri / unichrome / via_ioctl.h
index 193aab8a990573458ee98cb066f2d28ae1386acf..14a833a97d001eee270f88ab99e7b375e2830050 100644 (file)
 #include "via_context.h"
 
 
-void viaFinishPrimitive(viaContextPtr vmesa);
-void viaFlushPrims(viaContextPtr vmesa);
-void viaFlushPrimsLocked(viaContextPtr vmesa);
+void viaFinishPrimitive(struct via_context *vmesa);
+void viaFlushDma(struct via_context *vmesa);
+void viaFlushDmaLocked(struct via_context *vmesa, GLuint flags);
 
 void viaInitIoctlFuncs(GLcontext *ctx);
-void viaCopyBuffer(const __DRIdrawablePrivate *dpriv);
-void viaPageFlip(const __DRIdrawablePrivate *dpriv);
-void viaFillFrontBuffer(viaContextPtr vmesa);
-void viaFillFrontPBuffer(viaContextPtr vmesa);
-void viaFillBackBuffer(viaContextPtr vmesa);
-void viaFillDepthBuffer(viaContextPtr vmesa, GLuint pixel, GLuint mask);
-void viaDoSwapBuffers(viaContextPtr vmesa);
-void viaDoSwapPBuffers(viaContextPtr vmesa);
-void viaCheckDma(viaContextPtr vmesa, GLuint bytes);
+void viaCopyBuffer(__DRIdrawablePrivate *dpriv);
+void viaPageFlip(__DRIdrawablePrivate *dpriv);
+void viaCheckDma(struct via_context *vmesa, GLuint bytes);
+void viaResetPageFlippingLocked(struct via_context *vmesa);
+void viaWaitIdle(struct via_context *vmesa, GLboolean light);
+void viaWaitIdleLocked(struct via_context *vmesa, GLboolean light);
+
+GLboolean viaCheckBreadcrumb( struct via_context *vmesa, GLuint value );
+void viaEmitBreadcrumb( struct via_context *vmesa );
+
 
 #define VIA_FINISH_PRIM(vmesa) do {            \
    if (vmesa->dmaLastPrim)                     \
@@ -50,20 +51,42 @@ void viaCheckDma(viaContextPtr vmesa, GLuint bytes);
 
 #define VIA_FLUSH_DMA(vmesa) do {              \
    VIA_FINISH_PRIM(vmesa);                     \
-   if (vmesa->dmaLow != DMA_OFFSET)            \
-      viaFlushPrims(vmesa);                    \
+   if (vmesa->dmaLow)          \
+      viaFlushDma(vmesa);                      \
 } while (0)
     
 
-GLuint *viaAllocDmaFunc(viaContextPtr vmesa, int bytes, const char *func, int line);
-#define viaAllocDma( v, b ) viaAllocDmaFunc(v, b, __FUNCTION__, __LINE__)
+void viaWrapPrimitive( struct via_context *vmesa );
+
+static INLINE GLuint *viaAllocDma(struct via_context *vmesa, int bytes)
+{
+   if (vmesa->dmaLow + bytes > VIA_DMA_HIGHWATER) {
+      viaFlushDma(vmesa);
+   }
+
+   {
+      GLuint *start = (GLuint *)(vmesa->dma + vmesa->dmaLow);
+      vmesa->dmaLow += bytes;
+      return start;
+   }
+}
+
+
+static GLuint INLINE *viaExtendPrimitive(struct via_context *vmesa, int bytes)
+{
+   if (vmesa->dmaLow + bytes > VIA_DMA_HIGHWATER) {
+      viaWrapPrimitive(vmesa);
+   }
+
+   {
+      GLuint *start = (GLuint *)(vmesa->dma + vmesa->dmaLow);
+      vmesa->dmaLow += bytes;
+      return start;
+   }
+}
 
 
 
-/* Room for the cliprect and other preamble at the head of each dma
- * buffer:   (What about buffers which only contain blits?)
- */
-#define DMA_OFFSET 32
 
 #define RING_VARS GLuint *_vb = 0, _nr, _x;
 
@@ -76,7 +99,7 @@ GLuint *viaAllocDmaFunc(viaContextPtr vmesa, int bytes, const char *func, int li
 
 #define BEGIN_RING_NOCHECK(n) do {                     \
    if (_vb != 0) abort();                              \
-   _vb = (GLuint *)(vmesa->dmaAddr + vmesa->dmaLow);   \
+   _vb = (GLuint *)(vmesa->dma + vmesa->dmaLow);       \
    vmesa->dmaLow += (n) * sizeof(GLuint);              \
    _nr = (n);                                          \
    _x = 0;                                             \
@@ -104,7 +127,7 @@ GLuint *viaAllocDmaFunc(viaContextPtr vmesa, int bytes, const char *func, int li
    }                                           \
 } while (0)
 
-
-
-
+#define VIA_GEQ_WRAP(left, right) \
+    (((left) - (right)) < ( 1 << 23))
+      
 #endif