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