Mesa (r6xx-rewrite): R6xx/r7xx: implement memcpy buffer swaps

Alex Deucher agd5f at kemper.freedesktop.org
Wed Jul 15 01:22:43 UTC 2009


Module: Mesa
Branch: r6xx-rewrite
Commit: 10b3e64bcada2e68144cc6ed40f7d760aff873e2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=10b3e64bcada2e68144cc6ed40f7d760aff873e2

Author: Alex Deucher <alexdeucher at gmail.com>
Date:   Tue Jul 14 21:19:32 2009 -0400

R6xx/r7xx: implement memcpy buffer swaps

This allows double buffered apps to run, but perfomance
will be awful until we implement something faster.

You must update to the latest kernel modules.

---

 src/mesa/drivers/dri/radeon/radeon_common.c |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c b/src/mesa/drivers/dri/radeon/radeon_common.c
index 60d6bbb..e75e6a3 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common.c
+++ b/src/mesa/drivers/dri/radeon/radeon_common.c
@@ -475,6 +475,24 @@ void radeonCopyBuffer( __DRIdrawablePrivate *dPriv,
 		if (!n)
 			continue;
 
+		if (IS_R600_CLASS(rmesa->radeonScreen)) {
+			int src_pitch = rmesa->radeonScreen->backPitch * rmesa->radeonScreen->cpp;
+			int dst_pitch = rmesa->radeonScreen->frontPitch * rmesa->radeonScreen->cpp;
+			char *src = (char *)rmesa->radeonScreen->driScreen->pFB + rmesa->radeonScreen->backOffset;
+			char *dst = (char *)rmesa->radeonScreen->driScreen->pFB + rmesa->radeonScreen->frontOffset;
+			int j;
+			drm_clip_rect_t *pb = rmesa->sarea->boxes;
+
+			for (j = 0; j < n; j++) {
+				int x = pb[j].x1;
+				int y = pb[j].y1;
+				int w = pb[j].x2 - x;
+				int h = pb[j].y2 - y;
+
+				r600_sw_blit(src, src_pitch, dst, dst_pitch, x, y, w, h, rmesa->radeonScreen->cpp);
+			}
+		}
+
 		ret = drmCommandNone( rmesa->dri.fd, DRM_RADEON_SWAP );
 
 		if ( ret ) {




More information about the mesa-commit mailing list