OSDN Git Service

xlib: derive xmesa_renderbuffer from swrast_renderbuffer
authorBrian Paul <brianp@vmware.com>
Mon, 16 Jan 2012 19:35:49 +0000 (12:35 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Sat, 28 Jan 2012 02:02:40 +0000 (18:02 -0800)
(cherry picked from commit d16e71eeb47d1e67930f6e86a80dc926468224d9)

src/mesa/drivers/x11/xm_api.c
src/mesa/drivers/x11/xm_buffer.c
src/mesa/drivers/x11/xm_dd.c
src/mesa/drivers/x11/xmesaP.h

index 0f41218..fb82889 100644 (file)
@@ -309,7 +309,7 @@ create_xmesa_buffer(XMesaDrawable d, BufferType type,
    b->frontxrb->drawable = d;
    b->frontxrb->pixmap = (XMesaPixmap) d;
    _mesa_add_renderbuffer(&b->mesa_buffer, BUFFER_FRONT_LEFT,
-                          &b->frontxrb->Base);
+                          &b->frontxrb->Base.Base);
 
    /*
     * Back renderbuffer
@@ -326,7 +326,7 @@ create_xmesa_buffer(XMesaDrawable d, BufferType type,
       b->db_mode = vis->ximage_flag ? BACK_XIMAGE : BACK_PIXMAP;
       
       _mesa_add_renderbuffer(&b->mesa_buffer, BUFFER_BACK_LEFT,
-                             &b->backxrb->Base);
+                             &b->backxrb->Base.Base);
    }
 
    /*
@@ -1469,7 +1469,9 @@ GLboolean XMesaGetDepthBuffer( XMesaBuffer b, GLint *width, GLint *height,
 {
    struct gl_renderbuffer *rb
       = b->mesa_buffer.Attachment[BUFFER_DEPTH].Renderbuffer;
-   if (!rb || !rb->Buffer) {
+   struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
+
+   if (!xrb || !xrb->Base.Buffer) {
       *width = 0;
       *height = 0;
       *bytesPerValue = 0;
@@ -1481,7 +1483,7 @@ GLboolean XMesaGetDepthBuffer( XMesaBuffer b, GLint *width, GLint *height,
       *height = b->mesa_buffer.Height;
       *bytesPerValue = b->mesa_buffer.Visual.depthBits <= 16
          ? sizeof(GLushort) : sizeof(GLuint);
-      *buffer = (void *) rb->Buffer;
+      *buffer = (void *) xrb->Base.Buffer;
       return GL_TRUE;
    }
 }
index 64a8f43..a7395a3 100644 (file)
@@ -326,37 +326,37 @@ xmesa_new_renderbuffer(struct gl_context *ctx, GLuint name,
    struct xmesa_renderbuffer *xrb = CALLOC_STRUCT(xmesa_renderbuffer);
    if (xrb) {
       GLuint name = 0;
-      _mesa_init_renderbuffer(&xrb->Base, name);
+      _mesa_init_renderbuffer(&xrb->Base.Base, name);
 
-      xrb->Base.Delete = xmesa_delete_renderbuffer;
+      xrb->Base.Base.Delete = xmesa_delete_renderbuffer;
       if (backBuffer)
-         xrb->Base.AllocStorage = xmesa_alloc_back_storage;
+         xrb->Base.Base.AllocStorage = xmesa_alloc_back_storage;
       else
-         xrb->Base.AllocStorage = xmesa_alloc_front_storage;
+         xrb->Base.Base.AllocStorage = xmesa_alloc_front_storage;
 
-      xrb->Base.InternalFormat = GL_RGBA;
-      xrb->Base._BaseFormat = GL_RGBA;
-      xrb->Base.ClassID = XMESA_RENDERBUFFER;
+      xrb->Base.Base.InternalFormat = GL_RGBA;
+      xrb->Base.Base._BaseFormat = GL_RGBA;
+      xrb->Base.Base.ClassID = XMESA_RENDERBUFFER;
 
       switch (xmvis->undithered_pf) {
       case PF_8R8G8B:
          /* This will really only happen for pixmaps.  We'll access the
           * pixmap via a temporary XImage which will be 32bpp.
           */
-         xrb->Base.Format = MESA_FORMAT_XRGB8888;
+         xrb->Base.Base.Format = MESA_FORMAT_XRGB8888;
          break;
       case PF_8A8R8G8B:
-         xrb->Base.Format = MESA_FORMAT_ARGB8888;
+         xrb->Base.Base.Format = MESA_FORMAT_ARGB8888;
          break;
       case PF_8A8B8G8R:
-         xrb->Base.Format = MESA_FORMAT_RGBA8888_REV;
+         xrb->Base.Base.Format = MESA_FORMAT_RGBA8888_REV;
          break;
       case PF_5R6G5B:
-         xrb->Base.Format = MESA_FORMAT_RGB565;
+         xrb->Base.Base.Format = MESA_FORMAT_RGB565;
          break;
       default:
          _mesa_warning(ctx, "Bad pixel format in xmesa_new_renderbuffer");
-         xrb->Base.Format = MESA_FORMAT_ARGB8888;
+         xrb->Base.Base.Format = MESA_FORMAT_ARGB8888;
          break;
       }
 
@@ -426,7 +426,7 @@ xmesa_MapRenderbuffer(struct gl_context *ctx,
 {
    struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
 
-   if (xrb->Base.ClassID == XMESA_RENDERBUFFER) {
+   if (xrb->Base.Base.ClassID == XMESA_RENDERBUFFER) {
       XImage *ximage = xrb->ximage;
 
       assert(!xrb->map_mode); /* only a single mapping allowed */
@@ -488,7 +488,7 @@ xmesa_UnmapRenderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
 {
    struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
 
-   if (xrb->Base.ClassID == XMESA_RENDERBUFFER) {
+   if (xrb->Base.Base.ClassID == XMESA_RENDERBUFFER) {
       XImage *ximage = xrb->ximage;
 
       if (!ximage) {
index 342d2d9..d0bf2f0 100644 (file)
@@ -138,7 +138,7 @@ clear_pixmap(struct gl_context *ctx, struct xmesa_renderbuffer *xrb,
    assert(xmbuf->cleargc);
 
    XMesaFillRectangle( xmesa->display, xrb->pixmap, xmbuf->cleargc,
-                       x, xrb->Base.Height - y - height,
+                       x, xrb->Base.Base.Height - y - height,
                        width, height );
 }
 
@@ -215,9 +215,9 @@ clear_32bit_ximage(struct gl_context *ctx, struct xmesa_renderbuffer *xrb,
             | ((pixel << 24) & 0xff000000);
    }
 
-   if (width == xrb->Base.Width && height == xrb->Base.Height) {
+   if (width == xrb->Base.Base.Width && height == xrb->Base.Base.Height) {
       /* clearing whole buffer */
-      const GLuint n = xrb->Base.Width * xrb->Base.Height;
+      const GLuint n = xrb->Base.Base.Width * xrb->Base.Base.Height;
       GLuint *ptr4 = (GLuint *) xrb->ximage->data;
       if (pixel == 0) {
          /* common case */
@@ -332,7 +332,7 @@ can_do_DrawPixels_8R8G8B(struct gl_context *ctx, GLenum format, GLenum type)
             struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
             if (xrb &&
                 xrb->pixmap && /* drawing to pixmap or window */
-                _mesa_get_format_bits(xrb->Base.Format, GL_ALPHA_BITS) == 0) {
+                _mesa_get_format_bits(xrb->Base.Base.Format, GL_ALPHA_BITS) == 0) {
                return GL_TRUE;
             }
          }
@@ -465,7 +465,7 @@ can_do_DrawPixels_5R6G5B(struct gl_context *ctx, GLenum format, GLenum type)
             struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
             if (xrb &&
                 xrb->pixmap && /* drawing to pixmap or window */
-                _mesa_get_format_bits(xrb->Base.Format, GL_ALPHA_BITS) == 0) {
+                _mesa_get_format_bits(xrb->Base.Base.Format, GL_ALPHA_BITS) == 0) {
                return GL_TRUE;
             }
          }
index 7caa356..7e7b1f8 100644 (file)
@@ -29,6 +29,7 @@
 
 #include "xmesa.h"
 #include "main/mtypes.h"
+#include "swrast/s_context.h"
 
 
 extern _glthread_Mutex _xmesa_lock;
@@ -151,7 +152,7 @@ typedef enum {
  */
 struct xmesa_renderbuffer
 {
-   struct gl_renderbuffer Base;  /* Base class */
+   struct swrast_renderbuffer Base;  /* Base class */
 
    XMesaBuffer Parent;  /**< The XMesaBuffer this renderbuffer belongs to */
    XMesaDrawable drawable;     /* Usually the X window ID */