Mesa (main): venus: remember cmd buffer render pass and framebuffer

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jun 3 06:13:17 UTC 2021


Module: Mesa
Branch: main
Commit: ccf85f6604ff5842e177604c208933dd3467a588
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=ccf85f6604ff5842e177604c208933dd3467a588

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Wed May  5 12:24:21 2021 -0700

venus: remember cmd buffer render pass and framebuffer

We need them for wsi queue ownership transfer.

Signed-off-by: Chia-I Wu <olvaffe at gmail.com>
Reviewed-by: Yiwei Zhang <zzyiwei at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10709>

---

 src/virtio/vulkan/vn_command_buffer.c | 42 +++++++++++++++++++++++++++++++++++
 src/virtio/vulkan/vn_command_buffer.h |  3 +++
 2 files changed, 45 insertions(+)

diff --git a/src/virtio/vulkan/vn_command_buffer.c b/src/virtio/vulkan/vn_command_buffer.c
index 1cfde32bacb..1a8d2146775 100644
--- a/src/virtio/vulkan/vn_command_buffer.c
+++ b/src/virtio/vulkan/vn_command_buffer.c
@@ -14,6 +14,24 @@
 #include "venus-protocol/vn_protocol_driver_command_pool.h"
 
 #include "vn_device.h"
+#include "vn_render_pass.h"
+
+static void
+vn_cmd_begin_render_pass(struct vn_command_buffer *cmd,
+                         const struct vn_render_pass *pass,
+                         const struct vn_framebuffer *fb,
+                         const VkRenderPassBeginInfo *begin_info)
+{
+   cmd->builder.render_pass = pass;
+   cmd->builder.framebuffer = fb;
+}
+
+static void
+vn_cmd_end_render_pass(struct vn_command_buffer *cmd)
+{
+   cmd->builder.render_pass = NULL;
+   cmd->builder.framebuffer = NULL;
+}
 
 /* command pool commands */
 
@@ -229,6 +247,16 @@ vn_BeginCommandBuffer(VkCommandBuffer commandBuffer,
 
    cmd->state = VN_COMMAND_BUFFER_STATE_RECORDING;
 
+   if (cmd->level == VK_COMMAND_BUFFER_LEVEL_SECONDARY &&
+       (pBeginInfo->flags &
+        VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)) {
+      const VkCommandBufferInheritanceInfo *inheritance_info =
+         pBeginInfo->pInheritanceInfo;
+      vn_cmd_begin_render_pass(
+         cmd, vn_render_pass_from_handle(inheritance_info->renderPass),
+         vn_framebuffer_from_handle(inheritance_info->framebuffer), NULL);
+   }
+
    return VK_SUCCESS;
 }
 
@@ -1196,6 +1224,11 @@ vn_CmdBeginRenderPass(VkCommandBuffer commandBuffer,
       vn_command_buffer_from_handle(commandBuffer);
    size_t cmd_size;
 
+   vn_cmd_begin_render_pass(
+      cmd, vn_render_pass_from_handle(pRenderPassBegin->renderPass),
+      vn_framebuffer_from_handle(pRenderPassBegin->framebuffer),
+      pRenderPassBegin);
+
    cmd_size = vn_sizeof_vkCmdBeginRenderPass(commandBuffer, pRenderPassBegin,
                                              contents);
    if (!vn_cs_encoder_reserve(&cmd->cs, cmd_size))
@@ -1231,6 +1264,8 @@ vn_CmdEndRenderPass(VkCommandBuffer commandBuffer)
       return;
 
    vn_encode_vkCmdEndRenderPass(&cmd->cs, 0, commandBuffer);
+
+   vn_cmd_end_render_pass(cmd);
 }
 
 void
@@ -1242,6 +1277,11 @@ vn_CmdBeginRenderPass2(VkCommandBuffer commandBuffer,
       vn_command_buffer_from_handle(commandBuffer);
    size_t cmd_size;
 
+   vn_cmd_begin_render_pass(
+      cmd, vn_render_pass_from_handle(pRenderPassBegin->renderPass),
+      vn_framebuffer_from_handle(pRenderPassBegin->framebuffer),
+      pRenderPassBegin);
+
    cmd_size = vn_sizeof_vkCmdBeginRenderPass2(commandBuffer, pRenderPassBegin,
                                               pSubpassBeginInfo);
    if (!vn_cs_encoder_reserve(&cmd->cs, cmd_size))
@@ -1282,6 +1322,8 @@ vn_CmdEndRenderPass2(VkCommandBuffer commandBuffer,
       return;
 
    vn_encode_vkCmdEndRenderPass2(&cmd->cs, 0, commandBuffer, pSubpassEndInfo);
+
+   vn_cmd_end_render_pass(cmd);
 }
 
 void
diff --git a/src/virtio/vulkan/vn_command_buffer.h b/src/virtio/vulkan/vn_command_buffer.h
index a0a51d584b4..852a5dab354 100644
--- a/src/virtio/vulkan/vn_command_buffer.h
+++ b/src/virtio/vulkan/vn_command_buffer.h
@@ -39,6 +39,9 @@ struct vn_command_buffer_builder {
    /* for scrubbing VK_IMAGE_LAYOUT_PRESENT_SRC_KHR */
    uint32_t image_barrier_count;
    VkImageMemoryBarrier *image_barriers;
+
+   const struct vn_render_pass *render_pass;
+   const struct vn_framebuffer *framebuffer;
 };
 
 struct vn_command_buffer {



More information about the mesa-commit mailing list