Merge branch 'inspector-vulkan' into 'main'

inspector: Improve Vulkan info

See merge request GNOME/gtk!7829
This commit is contained in:
Matthias Clasen
2024-10-14 14:29:30 +00:00
2 changed files with 121 additions and 25 deletions

View File

@@ -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);

View File

@@ -919,6 +919,31 @@
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="vulkan_layers_row">
<property name="activatable">0</property>
<child>
<object class="GtkExpander">
<property name="label-widget">
<object class="GtkLabel">
<property name="label" translatable="yes">Layers</property>
<property name="margin-start">10</property>
</object>
</property>
<child>
<object class="GtkListBox" id="vulkan_layers_box">
<property name="margin-top">20</property>
<property name="selection-mode">none</property>
<property name="halign">center</property>
<style>
<class name="rich-list"/>
</style>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="vulkan_extensions_row">
<property name="activatable">0</property>