Compare commits

..

No commits in common. "rawhide" and "f41" have entirely different histories.

18 changed files with 1716 additions and 335 deletions

16
.gitignore vendored
View file

@ -14,19 +14,3 @@
/monado-src-5c137fe28b232fe460f9b03defa7749adc32ee48.tar.bz2
/WiVRn-25.9.tar.gz
/monado-src-7a4018e2d89151e60e562fac79eba90ca7a328d8.tar.bz2
/WiVRn-de32f6e24f1f457dcea78974b945e1cb3ac6dee8.tar.gz
/monado-src-06e62fc7d9c5cbcbc43405bb86dfde3bf01ce043.tar.bz2
/WiVRn-25.11.tar.gz
/WiVRn-25.11.1.tar.gz
/WiVRn-25.12.tar.gz
/monado-src-20e0dacbdd2de863923790326beec76e848b056a.tar.bz2
/WiVRn-26.2.tar.gz
/monado-src-9dcc3e1de2f7449d9757f5db332c867b4d794fb3.tar.bz2
/WiVRn-26.2.1.tar.gz
/monado-src-723652b545a79609f9f04cb89fcbf807d9d6451a.tar.bz2
/WiVRn-26.2.2.tar.gz
/WiVRn-v26.2.3.tar.gz
/WiVRn-v26.6.tar.gz
/monado-src-1b526bb3a0ff326ecd05af4c2c541407f53c6d4b.tar.bz2
/WiVRn-v26.6.1.tar.gz
/WiVRn-v26.6.2.tar.gz

View file

@ -1,4 +1,4 @@
From de3b592fc26d7b26b4850fcc78d7e6b21147f76b Mon Sep 17 00:00:00 2001
From 5a4505efc60c9252176b73775278b6f5b775fe8e Mon Sep 17 00:00:00 2001
From: Patrick Nicolas <patricknicolas@laposte.net>
Date: Tue, 22 Oct 2024 15:23:19 +0200
Subject: [PATCH 1/8] c/multi: early wake of compositor
@ -10,7 +10,7 @@ Subject: [PATCH 1/8] c/multi: early wake of compositor
3 files changed, 41 insertions(+), 7 deletions(-)
diff --git a/src/xrt/compositor/multi/comp_multi_compositor.c b/src/xrt/compositor/multi/comp_multi_compositor.c
index 33675d43f..71c5ebf9e 100644
index 94cea110e..88347a092 100644
--- a/src/xrt/compositor/multi/comp_multi_compositor.c
+++ b/src/xrt/compositor/multi/comp_multi_compositor.c
@@ -236,7 +236,21 @@ wait_for_scheduled_free(struct multi_compositor *mc)
@ -36,10 +36,10 @@ index 33675d43f..71c5ebf9e 100644
static void *
diff --git a/src/xrt/compositor/multi/comp_multi_private.h b/src/xrt/compositor/multi/comp_multi_private.h
index 6c7ec05f8..588878e38 100644
index 3351defa4..e8f0c8295 100644
--- a/src/xrt/compositor/multi/comp_multi_private.h
+++ b/src/xrt/compositor/multi/comp_multi_private.h
@@ -365,6 +365,10 @@ struct multi_system_compositor
@@ -359,6 +359,10 @@ struct multi_system_compositor
*/
struct os_mutex list_and_timing_lock;
@ -51,19 +51,19 @@ index 6c7ec05f8..588878e38 100644
{
int64_t predicted_display_time_ns;
diff --git a/src/xrt/compositor/multi/comp_multi_system.c b/src/xrt/compositor/multi/comp_multi_system.c
index 5a4f35b81..cbda39c24 100644
index be763d1c1..22c801f65 100644
--- a/src/xrt/compositor/multi/comp_multi_system.c
+++ b/src/xrt/compositor/multi/comp_multi_system.c
@@ -14,6 +14,8 @@
#include "xrt/xrt_defines.h"
#include "xrt/xrt_session.h"
@@ -23,6 +23,8 @@
#include "util/u_trace_marker.h"
#include "util/u_distortion_mesh.h"
+#include "math/m_api.h"
+
#include "os/os_time.h"
#include "os/os_threading.h"
@@ -426,17 +428,24 @@ broadcast_timings_to_pacers(struct multi_system_compositor *msc,
#ifdef XRT_OS_LINUX
#include "util/u_linux.h"
#endif
@@ -392,17 +394,24 @@ broadcast_timings_to_pacers(struct multi_system_compositor *msc,
}
static void
@ -93,7 +93,7 @@ index 5a4f35b81..cbda39c24 100644
}
static void
@@ -562,10 +571,13 @@ multi_main_loop(struct multi_system_compositor *msc)
@@ -527,10 +536,13 @@ multi_main_loop(struct multi_system_compositor *msc)
broadcast_timings_to_clients(msc, predicted_display_time_ns);
// Now we can wait.
@ -109,7 +109,7 @@ index 5a4f35b81..cbda39c24 100644
// Now we know the diff, broadcast to pacers.
broadcast_timings_to_pacers(msc, predicted_display_time_ns, predicted_display_period_ns, diff_ns);
@@ -785,6 +797,8 @@ system_compositor_destroy(struct xrt_system_compositor *xsc)
@@ -707,6 +719,8 @@ system_compositor_destroy(struct xrt_system_compositor *xsc)
xrt_comp_native_destroy(&msc->xcn);
os_mutex_destroy(&msc->list_and_timing_lock);
@ -118,8 +118,8 @@ index 5a4f35b81..cbda39c24 100644
free(msc);
}
@@ -843,6 +857,8 @@ comp_multi_create_system_compositor(struct xrt_compositor_native *xcn,
msc->get_view_config_callback = get_view_config_callback;
@@ -761,6 +775,8 @@ comp_multi_create_system_compositor(struct xrt_compositor_native *xcn,
msc->sessions.state = do_warm_start ? MULTI_SYSTEM_STATE_INIT_WARM_START : MULTI_SYSTEM_STATE_STOPPED;
os_mutex_init(&msc->list_and_timing_lock);
+ os_mutex_init(&msc->wake_mutex);
@ -128,5 +128,5 @@ index 5a4f35b81..cbda39c24 100644
//! @todo Make the clients not go from IDLE to READY before we have completed a first frame.
// Make sure there is at least some sort of valid frame data here.
--
2.54.0
2.51.0

View file

@ -0,0 +1,25 @@
From e118393925294a3b57cbf149fdc28685b27aec94 Mon Sep 17 00:00:00 2001
From: Patrick Nicolas <patricknicolas@laposte.net>
Date: Tue, 2 Apr 2024 17:14:42 +0200
Subject: [PATCH 2/8] ipc/server: Always listen to stdin
---
src/xrt/ipc/server/ipc_server_mainloop_linux.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/xrt/ipc/server/ipc_server_mainloop_linux.c b/src/xrt/ipc/server/ipc_server_mainloop_linux.c
index d364fbed3..ad6b473b7 100644
--- a/src/xrt/ipc/server/ipc_server_mainloop_linux.c
+++ b/src/xrt/ipc/server/ipc_server_mainloop_linux.c
@@ -186,7 +186,7 @@ init_epoll(struct ipc_server_mainloop *ml)
struct epoll_event ev = {0};
- if (!ml->launched_by_socket && !debug_get_bool_option_skip_stdin()) {
+ if (!debug_get_bool_option_skip_stdin()) {
// Can't do this when launched by systemd socket activation by
// default.
// This polls stdin.
--
2.51.0

View file

@ -1,26 +1,26 @@
From 22d9bf87e9dd6a0d5970258a6b6cd6ca82c3bb26 Mon Sep 17 00:00:00 2001
From d4b4c209e9106edf5e6b1c3efbcac2b88364518b Mon Sep 17 00:00:00 2001
From: Patrick Nicolas <patricknicolas@laposte.net>
Date: Tue, 8 Oct 2024 22:13:15 +0200
Subject: [PATCH 2/8] Use extern socket fd
Subject: [PATCH 3/8] Use extern socket fd
---
src/xrt/ipc/server/ipc_server_mainloop_linux.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/xrt/ipc/server/ipc_server_mainloop_linux.c b/src/xrt/ipc/server/ipc_server_mainloop_linux.c
index a0bef3dde..453dd38ca 100644
index ad6b473b7..ea6fad65b 100644
--- a/src/xrt/ipc/server/ipc_server_mainloop_linux.c
+++ b/src/xrt/ipc/server/ipc_server_mainloop_linux.c
@@ -50,6 +50,8 @@
#endif
@@ -55,6 +55,8 @@
*/
DEBUG_GET_ONCE_BOOL_OPTION(skip_stdin, "XRT_NO_STDIN", false)
+extern int listen_socket;
+
/*
*
* Static functions.
@@ -58,6 +60,12 @@
@@ -63,6 +65,12 @@ DEBUG_GET_ONCE_BOOL_OPTION(skip_stdin, "XRT_NO_STDIN", false)
static int
get_systemd_socket(struct ipc_server_mainloop *ml, int *out_fd)
{
@ -34,5 +34,5 @@ index a0bef3dde..453dd38ca 100644
// We may have been launched with socket activation
int num_fds = sd_listen_fds(0);
--
2.54.0
2.51.0

View file

@ -1,17 +1,17 @@
From 3c7450d800b0e3f35440f41d3bfcf5b5abe6dfe8 Mon Sep 17 00:00:00 2001
From a0eafb7370e319386bdd790059e2f13147706a9f Mon Sep 17 00:00:00 2001
From: galister <85970-galister@users.noreply.gitlab.freedesktop.org>
Date: Sat, 23 Nov 2024 02:42:12 +0900
Subject: [PATCH 3/8] change environment blend mode selection logic
Subject: [PATCH 4/8] change environment blend mode selection logic
---
src/xrt/compositor/multi/comp_multi_system.c | 26 +++++++++++++-------
1 file changed, 17 insertions(+), 9 deletions(-)
diff --git a/src/xrt/compositor/multi/comp_multi_system.c b/src/xrt/compositor/multi/comp_multi_system.c
index cbda39c24..c0c6c9f60 100644
index 22c801f65..1155bc67e 100644
--- a/src/xrt/compositor/multi/comp_multi_system.c
+++ b/src/xrt/compositor/multi/comp_multi_system.c
@@ -231,23 +231,31 @@ find_active_blend_mode(struct multi_compositor **overlay_sorted_clients, size_t
@@ -232,23 +232,31 @@ find_active_blend_mode(struct multi_compositor **overlay_sorted_clients, size_t
if (overlay_sorted_clients == NULL)
return XRT_BLEND_MODE_OPAQUE;
@ -53,5 +53,5 @@ index cbda39c24..c0c6c9f60 100644
}
--
2.54.0
2.51.0

View file

@ -1,47 +0,0 @@
From b26876c29205f2d2fb07fbdbe009d5635eb32bfd Mon Sep 17 00:00:00 2001
From: Patrick Nicolas <patricknicolas@laposte.net>
Date: Sat, 15 Mar 2025 22:19:48 +0100
Subject: [PATCH 4/8] st/oxr: forward 0 refresh rate
---
src/xrt/compositor/main/comp_compositor.c | 2 +-
src/xrt/state_trackers/oxr/oxr_api_session.c | 6 +-----
2 files changed, 2 insertions(+), 6 deletions(-)
diff --git a/src/xrt/compositor/main/comp_compositor.c b/src/xrt/compositor/main/comp_compositor.c
index b44271622..a1e112e89 100644
--- a/src/xrt/compositor/main/comp_compositor.c
+++ b/src/xrt/compositor/main/comp_compositor.c
@@ -391,7 +391,7 @@ compositor_request_display_refresh_rate(struct xrt_compositor *xc, float display
if (c->target && c->target->request_refresh_rate) {
xrt_result_t result = comp_target_request_refresh_rate(c->target, display_refresh_rate_hz);
// Assume refresh rate change is immediate
- if (result == XRT_SUCCESS)
+ if (result == XRT_SUCCESS && display_refresh_rate_hz > 0)
c->frame_interval_ns = U_TIME_1S_IN_NS / display_refresh_rate_hz;
return result;
}
diff --git a/src/xrt/state_trackers/oxr/oxr_api_session.c b/src/xrt/state_trackers/oxr/oxr_api_session.c
index 09297f885..9f3a7ebc2 100644
--- a/src/xrt/state_trackers/oxr/oxr_api_session.c
+++ b/src/xrt/state_trackers/oxr/oxr_api_session.c
@@ -455,15 +455,11 @@ oxr_xrRequestDisplayRefreshRateFB(XrSession session, float displayRefreshRate)
OXR_VERIFY_SESSION_AND_INIT_LOG(&log, session, sess, "xrRequestDisplayRefreshRateFB");
OXR_VERIFY_SESSION_NOT_LOST(&log, sess);
- if (displayRefreshRate == 0.0f) {
- return XR_SUCCESS;
- }
-
/*
* For the requested display refresh rate, truncating to two decimal
* places and checking if it's in the supported refresh rates.
*/
- bool found = false;
+ bool found = displayRefreshRate == 0.0f;
for (int i = 0; i < (int)sess->sys->xsysc->info.refresh_rate_count; ++i) {
if ((int)(displayRefreshRate * 100.0f) == (int)(sess->sys->xsysc->info.refresh_rates_hz[i] * 100.0f)) {
found = true;
--
2.54.0

View file

@ -0,0 +1,82 @@
From 406114aa32a71e04b43b44b0aec04472f9fa82c3 Mon Sep 17 00:00:00 2001
From: Patrick Nicolas <patricknicolas@laposte.net>
Date: Thu, 27 Feb 2025 22:45:36 +0100
Subject: [PATCH 5/8] c/main: allow custom pacing app factory
---
src/xrt/compositor/main/comp_compositor.c | 10 ++++++----
src/xrt/compositor/main/comp_main_interface.h | 4 ++++
src/xrt/targets/common/target_instance.c | 2 +-
3 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/src/xrt/compositor/main/comp_compositor.c b/src/xrt/compositor/main/comp_compositor.c
index 805683d70..8220808ff 100644
--- a/src/xrt/compositor/main/comp_compositor.c
+++ b/src/xrt/compositor/main/comp_compositor.c
@@ -987,6 +987,7 @@ compositor_init_renderer(struct comp_compositor *c)
xrt_result_t
comp_main_create_system_compositor(struct xrt_device *xdev,
const struct comp_target_factory *ctf,
+ struct u_pacing_app_factory *upaf,
struct xrt_system_compositor **out_xsysc)
{
COMP_TRACE_MARKER();
@@ -1187,10 +1188,11 @@ comp_main_create_system_compositor(struct xrt_device *xdev,
}
// Standard app pacer.
- struct u_pacing_app_factory *upaf = NULL;
- xrt_result_t xret = u_pa_factory_create(&upaf);
- assert(xret == XRT_SUCCESS && upaf != NULL);
- (void)xret;
+ if (upaf == NULL) {
+ xrt_result_t xret = u_pa_factory_create(&upaf);
+ assert(xret == XRT_SUCCESS && upaf != NULL);
+ (void)xret;
+ }
return comp_multi_create_system_compositor(&c->base.base, upaf, sys_info, !c->deferred_surface, out_xsysc);
}
diff --git a/src/xrt/compositor/main/comp_main_interface.h b/src/xrt/compositor/main/comp_main_interface.h
index 0f0678358..f60568b43 100644
--- a/src/xrt/compositor/main/comp_main_interface.h
+++ b/src/xrt/compositor/main/comp_main_interface.h
@@ -15,6 +15,7 @@
#include "xrt/xrt_compositor.h"
struct comp_target_factory;
+struct u_pacing_app_factory;
#ifdef __cplusplus
extern "C" {
@@ -31,11 +32,14 @@ extern "C" {
* @param xdev The head device
* @param ctf A compositor target factory to force the output device, must remain valid for the lifetime of the
* compositor. If NULL, factory is automatically selected
+ * @param upaf A pacing app factory to customize the application pacer, compositor takes ownership.
+ * If NULL, a default factory is used
* @param out_xsysc The output compositor
*/
xrt_result_t
comp_main_create_system_compositor(struct xrt_device *xdev,
const struct comp_target_factory *ctf,
+ struct u_pacing_app_factory *upaf,
struct xrt_system_compositor **out_xsysc);
diff --git a/src/xrt/targets/common/target_instance.c b/src/xrt/targets/common/target_instance.c
index 617561c37..e10ba8358 100644
--- a/src/xrt/targets/common/target_instance.c
+++ b/src/xrt/targets/common/target_instance.c
@@ -109,7 +109,7 @@ t_instance_create_system(struct xrt_instance *xinst,
#ifdef XRT_MODULE_COMPOSITOR_MAIN
if (xret == XRT_SUCCESS && xsysc == NULL) {
- xret = comp_main_create_system_compositor(head, NULL, &xsysc);
+ xret = comp_main_create_system_compositor(head, NULL, NULL, &xsysc);
}
#else
if (!use_null) {
--
2.51.0

View file

@ -1,25 +0,0 @@
From 7230746571d1256d32557fd99528ac90a1d75957 Mon Sep 17 00:00:00 2001
From: no name <git-am@invalid>
Date: Sun, 28 Sep 2025 11:33:10 +0200
Subject: [PATCH 5/8] d/steamvr_lh: prevent crash on vive pro2/WiVRn
---
src/xrt/drivers/steamvr_lh/steamvr_lh.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/xrt/drivers/steamvr_lh/steamvr_lh.cpp b/src/xrt/drivers/steamvr_lh/steamvr_lh.cpp
index 347d22068..d34d3331e 100644
--- a/src/xrt/drivers/steamvr_lh/steamvr_lh.cpp
+++ b/src/xrt/drivers/steamvr_lh/steamvr_lh.cpp
@@ -985,7 +985,7 @@ steamvr_lh_create_devices(struct xrt_prober *xp, struct xrt_system_devices **out
// Include the HMD
if (svrs->ctx->hmd) {
- if (svrs->ctx->hmd->variant == VIVE_VARIANT_PRO2 && !svrs->ctx->hmd->init_vive_pro_2(xp)) {
+ if (xp && svrs->ctx->hmd->variant == VIVE_VARIANT_PRO2 && !svrs->ctx->hmd->init_vive_pro_2(xp)) {
U_LOG_IFL_W(level, "Found Vive Pro 2, but failed to initialize.");
}
--
2.54.0

View file

@ -0,0 +1,33 @@
From aa73e7d05747374760b22333495cde8c3d9d3f10 Mon Sep 17 00:00:00 2001
From: Patrick Nicolas <patricknicolas@laposte.net>
Date: Sat, 15 Mar 2025 22:19:48 +0100
Subject: [PATCH 6/8] st/oxr: forward 0 refresh rate
---
src/xrt/state_trackers/oxr/oxr_api_session.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/src/xrt/state_trackers/oxr/oxr_api_session.c b/src/xrt/state_trackers/oxr/oxr_api_session.c
index 9c5889f12..c4cdaf8c3 100644
--- a/src/xrt/state_trackers/oxr/oxr_api_session.c
+++ b/src/xrt/state_trackers/oxr/oxr_api_session.c
@@ -717,15 +717,11 @@ oxr_xrRequestDisplayRefreshRateFB(XrSession session, float displayRefreshRate)
OXR_VERIFY_SESSION_AND_INIT_LOG(&log, session, sess, "xrRequestDisplayRefreshRateFB");
OXR_VERIFY_SESSION_NOT_LOST(&log, sess);
- if (displayRefreshRate == 0.0f) {
- return XR_SUCCESS;
- }
-
/*
* For the requested display refresh rate, truncating to two decimal
* places and checking if it's in the supported refresh rates.
*/
- bool found = false;
+ bool found = displayRefreshRate == 0.0f;
for (int i = 0; i < (int)sess->sys->xsysc->info.refresh_rate_count; ++i) {
if ((int)(displayRefreshRate * 100.0f) == (int)(sess->sys->xsysc->info.refresh_rates_hz[i] * 100.0f)) {
found = true;
--
2.51.0

View file

@ -1,27 +0,0 @@
From f400f0e63259bcadd9a7955ae0275caa5aea3ded Mon Sep 17 00:00:00 2001
From: Sapphire <imsapphire0@gmail.com>
Date: Fri, 7 Nov 2025 20:41:16 -0600
Subject: [PATCH 6/8] st/oxr: push XrEventDataInteractionProfileChanged when
profile changes to NULL
---
src/xrt/state_trackers/oxr/actions/oxr_input.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/src/xrt/state_trackers/oxr/actions/oxr_input.c b/src/xrt/state_trackers/oxr/actions/oxr_input.c
index 2bd3ea009..93659ba35 100644
--- a/src/xrt/state_trackers/oxr/actions/oxr_input.c
+++ b/src/xrt/state_trackers/oxr/actions/oxr_input.c
@@ -1932,9 +1932,6 @@ session_update_action_bindings(struct oxr_logger *log,
#define POPULATE_PROFILE(X) \
do { \
XrPath path = profiles.X != NULL ? profiles.X->path : XR_NULL_PATH; \
- if (path == XR_NULL_PATH) { \
- break; /* Only update on "active" interaction profiles per sub-action path. */ \
- } \
if (action_context->X != path) { \
action_context->X = path; \
interaction_profile_changed = true; \
--
2.54.0

File diff suppressed because it is too large Load diff

View file

@ -1,33 +0,0 @@
From 0832cc9a2ccd0f67b3bd3a11ec1b1d1398dfebda Mon Sep 17 00:00:00 2001
From: no name <git-am@invalid>
Date: Sun, 25 Jan 2026 10:09:10 +0100
Subject: [PATCH 7/8] don't verify GL stuff
---
src/xrt/state_trackers/oxr/oxr_verify.c | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/src/xrt/state_trackers/oxr/oxr_verify.c b/src/xrt/state_trackers/oxr/oxr_verify.c
index 8f35222cf..1418a8231 100644
--- a/src/xrt/state_trackers/oxr/oxr_verify.c
+++ b/src/xrt/state_trackers/oxr/oxr_verify.c
@@ -610,16 +610,6 @@ oxr_verify_XrGraphicsBindingOpenGLXlibKHR(struct oxr_logger *log, const XrGraphi
"XrGraphicsBindingOpenGLXlibKHR::glxDrawable is NULL");
}
- if (next->glxFBConfig == NULL) {
- return oxr_error(log, XR_ERROR_GRAPHICS_DEVICE_INVALID,
- "XrGraphicsBindingOpenGLXlibKHR::glxFBConfig is NULL");
- }
-
- if (next->visualid == 0) {
- return oxr_error(log, XR_ERROR_GRAPHICS_DEVICE_INVALID,
- "XrGraphicsBindingOpenGLXlibKHR::visualid is 0");
- }
-
return XR_SUCCESS;
}
--
2.54.0

View file

@ -0,0 +1,46 @@
From 4de55a9bc2ab7d3931d38b6697268af5421c0328 Mon Sep 17 00:00:00 2001
From: Patrick Nicolas <patricknicolas@laposte.net>
Date: Sun, 31 Aug 2025 17:05:49 +0200
Subject: [PATCH 8/8] Limit foveation samples per pixel
---
src/xrt/compositor/shaders/distortion.comp | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/src/xrt/compositor/shaders/distortion.comp b/src/xrt/compositor/shaders/distortion.comp
index cd1828ac9..41de849e6 100644
--- a/src/xrt/compositor/shaders/distortion.comp
+++ b/src/xrt/compositor/shaders/distortion.comp
@@ -12,6 +12,7 @@
layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
#define MAX_DIM 4097
+#define MAX_SAMPLES 4
layout(set = 0, binding = 0) uniform sampler2D source[2];
layout(set = 0, binding = 1, std430) buffer restrict Foveation
@@ -67,13 +68,18 @@ void main()
if (xmin == xmax)
return;
+ uint xstep = (xmax - xmin + MAX_SAMPLES - 1) / MAX_SAMPLES;
+ uint ystep = (ymax - ymin + MAX_SAMPLES - 1) / MAX_SAMPLES;
+
vec4 colour = vec4(0);
- for (uint y = ymin ; y < ymax; y += 1) {
- for (uint x = xmin ; x < xmax; x += 1) {
+ uint count = 0;
+ for (uint y = ymin ; y < ymax; y += ystep) {
+ for (uint x = xmin ; x < xmax; x += xstep) {
colour += texelFetch(source[iz], ivec2(x, y), 0);
+ ++count;
}
}
- colour /= (xmax - xmin) * (ymax - ymin);
+ colour /= count;
colour.xyz = rgb_to_ycbcr(from_linear_to_srgb(colour.rgb));
imageStore(luma, ivec3(offset.x + ix, offset.y + iy, 0), vec4(colour.x));
--
2.51.0

View file

@ -1,37 +0,0 @@
From d79de5d82def9641484b8d88212d3c2e97e38734 Mon Sep 17 00:00:00 2001
From: no name <git-am@invalid>
Date: Fri, 20 Mar 2026 16:51:18 +0100
Subject: [PATCH 8/8] configure u_git_tag in WiVRn
---
src/xrt/auxiliary/util/CMakeLists.txt | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/src/xrt/auxiliary/util/CMakeLists.txt b/src/xrt/auxiliary/util/CMakeLists.txt
index 79646b181..21adcd446 100644
--- a/src/xrt/auxiliary/util/CMakeLists.txt
+++ b/src/xrt/auxiliary/util/CMakeLists.txt
@@ -10,11 +10,6 @@
# by applications like the OpenXR runtime library.
#
-configure_file(
- "${CMAKE_CURRENT_SOURCE_DIR}/u_git_tag.c.in" "${CMAKE_CURRENT_BINARY_DIR}/u_git_tag.c"
- @ONLY
- )
-
add_library(
aux_util STATIC
u_autoexpgain.c
@@ -120,7 +115,7 @@ add_library(
u_worker.cpp
u_worker.h
u_worker.hpp
- "${CMAKE_CURRENT_BINARY_DIR}/u_git_tag.c"
+ "${U_GIT_TAG_CPP}"
)
target_link_libraries(
aux_util
--
2.54.0

View file

@ -0,0 +1,122 @@
From 66ca73981d0c6c079b34566fa53a7a415c403611 Mon Sep 17 00:00:00 2001
From: Patrick Nicolas <patricknicolas@laposte.net>
Date: Wed, 24 Sep 2025 07:38:35 +0200
Subject: [PATCH] Fix tagged version download
---
cmake/GitVersion.cmake | 1 -
common/CMakeLists.txt | 1 -
common/version.cpp.in | 11 +++++++++++
common/version.h | 2 ++
dashboard/apk_installer.cpp | 4 +---
server/main.cpp | 6 +++---
6 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/cmake/GitVersion.cmake b/cmake/GitVersion.cmake
index 5732ce396..431a75207 100644
--- a/cmake/GitVersion.cmake
+++ b/cmake/GitVersion.cmake
@@ -13,7 +13,6 @@ execute_process(
if (GIT_DESC)
string(STRIP ${GIT_DESC} GIT_DESC)
- string(REGEX REPLACE "^v([0-9])" "\\1" GIT_DESC ${GIT_DESC})
message(STATUS "Setting version to ${GIT_DESC} from git")
else()
set(GIT_DESC v${CMAKE_PROJECT_VERSION})
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index fa2db43c5..96a2c7b7e 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -7,7 +7,6 @@ else()
endif()
if (GIT_DESC)
- string(REGEX REPLACE "^v([0-9])" "\\1" GIT_DESC ${GIT_DESC})
configure_file(version.cpp.in version.cpp)
else ()
add_custom_target(wivrn-version ALL
diff --git a/common/version.cpp.in b/common/version.cpp.in
index 9cd7a7090..06b78254d 100644
--- a/common/version.cpp.in
+++ b/common/version.cpp.in
@@ -17,6 +17,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
+#include <cctype>
+#include <iterator>
+
namespace wivrn
{
extern const char git_version[];
@@ -24,4 +27,12 @@ namespace wivrn
extern const char git_commit[];
const char git_commit[] = "@GIT_COMMIT@";
+
+const char* display_version()
+{
+ if (std::size(git_version) > 2 and git_version[0] == 'v' and isdigit(git_version[1]))
+ return git_version + 1;
+ else
+ return git_version;
+}
}
diff --git a/common/version.h b/common/version.h
index 4e33d8eae..77c60887c 100644
--- a/common/version.h
+++ b/common/version.h
@@ -4,4 +4,6 @@ namespace wivrn
{
extern const char git_version[];
extern const char git_commit[];
+
+const char * display_version();
} // namespace wivrn
diff --git a/dashboard/apk_installer.cpp b/dashboard/apk_installer.cpp
index df2f15686..288574d99 100644
--- a/dashboard/apk_installer.cpp
+++ b/dashboard/apk_installer.cpp
@@ -42,9 +42,7 @@ bool apk_installer::isTagged() const
QString apk_installer::currentVersion() const
{
- if (wivrn::git_version[0] == 'v')
- return &wivrn::git_version[1];
- return wivrn::git_version;
+ return wivrn::display_version();
}
QCoro::Task<> apk_installer::doRefreshLatestVersion()
diff --git a/server/main.cpp b/server/main.cpp
index fd5e62293..9867dacc7 100644
--- a/server/main.cpp
+++ b/server/main.cpp
@@ -354,7 +354,7 @@ void start_publishing()
sprintf(protocol_string, "%016" PRIx64, wivrn::protocol_version);
std::map<std::string, std::string> TXT = {
{"protocol", protocol_string},
- {"version", wivrn::git_version},
+ {"version", wivrn::display_version()},
{"cookie", server_cookie()},
};
publisher.emplace(poll_api, hostname(), "_wivrn._tcp", wivrn::default_port, TXT);
@@ -889,7 +889,7 @@ auto create_dbus_connection()
int inner_main(int argc, char * argv[], bool show_instructions)
{
- std::cerr << "WiVRn " << wivrn::git_version << " starting" << std::endl;
+ std::cerr << "WiVRn " << wivrn::display_version() << " starting" << std::endl;
if (show_instructions)
{
if (auto command = steam_command(); not command.empty())
@@ -998,7 +998,7 @@ int main(int argc, char * argv[])
if (*version_flag)
{
- std::cout << "WiVRn version " << wivrn::git_version << std::endl;
+ std::cout << "WiVRn version " << wivrn::display_version() << std::endl;
return 0;
}

View file

@ -1,67 +0,0 @@
CECILL-C
_deps/monado-src/src/external/imgui/imgui/imconfig.h
CC0-1.0 AND Apache-2.0
_deps/monado-src/src/external/glad/*
Unlicense
_deps/monado-src/src/external/imgui/imgui/backends/imgui_impl_opengl3_loader.h
Apache-2.0
_deps/monado-src/gradle*
_deps/monado-src/src/external/{flexkalman,glad,mermaid,nvpro_pyramid,openxr_includes}/*
_deps/monado-src/src/xrt/auxiliary/math/m_quatexpmap.cpp
gradle*
resources/values/ic_wivrn_launcher_background.xml
Apache-2.0 OR MIT
_deps/monado-src/doc/doxygen-awesome-css/doxygen-awesome-*
BSD-2-Clause
_deps/monado-src/cmake/FindEigen3.cmake
_deps/monado-src/src/external/hungarian/*
_deps/monado-src/src/external/tracy/{client,common}/*
_deps/monado-src/cmake/{FindEGL.cmake,FindSystemd.cmake,OptionWithDeps.cmake}
_deps/monado-src/src/external/openvr_includes/*
_deps/monado-src/src/external/tinyceres/*
_deps/monado-src/src/external/tracy/libbacktrace/*
_deps/monado-src/src/xrt/drivers/north_star/distortion_3d/*
_deps/monado-src/src/xrt/tracking/hand/mercury/kine_lm/lm_rotations_ceres.inl
BSD-3-Clause AND BSL-1.0
_deps/monado-src/src/xrt/targets/steamvr_drv/*
BSL-1.0
_deps/monado-src/{CMakeLists.txt,CompilerFlags.cmake,build.gradel}
_deps/monado-src/cmake/{CleanDirectoryList.cmake,FindHIDAPI.cmake,FindLeapV2.cmake,FindLibcheck.cmake,FindLibusb1.cmake,FindONNXRuntime.cmake,FindOpenGLES.cmake,FindOpenHMD.cmake,FindPercetto.cmake,Findbluetooth.cmake,FindcJSON.cmake,Findudev.cmake,GenerateKhrManifest.cmake,GenerateKhrManifestInternals.cmake.in,GenerateOpenXRRuntimeManifest.cmake,GenerateVulkanApiLayerManifest.cmake,GetGitRevisionDescription.cmake,GetGitRevisionDescription.cmake.in,PrefixListGlob.cmake,ProgramFilesGlob.cmake,SPIR-V.cmake,openxr_manifest.in.json.license}
_deps/monado-src/src/external/{Catch2,android-jni-wrap,flexkalman,imgui,nvpro_pyramid,openxr_includes,solarxr,util-headers,vit_includes}
_deps/monado-src/src/xrt/auxiliary/{android,bindings,d3d,gsteamer,math,ogl,os,tracking,util,vive,vk}/*
_deps/monado-src/src/xrt/compositor/*
_deps/monado-src/src/xrt/drivers/{android,arduino,daydream,depthai,euroc,hdk,ht,ht_ctrl_emu,hydra,illixr,multi_wrapper,north_star,ohmd,opengloves,psmv,qwerty,realsense,remote,rift_s,rokid,sample,simula,simulated,solarxr,steamvr_lh,survive,twrap,ultraleap_v2,v4l2,vf,vive,wmr,xreal_air}/*
_deps/monado-src/src/xrt/include/tracking/t_hand_tracking.h
_deps/monado-src/src/xrt/include/xrt/*
_deps/monado-src/src/xrt/{ipc,state_trackers,targets,tracking}/*
_deps/monado-src/tests/*
server/{main.cpp,start_application.cpp,target_instance_wivrn.cpp}
BSL-1.0 AND CC0-1.0
_deps/monado-src/{doc,scripts}/*
GPL-2.0-or-later
tools/wireshark/dissector.cpp
GPL-3.0-or-later
{client,common,dashboard,server}/*
MIT-Khronos-old
_deps/monado-src/src/external/glad/include/KHR/khrplatform.h
MIT
_deps/monado-src/cmake/sanitizers/{FindASan.cmake,FindMSan.cmake,FindSanitizers.cmake,FindTSan.cmake,FindUBSan.cmake,asan-wrapper,sanitize-helpers.cmake}
_deps/monado-src/doc/doxygen-awesome-css/*
_deps/monado-src/src/external/{cjson,imgui,jnipp,mermaid,renderdoc_api,solarxr,stb,tracy,valve-file-vdf}/*
_deps/monado-src/src/xrt/targets/android_common/src/main/res/raw/*
external/{magic_enum.hpp,magic_enum_containers.hpp,vk_mem_alloc.h}
Zlib
_deps/monado-src/src/external/nanopb/*

View file

@ -1,2 +1,2 @@
SHA512 (WiVRn-v26.6.2.tar.gz) = ce210881d43a09a4fc8a6c6fe6e40b6925a110d715a3f15ad38d5210b9ef06361e62ee6e267ffcb8fbc0f50ff9a71254c6bcd3a3e13c7bff2b09eb2532fc0db8
SHA512 (monado-src-1b526bb3a0ff326ecd05af4c2c541407f53c6d4b.tar.bz2) = 662bf90d5a38e05c5909ed8d1a5c099979ae49ec6f7a71552a9d0c625ddda29f6b631e0feca8a01a6bb6eefcd6aacfbc81207f2852466165c561973df1cddf97
SHA512 (WiVRn-25.9.tar.gz) = 67db629b44cc001e25650ffe9a5cd2045d96f92471219f3dd44a9efe280c9c13a38a5d065f1f3a9e3895186d364cd3cd6e94728352a9d0beb5a01e26e355bedb
SHA512 (monado-src-7a4018e2d89151e60e562fac79eba90ca7a328d8.tar.bz2) = 3fbc2f49e83ce768c1af3909d6d754bfb637a1ebb73b516bf6482740efe7c0de54f7d4aae229f9e883dafc833c817746c8f6009e0db5c32c33b9b474b915ec6f

View file

@ -2,61 +2,105 @@
%bcond_with x264
%global forgeurl0 https://github.com/WiVRn/WiVRn
%global tag0 v%{version}
%global wivrn_version 25.9
%global tag0 v%{wivrn_version}
%global date 20250917
# WiVRn is based on Monado, we need the full source
# Monado base source (find in monado-rev file)
%global forgeurl1 https://gitlab.freedesktop.org/monado/monado
%global commit1 1b526bb3a0ff326ecd05af4c2c541407f53c6d4b
%global monado_version 25.1.0
%global commit1 7a4018e2d89151e60e562fac79eba90ca7a328d8
%global monado_version 25.0.0
%forgemeta
Name: wivrn
Version: 26.6.2
Version: %{wivrn_version}
Release: %autorelease
Summary: An OpenXR streaming application to a standalone headset
License: %{shrink:
Apache-2.0
AND BSD-2-Clause
AND BSD-3-Clause
AND BSL-1.0
AND CC-BY-4.0
AND CC0-1.0
AND CECILL-C
AND GPL-2.0-or-later
AND GPL-3.0-or-later
AND MIT
AND MIT-Khronos-old
AND OFL-1.1
AND Unlicense
AND Zlib
}
# For a per-file license breakdown see LicenseBreakdown.
License: GPL-3.0-or-later AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND BSL-1.0 AND CECILL-C AND CC0-1.0 AND CC-BY-4.0 AND MIT-Khronos-old AND Unlicense AND Zlib AND GPL-2.0-or-later AND MIT AND OFL-1.1
# CECILL-C
# _deps/monado-src/src/external/imgui/imgui/imconfig.h
# CC0-1.0 AND Apache-2.0
# _deps/monado-src/src/external/glad/*
# Unlicense
# _deps/monado-src/src/external/imgui/imgui/backends/imgui_impl_opengl3_loader.h
# Apache-2.0
# _deps/monado-src/gradle*
# _deps/monado-src/src/external/{flexkalman,glad,mermaid,nvpro_pyramid,openxr_includes}/*
# _deps/monado-src/src/xrt/auxiliary/math/m_quatexpmap.cpp
# gradle*
# resources/values/ic_wivrn_launcher_background.xml
# Apache-2.0 OR MIT
# _deps/monado-src/doc/doxygen-awesome-css/doxygen-awesome-*
# BSD-2-Clause
# _deps/monado-src/cmake/FindEigen3.cmake
# _deps/monado-src/src/external/hungarian/*
# _deps/monado-src/src/external/tracy/{client,common}/*
# _deps/monado-src/cmake/{FindEGL.cmake,FindSystemd.cmake,OptionWithDeps.cmake}
# _deps/monado-src/src/external/openvr_includes/*
# _deps/monado-src/src/external/tinyceres/*
# _deps/monado-src/src/external/tracy/libbacktrace/*
# _deps/monado-src/src/xrt/drivers/north_star/distortion_3d/*
# _deps/monado-src/src/xrt/tracking/hand/mercury/kine_lm/lm_rotations_ceres.inl
# BSD-3-Clause AND BSL-1.0
# _deps/monado-src/src/xrt/targets/steamvr_drv/*
# BSL-1.0
# _deps/monado-src/{CMakeLists.txt,CompilerFlags.cmake,build.gradel}
# _deps/monado-src/cmake/{CleanDirectoryList.cmake,FindHIDAPI.cmake,FindLeapV2.cmake,FindLibcheck.cmake,FindLibusb1.cmake,FindONNXRuntime.cmake,FindOpenGLES.cmake,FindOpenHMD.cmake,FindPercetto.cmake,Findbluetooth.cmake,FindcJSON.cmake,Findudev.cmake,GenerateKhrManifest.cmake,GenerateKhrManifestInternals.cmake.in,GenerateOpenXRRuntimeManifest.cmake,GenerateVulkanApiLayerManifest.cmake,GetGitRevisionDescription.cmake,GetGitRevisionDescription.cmake.in,PrefixListGlob.cmake,ProgramFilesGlob.cmake,SPIR-V.cmake,openxr_manifest.in.json.license}
# _deps/monado-src/src/external/{Catch2,android-jni-wrap,flexkalman,imgui,nvpro_pyramid,openxr_includes,solarxr,util-headers,vit_includes}
# _deps/monado-src/src/xrt/auxiliary/{android,bindings,d3d,gsteamer,math,ogl,os,tracking,util,vive,vk}/*
# _deps/monado-src/src/xrt/compositor/*
# _deps/monado-src/src/xrt/drivers/{android,arduino,daydream,depthai,euroc,hdk,ht,ht_ctrl_emu,hydra,illixr,multi_wrapper,north_star,ohmd,opengloves,psmv,qwerty,realsense,remote,rift_s,rokid,sample,simula,simulated,solarxr,steamvr_lh,survive,twrap,ultraleap_v2,v4l2,vf,vive,wmr,xreal_air}/*
# _deps/monado-src/src/xrt/include/tracking/t_hand_tracking.h
# _deps/monado-src/src/xrt/include/xrt/*
# _deps/monado-src/src/xrt/{ipc,state_trackers,targets,tracking}/*
# _deps/monado-src/tests/*
# server/{main.cpp,start_application.cpp,target_instance_wivrn.cpp}
# BSL-1.0 AND CC0-1.0
# _deps/monado-src/{doc,scripts}/*
# GPL-2.0-or-later
# tools/wireshark/dissector.cpp
# GPL-3.0-or-later
# {client,common,dashboard,server}/*
# MIT-Khronos-old
# _deps/monado-src/src/external/glad/include/KHR/khrplatform.h
# MIT
# _deps/monado-src/cmake/sanitizers/{FindASan.cmake,FindMSan.cmake,FindSanitizers.cmake,FindTSan.cmake,FindUBSan.cmake,asan-wrapper,sanitize-helpers.cmake}
# _deps/monado-src/doc/doxygen-awesome-css/*
# _deps/monado-src/src/external/{cjson,imgui,jnipp,mermaid,renderdoc_api,solarxr,stb,tracy,valve-file-vdf}/*
# _deps/monado-src/src/xrt/targets/android_common/src/main/res/raw/*
# external/{magic_enum.hpp,magic_enum_containers.hpp,vk_mem_alloc.h}
# Zlib
# _deps/monado-src/src/external/nanopb/*
URL: %{forgeurl0}
Source0: %{forgesource0}
# License: GPL-3.0-or-later
Source1: %{forgeurl1}/-/archive/%{commit1}/monado-src-%{commit1}.tar.bz2
# https://github.com/WiVRn/WiVRn/issues/505 - Fix APK download
Patch99: https://github.com/WiVRn/WiVRn/commit/66ca73981d0c6c079b34566fa53a7a415c403611.patch
# Check for new/removed patches when updating: https://github.com/WiVRn/WiVRn/tree/master/patches/monado/ (check the tag)
# Make sure to re-pull the patches every release. They are rebased and need to be updated!
# For tagged releases: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%%{tag0}/patches/monado/
# For commit releases: https://raw.githubusercontent.com/WiVRn/WiVRn/%%{commit0}/patches/monado/
# downstream-only - WiVRn specific Monado patches
Patch0001: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0001-c-multi-early-wake-of-compositor.patch
# downstream-only - WiVRn specific Monado patches
Patch0002: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0002-Use-extern-socket-fd.patch
Patch0002: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0002-ipc-server-Always-listen-to-stdin.patch
# downstream-only - WiVRn specific Monado patches
Patch0003: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0003-change-environment-blend-mode-selection-logic.patch
Patch0003: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0003-Use-extern-socket-fd.patch
# downstream-only - WiVRn specific Monado patches
Patch0004: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0004-st-oxr-forward-0-refresh-rate.patch
Patch0004: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0004-change-environment-blend-mode-selection-logic.patch
# downstream-only - WiVRn specific Monado patches
Patch0005: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0005-d-steamvr_lh-prevent-crash-on-vive-pro2-WiVRn.patch
Patch0005: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0005-c-main-allow-custom-pacing-app-factory.patch
# downstream-only - WiVRn specific Monado patches
Patch0006: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0006-st-oxr-push-XrEventDataInteractionProfileChanged-whe.patch
Patch0006: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0006-st-oxr-forward-0-refresh-rate.patch
# downstream-only - WiVRn specific Monado patches
Patch0007: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0007-don-t-verify-GL-stuff.patch
Patch0007: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0007-Replace-distortion-with-foveation.patch
# downstream-only - WiVRn specific Monado patches
Patch0008: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0008-configure-u_git_tag-in-WiVRn.patch
Patch0008: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0008-Limit-foveation-samples-per-pixel.patch
# If BuildRequires change, be sure to update envision-wivrn Requires
@ -73,7 +117,6 @@ BuildRequires: kf6-kcoreaddons-devel
BuildRequires: kf6-ki18n-devel
BuildRequires: kf6-kiconthemes-devel
BuildRequires: kf6-kirigami-devel
BuildRequires: kf6-kirigami-addons-devel
BuildRequires: libappstream-glib
BuildRequires: librsvg2-tools
BuildRequires: ninja-build
@ -131,10 +174,7 @@ BuildRequires: pkgconfig(x264)
%endif
BuildRequires: pkgconfig(xrandr)
BuildRequires: qcoro-qt6-devel
BuildRequires: qt6-qtbase-private-devel
BuildRequires: qt6-qtdeclarative-devel
BuildRequires: qt6qml(org.kde.desktop)
BuildRequires: spirv-tools
BuildRequires: systemd-rpm-macros
Requires: android-tools
@ -146,10 +186,9 @@ Recommends: %{name}-dashboard
Provides: bundled(monado) = %{monado_version}
# no big-endian support, vulkan 32bit headers broken, android-tools not available on ppc64le
# no big-endian support, vulkan 32bit headers broken
# https://github.com/WiVRn/WiVRn/issues/271
# https://src.fedoraproject.org/rpms/android-tools/c/38eea7154cb5930259f7a3ae59cdb123fb7d2862?branch=rawhide
ExcludeArch: s390x %{ix86} ppc64le
ExcludeArch: s390x %{ix86}
%description
WiVRn wirelessly connects a standalone VR headset to a Linux computer.
@ -158,10 +197,9 @@ on the computer.
Supports a wide range of headsets such as:
Meta Quest 1, 2, 3, 3S, pro
Quest 1 / 2 / Pro / 3 / 3S
Pico Neo 4
HTC Vive Focus 3, XR Elite
Samsung Galaxy XR
HTC Vive Focus 3 / HTC Vive XR elite
and most other Android based headsets
@ -169,7 +207,6 @@ and most other Android based headsets
Summary: WiVRn dashboard
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: hicolor-icon-theme
Requires: kf6-kirigami-addons
Requires: qt6qml(org.kde.desktop)
%description -n %{name}-dashboard
@ -180,12 +217,15 @@ and to assist in pairing the headset with the server.
%prep
%setup -q -n WiVRn-%{version}
%forgesetup
# Fix APK download
%patch -P99 -p1
# Extract libraries that are bundled
mkdir -p _deps/monado-src
tar -xvf %{SOURCE1} --strip-components 1 -C _deps/monado-src
# Apply WiVRn downstream Monado patches
# Apply WiVRn downstream patches
pushd _deps/monado-src
%patch -P0001 -p1
%patch -P0002 -p1
@ -207,14 +247,12 @@ popd
-DFETCHCONTENT_BASE_DIR="_deps" \
-DFETCHCONTENT_FULLY_DISCONNECTED=ON \
-DGIT_DESC=v%{version} \
-DGIT_COMMIT=v%{version} \
-DOVR_COMPAT_SEARCH_PATH=%{_libdir}/opencomposite/runtime:%{_libdir}/xrizer/runtime:/opt/opencomposite:/opt/xrizer \
-DOVR_COMPAT_SEARCH_PATH=%{_libdir}/opencomposite/runtime \
-DWIVRN_BUILD_CLIENT=OFF \
-DWIVRN_BUILD_DASHBOARD=ON \
-DWIVRN_BUILD_DISSECTOR=OFF \
-DWIVRN_BUILD_SERVER=ON \
-DWIVRN_BUILD_WIVRNCTL=ON \
-DWIVRN_FEATURE_STEAMVR_LIGHTHOUSE=ON \
-DWIVRN_USE_NVENC=ON \
-DWIVRN_USE_PIPEWIRE=ON \
-DWIVRN_USE_PULSEAUDIO=OFF \
@ -237,10 +275,6 @@ popd
install -m 0755 -vd %{buildroot}%{_sysconfdir}/ld.so.conf.d
echo "%{_libdir}/%{name}" > %{buildroot}%{_sysconfdir}/ld.so.conf.d/%{name}.conf
# Import the WiVRn OpenXR runtime into Steam's pressure-vessel container
install -m 0755 -vd %{buildroot}%{_environmentdir}
echo "PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1" > %{buildroot}%{_environmentdir}/%{name}.conf
%find_lang %{name}-dashboard
%check
@ -251,19 +285,18 @@ appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/*.metainfo.xml
%files -f %{name}-dashboard.lang
%license COPYING LICENSE-OFL-1.1 _deps/monado-src/LICENSES/*
%doc README.md docs/
%{_bindir}/wivrn-server
%caps(cap_sys_nice=ep) %{_bindir}/wivrn-server
%{_bindir}/wivrnctl
%dir %{_libdir}/%{name}
%{_libdir}/%{name}/libopenxr_wivrn.so
%{_libdir}/%{name}/libmonado_wivrn.so
%{_libdir}/%{name}/libmonado_wivrn.so.25
%{_libdir}/%{name}/libmonado_wivrn.so.25.1.0
%{_libdir}/%{name}/libmonado_wivrn.so.25.0.0
%{_datarootdir}/openxr/1/openxr_wivrn.json
%{_userunitdir}/wivrn.service
%{_prefix}/lib/firewalld/services/wivrn.xml
%{_metainfodir}/io.github.wivrn.wivrn.metainfo.xml
%{_sysconfdir}/ld.so.conf.d/%{name}.conf
%{_environmentdir}/%{name}.conf
%files -n %{name}-dashboard
%{_bindir}/wivrn-dashboard