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