Align the height of untiled pixmaps to 2 lines as well.
The 965 docs note, and it's probably the case on 915 as well, that the 2x2 subspans are read as a unit, even if the bottom row isn't used. If the address in that bottom row extended beyond the end of the GTT, a fault could occur. Thanks to Chris Wilson for pointing out the problem.
This commit is contained in:
parent
a3962e6f74
commit
465a4ab416
|
|
@ -613,14 +613,17 @@ i830_uxa_create_pixmap (ScreenPtr screen, int w, int h, int depth, unsigned usag
|
|||
pitch_align);
|
||||
|
||||
if (tiling == I915_TILING_NONE) {
|
||||
size = stride * h;
|
||||
/* Round the height up so that the GPU's access to a 2x2 aligned
|
||||
* subspan doesn't address an invalid page offset beyond the
|
||||
* end of the GTT.
|
||||
*/
|
||||
size = stride * ALIGN(h, 2);
|
||||
} else {
|
||||
int aligned_h = h;
|
||||
if (tiling == I915_TILING_X)
|
||||
aligned_h = ALIGN(h, 8);
|
||||
else
|
||||
aligned_h = ALIGN(h, 32);
|
||||
assert(aligned_h >= h);
|
||||
|
||||
stride = i830_get_fence_pitch(i830, stride, tiling);
|
||||
/* Round the object up to the size of the fence it will live in
|
||||
|
|
|
|||
Loading…
Reference in New Issue