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