From 4c66fc13834679534486545fd1f805be04bf2071 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 29 May 2026 09:15:24 +0200 Subject: [PATCH] venus: use drirc_gen Signed-off-by: Samuel Pitoiset Part-of: --- src/util/00-venus-defaults.conf | 5 +++ src/util/driconf.h | 11 ------- src/util/meson.build | 1 + src/virtio/vulkan/meson.build | 15 ++++++++- src/virtio/vulkan/vn_drirc_gen.py | 53 +++++++++++++++++++++++++++++++ src/virtio/vulkan/vn_instance.c | 46 ++++++++------------------- src/virtio/vulkan/vn_instance.h | 5 ++- src/virtio/vulkan/vn_wsi.c | 4 +-- 8 files changed, 90 insertions(+), 50 deletions(-) create mode 100644 src/util/00-venus-defaults.conf create mode 100644 src/virtio/vulkan/vn_drirc_gen.py diff --git a/src/util/00-venus-defaults.conf b/src/util/00-venus-defaults.conf new file mode 100644 index 00000000000..59a879e399a --- /dev/null +++ b/src/util/00-venus-defaults.conf @@ -0,0 +1,5 @@ + + + + + diff --git a/src/util/driconf.h b/src/util/driconf.h index 26838eb6b3a..bc8f4791316 100644 --- a/src/util/driconf.h +++ b/src/util/driconf.h @@ -588,17 +588,6 @@ DRI_CONF_OPT_U64(pan_fragment_core_mask, def, 0, UINT64_MAX, \ "Bitmask of shader cores that may be used for fragment jobs. If unset, defaults to scheduling across all available cores.") -/** - * \brief venus specific configuration options - */ -#define DRI_CONF_VENUS_IMPLICIT_FENCING(def) \ - DRI_CONF_OPT_B(venus_implicit_fencing, def, \ - "Assume the virtio-gpu kernel driver supports implicit fencing") - -#define DRI_CONF_VENUS_WSI_MULTI_PLANE_MODIFIERS(def) \ - DRI_CONF_OPT_B(venus_wsi_multi_plane_modifiers, def, \ - "Enable support of multi-plane format modifiers for wsi images") - /** * \brief HASVK specific configuration options */ diff --git a/src/util/meson.build b/src/util/meson.build index 755ce713e4c..d9f7b2d9f42 100644 --- a/src/util/meson.build +++ b/src/util/meson.build @@ -222,6 +222,7 @@ foreach i : [ [with_imagination_vk, '00-pvr-defaults.conf'], [with_broadcom_vk, '00-v3dv-defaults.conf'], [with_freedreno_vk, '00-turnip-defaults.conf'], + [with_virtio_vk, '00-venus-defaults.conf'], [with_gallium_r300, '00-r300-defaults.conf'], [with_gallium_iris, '00-iris-defaults.conf'], [with_gallium_crocus, '00-crocus-defaults.conf'], diff --git a/src/virtio/vulkan/meson.build b/src/virtio/vulkan/meson.build index 19c5fc4b9d4..de89a241559 100644 --- a/src/virtio/vulkan/meson.build +++ b/src/virtio/vulkan/meson.build @@ -4,6 +4,19 @@ # based in part on anv and radv which are: # Copyright © 2017 Intel Corporation +vn_drirc = custom_target( + 'vn_drirc', + input : [files('vn_drirc_gen.py'), drirc_gen, join_paths(dir_source_root, 'src/util/00-venus-defaults.conf')], + output : ['vn_drirc.c', 'vn_drirc.h'], + command : [ + prog_python, '@INPUT0@', + '--import-path', join_paths(dir_source_root, 'src/util'), + '--drirc-src', '@OUTPUT0@', + '--drirc-hdr', '@OUTPUT1@', + '--validate', '@INPUT2@', + ], +) + vn_entrypoints = custom_target( 'vn_entrypoints', input : [vk_entrypoints_gen, vk_api_xml], @@ -139,7 +152,7 @@ endif libvulkan_virtio = shared_library( 'vulkan_virtio', - [libvn_files, vn_entrypoints, sha1_h], + [libvn_files, vn_entrypoints, vn_drirc, sha1_h], include_directories : vn_incs, link_with : vn_libs, dependencies : vn_deps, diff --git a/src/virtio/vulkan/vn_drirc_gen.py b/src/virtio/vulkan/vn_drirc_gen.py new file mode 100644 index 00000000000..57c77ac872f --- /dev/null +++ b/src/virtio/vulkan/vn_drirc_gen.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +# Copyright 2019 Google LLC +# SPDX-License-Identifier: MIT + +import argparse +import sys + + +def declare_options(): + import drirc_gen + + B = drirc_gen.DrircBool + + debug_options = [] + + performance_options = [ + B("venus_implicit_fencing", False, + "Assume the virtio-gpu kernel driver supports implicit fencing", + c_name="implicit_fencing"), + B("venus_wsi_multi_plane_modifiers", False, + "Enable support of multi-plane format modifiers for wsi images", + c_name="enable_wsi_multi_plane_modifiers"), + ] + + drirc_gen.add_common_vk_wsi_options(debug_options, performance_options, + defaults={"vk_xwayland_wait_ready": True}) + + return [ + drirc_gen.DrircSection("Performance", performance_options, c_name="performance"), + drirc_gen.DrircSection("Debugging", debug_options, c_name="debug"), + ] + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('-p', '--import-path', required=True) + parser.add_argument('--drirc-src', required=True) + parser.add_argument('--drirc-hdr', required=True) + parser.add_argument('--validate', required=True) + args = parser.parse_args() + + sys.path.insert(0, args.import_path) + import drirc_gen + + options = declare_options() + + drirc_gen.drirc_validate([args.validate], options) + + drirc_gen.drirc_generate(args.drirc_src, args.drirc_hdr, "vn", options) + + +if __name__ == '__main__': + main() diff --git a/src/virtio/vulkan/vn_instance.c b/src/virtio/vulkan/vn_instance.c index 6caf0a37acf..773a491e33d 100644 --- a/src/virtio/vulkan/vn_instance.c +++ b/src/virtio/vulkan/vn_instance.c @@ -10,7 +10,7 @@ #include "vn_instance.h" -#include "util/driconf.h" +#include "vn_drirc.h" #include "venus-protocol/vn_protocol_driver_info.h" #include "venus-protocol/vn_protocol_driver_instance.h" #include "venus-protocol/vn_protocol_driver_transport.h" @@ -68,22 +68,6 @@ static const struct vk_instance_extension_table #endif }; -static const driOptionDescription vn_dri_options[] = { - /* clang-format off */ - DRI_CONF_SECTION_PERFORMANCE - DRI_CONF_VK_X11_ENSURE_MIN_IMAGE_COUNT(false) - DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0) - DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false) - DRI_CONF_VK_XWAYLAND_WAIT_READY(true) - DRI_CONF_VENUS_IMPLICIT_FENCING(false) - DRI_CONF_VENUS_WSI_MULTI_PLANE_MODIFIERS(false) - DRI_CONF_SECTION_END - DRI_CONF_SECTION_DEBUG - DRI_CONF_VK_WSI_FORCE_BGRA8_UNORM_FIRST(false) - DRI_CONF_VK_WSI_FORCE_SWAPCHAIN_TO_CURRENT_EXTENT(false) - DRI_CONF_SECTION_END - /* clang-format on */ -}; static VkResult vn_instance_init_renderer_versions(struct vn_instance *instance) @@ -364,25 +348,21 @@ vn_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, if (result != VK_SUCCESS) goto out_ring_fini; - driParseOptionInfo(&instance->available_dri_options, vn_dri_options, - ARRAY_SIZE(vn_dri_options)); - driParseConfigFiles(&instance->dri_options, &instance->available_dri_options, - &(driConfigFileParseParams) { - .driverName = "venus", - .applicationName = instance->base.vk.app_info.app_name, - .applicationVersion = instance->base.vk.app_info.app_version, - .engineName = instance->base.vk.app_info.engine_name, - .engineVersion = instance->base.vk.app_info.engine_version, - }); + vn_parse_dri_options(&instance->drirc, + &(driConfigFileParseParams) { + .driverName = "venus", + .applicationName = instance->base.vk.app_info.app_name, + .applicationVersion = instance->base.vk.app_info.app_version, + .engineName = instance->base.vk.app_info.engine_name, + .engineVersion = instance->base.vk.app_info.engine_version, + }); instance->renderer->info.has_implicit_fencing = - driQueryOptionb(&instance->dri_options, "venus_implicit_fencing"); - instance->enable_wsi_multi_plane_modifiers = driQueryOptionb( - &instance->dri_options, "venus_wsi_multi_plane_modifiers"); + instance->drirc.performance.implicit_fencing; if (VN_DEBUG(INIT)) { vn_log(instance, "supports multi-plane wsi format modifiers: %s", - instance->enable_wsi_multi_plane_modifiers ? "yes" : "no"); + instance->drirc.performance.enable_wsi_multi_plane_modifiers ? "yes" : "no"); } const char *engine_name = instance->base.vk.app_info.engine_name; @@ -454,8 +434,8 @@ vn_DestroyInstance(VkInstance _instance, vn_renderer_destroy(instance->renderer, alloc); } - driDestroyOptionCache(&instance->dri_options); - driDestroyOptionInfo(&instance->available_dri_options); + driDestroyOptionCache(&instance->drirc.options); + driDestroyOptionInfo(&instance->drirc.available_options); vn_instance_base_fini(&instance->base); vk_free(alloc, instance); diff --git a/src/virtio/vulkan/vn_instance.h b/src/virtio/vulkan/vn_instance.h index 60e4859f1b0..87712bbac80 100644 --- a/src/virtio/vulkan/vn_instance.h +++ b/src/virtio/vulkan/vn_instance.h @@ -12,6 +12,7 @@ #define VN_INSTANCE_H #include "vn_common.h" +#include "vn_drirc.h" #include "vn_renderer_util.h" @@ -31,9 +32,7 @@ struct vn_instance { struct vn_instance_base base; - struct driOptionCache dri_options; - struct driOptionCache available_dri_options; - bool enable_wsi_multi_plane_modifiers; + struct vn_drirc drirc; struct vn_renderer *renderer; diff --git a/src/virtio/vulkan/vn_wsi.c b/src/virtio/vulkan/vn_wsi.c index f64cabae8d1..18b181e98b5 100644 --- a/src/virtio/vulkan/vn_wsi.c +++ b/src/virtio/vulkan/vn_wsi.c @@ -178,7 +178,7 @@ vn_wsi_init(struct vn_physical_device *physical_dev) &physical_dev->instance->base.vk.alloc; VkResult result = wsi_device_init( &physical_dev->wsi_device, vn_physical_device_to_handle(physical_dev), - vn_wsi_proc_addr, alloc, -1, &physical_dev->instance->dri_options, + vn_wsi_proc_addr, alloc, -1, &physical_dev->instance->drirc.options, &(struct wsi_device_options){ .sw_device = use_sw_device, .extra_xwayland_image = true, @@ -368,7 +368,7 @@ vn_wsi_validate_image_format_info(struct vn_physical_device *physical_dev, * both plane counts to 1 while virgl may be involved. */ if (modifier_info && - !physical_dev->instance->enable_wsi_multi_plane_modifiers && + !physical_dev->instance->drirc.performance.enable_wsi_multi_plane_modifiers && modifier_info->drmFormatModifier != DRM_FORMAT_MOD_LINEAR) { const uint32_t plane_count = vn_modifier_plane_count( physical_dev, info->format, modifier_info->drmFormatModifier);