Mesa (master): v3dv: support compressed formats with TFU unit

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Nov 30 12:27:45 UTC 2020


Module: Mesa
Branch: master
Commit: d60a3ccf52be669f6f2973048ee53994125a6ace
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d60a3ccf52be669f6f2973048ee53994125a6ace

Author: Iago Toral Quiroga <itoral at igalia.com>
Date:   Thu Nov 26 12:34:52 2020 +0100

v3dv: support compressed formats with TFU unit

Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7809>

---

 src/broadcom/vulkan/v3dv_formats.c   |  7 +++++++
 src/broadcom/vulkan/v3dv_meta_copy.c | 12 ++++++++++--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/broadcom/vulkan/v3dv_formats.c b/src/broadcom/vulkan/v3dv_formats.c
index 722698985b5..373306117c3 100644
--- a/src/broadcom/vulkan/v3dv_formats.c
+++ b/src/broadcom/vulkan/v3dv_formats.c
@@ -359,6 +359,13 @@ v3dv_tfu_supports_tex_format(const struct v3d_device_info *devinfo,
    case TEXTURE_DATA_FORMAT_R32F:
    case TEXTURE_DATA_FORMAT_RG32F:
    case TEXTURE_DATA_FORMAT_RGBA32F:
+   case TEXTURE_DATA_FORMAT_RGB8_ETC2:
+   case TEXTURE_DATA_FORMAT_RGB8_PUNCHTHROUGH_ALPHA1:
+   case TEXTURE_DATA_FORMAT_RGBA8_ETC2_EAC:
+   case TEXTURE_DATA_FORMAT_R11_EAC:
+   case TEXTURE_DATA_FORMAT_SIGNED_R11_EAC:
+   case TEXTURE_DATA_FORMAT_RG11_EAC:
+   case TEXTURE_DATA_FORMAT_SIGNED_RG11_EAC:
       return true;
    default:
       return false;
diff --git a/src/broadcom/vulkan/v3dv_meta_copy.c b/src/broadcom/vulkan/v3dv_meta_copy.c
index 474bb6f0a3a..b0069f0233d 100644
--- a/src/broadcom/vulkan/v3dv_meta_copy.c
+++ b/src/broadcom/vulkan/v3dv_meta_copy.c
@@ -2372,7 +2372,7 @@ copy_buffer_to_image_tfu(struct v3dv_cmd_buffer *cmd_buffer,
                          struct v3dv_buffer *buffer,
                          const VkBufferImageCopy *region)
 {
-   VkFormat vk_format = image->vk_format;
+   const VkFormat vk_format = image->vk_format;
    const struct v3dv_format *format = image->format;
 
    /* Format must be supported for texturing */
@@ -2410,6 +2410,11 @@ copy_buffer_to_image_tfu(struct v3dv_cmd_buffer *cmd_buffer,
    if (width != image->extent.width || height != image->extent.height)
       return false;
 
+   const uint32_t block_w = vk_format_get_blockwidth(image->vk_format);
+   const uint32_t block_h = vk_format_get_blockheight(image->vk_format);
+   width = DIV_ROUND_UP(width, block_w);
+   height = DIV_ROUND_UP(height, block_h);
+
    const struct v3d_resource_slice *slice = &image->slices[mip_level];
 
    uint32_t num_layers;
@@ -2431,7 +2436,7 @@ copy_buffer_to_image_tfu(struct v3dv_cmd_buffer *cmd_buffer,
       uint32_t layer = region->imageSubresource.baseArrayLayer + i;
 
       struct drm_v3d_submit_tfu tfu = {
-         .ios = (height << 16) | width,
+         .ios = ((height * block_h) << 16) | (width * block_w),
          .bo_handles = {
             dst_bo->handle,
             src_bo != dst_bo ? src_bo->handle : 0
@@ -5305,6 +5310,9 @@ v3dv_CmdBlitImage(VkCommandBuffer commandBuffer,
    assert(dst->samples == VK_SAMPLE_COUNT_1_BIT &&
           src->samples == VK_SAMPLE_COUNT_1_BIT);
 
+   /* We don't export VK_FORMAT_FEATURE_BLIT_DST_BIT on compressed formats */
+   assert(!vk_format_is_compressed(dst->vk_format));
+
    for (uint32_t i = 0; i < regionCount; i++) {
       if (blit_tfu(cmd_buffer, dst, src, &pRegions[i], filter))
          continue;



More information about the mesa-commit mailing list