[Intel-gfx] [PATCH] intel: Fix emit_linear_blit to use DWORD aligned width blits

Peter Clifton pcjc2 at cam.ac.uk
Tue Nov 9 11:52:36 CET 2010


On Sun, 2010-11-07 at 10:25 +0000, Chris Wilson wrote:
> On Sat, 06 Nov 2010 10:04:31 +0000, Peter Clifton <pcjc2 at cam.ac.uk> wrote:
> > Fixes corruption with glBufferSubData on my machine,
> > 
> > Can someone review and push?
> 
> Oddly, the pitch for BLT is in bytes and it should be sufficient to be a
> multiple of element-size. Or two element-size depending on circumstances. 
> 
> Just to satisfy my curiosity, what happens with (1<<15 - 2)?

I've not tried that yet, but the PRM does state that BLT pitch is in
DWORDs.


We do this:

   src_pitch *= cpp;
   dst_pitch *= cpp;

Converting a pitch passed to the blit function in _pixels_, to a pitch
in bytes, but further dragons lurking I think:

Also, only on non I915 defined builds of intel_blit.c, we also do things
like:

   if (dst_tiling != I915_TILING_NONE) {
      CMD |= XY_DST_TILED;
      dst_pitch /= 4;
   }


The G45 PRM doesn't appear to specify pitch is in DWORDS _only_ for
tiled surfaces, merely that there is further restriction:

"
Source Pitch (double word aligned) and in DWords: [15:00] 2’s
complement.

For Tiled Src (bit 15 enabled) this pitch is of 512Byte granularity and
can be upto 128Kbytes (or 32KDwords).
"

Truthfully, I'm not quite sure I understand what the implication for a
tiled surface is.. or how pitch should be calculated correctly for that
case.. but it does seem clear that our handing for non-tiled surfaces is
suspect.


-- 
Peter Clifton

Electrical Engineering Division,
Engineering Department,
University of Cambridge,
9, JJ Thomson Avenue,
Cambridge
CB3 0FA

Tel: +44 (0)7729 980173 - (No signal in the lab!)
Tel: +44 (0)1223 748328 - (Shared lab phone, ask for me)




More information about the Intel-gfx mailing list