From 02435f1294d6b9163560f1f5d49b4d2c55b83c79 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Tue, 12 Oct 2021 18:09:04 -0700 Subject: [PATCH] iris: Require a 4K alignment for extra clear color BOs. Apparently, we've been requiring a 4K alignment for internally allocated clear color addresses to work around some unknown issues. There's a comment to that effect in iris_resource_create_with_modifiers(). When importing a dmabuf and tacking on an additional clear color BO, we only required an alignment of 1. This wasn't a problem for a long time because all BO allocations were naturally aligned to the 4K page size. However, once we enabled suballocation, we were able to allocate "BOs" at 256B granularity, making this no longer 4K aligned. Increase the alignment requirement to 4K to match the behavior of our normal allocations and also our previous behavior. Fixes Piglit's ext_image_dma_buf_import-intel-modifiers. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5482 Fixes: ce2e2296ab6 ("iris: Suballocate BO using the Gallium pb_slab mechanism") Reviewed-by: Paulo Zanoni Reviewed-by: Nanley Chery Part-of: --- src/gallium/drivers/iris/iris_resource.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/iris/iris_resource.c b/src/gallium/drivers/iris/iris_resource.c index 195f3fe83da..21b32376880 100644 --- a/src/gallium/drivers/iris/iris_resource.c +++ b/src/gallium/drivers/iris/iris_resource.c @@ -941,11 +941,16 @@ iris_resource_finish_aux_import(struct pipe_screen *pscreen, import_aux_info(r[0], r[1]); map_aux_addresses(screen, r[0], format, 0); - /* Add on a clear color BO. */ + /* Add on a clear color BO. + * + * Also add some padding to make sure the fast clear color state buffer + * starts at a 4K alignment to avoid some unknown issues. See the + * matching comment in iris_resource_create_with_modifiers(). + */ if (iris_get_aux_clear_color_state_size(screen) > 0) { res->aux.clear_color_bo = iris_bo_alloc(screen->bufmgr, "clear color_buffer", - iris_get_aux_clear_color_state_size(screen), 1, + iris_get_aux_clear_color_state_size(screen), 4096, IRIS_MEMZONE_OTHER, BO_ALLOC_ZEROED); } break;