From 2e0f4882226addd828d4973e8148eb1317de113f Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Nov 14 2008 04:59:59 +0000 Subject: - try and speed up fallback cases a bit --- diff --git a/radeon-modeset-gtt-map.patch b/radeon-modeset-gtt-map.patch new file mode 100644 index 0000000..553cbe6 --- /dev/null +++ b/radeon-modeset-gtt-map.patch @@ -0,0 +1,119 @@ +commit 40804bd0927833048fd92ec7a1332f10f9d6a850 +Author: Dave Airlie +Date: Fri Nov 14 11:03:34 2008 +1000 + + radeon: force gtt for mmap after fallbacks + +diff --git a/src/radeon_bufmgr_gem.c b/src/radeon_bufmgr_gem.c +index a8bc465..54d5df6 100644 +--- a/src/radeon_bufmgr_gem.c ++++ b/src/radeon_bufmgr_gem.c +@@ -72,6 +72,7 @@ typedef struct _dri_bo_gem { + const char *name; + struct _dri_bo_gem *next; + int in_vram; /* have we migrated this bo to VRAM ever */ ++ int force_gtt; + int pinned; + int touched; + int space_accounted; +@@ -238,15 +239,27 @@ void radeon_bufmgr_gem_wait_rendering(dri_bo *buf) + { + dri_bufmgr_gem *bufmgr_gem = (dri_bufmgr_gem *)buf->bufmgr; + struct drm_radeon_gem_wait_rendering args; ++ struct drm_radeon_gem_set_domain sd_args; + dri_bo_gem *gem_bo = (dri_bo_gem *)buf; + int ret; + +- args.handle = gem_bo->gem_handle; ++ /* do a set domain */ ++ if (gem_bo->force_gtt) { ++ sd_args.handle = gem_bo->gem_handle; ++ sd_args.read_domains = RADEON_GEM_DOMAIN_GTT; ++ sd_args.write_domain = 0; ++ ++ ret = drmCommandWriteRead(bufmgr_gem->fd, DRM_RADEON_GEM_SET_DOMAIN, ++ &sd_args, sizeof(sd_args)); ++ ++ } else { ++ args.handle = gem_bo->gem_handle; + +- do { +- ret = drmCommandWriteRead(bufmgr_gem->fd, DRM_RADEON_GEM_WAIT_RENDERING, +- &args, sizeof(args)); +- } while (ret == -EAGAIN); ++ do { ++ ret = drmCommandWriteRead(bufmgr_gem->fd, DRM_RADEON_GEM_WAIT_RENDERING, ++ &args, sizeof(args)); ++ } while (ret == -EAGAIN); ++ } + return; + } + +@@ -326,6 +339,9 @@ void radeon_bufmgr_gem_emit_reloc(dri_bo *buf, struct radeon_relocs_info *reloc_ + } + } + ++ if (gem_bo->force_gtt && (read_domains & RADEON_GEM_DOMAIN_VRAM)) ++ read_domains = RADEON_GEM_DOMAIN_GTT; ++ + if (have_reloc != -1) { + uint32_t old_write, old_read; + +@@ -545,3 +561,10 @@ void radeon_bufmgr_gem_set_limit(dri_bufmgr *bufmgr, uint32_t domain, uint32_t l + bufmgr_gem->gart_limit = limit; + + } ++ ++void radeon_bufmgr_gem_force_gtt(dri_bo *buf) ++{ ++ dri_bo_gem *gem_bo = (dri_bo_gem *)buf; ++ ++ gem_bo->force_gtt = 1; ++} +diff --git a/src/radeon_bufmgr_gem.h b/src/radeon_bufmgr_gem.h +index c40a24e..b13a642 100644 +--- a/src/radeon_bufmgr_gem.h ++++ b/src/radeon_bufmgr_gem.h +@@ -11,5 +11,8 @@ void radeon_bufmgr_pin(dri_bo *buf); + void radeon_bufmgr_unpin(dri_bo *buf); + uint32_t radeon_bufmgr_get_handle(dri_bo *buf); + int radeon_bufmgr_gem_has_references(dri_bo *buf); ++int radeon_bufmgr_gem_force_gtt(dri_bo *buf); + void radeon_bufmgr_gem_set_limit(dri_bufmgr *bufmgr, uint32_t domain, uint32_t limit); ++ ++ + #endif +diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c +index c19ca0b..9b67943 100644 +--- a/src/radeon_exa_render.c ++++ b/src/radeon_exa_render.c +@@ -1007,6 +1007,10 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict, + int unit, + Bool is_r500) + { ++ ScreenPtr pScreen = pDstPict->pDrawable->pScreen; ++ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; ++ RADEONInfoPtr info = RADEONPTR(pScrn); ++ + int w = pPict->pDrawable->width; + int h = pPict->pDrawable->height; + int i; +@@ -1032,8 +1036,17 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict, + RADEON_FALLBACK(("Unsupported picture format 0x%x\n", + (int)pPict->format)); + +- if (!RADEONCheckTexturePOT(pPict, unit == 0)) ++ if (!RADEONCheckTexturePOT(pPict, unit == 0)) { ++ if (info->new_cs) { ++ struct radeon_exa_pixmap_priv *driver_priv; ++ PixmapPtr pPix; ++ ++ pPix = RADEONGetDrawablePixmap(pPict->pDrawable); ++ driver_priv = exaGetPixmapDriverPrivate(pPix); ++ radeon_bufmgr_gem_force_gtt(driver_priv->bo); ++ } + return FALSE; ++ } + + if (pPict->filter != PictFilterNearest && + pPict->filter != PictFilterBilinear) diff --git a/xorg-x11-drv-ati.spec b/xorg-x11-drv-ati.spec index ace807c..380c89e 100644 --- a/xorg-x11-drv-ati.spec +++ b/xorg-x11-drv-ati.spec @@ -5,7 +5,7 @@ Summary: Xorg X11 ati video driver Name: xorg-x11-drv-ati Version: 6.9.0 -Release: 44%{?dist} +Release: 45%{?dist} URL: http://www.x.org License: MIT Group: User Interface/X Hardware Support @@ -22,6 +22,7 @@ Patch6: radeon-6.9.0-bgnr-enable.patch Patch7: radeon-6.9.0-add-hd3300.patch Patch8: radeon-6.9.0-quirk-agp.patch Patch9: radeon-6.9.0-dig1-hdmi.patch +Patch10: radeon-modeset-gtt-map.patch ExcludeArch: s390 s390x @@ -51,6 +52,7 @@ X.Org X11 ati video driver. %patch7 -p1 -b .pciid %patch8 -p1 -b .quirk %patch9 -p1 -b .hdmi +%patch10 -p1 -b .gtt %build autoreconf @@ -82,6 +84,9 @@ rm -rf $RPM_BUILD_ROOT %{_mandir}/man4/radeon.4* %changelog +* Fri Nov 14 2008 Dave Airlie 6.9.0-45 +- try and speed up fallback cases a bit + * Mon Nov 10 2008 Dave Airlie 6.9.0-44 - fix rendering from very large pixmaps (#468571)