From 6f8fe78e3b00a97cff98a21f03a0b63ac1366c19 Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Mon, 13 Feb 2023 23:18:39 -0800 Subject: [PATCH] venus: start requiring all experimental features This is to prepare for promoting exp features to core. Signed-off-by: Yiwei Zhang Part-of: --- src/virtio/vulkan/vn_instance.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/virtio/vulkan/vn_instance.c b/src/virtio/vulkan/vn_instance.c index f09a4e5a997..fdf22bd1abe 100644 --- a/src/virtio/vulkan/vn_instance.c +++ b/src/virtio/vulkan/vn_instance.c @@ -163,28 +163,32 @@ vn_instance_init_ring(struct vn_instance *instance) return VK_SUCCESS; } -static void +static VkResult vn_instance_init_experimental_features(struct vn_instance *instance) { if (instance->renderer->info.vk_mesa_venus_protocol_spec_version != 100000) { if (VN_DEBUG(INIT)) vn_log(instance, "renderer supports no experimental features"); - return; + return VK_SUCCESS; } size_t struct_size = sizeof(instance->experimental); vn_call_vkGetVenusExperimentalFeatureData100000MESA( instance, &struct_size, &instance->experimental); + VkVenusExperimentalFeatures100000MESA *exp_feats = &instance->experimental; + /* if renderer supports multiple_timelines, the driver will use it and * globalFencing support can be assumed. */ if (instance->renderer->info.supports_multiple_timelines) - instance->experimental.globalFencing = VK_TRUE; + exp_feats->globalFencing = VK_TRUE; - /* largeRing has been enforced by mandated render server config */ - assert(instance->experimental.largeRing); + if (!exp_feats->memoryResourceAllocationSize || + !exp_feats->globalFencing || !exp_feats->largeRing || + !exp_feats->syncFdFencing) + return VK_ERROR_INITIALIZATION_FAILED; if (VN_DEBUG(INIT)) { vn_log(instance, @@ -198,6 +202,8 @@ vn_instance_init_experimental_features(struct vn_instance *instance) instance->experimental.largeRing, instance->experimental.syncFdFencing); } + + return VK_SUCCESS; } static VkResult @@ -690,7 +696,9 @@ vn_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, if (result != VK_SUCCESS) goto fail; - vn_instance_init_experimental_features(instance); + result = vn_instance_init_experimental_features(instance); + if (result != VK_SUCCESS) + goto fail; result = vn_instance_init_renderer_versions(instance); if (result != VK_SUCCESS)