v3dv: TFU destination must be UIF
authorIago Toral Quiroga <itoral@igalia.com>
Tue, 15 Mar 2022 07:37:44 +0000 (08:37 +0100)
committerMarge Bot <emma+marge@anholt.net>
Fri, 18 Mar 2022 13:17:58 +0000 (13:17 +0000)
We had some code that considered the possibility that the destination
might be linear when configuring TFU jobs, but we never actually allow
for this to happen since we avoid hitting these paths in that case, as
the TFU always produces UIF results. Instead, add an assert when
producing the TFU packet to ensure we are expecting a UIF result.

Reviewed-by: Alejandro PiƱeiro <apinheiro@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15342>

src/broadcom/vulkan/v3dv_meta_copy.c
src/broadcom/vulkan/v3dvx_meta_common.c

index 290390f..937d152 100644 (file)
@@ -864,8 +864,7 @@ copy_image_tfu(struct v3dv_cmd_buffer *cmd_buffer,
          dst->mem->bo->handle,
          dst_offset,
          dst_slice->tiling,
-         dst_slice->tiling == V3D_TILING_RASTER ?
-                              dst_slice->stride : dst_slice->padded_height,
+         dst_slice->padded_height,
          dst->cpp,
          src->mem->bo->handle,
          src_offset,
@@ -1371,8 +1370,7 @@ copy_buffer_to_image_tfu(struct v3dv_cmd_buffer *cmd_buffer,
              dst_bo->handle,
              dst_offset,
              slice->tiling,
-             slice->tiling == V3D_TILING_RASTER ?
-                              slice->stride : slice->padded_height,
+             slice->padded_height,
              image->cpp,
              src_bo->handle,
              src_offset,
@@ -2896,8 +2894,7 @@ blit_tfu(struct v3dv_cmd_buffer *cmd_buffer,
          dst->mem->bo->handle,
          dst_offset,
          dst_slice->tiling,
-         dst_slice->tiling == V3D_TILING_RASTER ?
-                              dst_slice->stride : dst_slice->padded_height,
+         dst_slice->padded_height,
          dst->cpp,
          src->mem->bo->handle,
          src_offset,
index 55ad2bd..8b2e161 100644 (file)
@@ -881,6 +881,9 @@ v3dX(meta_emit_tfu_job)(struct v3dv_cmd_buffer *cmd_buffer,
       break;
    }
 
+   /* The TFU can handle raster sources but always produces UIF results */
+   assert(dst_tiling != V3D_TILING_RASTER);
+
    /* If we're writing level 0 (!IOA_DIMTW), then we need to supply the
     * OPAD field for the destination (how many extra UIF blocks beyond
     * those necessary to cover the height).