Module: Mesa
Branch: openchrome-branch
Commit: c2a90198605559af5adeec406e57d11bc3d4fb8e
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c2a90198605559af5adeec406e57d11bc3d4fb8e

Author: Thomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Date:   Sun Jan 25 22:31:13 2009 +0100

Make translated cliprects driver local.

---

 src/mesa/drivers/dri/openchrome/via_context.c      |   29 ++++++++++---
 src/mesa/drivers/dri/openchrome/via_context.h      |    4 +-
 src/mesa/drivers/dri/openchrome/via_fbo.c          |   17 +++++++-
 src/mesa/drivers/dri/openchrome/via_fbo.h          |    4 +-
 src/mesa/drivers/dri/openchrome/via_ioctl.c        |   44 ++++++++-----------
 src/mesa/drivers/dri/openchrome/via_pixel.c        |   14 +++---
 src/mesa/drivers/dri/openchrome/via_screen.c       |    5 ++
 src/mesa/drivers/dri/openchrome/via_state.c        |    2 +-
 .../drivers/dri/openchrome/via_teximage_accel.c    |    6 +-
 9 files changed, 78 insertions(+), 47 deletions(-)

diff --git a/src/mesa/drivers/dri/openchrome/via_context.c 
b/src/mesa/drivers/dri/openchrome/via_context.c
index 885e5ff..b5cebd5 100644
--- a/src/mesa/drivers/dri/openchrome/via_context.c
+++ b/src/mesa/drivers/dri/openchrome/via_context.c
@@ -546,14 +546,27 @@ viaUpdateFrameBufferLocked(struct via_context *vmesa,
        vfb = containerOf(dPriv->driverPrivate, struct via_framebuffer, Base);
 
        if (vfb->lastStamp != dPriv->lastStamp) {
-           drm_clip_rect_t *cur_clip;
+           struct drm_via_clip_rect *cur_clip;
+           struct drm_clip_rect *cur_d_clip;
            struct via_renderbuffer *front =
                via_get_renderbuffer(&vfb->Base, BUFFER_FRONT_LEFT);
            int i;
 
            vfb->lastStamp = dPriv->lastStamp;
            vfb->numFrontClipRects = dPriv->numClipRects;
-           vfb->pFrontClipRects = dPriv->pClipRects;
+
+           if (vfb->pFrontClipRects != NULL &&
+               (vfb->pFrontClipRects != &vfb->allClipRect))
+               free(vfb->pFrontClipRects);
+
+           vfb->pFrontClipRects = NULL;
+           if (vfb->numFrontClipRects) {
+               vfb->pFrontClipRects =
+                   malloc(vfb->numFrontClipRects * 
sizeof(*vfb->pFrontClipRects));
+               if (vfb->pFrontClipRects == NULL)
+                   vfb->numFrontClipRects = 0;
+           }
+
            vfb->xoff = 0;
            vfb->drawX = dPriv->x;
            vfb->drawY = dPriv->y;
@@ -564,13 +577,17 @@ viaUpdateFrameBufferLocked(struct via_context *vmesa,
             * we'll need to add it back.
             */
 
+
            cur_clip = vfb->pFrontClipRects;
+           cur_d_clip = dPriv->pClipRects;
+
            for (i = 0; i < vfb->numFrontClipRects; ++i) {
-               cur_clip->x1 -= vfb->drawX;
-               cur_clip->x2 -= vfb->drawX;
-               cur_clip->y1 -= vfb->drawY;
-               cur_clip->y2 -= vfb->drawY;
+               cur_clip->x1 = (int) cur_d_clip->x1 - vfb->drawX;
+               cur_clip->x2 = (int) cur_d_clip->x2 - vfb->drawX;
+               cur_clip->y1 = (int) cur_d_clip->y1 - vfb->drawY;
+               cur_clip->y2 = (int) cur_d_clip->y2 - vfb->drawY;
                cur_clip++;
+               cur_d_clip++;
            }
 
            if (front->isSharedFrontBuffer) {
diff --git a/src/mesa/drivers/dri/openchrome/via_context.h 
b/src/mesa/drivers/dri/openchrome/via_context.h
index 2dd9b9b..0638664 100644
--- a/src/mesa/drivers/dri/openchrome/via_context.h
+++ b/src/mesa/drivers/dri/openchrome/via_context.h
@@ -282,7 +282,7 @@ struct via_context
     GLuint drawXoff;
     GLuint drawXoffBytes;
     GLuint numDrawClipRects;
-    drm_clip_rect_t *pDrawClipRects;
+    struct drm_via_clip_rect *pDrawClipRects;
     GLuint drawStamp;
 
     /*
@@ -294,7 +294,7 @@ struct via_context
     GLuint readXoff;
     GLuint readXoffBytes;
     GLuint numReadClipRects;
-    drm_clip_rect_t *pReadClipRects;
+    struct drm_via_clip_rect *pReadClipRects;
     GLuint readStamp;
 
     GLboolean scissor;
diff --git a/src/mesa/drivers/dri/openchrome/via_fbo.c 
b/src/mesa/drivers/dri/openchrome/via_fbo.c
index 78c2a6a..be31581 100644
--- a/src/mesa/drivers/dri/openchrome/via_fbo.c
+++ b/src/mesa/drivers/dri/openchrome/via_fbo.c
@@ -377,6 +377,21 @@ via_get_renderbuffer(struct gl_framebuffer *fb, GLuint 
attIndex)
     return via_renderbuffer(fb->Attachment[attIndex].Renderbuffer);
 }
 
+static void
+via_destroy_framebuffer(struct gl_framebuffer *buffer)
+{
+    struct via_framebuffer *viafb = via_framebuffer(buffer);
+
+    if (!viafb)
+       return;
+
+    if (viafb->pFrontClipRects &&
+       (viafb->pFrontClipRects != &viafb->allClipRect))
+       free(viafb->pFrontClipRects);
+
+    _mesa_destroy_framebuffer(buffer);
+}
+
 static struct gl_framebuffer *
 via_new_framebuffer(GLcontext * ctx, GLuint name)
 {
@@ -393,7 +408,7 @@ via_new_framebuffer(GLcontext * ctx, GLuint name)
        viafb->Base._ColorDrawBufferIndexes[0] = BUFFER_COLOR0;
        viafb->Base.ColorReadBuffer = GL_COLOR_ATTACHMENT0_EXT;
        viafb->Base._ColorReadBufferIndex = BUFFER_COLOR0;
-       viafb->Base.Delete = _mesa_destroy_framebuffer;
+       viafb->Base.Delete = via_destroy_framebuffer;
     }
     return &viafb->Base;
 }
diff --git a/src/mesa/drivers/dri/openchrome/via_fbo.h 
b/src/mesa/drivers/dri/openchrome/via_fbo.h
index 54cc91b..5affff4 100644
--- a/src/mesa/drivers/dri/openchrome/via_fbo.h
+++ b/src/mesa/drivers/dri/openchrome/via_fbo.h
@@ -87,9 +87,9 @@ struct via_framebuffer
                                        * base address must be a multiple of
                                        * a number of pixels. */
 
-    drm_clip_rect_t allClipRect;
+    struct drm_via_clip_rect allClipRect;
     GLuint numFrontClipRects;         /* cliprects for front buffer */
-    drm_clip_rect_t *pFrontClipRects;
+    struct drm_via_clip_rect *pFrontClipRects;
     __DRIdrawablePrivate *dPriv;
 
     struct _WsbmFenceObject *swap_fences[VIA_MAX_SWAP_FENCES];
diff --git a/src/mesa/drivers/dri/openchrome/via_ioctl.c 
b/src/mesa/drivers/dri/openchrome/via_ioctl.c
index a2dd030..6e31419 100644
--- a/src/mesa/drivers/dri/openchrome/via_ioctl.c
+++ b/src/mesa/drivers/dri/openchrome/via_ioctl.c
@@ -115,6 +115,7 @@ dump_dma(struct via_context *vmesa)
     fflush(stderr);
 }
 
+#if 0
 int
 via_intersect_drm_rect(struct drm_via_clip_rect *out,
                       struct drm_via_clip_rect *a, struct drm_clip_rect *b)
@@ -141,6 +142,7 @@ via_intersect_drm_rect(struct drm_via_clip_rect *out,
 
     return 1;
 }
+#endif
 
 int
 via_intersect_via_rect(struct drm_via_clip_rect *out,
@@ -271,7 +273,7 @@ static void
 viaFillBuffer(struct via_context *vmesa,
              struct via_renderbuffer *buffer,
              struct drm_via_clip_rect *pbox,
-             struct drm_clip_rect *pbox2, int nboxes, GLuint pixel,
+             struct drm_via_clip_rect *pbox2, int nboxes, GLuint pixel,
              GLuint mask)
 {
     GLuint bytePerPixel = buffer->bpp >> 3;
@@ -413,7 +415,7 @@ viaClear(GLcontext * ctx, GLbitfield mask)
 
     if (flag) {
        struct drm_via_clip_rect *boxes = NULL, *tmp_boxes = NULL;
-       struct drm_clip_rect *boxes2 = NULL;
+       struct drm_via_clip_rect *boxes2 = NULL;
 
        int nr = 0;
        GLint cx, cy, cw, ch;
@@ -441,7 +443,7 @@ viaClear(GLcontext * ctx, GLbitfield mask)
 
            viaCreateSafeClip(&a, cx, cy, cw, ch);
 
-           drm_clip_rect_t *b = vmesa->pDrawClipRects;
+           struct drm_via_clip_rect *b = vmesa->pDrawClipRects;
 
            boxes = tmp_boxes =
                (struct drm_via_clip_rect *)malloc(vmesa->numDrawClipRects *
@@ -453,7 +455,7 @@ viaClear(GLcontext * ctx, GLbitfield mask)
            }
 
            for (i = 0; i < vmesa->numDrawClipRects; i++) {
-               if (via_intersect_drm_rect(&boxes[nr], &a, &b[i]))
+               if (via_intersect_via_rect(&boxes[nr], &a, &b[i]))
                    nr++;
            }
        } else {
@@ -520,7 +522,8 @@ viaClear(GLcontext * ctx, GLbitfield mask)
 
 static void
 viaDoSwapBuffers(struct via_context *vmesa,
-                struct via_framebuffer *vfb, drm_clip_rect_t * backClipRect)
+                struct via_framebuffer *vfb,
+                struct drm_via_clip_rect * backClipRect)
 {
     GLuint bytePerPixel = vmesa->viaScreen->bitsPerPixel >> 3;
     struct via_renderbuffer *front = via_get_renderbuffer(&vfb->Base,
@@ -528,8 +531,7 @@ viaDoSwapBuffers(struct via_context *vmesa,
     struct via_renderbuffer *back = via_get_renderbuffer(&vfb->Base,
                                                         BUFFER_BACK_LEFT);
     struct drm_via_clip_rect intersectRect;
-    drm_clip_rect_t *b = vfb->pFrontClipRects;
-    struct drm_via_clip_rect back_rect;
+    struct drm_via_clip_rect *b = vfb->pFrontClipRects;
     GLuint i;
     GLint x;
     GLint y;
@@ -540,14 +542,10 @@ viaDoSwapBuffers(struct via_context *vmesa,
     GLuint nbox;
 
     nbox = vfb->numFrontClipRects;
-    back_rect.x1 = backClipRect->x1;
-    back_rect.x2 = backClipRect->x2;
-    back_rect.y1 = backClipRect->y1;
-    back_rect.y2 = backClipRect->y2;
 
     for (i = 0; i < nbox; i++, b++) {
 
-       if (!via_intersect_drm_rect(&intersectRect, &back_rect, b))
+       if (!via_intersect_via_rect(&intersectRect, backClipRect, b))
            continue;
 
        x = intersectRect.x1;
@@ -665,7 +663,7 @@ viaCopyBuffer(__DRIdrawablePrivate * dPriv)
     struct via_context *vmesa;
     struct gl_framebuffer *fb = dPriv->driverPrivate;
     struct via_framebuffer *vfb = via_framebuffer(fb);
-    drm_clip_rect_t backClipRect;
+    struct drm_via_clip_rect backClipRect;
     __DRIscreenPrivate *sPriv = dPriv->driScreenPriv;
     int i;
 
@@ -1466,7 +1464,7 @@ via_setup_clip(struct via_context *vmesa,
        struct via_framebuffer *vfb = viaDrawFrameBuffer(vmesa);
        struct drm_via_clip_rect *vclip;
        struct drm_via_clip_rect *pvclip;
-       struct drm_clip_rect *dclip;
+       struct drm_via_clip_rect *dclip;
        struct drm_via_clip_rect scissor;
        unsigned int nclip;
        unsigned int i;
@@ -1507,21 +1505,17 @@ via_setup_clip(struct via_context *vmesa,
            }
        }
 
-       for (i = 0; i < nclip; ++i) {
-           pvclip->x1 = dclip->x1;
-           pvclip->x2 = dclip->x2;
-           pvclip->y1 = dclip->y1;
-           pvclip->y2 = dclip->y2;
-
-           if (vmesa->scissor &&
-               !via_intersect_via_rect(pvclip, pvclip, &scissor))
-               continue;
+       for (i = 0; i < nclip; ++i, ++pvclip, ++dclip) {
+           if (vmesa->scissor) {
+               if (!via_intersect_via_rect(pvclip, dclip, &scissor))
+                   continue;
+           } else {
+               *pvclip = *dclip;
+           }
 
            pvclip->x1 += xoff;
            pvclip->x2 += xoff;
 
-           pvclip++;
-           dclip++;
        }
        nclip = pvclip - vclip;
        *num_clip = nclip;
diff --git a/src/mesa/drivers/dri/openchrome/via_pixel.c 
b/src/mesa/drivers/dri/openchrome/via_pixel.c
index 23d0be2..7e6161f 100644
--- a/src/mesa/drivers/dri/openchrome/via_pixel.c
+++ b/src/mesa/drivers/dri/openchrome/via_pixel.c
@@ -100,8 +100,8 @@ via_blit_copypixels(GLcontext * ctx,
     struct drm_via_clip_rect src_rect;
     struct drm_via_clip_rect tmp_dst_rect;
     struct drm_via_clip_rect tmp_src_rect;
-    struct drm_clip_rect *src_clip_rects;
-    struct drm_clip_rect *dst_clip_rects;
+    struct drm_via_clip_rect *src_clip_rects;
+    struct drm_via_clip_rect *dst_clip_rects;
     int num_src_clip;
     int num_dst_clip;
     int i;
@@ -213,7 +213,7 @@ via_blit_copypixels(GLcontext * ctx,
     dst_clip_rects = vmesa->pDrawClipRects;
 
     for (i = 0; i < num_src_clip; ++i) {
-       if (!via_intersect_drm_rect
+       if (!via_intersect_via_rect
            (&tmp_src_rect, &src_rect, src_clip_rects + i))
            continue;
 
@@ -228,7 +228,7 @@ via_blit_copypixels(GLcontext * ctx,
            int xdir;
            int ydir;
 
-           if (!via_intersect_drm_rect
+           if (!via_intersect_via_rect
                (&tmp_dst_rect, &dst_rect, dst_clip_rects + j))
                continue;
 
@@ -377,8 +377,8 @@ via_read_pixels(GLcontext * ctx,
     uint32_t bias_rgba;
     struct drm_via_clip_rect clip;
     struct drm_via_clip_rect dst_clip;
-    struct drm_clip_rect tmp_clip;
-    struct drm_clip_rect *cur_clip;
+    struct drm_via_clip_rect tmp_clip;
+    struct drm_via_clip_rect *cur_clip;
     int i;
     struct via_framebuffer *vfb = viaReadFrameBuffer(vmesa);
     struct via_renderbuffer *read_buf = viaReadRenderBuffer(vmesa);
@@ -464,7 +464,7 @@ via_read_pixels(GLcontext * ctx,
            tmp_clip.y2 = vfb->Base.Height - cur_clip->y1;
        }
 
-       if (via_intersect_drm_rect(&dst_clip, &clip, &tmp_clip)) {
+       if (via_intersect_via_rect(&dst_clip, &clip, &tmp_clip)) {
 
            dst_clip.x1 -= x;
            dst_clip.x2 -= x;
diff --git a/src/mesa/drivers/dri/openchrome/via_screen.c 
b/src/mesa/drivers/dri/openchrome/via_screen.c
index 4508760..c99bb95 100644
--- a/src/mesa/drivers/dri/openchrome/via_screen.c
+++ b/src/mesa/drivers/dri/openchrome/via_screen.c
@@ -362,6 +362,11 @@ viaDestroyBuffer(__DRIdrawablePrivate * driDrawPriv)
        if (viafb->swap_fences[i] != 0)
            wsbmFenceUnreference(&viafb->swap_fences[i]);
     }
+    if (viafb->pFrontClipRects &&
+       (viafb->pFrontClipRects != &viafb->allClipRect)) {
+       free(viafb->pFrontClipRects);
+    }
+
     _mesa_unreference_framebuffer(&fb);
 }
 
diff --git a/src/mesa/drivers/dri/openchrome/via_state.c 
b/src/mesa/drivers/dri/openchrome/via_state.c
index 624c844..f62bad9 100644
--- a/src/mesa/drivers/dri/openchrome/via_state.c
+++ b/src/mesa/drivers/dri/openchrome/via_state.c
@@ -793,7 +793,7 @@ viaSetDepthBuffer(GLcontext * ctx, struct gl_framebuffer 
*fb)
 static void
 viaSetDrawBuffer(struct via_context *vmesa, GLuint attIndex,
                 GLboolean fallback, unsigned int xoff,
-                int numClipRects, drm_clip_rect_t * pClipRects)
+                int numClipRects, struct drm_via_clip_rect * pClipRects)
 {
     struct via_renderbuffer *viarb;
 
diff --git a/src/mesa/drivers/dri/openchrome/via_teximage_accel.c 
b/src/mesa/drivers/dri/openchrome/via_teximage_accel.c
index 0821c14..91e363a 100644
--- a/src/mesa/drivers/dri/openchrome/via_teximage_accel.c
+++ b/src/mesa/drivers/dri/openchrome/via_teximage_accel.c
@@ -286,8 +286,8 @@ via_try_3d_copy(GLcontext * ctx,
     uint32_t bias_rgba;
     struct drm_via_clip_rect clip;
     struct drm_via_clip_rect dst_clip;
-    struct drm_clip_rect tmp_clip;
-    struct drm_clip_rect *cur_clip;
+    struct drm_via_clip_rect tmp_clip;
+    struct drm_via_clip_rect *cur_clip;
     int i;
     struct via_framebuffer *vfb = viaReadFrameBuffer(vmesa);
     struct via_renderbuffer *read_buf = viaReadRenderBuffer(vmesa);
@@ -359,7 +359,7 @@ via_try_3d_copy(GLcontext * ctx,
            tmp_clip.y2 = vfb->Base.Height - cur_clip->y1;
        }
 
-       if (via_intersect_drm_rect(&dst_clip, &clip, &tmp_clip)) {
+       if (via_intersect_via_rect(&dst_clip, &clip, &tmp_clip)) {
 
            dst_clip.x1 -= x;
            dst_clip.x2 -= x;

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

Reply via email to