fix up radeon span functions using latest r200 code from Brian,
[mesa.git] / src / mesa / drivers / dri / i915 / intel_span.c
index 3522f4f38fc3ed68c4fddf2fb69fcd59ceedd133..a0f848f7b0ebc1c9140e76af337f18f59e7431e0 100644 (file)
 #define DBG 0
 
 #define LOCAL_VARS                                             \
-   intelContextPtr intel = INTEL_CONTEXT(ctx);                    \
+   intelContextPtr intel = INTEL_CONTEXT(ctx);                 \
    __DRIdrawablePrivate *dPriv = intel->driDrawable;           \
-   intelScreenPrivate *intelScreen = intel->intelScreen;               \
-   GLuint pitch = intelScreen->backPitch * intelScreen->cpp;   \
+   driRenderbuffer *drb = (driRenderbuffer *) rb;              \
+   GLuint pitch = drb->pitch * drb->cpp;                       \
    GLuint height = dPriv->h;                                   \
-   char *buf = (char *)(intel->drawMap +                       \
-                       dPriv->x * intelScreen->cpp +           \
-                       dPriv->y * pitch);                      \
-   char *read_buf = (char *)(intel->readMap +                  \
-                            dPriv->x * intelScreen->cpp +      \
-                            dPriv->y * pitch);                 \
-   GLushort p;                                                         \
-   (void) read_buf; (void) buf; (void) p
+   char *buf = (char *) drb->Base.Data +                       \
+                       dPriv->x * drb->cpp +                   \
+                       dPriv->y * pitch;                       \
+   GLushort p;                                                 \
+   (void) buf; (void) p
 
 #define LOCAL_DEPTH_VARS                                       \
-   intelContextPtr intel = INTEL_CONTEXT(ctx);                    \
+   intelContextPtr intel = INTEL_CONTEXT(ctx);                 \
    __DRIdrawablePrivate *dPriv = intel->driDrawable;           \
-   intelScreenPrivate *intelScreen = intel->intelScreen;               \
-   GLuint pitch = intelScreen->backPitch * intelScreen->cpp;   \
+   driRenderbuffer *drb = (driRenderbuffer *) rb;              \
+   GLuint pitch = drb->pitch * drb->cpp;                       \
    GLuint height = dPriv->h;                                   \
-   char *buf = (char *)(intelScreen->depth.map +                       \
-                       dPriv->x * intelScreen->cpp +           \
-                       dPriv->y * pitch)
+   char *buf = (char *) drb->Base.Data +                       \
+                       dPriv->x * drb->cpp +                   \
+                       dPriv->y * pitch
 
 #define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS 
 
@@ -86,7 +83,7 @@
 
 #define READ_RGBA( rgba, _x, _y )                              \
 do {                                                           \
-   GLushort p = *(GLushort *)(read_buf + _x*2 + _y*pitch);     \
+   GLushort p = *(GLushort *)(buf + _x*2 + _y*pitch);          \
    rgba[0] = (((p >> 11) & 0x1f) * 255) / 31;                  \
    rgba[1] = (((p >>  5) & 0x3f) * 255) / 63;                  \
    rgba[2] = (((p >>  0) & 0x1f) * 255) / 31;                  \
@@ -108,7 +105,7 @@ do {                                                                \
 
 #define READ_RGBA( rgba, _x, _y )                              \
 do {                                                           \
-   GLushort p = *(GLushort *)(read_buf + _x*2 + _y*pitch);     \
+   GLushort p = *(GLushort *)(buf + _x*2 + _y*pitch);          \
    rgba[0] = (p >> 7) & 0xf8;                                  \
    rgba[1] = (p >> 3) & 0xf8;                                  \
    rgba[2] = (p << 3) & 0xf8;                                  \
@@ -127,7 +124,7 @@ do {                                                                \
    d = *(GLushort *)(buf + (_x)*2 + (_y)*pitch);        
 
 
-#define TAG(x) intel##x##_16
+#define TAG(x) intel##x##_z16
 #include "depthtmp.h"
 
 
@@ -135,17 +132,14 @@ do {                                                              \
 #define LOCAL_VARS                                             \
    intelContextPtr intel = INTEL_CONTEXT(ctx);                 \
    __DRIdrawablePrivate *dPriv = intel->driDrawable;           \
-   intelScreenPrivate *intelScreen = intel->intelScreen;               \
-   GLuint pitch = intelScreen->backPitch * intelScreen->cpp;   \
+   driRenderbuffer *drb = (driRenderbuffer *) rb;              \
+   GLuint pitch = drb->pitch * drb->cpp;                       \
    GLuint height = dPriv->h;                                   \
-   char *buf = (char *)(intel->drawMap +                       \
-                       dPriv->x * intelScreen->cpp +           \
-                       dPriv->y * pitch);                      \
-   char *read_buf = (char *)(intel->readMap +                  \
-                            dPriv->x * intelScreen->cpp +      \
-                            dPriv->y * pitch);                 \
+   char *buf = (char *)drb->Base.Data +                                \
+                       dPriv->x * drb->cpp +                   \
+                       dPriv->y * pitch;                       \
    GLuint p;                                                   \
-   (void) read_buf; (void) buf; (void) p
+   (void) buf; (void) p
 
 #undef INIT_MONO_PIXEL
 #define INIT_MONO_PIXEL(p,color)\
@@ -165,7 +159,7 @@ do {                                                                \
 
 #define READ_RGBA(rgba, _x, _y)                                        \
     do {                                                       \
-       GLuint p = *(GLuint *)(read_buf + _x*4 + _y*pitch);     \
+       GLuint p = *(GLuint *)(buf + _x*4 + _y*pitch);          \
        rgba[0] = (p >> 16) & 0xff;                             \
        rgba[1] = (p >> 8)  & 0xff;                             \
        rgba[2] = (p >> 0)  & 0xff;                             \
@@ -189,7 +183,7 @@ do {                                                                \
    d = *(GLuint *)(buf + (_x)*4 + (_y)*pitch) & 0xffffff;
 
 
-#define TAG(x) intel##x##_24_8
+#define TAG(x) intel##x##_z24_s8
 #include "depthtmp.h"
 
 #define WRITE_STENCIL( _x, _y, d ) {                   \
@@ -202,31 +196,10 @@ do {                                                              \
 #define READ_STENCIL( d, _x, _y )                      \
    d = *(GLuint *)(buf + (_x)*4 + (_y)*pitch) >> 24;
 
-#define TAG(x) intel##x##_24_8
+#define TAG(x) intel##x##_z24_s8
 #include "stenciltmp.h"
 
 
-/*
- * This function is called to specify which buffer to read and write
- * for software rasterization (swrast) fallbacks.  This doesn't necessarily
- * correspond to glDrawBuffer() or glReadBuffer() calls.
- */
-static void intelSetBuffer(GLcontext *ctx, GLframebuffer *colorBuffer,
-                          GLuint bufferBit)
-{
-   intelContextPtr intel = INTEL_CONTEXT(ctx);
-   if (bufferBit == BUFFER_BIT_FRONT_LEFT) {
-      intel->drawMap = (char *)intel->driScreen->pFB;
-      intel->readMap = (char *)intel->driScreen->pFB;
-   } else if (bufferBit == BUFFER_BIT_BACK_LEFT) {
-      intel->drawMap = intel->intelScreen->back.map;
-      intel->readMap = intel->intelScreen->back.map;
-   } else {
-      ASSERT(0);
-   }
-}
-
-
 /* Move locking out to get reasonable span performance.
  */
 void intelSpanRenderStart( GLcontext *ctx )
@@ -247,68 +220,7 @@ void intelSpanRenderFinish( GLcontext *ctx )
 
 void intelInitSpanFuncs( GLcontext *ctx )
 {
-   intelContextPtr intel = INTEL_CONTEXT(ctx);
-   intelScreenPrivate *intelScreen = intel->intelScreen;
-
    struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference(ctx);
-
-   swdd->SetBuffer = intelSetBuffer;
-
-   switch (intelScreen->fbFormat) {
-   case DV_PF_555:
-#if 0
-      swdd->WriteRGBASpan = intelWriteRGBASpan_555;
-      swdd->WriteRGBSpan = intelWriteRGBSpan_555;
-      swdd->WriteMonoRGBASpan = intelWriteMonoRGBASpan_555;
-      swdd->WriteRGBAPixels = intelWriteRGBAPixels_555;
-      swdd->WriteMonoRGBAPixels = intelWriteMonoRGBAPixels_555;
-      swdd->ReadRGBASpan = intelReadRGBASpan_555;
-      swdd->ReadRGBAPixels = intelReadRGBAPixels_555;
-      swdd->ReadDepthSpan = intelReadDepthSpan_16;
-      swdd->WriteDepthSpan = intelWriteDepthSpan_16;
-      swdd->ReadDepthPixels = intelReadDepthPixels_16;
-      swdd->WriteDepthPixels = intelWriteDepthPixels_16;
-#endif
-      break;
-
-   case DV_PF_565:
-#if 0
-      swdd->WriteRGBASpan = intelWriteRGBASpan_565;
-      swdd->WriteRGBSpan = intelWriteRGBSpan_565;
-      swdd->WriteMonoRGBASpan = intelWriteMonoRGBASpan_565;
-      swdd->WriteRGBAPixels = intelWriteRGBAPixels_565;
-      swdd->WriteMonoRGBAPixels = intelWriteMonoRGBAPixels_565; 
-      swdd->ReadRGBASpan = intelReadRGBASpan_565;
-      swdd->ReadRGBAPixels = intelReadRGBAPixels_565;
-      swdd->ReadDepthSpan = intelReadDepthSpan_16;
-      swdd->WriteDepthSpan = intelWriteDepthSpan_16;
-      swdd->ReadDepthPixels = intelReadDepthPixels_16;
-      swdd->WriteDepthPixels = intelWriteDepthPixels_16;
-#endif
-      break;
-
-   case DV_PF_8888:
-#if 0
-      swdd->WriteRGBASpan = intelWriteRGBASpan_8888;
-      swdd->WriteRGBSpan = intelWriteRGBSpan_8888;
-      swdd->WriteMonoRGBASpan = intelWriteMonoRGBASpan_8888;
-      swdd->WriteRGBAPixels = intelWriteRGBAPixels_8888;
-      swdd->WriteMonoRGBAPixels = intelWriteMonoRGBAPixels_8888;
-      swdd->ReadRGBASpan = intelReadRGBASpan_8888;
-      swdd->ReadRGBAPixels = intelReadRGBAPixels_8888;
-      swdd->ReadDepthSpan = intelReadDepthSpan_24_8;
-      swdd->WriteDepthSpan = intelWriteDepthSpan_24_8;
-      swdd->ReadDepthPixels = intelReadDepthPixels_24_8;
-      swdd->WriteDepthPixels = intelWriteDepthPixels_24_8;
-
-      swdd->WriteStencilSpan = intelWriteStencilSpan_24_8;
-      swdd->ReadStencilSpan = intelReadStencilSpan_24_8;
-      swdd->WriteStencilPixels = intelWriteStencilPixels_24_8;
-      swdd->ReadStencilPixels = intelReadStencilPixels_24_8;
-#endif
-      break;
-   }
-
    swdd->SpanRenderStart = intelSpanRenderStart;
    swdd->SpanRenderFinish = intelSpanRenderFinish; 
 }
@@ -322,58 +234,25 @@ intelSetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis)
 {
    if (drb->Base.InternalFormat == GL_RGBA) {
       if (vis->redBits == 5 && vis->greenBits == 5 && vis->blueBits == 5) {
-         drb->Base.GetRow        = intelReadRGBASpan_555;
-         drb->Base.GetValues     = intelReadRGBAPixels_555;
-         drb->Base.PutRow        = intelWriteRGBASpan_555;
-         drb->Base.PutRowRGB     = intelWriteRGBSpan_555;
-         drb->Base.PutMonoRow    = intelWriteMonoRGBASpan_555;
-         drb->Base.PutValues     = intelWriteRGBAPixels_555;
-         drb->Base.PutMonoValues = intelWriteMonoRGBAPixels_555;
+         intelInitPointers_555(&drb->Base);
       }
       else if (vis->redBits == 5 && vis->greenBits == 6 && vis->blueBits == 5) {
-         drb->Base.GetRow        = intelReadRGBASpan_565;
-         drb->Base.GetValues     = intelReadRGBAPixels_565;
-         drb->Base.PutRow        = intelWriteRGBASpan_565;
-         drb->Base.PutRowRGB     = intelWriteRGBSpan_565;
-         drb->Base.PutMonoRow    = intelWriteMonoRGBASpan_565;
-         drb->Base.PutValues     = intelWriteRGBAPixels_565;
-         drb->Base.PutMonoValues = intelWriteMonoRGBAPixels_565;
+         intelInitPointers_565(&drb->Base);
       }
       else {
          assert(vis->redBits == 8);
          assert(vis->greenBits == 8);
          assert(vis->blueBits == 8);
-         drb->Base.GetRow        = intelReadRGBASpan_8888;
-         drb->Base.GetValues     = intelReadRGBAPixels_8888;
-         drb->Base.PutRow        = intelWriteRGBASpan_8888;
-         drb->Base.PutRowRGB     = intelWriteRGBSpan_8888;
-         drb->Base.PutMonoRow    = intelWriteMonoRGBASpan_8888;
-         drb->Base.PutValues     = intelWriteRGBAPixels_8888;
-         drb->Base.PutMonoValues = intelWriteMonoRGBAPixels_8888;
+         intelInitPointers_8888(&drb->Base);
       }
    }
    else if (drb->Base.InternalFormat == GL_DEPTH_COMPONENT16) {
-      drb->Base.GetRow        = intelReadDepthSpan_16;
-      drb->Base.GetValues     = intelReadDepthPixels_16;
-      drb->Base.PutRow        = intelWriteDepthSpan_16;
-      drb->Base.PutMonoRow    = intelWriteMonoDepthSpan_16;
-      drb->Base.PutValues     = intelWriteDepthPixels_16;
-      drb->Base.PutMonoValues = NULL;
+      intelInitDepthPointers_z16(&drb->Base);
    }
    else if (drb->Base.InternalFormat == GL_DEPTH_COMPONENT24) {
-      drb->Base.GetRow        = intelReadDepthSpan_24_8;
-      drb->Base.GetValues     = intelReadDepthPixels_24_8;
-      drb->Base.PutRow        = intelWriteDepthSpan_24_8;
-      drb->Base.PutMonoRow    = intelWriteMonoDepthSpan_24_8;
-      drb->Base.PutValues     = intelWriteDepthPixels_24_8;
-      drb->Base.PutMonoValues = NULL;
+      intelInitDepthPointers_z24_s8(&drb->Base);
    }
    else if (drb->Base.InternalFormat == GL_STENCIL_INDEX8_EXT) {
-      drb->Base.GetRow        = intelReadStencilSpan_24_8;
-      drb->Base.GetValues     = intelReadStencilPixels_24_8;
-      drb->Base.PutRow        = intelWriteStencilSpan_24_8;
-      drb->Base.PutMonoRow    = intelWriteMonoStencilSpan_24_8;
-      drb->Base.PutValues     = intelWriteStencilPixels_24_8;
-      drb->Base.PutMonoValues = NULL;
+      intelInitStencilPointers_z24_s8(&drb->Base);
    }
 }