Mesa (openchrome-branch): Make translated cliprects driver local.
Thomas Hellstrom
thomash at kemper.freedesktop.org
Sun Jan 25 21:50:12 UTC 2009
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;
More information about the mesa-commit
mailing list