Skip to content

[pull] master from alvr-org:master#143

Open
pull[bot] wants to merge 212 commits into
PhoneVR-Developers:masterfrom
alvr-org:master
Open

[pull] master from alvr-org:master#143
pull[bot] wants to merge 212 commits into
PhoneVR-Developers:masterfrom
alvr-org:master

Conversation

@pull

@pull pull Bot commented Dec 7, 2024

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.1)

Can you help keep this open source service alive? 💖 Please sponsor : )

* chore(ci): update deprecated actions

* chore(ci): Fancy annotations uwu

* chore(ci): update ci some more
* chore(xtask): Dont run submodule update

* fix(linux): Fix compilitation error without jack installed
@pull pull Bot added the ⤵️ pull label Dec 7, 2024
zmerp and others added 27 commits December 7, 2024 22:05
* docs(linux): fix for no steamvr dashboard on hybrid graphics

* docs(linux) specify dashboard fix is for nvidia

* docs(linux): note to first close the steam client before opening it with render offload
* refactor(client_openxr): ♻️ Refactor around reference spaces

* Fix clippy
* Full range HDR works?

* Fix full range for non-HDR

* Cleanup

* Adjust this note

* Fix CI

* Fix server

* Return fractions
* fix(server_core): 🐛 Fix controllers disabling with lag

* clippy
… velocities in lobby (#2608)

* fix(client): 🐛 Fix controller angular velocity for some devices; show velocities in lobby

* Draw velocities only in debug builds

* Add push constants consts and bound checks
The-personified-devil and others added 20 commits December 30, 2025 02:06
* Set CPU performance level

* CPU and GPU perf levels

* Class migration and enable the required functions for performance control

* Remove old performance settings code

* Add log

* Fix extension activation

* Remove dedicated class for performance level settings

* Remove comments

* Move power saving setting location and remove unused imports

* Alphabetically order requested extensions.

* Add performance level setting

* Update text and default config

* Add realtime power mode setting and add boost level

* OpenXR Client performance level

* Formatting

* Remove commented code

* Performance level refactoring

* Remove powersavings performance level for lobby

* More accurate performance level help strings and hide Boost level.

* Combine duplicate strings.

* Update help string for performance level config
* Add Pico 4 emulation mode

* Update props to match controllers

---------

Co-authored-by: Deandre <gitlab.deandre@phial.xyz>
* Rename some vars

* Rename some vars
It is currently not possible to download OpenXR loaders,
for the lynx headset because of errors on their developer portal.
* feat: ci update actions versions + fix prepare release

* feat: adds build-linux + build-windows for rust ci

* feat: incorporated changes from pr

* added libx264-dev back in

* fix: pin prepare-release linux build to ubuntu-24.04
Previously the full executable path was counted as well, but for Linux
distros such as NixOS, this causes issues as Steam runs inside
bubblewrap, which means the openvr server does as well, which does not
has access to the full exe path.
* refactor(client_openxr): ⬆️ Update openxrs to latest release

* feat(client_openxr): ✨ Switch to registered BD facial tracking extension
* chore: Fix merge groups not running on rust workflow

* chore: Move artifact builds to separate file

* chore(ci): Remove check-linux-old

* chore (ci): pin linux checks to ubunut-24

* chore(ci): Run msrv checks in PR only, not queue
* windows ffmpeg -> 8.1

* linux ffmpeg -> 8.1

ports patches from 6.0 to 8.1
downloads latest vulkan header for compiling ffmpeg
updated prepare-release linux builder to ubuntu 24.04
fixed wrong vaapi arguments being used, which cased popup errors

* add vulkan headers to server_openvr build process
zmerp and others added 9 commits June 19, 2026 00:09
…oss-compilation from macOS (#3309)

* Add Docker-based Linux build setup for cross-compiling from macOS

Adds docker/Dockerfile.linux-build (Ubuntu 24.04, matching CI deps) and
docker/build-linux.sh to build ALVR for Linux from macOS without
modifying source files. Uses a named Docker volume for the Cargo target
dir to avoid conflicts with the macOS target/ directory.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(docker): Add Windows cross-build and fix Linux x86_64 forcing

- Add Dockerfile.windows-build (Clang 19 + cargo-xwin) and build-windows.sh
  for cross-compiling alvr_server_openvr/dashboard/launcher for
  x86_64-pc-windows-msvc from macOS via Docker
- Cross-compile libvpl from source in the container using clang-cl + xwin
  MSVC SDK with static CRT (/MT) to match ALVR's build config
- Switch build-linux.sh from DOCKER_BUILDKIT=0 to docker buildx
  --platform linux/amd64 so the image is x86_64 on Apple Silicon hosts
- Rewrite server_openvr/build.rs to use CARGO_CFG_TARGET_OS instead of
  cfg!(target_os=...) so Linux/Windows paths resolve correctly when
  cross-compiling; keep #[cfg(target_os = "linux")] only on pkg_config
  call sites to satisfy the Linux-only build-dependency declaration

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(docker): Add cargo check subcommand to Linux and Windows build scripts

Adds `./docker/build-linux.sh check` and `./docker/build-windows.sh check`
that run cargo check / cargo xwin check with RUSTFLAGS='-D warnings' to
catch Rust warnings before CI does. Also restores the missing
#[cfg(all(target_os = "linux", feature = "gpl"))] guard on
get_linux_x264_path to fix dead-code error caught by the Linux check.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(docker): Force cargo clean before check to prevent stale build script cache

Without this, cargo reuses a cached compiled build.rs when its content
matches a previous run, skipping recompilation and silently missing
warnings even with RUSTFLAGS='-D warnings'.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* refactor(settings): Move to global, extract load/state from bindings.h

- Replace singleton pattern with global `g_settings` (Settings.h/Settings.cpp)
- Move `Load()`, `IsLoaded()`, `m_loaded` out of Settings class into free
 functions and `g_settingsLoaded` global in Settings.h/Settings.cpp
- Convert Settings from class to struct in bindings.h (pure data container)
- Rename `Settings::Instance()` → free function `Settings_instance()`
- Revert consumer includes back to Settings.h (was bindings.h)
- Replace `Instance().Load()` call sites with `Load()`

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(settings): Construct Settings in Rust and pass to CppInit/InitializeStreaming

- Add ServerNegotiatedStreamingConfig carrying codec/resolution/encoder
 params from the client handshake; embed it in ClientConnected event
- Add make_settings() in server_openvr that builds the C++ Settings
 struct from alvr_server_core::settings() plus optional negotiated
 config (falls back to openvr_config for resolution/refresh rate)
- CppInit and InitializeStreaming now take Settings by value; Rust side
 constructs and passes it, removing Settings_Load() from the C++ path
- Add alvr_get_negotiated_config() and alvr_get_openvr_config_json() to
 the C API for consumers that need the negotiated or persisted config
- Rename NegotiatedStreamingConfig/StreamConfig to
 ClientNegotiatedStreamingConfig/ClientStreamConfig to distinguish from
 the new server-side type
- Add Copy to plain encoder enum types in session settings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(settings): Implement restart_settings_hash, simplify OpenvrConfig and Settings_Load

- Add compute_restart_settings_hash() hashing all steamvr-restart settings
 and client-negotiated fields using DefaultHasher; replaces struct equality
 comparison for detecting when SteamVR restart is needed
- Reduce OpenvrConfig to 5 client-negotiated fields only (resolution + fps);
 settings-derived fields read directly from settings at hash/use time
- Remove Settings_Load() from C++ entirely; CppInit now uses the Settings
 struct passed from Rust directly, eliminating the redundant disk read
- Remove contruct_openvr_config(); inlined at the single meaningful call site

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(settings): Make g_settings private, Settings_Instance returns const ptr

Settings_Instance() is now a non-inline function returning const Settings*,
preventing other translation units from mutating g_settings directly.
Declaration moved to bindings.h; Settings.h and Settings.cpp deleted.
All call sites updated from . to -> syntax.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(openvr): Rename OpenvrConfig to SteamvrHmdInitConfig

Clarifies that the struct only stores the HMD init parameters required
by SteamVR before InitializeStreaming() is called. Updates all references
including the JSON key read by the vulkan layer and vrcompositor wrapper.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(settings): Fix Settings_Instance() call sites for const pointer return type

Update all call sites to use -> instead of ., change local variable bindings
from const auto& to const auto*, and replace alvr_server/Settings.h includes
with alvr_server/bindings.h now that Settings.h no longer exports g_settings.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(linux): Fix missing includes in Linux C++ platform files

CEncoder.h was missing <string> for std::string; EncodePipelineSW.cpp
was missing the ALVR-common/packet_types.h include that defines
ALVR_CABAC, ALVR_H264_PROFILE_*, and ALVR_CODEC_H264 — already present
in EncodePipelineNvEnc.cpp and EncodePipelineVAAPI.cpp.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(server_openvr): correct boolean fields typed as int in Settings

m_controllerIsTracker, m_enableBodyTrackingFakeVive, and
m_bodyTrackingHasLegs were declared as int but initialized with false
and used as booleans throughout. Changed to bool for type correctness.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(server_openvr): normalize Settings field naming to m_camelCase

m_TrackingRefOnly had a capital letter after m_, inconsistent with every
other field. m_force_sw_encoding used underscore_case, the only field to
do so. Renamed both to follow the established m_camelCase convention:
  m_TrackingRefOnly    → m_trackingRefOnly
  m_force_sw_encoding  → m_forceSwEncoding

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(server_openvr): add m_ prefix to Hmd::view_params

view_params was the only private member of Hmd without the m_ prefix.
Renamed to m_viewParams for consistency with all other private fields.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(server_openvr): remove stale commented-out generic_trackers.clear()

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(server_openvr): fix typo bindigs → bindings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…leanups (#3314)

* fix(server_core): alvr_get_time_ns always returned ~0

Instant::now().elapsed() measures duration since an instant just
created, so the result was always nanoseconds away from zero.
Use a static start instant so the function returns a monotonically
increasing nanosecond counter from first call, as intended.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(server_core): fix typos in identifiers and doc comments

LASTEST_TAG_TIMESTAMPS → LATEST_TAG_TIMESTAMPS
"Retr  un true" → "Return true"
"restart settings chache" → "restart settings cache"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(server_openvr): rename event_loop to spawn_event_loop

The function returns immediately after spawning a thread; the event
loop runs inside that thread. The old name implied a blocking call.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(server_core): simplify get_dynamic_encoder_params with .map()

Replace explicit if/else Some/None arms with Option::map so the return
type is expressed once and the happy path stays flat.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…tion cfg (#3313)

get_linux_x264_path() is defined with #[cfg(all(target_os = "linux", feature = "gpl"))]
but was called from blocks guarded only by #[cfg(feature = "gpl")], causing a
compile error on Windows hosts when the gpl feature is enabled.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
The check variant was skipping setup_libvpl, causing vpl/mfx.h not
found errors. Add the same $(setup_libvpl) call used by the full build;
the skip-if-built guard means repeated check runs pay no extra cost.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
#3315)

Track swapchain indices internally in `m_swapchainIndices` (keyed by
`ProcessResource*` found via `m_handleMap`) so that `pIndices` being
null no longer causes a crash. The index is initialized on
`CreateSwapTextureSet`, cleaned up in both `Destroy*` methods, and
written to `*pIndices` only when non-null.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(server_openvr): upgrade openvr SDK from v1.16.8 to v2.15.6

Update submodule and adapt to breaking API changes:
- PostPresent now takes a Throttling_t* parameter (IVRDriverDirectModeComponent_009)
- ComputeInverseDistortion is a new pure virtual in IVRDisplayComponent_003
- VREvent_ChaperoneRoomSetupFinished renamed to VREvent_ChaperoneRoomSetupCommitted

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(server_openvr): track openvr headers in cargo rerun-if-changed

Without this, cargo's fingerprint didn't detect openvr header changes
(e.g. submodule upgrades), so cached C++ objects were reused and
compile errors were silently missed in incremental builds.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.