dri/drivers: update driNewRenderbuffer() to take a gl_format
[mesa.git] / src / mesa / drivers / dri / mach64 / mach64_span.c
index 88863471d4745e6d7dd9d9046d3c3e6f1a557529..500319e0e31f4a9ff9e3adce80ee55237e1ac7f3 100644 (file)
@@ -1,4 +1,4 @@
-/* $XFree86$ */ /* -*- mode: c; c-basic-offset: 3 -*- */
+/* -*- mode: c; c-basic-offset: 3 -*- */
 /*
  * Copyright 2000 Gareth Hughes
  * All Rights Reserved.
 
 #define LOCAL_VARS                                                     \
    mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);                       \
-   mach64ScreenRec *mach64Screen = mmesa->mach64Screen;                        \
-   __DRIscreenPrivate *driScreen = mmesa->driScreen;                   \
+   __DRIscreenPrivate *sPriv = mmesa->driScreen;                       \
    __DRIdrawablePrivate *dPriv = mmesa->driDrawable;                   \
-   GLuint pitch = mmesa->drawPitch * mach64Screen->cpp;                        \
+   driRenderbuffer *drb = (driRenderbuffer *) rb;                      \
    GLuint height = dPriv->h;                                           \
-   char *buf = (char *)(driScreen->pFB +                               \
-                       mmesa->drawOffset +                             \
-                       (dPriv->x * mach64Screen->cpp) +                \
-                       (dPriv->y * pitch));                            \
-   char *read_buf = (char *)(driScreen->pFB +                          \
-                            mmesa->readOffset +                        \
-                            (dPriv->x * mach64Screen->cpp) +           \
-                            (dPriv->y * pitch));                       \
    GLushort p;                                                         \
-   (void) read_buf; (void) buf; (void) p
+   (void) p;
 
 #define LOCAL_DEPTH_VARS                                               \
    mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);                       \
-   mach64ScreenRec *mach64Screen = mmesa->mach64Screen;                        \
    __DRIdrawablePrivate *dPriv = mmesa->driDrawable;                   \
    __DRIscreenPrivate *driScreen = mmesa->driScreen;                   \
-   GLuint pitch = mach64Screen->depthPitch * 2;                                \
+   driRenderbuffer *drb = (driRenderbuffer *) rb;                      \
    GLuint height = dPriv->h;                                           \
-   char *buf = (char *)(driScreen->pFB +                               \
-                       mach64Screen->depthOffset +                     \
-                       dPriv->x * 2 +                                  \
-                       dPriv->y * pitch)
+   char *buf = (char *)(driScreen->pFB + drb->offset +                 \
+                       (dPriv->x + dPriv->y * drb->pitch) * 2)
 
 #define LOCAL_STENCIL_VARS     LOCAL_DEPTH_VARS
 
 
 #define TAG(x)    mach64##x##_RGB565
 #define TAG2(x,y) mach64##x##_RGB565##y
+#define GET_PTR(X,Y) (sPriv->pFB + drb->offset         \
+     + ((dPriv->y + (Y)) * drb->pitch + (dPriv->x + (X))) * drb->cpp)
 #include "spantmp2.h"
 
 
 
 #define TAG(x)    mach64##x##_ARGB8888
 #define TAG2(x,y) mach64##x##_ARGB8888##y
+#define GET_PTR(X,Y) (sPriv->pFB + drb->offset         \
+     + ((dPriv->y + (Y)) * drb->pitch + (dPriv->x + (X))) * drb->cpp)
 #include "spantmp2.h"
 
 
 
 /* 16 bit depthbuffer functions.
  */
+#define VALUE_TYPE GLushort
+
 #define WRITE_DEPTH( _x, _y, d )                                       \
-   *(GLushort *)(buf + (_x)*2 + (_y)*pitch) = d;
+   *(GLushort *)(buf + ((_x) + (_y) * drb->pitch) * 2) = d;
 
 #define READ_DEPTH( d, _x, _y )                                                \
-   d = *(GLushort *)(buf + (_x)*2 + (_y)*pitch);
+   d = *(GLushort *)(buf + ((_x) + (_y) * drb->pitch) * 2);
 
-#define TAG(x) mach64##x##_16
+#define TAG(x) mach64##x##_z16
 #include "depthtmp.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 mach64DDSetBuffer( GLcontext *ctx,
-                              GLframebuffer *colorBuffer,
-                              GLuint bufferBit )
-{
-   mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-
-   switch ( bufferBit ) {
-   case BUFFER_BIT_FRONT_LEFT:
-      if (MACH64_DEBUG & DEBUG_VERBOSE_MSG)
-        fprintf(stderr,"%s: BUFFER_BIT_FRONT_LEFT\n", __FUNCTION__);
-      mmesa->drawOffset = mmesa->readOffset = mmesa->mach64Screen->frontOffset;
-      mmesa->drawPitch  = mmesa->readPitch  = mmesa->mach64Screen->frontPitch;
-      break;
-   case BUFFER_BIT_BACK_LEFT:
-      if (MACH64_DEBUG & DEBUG_VERBOSE_MSG)
-        fprintf(stderr,"%s: BUFFER_BIT_BACK_LEFT\n", __FUNCTION__);
-      mmesa->drawOffset = mmesa->readOffset = mmesa->mach64Screen->backOffset;
-      mmesa->drawPitch  = mmesa->readPitch  = mmesa->mach64Screen->backPitch;
-      break;
-   default:
-      break;
-   }
-}
-
 static void mach64SpanRenderStart( GLcontext *ctx )
 {
    mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
@@ -180,63 +145,7 @@ static void mach64SpanRenderFinish( GLcontext *ctx )
 
 void mach64DDInitSpanFuncs( GLcontext *ctx )
 {
-#if 0
-   mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
-#endif
    struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference(ctx);
-
-   swdd->SetBuffer = mach64DDSetBuffer;
-
-#if 0
-   switch ( mmesa->mach64Screen->cpp ) {
-   case 2:
-      swdd->WriteRGBASpan      = mach64WriteRGBASpan_RGB565;
-      swdd->WriteRGBSpan       = mach64WriteRGBSpan_RGB565;
-      swdd->WriteMonoRGBASpan  = mach64WriteMonoRGBASpan_RGB565;
-      swdd->WriteRGBAPixels    = mach64WriteRGBAPixels_RGB565;
-      swdd->WriteMonoRGBAPixels        = mach64WriteMonoRGBAPixels_RGB565;
-      swdd->ReadRGBASpan       = mach64ReadRGBASpan_RGB565;
-      swdd->ReadRGBAPixels     = mach64ReadRGBAPixels_RGB565;
-      break;
-
-   case 4:
-      swdd->WriteRGBASpan      = mach64WriteRGBASpan_ARGB8888;
-      swdd->WriteRGBSpan       = mach64WriteRGBSpan_ARGB8888;
-      swdd->WriteMonoRGBASpan  = mach64WriteMonoRGBASpan_ARGB8888;
-      swdd->WriteRGBAPixels    = mach64WriteRGBAPixels_ARGB8888;
-      swdd->WriteMonoRGBAPixels        = mach64WriteMonoRGBAPixels_ARGB8888;
-      swdd->ReadRGBASpan       = mach64ReadRGBASpan_ARGB8888;
-      swdd->ReadRGBAPixels     = mach64ReadRGBAPixels_ARGB8888;
-
-      break;
-
-   default:
-      break;
-   }
-#endif
-
-   /* Depth buffer is always 16 bit */
-#if 0
-   swdd->ReadDepthSpan         = mach64ReadDepthSpan_16;
-   swdd->WriteDepthSpan                = mach64WriteDepthSpan_16;
-   swdd->ReadDepthPixels       = mach64ReadDepthPixels_16;
-   swdd->WriteDepthPixels      = mach64WriteDepthPixels_16;
-#endif
-#if 0
-   /* No hardware stencil buffer */
-   swdd->ReadStencilSpan       = NULL;
-   swdd->WriteStencilSpan      = NULL;
-   swdd->ReadStencilPixels     = NULL;
-   swdd->WriteStencilPixels    = NULL;
-
-   swdd->WriteCI8Span          = NULL;
-   swdd->WriteCI32Span         = NULL;
-   swdd->WriteMonoCISpan       = NULL;
-   swdd->WriteCI32Pixels       = NULL;
-   swdd->WriteMonoCIPixels     = NULL;
-   swdd->ReadCI32Span          = NULL;
-   swdd->ReadCI32Pixels                = NULL;
-#endif
    swdd->SpanRenderStart       = mach64SpanRenderStart;
    swdd->SpanRenderFinish      = mach64SpanRenderFinish;
 }
@@ -248,38 +157,13 @@ void mach64DDInitSpanFuncs( GLcontext *ctx )
 void
 mach64SetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis)
 {
-   if (drb->Base.InternalFormat == GL_RGBA) {
-      if (vis->redBits == 5 && vis->greenBits == 6 && vis->blueBits == 5) {
-         mach64InitPointers_RGB565(&drb->Base);
-      }
-      else {
-         mach64InitPointers_ARGB8888(&drb->Base);
-      }
-   }
-   else if (drb->Base.InternalFormat == GL_DEPTH_COMPONENT16) {
-      drb->Base.GetRow        = mach64ReadDepthSpan_16;
-      drb->Base.GetValues     = mach64ReadDepthPixels_16;
-      drb->Base.PutRow        = mach64WriteDepthSpan_16;
-      drb->Base.PutMonoRow    = mach64WriteMonoDepthSpan_16;
-      drb->Base.PutValues     = mach64WriteDepthPixels_16;
-      drb->Base.PutMonoValues = NULL;
+   if (drb->Base.Format == MESA_FORMAT_RGB565) {
+      mach64InitPointers_RGB565(&drb->Base);
    }
-   else if (drb->Base.InternalFormat == GL_DEPTH_COMPONENT24) {
-      /* never */
-      drb->Base.GetRow        = NULL;
-      drb->Base.GetValues     = NULL;
-      drb->Base.PutRow        = NULL;
-      drb->Base.PutMonoRow    = NULL;
-      drb->Base.PutValues     = NULL;
-      drb->Base.PutMonoValues = NULL;
+   else if (drb->Base.Format == MESA_FORMAT_ARGB8888) {
+      mach64InitPointers_ARGB8888(&drb->Base);
    }
-   else if (drb->Base.InternalFormat == GL_STENCIL_INDEX8_EXT) {
-      /* never */
-      drb->Base.GetRow        = NULL;
-      drb->Base.GetValues     = NULL;
-      drb->Base.PutRow        = NULL;
-      drb->Base.PutMonoRow    = NULL;
-      drb->Base.PutValues     = NULL;
-      drb->Base.PutMonoValues = NULL;
+   else if (drb->Base.Format == MESA_FORMAT_Z16) {
+      mach64InitDepthPointers_z16(&drb->Base);
    }
 }