Merge branch 'llvmpipe-be-gone' into 'main'
gsk: Don't use gpu renderers with llvmpipe See merge request GNOME/gtk!6890
This commit is contained in:
@@ -10,10 +10,6 @@
|
||||
<attribute name="label" translatable="yes">_Help</attribute>
|
||||
<attribute name="action">app.help</attribute>
|
||||
</item>
|
||||
<item>
|
||||
<attribute name="label" translatable="yes">_Help</attribute>
|
||||
<attribute name="action">app.help</attribute>
|
||||
</item>
|
||||
<item>
|
||||
<attribute name="label" translatable="yes">_Inspector</attribute>
|
||||
<attribute name="action">app.inspector</attribute>
|
||||
|
||||
@@ -46,6 +46,8 @@
|
||||
|
||||
#include "gl/gskglrenderer.h"
|
||||
#include "gpu/gskvulkanrenderer.h"
|
||||
#include "gdk/gdkvulkancontextprivate.h"
|
||||
#include "gdk/gdkdisplayprivate.h"
|
||||
|
||||
#include <graphene-gobject.h>
|
||||
#include <cairo-gobject.h>
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user