[Mesa-dev] [PATCH 1/2] radv: always use view format when performing subpass resolves
Bas Nieuwenhuizen
bas at basnieuwenhuizen.nl
Wed May 29 00:00:27 UTC 2019
Don't you also need to change it in the pipeline selection? (e.g. your
newly added radv_get_resolve_pipeline())
Otherwise r-b for the eries.
On Tue, May 28, 2019 at 11:02 AM Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
>
> It makes sense to use the image view formats when resolving
> inside subpasses, while we have to use the image formats for
> normal resolves.
>
> Original patch by Philip Rebohle.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110348
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
> src/amd/vulkan/radv_meta.h | 2 ++
> src/amd/vulkan/radv_meta_resolve.c | 9 ++++++---
> src/amd/vulkan/radv_meta_resolve_cs.c | 8 ++++++--
> 3 files changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/src/amd/vulkan/radv_meta.h b/src/amd/vulkan/radv_meta.h
> index 0bd75d6c207..4a7c37be9b3 100644
> --- a/src/amd/vulkan/radv_meta.h
> +++ b/src/amd/vulkan/radv_meta.h
> @@ -183,8 +183,10 @@ void radv_expand_fmask_image_inplace(struct radv_cmd_buffer *cmd_buffer,
>
> void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer,
> struct radv_image *src_image,
> + VkFormat src_format,
> VkImageLayout src_image_layout,
> struct radv_image *dest_image,
> + VkFormat dest_format,
> VkImageLayout dest_image_layout,
> uint32_t region_count,
> const VkImageResolve *regions);
> diff --git a/src/amd/vulkan/radv_meta_resolve.c b/src/amd/vulkan/radv_meta_resolve.c
> index 1544513a9bc..b4551a98637 100644
> --- a/src/amd/vulkan/radv_meta_resolve.c
> +++ b/src/amd/vulkan/radv_meta_resolve.c
> @@ -439,8 +439,10 @@ void radv_CmdResolveImage(
> if (resolve_method == RESOLVE_COMPUTE) {
> radv_meta_resolve_compute_image(cmd_buffer,
> src_image,
> + src_image->vk_format,
> src_image_layout,
> dest_image,
> + dest_image->vk_format,
> dest_image_layout,
> region_count, regions);
> return;
> @@ -658,7 +660,8 @@ radv_cmd_buffer_resolve_subpass(struct radv_cmd_buffer *cmd_buffer)
> if (dest_att.attachment == VK_ATTACHMENT_UNUSED)
> continue;
>
> - struct radv_image *dst_img = cmd_buffer->state.framebuffer->attachments[dest_att.attachment].attachment->image;
> + struct radv_image_view *dest_iview = cmd_buffer->state.framebuffer->attachments[dest_att.attachment].attachment;
> + struct radv_image *dst_img = dest_iview->image;
>
> if (radv_image_has_dcc(dst_img)) {
> radv_initialize_dcc(cmd_buffer, dst_img, 0xffffffff);
> @@ -673,14 +676,14 @@ radv_cmd_buffer_resolve_subpass(struct radv_cmd_buffer *cmd_buffer)
>
> radv_cmd_buffer_set_subpass(cmd_buffer, &resolve_subpass);
>
> - VkResult ret = build_resolve_pipeline(cmd_buffer->device, radv_format_meta_fs_key(dst_img->vk_format));
> + VkResult ret = build_resolve_pipeline(cmd_buffer->device, radv_format_meta_fs_key(dest_iview->vk_format));
> if (ret != VK_SUCCESS) {
> cmd_buffer->record_result = ret;
> continue;
> }
>
> emit_resolve(cmd_buffer,
> - dst_img->vk_format,
> + dest_iview->vk_format,
> &(VkOffset2D) { 0, 0 },
> &(VkExtent2D) { fb->width, fb->height });
> }
> diff --git a/src/amd/vulkan/radv_meta_resolve_cs.c b/src/amd/vulkan/radv_meta_resolve_cs.c
> index 67df4800023..506e4139e93 100644
> --- a/src/amd/vulkan/radv_meta_resolve_cs.c
> +++ b/src/amd/vulkan/radv_meta_resolve_cs.c
> @@ -413,8 +413,10 @@ emit_resolve(struct radv_cmd_buffer *cmd_buffer,
>
> void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer,
> struct radv_image *src_image,
> + VkFormat src_format,
> VkImageLayout src_image_layout,
> struct radv_image *dest_image,
> + VkFormat dest_format,
> VkImageLayout dest_image_layout,
> uint32_t region_count,
> const VkImageResolve *regions)
> @@ -460,7 +462,7 @@ void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer,
> .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
> .image = radv_image_to_handle(src_image),
> .viewType = radv_meta_get_view_type(src_image),
> - .format = src_image->vk_format,
> + .format = src_format,
> .subresourceRange = {
> .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
> .baseMipLevel = region->srcSubresource.mipLevel,
> @@ -476,7 +478,7 @@ void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer,
> .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
> .image = radv_image_to_handle(dest_image),
> .viewType = radv_meta_get_view_type(dest_image),
> - .format = vk_to_non_srgb_format(dest_image->vk_format),
> + .format = vk_to_non_srgb_format(dest_format),
> .subresourceRange = {
> .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
> .baseMipLevel = region->dstSubresource.mipLevel,
> @@ -544,8 +546,10 @@ radv_cmd_buffer_resolve_subpass_cs(struct radv_cmd_buffer *cmd_buffer)
>
> radv_meta_resolve_compute_image(cmd_buffer,
> src_iview->image,
> + src_iview->vk_format,
> src_att.layout,
> dst_iview->image,
> + dst_iview->vk_format,
> dst_att.layout,
> 1, ®ion);
> }
> --
> 2.21.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list