On Wed, Aug 04, 2010 at 11:52:46AM -0700, Dave Del Debbio wrote: > This upstream patch courtesy of Chris Wilson <ch...@chirs-wilson.co.uk> > both limits tied pitches to 8192 on pre-i965 and enables switching from one > VT to another without terminating your Xsession. :)
You must have a pretty big monitor to be hitting this, this wasn't mentioned when I was told about your issues before. I'll get this tested here (hadn't got to this patch in my upstream trawling yet). -0- > > Tested on a Thinkpad X301 with an Aug 3 amd64 snapshot.. > > Please see > > http://cgit.freedesktop.org/mesa/drm/commit/?id=726210f87d558d558022f35bc8c839e798a19f0c > > --- intel_bufmgr_gem.c.orig Wed Aug 4 06:42:44 2010 > +++ intel_bufmgr_gem.c Wed Aug 4 07:07:44 2010 > @@ -252,7 +252,7 @@ > */ > static unsigned long > drm_intel_gem_bo_tile_pitch(drm_intel_bufmgr_gem *bufmgr_gem, > - unsigned long pitch, uint32_t tiling_mode) > + unsigned long pitch, uint32_t *tiling_mode) > { > unsigned long tile_width; > unsigned long i; > @@ -260,10 +260,10 @@ > /* If untiled, then just align it so that we can do rendering > * to it with the 3D engine. > */ > - if (tiling_mode == I915_TILING_NONE) > + if (*tiling_mode == I915_TILING_NONE) > return ALIGN(pitch, 64); > > - if (tiling_mode == I915_TILING_X) > + if (*tiling_mode == I915_TILING_X) > tile_width = 512; > else > tile_width = 128; > @@ -272,6 +272,14 @@ > if (bufmgr_gem->gen >= 4) > return ROUND_UP_TO(pitch, tile_width); > > + /* The older hardware has a maximum pitch of 8192 with tiled > + * surfaces, so fallback to untiled if it's too large. > + */ > + if (pitch > 8192) { > + *tiling_mode = I915_TILING_NONE; > + return ALIGN(pitch, 64); > +} > + > /* Pre-965 needs power of two tile width */ > for (i = tile_width; i < pitch; i <<= 1) > ; > @@ -679,7 +687,7 @@ > stride = x * cpp; > stride = drm_intel_gem_bo_tile_pitch(bufmgr_gem, stride, *tiling_mode); > size = stride * aligned_y; > - size = drm_intel_gem_bo_tile_size(bufmgr_gem, size, tiling_mode); > + size = drm_intel_gem_bo_tile_size(bufmgr_gem, size, *tiling_mode); > > bo = drm_intel_gem_bo_alloc_internal(bufmgr, name, size, flags); > if (!bo) -- One way to stop a runaway horse is to bet on him.