summaryrefslogtreecommitdiff
path: root/xc/lib/GL/mesa/src/drv/i810/i810span.c
diff options
context:
space:
mode:
Diffstat (limited to 'xc/lib/GL/mesa/src/drv/i810/i810span.c')
-rw-r--r--xc/lib/GL/mesa/src/drv/i810/i810span.c109
1 files changed, 74 insertions, 35 deletions
diff --git a/xc/lib/GL/mesa/src/drv/i810/i810span.c b/xc/lib/GL/mesa/src/drv/i810/i810span.c
index 5ea27fd84..aa4f22d0c 100644
--- a/xc/lib/GL/mesa/src/drv/i810/i810span.c
+++ b/xc/lib/GL/mesa/src/drv/i810/i810span.c
@@ -1,31 +1,39 @@
#include "types.h"
#include "i810dd.h"
-#include "i810lib.h"
-#include "i810dma.h"
#include "i810log.h"
#include "i810span.h"
+#include "i810ioctl.h"
#define DBG 0
-
#define LOCAL_VARS \
- i810ContextPtr imesa = I810_CONTEXT(ctx); \
__DRIdrawablePrivate *dPriv = imesa->driDrawable; \
- __DRIscreenPrivate *sPriv = imesa->driScreen; \
i810ScreenPrivate *i810Screen = imesa->i810Screen; \
- GLuint pitch = i810Screen->auxPitch; \
+ GLuint pitch = i810Screen->backPitch; \
GLuint height = dPriv->h; \
- char *buf = (char *)(sPriv->pFB + \
- imesa->drawOffset + \
- dPriv->x * 2 + \
+ char *buf = (char *)(imesa->drawMap + \
+ dPriv->x * 2 + \
+ dPriv->y * pitch); \
+ char *read_buf = (char *)(imesa->readMap + \
+ dPriv->x * 2 + \
+ dPriv->y * pitch); \
+ GLushort p = I810_CONTEXT( ctx )->MonoColor; \
+ (void) read_buf; (void) buf; (void) p
+
+#define LOCAL_DEPTH_VARS \
+ __DRIdrawablePrivate *dPriv = imesa->driDrawable; \
+ i810ScreenPrivate *i810Screen = imesa->i810Screen; \
+ GLuint pitch = i810Screen->backPitch; \
+ GLuint height = dPriv->h; \
+ char *buf = (char *)(i810Screen->depth.map + \
+ dPriv->x * 2 + \
dPriv->y * pitch)
-#define INIT_MONO_PIXEL(p) \
- GLushort p = I810_CONTEXT( ctx )->MonoColor;
+#define INIT_MONO_PIXEL(p)
-#define CLIPPIXEL(_x,_y) (_x >= minx && _x <= maxx && \
- _y >= miny && _y <= maxy)
+#define CLIPPIXEL(_x,_y) (_x >= minx && _x < maxx && \
+ _y >= miny && _y < maxy)
#define CLIPSPAN(_x,_y,_n,_x1,_n1,_i) \
@@ -34,15 +42,20 @@
_n1 = _n; \
_x1 = _x; \
if (_x1 < minx) _i += (minx - _x1), _x1 = minx; \
- if (_x1 + _n1 > maxx) n1 -= (_x1 + n1 - maxx); \
+ if (_x1 + _n1 >= maxx) n1 -= (_x1 + n1 - maxx) + 1; \
}
+#define Y_FLIP(_y) (height - _y - 1)
+
+
+#define HW_LOCK() \
+ i810ContextPtr imesa = I810_CONTEXT(ctx); \
+ LOCK_HARDWARE_QUIESCENT(imesa);
+
#define HW_CLIPLOOP() \
do { \
__DRIdrawablePrivate *dPriv = imesa->driDrawable; \
int _nc = dPriv->numClipRects; \
- LOCK_HARDWARE(imesa); \
- if (!i810glx.LpRing.synced) _I810Sync( imesa ); \
while (_nc--) { \
int minx = dPriv->pClipRects[_nc].x1 - dPriv->x; \
int miny = dPriv->pClipRects[_nc].y1 - dPriv->y; \
@@ -52,13 +65,16 @@
#define HW_ENDCLIPLOOP() \
} \
- UNLOCK_HARDWARE(imesa); \
} while (0)
+#define HW_UNLOCK() \
+ UNLOCK_HARDWARE(imesa);
+
-#define Y_FLIP(_y) (height - _y)
+/* 16 bit, 565 rgb color spanline and pixel functions
+ */
#define WRITE_RGBA( _x, _y, r, g, b, a ) \
*(GLushort *)(buf + _x*2 + _y*pitch) = ( (((int)r & 0xf8) << 8) | \
(((int)g & 0xfc) << 3) | \
@@ -66,13 +82,13 @@
#define WRITE_PIXEL( _x, _y, p ) \
*(GLushort *)(buf + _x*2 + _y*pitch) = p
-#define READ_RGBA( rgba, _x, _y ) \
-do { \
- GLushort p = *(GLushort *)(buf + _x*2 + _y*pitch); \
- rgba[0] = (p >> 8) & 0xf8; \
- rgba[1] = (p >> 3) & 0xfc; \
- rgba[2] = (p << 3) & 0xf8; \
- rgba[3] = 0; /* or 255? */ \
+#define READ_RGBA( rgba, _x, _y ) \
+do { \
+ GLushort p = *(GLushort *)(read_buf + _x*2 + _y*pitch); \
+ rgba[0] = (p >> 8) & 0xf8; \
+ rgba[1] = (p >> 3) & 0xfc; \
+ rgba[2] = (p << 3) & 0xf8; \
+ rgba[3] = 255; \
} while(0)
#define TAG(x) i810##x##_565
@@ -81,28 +97,46 @@ do { \
-
-#define WRITE_RGBA( _x, _y, r, g, b, a ) \
+/* 15 bit, 555 rgb color spanline and pixel functions
+ */
+#define WRITE_RGBA( _x, _y, r, g, b, a ) \
*(GLushort *)(buf + _x*2 + _y*pitch) = (((r & 0xf8) << 7) | \
- ((g & 0xf8) << 3) | \
+ ((g & 0xf8) << 3) | \
((b & 0xf8) >> 3))
#define WRITE_PIXEL( _x, _y, p ) \
*(GLushort *)(buf + _x*2 + _y*pitch) = p
-#define READ_RGBA( rgba, _x, _y ) \
-do { \
- GLushort p = *(GLushort *)(buf + _x*2 + _y*pitch); \
- rgba[0] = (p >> 7) & 0xf8; \
- rgba[1] = (p >> 3) & 0xf8; \
- rgba[2] = (p << 3) & 0xf8; \
- rgba[3] = 0; /* or 255? */ \
+#define READ_RGBA( rgba, _x, _y ) \
+do { \
+ GLushort p = *(GLushort *)(read_buf + _x*2 + _y*pitch); \
+ rgba[0] = (p >> 7) & 0xf8; \
+ rgba[1] = (p >> 3) & 0xf8; \
+ rgba[2] = (p << 3) & 0xf8; \
+ rgba[3] = 255; \
} while(0)
#define TAG(x) i810##x##_555
#include "spantmp.h"
+
+
+/* 16 bit depthbuffer functions.
+ */
+#define WRITE_DEPTH( _x, _y, d ) \
+ *(GLushort *)(buf + _x*2 + _y*pitch) = d;
+
+#define READ_DEPTH( d, _x, _y ) \
+ d = *(GLushort *)(buf + _x*2 + _y*pitch);
+
+/* d = 0xffff; */
+
+#define TAG(x) i810##x##_16
+#include "depthtmp.h"
+
+
+
void i810DDInitSpanFuncs( GLcontext *ctx )
{
if (1) {
@@ -123,6 +157,11 @@ void i810DDInitSpanFuncs( GLcontext *ctx )
ctx->Driver.ReadRGBAPixels = i810ReadRGBAPixels_555;
}
+ ctx->Driver.ReadDepthSpan = i810ReadDepthSpan_16;
+ ctx->Driver.WriteDepthSpan = i810WriteDepthSpan_16;
+ ctx->Driver.ReadDepthPixels = i810ReadDepthPixels_16;
+ ctx->Driver.WriteDepthPixels = i810WriteDepthPixels_16;
+
ctx->Driver.WriteCI8Span =NULL;
ctx->Driver.WriteCI32Span =NULL;
ctx->Driver.WriteMonoCISpan =NULL;