venus: add helpers to track subpass view mask

Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24103>
This commit is contained in:
Yiwei Zhang 2023-07-10 15:50:27 -07:00 committed by Marge Bot
parent 311a0eeb21
commit 540242f9ff
2 changed files with 24 additions and 21 deletions

View file

@ -591,7 +591,7 @@ vn_cmd_begin_render_pass(struct vn_command_buffer *cmd,
cmd->in_render_pass = true;
cmd->render_pass = pass;
cmd->subpass_index = 0;
cmd->view_mask = cmd->render_pass->subpasses[0].view_mask;
cmd->view_mask = vn_render_pass_get_subpass_view_mask(pass, 0);
if (!pass->present_count)
return;
@ -662,6 +662,13 @@ vn_cmd_end_render_pass(struct vn_command_buffer *cmd)
vk_free(&cmd->pool->allocator, images);
}
static inline void
vn_cmd_next_subpass(struct vn_command_buffer *cmd)
{
cmd->view_mask = vn_render_pass_get_subpass_view_mask(
cmd->render_pass, ++cmd->subpass_index);
}
/* command pool commands */
VkResult
@ -1044,8 +1051,8 @@ vn_BeginCommandBuffer(VkCommandBuffer commandBuffer,
/* Store the viewMask from the inherited render pass subpass for
* query feedback.
*/
cmd->view_mask =
pass->subpasses[inheritance_info->subpass].view_mask;
cmd->view_mask = vn_render_pass_get_subpass_view_mask(
pass, inheritance_info->subpass);
} else {
/* Store the viewMask from the
* VkCommandBufferInheritanceRenderingInfo.
@ -1919,10 +1926,7 @@ vn_CmdBeginRenderPass(VkCommandBuffer commandBuffer,
void
vn_CmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents)
{
struct vn_command_buffer *cmd =
vn_command_buffer_from_handle(commandBuffer);
cmd->view_mask =
cmd->render_pass->subpasses[++cmd->subpass_index].view_mask;
vn_cmd_next_subpass(vn_command_buffer_from_handle(commandBuffer));
VN_CMD_ENQUEUE(vkCmdNextSubpass, commandBuffer, contents);
}
@ -1930,12 +1934,9 @@ vn_CmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents)
void
vn_CmdEndRenderPass(VkCommandBuffer commandBuffer)
{
struct vn_command_buffer *cmd =
vn_command_buffer_from_handle(commandBuffer);
VN_CMD_ENQUEUE(vkCmdEndRenderPass, commandBuffer);
vn_cmd_end_render_pass(cmd);
vn_cmd_end_render_pass(vn_command_buffer_from_handle(commandBuffer));
}
void
@ -1960,10 +1961,7 @@ vn_CmdNextSubpass2(VkCommandBuffer commandBuffer,
const VkSubpassBeginInfo *pSubpassBeginInfo,
const VkSubpassEndInfo *pSubpassEndInfo)
{
struct vn_command_buffer *cmd =
vn_command_buffer_from_handle(commandBuffer);
cmd->view_mask =
cmd->render_pass->subpasses[++cmd->subpass_index].view_mask;
vn_cmd_next_subpass(vn_command_buffer_from_handle(commandBuffer));
VN_CMD_ENQUEUE(vkCmdNextSubpass2, commandBuffer, pSubpassBeginInfo,
pSubpassEndInfo);
@ -1973,12 +1971,9 @@ void
vn_CmdEndRenderPass2(VkCommandBuffer commandBuffer,
const VkSubpassEndInfo *pSubpassEndInfo)
{
struct vn_command_buffer *cmd =
vn_command_buffer_from_handle(commandBuffer);
VN_CMD_ENQUEUE(vkCmdEndRenderPass2, commandBuffer, pSubpassEndInfo);
vn_cmd_end_render_pass(cmd);
vn_cmd_end_render_pass(vn_command_buffer_from_handle(commandBuffer));
}
void
@ -1986,11 +1981,11 @@ vn_CmdExecuteCommands(VkCommandBuffer commandBuffer,
uint32_t commandBufferCount,
const VkCommandBuffer *pCommandBuffers)
{
struct vn_command_buffer *primary_cmd =
vn_command_buffer_from_handle(commandBuffer);
VN_CMD_ENQUEUE(vkCmdExecuteCommands, commandBuffer, commandBufferCount,
pCommandBuffers);
struct vn_command_buffer *primary_cmd =
vn_command_buffer_from_handle(commandBuffer);
if (primary_cmd->in_render_pass) {
for (uint32_t i = 0; i < commandBufferCount; i++) {
struct vn_command_buffer *secondary_cmd =

View file

@ -73,4 +73,12 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(vn_framebuffer,
VkFramebuffer,
VK_OBJECT_TYPE_FRAMEBUFFER)
static inline uint32_t
vn_render_pass_get_subpass_view_mask(const struct vn_render_pass *render_pass,
uint32_t subpass_index)
{
assert(subpass_index < render_pass->subpass_count);
return render_pass->subpasses[subpass_index].view_mask;
}
#endif /* VN_RENDER_PASS_H */