CVS commit: xsrc/external/mit/xf86-video-ati-kms/dist/src
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
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
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
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
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
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
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; +