diff --git a/demos/node-editor/node-editor-window.ui b/demos/node-editor/node-editor-window.ui
index f768e9435b..68d43ba27e 100644
--- a/demos/node-editor/node-editor-window.ui
+++ b/demos/node-editor/node-editor-window.ui
@@ -10,10 +10,6 @@
_Help
app.help
- -
- _Help
- app.help
-
-
_Inspector
app.inspector
diff --git a/gsk/gskrenderer.c b/gsk/gskrenderer.c
index 31477b84c7..0d4519a989 100644
--- a/gsk/gskrenderer.c
+++ b/gsk/gskrenderer.c
@@ -46,6 +46,8 @@
#include "gl/gskglrenderer.h"
#include "gpu/gskvulkanrenderer.h"
+#include "gdk/gdkvulkancontextprivate.h"
+#include "gdk/gdkdisplayprivate.h"
#include
#include
@@ -630,16 +632,53 @@ get_renderer_for_backend (GdkSurface *surface)
return G_TYPE_INVALID;
}
+static gboolean
+gl_software_rendering (GdkSurface *surface)
+{
+ GdkDisplay *display = gdk_surface_get_display (surface);
+ GdkGLContext *context;
+
+ if (!gdk_display_prepare_gl (display, NULL))
+ return G_TYPE_INVALID;
+
+ context = gdk_display_get_gl_context (display);
+ gdk_gl_context_make_current (context);
+
+ return strstr ((const char *) glGetString (GL_RENDERER), "llvmpipe") != NULL;
+}
+
static GType
get_renderer_for_gl (GdkSurface *surface)
{
+ if (gl_software_rendering (surface))
+ return G_TYPE_INVALID;
+
return gsk_ngl_renderer_get_type ();
}
+#ifdef GDK_RENDERING_VULKAN
+static gboolean
+vulkan_software_rendering (GdkSurface *surface)
+{
+ GdkDisplay *display = gdk_surface_get_display (surface);
+ VkPhysicalDeviceProperties props;
+
+ if (!gdk_display_init_vulkan (display, NULL))
+ return G_TYPE_INVALID;
+
+ vkGetPhysicalDeviceProperties (display->vk_physical_device, &props);
+
+ return props.deviceType == VK_PHYSICAL_DEVICE_TYPE_CPU;
+}
+#endif
+
static GType
get_renderer_for_vulkan (GdkSurface *surface)
{
#ifdef GDK_RENDERING_VULKAN
+ if (vulkan_software_rendering (surface))
+ return G_TYPE_INVALID;
+
return GSK_TYPE_VULKAN_RENDERER;
#else
return G_TYPE_INVALID;
@@ -649,6 +688,9 @@ get_renderer_for_vulkan (GdkSurface *surface)
static GType
get_renderer_for_gles2 (GdkSurface *surface)
{
+ if (gl_software_rendering (surface))
+ return G_TYPE_INVALID;
+
return GSK_TYPE_GL_RENDERER;
}
diff --git a/gtk/inspector/general.c b/gtk/inspector/general.c
index c5b218c4c9..6621514a39 100644
--- a/gtk/inspector/general.c
+++ b/gtk/inspector/general.c
@@ -513,11 +513,12 @@ init_vulkan (GtkInspectorGeneral *gen)
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);
- device_name = g_strdup_printf ("%s (%d)", props.deviceName, props.deviceType);
+ 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),