xf86-video-ati: Branch 'master'

Jerome Glisse glisse at kemper.freedesktop.org
Thu Nov 26 03:24:51 PST 2009


 src/drmmode_display.c |   24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

New commits:
commit 95385f0906f371a1ed6e60eb3e597e699c7a3222
Author: Jerome Glisse <jglisse at redhat.com>
Date:   Thu Nov 26 12:21:21 2009 +0100

    kms: Fix resizing when acceleration is disabled
    
    When acceleration is disabled we need to reallocate
    a new shadow framebuffer and we should also avoid
    calling any EXA function as EXA is disabled in such
    case.

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 6e54c8a..38f7373 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1020,11 +1020,13 @@ drmmode_xf86crtc_resize (ScrnInfoPtr scrn, int width, int height)
 	int cpp = info->CurrentLayout.pixel_bytes;
 	struct radeon_bo *front_bo;
 	uint32_t tiling_flags = 0;
+	PixmapPtr ppix = screen->GetScreenPixmap(screen);
+	void *fb_shadow;
 
 	if (scrn->virtualX == width && scrn->virtualY == height)
 		return TRUE;
 
-	front_bo = radeon_get_pixmap_bo(screen->GetScreenPixmap(screen));
+	front_bo = info->front_bo;
 	radeon_cs_flush_indirect(scrn);
 
 	if (front_bo)
@@ -1076,9 +1078,23 @@ drmmode_xf86crtc_resize (ScrnInfoPtr scrn, int width, int height)
 	if (ret)
 		goto fail;
 
-	radeon_set_pixmap_bo(screen->GetScreenPixmap(screen), info->front_bo);
-	screen->ModifyPixmapHeader(screen->GetScreenPixmap(screen),
-				   width, height, -1, -1, pitch * cpp, NULL);
+	if (!info->r600_shadow_fb) {
+		radeon_set_pixmap_bo(screen->GetScreenPixmap(screen), info->front_bo);
+		screen->ModifyPixmapHeader(screen->GetScreenPixmap(screen),
+					   width, height, -1, -1, pitch * cpp, NULL);
+	} else {
+		if (radeon_bo_map(info->front_bo, 1))
+			goto fail;
+		fb_shadow = xcalloc(1, screen_size);
+		if (fb_shadow == NULL)
+			goto fail;
+		xfree(info->fb_shadow);
+		info->fb_shadow = fb_shadow;
+		screen->ModifyPixmapHeader(screen->GetScreenPixmap(screen),
+					   width, height, -1, -1, pitch * cpp,
+					   info->fb_shadow);
+	}
+	scrn->pixmapPrivate.ptr = ppix->devPrivate.ptr;
 
 	//	xf86DrvMsg(scrn->scrnIndex, X_INFO, "New front buffer at 0x%lx\n",
 	//		   info->front_bo-);


More information about the xorg-commit mailing list