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.
This commit is contained in:
Alex Deucher 2009-07-14 21:19:32 -04:00
parent 9385e4e1ff
commit 10b3e64bca

View file

@ -475,6 +475,24 @@ void radeonCopyBuffer( __DRIdrawablePrivate *dPriv,
if (!n) if (!n)
continue; 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 ); ret = drmCommandNone( rmesa->dri.fd, DRM_RADEON_SWAP );
if ( ret ) { if ( ret ) {