Module: Mesa Branch: main Commit: 540242f9ff62950424217931159776c469efcb3c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=540242f9ff62950424217931159776c469efcb3c
Author: Yiwei Zhang <[email protected]> Date: Mon Jul 10 15:50:27 2023 -0700 venus: add helpers to track subpass view mask Signed-off-by: Yiwei Zhang <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24103> --- src/virtio/vulkan/vn_command_buffer.c | 37 +++++++++++++++-------------------- src/virtio/vulkan/vn_render_pass.h | 8 ++++++++ 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/virtio/vulkan/vn_command_buffer.c b/src/virtio/vulkan/vn_command_buffer.c index 85c8f7502c0..e045f822c8e 100644 --- a/src/virtio/vulkan/vn_command_buffer.c +++ b/src/virtio/vulkan/vn_command_buffer.c @@ -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 = diff --git a/src/virtio/vulkan/vn_render_pass.h b/src/virtio/vulkan/vn_render_pass.h index 19c1878016b..3b0941293ea 100644 --- a/src/virtio/vulkan/vn_render_pass.h +++ b/src/virtio/vulkan/vn_render_pass.h @@ -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 */
