pvr: Implement vkCmdResolveImage2KHR API.
authorRajnesh Kanwal <rajnesh.kanwal@imgtec.com>
Tue, 16 Aug 2022 20:45:36 +0000 (21:45 +0100)
committerMarge Bot <emma+marge@anholt.net>
Wed, 19 Apr 2023 11:01:06 +0000 (11:01 +0000)
Signed-off-by: Rajnesh Kanwal <rajnesh.kanwal@imgtec.com>
Acked-by: Karmjit Mahil <Karmjit.Mahil@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21550>

src/imagination/vulkan/pvr_blit.c

index f2d28d8..526487d 100644 (file)
@@ -1944,5 +1944,25 @@ void pvr_CmdClearAttachments(VkCommandBuffer commandBuffer,
 void pvr_CmdResolveImage2KHR(VkCommandBuffer commandBuffer,
                              const VkResolveImageInfo2 *pResolveImageInfo)
 {
-   assert(!"Unimplemented");
+   PVR_FROM_HANDLE(pvr_image, src, pResolveImageInfo->srcImage);
+   PVR_FROM_HANDLE(pvr_image, dst, pResolveImageInfo->dstImage);
+   PVR_FROM_HANDLE(pvr_cmd_buffer, cmd_buffer, commandBuffer);
+
+   PVR_CHECK_COMMAND_BUFFER_BUILDING_STATE(cmd_buffer);
+
+   for (uint32_t i = 0U; i < pResolveImageInfo->regionCount; i++) {
+      VkImageCopy2 region = {
+         .sType = VK_STRUCTURE_TYPE_IMAGE_COPY_2,
+         .srcSubresource = pResolveImageInfo->pRegions[i].srcSubresource,
+         .srcOffset = pResolveImageInfo->pRegions[i].srcOffset,
+         .dstSubresource = pResolveImageInfo->pRegions[i].dstSubresource,
+         .dstOffset = pResolveImageInfo->pRegions[i].dstOffset,
+         .extent = pResolveImageInfo->pRegions[i].extent,
+      };
+
+      VkResult result =
+         pvr_copy_or_resolve_color_image_region(cmd_buffer, src, dst, &region);
+      if (result != VK_SUCCESS)
+         return;
+   }
 }