Compare commits
32 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2a08f5b11e | ||
|
|
87c7bfbe88 | ||
|
|
5f848a58e8 | ||
|
|
a701af39c2 | ||
|
|
75cb9e1382 | ||
|
|
779d640f0c | ||
|
|
078b99f733 | ||
|
|
a172e8cdc1 | ||
|
|
0788d160ac | ||
|
|
03d092d358 | ||
|
|
6c65671668 | ||
|
|
39a5a53ee5 | ||
|
|
63072bb6d9 | ||
|
|
d8a92b79c6 | ||
|
|
47bce81817 | ||
|
|
3a1f39a022 | ||
|
|
eddf61bf28 | ||
|
|
ab991d68ab | ||
|
|
7103e06440 | ||
|
|
06332b094e | ||
|
|
56fb0d69f5 | ||
|
|
304f49bd5d | ||
|
|
56a638ef9c | ||
|
|
b6b0cfc320 | ||
|
|
b9107acdf1 | ||
|
|
d0c02cfb76 | ||
|
|
c7a2415cac | ||
|
|
784d07c05d | ||
|
|
8016bf0637 | ||
|
|
a10904a200 | ||
|
|
aa7cd8a904 | ||
|
|
7bf8486974 |
22 changed files with 355 additions and 4167 deletions
25
.gitignore
vendored
25
.gitignore
vendored
|
|
@ -5,3 +5,28 @@
|
|||
/WiVRn-0.24.tar.gz
|
||||
/monado-src-848a24aa106758fd6c7afcab6d95880c57dbe450.tar.bz2
|
||||
/WiVRn-0.24.1.tar.gz
|
||||
/WiVRn-0.25.tar.gz
|
||||
/monado-src-2a6932d46dad9aa957205e8a47ec2baa33041076.tar.bz2
|
||||
/WiVRn-25.6.tar.gz
|
||||
/monado-src-bb9bcee2a3be75592de819d9e3fb2c8ed27bb7dc.tar.bz2
|
||||
/WiVRn-25.6.1.tar.gz
|
||||
/WiVRn-25.8.tar.gz
|
||||
/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
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
From a0e439f723394452ab79a09c04df5135c3613d11 Mon Sep 17 00:00:00 2001
|
||||
From de3b592fc26d7b26b4850fcc78d7e6b21147f76b Mon Sep 17 00:00:00 2001
|
||||
From: Patrick Nicolas <patricknicolas@laposte.net>
|
||||
Date: Tue, 22 Oct 2024 15:23:19 +0200
|
||||
Subject: [PATCH 01/13] c/multi: early wake of compositor
|
||||
Subject: [PATCH 1/8] c/multi: early wake of compositor
|
||||
|
||||
---
|
||||
.../compositor/multi/comp_multi_compositor.c | 14 +++++++++
|
||||
|
|
@ -10,10 +10,10 @@ Subject: [PATCH 01/13] 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 2895ccb0f..0c940cb3a 100644
|
||||
index 33675d43f..71c5ebf9e 100644
|
||||
--- a/src/xrt/compositor/multi/comp_multi_compositor.c
|
||||
+++ b/src/xrt/compositor/multi/comp_multi_compositor.c
|
||||
@@ -231,7 +231,21 @@ wait_for_scheduled_free(struct multi_compositor *mc)
|
||||
@@ -236,7 +236,21 @@ wait_for_scheduled_free(struct multi_compositor *mc)
|
||||
os_mutex_lock(&mc->slot_lock);
|
||||
slot_move_and_clear_locked(mc, &mc->scheduled, &mc->progress);
|
||||
os_mutex_unlock(&mc->slot_lock);
|
||||
|
|
@ -36,10 +36,10 @@ index 2895ccb0f..0c940cb3a 100644
|
|||
|
||||
static void *
|
||||
diff --git a/src/xrt/compositor/multi/comp_multi_private.h b/src/xrt/compositor/multi/comp_multi_private.h
|
||||
index 3351defa4..e8f0c8295 100644
|
||||
index 6c7ec05f8..588878e38 100644
|
||||
--- a/src/xrt/compositor/multi/comp_multi_private.h
|
||||
+++ b/src/xrt/compositor/multi/comp_multi_private.h
|
||||
@@ -359,6 +359,10 @@ struct multi_system_compositor
|
||||
@@ -365,6 +365,10 @@ struct multi_system_compositor
|
||||
*/
|
||||
struct os_mutex list_and_timing_lock;
|
||||
|
||||
|
|
@ -51,19 +51,19 @@ index 3351defa4..e8f0c8295 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 b06b03a58..249e07d7d 100644
|
||||
index 5a4f35b81..cbda39c24 100644
|
||||
--- a/src/xrt/compositor/multi/comp_multi_system.c
|
||||
+++ b/src/xrt/compositor/multi/comp_multi_system.c
|
||||
@@ -23,6 +23,8 @@
|
||||
#include "util/u_trace_marker.h"
|
||||
#include "util/u_distortion_mesh.h"
|
||||
@@ -14,6 +14,8 @@
|
||||
#include "xrt/xrt_defines.h"
|
||||
#include "xrt/xrt_session.h"
|
||||
|
||||
+#include "math/m_api.h"
|
||||
+
|
||||
#ifdef XRT_OS_LINUX
|
||||
#include "util/u_linux.h"
|
||||
#endif
|
||||
@@ -392,17 +394,24 @@ broadcast_timings_to_pacers(struct multi_system_compositor *msc,
|
||||
#include "os/os_time.h"
|
||||
#include "os/os_threading.h"
|
||||
|
||||
@@ -426,17 +428,24 @@ broadcast_timings_to_pacers(struct multi_system_compositor *msc,
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -93,7 +93,7 @@ index b06b03a58..249e07d7d 100644
|
|||
}
|
||||
|
||||
static void
|
||||
@@ -525,10 +534,13 @@ multi_main_loop(struct multi_system_compositor *msc)
|
||||
@@ -562,10 +571,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 b06b03a58..249e07d7d 100644
|
|||
|
||||
// Now we know the diff, broadcast to pacers.
|
||||
broadcast_timings_to_pacers(msc, predicted_display_time_ns, predicted_display_period_ns, diff_ns);
|
||||
@@ -705,6 +717,8 @@ system_compositor_destroy(struct xrt_system_compositor *xsc)
|
||||
@@ -785,6 +797,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 b06b03a58..249e07d7d 100644
|
|||
|
||||
free(msc);
|
||||
}
|
||||
@@ -759,6 +773,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;
|
||||
@@ -843,6 +857,8 @@ comp_multi_create_system_compositor(struct xrt_compositor_native *xcn,
|
||||
msc->get_view_config_callback = get_view_config_callback;
|
||||
|
||||
os_mutex_init(&msc->list_and_timing_lock);
|
||||
+ os_mutex_init(&msc->wake_mutex);
|
||||
|
|
@ -128,5 +128,5 @@ index b06b03a58..249e07d7d 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.48.1
|
||||
2.54.0
|
||||
|
||||
|
|
|
|||
|
|
@ -1,26 +1,26 @@
|
|||
From 95631921f2dd8f422281d5d94bca167bcb773471 Mon Sep 17 00:00:00 2001
|
||||
From 22d9bf87e9dd6a0d5970258a6b6cd6ca82c3bb26 Mon Sep 17 00:00:00 2001
|
||||
From: Patrick Nicolas <patricknicolas@laposte.net>
|
||||
Date: Tue, 8 Oct 2024 22:13:15 +0200
|
||||
Subject: [PATCH 03/10] Use extern socket fd
|
||||
Subject: [PATCH 2/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 ad6b473b7..ea6fad65b 100644
|
||||
index a0bef3dde..453dd38ca 100644
|
||||
--- a/src/xrt/ipc/server/ipc_server_mainloop_linux.c
|
||||
+++ b/src/xrt/ipc/server/ipc_server_mainloop_linux.c
|
||||
@@ -55,6 +55,8 @@
|
||||
*/
|
||||
DEBUG_GET_ONCE_BOOL_OPTION(skip_stdin, "XRT_NO_STDIN", false)
|
||||
@@ -50,6 +50,8 @@
|
||||
#endif
|
||||
|
||||
|
||||
+extern int listen_socket;
|
||||
+
|
||||
/*
|
||||
*
|
||||
* Static functions.
|
||||
@@ -63,6 +65,12 @@ DEBUG_GET_ONCE_BOOL_OPTION(skip_stdin, "XRT_NO_STDIN", false)
|
||||
@@ -58,6 +60,12 @@
|
||||
static int
|
||||
get_systemd_socket(struct ipc_server_mainloop *ml, int *out_fd)
|
||||
{
|
||||
|
|
@ -34,5 +34,5 @@ index ad6b473b7..ea6fad65b 100644
|
|||
// We may have been launched with socket activation
|
||||
int num_fds = sd_listen_fds(0);
|
||||
--
|
||||
2.48.0
|
||||
2.54.0
|
||||
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
From 6e5926f76f8a7ee66eff164ebe630c65d024237f Mon Sep 17 00:00:00 2001
|
||||
From: Patrick Nicolas <patricknicolas@laposte.net>
|
||||
Date: Tue, 2 Apr 2024 17:14:42 +0200
|
||||
Subject: [PATCH 02/10] 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.48.0
|
||||
|
||||
|
|
@ -1,17 +1,17 @@
|
|||
From 9a3e2f9bdc3149aaa6db1c54c95b0b4f9ab379ff Mon Sep 17 00:00:00 2001
|
||||
From 3c7450d800b0e3f35440f41d3bfcf5b5abe6dfe8 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 05/10] change environment blend mode selection logic
|
||||
Subject: [PATCH 3/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 b7d2c2174..62a5a0c27 100644
|
||||
index cbda39c24..c0c6c9f60 100644
|
||||
--- a/src/xrt/compositor/multi/comp_multi_system.c
|
||||
+++ b/src/xrt/compositor/multi/comp_multi_system.c
|
||||
@@ -232,23 +232,31 @@ find_active_blend_mode(struct multi_compositor **overlay_sorted_clients, size_t
|
||||
@@ -231,23 +231,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 b7d2c2174..62a5a0c27 100644
|
|||
}
|
||||
|
||||
--
|
||||
2.48.0
|
||||
2.54.0
|
||||
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
From c95362727746c19ff039168ebec3e6e21e6bcc3c Mon Sep 17 00:00:00 2001
|
||||
From: galister <3123227-galister@users.noreply.gitlab.com>
|
||||
Date: Mon, 19 Aug 2024 18:51:45 +0900
|
||||
Subject: [PATCH 04/10] c/render: Add storage usage to distortion mesh
|
||||
|
||||
---
|
||||
src/xrt/compositor/render/render_distortion.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/xrt/compositor/render/render_distortion.c b/src/xrt/compositor/render/render_distortion.c
|
||||
index 8ac24db8e..5a7e400c3 100644
|
||||
--- a/src/xrt/compositor/render/render_distortion.c
|
||||
+++ b/src/xrt/compositor/render/render_distortion.c
|
||||
@@ -42,7 +42,7 @@ create_distortion_image_and_view(struct vk_bundle *vk,
|
||||
vk, // vk_bundle
|
||||
extent, // extent
|
||||
format, // format
|
||||
- VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT, // usage
|
||||
+ VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT, // usage
|
||||
&device_memory, // out_device_memory
|
||||
&image); // out_image
|
||||
VK_CHK_AND_RET(ret, "vk_create_image_simple");
|
||||
--
|
||||
2.48.0
|
||||
|
||||
47
0004-st-oxr-forward-0-refresh-rate.patch
Normal file
47
0004-st-oxr-forward-0-refresh-rate.patch
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
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
|
||||
|
||||
25
0005-d-steamvr_lh-prevent-crash-on-vive-pro2-WiVRn.patch
Normal file
25
0005-d-steamvr_lh-prevent-crash-on-vive-pro2-WiVRn.patch
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
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
|
||||
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,27 @@
|
|||
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
|
||||
|
||||
|
|
@ -1,719 +0,0 @@
|
|||
From cf75548500d8aff912f2e63d68e0ea3628941bf8 Mon Sep 17 00:00:00 2001
|
||||
From: Patrick Nicolas <patricknicolas@laposte.net>
|
||||
Date: Wed, 11 Sep 2024 22:56:29 +0200
|
||||
Subject: [PATCH 07/10] Convert to YCbCr in Monado
|
||||
|
||||
---
|
||||
src/xrt/compositor/main/comp_renderer.c | 6 +-
|
||||
src/xrt/compositor/main/comp_target.h | 3 +-
|
||||
src/xrt/compositor/render/render_compute.c | 104 +++++++++++++------
|
||||
src/xrt/compositor/render/render_interface.h | 15 ++-
|
||||
src/xrt/compositor/render/render_resources.c | 35 +++++--
|
||||
src/xrt/compositor/shaders/distortion.comp | 55 +++++++---
|
||||
src/xrt/compositor/util/comp_render.h | 12 ++-
|
||||
src/xrt/compositor/util/comp_render_cs.c | 41 +++++---
|
||||
8 files changed, 186 insertions(+), 85 deletions(-)
|
||||
|
||||
diff --git a/src/xrt/compositor/main/comp_renderer.c b/src/xrt/compositor/main/comp_renderer.c
|
||||
index 104f761bf..3b3439d5a 100644
|
||||
--- a/src/xrt/compositor/main/comp_renderer.c
|
||||
+++ b/src/xrt/compositor/main/comp_renderer.c
|
||||
@@ -1009,7 +1009,8 @@ dispatch_compute(struct comp_renderer *r,
|
||||
|
||||
// Target Vulkan resources..
|
||||
VkImage target_image = r->c->target->images[r->acquired_buffer].handle;
|
||||
- VkImageView target_image_view = r->c->target->images[r->acquired_buffer].view;
|
||||
+ VkImageView target_image_view_y = r->c->target->images[r->acquired_buffer].view;
|
||||
+ VkImageView target_image_view_cbcr = r->c->target->images[r->acquired_buffer].view_cbcr;
|
||||
|
||||
// Target view information.
|
||||
struct render_viewport_data views[XRT_MAX_VIEWS];
|
||||
@@ -1020,7 +1021,8 @@ dispatch_compute(struct comp_renderer *r,
|
||||
comp_render_cs_initial_init( //
|
||||
&data, // data
|
||||
target_image, // target_image
|
||||
- target_image_view, // target_unorm_view
|
||||
+ target_image_view_y, // target_unorm_view_y
|
||||
+ target_image_view_cbcr, // target_unorm_view_cbcr
|
||||
fast_path, // fast_path
|
||||
do_timewarp); // do_timewarp
|
||||
|
||||
diff --git a/src/xrt/compositor/main/comp_target.h b/src/xrt/compositor/main/comp_target.h
|
||||
index 876ff8cd9..924b4ea08 100644
|
||||
--- a/src/xrt/compositor/main/comp_target.h
|
||||
+++ b/src/xrt/compositor/main/comp_target.h
|
||||
@@ -61,7 +61,8 @@ enum comp_target_display_timing_usage
|
||||
struct comp_target_image
|
||||
{
|
||||
VkImage handle;
|
||||
- VkImageView view;
|
||||
+ VkImageView view; // Y
|
||||
+ VkImageView view_cbcr;
|
||||
};
|
||||
|
||||
/*!
|
||||
diff --git a/src/xrt/compositor/render/render_compute.c b/src/xrt/compositor/render/render_compute.c
|
||||
index 131b97066..a9552cf2c 100644
|
||||
--- a/src/xrt/compositor/render/render_compute.c
|
||||
+++ b/src/xrt/compositor/render/render_compute.c
|
||||
@@ -66,8 +66,8 @@ calc_dispatch_dims_views(const struct render_viewport_data views[XRT_MAX_VIEWS],
|
||||
#undef IMAX
|
||||
|
||||
// Power of two divide and round up.
|
||||
- w = uint_divide_and_round_up(w, 8);
|
||||
- h = uint_divide_and_round_up(h, 8);
|
||||
+ w = uint_divide_and_round_up(w, 16);
|
||||
+ h = uint_divide_and_round_up(h, 16);
|
||||
|
||||
*out_w = w;
|
||||
*out_h = h;
|
||||
@@ -86,8 +86,10 @@ update_compute_layer_descriptor_set(struct vk_bundle *vk,
|
||||
VkSampler src_samplers[RENDER_MAX_IMAGES_SIZE],
|
||||
VkImageView src_image_views[RENDER_MAX_IMAGES_SIZE],
|
||||
uint32_t image_count,
|
||||
- uint32_t target_binding,
|
||||
- VkImageView target_image_view,
|
||||
+ uint32_t target_binding_y,
|
||||
+ uint32_t target_binding_cbcr,
|
||||
+ VkImageView target_image_view_y,
|
||||
+ VkImageView target_image_view_cbcr,
|
||||
uint32_t ubo_binding,
|
||||
VkBuffer ubo_buffer,
|
||||
VkDeviceSize ubo_size,
|
||||
@@ -100,8 +102,13 @@ update_compute_layer_descriptor_set(struct vk_bundle *vk,
|
||||
src_image_info[i].imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||
}
|
||||
|
||||
- VkDescriptorImageInfo target_image_info = {
|
||||
- .imageView = target_image_view,
|
||||
+ VkDescriptorImageInfo target_image_info_y = {
|
||||
+ .imageView = target_image_view_y,
|
||||
+ .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||
+ };
|
||||
+
|
||||
+ VkDescriptorImageInfo target_image_info_cbcr = {
|
||||
+ .imageView = target_image_view_cbcr,
|
||||
.imageLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||
};
|
||||
|
||||
@@ -111,7 +118,7 @@ update_compute_layer_descriptor_set(struct vk_bundle *vk,
|
||||
.range = ubo_size,
|
||||
};
|
||||
|
||||
- VkWriteDescriptorSet write_descriptor_sets[3] = {
|
||||
+ VkWriteDescriptorSet write_descriptor_sets[4] = {
|
||||
{
|
||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||
.dstSet = descriptor_set,
|
||||
@@ -123,10 +130,10 @@ update_compute_layer_descriptor_set(struct vk_bundle *vk,
|
||||
{
|
||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||
.dstSet = descriptor_set,
|
||||
- .dstBinding = target_binding,
|
||||
+ .dstBinding = target_binding_y,
|
||||
.descriptorCount = 1,
|
||||
.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
|
||||
- .pImageInfo = &target_image_info,
|
||||
+ .pImageInfo = &target_image_info_y,
|
||||
},
|
||||
{
|
||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||
@@ -136,6 +143,14 @@ update_compute_layer_descriptor_set(struct vk_bundle *vk,
|
||||
.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
|
||||
.pBufferInfo = &buffer_info,
|
||||
},
|
||||
+ {
|
||||
+ .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||
+ .dstSet = descriptor_set,
|
||||
+ .dstBinding = target_binding_cbcr,
|
||||
+ .descriptorCount = 1,
|
||||
+ .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
|
||||
+ .pImageInfo = &target_image_info_cbcr,
|
||||
+ },
|
||||
};
|
||||
|
||||
vk->vkUpdateDescriptorSets( //
|
||||
@@ -154,8 +169,10 @@ update_compute_shared_descriptor_set(struct vk_bundle *vk,
|
||||
uint32_t distortion_binding,
|
||||
VkSampler distortion_samplers[3 * XRT_MAX_VIEWS],
|
||||
VkImageView distortion_image_views[3 * XRT_MAX_VIEWS],
|
||||
- uint32_t target_binding,
|
||||
- VkImageView target_image_view,
|
||||
+ uint32_t target_binding_y,
|
||||
+ uint32_t target_binding_cbcr,
|
||||
+ VkImageView target_image_view_y,
|
||||
+ VkImageView target_image_view_cbcr,
|
||||
uint32_t ubo_binding,
|
||||
VkBuffer ubo_buffer,
|
||||
VkDeviceSize ubo_size,
|
||||
@@ -176,8 +193,13 @@ update_compute_shared_descriptor_set(struct vk_bundle *vk,
|
||||
distortion_image_info[i].imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||
}
|
||||
|
||||
- VkDescriptorImageInfo target_image_info = {
|
||||
- .imageView = target_image_view,
|
||||
+ VkDescriptorImageInfo target_image_y_info = {
|
||||
+ .imageView = target_image_view_y,
|
||||
+ .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||
+ };
|
||||
+
|
||||
+ VkDescriptorImageInfo target_image_cbcr_info = {
|
||||
+ .imageView = target_image_view_cbcr,
|
||||
.imageLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||
};
|
||||
|
||||
@@ -187,7 +209,7 @@ update_compute_shared_descriptor_set(struct vk_bundle *vk,
|
||||
.range = ubo_size,
|
||||
};
|
||||
|
||||
- VkWriteDescriptorSet write_descriptor_sets[4] = {
|
||||
+ VkWriteDescriptorSet write_descriptor_sets[5] = {
|
||||
{
|
||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||
.dstSet = descriptor_set,
|
||||
@@ -207,10 +229,10 @@ update_compute_shared_descriptor_set(struct vk_bundle *vk,
|
||||
{
|
||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||
.dstSet = descriptor_set,
|
||||
- .dstBinding = target_binding,
|
||||
+ .dstBinding = target_binding_y,
|
||||
.descriptorCount = 1,
|
||||
.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
|
||||
- .pImageInfo = &target_image_info,
|
||||
+ .pImageInfo = &target_image_y_info,
|
||||
},
|
||||
{
|
||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||
@@ -220,6 +242,14 @@ update_compute_shared_descriptor_set(struct vk_bundle *vk,
|
||||
.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
|
||||
.pBufferInfo = &buffer_info,
|
||||
},
|
||||
+ {
|
||||
+ .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||
+ .dstSet = descriptor_set,
|
||||
+ .dstBinding = target_binding_cbcr,
|
||||
+ .descriptorCount = 1,
|
||||
+ .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
|
||||
+ .pImageInfo = &target_image_cbcr_info,
|
||||
+ },
|
||||
};
|
||||
|
||||
vk->vkUpdateDescriptorSets( //
|
||||
@@ -409,7 +439,8 @@ render_compute_layers(struct render_compute *render,
|
||||
VkSampler src_samplers[RENDER_MAX_IMAGES_SIZE],
|
||||
VkImageView src_image_views[RENDER_MAX_IMAGES_SIZE],
|
||||
uint32_t num_srcs,
|
||||
- VkImageView target_image_view,
|
||||
+ VkImageView target_image_view_y,
|
||||
+ VkImageView target_image_view_cbcr,
|
||||
const struct render_viewport_data *view,
|
||||
bool do_timewarp)
|
||||
{
|
||||
@@ -429,8 +460,10 @@ render_compute_layers(struct render_compute *render,
|
||||
src_samplers, //
|
||||
src_image_views, //
|
||||
num_srcs, //
|
||||
- r->compute.target_binding, //
|
||||
- target_image_view, //
|
||||
+ r->compute.target_binding_y, //
|
||||
+ r->compute.target_binding_cbcr, //
|
||||
+ target_image_view_y, //
|
||||
+ target_image_view_cbcr, //
|
||||
r->compute.ubo_binding, //
|
||||
ubo, //
|
||||
VK_WHOLE_SIZE, //
|
||||
@@ -473,7 +506,8 @@ render_compute_projection_timewarp(struct render_compute *render,
|
||||
const struct xrt_fov src_fovs[XRT_MAX_VIEWS],
|
||||
const struct xrt_pose new_poses[XRT_MAX_VIEWS],
|
||||
VkImage target_image,
|
||||
- VkImageView target_image_view,
|
||||
+ VkImageView target_image_view_y,
|
||||
+ VkImageView target_image_view_cbcr,
|
||||
const struct render_viewport_data views[XRT_MAX_VIEWS])
|
||||
{
|
||||
assert(render->r != NULL);
|
||||
@@ -542,8 +576,10 @@ render_compute_projection_timewarp(struct render_compute *render,
|
||||
r->compute.distortion_binding, //
|
||||
distortion_samplers, //
|
||||
r->distortion.image_views, //
|
||||
- r->compute.target_binding, //
|
||||
- target_image_view, //
|
||||
+ r->compute.target_binding_y, //
|
||||
+ r->compute.target_binding_cbcr, //
|
||||
+ target_image_view_y, //
|
||||
+ target_image_view_cbcr, //
|
||||
r->compute.ubo_binding, //
|
||||
r->compute.distortion.ubo.buffer, //
|
||||
VK_WHOLE_SIZE, //
|
||||
@@ -581,7 +617,7 @@ render_compute_projection_timewarp(struct render_compute *render,
|
||||
.srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT,
|
||||
.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT,
|
||||
.oldLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||
- .newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
|
||||
+ .newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
|
||||
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
|
||||
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
|
||||
.image = target_image,
|
||||
@@ -607,7 +643,8 @@ render_compute_projection(struct render_compute *render,
|
||||
VkImageView src_image_views[XRT_MAX_VIEWS],
|
||||
const struct xrt_normalized_rect src_norm_rects[XRT_MAX_VIEWS],
|
||||
VkImage target_image,
|
||||
- VkImageView target_image_view,
|
||||
+ VkImageView target_image_view_y,
|
||||
+ VkImageView target_image_view_cbcr,
|
||||
const struct render_viewport_data views[XRT_MAX_VIEWS])
|
||||
{
|
||||
assert(render->r != NULL);
|
||||
@@ -666,8 +703,10 @@ render_compute_projection(struct render_compute *render,
|
||||
r->compute.distortion_binding, //
|
||||
distortion_samplers, //
|
||||
r->distortion.image_views, //
|
||||
- r->compute.target_binding, //
|
||||
- target_image_view, //
|
||||
+ r->compute.target_binding_y, //
|
||||
+ r->compute.target_binding_cbcr, //
|
||||
+ target_image_view_y, //
|
||||
+ target_image_view_cbcr, //
|
||||
r->compute.ubo_binding, //
|
||||
r->compute.distortion.ubo.buffer, //
|
||||
VK_WHOLE_SIZE, //
|
||||
@@ -705,7 +744,7 @@ render_compute_projection(struct render_compute *render,
|
||||
.srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT,
|
||||
.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT,
|
||||
.oldLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||
- .newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
|
||||
+ .newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
|
||||
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
|
||||
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
|
||||
.image = target_image,
|
||||
@@ -728,7 +767,8 @@ render_compute_projection(struct render_compute *render,
|
||||
void
|
||||
render_compute_clear(struct render_compute *render,
|
||||
VkImage target_image,
|
||||
- VkImageView target_image_view,
|
||||
+ VkImageView target_image_view_y,
|
||||
+ VkImageView target_image_view_cbcr,
|
||||
const struct render_viewport_data views[XRT_MAX_VIEWS])
|
||||
{
|
||||
assert(render->r != NULL);
|
||||
@@ -795,8 +835,10 @@ render_compute_clear(struct render_compute *render,
|
||||
r->compute.distortion_binding, //
|
||||
distortion_samplers, //
|
||||
r->distortion.image_views, //
|
||||
- r->compute.target_binding, //
|
||||
- target_image_view, //
|
||||
+ r->compute.target_binding_y, //
|
||||
+ r->compute.target_binding_cbcr, //
|
||||
+ target_image_view_y, //
|
||||
+ target_image_view_cbcr, //
|
||||
r->compute.ubo_binding, //
|
||||
r->compute.clear.ubo.buffer, //
|
||||
VK_WHOLE_SIZE, // ubo_size
|
||||
@@ -834,7 +876,7 @@ render_compute_clear(struct render_compute *render,
|
||||
.srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT,
|
||||
.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT,
|
||||
.oldLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||
- .newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
|
||||
+ .newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
|
||||
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
|
||||
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
|
||||
.image = target_image,
|
||||
diff --git a/src/xrt/compositor/render/render_interface.h b/src/xrt/compositor/render/render_interface.h
|
||||
index aab965e0c..b0e568401 100644
|
||||
--- a/src/xrt/compositor/render/render_interface.h
|
||||
+++ b/src/xrt/compositor/render/render_interface.h
|
||||
@@ -488,7 +488,8 @@ struct render_resources
|
||||
uint32_t distortion_binding;
|
||||
|
||||
//! Writing the image out too.
|
||||
- uint32_t target_binding;
|
||||
+ uint32_t target_binding_y;
|
||||
+ uint32_t target_binding_cbcr;
|
||||
|
||||
//! Uniform data binding.
|
||||
uint32_t ubo_binding;
|
||||
@@ -1374,7 +1375,8 @@ render_compute_layers(struct render_compute *render,
|
||||
VkSampler src_samplers[RENDER_MAX_IMAGES_SIZE],
|
||||
VkImageView src_image_views[RENDER_MAX_IMAGES_SIZE],
|
||||
uint32_t num_srcs,
|
||||
- VkImageView target_image_view,
|
||||
+ VkImageView target_image_view_y,
|
||||
+ VkImageView target_image_view_cbcr,
|
||||
const struct render_viewport_data *view,
|
||||
bool timewarp);
|
||||
|
||||
@@ -1390,7 +1392,8 @@ render_compute_projection_timewarp(struct render_compute *render,
|
||||
const struct xrt_fov src_fovs[XRT_MAX_VIEWS],
|
||||
const struct xrt_pose new_poses[XRT_MAX_VIEWS],
|
||||
VkImage target_image,
|
||||
- VkImageView target_image_view,
|
||||
+ VkImageView target_image_view_y,
|
||||
+ VkImageView target_image_view_cbcr,
|
||||
const struct render_viewport_data views[XRT_MAX_VIEWS]);
|
||||
|
||||
/*!
|
||||
@@ -1402,7 +1405,8 @@ render_compute_projection(struct render_compute *render,
|
||||
VkImageView src_image_views[XRT_MAX_VIEWS],
|
||||
const struct xrt_normalized_rect src_rects[XRT_MAX_VIEWS],
|
||||
VkImage target_image,
|
||||
- VkImageView target_image_view,
|
||||
+ VkImageView target_image_view_y,
|
||||
+ VkImageView target_image_view_cbcr,
|
||||
const struct render_viewport_data views[XRT_MAX_VIEWS]);
|
||||
|
||||
/*!
|
||||
@@ -1411,7 +1415,8 @@ render_compute_projection(struct render_compute *render,
|
||||
void
|
||||
render_compute_clear(struct render_compute *render,
|
||||
VkImage target_image,
|
||||
- VkImageView target_image_view,
|
||||
+ VkImageView target_image_view_y,
|
||||
+ VkImageView target_image_view_cbcr,
|
||||
const struct render_viewport_data views[XRT_MAX_VIEWS]);
|
||||
|
||||
|
||||
diff --git a/src/xrt/compositor/render/render_resources.c b/src/xrt/compositor/render/render_resources.c
|
||||
index b9b8d4a22..cd9d82072 100644
|
||||
--- a/src/xrt/compositor/render/render_resources.c
|
||||
+++ b/src/xrt/compositor/render/render_resources.c
|
||||
@@ -184,14 +184,15 @@ init_mesh_ubo_buffers(struct vk_bundle *vk, struct render_buffer ubo[XRT_MAX_VIE
|
||||
XRT_CHECK_RESULT static VkResult
|
||||
create_compute_layer_descriptor_set_layout(struct vk_bundle *vk,
|
||||
uint32_t src_binding,
|
||||
- uint32_t target_binding,
|
||||
+ uint32_t target_binding_y,
|
||||
+ uint32_t target_binding_cbcr,
|
||||
uint32_t ubo_binding,
|
||||
uint32_t source_images_count,
|
||||
VkDescriptorSetLayout *out_descriptor_set_layout)
|
||||
{
|
||||
VkResult ret;
|
||||
|
||||
- VkDescriptorSetLayoutBinding set_layout_bindings[3] = {
|
||||
+ VkDescriptorSetLayoutBinding set_layout_bindings[4] = {
|
||||
{
|
||||
.binding = src_binding,
|
||||
.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
||||
@@ -199,7 +200,7 @@ create_compute_layer_descriptor_set_layout(struct vk_bundle *vk,
|
||||
.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT,
|
||||
},
|
||||
{
|
||||
- .binding = target_binding,
|
||||
+ .binding = target_binding_y,
|
||||
.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
|
||||
.descriptorCount = 1,
|
||||
.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT,
|
||||
@@ -210,6 +211,12 @@ create_compute_layer_descriptor_set_layout(struct vk_bundle *vk,
|
||||
.descriptorCount = 1,
|
||||
.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT,
|
||||
},
|
||||
+ {
|
||||
+ .binding = target_binding_cbcr,
|
||||
+ .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
|
||||
+ .descriptorCount = 1,
|
||||
+ .stageFlags = VK_SHADER_STAGE_COMPUTE_BIT,
|
||||
+ },
|
||||
};
|
||||
|
||||
VkDescriptorSetLayoutCreateInfo set_layout_info = {
|
||||
@@ -235,13 +242,14 @@ XRT_CHECK_RESULT static VkResult
|
||||
create_compute_distortion_descriptor_set_layout(struct vk_bundle *vk,
|
||||
uint32_t src_binding,
|
||||
uint32_t distortion_binding,
|
||||
- uint32_t target_binding,
|
||||
+ uint32_t target_binding_y,
|
||||
+ uint32_t target_binding_cbcr,
|
||||
uint32_t ubo_binding,
|
||||
VkDescriptorSetLayout *out_descriptor_set_layout)
|
||||
{
|
||||
VkResult ret;
|
||||
|
||||
- VkDescriptorSetLayoutBinding set_layout_bindings[4] = {
|
||||
+ VkDescriptorSetLayoutBinding set_layout_bindings[5] = {
|
||||
{
|
||||
.binding = src_binding,
|
||||
.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
||||
@@ -255,7 +263,7 @@ create_compute_distortion_descriptor_set_layout(struct vk_bundle *vk,
|
||||
.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT,
|
||||
},
|
||||
{
|
||||
- .binding = target_binding,
|
||||
+ .binding = target_binding_y,
|
||||
.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
|
||||
.descriptorCount = 1,
|
||||
.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT,
|
||||
@@ -266,6 +274,12 @@ create_compute_distortion_descriptor_set_layout(struct vk_bundle *vk,
|
||||
.descriptorCount = 1,
|
||||
.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT,
|
||||
},
|
||||
+ {
|
||||
+ .binding = target_binding_cbcr,
|
||||
+ .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
|
||||
+ .descriptorCount = 1,
|
||||
+ .stageFlags = VK_SHADER_STAGE_COMPUTE_BIT,
|
||||
+ },
|
||||
};
|
||||
|
||||
VkDescriptorSetLayoutCreateInfo set_layout_info = {
|
||||
@@ -601,8 +615,9 @@ render_resources_init(struct render_resources *r,
|
||||
}
|
||||
r->compute.src_binding = 0;
|
||||
r->compute.distortion_binding = 1;
|
||||
- r->compute.target_binding = 2;
|
||||
+ r->compute.target_binding_y = 2;
|
||||
r->compute.ubo_binding = 3;
|
||||
+ r->compute.target_binding_cbcr = 4;
|
||||
|
||||
r->compute.layer.image_array_size =
|
||||
MIN(vk->features.max_per_stage_descriptor_sampled_images, RENDER_MAX_IMAGES_COUNT(r));
|
||||
@@ -919,7 +934,8 @@ render_resources_init(struct render_resources *r,
|
||||
ret = create_compute_layer_descriptor_set_layout( //
|
||||
vk, // vk_bundle
|
||||
r->compute.src_binding, // src_binding,
|
||||
- r->compute.target_binding, // target_binding,
|
||||
+ r->compute.target_binding_y, // target_binding_y,
|
||||
+ r->compute.target_binding_cbcr, // target_binding_cbcr,
|
||||
r->compute.ubo_binding, // ubo_binding,
|
||||
r->compute.layer.image_array_size, // source_images_count,
|
||||
&r->compute.layer.descriptor_set_layout); // out_descriptor_set_layout
|
||||
@@ -1000,7 +1016,8 @@ render_resources_init(struct render_resources *r,
|
||||
vk, // vk_bundle
|
||||
r->compute.src_binding, // src_binding,
|
||||
r->compute.distortion_binding, // distortion_binding,
|
||||
- r->compute.target_binding, // target_binding,
|
||||
+ r->compute.target_binding_y, // target_binding_y,
|
||||
+ r->compute.target_binding_cbcr, // target_binding_cbcr,
|
||||
r->compute.ubo_binding, // ubo_binding,
|
||||
&r->compute.distortion.descriptor_set_layout); // out_descriptor_set_layout
|
||||
VK_CHK_WITH_RET(ret, "create_compute_distortion_descriptor_set_layout", false);
|
||||
diff --git a/src/xrt/compositor/shaders/distortion.comp b/src/xrt/compositor/shaders/distortion.comp
|
||||
index 9a09c03db..461aeb4ec 100644
|
||||
--- a/src/xrt/compositor/shaders/distortion.comp
|
||||
+++ b/src/xrt/compositor/shaders/distortion.comp
|
||||
@@ -18,7 +18,7 @@ layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
|
||||
|
||||
layout(set = 0, binding = 0) uniform sampler2D source[2];
|
||||
layout(set = 0, binding = 1) uniform sampler2D distortion[6];
|
||||
-layout(set = 0, binding = 2) uniform writeonly restrict image2D target;
|
||||
+layout(set = 0, binding = 2) uniform writeonly restrict image2D luma;
|
||||
layout(set = 0, binding = 3, std140) uniform restrict Config
|
||||
{
|
||||
ivec4 views[2];
|
||||
@@ -26,7 +26,20 @@ layout(set = 0, binding = 3, std140) uniform restrict Config
|
||||
vec4 post_transform[2];
|
||||
mat4 transform[2];
|
||||
} ubo;
|
||||
+layout(set = 0, binding = 4) uniform writeonly restrict image2D chroma;
|
||||
|
||||
+const mat3 color_space = mat3(
|
||||
+// clang-format off
|
||||
+// R G B
|
||||
+/* Y */ 0.2126, 0.7152, 0.0722,
|
||||
+/* Cb*/-0.1146, -0.3854, 0.5,
|
||||
+/* Cr*/ 0.5 , -0.4542, -0.0458);
|
||||
+//clang-format: on
|
||||
+
|
||||
+vec3 rgb_to_ycbcr(vec3 color)
|
||||
+{
|
||||
+ return transpose(color_space) * color + vec3(0, 0.5, 0.5);
|
||||
+}
|
||||
|
||||
vec2 position_to_uv(ivec2 extent, uint ix, uint iy)
|
||||
{
|
||||
@@ -124,30 +137,40 @@ mat3x2 source_coord(ivec3 xyv, ivec2 extent)
|
||||
|
||||
void main()
|
||||
{
|
||||
- uint ix = gl_GlobalInvocationID.x;
|
||||
- uint iy = gl_GlobalInvocationID.y;
|
||||
uint iz = gl_GlobalInvocationID.z;
|
||||
|
||||
ivec2 offset = ivec2(ubo.views[iz].xy);
|
||||
ivec2 extent = ivec2(ubo.views[iz].zw);
|
||||
+ vec2 cbcrs[4];
|
||||
+ for (int k = 0; k < 2; k += 1) {
|
||||
+ uint iy = gl_GlobalInvocationID.y * 2 + k;
|
||||
+ for (int j = 0; j < 2; j += 1) {
|
||||
+ uint ix = gl_GlobalInvocationID.x * 2 + j;
|
||||
|
||||
- if (ix >= extent.x || iy >= extent.y) {
|
||||
- return;
|
||||
- }
|
||||
+ vec2 dist_uv = position_to_uv(extent, ix, iy);
|
||||
|
||||
- vec2 dist_uv = position_to_uv(extent, ix, iy);
|
||||
+ vec2 uv = texture(distortion[iz + 0], dist_uv).xy;
|
||||
+ vec2 lod = texture(distortion[iz + 2], dist_uv).xy;
|
||||
|
||||
- vec2 uv = texture(distortion[iz + 0], dist_uv).xy;
|
||||
- vec2 lod = texture(distortion[iz + 2], dist_uv).xy;
|
||||
+ // Do any transformation needed.
|
||||
+ uv = transform_uv(uv, iz);
|
||||
|
||||
- // Do any transformation needed.
|
||||
- uv = transform_uv(uv, iz);
|
||||
+ // Sample the source
|
||||
+ vec3 colour = textureLod(source[iz], uv, mix(lod.x, lod.y, 0.5)).rgb;
|
||||
|
||||
- // Sample the source
|
||||
- vec4 colour = textureLod(source[iz], uv, mix(lod.x, lod.y, 0.5));
|
||||
+ colour = rgb_to_ycbcr(from_linear_to_srgb(colour));
|
||||
|
||||
- // Do colour correction here since there are no automatic conversion in hardware available.
|
||||
- colour = vec4(from_linear_to_srgb(colour.rgb), 1);
|
||||
+ int i = k * 2 + j;
|
||||
+ cbcrs[i] = colour.yz;
|
||||
|
||||
- imageStore(target, ivec2(offset.x + ix, offset.y + iy), colour);
|
||||
+ if (ix < extent.x && iy < extent.y) {
|
||||
+ imageStore(luma, ivec2(offset.x + ix, offset.y + iy), vec4(colour.x));
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ if (gl_GlobalInvocationID.x >= extent.x || gl_GlobalInvocationID.y >= extent.y) {
|
||||
+ return;
|
||||
+ }
|
||||
+ vec2 cbcr = mix(mix(cbcrs[0], cbcrs[1], 0.5), mix(cbcrs[2], cbcrs[3], 0.5), 0.5);
|
||||
+ imageStore(chroma, ivec2(offset.xy/2 + gl_GlobalInvocationID.xy), vec4(cbcr.x, cbcr.y, 0, 0));
|
||||
}
|
||||
diff --git a/src/xrt/compositor/util/comp_render.h b/src/xrt/compositor/util/comp_render.h
|
||||
index e6fd072be..d0733b650 100644
|
||||
--- a/src/xrt/compositor/util/comp_render.h
|
||||
+++ b/src/xrt/compositor/util/comp_render.h
|
||||
@@ -166,7 +166,8 @@ struct comp_render_dispatch_data
|
||||
VkImage target_image;
|
||||
|
||||
//! Target image view for distortion.
|
||||
- VkImageView target_unorm_view;
|
||||
+ VkImageView target_unorm_view_y;
|
||||
+ VkImageView target_unorm_view_cbcr;
|
||||
} cs;
|
||||
};
|
||||
|
||||
@@ -432,7 +433,8 @@ comp_render_gfx_dispatch(struct render_gfx *render,
|
||||
static inline void
|
||||
comp_render_cs_initial_init(struct comp_render_dispatch_data *data,
|
||||
VkImage target_image,
|
||||
- VkImageView target_unorm_view,
|
||||
+ VkImageView target_unorm_view_y,
|
||||
+ VkImageView target_unorm_view_cbcr,
|
||||
bool fast_path,
|
||||
bool do_timewarp)
|
||||
{
|
||||
@@ -442,7 +444,8 @@ comp_render_cs_initial_init(struct comp_render_dispatch_data *data,
|
||||
data->do_timewarp = do_timewarp;
|
||||
|
||||
data->cs.target_image = target_image;
|
||||
- data->cs.target_unorm_view = target_unorm_view;
|
||||
+ data->cs.target_unorm_view_y = target_unorm_view_y;
|
||||
+ data->cs.target_unorm_view_cbcr = target_unorm_view_cbcr;
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -534,7 +537,8 @@ comp_render_cs_layer(struct render_compute *render,
|
||||
const struct xrt_pose *world_pose,
|
||||
const struct xrt_pose *eye_pose,
|
||||
const VkImage target_image,
|
||||
- const VkImageView target_image_view,
|
||||
+ const VkImageView target_image_view_y,
|
||||
+ const VkImageView target_image_view_cbcr,
|
||||
const struct render_viewport_data *target_view,
|
||||
bool do_timewarp);
|
||||
|
||||
diff --git a/src/xrt/compositor/util/comp_render_cs.c b/src/xrt/compositor/util/comp_render_cs.c
|
||||
index fc11a0521..3db6c8d2e 100644
|
||||
--- a/src/xrt/compositor/util/comp_render_cs.c
|
||||
+++ b/src/xrt/compositor/util/comp_render_cs.c
|
||||
@@ -430,11 +430,12 @@ crc_clear_output(struct render_compute *render, const struct comp_render_dispatc
|
||||
}
|
||||
|
||||
|
||||
- render_compute_clear( //
|
||||
- render, //
|
||||
- d->cs.target_image, //
|
||||
- d->cs.target_unorm_view, // target_image_view
|
||||
- target_viewport_datas); // views
|
||||
+ render_compute_clear( //
|
||||
+ render, //
|
||||
+ d->cs.target_image, //
|
||||
+ d->cs.target_unorm_view_y, // target_image_view_y
|
||||
+ d->cs.target_unorm_view_cbcr, // target_image_view_cbcr
|
||||
+ target_viewport_datas); // views
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -480,14 +481,15 @@ crc_distortion_after_squash(struct render_compute *render, const struct comp_ren
|
||||
target_viewport_datas[i] = viewport_data;
|
||||
}
|
||||
|
||||
- render_compute_projection( //
|
||||
- render, //
|
||||
- src_samplers, //
|
||||
- src_image_views, //
|
||||
- src_norm_rects, //
|
||||
- d->cs.target_image, //
|
||||
- d->cs.target_unorm_view, // target_image_view
|
||||
- target_viewport_datas); // views
|
||||
+ render_compute_projection( //
|
||||
+ render, //
|
||||
+ src_samplers, //
|
||||
+ src_image_views, //
|
||||
+ src_norm_rects, //
|
||||
+ d->cs.target_image, //
|
||||
+ d->cs.target_unorm_view_y, // target_image_view_y
|
||||
+ d->cs.target_unorm_view_cbcr, // target_image_view_cbcr
|
||||
+ target_viewport_datas); // views
|
||||
}
|
||||
|
||||
/// Fast path
|
||||
@@ -559,7 +561,8 @@ crc_distortion_fast_path(struct render_compute *render,
|
||||
src_image_views, //
|
||||
src_norm_rects, //
|
||||
d->cs.target_image, //
|
||||
- d->cs.target_unorm_view, //
|
||||
+ d->cs.target_unorm_view_y, //
|
||||
+ d->cs.target_unorm_view_cbcr, //
|
||||
target_viewport_datas); //
|
||||
} else {
|
||||
render_compute_projection_timewarp( //
|
||||
@@ -571,7 +574,8 @@ crc_distortion_fast_path(struct render_compute *render,
|
||||
src_fovs, //
|
||||
world_poses, //
|
||||
d->cs.target_image, //
|
||||
- d->cs.target_unorm_view, //
|
||||
+ d->cs.target_unorm_view_y, //
|
||||
+ d->cs.target_unorm_view_cbcr, //
|
||||
target_viewport_datas); //
|
||||
}
|
||||
}
|
||||
@@ -592,7 +596,8 @@ comp_render_cs_layer(struct render_compute *render,
|
||||
const struct xrt_pose *world_pose,
|
||||
const struct xrt_pose *eye_pose,
|
||||
const VkImage target_image,
|
||||
- const VkImageView target_image_view,
|
||||
+ const VkImageView target_image_view_y,
|
||||
+ const VkImageView target_image_view_cbcr,
|
||||
const struct render_viewport_data *target_view,
|
||||
bool do_timewarp)
|
||||
{
|
||||
@@ -749,7 +754,8 @@ comp_render_cs_layer(struct render_compute *render,
|
||||
src_samplers, //
|
||||
src_image_views, //
|
||||
cur_image, //
|
||||
- target_image_view, //
|
||||
+ target_image_view_y, //
|
||||
+ target_image_view_cbcr, //
|
||||
target_view, //
|
||||
do_timewarp); //
|
||||
}
|
||||
@@ -785,6 +791,7 @@ comp_render_cs_layers(struct render_compute *render,
|
||||
&view->eye_pose, //
|
||||
view->image, //
|
||||
view->cs.unorm_view, //
|
||||
+ view->cs.unorm_view, //
|
||||
&view->layer_viewport_data, //
|
||||
d->do_timewarp); //
|
||||
}
|
||||
--
|
||||
2.48.0
|
||||
|
||||
33
0007-don-t-verify-GL-stuff.patch
Normal file
33
0007-don-t-verify-GL-stuff.patch
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
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
|
||||
|
||||
37
0008-configure-u_git_tag-in-WiVRn.patch
Normal file
37
0008-configure-u_git_tag-in-WiVRn.patch
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
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
|
||||
|
||||
|
|
@ -1,186 +0,0 @@
|
|||
From 9e0dc33f7b1895e084e70b0b18d84510eb6e0219 Mon Sep 17 00:00:00 2001
|
||||
From: Patrick Nicolas <patricknicolas@laposte.net>
|
||||
Date: Tue, 31 Dec 2024 11:01:12 +0100
|
||||
Subject: [PATCH 09/10] Revert "a/bindings: improve reproducibility of bindings
|
||||
generation"
|
||||
|
||||
This reverts commit d2fbd3ce8d962e4a46351df0f34f14de71871e00.
|
||||
---
|
||||
src/xrt/auxiliary/bindings/bindings.py | 41 +++++++++++--------
|
||||
.../auxiliary/bindings/steamvr_profiles.py | 2 +-
|
||||
2 files changed, 24 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/src/xrt/auxiliary/bindings/bindings.py b/src/xrt/auxiliary/bindings/bindings.py
|
||||
index 3039629ef..28d4395ff 100755
|
||||
--- a/src/xrt/auxiliary/bindings/bindings.py
|
||||
+++ b/src/xrt/auxiliary/bindings/bindings.py
|
||||
@@ -7,7 +7,8 @@ bindings."""
|
||||
import argparse
|
||||
import json
|
||||
import copy
|
||||
-from operator import attrgetter
|
||||
+import itertools
|
||||
+
|
||||
|
||||
def find_component_in_list_by_name(name, component_list, subaction_path=None, identifier_json_path=None):
|
||||
"""Find a component with the given name in a list of components."""
|
||||
@@ -123,6 +124,7 @@ class Component:
|
||||
Turn a Identifier's component paths into a list of Component objects.
|
||||
"""
|
||||
|
||||
+ monado_bindings = json_subpath["monado_bindings"]
|
||||
component_list = []
|
||||
for component_name in json_subpath["components"]: # click, touch, ...
|
||||
matched_dpad_emulation = None
|
||||
@@ -130,7 +132,9 @@ class Component:
|
||||
json_subpath["dpad_emulation"]["position"] == component_name):
|
||||
matched_dpad_emulation = json_subpath["dpad_emulation"]
|
||||
|
||||
- monado_binding = json_subpath["monado_bindings"].get(component_name, None)
|
||||
+ monado_binding = None
|
||||
+ if component_name in monado_bindings:
|
||||
+ monado_binding = monado_bindings[component_name]
|
||||
|
||||
steamvr_path = steamvr_subpath_name(identifier_json_path, json_subpath["type"])
|
||||
if "steamvr_path" in json_subpath:
|
||||
@@ -220,9 +224,10 @@ class Identifier:
|
||||
|
||||
identifier_list = []
|
||||
for subaction_path in json_subaction_paths: # /user/hand/*
|
||||
- for json_path in sorted(json_subpaths.keys()): # /input/*, /output/*
|
||||
+ for json_sub_path_itm in json_subpaths.items(): # /input/*, /output/*
|
||||
+ json_path = json_sub_path_itm[0] # /input/trackpad
|
||||
# json object associated with a subpath (type, localized_name, ...)
|
||||
- json_subpath = json_subpaths[json_path]
|
||||
+ json_subpath = json_sub_path_itm[1]
|
||||
|
||||
# Oculus Touch a,b/x,y components only exist on one controller
|
||||
if "side" in json_subpath and "/user/hand/" + json_subpath["side"] != subaction_path:
|
||||
@@ -262,7 +267,7 @@ class Identifier:
|
||||
self.components = component_list
|
||||
self.dpad = dpad
|
||||
return
|
||||
-
|
||||
+
|
||||
|
||||
class FeatureSet:
|
||||
"""An AND of requirements (versions and/or extensions) under which a binding becomes available"""
|
||||
@@ -317,7 +322,7 @@ class Availability:
|
||||
if not optimize:
|
||||
self.feature_sets = set(feature_sets)
|
||||
return
|
||||
-
|
||||
+
|
||||
self.feature_sets = set()
|
||||
for feature_set in feature_sets:
|
||||
self.add_in_place(feature_set)
|
||||
@@ -460,8 +465,8 @@ class Profile:
|
||||
def __update_component_list(self):
|
||||
self.components = []
|
||||
for identifier in self.identifiers:
|
||||
- self.components += identifier.components
|
||||
- self.components = sorted(self.components, key=attrgetter("steamvr_path"))
|
||||
+ for component in identifier.components:
|
||||
+ self.components.append(component)
|
||||
|
||||
def availability(self):
|
||||
result = Availability(feature_sets=[])
|
||||
@@ -499,8 +504,8 @@ class Bindings:
|
||||
|
||||
def __init__(self, json_root):
|
||||
"""Construct a bindings from a dictionary of profiles."""
|
||||
- self.profiles = [Profile(profile_name, json_root["profiles"][profile_name]) for
|
||||
- profile_name in sorted(json_root["profiles"].keys())]
|
||||
+ self.profiles = [Profile(profile_name, json_profile) for
|
||||
+ profile_name, json_profile in json_root["profiles"].items()]
|
||||
self.__set_parent_profile_refs()
|
||||
self.__mine_for_diamond_errors()
|
||||
|
||||
@@ -526,7 +531,7 @@ class Bindings:
|
||||
if profile.name in parent_path_set:
|
||||
return True
|
||||
parent_path_set.append(profile.name)
|
||||
- for parent in sorted(profile.parent_profiles, key=attrgetter("name")):
|
||||
+ for parent in profile.parent_profiles:
|
||||
if self.__has_diamonds(parent, parent_path_set):
|
||||
return True
|
||||
return False
|
||||
@@ -572,7 +577,7 @@ def write_verify_switch_body(f, dict_of_lists, profile, profile_name, tab_char):
|
||||
Input is a file to write the code into, a dict where keys are length and
|
||||
the values are lists of strings of that length. And a suffix if any."""
|
||||
f.write(f"{tab_char}\tswitch (length) {{\n")
|
||||
- for length in sorted(dict_of_lists.keys()):
|
||||
+ for length in dict_of_lists.keys():
|
||||
f.write(f"{tab_char}\tcase {str(length)}:\n\t\t{tab_char}")
|
||||
for path in sorted(dict_of_lists[length]):
|
||||
f.write(if_strcmp.format(exttab=tab_char, check=path))
|
||||
@@ -613,7 +618,7 @@ def write_verify_func_switch(f, dict_of_lists, profile, profile_name, availabili
|
||||
closing.append(f'{tab_char}}}\n#endif // {ext_defines}\n')
|
||||
|
||||
write_verify_switch_body(f, dict_of_lists, profile, profile_name, tab_char)
|
||||
-
|
||||
+
|
||||
for closer in reversed(closing):
|
||||
f.write(closer)
|
||||
|
||||
@@ -624,7 +629,7 @@ def write_verify_func_body(f, profile, dict_name, availability):
|
||||
profile, dict_name), profile, profile.name, availability)
|
||||
if profile.parent_profiles is None:
|
||||
return
|
||||
- for pp in sorted(profile.parent_profiles, key=attrgetter("name")):
|
||||
+ for pp in profile.parent_profiles:
|
||||
write_verify_func_body(f, pp, dict_name, availability.intersection(pp.availability()))
|
||||
|
||||
|
||||
@@ -832,7 +837,7 @@ def generate_bindings_c(file, b):
|
||||
f.write('{\n')
|
||||
f.write('\tswitch(input)\n')
|
||||
f.write('\t{\n')
|
||||
- for input in sorted(inputs):
|
||||
+ for input in inputs:
|
||||
f.write(f'\tcase {input}: return "{input}";\n')
|
||||
f.write(f'\tdefault: return "UNKNOWN";\n')
|
||||
f.write('\t}\n')
|
||||
@@ -841,7 +846,7 @@ def generate_bindings_c(file, b):
|
||||
f.write('enum xrt_input_name\n')
|
||||
f.write('xrt_input_name_enum(const char *input)\n')
|
||||
f.write('{\n')
|
||||
- for input in sorted(inputs):
|
||||
+ for input in inputs:
|
||||
f.write(f'\tif(strcmp("{input}", input) == 0) return {input};\n')
|
||||
f.write(f'\treturn XRT_INPUT_GENERIC_TRACKER_POSE;\n')
|
||||
f.write('}\n')
|
||||
@@ -851,7 +856,7 @@ def generate_bindings_c(file, b):
|
||||
f.write('{\n')
|
||||
f.write('\tswitch(output)\n')
|
||||
f.write('\t{\n')
|
||||
- for output in sorted(outputs):
|
||||
+ for output in outputs:
|
||||
f.write(f'\tcase {output}: return "{output}";\n')
|
||||
f.write(f'\tdefault: return "UNKNOWN";\n')
|
||||
f.write('\t}\n')
|
||||
@@ -860,7 +865,7 @@ def generate_bindings_c(file, b):
|
||||
f.write('enum xrt_output_name\n')
|
||||
f.write('xrt_output_name_enum(const char *output)\n')
|
||||
f.write('{\n')
|
||||
- for output in sorted(outputs):
|
||||
+ for output in outputs:
|
||||
f.write(f'\tif(strcmp("{output}", output) == 0) return {output};\n')
|
||||
f.write(f'\treturn XRT_OUTPUT_NAME_SIMPLE_VIBRATION;\n')
|
||||
f.write('}\n')
|
||||
diff --git a/src/xrt/auxiliary/bindings/steamvr_profiles.py b/src/xrt/auxiliary/bindings/steamvr_profiles.py
|
||||
index f54a303f9..abcbfabe6 100644
|
||||
--- a/src/xrt/auxiliary/bindings/steamvr_profiles.py
|
||||
+++ b/src/xrt/auxiliary/bindings/steamvr_profiles.py
|
||||
@@ -114,7 +114,7 @@ def main():
|
||||
|
||||
# print("Creating SteamVR input profile", f.name)
|
||||
|
||||
- json.dump(j, f, indent=2, sort_keys=True)
|
||||
+ json.dump(j, f, indent=2)
|
||||
|
||||
f.close()
|
||||
|
||||
--
|
||||
2.48.0
|
||||
|
||||
|
|
@ -1,94 +0,0 @@
|
|||
From e17739a88a15ac26dfe9ccb9ffc97ff029fa7764 Mon Sep 17 00:00:00 2001
|
||||
From: Patrick Nicolas <patricknicolas@laposte.net>
|
||||
Date: Sun, 3 Nov 2024 13:40:00 +0100
|
||||
Subject: [PATCH 10/10] store alpha channel in layer 1
|
||||
|
||||
---
|
||||
src/xrt/compositor/shaders/clear.comp | 4 ++--
|
||||
src/xrt/compositor/shaders/distortion.comp | 18 ++++++++++++------
|
||||
2 files changed, 14 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/xrt/compositor/shaders/clear.comp b/src/xrt/compositor/shaders/clear.comp
|
||||
index 036da401a..db8e5178e 100644
|
||||
--- a/src/xrt/compositor/shaders/clear.comp
|
||||
+++ b/src/xrt/compositor/shaders/clear.comp
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
|
||||
|
||||
-layout(set = 0, binding = 2) uniform writeonly restrict image2D target;
|
||||
+layout(set = 0, binding = 2) uniform writeonly restrict image2DArray target;
|
||||
layout(set = 0, binding = 3) uniform restrict Config
|
||||
{
|
||||
ivec4 views[2];
|
||||
@@ -35,5 +35,5 @@ void main()
|
||||
|
||||
vec4 colour = vec4(from_linear_to_srgb(vec3(0.1)), 1.0);
|
||||
|
||||
- imageStore(target, ivec2(offset.x + ix, offset.y + iy), colour);
|
||||
+ imageStore(target, ivec3(offset.x + ix, offset.y + iy, 0), colour);
|
||||
}
|
||||
diff --git a/src/xrt/compositor/shaders/distortion.comp b/src/xrt/compositor/shaders/distortion.comp
|
||||
index 461aeb4ec..237221a54 100644
|
||||
--- a/src/xrt/compositor/shaders/distortion.comp
|
||||
+++ b/src/xrt/compositor/shaders/distortion.comp
|
||||
@@ -18,7 +18,7 @@ layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
|
||||
|
||||
layout(set = 0, binding = 0) uniform sampler2D source[2];
|
||||
layout(set = 0, binding = 1) uniform sampler2D distortion[6];
|
||||
-layout(set = 0, binding = 2) uniform writeonly restrict image2D luma;
|
||||
+layout(set = 0, binding = 2) uniform writeonly restrict image2DArray luma;
|
||||
layout(set = 0, binding = 3, std140) uniform restrict Config
|
||||
{
|
||||
ivec4 views[2];
|
||||
@@ -26,7 +26,7 @@ layout(set = 0, binding = 3, std140) uniform restrict Config
|
||||
vec4 post_transform[2];
|
||||
mat4 transform[2];
|
||||
} ubo;
|
||||
-layout(set = 0, binding = 4) uniform writeonly restrict image2D chroma;
|
||||
+layout(set = 0, binding = 4) uniform writeonly restrict image2DArray chroma;
|
||||
|
||||
const mat3 color_space = mat3(
|
||||
// clang-format off
|
||||
@@ -142,6 +142,7 @@ void main()
|
||||
ivec2 offset = ivec2(ubo.views[iz].xy);
|
||||
ivec2 extent = ivec2(ubo.views[iz].zw);
|
||||
vec2 cbcrs[4];
|
||||
+ vec4 alpha;
|
||||
for (int k = 0; k < 2; k += 1) {
|
||||
uint iy = gl_GlobalInvocationID.y * 2 + k;
|
||||
for (int j = 0; j < 2; j += 1) {
|
||||
@@ -156,15 +157,16 @@ void main()
|
||||
uv = transform_uv(uv, iz);
|
||||
|
||||
// Sample the source
|
||||
- vec3 colour = textureLod(source[iz], uv, mix(lod.x, lod.y, 0.5)).rgb;
|
||||
+ vec4 colour = textureLod(source[iz], uv, mix(lod.x, lod.y, 0.5));
|
||||
|
||||
- colour = rgb_to_ycbcr(from_linear_to_srgb(colour));
|
||||
+ colour.rgb = rgb_to_ycbcr(from_linear_to_srgb(colour.rgb));
|
||||
|
||||
int i = k * 2 + j;
|
||||
cbcrs[i] = colour.yz;
|
||||
+ alpha[i] = colour.a;
|
||||
|
||||
if (ix < extent.x && iy < extent.y) {
|
||||
- imageStore(luma, ivec2(offset.x + ix, offset.y + iy), vec4(colour.x));
|
||||
+ imageStore(luma, ivec3(offset.x + ix, offset.y + iy, 0), vec4(colour.x));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -172,5 +174,9 @@ void main()
|
||||
return;
|
||||
}
|
||||
vec2 cbcr = mix(mix(cbcrs[0], cbcrs[1], 0.5), mix(cbcrs[2], cbcrs[3], 0.5), 0.5);
|
||||
- imageStore(chroma, ivec2(offset.xy/2 + gl_GlobalInvocationID.xy), vec4(cbcr.x, cbcr.y, 0, 0));
|
||||
+ imageStore(chroma, ivec3(offset.xy/2 + gl_GlobalInvocationID.xy, 0), vec4(cbcr.x, cbcr.y, 0, 0));
|
||||
+
|
||||
+ imageStore(chroma, ivec3(offset.xy/2 + gl_GlobalInvocationID.xy, 1), vec4(0.5, 0.5, 0, 0));
|
||||
+ alpha = vec4(mix(mix(alpha[0], alpha[1], 0.5), mix(alpha[2], alpha[3], 0.5), 0.5));
|
||||
+ imageStore(luma, ivec3(offset.xy/2 + gl_GlobalInvocationID.xy, 1), alpha);
|
||||
}
|
||||
--
|
||||
2.48.0
|
||||
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
From 6321ad3eee7d4a8b304a36de008d8fb8359f3dfe Mon Sep 17 00:00:00 2001
|
||||
From: Patrick Nicolas <patricknicolas@laposte.net>
|
||||
Date: Wed, 19 Feb 2025 10:13:36 +0100
|
||||
Subject: [PATCH] st/oxr: bind to dynamic role's profile
|
||||
|
||||
---
|
||||
src/xrt/state_trackers/oxr/oxr_binding.c | 17 +++++++++++++++++
|
||||
1 file changed, 17 insertions(+)
|
||||
|
||||
diff --git a/src/xrt/state_trackers/oxr/oxr_binding.c b/src/xrt/state_trackers/oxr/oxr_binding.c
|
||||
index eb8bb5489..b04977a8b 100644
|
||||
--- a/src/xrt/state_trackers/oxr/oxr_binding.c
|
||||
+++ b/src/xrt/state_trackers/oxr/oxr_binding.c
|
||||
@@ -380,6 +380,23 @@ oxr_find_profile_for_device(struct oxr_logger *log,
|
||||
return;
|
||||
}
|
||||
|
||||
+ // Have bindings for the dynamic role's profile been suggested?
|
||||
+#define FIND_PROFILE(X) \
|
||||
+ { \
|
||||
+ struct xrt_device *role_xdev = GET_XDEV_BY_ROLE(sess->sys, X); \
|
||||
+ if (role_xdev == xdev) { \
|
||||
+ enum xrt_device_name profile = GET_PROFILE_NAME_BY_ROLE(sess->sys, X); \
|
||||
+ oxr_get_profile_for_device_name(log, sess, profile, out_p); \
|
||||
+ if (*out_p != NULL) { \
|
||||
+ return; \
|
||||
+ } \
|
||||
+ } \
|
||||
+ }
|
||||
+ FIND_PROFILE(left);
|
||||
+ FIND_PROFILE(right);
|
||||
+ FIND_PROFILE(gamepad);
|
||||
+#undef FIND_PROFILE
|
||||
+
|
||||
// Have bindings for this device's interaction profile been suggested?
|
||||
oxr_get_profile_for_device_name(log, sess, xdev->name, out_p);
|
||||
if (*out_p != NULL) {
|
||||
--
|
||||
2.48.1
|
||||
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
From a2f80c1c92619ad57516e24539047d4d30d8cca7 Mon Sep 17 00:00:00 2001
|
||||
From: Patrick Nicolas <patricknicolas@laposte.net>
|
||||
Date: Sun, 23 Feb 2025 11:12:14 +0100
|
||||
Subject: [PATCH] ipc: Initialize hmd data from static role
|
||||
|
||||
Make sure the xdev used to read the hmd part is the one from head static
|
||||
role. This fixes issues in case more than one hmd is available.
|
||||
---
|
||||
src/xrt/ipc/server/ipc_server_process.c | 33 ++++++++++++-------------
|
||||
1 file changed, 16 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/src/xrt/ipc/server/ipc_server_process.c b/src/xrt/ipc/server/ipc_server_process.c
|
||||
index 6b6da45a4..21796fb08 100644
|
||||
--- a/src/xrt/ipc/server/ipc_server_process.c
|
||||
+++ b/src/xrt/ipc/server/ipc_server_process.c
|
||||
@@ -357,23 +357,6 @@ init_shm(struct ipc_server *s)
|
||||
isdev->stage_supported = xdev->stage_supported;
|
||||
isdev->battery_status_supported = xdev->battery_status_supported;
|
||||
|
||||
- // Is this a HMD?
|
||||
- if (xdev->hmd != NULL) {
|
||||
- // set view count
|
||||
- ism->hmd.view_count = xdev->hmd->view_count;
|
||||
- for (uint32_t view = 0; view < xdev->hmd->view_count; ++view) {
|
||||
- ism->hmd.views[view].display.w_pixels = xdev->hmd->views[view].display.w_pixels;
|
||||
- ism->hmd.views[view].display.h_pixels = xdev->hmd->views[view].display.h_pixels;
|
||||
- }
|
||||
-
|
||||
- for (size_t i = 0; i < xdev->hmd->blend_mode_count; i++) {
|
||||
- // Not super necessary, we also do this assert in oxr_system.c
|
||||
- assert(u_verify_blend_mode_valid(xdev->hmd->blend_modes[i]));
|
||||
- ism->hmd.blend_modes[i] = xdev->hmd->blend_modes[i];
|
||||
- }
|
||||
- ism->hmd.blend_mode_count = xdev->hmd->blend_mode_count;
|
||||
- }
|
||||
-
|
||||
// Setup the tracking origin.
|
||||
isdev->tracking_origin_index = (uint32_t)-1;
|
||||
for (uint32_t k = 0; k < XRT_SYSTEM_MAX_DEVICES; k++) {
|
||||
@@ -428,6 +411,22 @@ init_shm(struct ipc_server *s)
|
||||
}
|
||||
}
|
||||
|
||||
+ // Setup the HMD
|
||||
+ // set view count
|
||||
+ assert(s->xsysd->static_roles.head->hmd);
|
||||
+ ism->hmd.view_count = s->xsysd->static_roles.head->hmd->view_count;
|
||||
+ for (uint32_t view = 0; view < s->xsysd->static_roles.head->hmd->view_count; ++view) {
|
||||
+ ism->hmd.views[view].display.w_pixels = s->xsysd->static_roles.head->hmd->views[view].display.w_pixels;
|
||||
+ ism->hmd.views[view].display.h_pixels = s->xsysd->static_roles.head->hmd->views[view].display.h_pixels;
|
||||
+ }
|
||||
+
|
||||
+ for (size_t i = 0; i < s->xsysd->static_roles.head->hmd->blend_mode_count; i++) {
|
||||
+ // Not super necessary, we also do this assert in oxr_system.c
|
||||
+ assert(u_verify_blend_mode_valid(s->xsysd->static_roles.head->hmd->blend_modes[i]));
|
||||
+ ism->hmd.blend_modes[i] = s->xsysd->static_roles.head->hmd->blend_modes[i];
|
||||
+ }
|
||||
+ ism->hmd.blend_mode_count = s->xsysd->static_roles.head->hmd->blend_mode_count;
|
||||
+
|
||||
// Finally tell the client how many devices we have.
|
||||
s->ism->isdev_count = count;
|
||||
|
||||
--
|
||||
2.48.1
|
||||
|
||||
|
|
@ -1,82 +0,0 @@
|
|||
From edd3447b25387908acbe005f1cbee5f17bae0260 Mon Sep 17 00:00:00 2001
|
||||
From: Patrick Nicolas <patricknicolas@laposte.net>
|
||||
Date: Thu, 27 Feb 2025 22:45:36 +0100
|
||||
Subject: [PATCH] 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 26c341385..36e3297f7 100644
|
||||
--- a/src/xrt/compositor/main/comp_compositor.c
|
||||
+++ b/src/xrt/compositor/main/comp_compositor.c
|
||||
@@ -983,6 +983,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();
|
||||
@@ -1183,10 +1184,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.48.1
|
||||
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
From b9bef34f0362677d2a58c0b2b331c98e2f74f9b2 Mon Sep 17 00:00:00 2001
|
||||
From: Patrick Nicolas <patricknicolas@laposte.net>
|
||||
Date: Sat, 15 Mar 2025 22:19:48 +0100
|
||||
Subject: [PATCH] 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 c84806bde..955019957 100644
|
||||
--- a/src/xrt/state_trackers/oxr/oxr_api_session.c
|
||||
+++ b/src/xrt/state_trackers/oxr/oxr_api_session.c
|
||||
@@ -644,15 +644,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.48.1
|
||||
|
||||
67
LicenseBreakdown
Normal file
67
LicenseBreakdown
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
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/*
|
||||
4
sources
4
sources
|
|
@ -1,2 +1,2 @@
|
|||
SHA512 (WiVRn-0.24.1.tar.gz) = f946f815568bf757cb069b247e00c9d9a116829c64a18cebd95a6989a5a573a1b49afcfa78323befa641f34f553497fa88cd24bad686c22f3a10b15ddd1ef857
|
||||
SHA512 (monado-src-848a24aa106758fd6c7afcab6d95880c57dbe450.tar.bz2) = c11b883dc216864b7265a76ebab212503e20246ac2895b145d9017a861220a8091b4a637fa2b7cd62ad4248688791ff6d6ef080360e2c9a9b63394f6e9d9d3c0
|
||||
SHA512 (WiVRn-v26.6.2.tar.gz) = ce210881d43a09a4fc8a6c6fe6e40b6925a110d715a3f15ad38d5210b9ef06361e62ee6e267ffcb8fbc0f50ff9a71254c6bcd3a3e13c7bff2b09eb2532fc0db8
|
||||
SHA512 (monado-src-1b526bb3a0ff326ecd05af4c2c541407f53c6d4b.tar.bz2) = 662bf90d5a38e05c5909ed8d1a5c099979ae49ec6f7a71552a9d0c625ddda29f6b631e0feca8a01a6bb6eefcd6aacfbc81207f2852466165c561973df1cddf97
|
||||
|
|
|
|||
161
wivrn.spec
161
wivrn.spec
|
|
@ -2,113 +2,65 @@
|
|||
%bcond_with x264
|
||||
|
||||
%global forgeurl0 https://github.com/WiVRn/WiVRn
|
||||
%global wivrn_version 0.24.1
|
||||
%global tag0 v%{wivrn_version}
|
||||
%global date 20250410
|
||||
%global tag0 v%{version}
|
||||
|
||||
# WiVRn is based on Monado, we need the full source
|
||||
# Monado base source (find in CMakeLists.txt FetchContent_Declare(monado))
|
||||
# Monado base source (find in monado-rev file)
|
||||
%global forgeurl1 https://gitlab.freedesktop.org/monado/monado
|
||||
%global commit1 848a24aa106758fd6c7afcab6d95880c57dbe450
|
||||
%global monado_version 24.0.0
|
||||
%global commit1 1b526bb3a0ff326ecd05af4c2c541407f53c6d4b
|
||||
%global monado_version 25.1.0
|
||||
|
||||
%forgemeta
|
||||
|
||||
Name: wivrn
|
||||
Version: %{wivrn_version}
|
||||
Version: 26.6.2
|
||||
Release: %autorelease
|
||||
Summary: An OpenXR streaming application to a standalone headset
|
||||
|
||||
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/*
|
||||
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.
|
||||
URL: %{forgeurl0}
|
||||
Source0: %{forgesource0}
|
||||
# License: GPL-3.0-or-later
|
||||
Source1: %{forgeurl1}/-/archive/%{commit1}/monado-src-%{commit1}.tar.bz2
|
||||
|
||||
# Check for new/removed patches when updating: https://github.com/WiVRn/WiVRn/tree/master/patches/monado/ (check the tag)
|
||||
# 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/
|
||||
# Make sure to re-pull the patches every release. They are rebased and need to be updated!
|
||||
# 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-ipc-server-Always-listen-to-stdin.patch
|
||||
Patch0002: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0002-Use-extern-socket-fd.patch
|
||||
# downstream-only - WiVRn specific Monado patches
|
||||
Patch0003: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0003-Use-extern-socket-fd.patch
|
||||
Patch0003: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0003-change-environment-blend-mode-selection-logic.patch
|
||||
# downstream-only - WiVRn specific Monado patches
|
||||
Patch0004: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0004-c-render-Add-storage-usage-to-distortion-mesh.patch
|
||||
Patch0004: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0004-st-oxr-forward-0-refresh-rate.patch
|
||||
# downstream-only - WiVRn specific Monado patches
|
||||
Patch0005: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0005-change-environment-blend-mode-selection-logic.patch
|
||||
Patch0005: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0005-d-steamvr_lh-prevent-crash-on-vive-pro2-WiVRn.patch
|
||||
# downstream-only - WiVRn specific Monado patches
|
||||
Patch0006: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0006-Use-mipmaps-for-distortion-shader.patch
|
||||
Patch0006: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0006-st-oxr-push-XrEventDataInteractionProfileChanged-whe.patch
|
||||
# downstream-only - WiVRn specific Monado patches
|
||||
Patch0007: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0007-Convert-to-YCbCr-in-Monado.patch
|
||||
Patch0007: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0007-don-t-verify-GL-stuff.patch
|
||||
# downstream-only - WiVRn specific Monado patches
|
||||
Patch0009: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0009-Revert-a-bindings-improve-reproducibility-of-binding.patch
|
||||
# downstream-only - WiVRn specific Monado patches
|
||||
Patch0010: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0010-store-alpha-channel-in-layer-1.patch
|
||||
# downstream-only - WiVRn specific Monado patches
|
||||
Patch0011: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0011-st-oxr-bind-to-dynamic-role-s-profile.patch
|
||||
# downstream-only - WiVRn specific Monado patches
|
||||
Patch0012: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0012-ipc-Initialize-hmd-data-from-static-role.patch
|
||||
# downstream-only - WiVRn specific Monado patches
|
||||
Patch0013: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0013-c-main-allow-custom-pacing-app-factory.patch
|
||||
# downstream-only - WiVRn specific Monado patches
|
||||
Patch0014: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0014-st-oxr-forward-0-refresh-rate.patch
|
||||
Patch0008: https://raw.githubusercontent.com/WiVRn/WiVRn/refs/tags/%{tag0}/patches/monado/0008-configure-u_git_tag-in-WiVRn.patch
|
||||
|
||||
|
||||
# If BuildRequires change, be sure to update envision-wivrn Requires
|
||||
# https://src.fedoraproject.org/rpms/envision/blob/rawhide/f/envision.spec
|
||||
BuildRequires: boost-devel
|
||||
BuildRequires: cmake
|
||||
BuildRequires: desktop-file-utils
|
||||
|
|
@ -121,6 +73,7 @@ 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
|
||||
|
|
@ -137,6 +90,7 @@ BuildRequires: pkgconfig(gstreamer-1.0)
|
|||
BuildRequires: pkgconfig(gstreamer-app-1.0)
|
||||
BuildRequires: pkgconfig(gstreamer-video-1.0)
|
||||
BuildRequires: pkgconfig(hidapi-libusb)
|
||||
BuildRequires: pkgconfig(libarchive)
|
||||
BuildRequires: pkgconfig(libavcodec)
|
||||
BuildRequires: pkgconfig(libavfilter)
|
||||
BuildRequires: pkgconfig(libavutil)
|
||||
|
|
@ -150,6 +104,7 @@ BuildRequires: pkgconfig(libpipewire-0.3)
|
|||
BuildRequires: pkgconfig(libudev)
|
||||
BuildRequires: pkgconfig(libusb-1.0)
|
||||
BuildRequires: pkgconfig(libuvc)
|
||||
BuildRequires: pkgconfig(librsvg-2.0)
|
||||
BuildRequires: pkgconfig(libswscale)
|
||||
BuildRequires: pkgconfig(libva)
|
||||
BuildRequires: pkgconfig(nlohmann_json)
|
||||
|
|
@ -176,7 +131,10 @@ 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
|
||||
|
|
@ -188,9 +146,10 @@ Recommends: %{name}-dashboard
|
|||
|
||||
Provides: bundled(monado) = %{monado_version}
|
||||
|
||||
# no big-endian support, vulkan 32bit headers broken
|
||||
# no big-endian support, vulkan 32bit headers broken, android-tools not available on ppc64le
|
||||
# https://github.com/WiVRn/WiVRn/issues/271
|
||||
ExcludeArch: s390x %{ix86}
|
||||
# https://src.fedoraproject.org/rpms/android-tools/c/38eea7154cb5930259f7a3ae59cdb123fb7d2862?branch=rawhide
|
||||
ExcludeArch: s390x %{ix86} ppc64le
|
||||
|
||||
%description
|
||||
WiVRn wirelessly connects a standalone VR headset to a Linux computer.
|
||||
|
|
@ -199,9 +158,10 @@ on the computer.
|
|||
|
||||
Supports a wide range of headsets such as:
|
||||
|
||||
Quest 1 / 2 / Pro / 3 / 3S
|
||||
Meta Quest 1, 2, 3, 3S, pro
|
||||
Pico Neo 4
|
||||
HTC Vive Focus 3 / HTC Vive XR elite
|
||||
HTC Vive Focus 3, XR Elite
|
||||
Samsung Galaxy XR
|
||||
and most other Android based headsets
|
||||
|
||||
|
||||
|
|
@ -209,6 +169,7 @@ 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
|
||||
|
|
@ -219,12 +180,12 @@ and to assist in pairing the headset with the server.
|
|||
|
||||
|
||||
%prep
|
||||
%forgesetup
|
||||
%setup -q -n WiVRn-%{version}
|
||||
|
||||
# Extract libraries that are bundled
|
||||
mkdir -p _deps/monado-src
|
||||
tar -xvf %{SOURCE1} --strip-components 1 -C _deps/monado-src
|
||||
# Apply WiVRn downstream patches
|
||||
# Apply WiVRn downstream Monado patches
|
||||
pushd _deps/monado-src
|
||||
%patch -P0001 -p1
|
||||
%patch -P0002 -p1
|
||||
|
|
@ -233,12 +194,7 @@ pushd _deps/monado-src
|
|||
%patch -P0005 -p1
|
||||
%patch -P0006 -p1
|
||||
%patch -P0007 -p1
|
||||
%patch -P0009 -p1
|
||||
%patch -P0010 -p1
|
||||
%patch -P0011 -p1
|
||||
%patch -P0012 -p1
|
||||
%patch -P0013 -p1
|
||||
%patch -P0014 -p1
|
||||
%patch -P0008 -p1
|
||||
popd
|
||||
|
||||
|
||||
|
|
@ -251,12 +207,14 @@ popd
|
|||
-DFETCHCONTENT_BASE_DIR="_deps" \
|
||||
-DFETCHCONTENT_FULLY_DISCONNECTED=ON \
|
||||
-DGIT_DESC=v%{version} \
|
||||
-DOVR_COMPAT_SEARCH_PATH=%{_libdir}/opencomposite/runtime \
|
||||
-DGIT_COMMIT=v%{version} \
|
||||
-DOVR_COMPAT_SEARCH_PATH=%{_libdir}/opencomposite/runtime:%{_libdir}/xrizer/runtime:/opt/opencomposite:/opt/xrizer \
|
||||
-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 \
|
||||
|
|
@ -279,6 +237,10 @@ 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
|
||||
|
|
@ -289,19 +251,19 @@ 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/
|
||||
%caps(cap_sys_nice=ep) %{_bindir}/wivrn-server
|
||||
%{_bindir}/wivrn-server
|
||||
%{_bindir}/wivrnctl
|
||||
%dir %{_libdir}/%{name}
|
||||
%{_libdir}/%{name}/libopenxr_wivrn.so
|
||||
%{_libdir}/%{name}/libmonado_wivrn.so
|
||||
%{_libdir}/%{name}/libmonado_wivrn.so.24
|
||||
%{_libdir}/%{name}/libmonado_wivrn.so.24.0.0
|
||||
%{_libdir}/%{name}/libmonado_wivrn.so.25
|
||||
%{_libdir}/%{name}/libmonado_wivrn.so.25.1.0
|
||||
%{_datarootdir}/openxr/1/openxr_wivrn.json
|
||||
%{_userunitdir}/wivrn.service
|
||||
%{_userunitdir}/wivrn-application.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
|
||||
|
|
@ -311,15 +273,12 @@ appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/*.metainfo.xml
|
|||
|
||||
%post
|
||||
%systemd_user_post %{name}.service
|
||||
%systemd_user_post %{name}-application.service
|
||||
|
||||
%preun
|
||||
%systemd_user_preun %{name}.service
|
||||
%systemd_user_preun %{name}-application.service
|
||||
|
||||
%postun
|
||||
%systemd_user_postun %{name}.service
|
||||
%systemd_user_postun %{name}-application.service
|
||||
|
||||
|
||||
%changelog
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue