v3dv: 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:
Samuel Pitoiset 2026-05-29 09:09:59 +02:00 committed by Marge Bot
parent 8b422baac8
commit 86406ca87d
7 changed files with 87 additions and 39 deletions

View file

@ -1,6 +1,19 @@
# Copyright © 2019 Raspberry Pi Ltd
# SPDX-License-Identifier: MIT
v3dv_drirc = custom_target(
'v3dv_drirc',
input : [files('v3dv_drirc_gen.py'), drirc_gen, join_paths(dir_source_root, 'src/util/00-v3dv-defaults.conf')],
output : ['v3dv_drirc.c', 'v3dv_drirc.h'],
command : [
prog_python, '@INPUT0@',
'--import-path', join_paths(dir_source_root, 'src/util'),
'--drirc-src', '@OUTPUT0@',
'--drirc-hdr', '@OUTPUT1@',
'--validate', '@INPUT2@',
],
)
v3dv_entrypoints = custom_target(
'v3dv_entrypoints',
input : [vk_entrypoints_gen, vk_api_xml],
@ -92,7 +105,7 @@ per_version_libs = []
foreach ver : v3d_versions
per_version_libs += static_library(
'v3dv-v' + ver,
[files_per_version, v3d_xml_pack, v3dv_entrypoints[0]],
[files_per_version, v3d_xml_pack, v3dv_entrypoints[0], v3dv_drirc[1]],
include_directories : [
inc_src, inc_include, inc_broadcom,
inc_util,
@ -105,7 +118,7 @@ endforeach
libvulkan_broadcom = shared_library(
'vulkan_broadcom',
[libv3dv_files, v3dv_entrypoints, sha1_h],
[libv3dv_files, v3dv_entrypoints, v3dv_drirc, sha1_h],
include_directories : [
inc_include, inc_src, inc_broadcom, inc_util,
],

View file

@ -50,7 +50,7 @@
#include "util/build_id.h"
#include "util/disk_cache.h"
#include "util/driconf.h"
#include "v3dv_drirc.h"
#include "util/os_file.h"
#include "util/os_misc.h"
#include "util/u_atomic.h"
@ -594,35 +594,17 @@ static const struct debug_control v3dv_pipeline_cache_control[] = {
{ NULL, 0 },
};
static const driOptionDescription v3dv_dri_options[] = {
DRI_CONF_SECTION_PERFORMANCE
DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
DRI_CONF_VK_X11_ENSURE_MIN_IMAGE_COUNT(false)
DRI_CONF_VK_XWAYLAND_WAIT_READY(true)
DRI_CONF_SECTION_END
DRI_CONF_SECTION_MISCELLANEOUS
DRI_CONF_HEAP_MEMORY_PERCENT(OS_GPU_HEAP_SIZE_HEURISTIC)
DRI_CONF_SECTION_END
};
static void
v3dv_init_dri_options(struct v3dv_instance *instance)
{
driParseOptionInfo(&instance->available_dri_options, v3dv_dri_options,
ARRAY_SIZE(v3dv_dri_options));
driParseConfigFiles(&instance->dri_options, &instance->available_dri_options,
&(driConfigFileParseParams) {
.driverName = "v3dv",
.applicationName = instance->vk.app_info.app_name,
.applicationVersion = instance->vk.app_info.app_version,
.engineName = instance->vk.app_info.engine_name,
.engineVersion = instance->vk.app_info.engine_version,
});
instance->heap_memory_percent =
driQueryOptionf(&instance->dri_options, "heap_memory_percent");
v3dv_parse_dri_options(&instance->drirc,
&(driConfigFileParseParams) {
.driverName = "v3dv",
.applicationName = instance->vk.app_info.app_name,
.applicationVersion = instance->vk.app_info.app_version,
.engineName = instance->vk.app_info.engine_name,
.engineVersion = instance->vk.app_info.engine_version,
});
}
VKAPI_ATTR VkResult VKAPI_CALL
@ -765,8 +747,8 @@ v3dv_DestroyInstance(VkInstance _instance,
VG(VALGRIND_DESTROY_MEMPOOL(instance));
driDestroyOptionCache(&instance->dri_options);
driDestroyOptionInfo(&instance->available_dri_options);
driDestroyOptionCache(&instance->drirc.options);
driDestroyOptionInfo(&instance->drirc.available_options);
vk_instance_finish(&instance->vk);
vk_free(&instance->vk.alloc, instance);
@ -779,8 +761,8 @@ compute_heap_size(struct v3dv_instance *instance)
ASSERTED const uint64_t MAX_HEAP_SIZE = 4ull * 1024ull * 1024ull * 1024ull;
uint64_t memory;
#if !USE_V3D_SIMULATOR
memory = os_get_gpu_heap_size(instance->heap_memory_percent,
&instance->heap_memory_percent);
memory = os_get_gpu_heap_size(instance->drirc.misc.heap_memory_percent,
&instance->drirc.misc.heap_memory_percent);
return MIN2(MAX_HEAP_SIZE, memory);
#else
/* Memory allocated by the simulator is fully dedicated for the GPU so we

View file

@ -37,7 +37,7 @@
#include "common/v3d_device_info.h"
#include "wsi_common.h"
#include "util/sparse_array.h"
#include "util/xmlconfig.h"
#include "v3dv_drirc.h"
struct v3dv_event;
struct v3dv_format;
@ -156,10 +156,7 @@ bool v3dv_meta_can_use_tlb(struct v3dv_image *image,
struct v3dv_instance {
struct vk_instance vk;
struct driOptionCache dri_options;
struct driOptionCache available_dri_options;
float heap_memory_percent;
struct v3dv_drirc drirc;
bool pipeline_cache_enabled;
bool default_pipeline_cache_enabled;

View file

@ -0,0 +1,50 @@
#!/usr/bin/env python3
# Copyright © 2019 Raspberry Pi Ltd
# SPDX-License-Identifier: MIT
import argparse
import sys
VALID_COMMON_VK_OPTIONS = {
"heap_memory_percent",
}
def declare_options():
import drirc_gen
debug_options = []
features_options = []
performance_options = []
misc_options = []
drirc_gen.add_common_vk_options(debug_options, features_options, misc_options,
valid_options=VALID_COMMON_VK_OPTIONS)
drirc_gen.add_common_vk_wsi_options(debug_options, performance_options,
defaults={"vk_xwayland_wait_ready": True})
return [
drirc_gen.DrircSection("Debugging", debug_options, c_name="debug"),
drirc_gen.DrircSection("Performance", performance_options, c_name="performance"),
drirc_gen.DrircSection("Misc", misc_options, c_name="misc"),
]
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, "v3dv", options)
if __name__ == '__main__':
main()

View file

@ -109,7 +109,7 @@ v3dv_wsi_init(struct v3dv_physical_device *physical_device)
v3dv_wsi_proc_addr,
&physical_device->vk.instance->alloc,
physical_device->display_fd,
&v3dv_instance->dri_options,
&v3dv_instance->drirc.options,
&(struct wsi_device_options){.sw_device = false});
if (result != VK_SUCCESS)

View file

@ -0,0 +1,5 @@
<?xml version="1.0"?>
<driconf>
<device driver="v3dv">
</device>
</driconf>

View file

@ -220,6 +220,7 @@ foreach i : [
[with_nouveau_vk, '00-nvk-defaults.conf'],
[with_microsoft_vk, '00-dzn-defaults.conf'],
[with_imagination_vk, '00-pvr-defaults.conf'],
[with_broadcom_vk, '00-v3dv-defaults.conf'],
[with_freedreno_vk, '00-turnip-defaults.conf'],
[with_gallium_r300, '00-r300-defaults.conf'],
[with_gallium_iris, '00-iris-defaults.conf'],