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