From 5f0305356929ecdaf81cdedaf7333e1cee63b697 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sat, 6 Jan 2024 19:58:24 +0100 Subject: [PATCH] gsk: include Vulkan renderer in public header The Vulkan renderer can just be public API, because it doesn't expose any Vulkan-specific APIs. And it can just exist when compiled without Vulkan, because it can fail to realize. Also move get rid of the gsk/vulkan/gskvulkanrenderer.h header. It was experimental and isn't necessary now that the renderer is included via gsk.h. --- demos/node-editor/node-editor-window.c | 3 --- gsk/gpu/gskvulkanrenderer.c | 16 +++++++++++++--- gsk/{vulkan => gpu}/gskvulkanrenderer.h | 10 +++++----- gsk/gsk.h | 1 + gsk/gskrenderer.c | 7 +++---- gsk/meson.build | 16 +++++++--------- gtk/gtktestutils.c | 8 ++------ testsuite/gdk/memorytexture.c | 5 ----- testsuite/gsk/scaling.c | 5 ----- 9 files changed, 31 insertions(+), 40 deletions(-) rename gsk/{vulkan => gpu}/gskvulkanrenderer.h (92%) diff --git a/demos/node-editor/node-editor-window.c b/demos/node-editor/node-editor-window.c index a29ac33ccb..a7d6a9064f 100644 --- a/demos/node-editor/node-editor-window.c +++ b/demos/node-editor/node-editor-window.c @@ -28,9 +28,6 @@ #ifdef GDK_WINDOWING_BROADWAY #include "gsk/broadway/gskbroadwayrenderer.h" #endif -#ifdef GDK_RENDERING_VULKAN -#include "gsk/vulkan/gskvulkanrenderer.h" -#endif #include #ifdef CAIRO_HAS_SVG_SURFACE diff --git a/gsk/gpu/gskvulkanrenderer.c b/gsk/gpu/gskvulkanrenderer.c index 7ba5fdbd11..eee7ec26b5 100644 --- a/gsk/gpu/gskvulkanrenderer.c +++ b/gsk/gpu/gskvulkanrenderer.c @@ -1,20 +1,26 @@ #include "config.h" -#include "gsk/vulkan/gskvulkanrenderer.h" +#include "gskvulkanrenderer.h" #include "gskgpurendererprivate.h" + +#ifdef GDK_RENDERING_VULKAN + #include "gskvulkandeviceprivate.h" #include "gskvulkanframeprivate.h" #include "gskvulkanimageprivate.h" #include "gdk/gdkdisplayprivate.h" +#endif struct _GskVulkanRenderer { GskGpuRenderer parent_instance; +#ifdef GDK_RENDERING_VULKAN guint n_targets; GskGpuImage **targets; +#endif }; struct _GskVulkanRendererClass @@ -24,6 +30,7 @@ struct _GskVulkanRendererClass G_DEFINE_TYPE (GskVulkanRenderer, gsk_vulkan_renderer, GSK_TYPE_GPU_RENDERER) +#ifdef GDK_RENDERING_VULKAN static void gsk_vulkan_renderer_free_targets (GskVulkanRenderer *self) { @@ -171,10 +178,12 @@ gsk_vulkan_renderer_unrealize (GskRenderer *renderer) GSK_RENDERER_CLASS (gsk_vulkan_renderer_parent_class)->unrealize (renderer); } +#endif static void gsk_vulkan_renderer_class_init (GskVulkanRendererClass *klass) { +#ifdef GDK_RENDERING_VULKAN GskGpuRendererClass *gpu_renderer_class = GSK_GPU_RENDERER_CLASS (klass); GskRendererClass *renderer_class = GSK_RENDERER_CLASS (klass); @@ -188,6 +197,7 @@ gsk_vulkan_renderer_class_init (GskVulkanRendererClass *klass) gpu_renderer_class->get_dmabuf_formats = gsk_vulkan_renderer_get_dmabuf_formats; renderer_class->unrealize = gsk_vulkan_renderer_unrealize; +#endif } static void @@ -203,8 +213,8 @@ gsk_vulkan_renderer_init (GskVulkanRenderer *self) * The Vulkan renderer is a renderer that uses the Vulkan library for * rendering. * - * This function is only available when GTK was compiled with Vulkan - * support. + * This renderer will fail to realize when GTK was not compiled with + * Vulkan support. * * Returns: a new Vulkan renderer **/ diff --git a/gsk/vulkan/gskvulkanrenderer.h b/gsk/gpu/gskvulkanrenderer.h similarity index 92% rename from gsk/vulkan/gskvulkanrenderer.h rename to gsk/gpu/gskvulkanrenderer.h index 0b4e74a58d..0346e5ca86 100644 --- a/gsk/vulkan/gskvulkanrenderer.h +++ b/gsk/gpu/gskvulkanrenderer.h @@ -20,10 +20,6 @@ #include #include -#ifdef GDK_RENDERING_VULKAN - -#include - G_BEGIN_DECLS #define GSK_TYPE_VULKAN_RENDERER (gsk_vulkan_renderer_get_type ()) @@ -38,6 +34,8 @@ G_BEGIN_DECLS * GskVulkanRenderer: * * A GSK renderer that is using Vulkan. + * + * This renderer will fail to realize if Vulkan is not supported. */ typedef struct _GskVulkanRenderer GskVulkanRenderer; typedef struct _GskVulkanRendererClass GskVulkanRendererClass; @@ -48,4 +46,6 @@ GType gsk_vulkan_renderer_get_type (void) G_GNUC_CO GDK_AVAILABLE_IN_ALL GskRenderer * gsk_vulkan_renderer_new (void); -#endif +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GskVulkanRenderer, g_object_unref) + +G_END_DECLS diff --git a/gsk/gsk.h b/gsk/gsk.h index 9f2ee451dd..11155ff150 100644 --- a/gsk/gsk.h +++ b/gsk/gsk.h @@ -32,6 +32,7 @@ #include #include +#include #include #include diff --git a/gsk/gskrenderer.c b/gsk/gskrenderer.c index ec93c06ac6..7d9d8bdd76 100644 --- a/gsk/gskrenderer.c +++ b/gsk/gskrenderer.c @@ -38,20 +38,19 @@ #include "gskcairorenderer.h" #include "gskdebugprivate.h" -#include "gl/gskglrenderer.h" #include "gskprofilerprivate.h" #include "gskrendernodeprivate.h" #include "gskoffloadprivate.h" #include "gskenumtypes.h" +#include "gl/gskglrenderer.h" +#include "gpu/gskvulkanrenderer.h" + #include #include #include -#ifdef GDK_RENDERING_VULKAN -#include "vulkan/gskvulkanrenderer.h" -#endif #ifdef GDK_WINDOWING_X11 #include #endif diff --git a/gsk/meson.build b/gsk/meson.build index 273fdc63bc..b30a7ec9f8 100644 --- a/gsk/meson.build +++ b/gsk/meson.build @@ -109,6 +109,7 @@ gsk_private_sources = files([ 'gpu/gskgpuuberop.c', 'gpu/gskgpuuploadop.c', 'gpu/gsknglrenderer.c', + 'gpu/gskvulkanrenderer.c', ]) gsk_f16c_sources = files([ @@ -138,6 +139,12 @@ gsk_public_gl_headers = files([ install_headers(gsk_public_gl_headers, subdir: 'gtk-4.0/gsk/gl') gsk_public_headers += gsk_public_gl_headers +gsk_public_gpu_headers = files([ + 'gpu/gskvulkanrenderer.h' +]) +install_headers(gsk_public_gpu_headers, subdir: 'gtk-4.0/gsk/gpu') +gsk_public_headers += gsk_public_gpu_headers + if get_variable('broadway_enabled') gsk_public_broadway_headers = files([ 'broadway/gskbroadwayrenderer.h' @@ -146,14 +153,6 @@ if get_variable('broadway_enabled') gsk_public_headers += gsk_public_broadway_headers endif -if have_vulkan - gsk_public_vulkan_headers = files([ - 'vulkan/gskvulkanrenderer.h' - ]) - install_headers(gsk_public_vulkan_headers, subdir: 'gtk-4.0/gsk/vulkan') - gsk_public_headers += gsk_public_vulkan_headers -endif - gsk_private_vulkan_shaders = [] gsk_private_vulkan_compiled_shaders = [] gsk_private_vulkan_compiled_shaders_deps = [] @@ -168,7 +167,6 @@ if have_vulkan 'gpu/gskvulkanimage.c', 'gpu/gskvulkanmemory.c', 'gpu/gskvulkanrealdescriptors.c', - 'gpu/gskvulkanrenderer.c', 'gpu/gskvulkansubdescriptors.c', ]) endif # have_vulkan diff --git a/gtk/gtktestutils.c b/gtk/gtktestutils.c index face9c3723..05232d5763 100644 --- a/gtk/gtktestutils.c +++ b/gtk/gtktestutils.c @@ -27,6 +27,8 @@ #include "gtktextview.h" #include "gtkrange.h" +#include + #include #include #include @@ -40,16 +42,10 @@ #include #define GTK_COMPILATION -#include - #ifdef GDK_WINDOWING_BROADWAY #include #endif -#ifdef GDK_RENDERING_VULKAN -#include -#endif - #ifdef GDK_WINDOWING_X11 #include #endif diff --git a/testsuite/gdk/memorytexture.c b/testsuite/gdk/memorytexture.c index 5d53e7ae59..afbd243995 100644 --- a/testsuite/gdk/memorytexture.c +++ b/testsuite/gdk/memorytexture.c @@ -1,9 +1,6 @@ #include #include "gsk/gl/gskglrenderer.h" -#ifdef GDK_RENDERING_VULKAN -#include "gsk/vulkan/gskvulkanrenderer.h" -#endif #include @@ -1483,13 +1480,11 @@ main (int argc, char *argv[]) g_clear_object (&ngl_renderer); } -#ifdef GDK_RENDERING_VULKAN vulkan_renderer = gsk_vulkan_renderer_new (); if (!gsk_renderer_realize (vulkan_renderer, NULL, NULL)) { g_clear_object (&vulkan_renderer); } -#endif result = g_test_run (); diff --git a/testsuite/gsk/scaling.c b/testsuite/gsk/scaling.c index 70039f5d71..b73b413840 100644 --- a/testsuite/gsk/scaling.c +++ b/testsuite/gsk/scaling.c @@ -1,9 +1,6 @@ #include #include "gsk/gl/gskglrenderer.h" -#ifdef GDK_RENDERING_VULKAN -#include "gsk/vulkan/gskvulkanrenderer.h" -#endif #include @@ -25,12 +22,10 @@ struct { "cairo", gsk_cairo_renderer_new, }, -#ifdef GDK_RENDERING_VULKAN { "vulkan", gsk_vulkan_renderer_new, }, -#endif { "ngl", gsk_ngl_renderer_new,