[Libva] [PATCH_V2] Fix inconsistent surface dimension during allocating surface buffer object

yakui.zhao at intel.com yakui.zhao at intel.com
Fri Sep 21 07:28:59 PDT 2012


From: Zhao Yakui <yakui.zhao at intel.com>

This is to fix the regression caused by e25b3fbce3fc3c13ca054ba9a512bec954642fa8.
When one surface is created,the height/width is aligned to 16 pixels. But when
trying to allocate buffer object for it on SNB/IVB and the later chips,the width
is aligned to 128 and height is aligned to 32. If the surface is mapped and accessed
before allocating surface buffer object, the APP will get incorrect dimension.

Signed-off-by: Zhao Yakui <yakui.zhao at intel.com>
---
 src/i965_drv_video.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/i965_drv_video.c b/src/i965_drv_video.c
index 3bea253..662d8af 100644
--- a/src/i965_drv_video.c
+++ b/src/i965_drv_video.c
@@ -516,8 +516,13 @@ i965_CreateSurfaces(VADriverContextP ctx,
         obj_surface->orig_width = width;
         obj_surface->orig_height = height;
 
-        obj_surface->width = ALIGN(width, 16);
-        obj_surface->height = ALIGN(height, 16);
+	if (IS_G4X(i965->intel.device_id) || IS_IRONLAKE(i965->intel.device_id)) {
+	        obj_surface->width = ALIGN(width, 16);
+        	obj_surface->height = ALIGN(height, 16);
+	} else {
+	        obj_surface->width = ALIGN(width, 128);
+        	obj_surface->height = ALIGN(height, 32);
+	}
         obj_surface->flags = SURFACE_REFERENCED;
         obj_surface->fourcc = 0;
         obj_surface->bo = NULL;
-- 
1.7.12-rc1



More information about the Libva mailing list