assorted clean-ups, fixes
authorBrian Paul <brian.paul@tungstengraphics.com>
Thu, 27 Apr 2006 02:47:50 +0000 (02:47 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Thu, 27 Apr 2006 02:47:50 +0000 (02:47 +0000)
src/mesa/drivers/x11/xm_buffer.c
src/mesa/drivers/x11/xm_dd.c
src/mesa/drivers/x11/xm_line.c
src/mesa/drivers/x11/xm_tri.c
src/mesa/drivers/x11/xmesaP.h

index 2f20b162a7f0c4b011cb9060fbdb3a38c02fd6ac..2a44e126f788b69a1605e88780431e2c24e6f81a 100644 (file)
@@ -48,7 +48,7 @@ static GLboolean
 xmesa_alloc_front_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
                           GLenum internalFormat, GLuint width, GLuint height)
 {
-   struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
+   struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
 
    /* just clear these to be sure we don't accidentally use them */
    xrb->origin1 = NULL;
@@ -74,7 +74,7 @@ static GLboolean
 xmesa_alloc_back_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
                          GLenum internalFormat, GLuint width, GLuint height)
 {
-   struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
+   struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
 
    /* same as front buffer */
    (void) xmesa_alloc_front_storage(ctx, rb, internalFormat, width, height);
index 2056366a91493a63a304b48719ead11a1ff5e4ed..d339ac6bc39c3199a9164f5d6e9dd60399e98d22 100644 (file)
@@ -302,11 +302,12 @@ clear_HPCR_ximage( GLcontext *ctx, struct xmesa_renderbuffer *xrb,
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
 
    if (all) {
-      GLint i, c16 = (xrb->ximage->bytes_per_line>>4)<<4;
+      const GLuint c16 = xrb->ximage->bytes_per_line & ~0xf;
+      GLuint i;
       GLubyte *ptr  = (GLubyte *) xrb->ximage->data;
       for (i = 0; i < xrb->Base.Height; i++) {
-         GLint j;
-         GLubyte *sptr = xmesa->xm_visual->hpcr_clear_ximage_pattern[0];
+         GLuint j;
+         const GLubyte *sptr = xmesa->xm_visual->hpcr_clear_ximage_pattern[0];
          if (i&1) {
             sptr += 16;
          }
@@ -329,7 +330,7 @@ clear_HPCR_ximage( GLcontext *ctx, struct xmesa_renderbuffer *xrb,
             ptr[15] = sptr[15];
             ptr += 16;
          }
-         for (; j < xrb->ximage->bytes_per_line; j++) {
+         for (; j < (GLuint) xrb->ximage->bytes_per_line; j++) {
             *ptr = sptr[j&15];
             ptr++;
          }
@@ -530,14 +531,15 @@ clear_buffers( GLcontext *ctx, GLbitfield mask,
    if (ctx->DrawBuffer->Name == 0) {
       /* this is a window system framebuffer */
       const GLuint *colorMask = (GLuint *) &ctx->Color.ColorMask;
-      XMesaBuffer b = (XMesaBuffer) ctx->DrawBuffer;
+      XMesaBuffer b = XMESA_BUFFER(ctx->DrawBuffer);
 
       /* we can't handle color or index masking */
       if (*colorMask == 0xffffffff && ctx->Color.IndexMask == 0xffffffff) {
          if (mask & BUFFER_BIT_FRONT_LEFT) {
             /* clear front color buffer */
-            if (b->frontxrb == (struct xmesa_renderbuffer *)
-                ctx->DrawBuffer->Attachment[BUFFER_FRONT_LEFT].Renderbuffer) {
+            struct gl_renderbuffer *frontRb
+               = ctx->DrawBuffer->Attachment[BUFFER_FRONT_LEFT].Renderbuffer;
+            if (b->frontxrb == xmesa_renderbuffer(frontRb)) {
                /* renderbuffer is not wrapped - great! */
                b->frontxrb->clearFunc(ctx, b->frontxrb, all, x, y,
                                       width, height);
@@ -549,8 +551,9 @@ clear_buffers( GLcontext *ctx, GLbitfield mask,
          }
          if (mask & BUFFER_BIT_BACK_LEFT) {
             /* clear back color buffer */
-            if (b->backxrb == (struct xmesa_renderbuffer *)
-                ctx->DrawBuffer->Attachment[BUFFER_BACK_LEFT].Renderbuffer) {
+            struct gl_renderbuffer *backRb
+               = ctx->DrawBuffer->Attachment[BUFFER_BACK_LEFT].Renderbuffer;
+            if (b->backxrb == xmesa_renderbuffer(backRb)) {
                /* renderbuffer is not wrapped - great! */
                b->backxrb->clearFunc(ctx, b->backxrb, all, x, y,
                                      width, height);
@@ -600,7 +603,7 @@ xmesa_DrawPixels_8R8G8B( GLcontext *ctx,
                          const GLvoid *pixels )
 {
    struct xmesa_renderbuffer *xrb
-      = (struct xmesa_renderbuffer *) ctx->DrawBuffer->_ColorDrawBuffers[0][0];
+      = (struct xmesa_renderbuffer *) ctx->DrawBuffer->_ColorDrawBuffers[0][0]->Wrapped;
 
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    const SWcontext *swrast = SWRAST_CONTEXT( ctx );
@@ -1151,10 +1154,15 @@ update_framebuffer_size(GLcontext *ctx)
  * Thus, we poll.
  * Note that this trick isn't fool-proof.  If the application never calls
  * glViewport, our notion of the current window size may be incorrect.
+ * That problem led to the GLX_MESA_resize_buffers extension.
  */
 static void
 xmesa_viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h)
 {
+   (void) x;
+   (void) y;
+   (void) w;
+   (void) h;
    update_framebuffer_size(ctx);
 }
 
index f60ffa65eb9f88fffbcdff58933023c207a41938..17995031145ac671a12f6fd10e0dd68be28c5554 100644 (file)
@@ -118,7 +118,7 @@ void xmesa_choose_point( GLcontext *ctx )
 
 
 #define GET_XRB(XRB)  struct xmesa_renderbuffer *XRB = \
-   (struct xmesa_renderbuffer *) ctx->DrawBuffer->_ColorDrawBuffers[0][0]->Wrapped
+   xmesa_renderbuffer(ctx->DrawBuffer->_ColorDrawBuffers[0][0]->Wrapped)
 
 
 /*
@@ -547,8 +547,7 @@ xor_line(GLcontext *ctx, const SWvertex *vert0, const SWvertex *vert1)
    XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
    XMesaGC gc = xmesa->xm_buffer->gc;
-   struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *)
-      ctx->DrawBuffer->_ColorDrawBuffers[0][0];
+   GET_XRB(xrb);
    unsigned long pixel = xmesa_color_to_pixel(ctx,
                                               vert1->color[0], vert1->color[1],
                                               vert1->color[2], vert1->color[3],
@@ -589,8 +588,7 @@ get_line_func(GLcontext *ctx)
    if (ctx->Line.StippleFlag)             return (swrast_line_func) NULL;
    if (swrast->_RasterMask & MULTI_DRAW_BIT) return (swrast_line_func) NULL;
 
-   xrb = (struct xmesa_renderbuffer *)
-      ctx->DrawBuffer->_ColorDrawBuffers[0][0]->Wrapped;
+   xrb = xmesa_renderbuffer(ctx->DrawBuffer->_ColorDrawBuffers[0][0]->Wrapped);
 
    if (xrb->ximage
        && swrast->_RasterMask==DEPTH_BIT
index 61e8986a9b23aea8180f241df3f88d68c6c96bf4..d08fd8f8161017737a391f96e59a191110ea4725 100644 (file)
@@ -45,7 +45,7 @@
 
 
 #define GET_XRB(XRB)  struct xmesa_renderbuffer *XRB = \
-   (struct xmesa_renderbuffer *) ctx->DrawBuffer->_ColorDrawBuffers[0][0]->Wrapped
+   xmesa_renderbuffer(ctx->DrawBuffer->_ColorDrawBuffers[0][0]->Wrapped)
 
 
 /**********************************************************************/
@@ -53,6 +53,8 @@
 /**********************************************************************/
 
 
+#if CHAN_BITS == 8
+
 /*
  * XImage, smooth, depth-buffered, PF_TRUECOLOR triangle.
  */
 #include "swrast/s_tritemp.h"
 
 
+#endif /* CHAN_BITS == 8 */
 
-#ifdef DEBUG
+
+#if defined(DEBUG) && CHAN_BITS == 8
 extern void _xmesa_print_triangle_func( swrast_tri_func triFunc );
 void _xmesa_print_triangle_func( swrast_tri_func triFunc )
 {
@@ -1441,19 +1445,24 @@ get_triangle_func(GLcontext *ctx)
    triFuncName = NULL;
 #endif
 
+#if CHAN_BITS == 8
+   /* trivial fallback tests */
    if ((ctx->DrawBuffer->_ColorDrawBufferMask[0]
         & (BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT)) == 0)
       return (swrast_tri_func) NULL;
-   if (ctx->RenderMode != GL_RENDER)  return (swrast_tri_func) NULL;
-   if (ctx->Polygon.SmoothFlag)       return (swrast_tri_func) NULL;
-   if (ctx->Texture._EnabledUnits)    return (swrast_tri_func) NULL;
-   if (swrast->_RasterMask & MULTI_DRAW_BIT) return (swrast_tri_func) NULL;
+   if (ctx->RenderMode != GL_RENDER)
+      return (swrast_tri_func) NULL;
+   if (ctx->Polygon.SmoothFlag)
+      return (swrast_tri_func) NULL;
+   if (ctx->Texture._EnabledUnits)
+      return (swrast_tri_func) NULL;
+   if (swrast->_RasterMask & MULTI_DRAW_BIT)
+      return (swrast_tri_func) NULL;
    if (ctx->Polygon.CullFlag && 
        ctx->Polygon.CullFaceMode == GL_FRONT_AND_BACK)
-                                        return (swrast_tri_func) NULL;
+      return (swrast_tri_func) NULL;
 
-   xrb = (struct xmesa_renderbuffer *)
-      ctx->DrawBuffer->_ColorDrawBuffers[0][0]->Wrapped;
+   xrb = xmesa_renderbuffer(ctx->DrawBuffer->_ColorDrawBuffers[0][0]->Wrapped);
 
    if (xrb->ximage) {
       if (   ctx->Light.ShadeModel==GL_SMOOTH
@@ -1607,13 +1616,11 @@ get_triangle_func(GLcontext *ctx)
                return (swrast_tri_func) NULL;
          }
       }
-
-      return (swrast_tri_func) NULL;
-   }
-   else {
-      /* draw to pixmap */
-      return (swrast_tri_func) NULL;
    }
+
+#else
+   return (swrast_tri_func) NULL;
+#endif /* CHAN_BITS == 8 */
 }
 
 
index 9d4e6946090594a2f558edb08e83415c64a12f28..bcac0557b98f953054c992a0fec5e90b07f4e9f2 100644 (file)
@@ -480,12 +480,14 @@ extern const int xmesa_kernel1[16];
 /*
  * Return pointer to XMesaContext corresponding to a Mesa GLcontext.
  * Since we're using structure containment, it's just a cast!.
+ * XXX should use inlined function for better type safety.
  */
 #define XMESA_CONTEXT(MESACTX)  ((XMesaContext) (MESACTX))
 
 /*
  * Return pointer to XMesaBuffer corresponding to a Mesa GLframebuffer.
  * Since we're using structure containment, it's just a cast!.
+ * XXX should use inlined function for better type safety.
  */
 #define XMESA_BUFFER(MESABUFF)  ((XMesaBuffer) (MESABUFF))
 
@@ -520,6 +522,16 @@ xmesa_set_renderbuffer_funcs(struct xmesa_renderbuffer *xrb,
                              enum pixel_format pixelformat, GLint depth);
 
 
+/**
+ * Using a function instead of an ordinary cast is safer.
+ */
+static INLINE struct xmesa_renderbuffer *
+xmesa_renderbuffer(struct gl_renderbuffer *rb)
+{
+   return (struct xmesa_renderbuffer *) rb;
+}
+
+
 /* Plugged into the software rasterizer.  Try to use internal
  * swrast-style point, line and triangle functions.
  */