radv: set the subpass before any initial subpass transitions
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 30 May 2019 13:13:59 +0000 (15:13 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 6 Jun 2019 08:00:29 +0000 (10:00 +0200)
This might fix initial subpass transitions when multiview is used.
Noticed while implementing sample locations during layout transitions.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-By: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/amd/vulkan/radv_cmd_buffer.c

index 12e112f95c87cec5a6383b99784a44ee186a5410..b570bda35aedb4b9ec52292abf0ab817626080b8 100644 (file)
@@ -2654,7 +2654,7 @@ static void radv_handle_subpass_image_transition(struct radv_cmd_buffer *cmd_buf
        range.baseArrayLayer = view->base_layer;
        range.layerCount = cmd_buffer->state.framebuffer->layers;
 
-       if (cmd_buffer->state.subpass && cmd_buffer->state.subpass->view_mask) {
+       if (cmd_buffer->state.subpass->view_mask) {
                /* If the current subpass uses multiview, the driver might have
                 * performed a fast color/depth clear to the whole image
                 * (including all layers). To make sure the driver will
@@ -3691,6 +3691,8 @@ radv_cmd_buffer_begin_subpass(struct radv_cmd_buffer *cmd_buffer,
 
        radv_subpass_barrier(cmd_buffer, &subpass->start_barrier);
 
+       radv_cmd_buffer_set_subpass(cmd_buffer, subpass);
+
        for (uint32_t i = 0; i < subpass->attachment_count; ++i) {
                const uint32_t a = subpass->attachments[i].attachment;
                if (a == VK_ATTACHMENT_UNUSED)
@@ -3700,7 +3702,6 @@ radv_cmd_buffer_begin_subpass(struct radv_cmd_buffer *cmd_buffer,
                                                     subpass->attachments[i]);
        }
 
-       radv_cmd_buffer_set_subpass(cmd_buffer, subpass);
        radv_cmd_buffer_clear_subpass(cmd_buffer);
 
        assert(cmd_buffer->cs->cdw <= cdw_max);