summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/v3d
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2018-06-20 16:54:31 -0700
committerEric Anholt <[email protected]>2018-07-18 10:37:49 -0700
commit2c6279d58b96767b158a8955ec80fde3803928ae (patch)
tree62839fe65ed9af6fe05abb8a6e2d5e09a9d83615 /src/gallium/drivers/v3d
parent6c0482e1768bd4bb53f77ac5bd40c99807922860 (diff)
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.
Diffstat (limited to 'src/gallium/drivers/v3d')
-rw-r--r--src/gallium/drivers/v3d/v3d_resource.c19
1 files 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",