Module: Mesa
Branch: master
Commit: c1bde793598bcb5d5f8744c290a66ea6586eb29f
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c1bde793598bcb5d5f8744c290a66ea6586eb29f

Author: George Sapountzis <[email protected]>
Date:   Sun Mar 14 11:36:46 2010 +0200

dri/swrast: port to dri_sw (drawable)

---

 src/mesa/drivers/dri/common/dri_sw.h          |    5 +--
 src/mesa/drivers/dri/swrast/swrast.c          |   39 +++++++++++++++++++-----
 src/mesa/drivers/dri/swrast/swrast_priv.h     |   30 +++++++++++++++----
 src/mesa/drivers/dri/swrast/swrast_spantemp.h |    8 ++--
 4 files changed, 60 insertions(+), 22 deletions(-)

diff --git a/src/mesa/drivers/dri/common/dri_sw.h 
b/src/mesa/drivers/dri/common/dri_sw.h
index 93e9624..89369a9 100644
--- a/src/mesa/drivers/dri/common/dri_sw.h
+++ b/src/mesa/drivers/dri/common/dri_sw.h
@@ -67,16 +67,13 @@ struct __DRIcontextRec {
 
 struct __DRIdrawableRec {
 
-    GLframebuffer Base;
+    void *driverPrivate;
 
     void *loaderPrivate;
 
     __DRIscreen *driScreenPriv;
 
     int refcount;
-
-    /* scratch row for optimized front-buffer rendering */
-    char *row;
 };
 
 
diff --git a/src/mesa/drivers/dri/swrast/swrast.c 
b/src/mesa/drivers/dri/swrast/swrast.c
index 8273439..4450e47 100644
--- a/src/mesa/drivers/dri/swrast/swrast.c
+++ b/src/mesa/drivers/dri/swrast/swrast.c
@@ -308,14 +308,24 @@ dri_create_buffer(__DRIscreen * sPriv,
                  __DRIdrawable * dPriv,
                  const __GLcontextModes * visual, GLboolean isPixmap)
 {
+    struct dri_drawable *drawable = NULL;
     GLframebuffer *fb;
     struct swrast_renderbuffer *frontrb, *backrb;
 
     TRACE;
 
-    fb = &dPriv->Base;
+    drawable = CALLOC_STRUCT(dri_drawable);
+    if (drawable == NULL)
+       goto drawable_fail;
 
-    dPriv->row = malloc(MAX_WIDTH * 4);
+    dPriv->driverPrivate = drawable;
+    drawable->dPriv = dPriv;
+
+    drawable->row = malloc(MAX_WIDTH * 4);
+    if (drawable->row == NULL)
+       goto drawable_fail;
+
+    fb = &drawable->Base;
 
     /* basic framebuffer setup */
     _mesa_initialize_window_framebuffer(fb, visual);
@@ -340,6 +350,15 @@ dri_create_buffer(__DRIscreen * sPriv,
                                 GL_FALSE /* aux bufs */);
 
     return GL_TRUE;
+
+drawable_fail:
+
+    if (drawable)
+       free(drawable->row);
+
+    FREE(drawable);
+
+    return GL_FALSE;
 }
 
 static void
@@ -348,11 +367,12 @@ dri_destroy_buffer(__DRIdrawable * dPriv)
     TRACE;
 
     if (dPriv) {
+       struct dri_drawable *drawable = dri_drawable(dPriv);
        GLframebuffer *fb;
 
-       free(dPriv->row);
+       free(drawable->row);
 
-       fb = &dPriv->Base;
+       fb = &drawable->Base;
 
        fb->DeletePending = GL_TRUE;
        _mesa_reference_framebuffer(&fb, NULL);
@@ -366,12 +386,13 @@ dri_swap_buffers(__DRIdrawable * dPriv)
 
     GET_CURRENT_CONTEXT(ctx);
 
+    struct dri_drawable *drawable = dri_drawable(dPriv);
     GLframebuffer *fb;
     struct swrast_renderbuffer *frontrb, *backrb;
 
     TRACE;
 
-    fb = &dPriv->Base;
+    fb = &drawable->Base;
 
     frontrb = 
swrast_renderbuffer(fb->Attachment[BUFFER_FRONT_LEFT].Renderbuffer);
     backrb = 
swrast_renderbuffer(fb->Attachment[BUFFER_BACK_LEFT].Renderbuffer);
@@ -402,7 +423,7 @@ dri_swap_buffers(__DRIdrawable * dPriv)
 static void
 get_window_size( GLframebuffer *fb, GLsizei *w, GLsizei *h )
 {
-    __DRIdrawable *dPriv = swrast_drawable(fb);
+    __DRIdrawable *dPriv = swrast_drawable(fb)->dPriv;
     __DRIscreen *sPriv = dPriv->driScreenPriv;
     int x, y;
 
@@ -572,13 +593,15 @@ dri_make_current(__DRIcontext * cPriv,
 
     if (cPriv) {
        struct dri_context *ctx = dri_context(cPriv);
+       struct dri_drawable *draw = dri_drawable(driDrawPriv);
+       struct dri_drawable *read = dri_drawable(driReadPriv);
 
        if (!driDrawPriv || !driReadPriv)
            return GL_FALSE;
 
        mesaCtx = &ctx->Base;
-       mesaDraw = &driDrawPriv->Base;
-       mesaRead = &driReadPriv->Base;
+       mesaDraw = &draw->Base;
+       mesaRead = &read->Base;
 
        /* check for same context and buffer */
        if (mesaCtx == _mesa_get_current_context()
diff --git a/src/mesa/drivers/dri/swrast/swrast_priv.h 
b/src/mesa/drivers/dri/swrast/swrast_priv.h
index 130598b..8e87f64 100644
--- a/src/mesa/drivers/dri/swrast/swrast_priv.h
+++ b/src/mesa/drivers/dri/swrast/swrast_priv.h
@@ -80,6 +80,30 @@ swrast_context(GLcontext *ctx)
     return (struct dri_context *) ctx;
 }
 
+struct dri_drawable
+{
+    /* mesa */
+    GLframebuffer Base;
+
+    /* dri */
+    __DRIdrawable *dPriv;
+
+    /* scratch row for optimized front-buffer rendering */
+    char *row;
+};
+
+static INLINE struct dri_drawable *
+dri_drawable(__DRIdrawable * driDrawPriv)
+{
+    return (struct dri_drawable *)driDrawPriv->driverPrivate;
+}
+
+static INLINE struct dri_drawable *
+swrast_drawable(GLframebuffer *fb)
+{
+    return (struct dri_drawable *) fb;
+}
+
 struct swrast_renderbuffer {
     struct gl_renderbuffer Base;
 
@@ -89,12 +113,6 @@ struct swrast_renderbuffer {
     GLuint bpp;
 };
 
-static INLINE __DRIdrawable *
-swrast_drawable(GLframebuffer *fb)
-{
-    return (__DRIdrawable *) fb;
-}
-
 static INLINE struct swrast_renderbuffer *
 swrast_renderbuffer(struct gl_renderbuffer *rb)
 {
diff --git a/src/mesa/drivers/dri/swrast/swrast_spantemp.h 
b/src/mesa/drivers/dri/swrast/swrast_spantemp.h
index c73b785..079726a 100644
--- a/src/mesa/drivers/dri/swrast/swrast_spantemp.h
+++ b/src/mesa/drivers/dri/swrast/swrast_spantemp.h
@@ -40,7 +40,7 @@ static INLINE void
 PUT_PIXEL( GLcontext *glCtx, GLint x, GLint y, GLubyte *p )
 {
     __DRIcontext *ctx = swrast_context(glCtx)->cPriv;
-    __DRIdrawable *draw = swrast_drawable(glCtx->DrawBuffer);
+    __DRIdrawable *draw = swrast_drawable(glCtx->DrawBuffer)->dPriv;
 
     __DRIscreen *screen = ctx->driScreenPriv;
 
@@ -54,7 +54,7 @@ static INLINE void
 GET_PIXEL( GLcontext *glCtx, GLint x, GLint y, GLubyte *p )
 {
     __DRIcontext *ctx = swrast_context(glCtx)->cPriv;
-    __DRIdrawable *read = swrast_drawable(glCtx->ReadBuffer);
+    __DRIdrawable *read = swrast_drawable(glCtx->ReadBuffer)->dPriv;
 
     __DRIscreen *screen = ctx->driScreenPriv;
 
@@ -66,7 +66,7 @@ static INLINE void
 PUT_ROW( GLcontext *glCtx, GLint x, GLint y, GLuint n, char *row )
 {
     __DRIcontext *ctx = swrast_context(glCtx)->cPriv;
-    __DRIdrawable *draw = swrast_drawable(glCtx->DrawBuffer);
+    __DRIdrawable *draw = swrast_drawable(glCtx->DrawBuffer)->dPriv;
 
     __DRIscreen *screen = ctx->driScreenPriv;
 
@@ -79,7 +79,7 @@ static INLINE void
 GET_ROW( GLcontext *glCtx, GLint x, GLint y, GLuint n, char *row )
 {
     __DRIcontext *ctx = swrast_context(glCtx)->cPriv;
-    __DRIdrawable *read = swrast_drawable(glCtx->ReadBuffer);
+    __DRIdrawable *read = swrast_drawable(glCtx->ReadBuffer)->dPriv;
 
     __DRIscreen *screen = ctx->driScreenPriv;
 

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to