radv: check if DCC is enabled when resolving different levels
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 28 Apr 2021 15:21:23 +0000 (17:21 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 3 May 2021 06:23:54 +0000 (08:23 +0200)
Fixes an assertion triggered by new CTS:
dEQP-VK.renderpass2.suballocation.multisample_resolve.*_resolve_level_*

Looks like the driver should pass a range to radv_layout_dcc_compressed().

Cc: 21.1 mesa-stable
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10502>

src/amd/vulkan/radv_meta_resolve_cs.c

index 1760639..9dc2c2b 100644 (file)
@@ -678,7 +678,8 @@ radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer, struct radv_
    uint32_t queue_mask = radv_image_queue_family_mask(dest_image, cmd_buffer->queue_family_index,
                                                       cmd_buffer->queue_family_index);
 
-   if (radv_layout_dcc_compressed(cmd_buffer->device, dest_image, dest_image_layout, false,
+   if (radv_dcc_enabled(dest_image, region->dstSubresource.mipLevel) &&
+       radv_layout_dcc_compressed(cmd_buffer->device, dest_image, dest_image_layout, false,
                                   queue_mask) &&
        (region->dstOffset.x || region->dstOffset.y || region->dstOffset.z ||
         region->extent.width != dest_image->info.width ||
@@ -760,6 +761,7 @@ radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer, struct radv_
    radv_meta_restore(&saved_state, cmd_buffer);
 
    if (!radv_image_use_dcc_image_stores(cmd_buffer->device, dest_image) &&
+       radv_dcc_enabled(dest_image, region->dstSubresource.mipLevel) &&
        radv_layout_dcc_compressed(cmd_buffer->device, dest_image, dest_image_layout, false,
                                   queue_mask)) {