Merge branch 'inspector/extensions' into 'main'

inspector: List all extensions

See merge request GNOME/gtk!7866
This commit is contained in:
Matthias Clasen
2024-10-25 11:40:12 +00:00
7 changed files with 625 additions and 296 deletions

View File

@@ -51,6 +51,12 @@ typedef enum {
GDK_VULKAN_FEATURE_SWAPCHAIN_MAINTENANCE = 1 << 5,
} GdkVulkanFeatures;
#define GDK_VULKAN_N_FEATURES 6
#ifdef GDK_RENDERING_VULKAN
extern const GdkDebugKey gdk_vulkan_feature_keys[];
#endif
/* Tracks information about the device grab on this display */
typedef struct
{

View File

@@ -103,7 +103,7 @@
#define DEFAULT_ALLOWED_APIS GDK_GL_API_GL | GDK_GL_API_GLES
static const GdkDebugKey gdk_gl_feature_keys[] = {
const GdkDebugKey gdk_gl_feature_keys[] = {
{ "debug", GDK_GL_FEATURE_DEBUG, "GL_KHR_debug" },
{ "base-instance", GDK_GL_FEATURE_BASE_INSTANCE, "GL_ARB_base_instance" },
{ "buffer-storage", GDK_GL_FEATURE_BUFFER_STORAGE, "GL_EXT_buffer_storage" },

View File

@@ -24,6 +24,7 @@
#include "gdkdrawcontextprivate.h"
#include "gdkglversionprivate.h"
#include "gdkdmabufprivate.h"
#include "gdkdebugprivate.h"
G_BEGIN_DECLS
@@ -33,6 +34,10 @@ typedef enum {
GDK_GL_FEATURE_BUFFER_STORAGE = 1 << 2,
} GdkGLFeatures;
#define GDK_GL_N_FEATURES 3
extern const GdkDebugKey gdk_gl_feature_keys[];
typedef enum {
GDK_GL_NONE = 0,
GDK_GL_EGL,

View File

@@ -35,7 +35,7 @@
#include <math.h>
#ifdef GDK_RENDERING_VULKAN
static const GdkDebugKey gdk_vulkan_feature_keys[] = {
const GdkDebugKey gdk_vulkan_feature_keys[] = {
{ "dmabuf", GDK_VULKAN_FEATURE_DMABUF, "Never import Dmabufs" },
{ "ycbcr", GDK_VULKAN_FEATURE_YCBCR, "Do not support Ycbcr textures (also disables dmabufs)" },
{ "semaphore-export", GDK_VULKAN_FEATURE_SEMAPHORE_EXPORT, "Disable sync of exported dmabufs" },

View File

@@ -117,4 +117,3 @@ gdk_display_ref_vulkan (GdkDisplay *display,
#endif /* !GDK_RENDERING_VULKAN */
G_END_DECLS

View File

@@ -38,6 +38,8 @@
#include "gdk/gdkdebugprivate.h"
#include "gdk/gdkdisplayprivate.h"
#include "gdk/gdkmonitorprivate.h"
#include "gdk/gdkglcontextprivate.h"
#include "gdk/gdkvulkancontextprivate.h"
#include "profile_conf.h"
@@ -91,13 +93,20 @@ struct _GtkInspectorGeneral
GtkWidget *display_extensions_box;
GtkWidget *monitor_box;
GtkWidget *gl_box;
GtkWidget *gl_features_row;
GtkWidget *gl_features_box;
GtkWidget *gl_extensions_row;
GtkWidget *gl_extensions_box;
GtkStringList *gl_extensions_list;
GtkWidget *egl_extensions_row;
GtkWidget *egl_extensions_row_name;
GtkStringList *egl_extensions_list;
GtkWidget *vulkan_box;
GtkWidget *vulkan_features_row;
GtkWidget *vulkan_features_box;
GtkWidget *vulkan_extensions_row;
GtkWidget *vulkan_extensions_box;
GtkStringList *vulkan_extensions_list;
GtkWidget *vulkan_layers_row;
GtkWidget *vulkan_layers_box;
GtkStringList *vulkan_layers_list;
GtkWidget *device_box;
GtkWidget *gtk_version;
GtkWidget *gdk_backend;
@@ -112,6 +121,7 @@ struct _GtkInspectorGeneral
GtkWidget *gl_error;
GtkWidget *gl_error_row;
GtkWidget *gl_version;
GtkWidget *gl_version_row;
GtkWidget *gl_vendor;
GtkWidget *gl_vendor_row;
GtkWidget *gl_renderer;
@@ -122,7 +132,11 @@ struct _GtkInspectorGeneral
GtkWidget *glsl_version_row;
GtkWidget *vk_device;
GtkWidget *vk_api_version;
GtkWidget *vk_api_version_row;
GtkWidget *vk_driver_version;
GtkWidget *vk_driver_version_row;
GtkWidget *vk_error;
GtkWidget *vk_error_row;
GtkWidget *app_id_box;
GtkWidget *app_id;
GtkWidget *resource_path;
@@ -303,42 +317,45 @@ add_label_row (GtkInspectorGeneral *gen,
}
static void
append_gl_extension_row (GtkInspectorGeneral *gen,
const char *ext)
add_gl_features (GtkInspectorGeneral *gen)
{
add_check_row (gen, GTK_LIST_BOX (gen->gl_extensions_box), ext, epoxy_has_gl_extension (ext), 0);
GdkGLContext *context;
context = gdk_display_get_gl_context (gen->display);
for (int i = 0; i < GDK_GL_N_FEATURES; i++)
{
add_check_row (gen, GTK_LIST_BOX (gen->gl_features_box),
gdk_gl_feature_keys[i].key,
gdk_gl_context_has_feature (context, gdk_gl_feature_keys[i].value),
0);
}
}
#ifdef GDK_WINDOWING_X11
static void
append_glx_extension_row (GtkInspectorGeneral *gen,
Display *dpy,
const char *ext)
/* unused on some setup, like Mac */
static void G_GNUC_UNUSED
append_extensions (GtkStringList *list,
const char *extensions)
{
add_check_row (gen, GTK_LIST_BOX (gen->gl_extensions_box), ext, epoxy_has_glx_extension (dpy, 0, ext), 0);
}
#endif
char **items;
gsize i;
#ifdef GDK_WINDOWING_WIN32
static void
append_wgl_extension_row (GtkInspectorGeneral *gen,
const char *ext)
{
HDC hdc = wglGetCurrentDC ();
if (extensions == NULL)
return;
items = g_strsplit (extensions, " ", -1);
for (i = 0; items[i]; i++)
{
if (items[i] == NULL || items[i][0] == 0)
continue;
add_check_row (gen, GTK_LIST_BOX (gen->gl_extensions_box), ext, epoxy_has_wgl_extension (hdc, ext), 0);
}
#endif
gtk_string_list_append (list, items[i]);
}
#if defined(GDK_WINDOWING_WAYLAND) || defined (GDK_WINDOWING_X11) || (defined (GDK_WINDOWING_WIN32) && defined(GDK_WIN32_ENABLE_EGL))
static void
append_egl_extension_row (GtkInspectorGeneral *gen,
EGLDisplay dpy,
const char *ext)
{
add_check_row (gen, GTK_LIST_BOX (gen->gl_extensions_box), ext, epoxy_has_egl_extension (dpy, ext), 0);
g_strfreev (items);
}
#if defined(GDK_WINDOWING_X11) || defined(GDK_WINDOWING_WAYLAND) || (defined(GDK_WINDOWING_WIN32) && defined(GDK_WIN32_ENABLE_EGL))
static EGLDisplay
get_egl_display (GdkDisplay *display)
{
@@ -367,36 +384,37 @@ init_gl (GtkInspectorGeneral *gen)
GdkGLContext *context;
GError *error = NULL;
int major, minor;
int num_extensions, i;
char *s;
if (!gdk_display_prepare_gl (gen->display, &error))
{
gtk_label_set_text (GTK_LABEL (gen->gl_version), C_("GL version", "None"));
gtk_label_set_text (GTK_LABEL (gen->gl_renderer), C_("GL renderer", "None"));
gtk_widget_set_visible (gen->gl_error_row, TRUE);
gtk_widget_set_visible (gen->gl_version_row, FALSE);
gtk_widget_set_visible (gen->gl_backend_version_row, FALSE);
gtk_widget_set_visible (gen->gl_backend_vendor_row, FALSE);
gtk_widget_set_visible (gen->gl_renderer_row, FALSE);
gtk_widget_set_visible (gen->gl_vendor_row, FALSE);
gtk_widget_set_visible (gen->gl_full_version_row, FALSE);
gtk_widget_set_visible (gen->glsl_version_row, FALSE);
gtk_widget_set_visible (gen->gl_features_row, FALSE);
gtk_widget_set_visible (gen->gl_extensions_row, FALSE);
gtk_widget_set_visible (gen->egl_extensions_row, FALSE);
gtk_label_set_text (GTK_LABEL (gen->gl_error), error->message);
g_error_free (error);
return;
}
gdk_gl_context_make_current (gdk_display_get_gl_context (gen->display));
append_gl_extension_row (gen, "GL_OES_rgb8_rgba8");
append_gl_extension_row (gen, "GL_EXT_abgr");
append_gl_extension_row (gen, "GL_EXT_texture_format_BGRA8888");
append_gl_extension_row (gen, "GL_EXT_texture_norm16");
append_gl_extension_row (gen, "GL_OES_texture_half_float");
append_gl_extension_row (gen, "GL_EXT_color_buffer_half_float");
append_gl_extension_row (gen, "GL_OES_texture_half_float_linear");
append_gl_extension_row (gen, "GL_OES_vertex_half_float");
append_gl_extension_row (gen, "GL_OES_texture_float");
append_gl_extension_row (gen, "GL_EXT_color_buffer_float");
append_gl_extension_row (gen, "GL_OES_texture_float_linear");
gdk_gl_context_make_current (gdk_display_get_gl_context (gen->display));
glGetIntegerv (GL_NUM_EXTENSIONS, &num_extensions);
for (i = 0; i < num_extensions; i++)
{
const char *gl_ext = (const char *) glGetStringi (GL_EXTENSIONS, i);
if (!gl_ext)
break;
gtk_string_list_append (GTK_STRING_LIST (gen->gl_extensions_list), gl_ext);
}
#if defined(GDK_WINDOWING_X11) || defined(GDK_WINDOWING_WAYLAND) || (defined(GDK_WINDOWING_WIN32) && defined(GDK_WIN32_ENABLE_EGL))
EGLDisplay egl_display = get_egl_display (gen->display);
@@ -410,14 +428,8 @@ init_gl (GtkInspectorGeneral *gen)
gtk_label_set_text (GTK_LABEL (gen->gl_backend_vendor), eglQueryString (egl_display, EGL_VENDOR));
append_egl_extension_row (gen, egl_display, "EGL_KHR_create_context");
append_egl_extension_row (gen, egl_display, "EGL_EXT_buffer_age");
append_egl_extension_row (gen, egl_display, "EGL_EXT_swap_buffers_with_damage");
append_egl_extension_row (gen, egl_display, "EGL_KHR_swap_buffers_with_damage");
append_egl_extension_row (gen, egl_display, "EGL_KHR_surfaceless_context");
append_egl_extension_row (gen, egl_display, "EGL_KHR_no_config_context");
append_egl_extension_row (gen, egl_display, "EGL_EXT_image_dma_buf_import_modifiers");
append_egl_extension_row (gen, egl_display, "EGL_MESA_image_dma_buf_export");
gtk_label_set_text (GTK_LABEL (gen->egl_extensions_row_name), "EGL extensions");
append_extensions (gen->egl_extensions_list, eglQueryString (egl_display, EGL_EXTENSIONS));
}
else
#endif
@@ -425,7 +437,7 @@ init_gl (GtkInspectorGeneral *gen)
if (GDK_IS_X11_DISPLAY (gen->display))
{
Display *dpy = GDK_DISPLAY_XDISPLAY (gen->display);
int error_base, event_base;
int error_base, event_base, screen;
char *version;
if (!glXQueryExtension (dpy, &error_base, &event_base))
@@ -436,14 +448,9 @@ init_gl (GtkInspectorGeneral *gen)
g_free (version);
gtk_label_set_text (GTK_LABEL (gen->gl_backend_vendor), glXGetClientString (dpy, GLX_VENDOR));
append_glx_extension_row (gen, dpy, "GLX_ARB_create_context_profile");
append_glx_extension_row (gen, dpy, "GLX_SGI_swap_control");
append_glx_extension_row (gen, dpy, "GLX_EXT_texture_from_pixmap");
append_glx_extension_row (gen, dpy, "GLX_SGI_video_sync");
append_glx_extension_row (gen, dpy, "GLX_EXT_buffer_age");
append_glx_extension_row (gen, dpy, "GLX_OML_sync_control");
append_glx_extension_row (gen, dpy, "GLX_ARB_multisample");
append_glx_extension_row (gen, dpy, "GLX_EXT_visual_rating");
screen = XScreenNumberOfScreen (gdk_x11_display_get_xscreen (gen->display));
gtk_label_set_text (GTK_LABEL (gen->egl_extensions_row_name), "GLX extensions");
append_extensions (gen->egl_extensions_list, glXQueryExtensionsString (dpy, screen));
}
else
#endif
@@ -451,20 +458,28 @@ init_gl (GtkInspectorGeneral *gen)
if (GDK_IS_WIN32_DISPLAY (gen->display) &&
gdk_gl_backend_can_be_used (GDK_GL_WGL, NULL))
{
PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB;
gtk_label_set_text (GTK_LABEL (gen->gl_backend_vendor), "Microsoft WGL");
gtk_widget_set_visible (gen->gl_backend_version, FALSE);
append_gl_extension_row (gen, "GL_WIN_swap_hint");
append_wgl_extension_row (gen, "WGL_ARB_pixel_format");
append_wgl_extension_row (gen, "WGL_ARB_create_context");
append_wgl_extension_row (gen, "WGL_EXT_swap_control");
append_wgl_extension_row (gen, "WGL_OML_sync_control");
wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC) wglGetProcAddress("wglGetExtensionsStringARB");
if (wglGetExtensionsStringARB)
{
gtk_label_set_text (GTK_LABEL (gen->egl_extensions_row_name), "WGL extensions");
append_extensions (gen->egl_extensions_list, wglGetExtensionsStringARB (wglGetCurrentDC ()));
}
else
{
gtk_label_set_text (GTK_LABEL (gen->egl_extensions_row_name), "WGL extensions: none");
}
}
else
#endif
{
gtk_label_set_text (GTK_LABEL (gen->gl_backend_version), C_("GL version", "Unknown"));
gtk_widget_set_visible (gen->gl_backend_vendor_row, FALSE);
gtk_widget_set_visible (gen->egl_extensions_row, FALSE);
}
context = gdk_display_get_gl_context (gen->display);
@@ -479,97 +494,74 @@ init_gl (GtkInspectorGeneral *gen)
gtk_label_set_text (GTK_LABEL (gen->gl_renderer), (const char *) glGetString (GL_RENDERER));
gtk_label_set_text (GTK_LABEL (gen->gl_full_version), (const char *) glGetString (GL_VERSION));
gtk_label_set_text (GTK_LABEL (gen->glsl_version), (const char *) glGetString (GL_SHADING_LANGUAGE_VERSION));
add_gl_features (gen);
}
#ifdef GDK_RENDERING_VULKAN
static gboolean
gdk_vulkan_has_feature (GdkDisplay *display,
GdkVulkanFeatures feature)
{
return (display->vulkan_features & feature) ? TRUE : FALSE;
}
static void
add_instance_extensions (GtkInspectorGeneral *gen,
...)
add_vulkan_features (GtkInspectorGeneral *gen)
{
for (int i = 0; i < GDK_VULKAN_N_FEATURES; i++)
{
add_check_row (gen, GTK_LIST_BOX (gen->vulkan_features_box),
gdk_vulkan_feature_keys[i].key,
gdk_vulkan_has_feature (gen->display, gdk_vulkan_feature_keys[i].value),
0);
}
}
static void
add_instance_extensions (GtkStringList *list)
{
uint32_t i;
uint32_t n_extensions;
VkExtensionProperties *extensions;
va_list args;
const char *name;
vkEnumerateInstanceExtensionProperties (NULL, &n_extensions, NULL);
extensions = g_newa (VkExtensionProperties, n_extensions);
vkEnumerateInstanceExtensionProperties (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);
for (i = 0; i < n_extensions; i++)
gtk_string_list_append (list, extensions[i].extensionName);
}
static void
add_device_extensions (GtkInspectorGeneral *gen,
...)
add_device_extensions (VkPhysicalDevice device,
GtkStringList *list)
{
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);
vkEnumerateDeviceExtensionProperties (device, NULL, &n_extensions, NULL);
extensions = g_newa (VkExtensionProperties, n_extensions);
vkEnumerateDeviceExtensionProperties (gen->display->vk_physical_device, NULL, &n_extensions, extensions);
vkEnumerateDeviceExtensionProperties (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);
for (i = 0; i < n_extensions; i++)
gtk_string_list_append (list, extensions[i].extensionName);
}
static gboolean
add_layers (GtkInspectorGeneral *gen,
...)
static void
add_layers (GtkStringList *list)
{
uint32_t i;
uint32_t n_layers;
VkLayerProperties *layers;
va_list args;
const char *name;
vkEnumerateInstanceLayerProperties (&n_layers, NULL);
layers = g_newa (VkLayerProperties, n_layers);
vkEnumerateInstanceLayerProperties (&n_layers, layers);
va_start (args, gen);
while ((name = va_arg (args, const char *)) != NULL)
{
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;
for (i = 0; i < n_layers; i++)
gtk_string_list_append (list, layers[i].layerName);
}
#endif
@@ -577,78 +569,63 @@ static void
init_vulkan (GtkInspectorGeneral *gen)
{
#ifdef GDK_RENDERING_VULKAN
if (!gdk_has_feature (GDK_FEATURE_VULKAN))
VkPhysicalDevice vk_device;
VkPhysicalDeviceProperties props;
char *device_name;
char *api_version;
char *driver_version;
const char *types[] = { "other", "integrated GPU", "discrete GPU", "virtual GPU", "CPU" };
GError *error = NULL;
if (!gdk_display_init_vulkan (gen->display, &error))
{
gtk_label_set_text (GTK_LABEL (gen->vk_device), C_("Vulkan device", "Disabled"));
gtk_label_set_text (GTK_LABEL (gen->vk_api_version), C_("Vulkan version", "Disabled"));
gtk_label_set_text (GTK_LABEL (gen->vk_driver_version), C_("Vulkan version", "Disabled"));
gtk_label_set_text (GTK_LABEL (gen->vk_device), C_("Vulkan device", "None"));
gtk_widget_set_visible (gen->vk_error_row, TRUE);
gtk_label_set_text (GTK_LABEL (gen->vk_error), error->message);
g_error_free (error);
gtk_widget_set_visible (gen->vk_api_version_row, FALSE);
gtk_widget_set_visible (gen->vk_driver_version_row, FALSE);
gtk_widget_set_visible (gen->vulkan_features_row, FALSE);
gtk_widget_set_visible (gen->vulkan_layers_row, FALSE);
gtk_widget_set_visible (gen->vulkan_extensions_row, FALSE);
return;
}
if (gen->display->vk_device)
{
VkPhysicalDevice vk_device;
VkPhysicalDeviceProperties props;
char *device_name;
char *api_version;
char *driver_version;
const char *types[] = { "other", "integrated GPU", "discrete GPU", "virtual GPU", "CPU" };
vk_device = gen->display->vk_physical_device;
vkGetPhysicalDeviceProperties (vk_device, &props);
vk_device = gen->display->vk_physical_device;
vkGetPhysicalDeviceProperties (vk_device, &props);
device_name = g_strdup_printf ("%s (%s)", props.deviceName, types[props.deviceType]);
api_version = g_strdup_printf ("%d.%d.%d",
VK_VERSION_MAJOR (props.apiVersion),
VK_VERSION_MINOR (props.apiVersion),
VK_VERSION_PATCH (props.apiVersion));
driver_version = g_strdup_printf ("%d.%d.%d",
VK_VERSION_MAJOR (props.driverVersion),
VK_VERSION_MINOR (props.driverVersion),
VK_VERSION_PATCH (props.driverVersion));
device_name = g_strdup_printf ("%s (%s)", props.deviceName, types[props.deviceType]);
api_version = g_strdup_printf ("%d.%d.%d",
VK_VERSION_MAJOR (props.apiVersion),
VK_VERSION_MINOR (props.apiVersion),
VK_VERSION_PATCH (props.apiVersion));
driver_version = g_strdup_printf ("%d.%d.%d",
VK_VERSION_MAJOR (props.driverVersion),
VK_VERSION_MINOR (props.driverVersion),
VK_VERSION_PATCH (props.driverVersion));
gtk_label_set_text (GTK_LABEL (gen->vk_device), device_name);
gtk_label_set_text (GTK_LABEL (gen->vk_api_version), api_version);
gtk_label_set_text (GTK_LABEL (gen->vk_driver_version), driver_version);
gtk_label_set_text (GTK_LABEL (gen->vk_device), device_name);
gtk_label_set_text (GTK_LABEL (gen->vk_api_version), api_version);
gtk_label_set_text (GTK_LABEL (gen->vk_driver_version), driver_version);
g_free (device_name);
g_free (api_version);
g_free (driver_version);
g_free (device_name);
g_free (api_version);
g_free (driver_version);
add_vulkan_features (gen);
add_instance_extensions (gen->vulkan_extensions_list);
add_device_extensions (gen->display->vk_physical_device, gen->vulkan_extensions_list);
add_layers (gen->vulkan_layers_list);
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
gdk_display_unref_vulkan (gen->display);
#else
gtk_label_set_text (GTK_LABEL (gen->vk_device), C_("Vulkan device", "None"));
gtk_widget_set_visible (gen->vk_api_version_row, FALSE);
gtk_widget_set_visible (gen->vk_driver_version_row, FALSE);
gtk_widget_set_visible (gen->vulkan_layers_row, FALSE);
gtk_widget_set_visible (gen->vulkan_extensions_row, FALSE);
#endif
{
gtk_label_set_text (GTK_LABEL (gen->vk_device), C_("Vulkan device", "None"));
gtk_label_set_text (GTK_LABEL (gen->vk_api_version), C_("Vulkan version", "None"));
gtk_label_set_text (GTK_LABEL (gen->vk_driver_version), C_("Vulkan version", "None"));
}
}
static void
@@ -1327,13 +1304,20 @@ gtk_inspector_general_class_init (GtkInspectorGeneralClass *klass)
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, display_extensions_box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, monitor_box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_features_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_features_box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_extensions_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_extensions_box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_extensions_list);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, egl_extensions_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, egl_extensions_row_name);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, egl_extensions_list);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vulkan_box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vulkan_features_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vulkan_features_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_extensions_list);
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, vulkan_layers_list);
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);
@@ -1343,6 +1327,7 @@ gtk_inspector_general_class_init (GtkInspectorGeneralClass *klass)
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_error);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_error_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_version);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_version_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_backend_version);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_backend_version_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_backend_vendor);
@@ -1357,7 +1342,11 @@ gtk_inspector_general_class_init (GtkInspectorGeneralClass *klass)
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, glsl_version_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vk_device);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vk_api_version);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vk_api_version_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vk_driver_version);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vk_driver_version_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vk_error);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vk_error_row);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, app_id_box);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, app_id);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, resource_path);

View File

@@ -584,7 +584,65 @@
<class name="boxed-list"/>
</style>
<child>
<object class="GtkListBoxRow">
<object class="GtkListBoxRow" id="gl_renderer_row">
<property name="activatable">0</property>
<child>
<object class="GtkBox">
<property name="spacing">40</property>
<child>
<object class="GtkLabel" id="gl_renderer_label">
<property name="label" translatable="yes">GL Renderer</property>
<property name="halign">start</property>
<property name="valign">baseline</property>
<property name="xalign">0.0</property>
</object>
</child>
<child>
<object class="GtkLabel" id="gl_renderer">
<property name="selectable">1</property>
<property name="halign">end</property>
<property name="valign">baseline</property>
<property name="wrap">1</property>
<property name="wrap-mode">word-char</property>
<property name="justify">right</property>
<property name="hexpand">1</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="gl_vendor_row">
<property name="activatable">0</property>
<child>
<object class="GtkBox">
<property name="spacing">40</property>
<child>
<object class="GtkLabel" id="gl_vendor_label">
<property name="label" translatable="yes">GL Vendor</property>
<property name="halign">start</property>
<property name="valign">baseline</property>
<property name="xalign">0.0</property>
</object>
</child>
<child>
<object class="GtkLabel" id="gl_vendor">
<property name="selectable">1</property>
<property name="halign">end</property>
<property name="valign">baseline</property>
<property name="wrap">1</property>
<property name="wrap-mode">word-char</property>
<property name="justify">right</property>
<property name="hexpand">1</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="gl_version_row">
<property name="activatable">0</property>
<child>
<object class="GtkBox">
@@ -610,6 +668,33 @@
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="gl_backend_vendor_row">
<property name="activatable">0</property>
<child>
<object class="GtkBox">
<property name="spacing">40</property>
<child>
<object class="GtkLabel" id="gl_backend_vendor_label">
<property name="label" translatable="yes">GL Backend Vendor</property>
<property name="halign">start</property>
<property name="valign">baseline</property>
<property name="xalign">0.0</property>
</object>
</child>
<child>
<object class="GtkLabel" id="gl_backend_vendor">
<property name="selectable">1</property>
<property name="halign">end</property>
<property name="valign">baseline</property>
<property name="ellipsize">end</property>
<property name="hexpand">1</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="gl_backend_version_row">
<property name="activatable">0</property>
@@ -660,91 +745,6 @@
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="gl_backend_vendor_row">
<property name="activatable">0</property>
<child>
<object class="GtkBox">
<property name="spacing">40</property>
<child>
<object class="GtkLabel" id="gl_backend_vendor_label">
<property name="label" translatable="yes">GL Backend Vendor</property>
<property name="halign">start</property>
<property name="valign">baseline</property>
<property name="xalign">0.0</property>
</object>
</child>
<child>
<object class="GtkLabel" id="gl_backend_vendor">
<property name="selectable">1</property>
<property name="halign">end</property>
<property name="valign">baseline</property>
<property name="ellipsize">end</property>
<property name="hexpand">1</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="gl_vendor_row">
<property name="activatable">0</property>
<child>
<object class="GtkBox">
<property name="spacing">40</property>
<child>
<object class="GtkLabel" id="gl_vendor_label">
<property name="label" translatable="yes">GL_VENDOR</property>
<property name="halign">start</property>
<property name="valign">baseline</property>
<property name="xalign">0.0</property>
</object>
</child>
<child>
<object class="GtkLabel" id="gl_vendor">
<property name="selectable">1</property>
<property name="halign">end</property>
<property name="valign">baseline</property>
<property name="wrap">1</property>
<property name="wrap-mode">word-char</property>
<property name="justify">right</property>
<property name="hexpand">1</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="gl_renderer_row">
<property name="activatable">0</property>
<child>
<object class="GtkBox">
<property name="spacing">40</property>
<child>
<object class="GtkLabel" id="gl_renderer_label">
<property name="label" translatable="yes">GL_RENDERER</property>
<property name="halign">start</property>
<property name="valign">baseline</property>
<property name="xalign">0.0</property>
</object>
</child>
<child>
<object class="GtkLabel" id="gl_renderer">
<property name="selectable">1</property>
<property name="halign">end</property>
<property name="valign">baseline</property>
<property name="wrap">1</property>
<property name="wrap-mode">word-char</property>
<property name="justify">right</property>
<property name="hexpand">1</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="gl_full_version_row">
<property name="activatable">0</property>
@@ -753,7 +753,7 @@
<property name="spacing">40</property>
<child>
<object class="GtkLabel" id="gl_full_version_label">
<property name="label" translatable="yes">GL_VERSION</property>
<property name="label" translatable="yes">GL Full Version</property>
<property name="halign">start</property>
<property name="valign">baseline</property>
<property name="xalign">0.0</property>
@@ -782,7 +782,7 @@
<property name="spacing">40</property>
<child>
<object class="GtkLabel" id="glsl_version_label">
<property name="label" translatable="yes">GL_SHADING_LANGUAGE_VERSION</property>
<property name="label" translatable="yes">GLSL Version</property>
<property name="halign">start</property>
<property name="valign">baseline</property>
<property name="xalign">0.0</property>
@@ -808,17 +808,193 @@
<property name="activatable">0</property>
<child>
<object class="GtkExpander">
<property name="valign">center</property>
<property name="label-widget">
<object class="GtkLabel">
<property name="label" translatable="yes">Extensions</property>
<property name="label" translatable="yes">GL Extensions</property>
<property name="margin-start">10</property>
</object>
</property>
<child>
<object class="GtkListBox" id="gl_extensions_box">
<object class="GtkBox">
<property name="margin-top">20</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkSearchEntry" id="gl_extensions_searchentry"/>
</child>
<child>
<object class="GtkListView">
<style>
<class name="rich-list"/>
</style>
<property name="model">
<object class="GtkNoSelection">
<property name="model">
<object class="GtkFilterListModel">
<property name="filter">
<object class="GtkStringFilter">
<property name="expression">
<lookup name='string' type='GtkStringObject' />
</property>
<binding name="search">
<lookup name="text" type="GtkSearchEntry">
gl_extensions_searchentry
</lookup>
</binding>
</object>
</property>
<property name="model">
<object class="GtkSortListModel">
<property name="sorter">
<object class="GtkStringSorter">
<property name='expression'>
<lookup name='string' type='GtkStringObject' />
</property>
</object>
</property>
<property name="model">
<object class="GtkStringList" id="gl_extensions_list" />
</property>
</object>
</property>
</object>
</property>
</object>
</property>
<property name="factory">
<object class="GtkBuilderListItemFactory">
<property name="bytes"><![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<template class='GtkListItem'>
<property name='activatable'>0</property>
<property name='child'>
<object class='GtkInscription'>
<property name='xalign'>0</property>
<binding name='text'>
<lookup name='string' type='GtkStringObject'>
<lookup name='item'>GtkListItem</lookup>
</lookup>
</binding>
</object>
</property>
</template>
</interface>
]]></property>
</object>
</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="egl_extensions_row">
<property name="activatable">0</property>
<child>
<object class="GtkExpander">
<property name="valign">center</property>
<property name="label-widget">
<object class="GtkLabel" id="egl_extensions_row_name">
<property name="label" translatable="yes">EGL Extensions</property>
<property name="margin-start">10</property>
</object>
</property>
<child>
<object class="GtkBox">
<property name="margin-top">20</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkSearchEntry" id="egl_extensions_searchentry"/>
</child>
<child>
<object class="GtkListView">
<style>
<class name="rich-list"/>
</style>
<property name="model">
<object class="GtkNoSelection">
<property name="model">
<object class="GtkFilterListModel">
<property name="filter">
<object class="GtkStringFilter">
<property name="expression">
<lookup name='string' type='GtkStringObject' />
</property>
<binding name="search">
<lookup name="text" type="GtkSearchEntry">
egl_extensions_searchentry
</lookup>
</binding>
</object>
</property>
<property name="model">
<object class="GtkSortListModel">
<property name="sorter">
<object class="GtkStringSorter">
<property name='expression'>
<lookup name='string' type='GtkStringObject' />
</property>
</object>
</property>
<property name="model">
<object class="GtkStringList" id="egl_extensions_list" />
</property>
</object>
</property>
</object>
</property>
</object>
</property>
<property name="factory">
<object class="GtkBuilderListItemFactory">
<property name="bytes"><![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<template class='GtkListItem'>
<property name='activatable'>0</property>
<property name='child'>
<object class='GtkInscription'>
<property name='xalign'>0</property>
<binding name='text'>
<lookup name='string' type='GtkStringObject'>
<lookup name='item'>GtkListItem</lookup>
</lookup>
</binding>
</object>
</property>
</template>
</interface>
]]></property>
</object>
</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="gl_features_row">
<property name="activatable">0</property>
<child>
<object class="GtkExpander">
<property name="label-widget">
<object class="GtkLabel">
<property name="label" translatable="yes">Features</property>
<property name="margin-start">10</property>
</object>
</property>
<child>
<object class="GtkListBox" id="gl_features_box">
<property name="margin-top">20</property>
<property name="selection-mode">none</property>
<property name="halign">center</property>
<property name="halign">fill</property>
<style>
<class name="rich-list"/>
</style>
@@ -866,14 +1042,14 @@
</object>
</child>
<child>
<object class="GtkListBoxRow">
<object class="GtkListBoxRow" id="vk_api_version_row">
<property name="activatable">0</property>
<child>
<object class="GtkBox">
<property name="spacing">40</property>
<child>
<object class="GtkLabel" id="vk_api_version_label">
<property name="label" translatable="yes">Vulkan API version</property>
<property name="label" translatable="yes">Vulkan API Version</property>
<property name="halign">start</property>
<property name="valign">baseline</property>
<property name="xalign">0.0</property>
@@ -893,14 +1069,14 @@
</object>
</child>
<child>
<object class="GtkListBoxRow">
<object class="GtkListBoxRow" id="vk_driver_version_row">
<property name="activatable">0</property>
<child>
<object class="GtkBox">
<property name="spacing">40</property>
<child>
<object class="GtkLabel" id="vk_driver_version_label">
<property name="label" translatable="yes">Vulkan driver version</property>
<property name="label" translatable="yes">Vulkan Driver Version</property>
<property name="halign">start</property>
<property name="valign">baseline</property>
<property name="xalign">0.0</property>
@@ -919,6 +1095,29 @@
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="vk_error_row">
<property name="activatable">0</property>
<property name="visible">0</property>
<child>
<object class="GtkBox">
<property name="spacing">40</property>
<child>
<object class="GtkLabel" id="vk_error">
<property name="selectable">1</property>
<property name="halign">end</property>
<property name="valign">baseline</property>
<property name="ellipsize">end</property>
<property name="hexpand">1</property>
<style>
<class name="error"/>
</style>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="vulkan_layers_row">
<property name="activatable">0</property>
@@ -931,13 +1130,56 @@
</object>
</property>
<child>
<object class="GtkListBox" id="vulkan_layers_box">
<object class="GtkBox">
<property name="margin-top">20</property>
<property name="selection-mode">none</property>
<property name="halign">center</property>
<style>
<class name="rich-list"/>
</style>
<property name="orientation">vertical</property>
<child>
<object class="GtkListView">
<style>
<class name="rich-list"/>
</style>
<property name="model">
<object class="GtkNoSelection">
<property name="model">
<object class="GtkSortListModel">
<property name="sorter">
<object class="GtkStringSorter">
<property name='expression'>
<lookup name='string' type='GtkStringObject' />
</property>
</object>
</property>
<property name="model">
<object class="GtkStringList" id="vulkan_layers_list" />
</property>
</object>
</property>
</object>
</property>
<property name="factory">
<object class="GtkBuilderListItemFactory">
<property name="bytes"><![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<template class='GtkListItem'>
<property name='activatable'>0</property>
<property name='child'>
<object class='GtkInscription'>
<property name='xalign'>0</property>
<binding name='text'>
<lookup name='string' type='GtkStringObject'>
<lookup name='item'>GtkListItem</lookup>
</lookup>
</binding>
</object>
</property>
</template>
</interface>
]]></property>
</object>
</property>
</object>
</child>
</object>
</child>
</object>
@@ -949,17 +1191,105 @@
<property name="activatable">0</property>
<child>
<object class="GtkExpander">
<property name="valign">center</property>
<property name="label-widget">
<object class="GtkLabel">
<property name="label" translatable="yes">Extensions</property>
<property name="label" translatable="yes">Vulkan Extensions</property>
<property name="margin-start">10</property>
</object>
</property>
<child>
<object class="GtkListBox" id="vulkan_extensions_box">
<object class="GtkBox">
<property name="margin-top">20</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkSearchEntry" id="vulkan_extensions_searchentry"/>
</child>
<child>
<object class="GtkListView">
<style>
<class name="rich-list"/>
</style>
<property name="model">
<object class="GtkNoSelection">
<property name="model">
<object class="GtkFilterListModel">
<property name="filter">
<object class="GtkStringFilter">
<property name="expression">
<lookup name='string' type='GtkStringObject' />
</property>
<binding name="search">
<lookup name="text" type="GtkSearchEntry">
vulkan_extensions_searchentry
</lookup>
</binding>
</object>
</property>
<property name="model">
<object class="GtkSortListModel">
<property name="sorter">
<object class="GtkStringSorter">
<property name='expression'>
<lookup name='string' type='GtkStringObject' />
</property>
</object>
</property>
<property name="model">
<object class="GtkStringList" id="vulkan_extensions_list" />
</property>
</object>
</property>
</object>
</property>
</object>
</property>
<property name="factory">
<object class="GtkBuilderListItemFactory">
<property name="bytes"><![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<template class='GtkListItem'>
<property name='activatable'>0</property>
<property name='child'>
<object class='GtkInscription'>
<property name='xalign'>0</property>
<binding name='text'>
<lookup name='string' type='GtkStringObject'>
<lookup name='item'>GtkListItem</lookup>
</lookup>
</binding>
</object>
</property>
</template>
</interface>
]]></property>
</object>
</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="vulkan_features_row">
<property name="activatable">0</property>
<child>
<object class="GtkExpander">
<property name="label-widget">
<object class="GtkLabel">
<property name="label" translatable="yes">Features</property>
<property name="margin-start">10</property>
</object>
</property>
<child>
<object class="GtkListBox" id="vulkan_features_box">
<property name="margin-top">20</property>
<property name="selection-mode">none</property>
<property name="halign">center</property>
<property name="halign">fill</property>
<style>
<class name="rich-list"/>
</style>