From patchwork Sat Aug 8 01:19:04 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Anholt X-Patchwork-Id: 40063 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n781JD7f014242 for ; Sat, 8 Aug 2009 01:19:13 GMT Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4F1369E889; Fri, 7 Aug 2009 18:19:13 -0700 (PDT) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from kingsolver.anholt.net (71-20-254-182.war.clearwire-wmx.net [71.20.254.182]) by gabe.freedesktop.org (Postfix) with ESMTP id AD2319E85D for ; Fri, 7 Aug 2009 18:19:10 -0700 (PDT) Received: from gaiman.anholt.net (localhost [127.0.0.1]) by kingsolver.anholt.net (Postfix) with ESMTP id 702B82B6800B; Fri, 7 Aug 2009 18:19:05 -0700 (PDT) Received: by gaiman.anholt.net (Postfix, from userid 1000) id 3B57C16212A; Fri, 7 Aug 2009 18:19:05 -0700 (PDT) From: Eric Anholt To: intel-gfx@lists.freedesktop.org Date: Fri, 7 Aug 2009 18:19:04 -0700 Message-Id: <1249694345-9228-1-git-send-email-eric@anholt.net> X-Mailer: git-send-email 1.6.3.3 Subject: [Intel-gfx] [PATCH] Align tiled pixmap height so we don't address beyond the end of our buffers. X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.9 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: intel-gfx-bounces@lists.freedesktop.org Errors-To: intel-gfx-bounces@lists.freedesktop.org --- src/i830.h | 2 ++ src/i830_uxa.c | 11 +++++++++-- src/i965_render.c | 2 -- src/i965_video.c | 3 --- 4 files changed, 11 insertions(+), 7 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_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;