@@ -19,8 +19,8 @@ namespace vrperfkit {
1919 if (s == " cas" ) {
2020 return UpscaleMethod::CAS;
2121 }
22- LOG_INFO << " Unknown upscaling method " << s << " , defaulting to FSR " ;
23- return UpscaleMethod::FSR ;
22+ LOG_INFO << " Unknown upscaling method " << s << " , defaulting to NIS " ;
23+ return UpscaleMethod::NIS ;
2424 }
2525
2626 std::string MethodToString (UpscaleMethod method) {
@@ -50,6 +50,37 @@ namespace vrperfkit {
5050 }
5151 }
5252
53+ GameMode GameModeFromString (std::string s) {
54+ std::transform (s.begin (), s.end (), s.begin (), [](unsigned char c) { return std::tolower (c); });
55+ if (s == " auto" ) {
56+ return GameMode::AUTO;
57+ }
58+ if (s == " single" ) {
59+ return GameMode::GENERIC_SINGLE;
60+ }
61+ if (s == " left" ) {
62+ return GameMode::LEFT_EYE_FIRST;
63+ }
64+ if (s == " right" ) {
65+ return GameMode::RIGHT_EYE_FIRST;
66+ }
67+ LOG_INFO << " Unknown HRM Mode " << s << " , defaulting to auto" ;
68+ return GameMode::AUTO;
69+ }
70+
71+ std::string GameModeToString (GameMode mode) {
72+ switch (mode) {
73+ case GameMode::AUTO:
74+ return " auto" ;
75+ case GameMode::GENERIC_SINGLE:
76+ return " single" ;
77+ case GameMode::LEFT_EYE_FIRST:
78+ return " left" ;
79+ case GameMode::RIGHT_EYE_FIRST:
80+ return " right" ;
81+ }
82+ }
83+
5384 std::string PrintToggle (bool toggle) {
5485 return toggle ? " enabled" : " disabled" ;
5586 }
@@ -72,9 +103,9 @@ namespace vrperfkit {
72103 UpscaleConfig &upscaling= g_config.upscaling ;
73104 upscaling.enabled = upscaleCfg[" enabled" ].as <bool >(upscaling.enabled );
74105 upscaling.method = MethodFromString (upscaleCfg[" method" ].as <std::string>(MethodToString (upscaling.method )));
75- upscaling.renderScale = upscaleCfg[" renderScale" ].as <float >(upscaling.renderScale );
106+ upscaling.renderScale = sqrt ( upscaleCfg[" renderScale" ].as <float >(upscaling.renderScale ) / 100 . 00f );
76107 if (upscaling.renderScale < 0 .5f ) {
77- LOG_INFO << " Setting render scale to minimum value of 0.5 " ;
108+ LOG_INFO << " Setting render scale to minimum value of 25% " ;
78109 upscaling.renderScale = 0 .5f ;
79110 }
80111 upscaling.sharpness = std::max (0 .f , upscaleCfg[" sharpness" ].as <float >(upscaling.sharpness ));
@@ -90,15 +121,48 @@ namespace vrperfkit {
90121 YAML::Node ffrCfg = cfg[" fixedFoveated" ];
91122 FixedFoveatedConfig &ffr = g_config.ffr ;
92123 ffr.enabled = ffrCfg[" enabled" ].as <bool >(ffr.enabled );
124+ ffr.apply = ffr.enabled ;
93125 ffr.favorHorizontal = ffrCfg[" favorHorizontal" ].as <bool >(ffr.favorHorizontal );
94126 ffr.innerRadius = ffrCfg[" innerRadius" ].as <float >(ffr.innerRadius );
95127 ffr.midRadius = ffrCfg[" midRadius" ].as <float >(ffr.midRadius );
96128 ffr.outerRadius = ffrCfg[" outerRadius" ].as <float >(ffr.outerRadius );
129+ ffr.preciseResolution = ffrCfg[" preciseResolution" ].as <bool >(ffr.preciseResolution );
130+ ffr.ignoreFirstTargetRenders = ffrCfg[" ignoreFirstTargetRenders" ].as <int >(ffr.ignoreFirstTargetRenders );
131+ ffr.maxRadius = ffr.innerRadius ;
97132 ffr.overrideSingleEyeOrder = ffrCfg[" overrideSingleEyeOrder" ].as <std::string>(ffr.overrideSingleEyeOrder );
133+ ffr.fastMode = ffrCfg[" fastMode" ].as <bool >(ffr.fastMode );
134+ ffr.dynamic = ffrCfg[" dynamic" ].as <bool >(ffr.dynamic );
135+ ffr.targetFrameTime = 1 .f / ffrCfg[" targetFPS" ].as <float >(ffr.targetFrameTime );
136+ ffr.marginFrameTime = 1 .f / ffrCfg[" marginFPS" ].as <float >(ffr.marginFrameTime );
137+ ffr.dynamicChangeRadius = ffrCfg[" dynamicChangeRadius" ].as <bool >(ffr.dynamicChangeRadius );
138+ ffr.minRadius = ffrCfg[" minRadius" ].as <float >(ffr.minRadius );
139+ ffr.increaseRadiusStep = ffrCfg[" increaseRadiusStep" ].as <float >(ffr.increaseRadiusStep );
140+ ffr.decreaseRadiusStep = ffrCfg[" decreaseRadiusStep" ].as <float >(ffr.decreaseRadiusStep );
141+
142+ YAML::Node hiddenMaskCfg = cfg[" hiddenMask" ];
143+ HiddenRadialMask &hiddenMask= g_config.hiddenMask ;
144+ hiddenMask.enabled = hiddenMaskCfg[" enabled" ].as <bool >(hiddenMask.enabled );
145+ hiddenMask.radius = std::max (0 .f , hiddenMaskCfg[" radius" ].as <float >(hiddenMask.radius ));
146+ hiddenMask.maxRadius = hiddenMask.radius ;
147+ hiddenMask.preciseResolution = hiddenMaskCfg[" preciseResolution" ].as <bool >(hiddenMask.preciseResolution );
148+ hiddenMask.ignoreFirstTargetRenders = hiddenMaskCfg[" ignoreFirstTargetRenders" ].as <int >(hiddenMask.ignoreFirstTargetRenders );
149+ hiddenMask.dynamic = hiddenMaskCfg[" dynamic" ].as <bool >(hiddenMask.dynamic );
150+ hiddenMask.targetFrameTime = 1 .f / hiddenMaskCfg[" targetFPS" ].as <float >(hiddenMask.targetFrameTime );
151+ hiddenMask.marginFrameTime = 1 .f / hiddenMaskCfg[" marginFPS" ].as <float >(hiddenMask.marginFrameTime );
152+ hiddenMask.dynamicChangeRadius = hiddenMaskCfg[" dynamicChangeRadius" ].as <bool >(hiddenMask.dynamicChangeRadius );
153+ hiddenMask.minRadius = hiddenMaskCfg[" minRadius" ].as <float >(hiddenMask.minRadius );
154+ hiddenMask.increaseRadiusStep = hiddenMaskCfg[" increaseRadiusStep" ].as <float >(hiddenMask.increaseRadiusStep );
155+ hiddenMask.decreaseRadiusStep = hiddenMaskCfg[" decreaseRadiusStep" ].as <float >(hiddenMask.decreaseRadiusStep );
98156
99157 g_config.debugMode = cfg[" debugMode" ].as <bool >(g_config.debugMode );
100158
101159 g_config.dllLoadPath = cfg[" dllLoadPath" ].as <std::string>(g_config.dllLoadPath );
160+
161+ g_config.gameMode = GameModeFromString (cfg[" gameMode" ].as <std::string>(GameModeToString (g_config.gameMode )));
162+ g_config.dynamicFramesCheck = cfg[" dynamicFramesCheck" ].as <int >(g_config.dynamicFramesCheck );
163+ if (g_config.dynamicFramesCheck < 1 ) {
164+ g_config.dynamicFramesCheck = 1 ;
165+ }
102166 }
103167 catch (const YAML::Exception &e) {
104168 LOG_ERROR << " Failed to load configuration file: " << e.msg ;
@@ -107,21 +171,67 @@ namespace vrperfkit {
107171
108172 void PrintCurrentConfig () {
109173 LOG_INFO << " Current configuration:" ;
110- LOG_INFO << " Upscaling ( " << MethodToString (g_config. upscaling . method ) << " ) is " << PrintToggle (g_config.upscaling .enabled );
174+ LOG_INFO << " Upscaling is " << PrintToggle (g_config.upscaling .enabled );
111175 if (g_config.upscaling .enabled ) {
112- LOG_INFO << " * Render scale: " << std::setprecision (2 ) << g_config.upscaling .renderScale ;
113- LOG_INFO << " * Sharpness: " << std::setprecision (2 ) << g_config.upscaling .sharpness ;
114- LOG_INFO << " * Radius: " << std::setprecision (2 ) << g_config.upscaling .radius ;
115- LOG_INFO << " * MIP bias: " << PrintToggle (g_config.upscaling .applyMipBias );
176+ LOG_INFO << " * Method: " << MethodToString (g_config.upscaling .method );
177+ LOG_INFO << " * Render scale: " << std::setprecision (6 ) << g_config.upscaling .renderScale * g_config.upscaling .renderScale * 100 << " %" ;
178+ LOG_INFO << " * Render factor: " << std::setprecision (6 ) << g_config.upscaling .renderScale ;
179+ LOG_INFO << " * Sharpness: " << std::setprecision (6 ) << g_config.upscaling .sharpness ;
180+ LOG_INFO << " * Radius: " << std::setprecision (6 ) << g_config.upscaling .radius ;
181+ LOG_INFO << " * MIP bias: " << PrintToggle (g_config.upscaling .applyMipBias );
116182 }
117- LOG_INFO << " Fixed foveated rendering (" << FFRMethodToString (g_config.ffr .method ) << " ) is " << PrintToggle (g_config.ffr .enabled );
183+ LOG_INFO << " Game Mode: " << GameModeToString (g_config.gameMode );
184+ if ((g_config.ffr .enabled && g_config.ffr .dynamic ) || (g_config.hiddenMask .enabled && g_config.hiddenMask .dynamic )) {
185+ LOG_INFO << " Dynamic Frames Check: " << std::setprecision (6 ) << g_config.dynamicFramesCheck ;
186+ }
187+ LOG_INFO << " Fixed foveated rendering is " << PrintToggle (g_config.ffr .enabled );
118188 if (g_config.ffr .enabled ) {
119- LOG_INFO << " * Inner radius: " << std::setprecision (2 ) << g_config.ffr .innerRadius ;
120- LOG_INFO << " * Mid radius: " << std::setprecision (2 ) << g_config.ffr .midRadius ;
121- LOG_INFO << " * Outer radius: " << std::setprecision (2 ) << g_config.ffr .outerRadius ;
189+ LOG_INFO << " * Method: " << FFRMethodToString (g_config.ffr .method );
190+ LOG_INFO << " * Inner radius: " << std::setprecision (6 ) << g_config.ffr .innerRadius ;
191+ LOG_INFO << " * Mid radius: " << std::setprecision (6 ) << g_config.ffr .midRadius ;
192+ LOG_INFO << " * Outer radius: " << std::setprecision (6 ) << g_config.ffr .outerRadius ;
193+ LOG_INFO << " * Precise res: " << PrintToggle (g_config.ffr .preciseResolution );
194+ LOG_INFO << " * No renders: " << std::setprecision (6 ) << g_config.ffr .ignoreFirstTargetRenders ;
122195 if (!g_config.ffr .overrideSingleEyeOrder .empty ()) {
123- LOG_INFO << " * Eye order: " << g_config.ffr .overrideSingleEyeOrder ;
196+ LOG_INFO << " * Eye order: " << g_config.ffr .overrideSingleEyeOrder ;
197+ }
198+ LOG_INFO << " * Fast mode: " << PrintToggle (g_config.ffr .fastMode );
199+ LOG_INFO << " * Dynamic: " << PrintToggle (g_config.ffr .dynamic );
200+ if (g_config.ffr .dynamic ) {
201+ LOG_INFO << " * Target FPS: " << std::setprecision (6 ) << (1 .f / g_config.ffr .targetFrameTime );
202+ LOG_INFO << " * Target FT: " << std::setprecision (6 ) << (g_config.ffr .targetFrameTime * 1000 .f ) << " ms" ;
203+ LOG_INFO << " * Margin FPS: " << std::setprecision (6 ) << (1 .f / g_config.ffr .marginFrameTime );
204+ LOG_INFO << " * Margin FT: " << std::setprecision (6 ) << (g_config.ffr .marginFrameTime * 1000 .f ) << " ms" ;
205+ LOG_INFO << " * Change radius is " << PrintToggle (g_config.ffr .dynamicChangeRadius );
206+ if (g_config.ffr .dynamicChangeRadius ) {
207+ LOG_INFO << " * Min radius: " << std::setprecision (6 ) << g_config.ffr .minRadius ;
208+ LOG_INFO << " * Inc radius: " << std::setprecision (6 ) << g_config.ffr .increaseRadiusStep ;
209+ LOG_INFO << " * Dec radius: " << std::setprecision (6 ) << g_config.ffr .decreaseRadiusStep ;
210+ }
211+ }
212+ } else {
213+ g_config.ffr .dynamic = false ;
214+ }
215+ LOG_INFO << " Hidden radial mask is " << PrintToggle (g_config.hiddenMask .enabled );
216+ if (g_config.hiddenMask .enabled ) {
217+ LOG_INFO << " * Radius: " << std::setprecision (6 ) << g_config.hiddenMask .radius ;
218+ LOG_INFO << " * Precise res: " << PrintToggle (g_config.hiddenMask .preciseResolution );
219+ LOG_INFO << " * No renders: " << std::setprecision (6 ) << g_config.hiddenMask .ignoreFirstTargetRenders ;
220+ LOG_INFO << " * Dynamic: " << PrintToggle (g_config.hiddenMask .dynamic );
221+ if (g_config.hiddenMask .dynamic ) {
222+ LOG_INFO << " * Target FPS: " << std::setprecision (6 ) << (1 .f / g_config.hiddenMask .targetFrameTime );
223+ LOG_INFO << " * Target FT: " << std::setprecision (6 ) << (g_config.hiddenMask .targetFrameTime * 1000 .f ) << " ms" ;
224+ LOG_INFO << " * Margin FPS: " << std::setprecision (6 ) << (1 .f / g_config.hiddenMask .marginFrameTime );
225+ LOG_INFO << " * Margin FT: " << std::setprecision (6 ) << (g_config.hiddenMask .marginFrameTime * 1000 .f ) << " ms" ;
226+ LOG_INFO << " * Change radius is " << PrintToggle (g_config.hiddenMask .dynamicChangeRadius );
227+ if (g_config.hiddenMask .dynamicChangeRadius ) {
228+ LOG_INFO << " - Min radius: " << std::setprecision (6 ) << g_config.hiddenMask .minRadius ;
229+ LOG_INFO << " - Inc radius: " << std::setprecision (6 ) << g_config.hiddenMask .increaseRadiusStep ;
230+ LOG_INFO << " - Dec radius: " << std::setprecision (6 ) << g_config.hiddenMask .decreaseRadiusStep ;
231+ }
124232 }
233+ } else {
234+ g_config.hiddenMask .dynamic = false ;
125235 }
126236 LOG_INFO << " Debug mode is " << PrintToggle (g_config.debugMode );
127237 FlushLog ();
0 commit comments