Mesa (main): tu: expose VK_KHR_copy_commands2
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Jan 20 11:26:57 UTC 2022
Module: Mesa
Branch: main
Commit: cadcbed2588a68b40d324c3df8b4b75c619c6156
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cadcbed2588a68b40d324c3df8b4b75c619c6156
Author: Danylo Piliaiev <dpiliaiev at igalia.com>
Date: Wed Jan 19 19:43:39 2022 +0200
tu: expose VK_KHR_copy_commands2
Relevant CTS tests:
dEQP-VK.api.copy_and_blit.copy_commands2.*
Signed-off-by: Danylo Piliaiev <dpiliaiev at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14623>
---
docs/features.txt | 2 +-
src/freedreno/vulkan/tu_clear_blit.c | 126 +++++++++++++++--------------------
src/freedreno/vulkan/tu_device.c | 1 +
3 files changed, 54 insertions(+), 75 deletions(-)
diff --git a/docs/features.txt b/docs/features.txt
index e3be413db68..585891783a2 100644
--- a/docs/features.txt
+++ b/docs/features.txt
@@ -473,7 +473,7 @@ Vulkan 1.2 -- all DONE: anv, vn
Khronos extensions that are not part of any Vulkan version:
VK_KHR_android_surface not started
- VK_KHR_copy_commands2 DONE (anv, lvp, radv, v3dv)
+ VK_KHR_copy_commands2 DONE (anv, lvp, radv, tu, v3dv)
VK_KHR_deferred_host_operations DONE (anv, radv)
VK_KHR_display DONE (anv, lvp, radv, tu, v3dv)
VK_KHR_display_swapchain not started
diff --git a/src/freedreno/vulkan/tu_clear_blit.c b/src/freedreno/vulkan/tu_clear_blit.c
index 988c7d11a74..bdfffa19382 100644
--- a/src/freedreno/vulkan/tu_clear_blit.c
+++ b/src/freedreno/vulkan/tu_clear_blit.c
@@ -1295,7 +1295,7 @@ static void
tu6_blit_image(struct tu_cmd_buffer *cmd,
struct tu_image *src_image,
struct tu_image *dst_image,
- const VkImageBlit *info,
+ const VkImageBlit2KHR *info,
VkFilter filter)
{
const struct blit_ops *ops = &r2d_ops;
@@ -1428,35 +1428,30 @@ tu6_blit_image(struct tu_cmd_buffer *cmd,
}
VKAPI_ATTR void VKAPI_CALL
-tu_CmdBlitImage(VkCommandBuffer commandBuffer,
- VkImage srcImage,
- VkImageLayout srcImageLayout,
- VkImage dstImage,
- VkImageLayout dstImageLayout,
- uint32_t regionCount,
- const VkImageBlit *pRegions,
- VkFilter filter)
+tu_CmdBlitImage2KHR(VkCommandBuffer commandBuffer,
+ const VkBlitImageInfo2KHR* pBlitImageInfo)
{
TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
- TU_FROM_HANDLE(tu_image, src_image, srcImage);
- TU_FROM_HANDLE(tu_image, dst_image, dstImage);
+ TU_FROM_HANDLE(tu_image, src_image, pBlitImageInfo->srcImage);
+ TU_FROM_HANDLE(tu_image, dst_image, pBlitImageInfo->dstImage);
- for (uint32_t i = 0; i < regionCount; ++i) {
+ for (uint32_t i = 0; i < pBlitImageInfo->regionCount; ++i) {
/* can't blit both depth and stencil at once with D32_S8
* TODO: more advanced 3D blit path to support it instead?
*/
if (src_image->vk_format == VK_FORMAT_D32_SFLOAT_S8_UINT ||
dst_image->vk_format == VK_FORMAT_D32_SFLOAT_S8_UINT) {
- VkImageBlit region = pRegions[i];
- u_foreach_bit(b, pRegions[i].dstSubresource.aspectMask) {
+ VkImageBlit2KHR region = pBlitImageInfo->pRegions[i];
+ u_foreach_bit(b, region.dstSubresource.aspectMask) {
region.srcSubresource.aspectMask = BIT(b);
region.dstSubresource.aspectMask = BIT(b);
- tu6_blit_image(cmd, src_image, dst_image, ®ion, filter);
+ tu6_blit_image(cmd, src_image, dst_image, ®ion, pBlitImageInfo->filter);
}
continue;
}
- tu6_blit_image(cmd, src_image, dst_image, pRegions + i, filter);
+ tu6_blit_image(cmd, src_image, dst_image, pBlitImageInfo->pRegions + i,
+ pBlitImageInfo->filter);
}
}
@@ -1490,7 +1485,7 @@ static void
tu_copy_buffer_to_image(struct tu_cmd_buffer *cmd,
struct tu_buffer *src_buffer,
struct tu_image *dst_image,
- const VkBufferImageCopy *info)
+ const VkBufferImageCopy2KHR *info)
{
struct tu_cs *cs = &cmd->cs;
uint32_t layers = MAX2(info->imageExtent.depth, info->imageSubresource.layerCount);
@@ -1552,26 +1547,23 @@ tu_copy_buffer_to_image(struct tu_cmd_buffer *cmd,
}
VKAPI_ATTR void VKAPI_CALL
-tu_CmdCopyBufferToImage(VkCommandBuffer commandBuffer,
- VkBuffer srcBuffer,
- VkImage dstImage,
- VkImageLayout dstImageLayout,
- uint32_t regionCount,
- const VkBufferImageCopy *pRegions)
+tu_CmdCopyBufferToImage2KHR(VkCommandBuffer commandBuffer,
+ const VkCopyBufferToImageInfo2KHR *pCopyBufferToImageInfo)
{
TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
- TU_FROM_HANDLE(tu_image, dst_image, dstImage);
- TU_FROM_HANDLE(tu_buffer, src_buffer, srcBuffer);
+ TU_FROM_HANDLE(tu_image, dst_image, pCopyBufferToImageInfo->dstImage);
+ TU_FROM_HANDLE(tu_buffer, src_buffer, pCopyBufferToImageInfo->srcBuffer);
- for (unsigned i = 0; i < regionCount; ++i)
- tu_copy_buffer_to_image(cmd, src_buffer, dst_image, pRegions + i);
+ for (unsigned i = 0; i < pCopyBufferToImageInfo->regionCount; ++i)
+ tu_copy_buffer_to_image(cmd, src_buffer, dst_image,
+ pCopyBufferToImageInfo->pRegions + i);
}
static void
tu_copy_image_to_buffer(struct tu_cmd_buffer *cmd,
struct tu_image *src_image,
struct tu_buffer *dst_buffer,
- const VkBufferImageCopy *info)
+ const VkBufferImageCopy2KHR *info)
{
struct tu_cs *cs = &cmd->cs;
uint32_t layers = MAX2(info->imageExtent.depth, info->imageSubresource.layerCount);
@@ -1632,19 +1624,16 @@ tu_copy_image_to_buffer(struct tu_cmd_buffer *cmd,
}
VKAPI_ATTR void VKAPI_CALL
-tu_CmdCopyImageToBuffer(VkCommandBuffer commandBuffer,
- VkImage srcImage,
- VkImageLayout srcImageLayout,
- VkBuffer dstBuffer,
- uint32_t regionCount,
- const VkBufferImageCopy *pRegions)
+tu_CmdCopyImageToBuffer2KHR(VkCommandBuffer commandBuffer,
+ const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo)
{
TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
- TU_FROM_HANDLE(tu_image, src_image, srcImage);
- TU_FROM_HANDLE(tu_buffer, dst_buffer, dstBuffer);
+ TU_FROM_HANDLE(tu_image, src_image, pCopyImageToBufferInfo->srcImage);
+ TU_FROM_HANDLE(tu_buffer, dst_buffer, pCopyImageToBufferInfo->dstBuffer);
- for (unsigned i = 0; i < regionCount; ++i)
- tu_copy_image_to_buffer(cmd, src_image, dst_buffer, pRegions + i);
+ for (unsigned i = 0; i < pCopyImageToBufferInfo->regionCount; ++i)
+ tu_copy_image_to_buffer(cmd, src_image, dst_buffer,
+ pCopyImageToBufferInfo->pRegions + i);
}
/* Tiled formats don't support swapping, which means that we can't support
@@ -1680,7 +1669,7 @@ static void
tu_copy_image_to_image(struct tu_cmd_buffer *cmd,
struct tu_image *src_image,
struct tu_image *dst_image,
- const VkImageCopy *info)
+ const VkImageCopy2KHR *info)
{
const struct blit_ops *ops = &r2d_ops;
struct tu_cs *cs = &cmd->cs;
@@ -1860,22 +1849,17 @@ tu_copy_image_to_image(struct tu_cmd_buffer *cmd,
}
VKAPI_ATTR void VKAPI_CALL
-tu_CmdCopyImage(VkCommandBuffer commandBuffer,
- VkImage srcImage,
- VkImageLayout srcImageLayout,
- VkImage destImage,
- VkImageLayout destImageLayout,
- uint32_t regionCount,
- const VkImageCopy *pRegions)
+tu_CmdCopyImage2KHR(VkCommandBuffer commandBuffer,
+ const VkCopyImageInfo2KHR* pCopyImageInfo)
{
TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
- TU_FROM_HANDLE(tu_image, src_image, srcImage);
- TU_FROM_HANDLE(tu_image, dst_image, destImage);
+ TU_FROM_HANDLE(tu_image, src_image, pCopyImageInfo->srcImage);
+ TU_FROM_HANDLE(tu_image, dst_image, pCopyImageInfo->dstImage);
- for (uint32_t i = 0; i < regionCount; ++i) {
+ for (uint32_t i = 0; i < pCopyImageInfo->regionCount; ++i) {
if (src_image->vk_format == VK_FORMAT_D32_SFLOAT_S8_UINT) {
- VkImageCopy info = pRegions[i];
- u_foreach_bit(b, pRegions[i].dstSubresource.aspectMask) {
+ VkImageCopy2KHR info = pCopyImageInfo->pRegions[i];
+ u_foreach_bit(b, info.dstSubresource.aspectMask) {
info.srcSubresource.aspectMask = BIT(b);
info.dstSubresource.aspectMask = BIT(b);
tu_copy_image_to_image(cmd, src_image, dst_image, &info);
@@ -1883,7 +1867,8 @@ tu_CmdCopyImage(VkCommandBuffer commandBuffer,
continue;
}
- tu_copy_image_to_image(cmd, src_image, dst_image, pRegions + i);
+ tu_copy_image_to_image(cmd, src_image, dst_image,
+ pCopyImageInfo->pRegions + i);
}
}
@@ -1921,21 +1906,19 @@ copy_buffer(struct tu_cmd_buffer *cmd,
}
VKAPI_ATTR void VKAPI_CALL
-tu_CmdCopyBuffer(VkCommandBuffer commandBuffer,
- VkBuffer srcBuffer,
- VkBuffer dstBuffer,
- uint32_t regionCount,
- const VkBufferCopy *pRegions)
+tu_CmdCopyBuffer2KHR(VkCommandBuffer commandBuffer,
+ const VkCopyBufferInfo2KHR *pCopyBufferInfo)
{
TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
- TU_FROM_HANDLE(tu_buffer, src_buffer, srcBuffer);
- TU_FROM_HANDLE(tu_buffer, dst_buffer, dstBuffer);
+ TU_FROM_HANDLE(tu_buffer, src_buffer, pCopyBufferInfo->srcBuffer);
+ TU_FROM_HANDLE(tu_buffer, dst_buffer, pCopyBufferInfo->dstBuffer);
- for (unsigned i = 0; i < regionCount; ++i) {
+ for (unsigned i = 0; i < pCopyBufferInfo->regionCount; ++i) {
+ const VkBufferCopy2KHR *region = &pCopyBufferInfo->pRegions[i];
copy_buffer(cmd,
- tu_buffer_iova(dst_buffer) + pRegions[i].dstOffset,
- tu_buffer_iova(src_buffer) + pRegions[i].srcOffset,
- pRegions[i].size, 1);
+ tu_buffer_iova(dst_buffer) + region->dstOffset,
+ tu_buffer_iova(src_buffer) + region->srcOffset,
+ region->size, 1);
}
}
@@ -1998,17 +1981,12 @@ tu_CmdFillBuffer(VkCommandBuffer commandBuffer,
}
VKAPI_ATTR void VKAPI_CALL
-tu_CmdResolveImage(VkCommandBuffer commandBuffer,
- VkImage srcImage,
- VkImageLayout srcImageLayout,
- VkImage dstImage,
- VkImageLayout dstImageLayout,
- uint32_t regionCount,
- const VkImageResolve *pRegions)
+tu_CmdResolveImage2KHR(VkCommandBuffer commandBuffer,
+ const VkResolveImageInfo2KHR* pResolveImageInfo)
{
TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
- TU_FROM_HANDLE(tu_image, src_image, srcImage);
- TU_FROM_HANDLE(tu_image, dst_image, dstImage);
+ TU_FROM_HANDLE(tu_image, src_image, pResolveImageInfo->srcImage);
+ TU_FROM_HANDLE(tu_image, dst_image, pResolveImageInfo->dstImage);
const struct blit_ops *ops = &r2d_ops;
struct tu_cs *cs = &cmd->cs;
@@ -2016,8 +1994,8 @@ tu_CmdResolveImage(VkCommandBuffer commandBuffer,
VK_IMAGE_ASPECT_COLOR_BIT, 0, false, dst_image->layout[0].ubwc,
VK_SAMPLE_COUNT_1_BIT);
- for (uint32_t i = 0; i < regionCount; ++i) {
- const VkImageResolve *info = &pRegions[i];
+ for (uint32_t i = 0; i < pResolveImageInfo->regionCount; ++i) {
+ const VkImageResolve2KHR *info = &pResolveImageInfo->pRegions[i];
uint32_t layers = MAX2(info->extent.depth, info->dstSubresource.layerCount);
assert(info->srcSubresource.layerCount == info->dstSubresource.layerCount);
diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c
index 0653ff8720e..b2147cbfa85 100644
--- a/src/freedreno/vulkan/tu_device.c
+++ b/src/freedreno/vulkan/tu_device.c
@@ -117,6 +117,7 @@ get_device_extensions(const struct tu_physical_device *device,
*ext = (struct vk_device_extension_table) {
.KHR_16bit_storage = device->info->a6xx.storage_16bit,
.KHR_bind_memory2 = true,
+ .KHR_copy_commands2 = true,
.KHR_create_renderpass2 = true,
.KHR_dedicated_allocation = true,
.KHR_depth_stencil_resolve = true,
More information about the mesa-commit
mailing list