Files
mitch030504--Wiicompiled_VR…/runtime/tests/vr_config_tests.cpp
T
Claude e626e0eceb Give the Steam Frame build its own passthrough default
SteamVR has no XR_FB_passthrough, so the Steam Frame build neither asks
for it nor offers the setting: [vr] passthrough defaults to false there,
and the F10/headset panel and the launcher hide the switch. The Frame
keeps the Android defaults that suit it (render scale 0.8, foveation
medium, the GX thread, object culling, performance level boost) and
starts at 120 Hz (previous commit).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019HBRGKTE1GnN2ah8gcZKr3
2026-10-04 08:34:04 +00:00

115 lines
6.0 KiB
C++

// SPDX-License-Identifier: GPL-3.0-or-later
#include "runtime_config.h"
#include <cstdlib>
#include <sstream>
#include <string>
#include <string_view>
static void Require(bool condition) {
if (!condition) std::abort();
}
static RuntimeUserConfig Parse(const std::string& text) {
std::istringstream input(text);
return RuntimeConfigFile::ParseConfig(input);
}
int main() {
for (std::string_view hand : {"left", "right", "off"}) {
Require(Parse("[vr]\ncockpit_item_hand = \"" + std::string(hand) + "\"\n")
.vrCockpitItemHand == std::string(hand));
}
Require(std::string_view(RuntimeConfigFile::kVrCockpitItemHandDefault) == "left");
Require(!Parse("[vr]\n").vrCockpitItemHand.has_value());
Require(!Parse("[vr]\ncockpit_item_hand = 1\n").vrCockpitItemHand.has_value());
Require(RuntimeConfigFile::kVrCockpitItemThrowDefault);
Require(Parse("[vr]\ncockpit_item_throw = false\n").vrCockpitItemThrow == false);
Require(Parse("[vr]\ncockpit_item_throw = true\n").vrCockpitItemThrow == true);
Require(!Parse("[vr]\n").vrCockpitItemThrow.has_value());
// [vr] placeholder_steering_wheel: the separate VR wheel or handlebar is opt-in.
Require(!RuntimeConfigFile::kVrPlaceholderSteeringWheelDefault);
Require(Parse("[vr]\nplaceholder_steering_wheel = true\n").vrPlaceholderSteeringWheel == true);
Require(Parse("[vr]\nplaceholder_steering_wheel = false\n").vrPlaceholderSteeringWheel == false);
Require(!Parse("[vr]\n").vrPlaceholderSteeringWheel.has_value());
// [vr] foveation: the Quest's foveated rendering level, index-matched to
// aurora_set_stereo_foveation.
for (std::string_view level : RuntimeConfigFile::kVrFoveationLevels) {
Require(Parse("[vr]\nfoveation = \"" + std::string(level) + "\"\n").vrFoveation == std::string(level));
}
Require(!Parse("[vr]\nfoveation = \"ultra\"\n").vrFoveation.has_value());
Require(!Parse("[vr]\nfoveation = 2\n").vrFoveation.has_value());
Require(!Parse("[vr]\n").vrFoveation.has_value());
#if defined(__ANDROID__)
Require(std::string_view(RuntimeConfigFile::kVrFoveationDefault) == "medium");
#else
Require(std::string_view(RuntimeConfigFile::kVrFoveationDefault) == "off");
#endif
Require(RuntimeConfigFile::VrFoveationLevelIndex("off") == 0);
Require(RuntimeConfigFile::VrFoveationLevelIndex("low") == 1);
Require(RuntimeConfigFile::VrFoveationLevelIndex("medium") == 2);
Require(RuntimeConfigFile::VrFoveationLevelIndex("high") == 3);
Require(RuntimeConfigFile::VrFoveationLevelIndex("ultra") == 0);
// [vr] refresh_rate: Hz asked of the runtime, 0 leaving its own. The Steam Frame
// starts at 120, twice the game's 60.
Require(Parse("[vr]\nrefresh_rate = 120\n").vrRefreshRate == 120u);
Require(Parse("[vr]\nrefresh_rate = 0\n").vrRefreshRate == 0u);
Require(Parse("[vr]\nrefresh_rate = 144\n").vrRefreshRate == 144u);
Require(!Parse("[vr]\nrefresh_rate = 30\n").vrRefreshRate.has_value());
Require(!Parse("[vr]\nrefresh_rate = 500\n").vrRefreshRate.has_value());
Require(!Parse("[vr]\nrefresh_rate = -1\n").vrRefreshRate.has_value());
Require(!Parse("[vr]\nrefresh_rate = \"120\"\n").vrRefreshRate.has_value());
Require(!Parse("[vr]\n").vrRefreshRate.has_value());
#if defined(MKW_HEADSET_STEAM_FRAME)
Require(RuntimeConfigFile::kVrRefreshRateDefault == 120u);
Require(std::string_view(MKW_VR_REFRESH_RATE_DEFAULT_TEXT) == "120");
#else
Require(RuntimeConfigFile::kVrRefreshRateDefault == 0u);
Require(std::string_view(MKW_VR_REFRESH_RATE_DEFAULT_TEXT) == "0");
#endif
// [vr] passthrough: Horizon OS's room view, which the Steam Frame build does not offer.
Require(Parse("[vr]\npassthrough = false\n").vrPassthrough == false);
Require(!Parse("[vr]\n").vrPassthrough.has_value());
#if defined(MKW_HEADSET_STEAM_FRAME)
Require(!RuntimeConfigFile::kVrPassthroughDefault);
#else
Require(RuntimeConfigFile::kVrPassthroughDefault);
#endif
// [vr] hand_tracking: the cockpit hands follow the headset's hand tracking.
Require(Parse("[vr]\nhand_tracking = true\n").vrHandTracking == true);
Require(Parse("[vr]\nhand_tracking = false\n").vrHandTracking == false);
Require(!Parse("[vr]\n").vrHandTracking.has_value());
Require(!Parse("[vr]\nhand_tracking = 1\n").vrHandTracking.has_value());
Require(!RuntimeConfigFile::kVrHandTrackingDefault);
// [vr] object_culling: false draws what the game camera culls. The PC
// defaults to that; the Quest keeps the game's culling.
Require(Parse("[vr]\nobject_culling = true\n").vrObjectCulling == true);
Require(Parse("[vr]\nobject_culling = false\n").vrObjectCulling == false);
Require(!Parse("[vr]\n").vrObjectCulling.has_value());
Require(!Parse("[vr]\nobject_culling = 0\n").vrObjectCulling.has_value());
#if defined(__ANDROID__)
Require(RuntimeConfigFile::kVrObjectCullingDefault);
Require(std::string_view(MKW_VR_OBJECT_CULLING_DEFAULT_TOML) == "true");
#else
Require(!RuntimeConfigFile::kVrObjectCullingDefault);
Require(std::string_view(MKW_VR_OBJECT_CULLING_DEFAULT_TOML) == "false");
#endif
// [vr] immersive_window and flat_screen: one race view in two keys, Flat
// Screen mode winning, so a file that predates the window reads as before.
using RuntimeConfigFile::VrRaceView;
using RuntimeConfigFile::VrRaceViewOf;
Require(Parse("[vr]\nimmersive_window = true\n").vrImmersiveWindow == true);
Require(!Parse("[vr]\n").vrImmersiveWindow.has_value());
Require(VrRaceViewOf(Parse("[vr]\n")) == VrRaceView::Immersive);
Require(VrRaceViewOf(Parse("[vr]\nflat_screen = false\n")) == VrRaceView::Immersive);
Require(VrRaceViewOf(Parse("[vr]\nflat_screen = true\n")) == VrRaceView::FlatScreen);
Require(VrRaceViewOf(Parse("[vr]\nimmersive_window = true\n")) == VrRaceView::ImmersiveWindow);
Require(VrRaceViewOf(Parse("[vr]\nflat_screen = true\nimmersive_window = true\n")) == VrRaceView::FlatScreen);
Require(VrRaceViewOf(Parse("[vr]\nflat_screen = false\nimmersive_window = false\n")) == VrRaceView::Immersive);
return 0;
}