summaryrefslogtreecommitdiff
path: root/user/gtk4/vulkan-nullref.patch
diff options
context:
space:
mode:
Diffstat (limited to 'user/gtk4/vulkan-nullref.patch')
-rw-r--r--user/gtk4/vulkan-nullref.patch69
1 files changed, 69 insertions, 0 deletions
diff --git a/user/gtk4/vulkan-nullref.patch b/user/gtk4/vulkan-nullref.patch
new file mode 100644
index 000000000..464415901
--- /dev/null
+++ b/user/gtk4/vulkan-nullref.patch
@@ -0,0 +1,69 @@
+From d4350c0fe535a759abd7898c7f251738242d1408 Mon Sep 17 00:00:00 2001
+From: Benjamin Otte <otte@redhat.com>
+Date: Thu, 24 Apr 2025 03:36:15 +0200
+Subject: [PATCH] vulkan: Handle not being compiled against Vulkan
+
+The Vulkan renderer should work and just fail to realize.
+Currently it SEGVs with a NULL function call.
+
+Part-of: <https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/8506>
+---
+ gsk/gpu/gskvulkanrenderer.c | 22 ++++++++++++++++++++--
+ 1 file changed, 20 insertions(+), 2 deletions(-)
+
+diff --git a/gsk/gpu/gskvulkanrenderer.c b/gsk/gpu/gskvulkanrenderer.c
+index a5f827df839..6282c0b51c1 100644
+--- a/gsk/gpu/gskvulkanrenderer.c
++++ b/gsk/gpu/gskvulkanrenderer.c
+@@ -4,6 +4,8 @@
+
+ #include "gskgpurendererprivate.h"
+
++#include <glib/gi18n-lib.h>
++
+ #ifdef GDK_RENDERING_VULKAN
+
+ #include "gskvulkandeviceprivate.h"
+@@ -143,14 +145,28 @@ gsk_vulkan_renderer_unrealize (GskRenderer *renderer)
+
+ GSK_RENDERER_CLASS (gsk_vulkan_renderer_parent_class)->unrealize (renderer);
+ }
+-#endif
++
++#else /* !GDK_RENDERING_VULKAN */
++
++static gboolean
++gsk_vulkan_renderer_realize (GskRenderer *renderer,
++ GdkDisplay *display,
++ GdkSurface *surface,
++ GError **error)
++{
++ g_set_error_literal (error, GDK_VULKAN_ERROR, GDK_VULKAN_ERROR_NOT_AVAILABLE,
++ _("Vulkan support disabled during GTK build"));
++
++ return FALSE;
++}
++#endif /* GDK_RENDERING_VULKAN */
+
+ static void
+ gsk_vulkan_renderer_class_init (GskVulkanRendererClass *klass)
+ {
++ GskRendererClass *renderer_class = GSK_RENDERER_CLASS (klass);
+ #ifdef GDK_RENDERING_VULKAN
+ GskGpuRendererClass *gpu_renderer_class = GSK_GPU_RENDERER_CLASS (klass);
+- GskRendererClass *renderer_class = GSK_RENDERER_CLASS (klass);
+
+ gpu_renderer_class->frame_type = GSK_TYPE_VULKAN_FRAME;
+
+@@ -162,6 +178,8 @@ gsk_vulkan_renderer_class_init (GskVulkanRendererClass *klass)
+ gpu_renderer_class->get_backbuffer = gsk_vulkan_renderer_get_backbuffer;
+
+ renderer_class->unrealize = gsk_vulkan_renderer_unrealize;
++#else
++ renderer_class->realize = gsk_vulkan_renderer_realize;
+ #endif
+ }
+
+--
+GitLab
+