diff -urpN -X dontdiff DirectFB-0.9.20-clean/gfxdrivers/radeon/radeon.c DirectFB-0.9.20/gfxdrivers/radeon/radeon.c
--- DirectFB-0.9.20-clean/gfxdrivers/radeon/radeon.c	2003-09-23 15:02:30.000000000 -0700
+++ DirectFB-0.9.20/gfxdrivers/radeon/radeon.c	2004-04-01 17:16:48.965589016 -0800
@@ -134,9 +134,11 @@ static void radeonCheckState( void *drv,
 	case DSPF_RGB16:
 	case DSPF_RGB32:
 	case DSPF_ARGB:
-	    state->accel |= RADEON_SUPPORTED_BLITTINGFUNCTIONS;
+	    if ( state->source->format == state->destination->format )
+	        state->accel |= RADEON_SUPPORTED_BLITTINGFUNCTIONS;
+            /* fall through */
 	default:
-	    ;
+	    break;
 	}
     }
 }
@@ -435,6 +437,10 @@ driver_init_device( GraphicsDevice     *
 			GMC_DST_CLR_CMP_FCN_CLEAR    |
 			GMC_WRITE_MASK_DIS );
 
+    /* get display base address */
+    adev->RADEON_display_base_addr = radeon_in32( adrv->mmio_base,
+						  DISPLAY_BASE_ADDR );
+
     return DFB_OK;
 }
 
diff -urpN -X dontdiff DirectFB-0.9.20-clean/gfxdrivers/radeon/radeon.h DirectFB-0.9.20/gfxdrivers/radeon/radeon.h
--- DirectFB-0.9.20-clean/gfxdrivers/radeon/radeon.h	2003-07-12 10:34:09.000000000 -0700
+++ DirectFB-0.9.20/gfxdrivers/radeon/radeon.h	2004-04-01 17:10:54.374495056 -0800
@@ -44,6 +44,7 @@ typedef struct {
     /* store some Radeon register values in native format */
     __u32 RADEON_dp_gui_master_cntl;
     __u32 RADEON_color_compare;
+    __u32 RADEON_display_base_addr;
 
     /* state validation */     
     int v_destination;
diff -urpN -X dontdiff DirectFB-0.9.20-clean/gfxdrivers/radeon/radeon_regs.h DirectFB-0.9.20/gfxdrivers/radeon/radeon_regs.h
--- DirectFB-0.9.20-clean/gfxdrivers/radeon/radeon_regs.h	2003-07-13 15:26:17.000000000 -0700
+++ DirectFB-0.9.20/gfxdrivers/radeon/radeon_regs.h	2004-04-01 18:26:55.483101152 -0800
@@ -33,6 +33,8 @@
 #define CRTC_VBLANK_SAVE		 0x00000002
 #define CRTC_VBLANK_SAVE_CLEAR		 0x00000002
 
+#define DISPLAY_BASE_ADDR               0x023c
+
 #define RBBM_STATUS			0x0e40
 #define	RBBM_FIFOCNT_MASK		 0x0000007f
 #define RBBM_ACTIVE			 0x80000000
diff -urpN -X dontdiff DirectFB-0.9.20-clean/gfxdrivers/radeon/radeon_state.c DirectFB-0.9.20/gfxdrivers/radeon/radeon_state.c
--- DirectFB-0.9.20-clean/gfxdrivers/radeon/radeon_state.c	2003-07-12 10:34:09.000000000 -0700
+++ DirectFB-0.9.20/gfxdrivers/radeon/radeon_state.c	2004-04-01 18:34:30.816879896 -0800
@@ -80,6 +80,7 @@ void radeon_set_destination( RADEONDrive
 		  state->destination->back_buffer->video.pitch );
 
     radeon_out32( adrv->mmio_base, DST_OFFSET,
+                  adev->RADEON_display_base_addr +
 		  state->destination->back_buffer->video.offset );
 
     adev->destination = state->destination;
@@ -118,6 +119,7 @@ void radeon_set_source( RADEONDriverData
 		  state->source->front_buffer->video.pitch );
 
     radeon_out32( adrv->mmio_base, SRC_OFFSET,
+		  adev->RADEON_display_base_addr +
 		   state->source->front_buffer->video.offset );
 
     adev->source = state->source;
