lima: also check tiled and depth case when import
authorQiang Yu <yuq825@gmail.com>
Mon, 30 Mar 2020 02:54:08 +0000 (10:54 +0800)
committerMarge Bot <eric+marge@anholt.net>
Tue, 31 Mar 2020 01:40:29 +0000 (01:40 +0000)
We missed the tiled and depth case when check buffer alignment.

Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4362>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4362>

src/gallium/drivers/lima/lima_resource.c

index fb416652e53b23ababb61ea8ee188b65ca34f98a..5dd2a472114888f06b994a27d2982e56559ab5cf 100644 (file)
@@ -322,25 +322,6 @@ lima_resource_from_handle(struct pipe_screen *pscreen,
       return NULL;
    }
 
-   /* check alignment for the buffer */
-   if (pres->bind & PIPE_BIND_RENDER_TARGET) {
-      unsigned width, height, stride, size;
-
-      width = align(pres->width0, 16);
-      height = align(pres->height0, 16);
-      stride = util_format_get_stride(pres->format, width);
-      size = util_format_get_2d_size(pres->format, stride, height);
-
-      if (res->levels[0].stride != stride || res->bo->size < size) {
-         debug_error("import buffer not properly aligned\n");
-         goto err_out;
-      }
-
-      res->levels[0].width = width;
-   }
-   else
-      res->levels[0].width = pres->width0;
-
    switch (handle->modifier) {
    case DRM_FORMAT_MOD_LINEAR:
       res->tiled = false;
@@ -360,6 +341,26 @@ lima_resource_from_handle(struct pipe_screen *pscreen,
       goto err_out;
    }
 
+   /* check alignment for the buffer */
+   if (res->tiled ||
+       (pres->bind & (PIPE_BIND_RENDER_TARGET | PIPE_BIND_DEPTH_STENCIL))) {
+      unsigned width, height, stride, size;
+
+      width = align(pres->width0, 16);
+      height = align(pres->height0, 16);
+      stride = util_format_get_stride(pres->format, width);
+      size = util_format_get_2d_size(pres->format, stride, height);
+
+      if (res->levels[0].stride != stride || res->bo->size < size) {
+         debug_error("import buffer not properly aligned\n");
+         goto err_out;
+      }
+
+      res->levels[0].width = width;
+   }
+   else
+      res->levels[0].width = pres->width0;
+
    return pres;
 
 err_out: