[Mesa-dev] [PATCH] radv: move fast clear before resolve into own loop.

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Tue Mar 7 00:46:13 UTC 2017


Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

On Tue, Mar 7, 2017 at 12:33 AM, Dave Airlie <airlied at gmail.com> wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> Don't fast clear inside the meta loop as things get
> confused, fixes a crash in:
> dEQP-VK.api.copy_and_blit.resolve_image.whole_array_image.2_bit
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/amd/vulkan/radv_meta_resolve_cs.c | 23 +++++++++++++++--------
>  1 file changed, 15 insertions(+), 8 deletions(-)
>
> diff --git a/src/amd/vulkan/radv_meta_resolve_cs.c b/src/amd/vulkan/radv_meta_resolve_cs.c
> index 9cb4ce8..3272d1f 100644
> --- a/src/amd/vulkan/radv_meta_resolve_cs.c
> +++ b/src/amd/vulkan/radv_meta_resolve_cs.c
> @@ -326,6 +326,21 @@ void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer,
>         struct radv_meta_saved_compute_state saved_state;
>         const uint32_t samples = src_image->samples;
>         const uint32_t samples_log2 = ffs(samples) - 1;
> +
> +       for (uint32_t r = 0; r < region_count; ++r) {
> +               const VkImageResolve *region = &regions[r];
> +               const uint32_t src_base_layer =
> +                       radv_meta_get_iview_layer(src_image, &region->srcSubresource,
> +                                                 &region->srcOffset);
> +               VkImageSubresourceRange range;
> +               range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
> +               range.baseMipLevel = region->srcSubresource.mipLevel;
> +               range.levelCount = 1;
> +               range.baseArrayLayer = src_base_layer;
> +               range.layerCount = region->srcSubresource.layerCount;
> +               radv_fast_clear_flush_image_inplace(cmd_buffer, src_image, &range);
> +       }
> +
>         radv_meta_save_compute(&saved_state, cmd_buffer, 16);
>
>         for (uint32_t r = 0; r < region_count; ++r) {
> @@ -350,14 +365,6 @@ void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer,
>                 const struct VkOffset3D dstOffset =
>                         radv_sanitize_image_offset(dest_image->type, region->dstOffset);
>
> -               VkImageSubresourceRange range;
> -               range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
> -               range.baseMipLevel = region->srcSubresource.mipLevel;
> -               range.levelCount = 1;
> -               range.baseArrayLayer = src_base_layer;
> -               range.layerCount = region->srcSubresource.layerCount;
> -               radv_fast_clear_flush_image_inplace(cmd_buffer, src_image, &range);
> -
>                 for (uint32_t layer = 0; layer < region->srcSubresource.layerCount;
>                      ++layer) {
>
> --
> 2.7.4
>
> _______________________________________________
> 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