Mesa (main): venus: store extension mask in renderer info

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Sat Apr 9 00:24:57 UTC 2022


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

Author: Yiwei Zhang <zzyiwei at chromium.org>
Date:   Fri Mar 18 07:08:10 2022 +0000

venus: store extension mask in renderer info

Signed-off-by: Yiwei Zhang <zzyiwei at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15495>

---

 src/virtio/virtio-gpu/venus_hw.h        | 10 ++++++++++
 src/virtio/vulkan/vn_renderer.h         |  2 ++
 src/virtio/vulkan/vn_renderer_virtgpu.c |  6 ++++++
 src/virtio/vulkan/vn_renderer_vtest.c   |  6 ++++++
 4 files changed, 24 insertions(+)

diff --git a/src/virtio/virtio-gpu/venus_hw.h b/src/virtio/virtio-gpu/venus_hw.h
index 4597a2055f6..3b08cdf9d5d 100644
--- a/src/virtio/virtio-gpu/venus_hw.h
+++ b/src/virtio/virtio-gpu/venus_hw.h
@@ -35,6 +35,16 @@ struct virgl_renderer_capset_venus {
 
    /* TODO revisit this when we bump up wire_format_version to 1 */
    uint32_t supports_blob_id_0;
+
+   /* Extension number N, where N is defined by the Vulkan spec, corresponds
+    * to bit [N / 32] & (1 << N % 32). The below mask1 covers the first 1023
+    * Vulkan extensions (numbered from 1 to 1023).
+    *
+    * Bit (mask1[0] & 0x1) is used for backward compatibility purpose. When
+    * that bit is set, the extension mask(s) are valid. Otherwise, all the
+    * extensions are assumed to be supported by the renderer side protocol.
+    */
+   uint32_t vk_extension_mask1[32];
 };
 #endif
 
diff --git a/src/virtio/vulkan/vn_renderer.h b/src/virtio/vulkan/vn_renderer.h
index 5bf4d1217a8..97325e008ae 100644
--- a/src/virtio/vulkan/vn_renderer.h
+++ b/src/virtio/vulkan/vn_renderer.h
@@ -66,6 +66,8 @@ struct vn_renderer_info {
    uint32_t vk_ext_command_serialization_spec_version;
    uint32_t vk_mesa_venus_protocol_spec_version;
    uint32_t supports_blob_id_0;
+   /* combined mask for vk_extension_mask1, 2,..., N */
+   uint32_t vk_extension_mask[32];
 };
 
 struct vn_renderer_submit_batch {
diff --git a/src/virtio/vulkan/vn_renderer_virtgpu.c b/src/virtio/vulkan/vn_renderer_virtgpu.c
index 25ccec4b8af..edbbc6d3487 100644
--- a/src/virtio/vulkan/vn_renderer_virtgpu.c
+++ b/src/virtio/vulkan/vn_renderer_virtgpu.c
@@ -1409,6 +1409,12 @@ virtgpu_init_renderer_info(struct virtgpu *gpu)
       capset->vk_mesa_venus_protocol_spec_version;
    info->supports_blob_id_0 = capset->supports_blob_id_0;
 
+   /* ensure vk_extension_mask is large enough to hold all capset masks */
+   STATIC_ASSERT(sizeof(info->vk_extension_mask) >=
+                 sizeof(capset->vk_extension_mask1));
+   memcpy(info->vk_extension_mask, capset->vk_extension_mask1,
+          sizeof(capset->vk_extension_mask1));
+
    if (gpu->bo_blob_mem == VIRTGPU_BLOB_MEM_GUEST_VRAM)
       info->has_guest_vram = true;
 }
diff --git a/src/virtio/vulkan/vn_renderer_vtest.c b/src/virtio/vulkan/vn_renderer_vtest.c
index c51d784c57a..026b00b662f 100644
--- a/src/virtio/vulkan/vn_renderer_vtest.c
+++ b/src/virtio/vulkan/vn_renderer_vtest.c
@@ -945,6 +945,12 @@ vtest_init_renderer_info(struct vtest *vtest)
    info->vk_mesa_venus_protocol_spec_version =
       capset->vk_mesa_venus_protocol_spec_version;
    info->supports_blob_id_0 = capset->supports_blob_id_0;
+
+   /* ensure vk_extension_mask is large enough to hold all capset masks */
+   STATIC_ASSERT(sizeof(info->vk_extension_mask) >=
+                 sizeof(capset->vk_extension_mask1));
+   memcpy(info->vk_extension_mask, capset->vk_extension_mask1,
+          sizeof(capset->vk_extension_mask1));
 }
 
 static void



More information about the mesa-commit mailing list