From e697e30f3c9126d4bd32d67813bfd333f4f04d4b Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 14 Oct 2024 07:55:58 -0400 Subject: [PATCH] inspector: Improve Vulkan info Redo the lists of layers and extensions to show the things we use. --- gtk/inspector/general.c | 121 +++++++++++++++++++++++++++++++-------- gtk/inspector/general.ui | 25 ++++++++ 2 files changed, 121 insertions(+), 25 deletions(-) diff --git a/gtk/inspector/general.c b/gtk/inspector/general.c index 1752759150..6feb6f7950 100644 --- a/gtk/inspector/general.c +++ b/gtk/inspector/general.c @@ -96,6 +96,8 @@ struct _GtkInspectorGeneral GtkWidget *vulkan_box; GtkWidget *vulkan_extensions_row; GtkWidget *vulkan_extensions_box; + GtkWidget *vulkan_layers_row; + GtkWidget *vulkan_layers_box; GtkWidget *device_box; GtkWidget *gtk_version; GtkWidget *gdk_backend; @@ -480,37 +482,91 @@ init_gl (GtkInspectorGeneral *gen) } #ifdef GDK_RENDERING_VULKAN -static gboolean -has_debug_extension (void) +static void +add_instance_extensions (GtkInspectorGeneral *gen, + ...) { uint32_t i; uint32_t n_extensions; + VkExtensionProperties *extensions; + va_list args; + const char *name; + vkEnumerateInstanceExtensionProperties (NULL, &n_extensions, NULL); - VkExtensionProperties *extensions = g_newa (VkExtensionProperties, n_extensions); + extensions = g_newa (VkExtensionProperties, n_extensions); vkEnumerateInstanceExtensionProperties (NULL, &n_extensions, extensions); - for (i = 0; i < n_extensions; i++) + va_start (args, gen); + + while ((name = va_arg (args, const char *)) != NULL) { - if (g_str_equal (extensions[i].extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)) - return TRUE; + for (i = 0; i < n_extensions; i++) + { + if (g_str_equal (extensions[i].extensionName, name)) + break; + } + + add_check_row (gen, GTK_LIST_BOX (gen->vulkan_extensions_box), name, i < n_extensions, 0); } - return FALSE; + va_end (args); +} + +static void +add_device_extensions (GtkInspectorGeneral *gen, + ...) +{ + uint32_t i; + uint32_t n_extensions; + VkExtensionProperties *extensions; + va_list args; + const char *name; + + vkEnumerateDeviceExtensionProperties (gen->display->vk_physical_device, NULL, &n_extensions, NULL); + extensions = g_newa (VkExtensionProperties, n_extensions); + vkEnumerateDeviceExtensionProperties (gen->display->vk_physical_device, NULL, &n_extensions, extensions); + + va_start (args, gen); + + while ((name = va_arg (args, const char *)) != NULL) + { + for (i = 0; i < n_extensions; i++) + { + if (g_str_equal (extensions[i].extensionName, name)) + break; + } + + add_check_row (gen, GTK_LIST_BOX (gen->vulkan_extensions_box), name, i < n_extensions, 0); + } + + va_end (args); } static gboolean -has_validation_layer (void) +add_layers (GtkInspectorGeneral *gen, + ...) { uint32_t i; uint32_t n_layers; + VkLayerProperties *layers; + va_list args; + const char *name; + vkEnumerateInstanceLayerProperties (&n_layers, NULL); - VkLayerProperties *layers = g_newa (VkLayerProperties, n_layers); + layers = g_newa (VkLayerProperties, n_layers); vkEnumerateInstanceLayerProperties (&n_layers, layers); - for (i = 0; i < n_layers; i++) + va_start (args, gen); + + while ((name = va_arg (args, const char *)) != NULL) { - if (g_str_equal (layers[i].layerName, "VK_LAYER_KHRONOS_validation")) - return TRUE; + for (i = 0; i < n_layers; i++) + { + if (g_str_equal (layers[i].layerName, "VK_LAYER_KHRONOS_validation")) + break; + } + + add_check_row (gen, GTK_LIST_BOX (gen->vulkan_layers_box), name, i < n_layers, 0); } return FALSE; @@ -559,19 +615,32 @@ init_vulkan (GtkInspectorGeneral *gen) g_free (api_version); g_free (driver_version); - add_check_row (gen, GTK_LIST_BOX (gen->vulkan_extensions_box), VK_KHR_SURFACE_EXTENSION_NAME, TRUE, 0); -#ifdef GDK_WINDOWING_X11 - if (GDK_IS_X11_DISPLAY (gen->display)) - add_check_row (gen, GTK_LIST_BOX (gen->vulkan_extensions_box), "VK_KHR_xlib_surface", TRUE, 0); -#endif -#ifdef GDK_WINDOWING_WAYLAND - if (GDK_IS_WAYLAND_DISPLAY (gen->display)) - add_check_row (gen, GTK_LIST_BOX (gen->vulkan_extensions_box), "VK_KHR_wayland_surface", TRUE, 0); -#endif - add_check_row (gen, GTK_LIST_BOX (gen->vulkan_extensions_box), VK_EXT_DEBUG_REPORT_EXTENSION_NAME, - has_debug_extension (), 0); - add_check_row (gen, GTK_LIST_BOX (gen->vulkan_extensions_box), "VK_LAYER_KHRONOS_validation", - has_validation_layer (), 0); + add_instance_extensions (gen, + VK_KHR_SURFACE_EXTENSION_NAME, + "VK_KHR_xlib_surface", + "VK_KHR_wayland_surface", + VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME, + VK_EXT_DEBUG_REPORT_EXTENSION_NAME, + VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, + VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME, + VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, + VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, + NULL); + + add_device_extensions (gen, + VK_KHR_SWAPCHAIN_EXTENSION_NAME, + VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, + VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME, + VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME, + VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME, + VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME, + VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME, + VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME, + NULL); + + add_layers (gen, + "VK_LAYER_KHRONOS_validation", + NULL); } else #endif @@ -1267,6 +1336,8 @@ gtk_inspector_general_class_init (GtkInspectorGeneralClass *klass) gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vulkan_box); gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vulkan_extensions_row); gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vulkan_extensions_box); + gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vulkan_layers_row); + gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vulkan_layers_box); gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gtk_version); gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gdk_backend); gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gsk_renderer); diff --git a/gtk/inspector/general.ui b/gtk/inspector/general.ui index 085122e2c4..dc34f988f5 100644 --- a/gtk/inspector/general.ui +++ b/gtk/inspector/general.ui @@ -919,6 +919,31 @@ + + + 0 + + + + + Layers + 10 + + + + + 20 + none + center + + + + + + + 0