#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) \
#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;
#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; \
} \
} while (0)
-
-
-
+#define VIA_GEQ_WRAP(left, right) \
+ (((left) - (right)) < ( 1 << 23))
+
#endif