diff --git a/src/broadcom/vulkan/meson.build b/src/broadcom/vulkan/meson.build index c090b19c223..8fd29c57e74 100644 --- a/src/broadcom/vulkan/meson.build +++ b/src/broadcom/vulkan/meson.build @@ -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, ], diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c index 32b0cd460e8..5d6b7333bbc 100644 --- a/src/broadcom/vulkan/v3dv_device.c +++ b/src/broadcom/vulkan/v3dv_device.c @@ -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 diff --git a/src/broadcom/vulkan/v3dv_device.h b/src/broadcom/vulkan/v3dv_device.h index 8963a0693f6..71610955e61 100644 --- a/src/broadcom/vulkan/v3dv_device.h +++ b/src/broadcom/vulkan/v3dv_device.h @@ -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; diff --git a/src/broadcom/vulkan/v3dv_drirc_gen.py b/src/broadcom/vulkan/v3dv_drirc_gen.py new file mode 100644 index 00000000000..526e798cb80 --- /dev/null +++ b/src/broadcom/vulkan/v3dv_drirc_gen.py @@ -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() diff --git a/src/broadcom/vulkan/v3dv_wsi.c b/src/broadcom/vulkan/v3dv_wsi.c index 13749bbbe3d..66c5c66a68e 100644 --- a/src/broadcom/vulkan/v3dv_wsi.c +++ b/src/broadcom/vulkan/v3dv_wsi.c @@ -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) diff --git a/src/util/00-v3dv-defaults.conf b/src/util/00-v3dv-defaults.conf new file mode 100644 index 00000000000..18ee0ee572c --- /dev/null +++ b/src/util/00-v3dv-defaults.conf @@ -0,0 +1,5 @@ + + + + + diff --git a/src/util/meson.build b/src/util/meson.build index 4f32cfddc3b..755ce713e4c 100644 --- a/src/util/meson.build +++ b/src/util/meson.build @@ -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'],