fix up radeon span functions using latest r200 code from Brian,
[mesa.git] / src / mesa / drivers / dri / r200 / r200_span.c
index 8de41332e4bb24d3396201319a245f362e9d620e..487da280be0fdc033d891ba900b8c40ace51c955 100644 (file)
@@ -46,31 +46,31 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #define DBG 0
 
-#define GET_PTR(X,Y) (sPriv->pFB + drb->flippedOffset          \
-     + ((dPriv->y + (Y)) * drb->flippedPitch + (dPriv->x + (X))) * drb->cpp)
-
-#define LOCAL_VARS                                                     \
-   r200ContextPtr rmesa = R200_CONTEXT(ctx);                           \
-   __DRIscreenPrivate *sPriv = rmesa->dri.screen;                      \
-   __DRIdrawablePrivate *dPriv = rmesa->dri.drawable;                  \
-   driRenderbuffer *drb = (driRenderbuffer *) rb;                      \
-   GLuint height = dPriv->h;                                           \
-   GLuint p;                                                           \
+/*
+ * Note that all information needed to access pixels in a renderbuffer
+ * should be obtained through the gl_renderbuffer parameter, not per-context
+ * information.
+ */
+#define LOCAL_VARS                                             \
+   driRenderbuffer *drb = (driRenderbuffer *) rb;              \
+   const __DRIdrawablePrivate *dPriv = drb->dPriv;             \
+   const GLuint bottom = dPriv->h - 1;                         \
+   GLubyte *buf = (GLubyte *) drb->flippedData                 \
+      + (dPriv->y * drb->flippedPitch + dPriv->x) * drb->cpp;  \
+   GLuint p;                                                   \
    (void) p;
 
-#define LOCAL_DEPTH_VARS                                               \
-   r200ContextPtr rmesa = R200_CONTEXT(ctx);                           \
-   __DRIscreenPrivate *sPriv = rmesa->dri.screen;                      \
-   __DRIdrawablePrivate *dPriv = rmesa->dri.drawable;                  \
-   driRenderbuffer *drb = (driRenderbuffer *) rb;                      \
-   GLuint height = dPriv->h;                                           \
-   GLuint xo = dPriv->x;                                               \
-   GLuint yo = dPriv->y;                                               \
-   char *buf = (char *)(sPriv->pFB + drb->offset);
+#define LOCAL_DEPTH_VARS                               \
+   driRenderbuffer *drb = (driRenderbuffer *) rb;      \
+   const __DRIdrawablePrivate *dPriv = drb->dPriv;     \
+   const GLuint bottom = dPriv->h - 1;                 \
+   GLuint xo = dPriv->x;                               \
+   GLuint yo = dPriv->y;                               \
+   GLubyte *buf = (GLubyte *) drb->Base.Data;
 
-#define LOCAL_STENCIL_VARS     LOCAL_DEPTH_VARS
+#define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS
 
-#define Y_FLIP( _y )           (height - _y - 1)
+#define Y_FLIP(Y) (bottom - (Y))
 
 #define HW_LOCK() 
 
@@ -89,8 +89,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #define TAG(x)    r200##x##_RGB565
 #define TAG2(x,y) r200##x##_RGB565##y
-#define GET_SRC_PTR(X,Y) GET_PTR(X,Y)
-#define GET_DST_PTR(X,Y) GET_PTR(X,Y)
+#define GET_PTR(X,Y) (buf + ((Y) * drb->flippedPitch + (X)) * 2)
 #include "spantmp2.h"
 
 /* 32 bit, ARGB8888 color spanline and pixel functions
@@ -100,8 +99,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #define TAG(x)    r200##x##_ARGB8888
 #define TAG2(x,y) r200##x##_ARGB8888##y
-#define GET_SRC_PTR(X,Y) GET_PTR(X,Y)
-#define GET_DST_PTR(X,Y) GET_PTR(X,Y)
+#define GET_PTR(X,Y) (buf + ((Y) * drb->flippedPitch + (X)) * 4)
 #include "spantmp2.h"
 
 
@@ -259,10 +257,10 @@ static void r200SpanRenderStart( GLcontext *ctx )
       int p;
       driRenderbuffer *drb =
         (driRenderbuffer *) ctx->WinSysDrawBuffer->_ColorDrawBuffers[0][0];
-      volatile int *read_buf =
+      volatile int *buf =
         (volatile int *)(rmesa->dri.screen->pFB + drb->offset);
-      p = *read_buf;
-      *read_buf = p;
+      p = *buf;
+      *buf = p;
    }
 }