mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-17 21:48:22 +02:00
venus: use drirc_gen
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41881>
This commit is contained in:
parent
86406ca87d
commit
4c66fc1383
8 changed files with 90 additions and 50 deletions
5
src/util/00-venus-defaults.conf
Normal file
5
src/util/00-venus-defaults.conf
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0"?>
|
||||
<driconf>
|
||||
<device driver="venus">
|
||||
</device>
|
||||
</driconf>
|
||||
|
|
@ -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
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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'],
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
53
src/virtio/vulkan/vn_drirc_gen.py
Normal file
53
src/virtio/vulkan/vn_drirc_gen.py
Normal file
|
|
@ -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()
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue