Mesa (main): v3dv: implement vkCmdBlitImage2KHR

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jun 21 06:14:51 UTC 2021


Module: Mesa
Branch: main
Commit: 06a9a3ead56552f66139c08dc31cf312008ae0bd
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=06a9a3ead56552f66139c08dc31cf312008ae0bd

Author: Iago Toral Quiroga <itoral at igalia.com>
Date:   Thu Jun 17 09:30:13 2021 +0200

v3dv: implement vkCmdBlitImage2KHR

The common Vulkan code will call this to implement vkCmdBlitImage.

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

---

 src/broadcom/vulkan/v3dv_meta_copy.c | 41 ++++++++++++++++++------------------
 1 file changed, 20 insertions(+), 21 deletions(-)

diff --git a/src/broadcom/vulkan/v3dv_meta_copy.c b/src/broadcom/vulkan/v3dv_meta_copy.c
index 746bc622a07..5391e4da2d8 100644
--- a/src/broadcom/vulkan/v3dv_meta_copy.c
+++ b/src/broadcom/vulkan/v3dv_meta_copy.c
@@ -931,7 +931,7 @@ blit_shader(struct v3dv_cmd_buffer *cmd_buffer,
             VkFormat src_format,
             VkColorComponentFlags cmask,
             VkComponentMapping *cswizzle,
-            const VkImageBlit *region,
+            const VkImageBlit2KHR *region,
             VkFilter filter,
             bool dst_is_padded_image);
 
@@ -1175,7 +1175,8 @@ copy_image_to_buffer_blit(struct v3dv_cmd_buffer *cmd_buffer,
        * image, but that we need to blit to a S8D24 destination (the only
        * stencil format we support).
        */
-      const VkImageBlit blit_region = {
+      const VkImageBlit2KHR blit_region = {
+         .sType = VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR,
          .srcSubresource = {
             .aspectMask = copy_aspect,
             .mipLevel = region->imageSubresource.mipLevel,
@@ -1921,7 +1922,8 @@ copy_image_blit(struct v3dv_cmd_buffer *cmd_buffer,
       dst_start.z + region->extent.depth,
    };
 
-   const VkImageBlit blit_region = {
+   const VkImageBlit2KHR blit_region = {
+      .sType = VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR,
       .srcSubresource = region->srcSubresource,
       .srcOffsets = { src_start, src_end },
       .dstSubresource = region->dstSubresource,
@@ -3808,7 +3810,8 @@ copy_buffer_to_image_blit(struct v3dv_cmd_buffer *cmd_buffer,
           * image, but that we need to blit to a S8D24 destination (the only
           * stencil format we support).
           */
-         const VkImageBlit blit_region = {
+         const VkImageBlit2KHR blit_region = {
+            .sType = VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR,
             .srcSubresource = {
                .aspectMask = aspect,
                .mipLevel = 0,
@@ -4140,7 +4143,7 @@ static bool
 blit_tfu(struct v3dv_cmd_buffer *cmd_buffer,
          struct v3dv_image *dst,
          struct v3dv_image *src,
-         const VkImageBlit *region)
+         const VkImageBlit2KHR *region)
 {
    assert(dst->samples == VK_SAMPLE_COUNT_1_BIT);
    assert(src->samples == VK_SAMPLE_COUNT_1_BIT);
@@ -5123,7 +5126,7 @@ blit_shader(struct v3dv_cmd_buffer *cmd_buffer,
             VkFormat src_format,
             VkColorComponentFlags cmask,
             VkComponentMapping *cswizzle,
-            const VkImageBlit *_region,
+            const VkImageBlit2KHR *_region,
             VkFilter filter,
             bool dst_is_padded_image)
 {
@@ -5141,7 +5144,7 @@ blit_shader(struct v3dv_cmd_buffer *cmd_buffer,
    if (src->tiling == VK_IMAGE_TILING_LINEAR && src->type != VK_IMAGE_TYPE_1D)
       return false;
 
-   VkImageBlit region = *_region;
+   VkImageBlit2KHR region = *_region;
    /* Rewrite combined D/S blits to compatible color blits */
    if (vk_format_is_depth_or_stencil(dst_format)) {
       assert(src_format == dst_format);
@@ -5533,18 +5536,12 @@ fail:
 }
 
 VKAPI_ATTR void VKAPI_CALL
-v3dv_CmdBlitImage(VkCommandBuffer commandBuffer,
-                  VkImage srcImage,
-                  VkImageLayout srcImageLayout,
-                  VkImage dstImage,
-                  VkImageLayout dstImageLayout,
-                  uint32_t regionCount,
-                  const VkImageBlit* pRegions,
-                  VkFilter filter)
+v3dv_CmdBlitImage2KHR(VkCommandBuffer commandBuffer,
+                      const VkBlitImageInfo2KHR *pBlitImageInfo)
 {
    V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer);
-   V3DV_FROM_HANDLE(v3dv_image, src, srcImage);
-   V3DV_FROM_HANDLE(v3dv_image, dst, dstImage);
+   V3DV_FROM_HANDLE(v3dv_image, src, pBlitImageInfo->srcImage);
+   V3DV_FROM_HANDLE(v3dv_image, dst, pBlitImageInfo->dstImage);
 
     /* This command can only happen outside a render pass */
    assert(cmd_buffer->state.pass == NULL);
@@ -5557,14 +5554,15 @@ v3dv_CmdBlitImage(VkCommandBuffer commandBuffer,
    /* 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]))
+   for (uint32_t i = 0; i < pBlitImageInfo->regionCount; i++) {
+      if (blit_tfu(cmd_buffer, dst, src, &pBlitImageInfo->pRegions[i]))
          continue;
       if (blit_shader(cmd_buffer,
                       dst, dst->vk_format,
                       src, src->vk_format,
                       0, NULL,
-                      &pRegions[i], filter, true)) {
+                      &pBlitImageInfo->pRegions[i],
+                      pBlitImageInfo->filter, true)) {
          continue;
       }
       unreachable("Unsupported blit operation");
@@ -5715,7 +5713,8 @@ resolve_image_blit(struct v3dv_cmd_buffer *cmd_buffer,
                    struct v3dv_image *src,
                    const VkImageResolve *region)
 {
-   const VkImageBlit blit_region = {
+   const VkImageBlit2KHR blit_region = {
+      .sType = VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR,
       .srcSubresource = region->srcSubresource,
       .srcOffsets = {
          region->srcOffset,



More information about the mesa-commit mailing list