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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
From 4a067fb4ebe2291a1acaab77205cc1ed3bd19e86 Mon Sep 17 00:00:00 2001
From: Simon Ser <contact@emersion.fr>
Date: Wed, 23 Nov 2022 11:52:14 +0100
Subject: [PATCH] Port to wlroots 0.17
---
src/drm.cpp | 2 +-
src/meson.build | 4 ++--
src/rendervulkan.cpp | 10 +++++++---
src/wlserver.cpp | 6 +++---
5 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/src/drm.cpp b/src/drm.cpp
index d6ae1840c..575a79841 100644
--- a/src/drm.cpp
+++ b/src/drm.cpp
@@ -233,7 +233,7 @@ static uint32_t pick_plane_format( const struct wlr_drm_format_set *formats, uin
{
uint32_t result = DRM_FORMAT_INVALID;
for ( size_t i = 0; i < formats->len; i++ ) {
- uint32_t fmt = formats->formats[i]->format;
+ uint32_t fmt = formats->formats[i].format;
if ( fmt == Xformat ) {
// Prefer formats without alpha channel for main plane
result = fmt;
diff --git a/src/meson.build b/src/meson.build
index 3d581f868..d3dec0d2f 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -22,9 +22,9 @@ stb_dep = dependency('stb')
wlroots_dep = dependency(
'wlroots',
- version: ['>= 0.16.0', '< 0.17.0'],
+ version: ['>= 0.17.0', '< 0.18.0'],
fallback: ['wlroots', 'wlroots'],
- default_options: ['default_library=static', 'examples=false', 'xwayland=enabled', 'backends=libinput', 'renderers=[]', 'allocators=[]'],
+ default_options: ['default_library=static', 'examples=false', 'xwayland=enabled', 'backends=libinput', 'renderers=[]', 'allocators=[]', 'session=enabled'],
)
displayinfo_dep = dependency(
diff --git a/src/rendervulkan.cpp b/src/rendervulkan.cpp
index c1bb9efe0..80fc07df7 100644
--- a/src/rendervulkan.cpp
+++ b/src/rendervulkan.cpp
@@ -12,6 +12,10 @@
#include <thread>
#include <vulkan/vulkan_core.h>
+#if defined(__linux__)
+#include <sys/sysmacros.h>
+#endif
+
// Used to remove the config struct alignment specified by the NIS header
#define NIS_ALIGNED(x)
// NIS_Config needs to be included before the X11 headers because of conflicting defines introduced by X11
@@ -2554,7 +2558,7 @@ bool vulkan_init_formats()
vk_log.infof( "supported DRM formats for sampling usage:" );
for ( size_t i = 0; i < sampledDRMFormats.len; i++ )
{
- uint32_t fmt = sampledDRMFormats.formats[ i ]->format;
+ uint32_t fmt = sampledDRMFormats.formats[ i ].format;
char *name = drmGetFormatName(fmt);
vk_log.infof( " %s (0x%" PRIX32 ")", name, fmt );
free(name);
@@ -3889,7 +3893,7 @@ static uint32_t renderer_get_render_buffer_caps( struct wlr_renderer *renderer )
return 0;
}
-static void renderer_begin( struct wlr_renderer *renderer, uint32_t width, uint32_t height )
+static bool renderer_begin( struct wlr_renderer *renderer, uint32_t width, uint32_t height )
{
abort(); // unreachable
}
@@ -3939,7 +3943,7 @@ static int renderer_get_drm_fd( struct wlr_renderer *wlr_renderer )
static struct wlr_texture *renderer_texture_from_buffer( struct wlr_renderer *wlr_renderer, struct wlr_buffer *buf )
{
VulkanWlrTexture_t *tex = new VulkanWlrTexture_t();
- wlr_texture_init( &tex->base, &texture_impl, buf->width, buf->height );
+ wlr_texture_init( &tex->base, wlr_renderer, &texture_impl, buf->width, buf->height );
tex->buf = wlr_buffer_lock( buf );
// TODO: check format/modifier
// TODO: if DMA-BUF, try importing it into Vulkan
diff --git a/src/wlserver.cpp b/src/wlserver.cpp
index 520412351..49f96ed62 100644
--- a/src/wlserver.cpp
+++ b/src/wlserver.cpp
@@ -1381,9 +1381,9 @@ void xdg_surface_new(struct wl_listener *listener, void *data)
wlserver_surface->xdg_surface = xdg_surface_info;
xdg_surface_info->map.notify = xdg_toplevel_map;
- wl_signal_add(&xdg_surface->events.map, &xdg_surface_info->map);
+ wl_signal_add(&xdg_surface->surface->events.map, &xdg_surface_info->map);
xdg_surface_info->unmap.notify = xdg_toplevel_unmap;
- wl_signal_add(&xdg_surface->events.unmap, &xdg_surface_info->unmap);
+ wl_signal_add(&xdg_surface->surface->events.unmap, &xdg_surface_info->unmap);
xdg_surface_info->destroy.notify = xdg_toplevel_destroy;
wl_signal_add(&xdg_surface->events.destroy, &xdg_surface_info->destroy);
@@ -1441,7 +1441,7 @@ bool wlserver_init( void ) {
wlr_renderer_init_wl_display(wlserver.wlr.renderer, wlserver.display);
- wlserver.wlr.compositor = wlr_compositor_create(wlserver.display, wlserver.wlr.renderer);
+ wlserver.wlr.compositor = wlr_compositor_create(wlserver.display, 5, wlserver.wlr.renderer);
wl_signal_add( &wlserver.wlr.compositor->events.new_surface, &new_surface_listener );
|