CVS commit: xsrc/external/mit/xf86-video-ati-kms/dist/src

2021-07-11 Thread matthew green
Module Name:xsrc
Committed By:   mrg
Date:   Sun Jul 11 21:24:14 UTC 2021

Modified Files:
xsrc/external/mit/xf86-video-ati-kms/dist/src: drmmode_display.c
radeon_bo_helper.c

Log Message:
fix a couple of issues found while testing new drm.

- actually check the return value of radeon_bo_open() in a three places
- for create_pixmap_for_fbcon(), release the bo when jumping to
  'out_free_fb'.  fixes memory leak.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c
cvs rdiff -u -r1.3 -r1.4 \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c
diff -u xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c:1.2 xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c:1.3
--- xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c:1.2	Fri Feb  7 23:36:50 2020
+++ xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c	Sun Jul 11 21:24:14 2021
@@ -373,7 +373,7 @@ create_pixmap_for_fbcon(drmmode_ptr drmm
 	RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
 	RADEONInfoPtr info = RADEONPTR(pScrn);
 	PixmapPtr pixmap = info->fbcon_pixmap;
-	struct radeon_buffer *bo;
+	struct radeon_buffer *bo = NULL;
 	drmModeFBPtr fbcon;
 	struct drm_gem_flink flink;
 
@@ -405,7 +405,7 @@ create_pixmap_for_fbcon(drmmode_ptr drmm
 	bo->ref_count = 1;
 
 	bo->bo.radeon = radeon_bo_open(drmmode->bufmgr, flink.name, 0, 0, 0, 0);
-	if (!bo) {
+	if (!bo->bo.radeon) {
 		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 			   "Couldn't open BO for fbcon handle\n");
 		goto out_free_fb;
@@ -415,8 +415,8 @@ create_pixmap_for_fbcon(drmmode_ptr drmm
 	  fbcon->depth, fbcon->bpp, fbcon->pitch,
 	  bo);
 	info->fbcon_pixmap = pixmap;
-	radeon_buffer_unref();
 out_free_fb:
+	radeon_buffer_unref();
 	drmModeFreeFB(fbcon);
 	return pixmap;
 }

Index: xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c
diff -u xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c:1.3 xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c:1.4
--- xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c:1.3	Sat Jun  1 07:25:41 2019
+++ xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c	Sun Jul 11 21:24:14 2021
@@ -308,7 +308,7 @@ radeon_alloc_pixmap_bo(ScrnInfoPtr pScrn
 bo->bo.radeon = radeon_bo_open(info->bufmgr, 0, size, base_align,
    domain, flags);
 
-if (bo && tiling && radeon_bo_set_tiling(bo->bo.radeon, tiling, pitch) == 0)
+if (bo->bo.radeon && tiling && radeon_bo_set_tiling(bo->bo.radeon, tiling, pitch) == 0)
 	*new_tiling = tiling;
 
 *new_pitch = pitch;
@@ -504,7 +504,7 @@ Bool radeon_set_shared_pixmap_backing(Pi
 #endif
 
 bo->bo.radeon = radeon_gem_bo_open_prime(info->bufmgr, ihandle, size);
-if (!bo)
+if (!bo->bo.radeon)
 goto error;
 
 bo->ref_count = 1;



CVS commit: xsrc/external/mit/xf86-video-ati-kms/dist/src

2020-03-08 Thread Maya Rashish
Module Name:xsrc
Committed By:   maya
Date:   Sun Mar  8 18:27:52 UTC 2020

Modified Files:
xsrc/external/mit/xf86-video-ati-kms/dist/src: radeon.h

Log Message:
Backport upstream commits (there is no newer release yet):

>From c0eb5dbd9c1db6b6d5b1574bcd8c584170d7ab54 Mon Sep 17 00:00:00 2001
From: Alexey Sheplyakov 
Date: Wed, 27 Nov 2019 20:50:58 +0400
Subject: Don't crash X server if GPU acceleration is not available

>From 4d84cf438e7f1bebf0053035ef0292e9fed257d1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michel=20D=C3=A4nzer?= 
Date: Fri, 29 Nov 2019 16:37:32 +0100
Subject: Handle NULL fb_ptr in pixmap_get_fb

This can happen when HW acceleration is disabled.

>From Onno van der Linden in xsrc/55059.


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.10 -r1.2 \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon.h
diff -u xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon.h:1.1.1.10 xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon.h:1.2
--- xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon.h:1.1.1.10	Sun Feb 23 06:17:09 2020
+++ xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon.h	Sun Mar  8 18:27:51 2020
@@ -790,8 +790,8 @@ static inline Bool radeon_set_pixmap_bo(
 
 static inline struct radeon_buffer *radeon_get_pixmap_bo(PixmapPtr pPix)
 {
-#ifdef USE_GLAMOR
 RADEONInfoPtr info = RADEONPTR(xf86ScreenToScrn(pPix->drawable.pScreen));
+#ifdef USE_GLAMOR
 
 if (info->use_glamor) {
 	struct radeon_pixmap *priv;
@@ -799,7 +799,7 @@ static inline struct radeon_buffer *rade
 	return priv ? priv->bo : NULL;
 } else
 #endif
-{
+if (info->accelOn) {
 	struct radeon_exa_pixmap_priv *driver_priv;
 	driver_priv = exaGetPixmapDriverPrivate(pPix);
 	return driver_priv ? driver_priv->bo : NULL;
@@ -896,7 +896,7 @@ radeon_pixmap_get_fb(PixmapPtr pix)
    handle);
 }
 
-return *fb_ptr;
+return fb_ptr ? *fb_ptr : NULL;
 }
 
 



CVS commit: xsrc/external/mit/xf86-video-ati-kms/dist/src

2020-02-24 Thread matthew green
Module Name:xsrc
Committed By:   mrg
Date:   Mon Feb 24 09:32:31 UTC 2020

Modified Files:
xsrc/external/mit/xf86-video-ati-kms/dist/src: radeon_glamor.c

Log Message:
for now, limit glamor to TAHITI and newer chipsets only.


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.7 -r1.2 \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_glamor.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_glamor.c
diff -u xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_glamor.c:1.1.1.7 xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_glamor.c:1.2
--- xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_glamor.c:1.1.1.7	Sat Jun  1 07:24:16 2019
+++ xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_glamor.c	Mon Feb 24 09:32:31 2020
@@ -81,6 +81,14 @@ radeon_glamor_pre_init(ScrnInfoPtr scrn)
 
 	s = xf86GetOptValString(info->Options, OPTION_ACCELMETHOD);
 	if (!s) {
+#ifdef __NetBSD__
+		/*
+		 * glamor isn't working yet for GL.  disable where not
+		 * needed for anything at all.
+		 */
+		if (info->ChipFamily < CHIP_FAMILY_TAHITI)
+			return FALSE;
+#else
 		if (xorgGetVersion() >= XORG_VERSION_NUMERIC(1,18,3,0,0)) {
 			if (info->ChipFamily < CHIP_FAMILY_R600)
 return FALSE;
@@ -88,6 +96,7 @@ radeon_glamor_pre_init(ScrnInfoPtr scrn)
 			if (info->ChipFamily < CHIP_FAMILY_TAHITI)
 return FALSE;
 		}
+#endif
 	}
 
 	if (s && strcasecmp(s, "glamor") != 0) {



CVS commit: xsrc/external/mit/xf86-video-ati-kms/dist/src

2020-02-07 Thread Jared D. McNeill
Module Name:xsrc
Committed By:   jmcneill
Date:   Fri Feb  7 23:36:50 UTC 2020

Modified Files:
xsrc/external/mit/xf86-video-ati-kms/dist/src: drmmode_display.c

Log Message:
When adding an FB, don't assume that the front buffer is a radeon buffer
(it could be GBM managed instead).


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.9 -r1.2 \
xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c
diff -u xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c:1.1.1.9 xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c:1.2
--- xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c:1.1.1.9	Sat Jun  1 07:24:16 2019
+++ xsrc/external/mit/xf86-video-ati-kms/dist/src/drmmode_display.c	Fri Feb  7 23:36:50 2020
@@ -870,6 +870,7 @@ drmmode_set_mode_major(xf86CrtcPtr crtc,
 	Rotation saved_rotation;
 	DisplayModeRec saved_mode;
 	Bool ret = FALSE;
+	uint32_t handle;
 	int i;
 	struct drmmode_fb *fb = NULL;
 
@@ -917,10 +918,15 @@ drmmode_set_mode_major(xf86CrtcPtr crtc,
 		if (!fb)
 			fb = radeon_pixmap_get_fb(pScreen->GetWindowPixmap(pScreen->root));
 		if (!fb) {
+			if (info->front_buffer->flags & RADEON_BO_FLAGS_GBM) {
+handle = gbm_bo_get_handle(info->front_buffer->bo.gbm).u32;
+			} else {
+handle = info->front_buffer->bo.radeon->handle;
+			}
 			fb = radeon_fb_create(pScrn, pRADEONEnt->fd,
 	  pScrn->virtualX, pScrn->virtualY,
 	  pScrn->displayWidth * info->pixel_bytes,
-	  info->front_buffer->bo.radeon->handle);
+	  handle);
 			/* Prevent refcnt of ad-hoc FBs from reaching 2 */
 			drmmode_fb_reference(pRADEONEnt->fd, _crtc->fb, NULL);
 			drmmode_crtc->fb = fb;



CVS commit: xsrc/external/mit/xf86-video-ati-kms/dist/src

2018-12-30 Thread matthew green
Module Name:xsrc
Committed By:   mrg
Date:   Sun Dec 30 08:35:04 UTC 2018

Modified Files:
xsrc/external/mit/xf86-video-ati-kms/dist/src: radeon_bo_helper.c

Log Message:
avoid using GBM_BO_USE_LINEAR if it isn't defined.

XXX: xorg-server 1.18 issue?


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.5 -r1.2 \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c
diff -u xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c:1.1.1.5 xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c:1.2
--- xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c:1.1.1.5	Sun Dec 30 07:33:48 2018
+++ xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bo_helper.c	Sun Dec 30 08:35:04 2018
@@ -209,10 +209,12 @@ radeon_alloc_pixmap_bo(ScrnInfoPtr pScrn
 	if (bitsPerPixel == pScrn->bitsPerPixel)
 	bo_use |= GBM_BO_USE_SCANOUT;
 
+#ifdef GBM_BO_USE_LINEAR
 	if ((usage_hint == CREATE_PIXMAP_USAGE_BACKING_PIXMAP &&
 	 info->shadow_primary) ||
 	(usage_hint & 0x) == CREATE_PIXMAP_USAGE_SHARED)
 	bo_use |= GBM_BO_USE_LINEAR;
+#endif
 
 	bo->bo.gbm = gbm_bo_create(info->gbm, width, height, gbm_format, bo_use);
 	if (!bo->bo.gbm) {



CVS commit: xsrc/external/mit/xf86-video-ati-kms/dist/src

2017-03-04 Thread matthew green
Module Name:xsrc
Committed By:   mrg
Date:   Sun Mar  5 03:38:40 UTC 2017

Removed Files:
xsrc/external/mit/xf86-video-ati-kms/dist/src: atombios_crtc.c
atombios_output.c generic_bus.h legacy_crtc.c legacy_output.c
radeon_accelfuncs.c radeon_atombios.c radeon_atombios.h
radeon_atomwrapper.c radeon_atomwrapper.h radeon_bios.c
radeon_commonfuncs.c radeon_crtc.c radeon_cursor.c radeon_dri.c
radeon_dri.h radeon_driver.c radeon_drm.h radeon_dummy_bufmgr.h
radeon_legacy_memory.c radeon_macros.h radeon_mm_i2c.c
radeon_modes.c radeon_output.c radeon_pm.c radeon_render.c
radeon_tv.c radeon_tv.h radeon_vip.c theatre.c theatre.h
theatre200.c theatre200.h theatre200_module.c theatre_detect.c
theatre_detect.h theatre_detect_module.c theatre_module.c
theatre_reg.h
xsrc/external/mit/xf86-video-ati-kms/dist/src/AtomBios: CD_Operations.c
Decoder.c hwserv_drv.c
xsrc/external/mit/xf86-video-ati-kms/dist/src/AtomBios/includes:
CD_Common_Types.h CD_Definitions.h CD_Opcodes.h CD_Structs.h
CD_binding.h CD_hw_services.h Decoder.h ObjectID.h atombios.h
regsdef.h

Log Message:
now, merge xf86-video-ati 7.8.0 properly.


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1 -r0 \
xsrc/external/mit/xf86-video-ati-kms/dist/src/atombios_crtc.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/atombios_output.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/generic_bus.h \
xsrc/external/mit/xf86-video-ati-kms/dist/src/legacy_crtc.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/legacy_output.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_accelfuncs.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_atombios.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_atombios.h \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_atomwrapper.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_atomwrapper.h \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_bios.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_commonfuncs.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_crtc.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_cursor.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_dri.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_dri.h \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_driver.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_drm.h \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_dummy_bufmgr.h \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_legacy_memory.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_macros.h \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_mm_i2c.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_modes.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_output.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_pm.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_render.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_tv.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_tv.h \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_vip.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/theatre.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/theatre.h \
xsrc/external/mit/xf86-video-ati-kms/dist/src/theatre200.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/theatre200.h \
xsrc/external/mit/xf86-video-ati-kms/dist/src/theatre200_module.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/theatre_detect.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/theatre_detect.h \
xsrc/external/mit/xf86-video-ati-kms/dist/src/theatre_detect_module.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/theatre_module.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/theatre_reg.h
cvs rdiff -u -r1.1.1.1 -r0 \
xsrc/external/mit/xf86-video-ati-kms/dist/src/AtomBios/CD_Operations.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/AtomBios/Decoder.c \
xsrc/external/mit/xf86-video-ati-kms/dist/src/AtomBios/hwserv_drv.c
cvs rdiff -u -r1.1.1.1 -r0 \

xsrc/external/mit/xf86-video-ati-kms/dist/src/AtomBios/includes/CD_Common_Types.h
 \

xsrc/external/mit/xf86-video-ati-kms/dist/src/AtomBios/includes/CD_Definitions.h
 \

xsrc/external/mit/xf86-video-ati-kms/dist/src/AtomBios/includes/CD_Opcodes.h \

xsrc/external/mit/xf86-video-ati-kms/dist/src/AtomBios/includes/CD_Structs.h \

xsrc/external/mit/xf86-video-ati-kms/dist/src/AtomBios/includes/CD_binding.h \

xsrc/external/mit/xf86-video-ati-kms/dist/src/AtomBios/includes/CD_hw_services.h
 \
xsrc/external/mit/xf86-video-ati-kms/dist/src/AtomBios/includes/Decoder.h \
xsrc/external/mit/xf86-video-ati-kms/dist/src/AtomBios/includes/ObjectID.h 

CVS commit: xsrc/external/mit/xf86-video-ati-kms/dist/src

2016-08-16 Thread matthew green
Module Name:xsrc
Committed By:   mrg
Date:   Wed Aug 17 00:08:36 UTC 2016

Modified Files:
xsrc/external/mit/xf86-video-ati-kms/dist/src: radeon_kms.c

Log Message:
merge xf86-video-ati 7.7.0.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_kms.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_kms.c
diff -u xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_kms.c:1.2 xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_kms.c:1.3
--- xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_kms.c:1.2	Tue Aug 16 07:59:08 2016
+++ xsrc/external/mit/xf86-video-ati-kms/dist/src/radeon_kms.c	Wed Aug 17 00:08:36 2016
@@ -32,6 +32,8 @@
 #include 
 /* Driver data structures */
 #include "radeon.h"
+#include "radeon_drm_queue.h"
+#include "radeon_glamor.h"
 #include "radeon_reg.h"
 #include "radeon_probe.h"
 #include "micmap.h"
@@ -68,12 +70,16 @@ const OptionInfoRec RADEONOptions_KMS[] 
 { OPTION_SUBPIXEL_ORDER, "SubPixelOrder",OPTV_ANYSTR,  {0}, FALSE },
 #ifdef USE_GLAMOR
 { OPTION_ACCELMETHOD,"AccelMethod",  OPTV_STRING,  {0}, FALSE },
+{ OPTION_SHADOW_PRIMARY, "ShadowPrimary",OPTV_BOOLEAN, {0}, FALSE },
 #endif
 { OPTION_EXA_VSYNC,  "EXAVSync", OPTV_BOOLEAN, {0}, FALSE },
 { OPTION_EXA_PIXMAPS,"EXAPixmaps",	 OPTV_BOOLEAN,   {0}, FALSE },
 { OPTION_ZAPHOD_HEADS,   "ZaphodHeads",  OPTV_STRING,  {0}, FALSE },
-{ OPTION_PAGE_FLIP,  "EnablePageFlip",   OPTV_BOOLEAN, {0}, FALSE },
 { OPTION_SWAPBUFFERS_WAIT,"SwapbuffersWait", OPTV_BOOLEAN, {0}, FALSE },
+{ OPTION_DELETE_DP12,"DeleteUnusedDP12Displays", OPTV_BOOLEAN, {0}, FALSE},
+{ OPTION_DRI3,   "DRI3", OPTV_BOOLEAN, {0}, FALSE },
+{ OPTION_DRI,"DRI",  OPTV_INTEGER, {0}, FALSE },
+{ OPTION_TEAR_FREE,  "TearFree", OPTV_BOOLEAN, {0}, FALSE },
 { -1,NULL,   OPTV_NONE,{0}, FALSE }
 };
 
@@ -82,12 +88,22 @@ const OptionInfoRec *RADEONOptionsWeak(v
 void radeon_cs_flush_indirect(ScrnInfoPtr pScrn)
 {
 RADEONInfoPtr  info = RADEONPTR(pScrn);
-struct radeon_accel_state *accel_state = info->accel_state;
+struct radeon_accel_state *accel_state;
 int ret;
 
+#ifdef USE_GLAMOR
+if (info->use_glamor) {
+	glamor_block_handler(pScrn->pScreen);
+	info->gpu_flushed++;
+	return;
+}
+#endif
+
 if (!info->cs->cdw)
 	return;
 
+accel_state = info->accel_state;
+
 /* release the current VBO so we don't block on mapping it later */
 if (info->accel_state->vbo.vb_offset && info->accel_state->vbo.vb_bo) {
 radeon_vbo_put(pScrn, >accel_state->vbo);
@@ -171,6 +187,9 @@ static void RADEONFreeRec(ScrnInfoPtr pS
 
 info = RADEONPTR(pScrn);
 
+if (info->fbcon_pixmap)
+	pScrn->pScreen->DestroyPixmap(info->fbcon_pixmap);
+
 if (info->dri2.drm_fd > 0) {
 DevUnion *pPriv;
 RADEONEntPtr pRADEONEnt;
@@ -222,6 +241,7 @@ static Bool RADEONCreateScreenResources_
 {
 ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 RADEONInfoPtr  info   = RADEONPTR(pScrn);
+rrScrPrivPtr rrScrPriv = rrGetScrPriv(pScreen);
 PixmapPtr pixmap;
 struct radeon_surface *surface;
 
@@ -230,7 +250,21 @@ static Bool RADEONCreateScreenResources_
 	return FALSE;
 pScreen->CreateScreenResources = RADEONCreateScreenResources_KMS;
 
-if (!drmmode_set_desired_modes(pScrn, >drmmode))
+/* Set the RandR primary output if Xorg hasn't */
+if (
+#ifdef RADEON_PIXMAP_SHARING
+	!pScreen->isGPU &&
+#endif
+	!rrScrPriv->primaryOutput)
+{
+	xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
+
+	rrScrPriv->primaryOutput = xf86_config->output[0]->randr_output;
+	RROutputChanged(rrScrPriv->primaryOutput, FALSE);
+	rrScrPriv->layoutChanged = TRUE;
+}
+
+if (!drmmode_set_desired_modes(pScrn, >drmmode, FALSE))
 	return FALSE;
 
 drmmode_uevent_init(pScrn, >drmmode);
@@ -299,35 +333,319 @@ radeon_dirty_update(ScreenPtr screen)
 }
 #endif
 
+static Bool
+radeon_scanout_extents_intersect(xf86CrtcPtr xf86_crtc, BoxPtr extents, int w,
+ int h)
+{
+extents->x1 = max(extents->x1 - xf86_crtc->x, 0);
+extents->y1 = max(extents->y1 - xf86_crtc->y, 0);
+
+switch (xf86_crtc->rotation & 0xf) {
+case RR_Rotate_90:
+case RR_Rotate_270:
+	extents->x2 = min(extents->x2 - xf86_crtc->x, h);
+	extents->y2 = min(extents->y2 - xf86_crtc->y, w);
+	break;
+default:
+	extents->x2 = min(extents->x2 - xf86_crtc->x, w);
+	extents->y2 = min(extents->y2 - xf86_crtc->y, h);
+}
+
+return (extents->x1 < extents->x2 && extents->y1 < extents->y2);
+}
+
+static Bool
+radeon_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id)
+{
+drmmode_crtc_private_ptr drmmode_crtc = xf86_crtc->driver_private;
+