From f9b773a41784c09f54af8b2044ed8396f471ad6c Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Thu, 17 Mar 2022 16:10:51 -0500 Subject: [PATCH] panvk: Implement VK_KHR_copy_commands2 This is just 2 versions of all the copy/blit entrypoings. The common Vulkan runtime code will implement the 1.0 versions in terms of the 2 versions. Reviewed-by: Boris Brezillon Part-of: --- src/panfrost/vulkan/panvk_device.c | 1 + src/panfrost/vulkan/panvk_vX_meta_blit.c | 29 +++------- src/panfrost/vulkan/panvk_vX_meta_copy.c | 72 +++++++++--------------- 3 files changed, 38 insertions(+), 64 deletions(-) diff --git a/src/panfrost/vulkan/panvk_device.c b/src/panfrost/vulkan/panvk_device.c index 797bba05874..a2be393a36f 100644 --- a/src/panfrost/vulkan/panvk_device.c +++ b/src/panfrost/vulkan/panvk_device.c @@ -148,6 +148,7 @@ panvk_get_device_extensions(const struct panvk_physical_device *device, struct vk_device_extension_table *ext) { *ext = (struct vk_device_extension_table) { + .KHR_copy_commands2 = true, #ifdef PANVK_USE_WSI_PLATFORM .KHR_swapchain = true, #endif diff --git a/src/panfrost/vulkan/panvk_vX_meta_blit.c b/src/panfrost/vulkan/panvk_vX_meta_blit.c index a7885a213df..11e7c6271d5 100644 --- a/src/panfrost/vulkan/panvk_vX_meta_blit.c +++ b/src/panfrost/vulkan/panvk_vX_meta_blit.c @@ -134,21 +134,15 @@ panvk_meta_blit(struct panvk_cmd_buffer *cmdbuf, } void -panvk_per_arch(CmdBlitImage)(VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage destImage, - VkImageLayout destImageLayout, - uint32_t regionCount, - const VkImageBlit *pRegions, - VkFilter filter) +panvk_per_arch(CmdBlitImage2)(VkCommandBuffer commandBuffer, + const VkBlitImageInfo2 *pBlitImageInfo) { VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer); - VK_FROM_HANDLE(panvk_image, src, srcImage); - VK_FROM_HANDLE(panvk_image, dst, destImage); + VK_FROM_HANDLE(panvk_image, src, pBlitImageInfo->srcImage); + VK_FROM_HANDLE(panvk_image, dst, pBlitImageInfo->dstImage); - for (unsigned i = 0; i < regionCount; i++) { - const VkImageBlit *region = &pRegions[i]; + for (unsigned i = 0; i < pBlitImageInfo->regionCount; i++) { + const VkImageBlit2 *region = &pBlitImageInfo->pRegions[i]; struct pan_blit_info info = { .src = { .planes[0].image = &src->pimage, @@ -184,7 +178,7 @@ panvk_per_arch(CmdBlitImage)(VkCommandBuffer commandBuffer, region->dstSubresource.baseArrayLayer + region->dstSubresource.layerCount - 1, }, }, - .nearest = filter == VK_FILTER_NEAREST, + .nearest = pBlitImageInfo->filter == VK_FILTER_NEAREST, }; if (region->srcSubresource.aspectMask == VK_IMAGE_ASPECT_STENCIL_BIT) @@ -202,13 +196,8 @@ panvk_per_arch(CmdBlitImage)(VkCommandBuffer commandBuffer, } void -panvk_per_arch(CmdResolveImage)(VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage destImage, - VkImageLayout destImageLayout, - uint32_t regionCount, - const VkImageResolve *pRegions) +panvk_per_arch(CmdResolveImage2)(VkCommandBuffer commandBuffer, + const VkResolveImageInfo2* pResolveImageInfo) { panvk_stub(); } diff --git a/src/panfrost/vulkan/panvk_vX_meta_copy.c b/src/panfrost/vulkan/panvk_vX_meta_copy.c index 005077c356a..36ef246f8c4 100644 --- a/src/panfrost/vulkan/panvk_vX_meta_copy.c +++ b/src/panfrost/vulkan/panvk_vX_meta_copy.c @@ -654,7 +654,7 @@ static void panvk_meta_copy_img2img(struct panvk_cmd_buffer *cmdbuf, const struct panvk_image *src, const struct panvk_image *dst, - const VkImageCopy *region) + const VkImageCopy2 *region) { struct panfrost_device *pdev = &cmdbuf->device->physical_device->pdev; struct pan_fb_info *fbinfo = &cmdbuf->state.fb.info; @@ -849,20 +849,15 @@ panvk_meta_copy_img2img_init(struct panvk_physical_device *dev, bool is_ms) } void -panvk_per_arch(CmdCopyImage)(VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage destImage, - VkImageLayout destImageLayout, - uint32_t regionCount, - const VkImageCopy *pRegions) +panvk_per_arch(CmdCopyImage2)(VkCommandBuffer commandBuffer, + const VkCopyImageInfo2 *pCopyImageInfo) { VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer); - VK_FROM_HANDLE(panvk_image, dst, destImage); - VK_FROM_HANDLE(panvk_image, src, srcImage); + VK_FROM_HANDLE(panvk_image, dst, pCopyImageInfo->dstImage); + VK_FROM_HANDLE(panvk_image, src, pCopyImageInfo->srcImage); - for (unsigned i = 0; i < regionCount; i++) { - panvk_meta_copy_img2img(cmdbuf, src, dst, &pRegions[i]); + for (unsigned i = 0; i < pCopyImageInfo->regionCount; i++) { + panvk_meta_copy_img2img(cmdbuf, src, dst, &pCopyImageInfo->pRegions[i]); } } @@ -1121,7 +1116,7 @@ static void panvk_meta_copy_buf2img(struct panvk_cmd_buffer *cmdbuf, const struct panvk_buffer *buf, const struct panvk_image *img, - const VkBufferImageCopy *region) + const VkBufferImageCopy2 *region) { struct panfrost_device *pdev = &cmdbuf->device->physical_device->pdev; struct pan_fb_info *fbinfo = &cmdbuf->state.fb.info; @@ -1271,19 +1266,15 @@ panvk_meta_copy_buf2img_init(struct panvk_physical_device *dev) } void -panvk_per_arch(CmdCopyBufferToImage)(VkCommandBuffer commandBuffer, - VkBuffer srcBuffer, - VkImage destImage, - VkImageLayout destImageLayout, - uint32_t regionCount, - const VkBufferImageCopy *pRegions) +panvk_per_arch(CmdCopyBufferToImage2)(VkCommandBuffer commandBuffer, + const VkCopyBufferToImageInfo2 *pCopyBufferToImageInfo) { VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer); - VK_FROM_HANDLE(panvk_buffer, buf, srcBuffer); - VK_FROM_HANDLE(panvk_image, img, destImage); + VK_FROM_HANDLE(panvk_buffer, buf, pCopyBufferToImageInfo->srcBuffer); + VK_FROM_HANDLE(panvk_image, img, pCopyBufferToImageInfo->dstImage); - for (unsigned i = 0; i < regionCount; i++) { - panvk_meta_copy_buf2img(cmdbuf, buf, img, &pRegions[i]); + for (unsigned i = 0; i < pCopyBufferToImageInfo->regionCount; i++) { + panvk_meta_copy_buf2img(cmdbuf, buf, img, &pCopyBufferToImageInfo->pRegions[i]); } } @@ -1587,7 +1578,7 @@ static void panvk_meta_copy_img2buf(struct panvk_cmd_buffer *cmdbuf, const struct panvk_buffer *buf, const struct panvk_image *img, - const VkBufferImageCopy *region) + const VkBufferImageCopy2 *region) { struct panfrost_device *pdev = &cmdbuf->device->physical_device->pdev; struct panvk_meta_copy_format_info key = { @@ -1732,19 +1723,15 @@ panvk_meta_copy_img2buf_init(struct panvk_physical_device *dev) } void -panvk_per_arch(CmdCopyImageToBuffer)(VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkBuffer destBuffer, - uint32_t regionCount, - const VkBufferImageCopy *pRegions) +panvk_per_arch(CmdCopyImageToBuffer2)(VkCommandBuffer commandBuffer, + const VkCopyImageToBufferInfo2 *pCopyImageToBufferInfo) { VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer); - VK_FROM_HANDLE(panvk_buffer, buf, destBuffer); - VK_FROM_HANDLE(panvk_image, img, srcImage); + VK_FROM_HANDLE(panvk_buffer, buf, pCopyImageToBufferInfo->dstBuffer); + VK_FROM_HANDLE(panvk_image, img, pCopyImageToBufferInfo->srcImage); - for (unsigned i = 0; i < regionCount; i++) { - panvk_meta_copy_img2buf(cmdbuf, buf, img, &pRegions[i]); + for (unsigned i = 0; i < pCopyImageToBufferInfo->regionCount; i++) { + panvk_meta_copy_img2buf(cmdbuf, buf, img, &pCopyImageToBufferInfo->pRegions[i]); } } @@ -1840,7 +1827,7 @@ static void panvk_meta_copy_buf2buf(struct panvk_cmd_buffer *cmdbuf, const struct panvk_buffer *src, const struct panvk_buffer *dst, - const VkBufferCopy *region) + const VkBufferCopy2 *region) { struct panfrost_device *pdev = &cmdbuf->device->physical_device->pdev; @@ -1889,18 +1876,15 @@ panvk_meta_copy_buf2buf(struct panvk_cmd_buffer *cmdbuf, } void -panvk_per_arch(CmdCopyBuffer)(VkCommandBuffer commandBuffer, - VkBuffer srcBuffer, - VkBuffer destBuffer, - uint32_t regionCount, - const VkBufferCopy *pRegions) +panvk_per_arch(CmdCopyBuffer2)(VkCommandBuffer commandBuffer, + const VkCopyBufferInfo2 *pCopyBufferInfo) { VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer); - VK_FROM_HANDLE(panvk_buffer, src, srcBuffer); - VK_FROM_HANDLE(panvk_buffer, dst, destBuffer); + VK_FROM_HANDLE(panvk_buffer, src, pCopyBufferInfo->srcBuffer); + VK_FROM_HANDLE(panvk_buffer, dst, pCopyBufferInfo->dstBuffer); - for (unsigned i = 0; i < regionCount; i++) { - panvk_meta_copy_buf2buf(cmdbuf, src, dst, &pRegions[i]); + for (unsigned i = 0; i < pCopyBufferInfo->regionCount; i++) { + panvk_meta_copy_buf2buf(cmdbuf, src, dst, &pCopyBufferInfo->pRegions[i]); } }