panvk: allow resuming secondary cmdbufs with dynamic rendering

The removed assertion was originally added to enforce

> VUID-vkCmdExecuteCommands-pCommandBuffers-00100:
>  If vkCmdExecuteCommands is not being called within a render pass
>  instance, each element of pCommandBuffers must not have been recorded
>  with the VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT

However, if a render pass instance is entered with vkCmdBeginRendering,
vk_command_buffer::render_pass is unset.

Code change was done by Boris, only commit description was added.

Fixes: c2299b6642 ("panvk/csf: Implement vkCmdExecuteCommands")
Co-authored-by: Boris Brezillon <boris.brezillon@collabora.com>
Signed-off-by: Benjamin Lee <benjamin.lee@collabora.com>
Reviewed-by: Mary Guillemard <mary.guillemard@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Rebecca Mckeever <rebecca.mckeever@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31813>
This commit is contained in:
Benjamin Lee 2024-10-23 23:23:51 -07:00 committed by Marge Bot
parent 62715984f8
commit 2b1ec1c35d

View file

@ -1537,7 +1537,6 @@ panvk_per_arch(cmd_prepare_exec_cmd_for_draws)(
VkResult result;
if (secondary->flags & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT) {
assert(primary->vk.render_pass);
result = get_tiler_desc(primary);
if (result != VK_SUCCESS)
return;
@ -1605,8 +1604,13 @@ panvk_cmd_draw_indirect(struct panvk_cmd_buffer *cmdbuf,
return;
/* Layered indirect draw (VK_EXT_shader_viewport_index_layer) needs
* additional changes. */
assert(cmdbuf->state.gfx.render.layer_count == 1);
* additional changes. We allow layer_count == 0 because that happens
* when mixing dynamic rendering and secondary command buffers. Once
* we decide to support layared+indirect, we'll need to pass the
* layer_count info through the tiler descriptor, for instance by
* re-using one of the word that's flagged 'ignored' in the descriptor
* (word 14:23). */
assert(cmdbuf->state.gfx.render.layer_count <= 1);
/* MultiDrawIndirect (.maxDrawIndirectCount) needs additional changes. */
assert(draw->indirect.draw_count == 1);