Module: Mesa Branch: main Commit: 91aaf0c663659e29b12fdecad056264cca7112b8 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=91aaf0c663659e29b12fdecad056264cca7112b8
Author: Samuel Pitoiset <[email protected]> Date: Tue Nov 21 13:02:50 2023 +0100 radv: remove unused layers support for the HW/FS resolve paths The driver always fallbacks to the compute resolve path when either the source or destination images have layers. Signed-off-by: Samuel Pitoiset <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26316> --- src/amd/vulkan/meta/radv_meta_resolve.c | 154 ++++++++++++++--------------- src/amd/vulkan/meta/radv_meta_resolve_fs.c | 133 ++++++++++++------------- 2 files changed, 136 insertions(+), 151 deletions(-) diff --git a/src/amd/vulkan/meta/radv_meta_resolve.c b/src/amd/vulkan/meta/radv_meta_resolve.c index cfe808f5492..237d86d5446 100644 --- a/src/amd/vulkan/meta/radv_meta_resolve.c +++ b/src/amd/vulkan/meta/radv_meta_resolve.c @@ -352,9 +352,6 @@ radv_meta_resolve_hardware_image(struct radv_cmd_buffer *cmd_buffer, struct radv assert(region->dstSubresource.aspectMask == VK_IMAGE_ASPECT_COLOR_BIT); assert(vk_image_subresource_layer_count(&src_image->vk, ®ion->srcSubresource) == vk_image_subresource_layer_count(&dst_image->vk, ®ion->dstSubresource)); - - const uint32_t dst_base_layer = radv_meta_get_iview_layer(dst_image, ®ion->dstSubresource, ®ion->dstOffset); - /** * From Vulkan 1.0.6 spec: 18.6 Resolving Multisample Images * @@ -379,8 +376,8 @@ radv_meta_resolve_hardware_image(struct radv_cmd_buffer *cmd_buffer, struct radv .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, .baseMipLevel = region->dstSubresource.mipLevel, .levelCount = 1, - .baseArrayLayer = dst_base_layer, - .layerCount = vk_image_subresource_layer_count(&dst_image->vk, ®ion->dstSubresource), + .baseArrayLayer = 0, + .layerCount = 1, }; cmd_buffer->state.flush_bits |= radv_init_dcc(cmd_buffer, dst_image, &range, 0xffffffff); @@ -401,86 +398,81 @@ radv_meta_resolve_hardware_image(struct radv_cmd_buffer *cmd_buffer, struct radv radv_CmdSetScissor(radv_cmd_buffer_to_handle(cmd_buffer), 0, 1, &resolve_area); - const unsigned src_layer_count = vk_image_subresource_layer_count(&src_image->vk, ®ion->srcSubresource); - - for (uint32_t layer = 0; layer < src_layer_count; ++layer) { + VkResult ret = build_resolve_pipeline(device, fs_key); + if (ret != VK_SUCCESS) { + vk_command_buffer_set_error(&cmd_buffer->vk, ret); + return; + } - VkResult ret = build_resolve_pipeline(device, fs_key); - if (ret != VK_SUCCESS) { - vk_command_buffer_set_error(&cmd_buffer->vk, ret); - break; - } + struct radv_image_view src_iview; + radv_image_view_init(&src_iview, cmd_buffer->device, + &(VkImageViewCreateInfo){ + .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, + .image = radv_image_to_handle(src_image), + .viewType = VK_IMAGE_VIEW_TYPE_2D, + .format = src_image->vk.format, + .subresourceRange = + { + .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, + .baseMipLevel = 0, + .levelCount = 1, + .baseArrayLayer = 0, + .layerCount = 1, + }, + }, + 0, NULL); + + struct radv_image_view dst_iview; + radv_image_view_init(&dst_iview, cmd_buffer->device, + &(VkImageViewCreateInfo){ + .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, + .image = radv_image_to_handle(dst_image), + .viewType = radv_meta_get_view_type(dst_image), + .format = dst_image->vk.format, + .subresourceRange = + { + .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, + .baseMipLevel = region->dstSubresource.mipLevel, + .levelCount = 1, + .baseArrayLayer = 0, + .layerCount = 1, + }, + }, + 0, NULL); - struct radv_image_view src_iview; - radv_image_view_init(&src_iview, cmd_buffer->device, - &(VkImageViewCreateInfo){ - .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, - .image = radv_image_to_handle(src_image), - .viewType = VK_IMAGE_VIEW_TYPE_2D, - .format = src_image->vk.format, - .subresourceRange = - { - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .baseMipLevel = 0, - .levelCount = 1, - .baseArrayLayer = region->srcSubresource.baseArrayLayer + layer, - .layerCount = 1, - }, - }, - 0, NULL); - - struct radv_image_view dst_iview; - radv_image_view_init(&dst_iview, cmd_buffer->device, - &(VkImageViewCreateInfo){ - .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, - .image = radv_image_to_handle(dst_image), - .viewType = radv_meta_get_view_type(dst_image), - .format = dst_image->vk.format, - .subresourceRange = - { - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .baseMipLevel = region->dstSubresource.mipLevel, - .levelCount = 1, - .baseArrayLayer = dst_base_layer + layer, - .layerCount = 1, - }, - }, - 0, NULL); - - const VkRenderingAttachmentInfo color_atts[2] = { - { - .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO, - .imageView = radv_image_view_to_handle(&src_iview), - .imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, - .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD, - .storeOp = VK_ATTACHMENT_STORE_OP_STORE, - }, - { - .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO, - .imageView = radv_image_view_to_handle(&dst_iview), - .imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, - .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD, - .storeOp = VK_ATTACHMENT_STORE_OP_STORE, - }, - }; + const VkRenderingAttachmentInfo color_atts[2] = { + { + .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO, + .imageView = radv_image_view_to_handle(&src_iview), + .imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD, + .storeOp = VK_ATTACHMENT_STORE_OP_STORE, + }, + { + .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO, + .imageView = radv_image_view_to_handle(&dst_iview), + .imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD, + .storeOp = VK_ATTACHMENT_STORE_OP_STORE, + }, + }; - const VkRenderingInfo rendering_info = { - .sType = VK_STRUCTURE_TYPE_RENDERING_INFO, - .renderArea = resolve_area, - .layerCount = 1, - .colorAttachmentCount = 2, - .pColorAttachments = color_atts, - }; + const VkRenderingInfo rendering_info = { + .sType = VK_STRUCTURE_TYPE_RENDERING_INFO, + .renderArea = resolve_area, + .layerCount = 1, + .colorAttachmentCount = 2, + .pColorAttachments = color_atts, + }; - radv_CmdBeginRendering(radv_cmd_buffer_to_handle(cmd_buffer), &rendering_info); + radv_CmdBeginRendering(radv_cmd_buffer_to_handle(cmd_buffer), &rendering_info); - emit_resolve(cmd_buffer, src_image, dst_image, dst_iview.vk.format); + emit_resolve(cmd_buffer, src_image, dst_image, dst_iview.vk.format); - radv_CmdEndRendering(radv_cmd_buffer_to_handle(cmd_buffer)); + radv_CmdEndRendering(radv_cmd_buffer_to_handle(cmd_buffer)); - radv_image_view_finish(&src_iview); - radv_image_view_finish(&dst_iview); - } + radv_image_view_finish(&src_iview); + radv_image_view_finish(&dst_iview); radv_meta_restore(&saved_state, cmd_buffer); } @@ -577,8 +569,8 @@ radv_cmd_buffer_resolve_rendering_hw(struct radv_cmd_buffer *cmd_buffer, struct .aspectMask = dst_iview->vk.aspects, .baseMipLevel = dst_iview->vk.base_mip_level, .levelCount = dst_iview->vk.level_count, - .baseArrayLayer = dst_iview->vk.base_array_layer, - .layerCount = dst_iview->vk.layer_count, + .baseArrayLayer = 0, + .layerCount = 1, }; cmd_buffer->state.flush_bits |= radv_init_dcc(cmd_buffer, dst_img, &range, 0xffffffff); @@ -604,7 +596,7 @@ radv_cmd_buffer_resolve_rendering_hw(struct radv_cmd_buffer *cmd_buffer, struct const VkRenderingInfo rendering_info = { .sType = VK_STRUCTURE_TYPE_RENDERING_INFO, .renderArea = saved_state.render.area, - .layerCount = saved_state.render.layer_count, + .layerCount = 1, .viewMask = saved_state.render.view_mask, .colorAttachmentCount = 2, .pColorAttachments = color_atts, diff --git a/src/amd/vulkan/meta/radv_meta_resolve_fs.c b/src/amd/vulkan/meta/radv_meta_resolve_fs.c index 80111a4de36..f0e0056feed 100644 --- a/src/amd/vulkan/meta/radv_meta_resolve_fs.c +++ b/src/amd/vulkan/meta/radv_meta_resolve_fs.c @@ -729,8 +729,6 @@ radv_meta_resolve_fragment_image(struct radv_cmd_buffer *cmd_buffer, struct radv assert(vk_image_subresource_layer_count(&src_image->vk, ®ion->srcSubresource) == vk_image_subresource_layer_count(&dst_image->vk, ®ion->dstSubresource)); - const uint32_t dst_base_layer = radv_meta_get_iview_layer(dst_image, ®ion->dstSubresource, ®ion->dstOffset); - const struct VkExtent3D extent = vk_image_sanitize_extent(&src_image->vk, region->extent); const struct VkOffset3D srcOffset = vk_image_sanitize_offset(&src_image->vk, region->srcOffset); const struct VkOffset3D dstOffset = vk_image_sanitize_offset(&dst_image->vk, region->dstOffset); @@ -750,72 +748,67 @@ radv_meta_resolve_fragment_image(struct radv_cmd_buffer *cmd_buffer, struct radv radv_CmdSetScissor(radv_cmd_buffer_to_handle(cmd_buffer), 0, 1, &resolve_area); - const unsigned src_layer_count = vk_image_subresource_layer_count(&src_image->vk, ®ion->srcSubresource); - - for (uint32_t layer = 0; layer < src_layer_count; ++layer) { - - struct radv_image_view src_iview; - radv_image_view_init(&src_iview, cmd_buffer->device, - &(VkImageViewCreateInfo){ - .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, - .image = radv_image_to_handle(src_image), - .viewType = VK_IMAGE_VIEW_TYPE_2D, - .format = src_image->vk.format, - .subresourceRange = - { - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .baseMipLevel = 0, - .levelCount = 1, - .baseArrayLayer = region->srcSubresource.baseArrayLayer + layer, - .layerCount = 1, - }, - }, - 0, NULL); - - struct radv_image_view dst_iview; - radv_image_view_init(&dst_iview, cmd_buffer->device, - &(VkImageViewCreateInfo){ - .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, - .image = radv_image_to_handle(dst_image), - .viewType = radv_meta_get_view_type(dst_image), - .format = dst_image->vk.format, - .subresourceRange = - { - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .baseMipLevel = region->dstSubresource.mipLevel, - .levelCount = 1, - .baseArrayLayer = dst_base_layer + layer, - .layerCount = 1, - }, - }, - 0, NULL); - - const VkRenderingAttachmentInfo color_att = { - .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO, - .imageView = radv_image_view_to_handle(&dst_iview), - .imageLayout = layout, - .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD, - .storeOp = VK_ATTACHMENT_STORE_OP_STORE, - }; - - const VkRenderingInfo rendering_info = { - .sType = VK_STRUCTURE_TYPE_RENDERING_INFO, - .renderArea = resolve_area, - .layerCount = 1, - .colorAttachmentCount = 1, - .pColorAttachments = &color_att, - }; - - radv_CmdBeginRendering(radv_cmd_buffer_to_handle(cmd_buffer), &rendering_info); - - emit_resolve(cmd_buffer, &src_iview, &dst_iview, &(VkOffset2D){srcOffset.x, srcOffset.y}, - &(VkOffset2D){dstOffset.x, dstOffset.y}); - - radv_CmdEndRendering(radv_cmd_buffer_to_handle(cmd_buffer)); - - radv_image_view_finish(&src_iview); - radv_image_view_finish(&dst_iview); - } + struct radv_image_view src_iview; + radv_image_view_init(&src_iview, cmd_buffer->device, + &(VkImageViewCreateInfo){ + .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, + .image = radv_image_to_handle(src_image), + .viewType = VK_IMAGE_VIEW_TYPE_2D, + .format = src_image->vk.format, + .subresourceRange = + { + .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, + .baseMipLevel = 0, + .levelCount = 1, + .baseArrayLayer = 0, + .layerCount = 1, + }, + }, + 0, NULL); + + struct radv_image_view dst_iview; + radv_image_view_init(&dst_iview, cmd_buffer->device, + &(VkImageViewCreateInfo){ + .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, + .image = radv_image_to_handle(dst_image), + .viewType = radv_meta_get_view_type(dst_image), + .format = dst_image->vk.format, + .subresourceRange = + { + .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, + .baseMipLevel = region->dstSubresource.mipLevel, + .levelCount = 1, + .baseArrayLayer = 0, + .layerCount = 1, + }, + }, + 0, NULL); + + const VkRenderingAttachmentInfo color_att = { + .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO, + .imageView = radv_image_view_to_handle(&dst_iview), + .imageLayout = layout, + .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD, + .storeOp = VK_ATTACHMENT_STORE_OP_STORE, + }; + + const VkRenderingInfo rendering_info = { + .sType = VK_STRUCTURE_TYPE_RENDERING_INFO, + .renderArea = resolve_area, + .layerCount = 1, + .colorAttachmentCount = 1, + .pColorAttachments = &color_att, + }; + + radv_CmdBeginRendering(radv_cmd_buffer_to_handle(cmd_buffer), &rendering_info); + + emit_resolve(cmd_buffer, &src_iview, &dst_iview, &(VkOffset2D){srcOffset.x, srcOffset.y}, + &(VkOffset2D){dstOffset.x, dstOffset.y}); + + radv_CmdEndRendering(radv_cmd_buffer_to_handle(cmd_buffer)); + + radv_image_view_finish(&src_iview); + radv_image_view_finish(&dst_iview); radv_meta_restore(&saved_state, cmd_buffer); } @@ -854,7 +847,7 @@ radv_cmd_buffer_resolve_rendering_fs(struct radv_cmd_buffer *cmd_buffer, struct const VkRenderingInfo rendering_info = { .sType = VK_STRUCTURE_TYPE_RENDERING_INFO, .renderArea = saved_state.render.area, - .layerCount = saved_state.render.layer_count, + .layerCount = 1, .viewMask = saved_state.render.view_mask, .colorAttachmentCount = 1, .pColorAttachments = &color_att, @@ -926,7 +919,7 @@ radv_depth_stencil_resolve_rendering_fs(struct radv_cmd_buffer *cmd_buffer, VkIm const VkRenderingInfo rendering_info = { .sType = VK_STRUCTURE_TYPE_RENDERING_INFO, .renderArea = saved_state.render.area, - .layerCount = saved_state.render.layer_count, + .layerCount = 1, .viewMask = saved_state.render.view_mask, .pDepthAttachment = (dst_iview->image->vk.aspects & VK_IMAGE_ASPECT_DEPTH_BIT) ? &depth_att : NULL, .pStencilAttachment = (dst_iview->image->vk.aspects & VK_IMAGE_ASPECT_STENCIL_BIT) ? &stencil_att : NULL,
