Mesa (main): turnip: add support for dirconf

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Oct 18 18:07:58 UTC 2021


Module: Mesa
Branch: main
Commit: fd31989ecb4b1cca52a2eaa386770e93198f11bc
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=fd31989ecb4b1cca52a2eaa386770e93198f11bc

Author: Danylo Piliaiev <dpiliaiev at igalia.com>
Date:   Thu Oct 14 18:16:54 2021 +0300

turnip: add support for dirconf

Signed-off-by: Danylo Piliaiev <dpiliaiev at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13367>

---

 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;



More information about the mesa-commit mailing list