summaryrefslogtreecommitdiff
path: root/user/gtk4/vulkan-nullref.patch
blob: 46441590190b32a2247aea3831ef58bb6a4526ad (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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