X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Famd%2Fvulkan%2Fradv_meta_copy.c;h=64e0ea8648f26182aa2fd73ac9190d7b4c0f1749;hb=ccff93e1387d31243a9c5aede27fbfbe35a03957;hp=2073a2c77f46611efa577ddbbaf455055a56932a;hpb=983af3a6d11d8d1dcd3c23514f92abceb664642f;p=mesa.git diff --git a/src/amd/vulkan/radv_meta_copy.c b/src/amd/vulkan/radv_meta_copy.c index 2073a2c77f4..64e0ea8648f 100644 --- a/src/amd/vulkan/radv_meta_copy.c +++ b/src/amd/vulkan/radv_meta_copy.c @@ -325,7 +325,8 @@ meta_copy_image(struct radv_cmd_buffer *cmd_buffer, uint32_t regionCount, const VkImageCopy *pRegions) { - struct radv_meta_saved_state saved_state; + bool cs = cmd_buffer->queue_family_index == RADV_QUEUE_COMPUTE; + union meta_saved_state saved_state; /* From the Vulkan 1.0 spec: * @@ -333,8 +334,10 @@ meta_copy_image(struct radv_cmd_buffer *cmd_buffer, * images, but both images must have the same number of samples. */ assert(src_image->samples == dest_image->samples); - - radv_meta_save_graphics_reset_vport_scissor(&saved_state, cmd_buffer); + if (cs) + radv_meta_begin_itoi(cmd_buffer, &saved_state.compute); + else + radv_meta_save_graphics_reset_vport_scissor(&saved_state.gfx, cmd_buffer); for (unsigned r = 0; r < regionCount; r++) { assert(pRegions[r].srcSubresource.aspectMask == @@ -388,7 +391,10 @@ meta_copy_image(struct radv_cmd_buffer *cmd_buffer, rect.src_y = src_offset_el.y; /* Perform Blit */ - radv_meta_blit2d(cmd_buffer, &b_src, NULL, &b_dst, 1, &rect); + if (cs) + radv_meta_image_to_image_cs(cmd_buffer, &b_src, &b_dst, 1, &rect); + else + radv_meta_blit2d(cmd_buffer, &b_src, NULL, &b_dst, 1, &rect); b_src.layer++; b_dst.layer++; @@ -399,7 +405,10 @@ meta_copy_image(struct radv_cmd_buffer *cmd_buffer, } } - radv_meta_restore(&saved_state, cmd_buffer); + if (cs) + radv_meta_end_itoi(cmd_buffer, &saved_state.compute); + else + radv_meta_restore(&saved_state.gfx, cmd_buffer); } void radv_CmdCopyImage(