From fd31989ecb4b1cca52a2eaa386770e93198f11bc Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Thu, 14 Oct 2021 18:16:54 +0300 Subject: [PATCH] turnip: add support for dirconf Signed-off-by: Danylo Piliaiev Part-of: --- src/freedreno/vulkan/tu_device.c | 29 +++++++++++++++++++++++++++++ src/freedreno/vulkan/tu_private.h | 4 ++++ src/freedreno/vulkan/tu_wsi.c | 3 ++- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c index 5a89e54faf9..fddfce140d7 100644 --- a/src/freedreno/vulkan/tu_device.c +++ b/src/freedreno/vulkan/tu_device.c @@ -38,6 +38,7 @@ #include "util/debug.h" #include "util/disk_cache.h" +#include "util/driconf.h" #include "util/u_atomic.h" #include "vk_format.h" #include "vk_util.h" @@ -328,6 +329,29 @@ tu_get_debug_option_name(int id) return tu_debug_options[id].string; } +static const driOptionDescription tu_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_DEBUG + DRI_CONF_VK_WSI_FORCE_BGRA8_UNORM_FIRST(false) + DRI_CONF_SECTION_END +}; + +static void +tu_init_dri_options(struct tu_instance *instance) +{ + driParseOptionInfo(&instance->available_dri_options, tu_dri_options, + ARRAY_SIZE(tu_dri_options)); + driParseConfigFiles(&instance->dri_options, &instance->available_dri_options, 0, "turnip", NULL, NULL, + instance->vk.app_info.app_name, instance->vk.app_info.app_version, + instance->vk.app_info.engine_name, instance->vk.app_info.engine_version); +} + VKAPI_ATTR VkResult VKAPI_CALL tu_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, @@ -380,6 +404,8 @@ tu_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, VG(VALGRIND_CREATE_MEMPOOL(instance, 0, false)); + tu_init_dri_options(instance); + *pInstance = tu_instance_to_handle(instance); #ifdef HAVE_PERFETTO @@ -404,6 +430,9 @@ tu_DestroyInstance(VkInstance _instance, VG(VALGRIND_DESTROY_MEMPOOL(instance)); + driDestroyOptionCache(&instance->dri_options); + driDestroyOptionInfo(&instance->available_dri_options); + vk_instance_finish(&instance->vk); vk_free(&instance->vk.alloc, instance); } diff --git a/src/freedreno/vulkan/tu_private.h b/src/freedreno/vulkan/tu_private.h index f8ea52e03ee..dcfba82e8f5 100644 --- a/src/freedreno/vulkan/tu_private.h +++ b/src/freedreno/vulkan/tu_private.h @@ -53,6 +53,7 @@ #include "util/macros.h" #include "util/u_atomic.h" #include "util/u_dynarray.h" +#include "util/xmlconfig.h" #include "util/perf/u_trace.h" #include "vk_alloc.h" #include "vk_debug_report.h" @@ -248,6 +249,9 @@ struct tu_instance int physical_device_count; struct tu_physical_device physical_devices[TU_MAX_DRM_DEVICES]; + struct driOptionCache dri_options; + struct driOptionCache available_dri_options; + enum tu_debug_flags debug_flags; }; diff --git a/src/freedreno/vulkan/tu_wsi.c b/src/freedreno/vulkan/tu_wsi.c index 932ab4195c9..e7b0440f746 100644 --- a/src/freedreno/vulkan/tu_wsi.c +++ b/src/freedreno/vulkan/tu_wsi.c @@ -45,7 +45,8 @@ tu_wsi_init(struct tu_physical_device *physical_device) tu_physical_device_to_handle(physical_device), tu_wsi_proc_addr, &physical_device->instance->vk.alloc, - physical_device->master_fd, NULL, + physical_device->master_fd, + &physical_device->instance->dri_options, false); if (result != VK_SUCCESS) return result;