From 2c6279d58b96767b158a8955ec80fde3803928ae Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Wed, 20 Jun 2018 16:54:31 -0700 Subject: [PATCH] v3d: Fix tiling modifier support to use the new UIF define. You can't use T tiled buffers on V3D 3.x and newer, it's been replaced with a newer layout shared with other hardware blocks. --- src/gallium/drivers/v3d/v3d_resource.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/v3d/v3d_resource.c b/src/gallium/drivers/v3d/v3d_resource.c index 3df03d71df4..8bf6a97c394 100644 --- a/src/gallium/drivers/v3d/v3d_resource.c +++ b/src/gallium/drivers/v3d/v3d_resource.c @@ -324,6 +324,17 @@ v3d_resource_get_handle(struct pipe_screen *pscreen, */ bo->private = false; + if (rsc->tiled) { + /* A shared tiled buffer should always be allocated as UIF, + * not UBLINEAR or LT. + */ + assert(rsc->slices[0].tiling == VC5_TILING_UIF_XOR || + rsc->slices[0].tiling == VC5_TILING_UIF_NO_XOR); + whandle->modifier = DRM_FORMAT_MOD_BROADCOM_UIF; + } else { + whandle->modifier = DRM_FORMAT_MOD_LINEAR; + } + switch (whandle->type) { case WINSYS_HANDLE_TYPE_SHARED: return v3d_bo_flink(bo, &whandle->handle); @@ -651,7 +662,7 @@ v3d_resource_create_with_modifiers(struct pipe_screen *pscreen, linear_ok = true; rsc->tiled = should_tile; } else if (should_tile && - find_modifier(DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED, + find_modifier(DRM_FORMAT_MOD_BROADCOM_UIF, modifiers, count)) { rsc->tiled = true; } else if (linear_ok) { @@ -697,10 +708,12 @@ v3d_resource_from_handle(struct pipe_screen *pscreen, switch (whandle->modifier) { case DRM_FORMAT_MOD_LINEAR: - case DRM_FORMAT_MOD_INVALID: rsc->tiled = false; break; - /* XXX: UIF */ + case DRM_FORMAT_MOD_BROADCOM_UIF: + case DRM_FORMAT_MOD_INVALID: + rsc->tiled = true; + break; default: fprintf(stderr, "Attempt to import unsupported modifier 0x%llx\n",