Module: Mesa Branch: main Commit: aa61a653a5dcbebd8b5a0f32ea4dbba3cba77dd6 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=aa61a653a5dcbebd8b5a0f32ea4dbba3cba77dd6
Author: Iago Toral Quiroga <[email protected]> Date: Thu Jun 17 10:18:14 2021 +0200 v3dv: implement vkCmdResolveImage2KHR The common Vulkan code will call this to implement vkCmdResolveImage. Reviewed-by: Alejandro PiƱeiro <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11443> --- src/broadcom/vulkan/v3dv_cmd_buffer.c | 23 ++++++++++++----------- src/broadcom/vulkan/v3dv_meta_copy.c | 30 +++++++++++++----------------- 2 files changed, 25 insertions(+), 28 deletions(-) diff --git a/src/broadcom/vulkan/v3dv_cmd_buffer.c b/src/broadcom/vulkan/v3dv_cmd_buffer.c index fa250ca2224..f39ab45c35d 100644 --- a/src/broadcom/vulkan/v3dv_cmd_buffer.c +++ b/src/broadcom/vulkan/v3dv_cmd_buffer.c @@ -1039,7 +1039,8 @@ cmd_buffer_subpass_handle_pending_resolves(struct v3dv_cmd_buffer *cmd_buffer) struct v3dv_image_view *src_iview = fb->attachments[src_attachment_idx]; struct v3dv_image_view *dst_iview = fb->attachments[dst_attachment_idx]; - VkImageResolve region = { + VkImageResolve2KHR region = { + .sType = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR, .srcSubresource = { VK_IMAGE_ASPECT_COLOR_BIT, src_iview->base_level, @@ -1057,16 +1058,16 @@ cmd_buffer_subpass_handle_pending_resolves(struct v3dv_cmd_buffer *cmd_buffer) .extent = src_iview->image->extent, }; - VkImage src_image_handle = - v3dv_image_to_handle((struct v3dv_image *) src_iview->image); - VkImage dst_image_handle = - v3dv_image_to_handle((struct v3dv_image *) dst_iview->image); - v3dv_CmdResolveImage(cmd_buffer_handle, - src_image_handle, - VK_IMAGE_LAYOUT_GENERAL, - dst_image_handle, - VK_IMAGE_LAYOUT_GENERAL, - 1, ®ion); + VkResolveImageInfo2KHR resolve_info = { + .sType = VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR, + .srcImage = v3dv_image_to_handle((struct v3dv_image *) src_iview->image), + .srcImageLayout = VK_IMAGE_LAYOUT_GENERAL, + .dstImage = v3dv_image_to_handle((struct v3dv_image *) dst_iview->image), + .dstImageLayout = VK_IMAGE_LAYOUT_GENERAL, + .regionCount = 1, + .pRegions = ®ion, + }; + v3dv_CmdResolveImage2KHR(cmd_buffer_handle, &resolve_info); } cmd_buffer->state.framebuffer = restore_fb; diff --git a/src/broadcom/vulkan/v3dv_meta_copy.c b/src/broadcom/vulkan/v3dv_meta_copy.c index 38af7738fd8..f0575f97b9a 100644 --- a/src/broadcom/vulkan/v3dv_meta_copy.c +++ b/src/broadcom/vulkan/v3dv_meta_copy.c @@ -5565,7 +5565,7 @@ emit_resolve_image_layer_per_tile_list(struct v3dv_job *job, struct v3dv_image *dst, struct v3dv_image *src, uint32_t layer_offset, - const VkImageResolve *region) + const VkImageResolve2KHR *region) { struct v3dv_cl *cl = &job->indirect; v3dv_cl_ensure_space(cl, 200, 1); @@ -5623,7 +5623,7 @@ emit_resolve_image_layer(struct v3dv_job *job, struct v3dv_image *src, struct framebuffer_data *framebuffer, uint32_t layer, - const VkImageResolve *region) + const VkImageResolve2KHR *region) { emit_frame_setup(job, layer, NULL); emit_resolve_image_layer_per_tile_list(job, framebuffer, @@ -5636,7 +5636,7 @@ emit_resolve_image_rcl(struct v3dv_job *job, struct v3dv_image *dst, struct v3dv_image *src, struct framebuffer_data *framebuffer, - const VkImageResolve *region) + const VkImageResolve2KHR *region) { struct v3dv_cl *rcl = emit_rcl_prologue(job, framebuffer, NULL); v3dv_return_if_oom(NULL, job); @@ -5650,7 +5650,7 @@ static bool resolve_image_tlb(struct v3dv_cmd_buffer *cmd_buffer, struct v3dv_image *dst, struct v3dv_image *src, - const VkImageResolve *region) + const VkImageResolve2KHR *region) { if (!can_use_tlb(src, ®ion->srcOffset, NULL) || !can_use_tlb(dst, ®ion->dstOffset, NULL)) { @@ -5701,7 +5701,7 @@ static bool resolve_image_blit(struct v3dv_cmd_buffer *cmd_buffer, struct v3dv_image *dst, struct v3dv_image *src, - const VkImageResolve *region) + const VkImageResolve2KHR *region) { const VkImageBlit2KHR blit_region = { .sType = VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR, @@ -5730,17 +5730,13 @@ resolve_image_blit(struct v3dv_cmd_buffer *cmd_buffer, } VKAPI_ATTR void VKAPI_CALL -v3dv_CmdResolveImage(VkCommandBuffer commandBuffer, - VkImage srcImage, - VkImageLayout srcImageLayout, - VkImage dstImage, - VkImageLayout dstImageLayout, - uint32_t regionCount, - const VkImageResolve *pRegions) +v3dv_CmdResolveImage2KHR(VkCommandBuffer commandBuffer, + const VkResolveImageInfo2KHR *info) + { 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, info->srcImage); + V3DV_FROM_HANDLE(v3dv_image, dst, info->dstImage); /* This command can only happen outside a render pass */ assert(cmd_buffer->state.pass == NULL); @@ -5749,10 +5745,10 @@ v3dv_CmdResolveImage(VkCommandBuffer commandBuffer, assert(src->samples == VK_SAMPLE_COUNT_4_BIT); assert(dst->samples == VK_SAMPLE_COUNT_1_BIT); - for (uint32_t i = 0; i < regionCount; i++) { - if (resolve_image_tlb(cmd_buffer, dst, src, &pRegions[i])) + for (uint32_t i = 0; i < info->regionCount; i++) { + if (resolve_image_tlb(cmd_buffer, dst, src, &info->pRegions[i])) continue; - if (resolve_image_blit(cmd_buffer, dst, src, &pRegions[i])) + if (resolve_image_blit(cmd_buffer, dst, src, &info->pRegions[i])) continue; unreachable("Unsupported multismaple resolve operation"); } _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
