diff options
-rw-r--r-- | src/gallium/drivers/lima/lima_resource.c | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/src/gallium/drivers/lima/lima_resource.c b/src/gallium/drivers/lima/lima_resource.c index fb416652e53..5dd2a472114 100644 --- a/src/gallium/drivers/lima/lima_resource.c +++ b/src/gallium/drivers/lima/lima_resource.c @@ -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: |