Mesa (main): venus: refactor vn_EndCommandBuffer

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jul 15 01:04:11 UTC 2021


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

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Wed Jul 14 16:08:25 2021 -0700

venus: refactor vn_EndCommandBuffer

Add vn_cmd_submit as a wrapper to vn_instance_ring_submit.  It is also
designed such that it can be called from any of the vn_Cmd* functions.

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/11896>

---

 src/virtio/vulkan/vn_command_buffer.c | 41 ++++++++++++++++++++++++-----------
 1 file changed, 28 insertions(+), 13 deletions(-)

diff --git a/src/virtio/vulkan/vn_command_buffer.c b/src/virtio/vulkan/vn_command_buffer.c
index 65e0e45a21c..eb0a9f6d04e 100644
--- a/src/virtio/vulkan/vn_command_buffer.c
+++ b/src/virtio/vulkan/vn_command_buffer.c
@@ -654,6 +654,33 @@ vn_BeginCommandBuffer(VkCommandBuffer commandBuffer,
    return VK_SUCCESS;
 }
 
+static VkResult
+vn_cmd_submit(struct vn_command_buffer *cmd)
+{
+   struct vn_instance *instance = cmd->device->instance;
+
+   if (cmd->state != VN_COMMAND_BUFFER_STATE_RECORDING)
+      return VK_ERROR_OUT_OF_HOST_MEMORY;
+
+   vn_cs_encoder_commit(&cmd->cs);
+   if (vn_cs_encoder_get_fatal(&cmd->cs)) {
+      cmd->state = VN_COMMAND_BUFFER_STATE_INVALID;
+      vn_cs_encoder_reset(&cmd->cs);
+      return VK_ERROR_OUT_OF_HOST_MEMORY;
+   }
+
+   vn_instance_wait_roundtrip(instance, cmd->cs.current_buffer_roundtrip);
+   VkResult result = vn_instance_ring_submit(instance, &cmd->cs);
+   if (result != VK_SUCCESS) {
+      cmd->state = VN_COMMAND_BUFFER_STATE_INVALID;
+      return result;
+   }
+
+   vn_cs_encoder_reset(&cmd->cs);
+
+   return VK_SUCCESS;
+}
+
 VkResult
 vn_EndCommandBuffer(VkCommandBuffer commandBuffer)
 {
@@ -662,9 +689,6 @@ vn_EndCommandBuffer(VkCommandBuffer commandBuffer)
    struct vn_instance *instance = cmd->device->instance;
    size_t cmd_size;
 
-   if (cmd->state != VN_COMMAND_BUFFER_STATE_RECORDING)
-      return vn_error(instance, VK_ERROR_OUT_OF_HOST_MEMORY);
-
    cmd_size = vn_sizeof_vkEndCommandBuffer(commandBuffer);
    if (!vn_cs_encoder_reserve(&cmd->cs, cmd_size)) {
       cmd->state = VN_COMMAND_BUFFER_STATE_INVALID;
@@ -672,22 +696,13 @@ vn_EndCommandBuffer(VkCommandBuffer commandBuffer)
    }
 
    vn_encode_vkEndCommandBuffer(&cmd->cs, 0, commandBuffer);
-   vn_cs_encoder_commit(&cmd->cs);
 
-   if (vn_cs_encoder_get_fatal(&cmd->cs)) {
-      cmd->state = VN_COMMAND_BUFFER_STATE_INVALID;
-      return vn_error(instance, VK_ERROR_OUT_OF_HOST_MEMORY);
-   }
-
-   vn_instance_wait_roundtrip(instance, cmd->cs.current_buffer_roundtrip);
-   VkResult result = vn_instance_ring_submit(instance, &cmd->cs);
+   VkResult result = vn_cmd_submit(cmd);
    if (result != VK_SUCCESS) {
       cmd->state = VN_COMMAND_BUFFER_STATE_INVALID;
       return vn_error(instance, result);
    }
 
-   vn_cs_encoder_reset(&cmd->cs);
-
    cmd->state = VN_COMMAND_BUFFER_STATE_EXECUTABLE;
 
    return VK_SUCCESS;



More information about the mesa-commit mailing list