瀏覽代碼

libobs: Fix Windows 10/11 Gamemode/HAGS detection

It seems that the older key still exists on Win 11 and 10 but is always
set to 0, so use the newer to start with and fall back to the old one if
necessary.

Additionally, if the key for HAGS and GameMode do not exist assume
they're on as this is the default on Win 11. On Windows 10 game mode is
also on by default in recent versions.

Also changes "10" to "10/11" just for correctness.
derrod 3 年之前
父節點
當前提交
44eb8ffbb6
共有 1 個文件被更改,包括 12 次插入3 次删除
  1. 12 3
      libobs/obs-windows.c

+ 12 - 3
libobs/obs-windows.c

@@ -27,6 +27,7 @@
 #include <iwscapi.h>
 #include <iwscapi.h>
 
 
 static uint32_t win_ver = 0;
 static uint32_t win_ver = 0;
+static uint32_t win_build = 0;
 
 
 const char *get_module_extension(void)
 const char *get_module_extension(void)
 {
 {
@@ -223,16 +224,16 @@ static void log_gaming_features(void)
 	get_reg_dword(HKEY_CURRENT_USER, WIN10_GAME_BAR_REG_KEY,
 	get_reg_dword(HKEY_CURRENT_USER, WIN10_GAME_BAR_REG_KEY,
 		      L"HistoricalCaptureEnabled", &game_dvr_bg_recording);
 		      L"HistoricalCaptureEnabled", &game_dvr_bg_recording);
 	get_reg_dword(HKEY_CURRENT_USER, WIN10_GAME_MODE_REG_KEY,
 	get_reg_dword(HKEY_CURRENT_USER, WIN10_GAME_MODE_REG_KEY,
-		      L"AllowAutoGameMode", &game_mode_enabled);
+		      L"AutoGameModeEnabled", &game_mode_enabled);
 	get_reg_dword(HKEY_LOCAL_MACHINE, WIN10_HAGS_REG_KEY, L"HwSchMode",
 	get_reg_dword(HKEY_LOCAL_MACHINE, WIN10_HAGS_REG_KEY, L"HwSchMode",
 		      &hags_enabled);
 		      &hags_enabled);
 
 
 	if (game_mode_enabled.status != ERROR_SUCCESS) {
 	if (game_mode_enabled.status != ERROR_SUCCESS) {
 		get_reg_dword(HKEY_CURRENT_USER, WIN10_GAME_MODE_REG_KEY,
 		get_reg_dword(HKEY_CURRENT_USER, WIN10_GAME_MODE_REG_KEY,
-			      L"AutoGameModeEnabled", &game_mode_enabled);
+			      L"AllowAutoGameMode", &game_mode_enabled);
 	}
 	}
 
 
-	blog(LOG_INFO, "Windows 10 Gaming Features:");
+	blog(LOG_INFO, "Windows 10/11 Gaming Features:");
 	if (game_bar_enabled.status == ERROR_SUCCESS) {
 	if (game_bar_enabled.status == ERROR_SUCCESS) {
 		blog(LOG_INFO, "\tGame Bar: %s",
 		blog(LOG_INFO, "\tGame Bar: %s",
 		     (bool)game_bar_enabled.return_value ? "On" : "Off");
 		     (bool)game_bar_enabled.return_value ? "On" : "Off");
@@ -256,11 +257,18 @@ static void log_gaming_features(void)
 	if (game_mode_enabled.status == ERROR_SUCCESS) {
 	if (game_mode_enabled.status == ERROR_SUCCESS) {
 		blog(LOG_INFO, "\tGame Mode: %s",
 		blog(LOG_INFO, "\tGame Mode: %s",
 		     (bool)game_mode_enabled.return_value ? "On" : "Off");
 		     (bool)game_mode_enabled.return_value ? "On" : "Off");
+	} else if (win_build >= 19042) {
+		// On by default in newer Windows 10 builds (no registry key set)
+		blog(LOG_INFO, "\tGame Mode: Probably On (no reg key set)");
 	}
 	}
 
 
 	if (hags_enabled.status == ERROR_SUCCESS) {
 	if (hags_enabled.status == ERROR_SUCCESS) {
 		blog(LOG_INFO, "\tHardware GPU Scheduler: %s",
 		blog(LOG_INFO, "\tHardware GPU Scheduler: %s",
 		     (hags_enabled.return_value == 2) ? "On" : "Off");
 		     (hags_enabled.return_value == 2) ? "On" : "Off");
+	} else if (win_build >= 22000) {
+		// On by default in Windows 11 (no registry key set)
+		blog(LOG_INFO,
+		     "\tHardware GPU Scheduler: Probably On (no reg key set)");
 	}
 	}
 }
 }
 
 
@@ -393,6 +401,7 @@ void log_system_info(void)
 	get_win_ver(&ver);
 	get_win_ver(&ver);
 
 
 	win_ver = (ver.major << 8) | ver.minor;
 	win_ver = (ver.major << 8) | ver.minor;
+	win_build = ver.build;
 
 
 	log_processor_info();
 	log_processor_info();
 	log_processor_cores();
 	log_processor_cores();