Mesa (main): venus: no roundtrip needed for shmem backed by BLOB_MEM_HOST3D

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Feb 11 21:25:55 UTC 2022


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

Author: Yiwei Zhang <zzyiwei at chromium.org>
Date:   Sat Jan 29 06:09:36 2022 +0000

venus: no roundtrip needed for shmem backed by BLOB_MEM_HOST3D

A successful DRM_IOCTL_VIRTGPU_MAP on BLOB_MEM_HOST3D implies a
roundtrip.

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

---

 src/virtio/vulkan/vn_command_buffer.c |  4 +++-
 src/virtio/vulkan/vn_cs.c             | 16 ++++++++++------
 src/virtio/vulkan/vn_cs.h             |  2 ++
 src/virtio/vulkan/vn_instance.c       |  8 ++++++--
 4 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/src/virtio/vulkan/vn_command_buffer.c b/src/virtio/vulkan/vn_command_buffer.c
index 00d5193c7ae..f4914775913 100644
--- a/src/virtio/vulkan/vn_command_buffer.c
+++ b/src/virtio/vulkan/vn_command_buffer.c
@@ -689,7 +689,9 @@ vn_cmd_submit(struct vn_command_buffer *cmd)
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
 
-   vn_instance_wait_roundtrip(instance, cmd->cs.current_buffer_roundtrip);
+   if (unlikely(!instance->renderer->info.supports_blob_id_0))
+      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;
diff --git a/src/virtio/vulkan/vn_cs.c b/src/virtio/vulkan/vn_cs.c
index d1c8a9baa6e..d56bfe22c49 100644
--- a/src/virtio/vulkan/vn_cs.c
+++ b/src/virtio/vulkan/vn_cs.c
@@ -232,17 +232,21 @@ vn_cs_encoder_reserve_internal(struct vn_cs_encoder *enc, size_t size)
    if (!shmem)
       return false;
 
-   uint32_t roundtrip;
-   VkResult result = vn_instance_submit_roundtrip(enc->instance, &roundtrip);
-   if (result != VK_SUCCESS) {
-      vn_renderer_shmem_unref(enc->instance->renderer, shmem);
-      return false;
+   if (unlikely(!enc->instance->renderer->info.supports_blob_id_0)) {
+      uint32_t roundtrip;
+      VkResult result =
+         vn_instance_submit_roundtrip(enc->instance, &roundtrip);
+      if (result != VK_SUCCESS) {
+         vn_renderer_shmem_unref(enc->instance->renderer, shmem);
+         return false;
+      }
+
+      enc->current_buffer_roundtrip = roundtrip;
    }
 
    vn_cs_encoder_add_buffer(enc, shmem, buf_offset,
                             shmem->mmap_ptr + buf_offset, buf_size);
    enc->current_buffer_size = buf_size;
-   enc->current_buffer_roundtrip = roundtrip;
 
    vn_cs_encoder_sanity_check(enc);
 
diff --git a/src/virtio/vulkan/vn_cs.h b/src/virtio/vulkan/vn_cs.h
index 989b0f5d433..3a04738fee1 100644
--- a/src/virtio/vulkan/vn_cs.h
+++ b/src/virtio/vulkan/vn_cs.h
@@ -65,6 +65,8 @@ struct vn_cs_encoder {
 
    /* the current buffer is buffers[buffer_count - 1].shmem */
    size_t current_buffer_size;
+
+   /* TODO remove when blob_id_0 support gets required */
    uint32_t current_buffer_roundtrip;
 
    /* cur is the write pointer.  When cur passes end, the slow path is
diff --git a/src/virtio/vulkan/vn_instance.c b/src/virtio/vulkan/vn_instance.c
index 9ba98e340f8..6ebf5061f33 100644
--- a/src/virtio/vulkan/vn_instance.c
+++ b/src/virtio/vulkan/vn_instance.c
@@ -491,7 +491,9 @@ vn_instance_ring_cs_upload_locked(struct vn_instance *instance,
 
    vn_cs_encoder_write(upload, cs_size, cs_data, cs_size);
    vn_cs_encoder_commit(upload);
-   vn_instance_wait_roundtrip(instance, upload->current_buffer_roundtrip);
+
+   if (unlikely(!instance->renderer->info.supports_blob_id_0))
+      vn_instance_wait_roundtrip(instance, upload->current_buffer_roundtrip);
 
    return upload;
 }
@@ -582,7 +584,9 @@ vn_instance_get_reply_shmem_locked(struct vn_instance *instance,
        * created
        */
       if (likely(instance->ring.id)) {
-         vn_instance_roundtrip(instance);
+         if (unlikely(!instance->renderer->info.supports_blob_id_0))
+            vn_instance_roundtrip(instance);
+
          vn_instance_ring_submit_locked(instance, &local_enc, NULL, NULL);
       } else {
          vn_renderer_submit_simple(instance->renderer,



More information about the mesa-commit mailing list