summaryrefslogtreecommitdiff
authorEric Anholt <eric@anholt.net>2009-08-08 01:05:29 (GMT)
committer Eric Anholt <eric@anholt.net>2009-08-08 01:20:24 (GMT)
commit222b52ef16895823fbf3a0fc0be4eb23b930ed1b (patch) (side-by-side diff)
treeefd76ffbd4c1aa2243f90e7cc2ab42a8c379d5a0
parent62494407e529cfa68529b7267155a12d75418f21 (diff)
downloadxf86-video-intel-222b52ef16895823fbf3a0fc0be4eb23b930ed1b.zip
xf86-video-intel-222b52ef16895823fbf3a0fc0be4eb23b930ed1b.tar.gz
Align tiled pixmap height so we don't address beyond the end of our buffers.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--src/i830.h2
-rw-r--r--src/i830_memory.c2
-rw-r--r--src/i830_uxa.c11
-rw-r--r--src/i965_render.c2
-rw-r--r--src/i965_video.c3
5 files changed, 11 insertions, 9 deletions
diff --git a/src/i830.h b/src/i830.h
index 58afe76..b46eff1 100644
--- a/src/i830.h
+++ b/src/i830.h
@@ -619,6 +619,8 @@ typedef struct _I830Rec {
#define I830PTR(p) ((I830Ptr)((p)->driverPrivate))
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
+#define ALIGN(i,m) (((i) + (m) - 1) & ~((m) - 1))
+#define MIN(a,b) ((a) < (b) ? (a) : (b))
#define I830_SELECT_FRONT 0
#define I830_SELECT_BACK 1
diff --git a/src/i830_memory.c b/src/i830_memory.c
index d3c9299..434510a 100644
--- a/src/i830_memory.c
+++ b/src/i830_memory.c
@@ -88,8 +88,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "i810_reg.h"
#include "i915_drm.h"
-#define ALIGN(i,m) (((i) + (m) - 1) & ~((m) - 1))
-
/* Our hardware status area is just a single page */
#define HWSTATUS_PAGE_SIZE GTT_PAGE_SIZE
#define PWRCTX_SIZE GTT_PAGE_SIZE
diff --git a/src/i830_uxa.c b/src/i830_uxa.c
index 3a476a7..1087128 100644
--- a/src/i830_uxa.c
+++ b/src/i830_uxa.c
@@ -615,6 +615,13 @@ i830_uxa_create_pixmap (ScreenPtr screen, int w, int h, int depth, unsigned usag
if (tiling == I915_TILING_NONE) {
size = stride * h;
} else {
+ int aligned_h = h;
+ if (tiling == I915_TILING_X)
+ aligned_h = ALIGN(h, 8);
+ else
+ aligned_h = ALIGN(h, 16);
+ 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
* if necessary. We could potentially make the kernel allocate
@@ -622,8 +629,8 @@ i830_uxa_create_pixmap (ScreenPtr screen, int w, int h, int depth, unsigned usag
* but this is easier and also keeps us out of trouble (as much)
* with drm_intel_bufmgr_check_aperture().
*/
- size = i830_get_fence_size(i830, stride * h);
- assert(size >= stride * h);
+ size = i830_get_fence_size(i830, stride * aligned_h);
+ assert(size >= stride * aligned_h);
}
/* Fail very large allocations on 32-bit systems. Large BOs will
diff --git a/src/i965_render.c b/src/i965_render.c
index eeb23e1..1a8075b 100644
--- a/src/i965_render.c
+++ b/src/i965_render.c
@@ -251,8 +251,6 @@ i965_check_composite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
}
-#define ALIGN(i,m) (((i) + (m) - 1) & ~((m) - 1))
-#define MIN(a,b) ((a) < (b) ? (a) : (b))
#define BRW_GRF_BLOCKS(nreg) ((nreg + 15) / 16 - 1)
/* Set up a default static partitioning of the URB, which is supposed to
diff --git a/src/i965_video.c b/src/i965_video.c
index 805b33f..46a461f 100644
--- a/src/i965_video.c
+++ b/src/i965_video.c
@@ -131,9 +131,6 @@ static const uint32_t ps_kernel_planar_static_gen5[][4] = {
#include "exa_wm_write.g4b.gen5"
};
-#define ALIGN(i,m) (((i) + (m) - 1) & ~((m) - 1))
-#define MIN(a,b) ((a) < (b) ? (a) : (b))
-
static uint32_t float_to_uint (float f) {
union {uint32_t i; float f;} x;
x.f = f;