radv: add missing DB flush after depth/stencil resolve operations
I thought this was a bug in CTS but the Vulkan spec says: "VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT specifies write access to a color, resolve, or depth/stencil resolve attachment during a render pass or via certain subpass load and store operations." So, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT is used to synchronize depth/stencil resolve attachments. Yes, it's counterintuitive. This can't actually be fixed properly for now because RADV performs the end subpass barrier *before* resolve attachments instead of after. Cc: 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/8138>
This commit is contained in:
parent
b50d3e5760
commit
7880faccc5
|
@ -787,6 +787,26 @@ radv_cmd_buffer_resolve_subpass(struct radv_cmd_buffer *cmd_buffer)
|
|||
subpass->stencil_resolve_mode);
|
||||
}
|
||||
}
|
||||
|
||||
/* From the Vulkan spec 1.2.165:
|
||||
*
|
||||
* "VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT specifies
|
||||
* write access to a color, resolve, or depth/stencil
|
||||
* resolve attachment during a render pass or via
|
||||
* certain subpass load and store operations."
|
||||
*
|
||||
* Yes, it's counterintuitive but it makes sense because ds
|
||||
* resolve operations happen late at the end of the subpass.
|
||||
*
|
||||
* That said, RADV is wrong because it executes the subpass
|
||||
* end barrier *before* any subpass resolves instead of after.
|
||||
*
|
||||
* TODO: Fix this properly by executing subpass end barriers
|
||||
* after subpass resolves.
|
||||
*/
|
||||
cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_FLUSH_AND_INV_DB;
|
||||
if (radv_image_has_htile(dst_iview->image))
|
||||
cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_FLUSH_AND_INV_DB_META;
|
||||
}
|
||||
|
||||
if (!subpass->has_color_resolve)
|
||||
|
|
Loading…
Reference in New Issue