[Scummvm-git-logs] scummvm master -> 8ed85326fa6215a267beb953271c4c4a30fa6d57

spleen1981 noreply at scummvm.org
Sat Mar 30 13:42:47 UTC 2024


This automated email contains information about 6 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
cd3cc986ed LIBRETRO: set closest power of 2 for scummvm audio buffer size
4ad8d47aac LIBRETRO: switch to emu thread even while frame skipping
e1abf6d691 LIBRETRO: check also AUDIO_STATUS_BUFFER_ACTIVE for auto frameskip
735cbbb34f LIBRETRO: add treshold to remove AUDIO_STATUS_BUFFER_UNDERRUN bit
f5a45d36e3 LIBRETRO: switch retropad A and Y default mapping
8ed85326fa LIBRETRO: drop performance auto tuner


Commit: cd3cc986ed16e6000d24cd3b6c34caf2a39f2ec8
    https://github.com/scummvm/scummvm/commit/cd3cc986ed16e6000d24cd3b6c34caf2a39f2ec8
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2024-03-30T14:37:38+01:00

Commit Message:
LIBRETRO: set closest power of 2 for scummvm audio buffer size

Changed paths:
    backends/platform/libretro/src/libretro-core.cpp


diff --git a/backends/platform/libretro/src/libretro-core.cpp b/backends/platform/libretro/src/libretro-core.cpp
index 147dd8252a9..22d1347c2be 100644
--- a/backends/platform/libretro/src/libretro-core.cpp
+++ b/backends/platform/libretro/src/libretro-core.cpp
@@ -610,7 +610,16 @@ uint16 retro_setting_get_sample_rate(void) {
 }
 
 uint16 retro_setting_get_audio_samples_buffer_size(void) {
-	return audio_samples_per_frame + 1;
+	/* ScummVM a.udio buffer size is normally between 512 and 8192, but the value
+	must be one of: 256, 512, 1024, 2048, 4096, 8192, 16384, or 32768. */
+	uint16 v = audio_samples_per_frame--;
+	v |= v >> 1;
+	v |= v >> 2;
+	v |= v >> 4;
+	v |= v >> 8;
+	v |= v >> 16;
+
+	return ++v;
 }
 
 void init_command_params(void) {


Commit: 4ad8d47aac003bf43c8c5c83cd56fa6116e07baa
    https://github.com/scummvm/scummvm/commit/4ad8d47aac003bf43c8c5c83cd56fa6116e07baa
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2024-03-30T14:38:09+01:00

Commit Message:
LIBRETRO: switch to emu thread even while frame skipping

Changed paths:
    backends/platform/libretro/src/libretro-core.cpp


diff --git a/backends/platform/libretro/src/libretro-core.cpp b/backends/platform/libretro/src/libretro-core.cpp
index 22d1347c2be..5fa206a6bfa 100644
--- a/backends/platform/libretro/src/libretro-core.cpp
+++ b/backends/platform/libretro/src/libretro-core.cpp
@@ -1101,9 +1101,8 @@ void retro_run(void) {
 			}
 		}
 
-		/* Switch to ScummVM thread, unless frameskipping is ongoing */
-		if (!skip_frame)
-			retro_switch_to_emu_thread();
+		/* Switch to ScummVM thread */
+		retro_switch_to_emu_thread();
 
 		if (retro_emu_thread_exited()) {
 			exit_to_frontend();


Commit: e1abf6d691fa0a2831a9ea0a72be601b664c821d
    https://github.com/scummvm/scummvm/commit/e1abf6d691fa0a2831a9ea0a72be601b664c821d
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2024-03-30T14:38:41+01:00

Commit Message:
LIBRETRO: check also AUDIO_STATUS_BUFFER_ACTIVE for auto frameskip

Changed paths:
    backends/platform/libretro/src/libretro-core.cpp


diff --git a/backends/platform/libretro/src/libretro-core.cpp b/backends/platform/libretro/src/libretro-core.cpp
index 5fa206a6bfa..ce208f3bf2a 100644
--- a/backends/platform/libretro/src/libretro-core.cpp
+++ b/backends/platform/libretro/src/libretro-core.cpp
@@ -1057,7 +1057,7 @@ void retro_run(void) {
 
 		/* Determine frameskip need based on settings */
 		if ((frameskip_type == 2) || (performance_switch & PERF_SWITCH_ON))
-			skip_frame = (audio_status & AUDIO_STATUS_BUFFER_UNDERRUN);
+			skip_frame = ((audio_status & (AUDIO_STATUS_BUFFER_UNDERRUN | AUDIO_STATUS_BUFFER_ACTIVE)) == (AUDIO_STATUS_BUFFER_UNDERRUN | AUDIO_STATUS_BUFFER_ACTIVE));
 		else if (frameskip_type == 1)
 			skip_frame = !(current_frame % frameskip_no == 0);
 		else if (frameskip_type == 3)


Commit: 735cbbb34faad79b8a953126d29ac6fd91bc017c
    https://github.com/scummvm/scummvm/commit/735cbbb34faad79b8a953126d29ac6fd91bc017c
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2024-03-30T14:39:14+01:00

Commit Message:
LIBRETRO: add treshold to remove AUDIO_STATUS_BUFFER_UNDERRUN bit

Changed paths:
    backends/platform/libretro/src/libretro-core.cpp


diff --git a/backends/platform/libretro/src/libretro-core.cpp b/backends/platform/libretro/src/libretro-core.cpp
index ce208f3bf2a..201ebc71ed4 100644
--- a/backends/platform/libretro/src/libretro-core.cpp
+++ b/backends/platform/libretro/src/libretro-core.cpp
@@ -195,7 +195,7 @@ static void retro_audio_buff_status_cb(bool active, unsigned occupancy, bool und
 
 	if (occupancy < retro_audio_buff_underrun_threshold)
 		audio_status |= AUDIO_STATUS_BUFFER_UNDERRUN;
-	else
+	else if (occupancy > (retro_audio_buff_underrun_threshold << 2))
 		audio_status &= ~AUDIO_STATUS_BUFFER_UNDERRUN;
 
 	retro_audio_buff_occupancy = occupancy;


Commit: f5a45d36e3084c5948954293be33798adbf44d50
    https://github.com/scummvm/scummvm/commit/f5a45d36e3084c5948954293be33798adbf44d50
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2024-03-30T14:39:36+01:00

Commit Message:
LIBRETRO: switch retropad A and Y default mapping

Changed paths:
    backends/platform/libretro/include/libretro-core-options.h


diff --git a/backends/platform/libretro/include/libretro-core-options.h b/backends/platform/libretro/include/libretro-core-options.h
index c4b22b3bbee..3feb0d256ec 100644
--- a/backends/platform/libretro/include/libretro-core-options.h
+++ b/backends/platform/libretro/include/libretro-core-options.h
@@ -400,7 +400,7 @@ struct retro_core_option_v2_definition option_defs_us[] = {
 		{
 			{ NULL, NULL }
 		},
-		"RETROK_ESCAPE"
+		"RETROK_SPACE"
 	},
 	{
 		"scummvm_mapper_b",
@@ -436,7 +436,7 @@ struct retro_core_option_v2_definition option_defs_us[] = {
 		{
 			{ NULL, NULL }
 		},
-		"RETROK_SPACE"
+		"RETROK_ESCAPE"
 	},
 	{
 		"scummvm_mapper_select",


Commit: 8ed85326fa6215a267beb953271c4c4a30fa6d57
    https://github.com/scummvm/scummvm/commit/8ed85326fa6215a267beb953271c4c4a30fa6d57
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2024-03-30T14:40:05+01:00

Commit Message:
LIBRETRO: drop performance auto tuner

Changed paths:
    backends/platform/libretro/include/libretro-core-options-intl.h
    backends/platform/libretro/include/libretro-core-options.h
    backends/platform/libretro/include/libretro-core.h
    backends/platform/libretro/include/libretro-defs.h
    backends/platform/libretro/include/libretro-os.h
    backends/platform/libretro/src/libretro-core.cpp
    backends/platform/libretro/src/libretro-os-base.cpp


diff --git a/backends/platform/libretro/include/libretro-core-options-intl.h b/backends/platform/libretro/include/libretro-core-options-intl.h
index 9dceb8d5c87..fc552cf80f3 100644
--- a/backends/platform/libretro/include/libretro-core-options-intl.h
+++ b/backends/platform/libretro/include/libretro-core-options-intl.h
@@ -556,18 +556,6 @@ struct retro_core_option_v2_definition option_defs_it[] = {
 		},
 		NULL,
 	},
-	{
-		"scummvm_auto_performance_tuner",
-		"Regolazione automatica performance",
-		NULL,
-		"Cambio automatico delle impostazioni di timing e salto dei fotogrammi se vengono rilevate performance scadenti durante il gioco. Le impostazioni di timing/frameskip saranno temporaneamente cambiate in sequenza, se saranno rilevati audio buffer underrun e per la sola sessione di gioco, e ripristinati in sequenza in caso di recupero del buffer audio. Le singole impostazioni salvate non saranno modificate ma saranno ignorati.",
-		NULL,
-		NULL,
-		{
-			{NULL, NULL},
-		},
-		NULL
-	},
 	{ NULL, NULL, NULL, NULL, NULL, NULL, {{0}}, NULL },
 };
 struct retro_core_options_v2 options_it = {
diff --git a/backends/platform/libretro/include/libretro-core-options.h b/backends/platform/libretro/include/libretro-core-options.h
index 3feb0d256ec..f7f2e920598 100644
--- a/backends/platform/libretro/include/libretro-core-options.h
+++ b/backends/platform/libretro/include/libretro-core-options.h
@@ -632,24 +632,6 @@ struct retro_core_option_v2_definition option_defs_us[] = {
 		},
 		"RETROK_RIGHT"
 	},
-	{
-		"scummvm_auto_performance_tuner",
-		"Auto performance tuner",
-		NULL,
-		"In-game automatic change of timing/frameskip settings if low performances are detected. Timing/frameskip settings will be changed in sequence, if audio buffer underruns are detected and for the current game session only, and restored in sequence if audio buffers recovers. Single saved settings will not be affected but will be overridden in-game.",
-		NULL,
-		NULL,
-		{
-			{"disabled", NULL},
-			{"enabled", NULL},
-			{NULL, NULL},
-		},
-#if defined(DEFAULT_PERF_TUNER)
-		"enabled"
-#else
-		"disabled"
-#endif
-	},
 	{ NULL, NULL, NULL, NULL, NULL, NULL, {{0}}, NULL },
 };
 
diff --git a/backends/platform/libretro/include/libretro-core.h b/backends/platform/libretro/include/libretro-core.h
index 158664e04e0..a2af6e2bee9 100644
--- a/backends/platform/libretro/include/libretro-core.h
+++ b/backends/platform/libretro/include/libretro-core.h
@@ -24,7 +24,6 @@ extern retro_log_printf_t retro_log_cb;
 extern retro_input_state_t retro_input_cb;
 
 bool retro_get_input_bitmask_supported(void);
-void reset_performance_tuner(void);
 void retro_osd_notification(const char* msg);
 int retro_get_input_device(void);
 const char * retro_get_core_dir(void);
diff --git a/backends/platform/libretro/include/libretro-defs.h b/backends/platform/libretro/include/libretro-defs.h
index dafd3e56a58..9963f6a5df6 100644
--- a/backends/platform/libretro/include/libretro-defs.h
+++ b/backends/platform/libretro/include/libretro-defs.h
@@ -45,14 +45,6 @@ will be updated to include it */
 #define AUDIO_STATUS_UPDATE_LATENCY     (1 << 4)
 #define AUDIO_STATUS_UPDATE_AV_INFO	(1 << 5)
 
-// Performance switcher
-#define PERF_SWITCH_FRAMESKIP_EVENTS                    DEFAULT_REFRESH_RATE / 2
-#define PERF_SWITCH_ON                                  (1 << 0)
-#define PERF_SWITCH_ENABLE_TIMING_INACCURACIES          (1 << 1)
-#define PERF_SWITCH_OVER                                (1 << 2)
-#define PERF_SWITCH_RESET_THRESHOLD                     60
-#define PERF_SWITCH_RESET_REST                          DEFAULT_REFRESH_RATE * 30
-
 // Thread switch caller
 #define THREAD_SWITCH_POLL              (1 << 0)
 #define THREAD_SWITCH_DELAY             (1 << 1)
diff --git a/backends/platform/libretro/include/libretro-os.h b/backends/platform/libretro/include/libretro-os.h
index 3504d0932d5..a82c9e394ae 100644
--- a/backends/platform/libretro/include/libretro-os.h
+++ b/backends/platform/libretro/include/libretro-os.h
@@ -105,7 +105,6 @@ public:
 	~OSystem_libretro(void) override;
 	void initBackend(void) override;
 	void engineInit(void) override;
-	void engineDone(void) override;
 	bool hasFeature(Feature f) override;
 	void setFeatureState(Feature f, bool enable) override;
 	bool getFeatureState(Feature f) override;
diff --git a/backends/platform/libretro/src/libretro-core.cpp b/backends/platform/libretro/src/libretro-core.cpp
index 201ebc71ed4..167fff0e74b 100644
--- a/backends/platform/libretro/src/libretro-core.cpp
+++ b/backends/platform/libretro/src/libretro-core.cpp
@@ -94,10 +94,6 @@ static uint8 audio_status = AUDIO_STATUS_MUTE;
 static unsigned retro_audio_buff_occupancy = 0;
 static uint8 retro_audio_buff_underrun_threshold = 25;
 
-static uint8 performance_switch = 0;
-static uint32 perf_ref_frame = 0;
-static uint32 perf_ref_audio_buff_occupancy = 0;
-
 static float frame_rate = 0;
 static uint16 sample_rate = 0;
 static float audio_samples_per_frame   = 0.0f; // length in samples per frame
@@ -201,33 +197,6 @@ static void retro_audio_buff_status_cb(bool active, unsigned occupancy, bool und
 	retro_audio_buff_occupancy = occupancy;
 }
 
-static void increase_performance() {
-	if (!(performance_switch & PERF_SWITCH_ENABLE_TIMING_INACCURACIES)) {
-		performance_switch |= PERF_SWITCH_ENABLE_TIMING_INACCURACIES;
-		retro_log_cb(RETRO_LOG_DEBUG, "Auto performance tuner: 'Allow Timing Inaccuracies' enabled.\n");
-		return;
-	}
-
-	performance_switch |= PERF_SWITCH_OVER;
-}
-
-static void increase_accuracy() {
-	performance_switch &= ~PERF_SWITCH_OVER;
-
-	if (performance_switch & PERF_SWITCH_ENABLE_TIMING_INACCURACIES) {
-		performance_switch &= ~PERF_SWITCH_ENABLE_TIMING_INACCURACIES;
-		retro_log_cb(RETRO_LOG_DEBUG, "Auto performance tuner: 'Allow Timing Inaccuracies' disabled.\n");
-		return;
-	}
-}
-
-void reset_performance_tuner() {
-	if (performance_switch & PERF_SWITCH_ON) {
-		performance_switch = PERF_SWITCH_ON;
-		retro_log_cb(RETRO_LOG_DEBUG, "Auto performance tuner: reset.\n");
-	}
-}
-
 void retro_osd_notification(const char *msg) {
 	if (!msg || *msg == '\0')
 		return;
@@ -355,18 +324,6 @@ static void update_variables(void) {
 		}
 	}
 
-	var.key = "scummvm_auto_performance_tuner";
-	if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
-		if (strcmp(var.value, "enabled") == 0) {
-			if (!performance_switch)
-				audio_status |= AUDIO_STATUS_UPDATE_LATENCY;
-
-			performance_switch &= ~PERF_SWITCH_OVER;
-			performance_switch |= PERF_SWITCH_ON;
-		} else
-			performance_switch = 0;
-	}
-
 	var.key = "scummvm_mapper_up";
 	var.value = NULL;
 	if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
@@ -517,12 +474,6 @@ static void update_variables(void) {
 			retro_osd_notification("Selected frameskip mode not available");
 			frameskip_type = 0;
 		}
-
-		if (performance_switch) {
-			retro_log_cb(RETRO_LOG_WARN, "Auto performance tuner not available.\n");
-			retro_osd_notification("Auto performance tuner not available");
-			performance_switch = 0;
-		}
 	}
 
 	if (old_frameskip_type != frameskip_type || old_frame_rate != frame_rate || old_sample_rate != sample_rate) {
@@ -563,10 +514,7 @@ static bool retro_update_options_display(void) {
 }
 
 bool retro_setting_get_timing_inaccuracies_enabled() {
-	if (performance_switch & PERF_SWITCH_ON)
-		return (performance_switch & PERF_SWITCH_ENABLE_TIMING_INACCURACIES);
-	else
-		return timing_inaccuracies_enabled;
+	return timing_inaccuracies_enabled;
 }
 
 bool retro_setting_get_gamepad_cursor_only(void) {
@@ -1056,7 +1004,7 @@ void retro_run(void) {
 	if (g_system) {
 
 		/* Determine frameskip need based on settings */
-		if ((frameskip_type == 2) || (performance_switch & PERF_SWITCH_ON))
+		if (frameskip_type == 2)
 			skip_frame = ((audio_status & (AUDIO_STATUS_BUFFER_UNDERRUN | AUDIO_STATUS_BUFFER_ACTIVE)) == (AUDIO_STATUS_BUFFER_UNDERRUN | AUDIO_STATUS_BUFFER_ACTIVE));
 		else if (frameskip_type == 1)
 			skip_frame = !(current_frame % frameskip_no == 0);
@@ -1074,32 +1022,8 @@ void retro_run(void) {
 			skip_frame = false;
 			frameskip_counter = 0;
 			/* Keep on skipping frames if flagged */
-		} else if (skip_frame) {
+		} else if (skip_frame)
 			frameskip_counter++;
-			/* Performance counter */
-			if ((performance_switch & PERF_SWITCH_ON) && !(performance_switch & PERF_SWITCH_OVER)) {
-				frameskip_events += frameskip_counter;
-				if (frameskip_events > PERF_SWITCH_FRAMESKIP_EVENTS) {
-					increase_performance();
-					frameskip_events = 0;
-					perf_ref_frame = current_frame;
-					perf_ref_audio_buff_occupancy = 0;
-				}
-			}
-		}
-
-		/* Performance tuner reset if average buffer occupacy is above the required threshold again */
-		if (!skip_frame && (performance_switch & PERF_SWITCH_ON) && performance_switch > PERF_SWITCH_ON) {
-			perf_ref_audio_buff_occupancy += retro_audio_buff_occupancy;
-			if ((current_frame - perf_ref_frame) % (PERF_SWITCH_RESET_REST) == 0) {
-				uint32 avg_audio_buff_occupancy = perf_ref_audio_buff_occupancy / (current_frame + 1 - perf_ref_frame);
-				if (avg_audio_buff_occupancy > PERF_SWITCH_RESET_THRESHOLD || avg_audio_buff_occupancy == retro_audio_buff_occupancy)
-					increase_accuracy();
-				perf_ref_frame = current_frame - 1;
-				perf_ref_audio_buff_occupancy = 0;
-				frameskip_events = 0;
-			}
-		}
 
 		/* Switch to ScummVM thread */
 		retro_switch_to_emu_thread();
diff --git a/backends/platform/libretro/src/libretro-os-base.cpp b/backends/platform/libretro/src/libretro-os-base.cpp
index 28d63b80268..587ae73c817 100644
--- a/backends/platform/libretro/src/libretro-os-base.cpp
+++ b/backends/platform/libretro/src/libretro-os-base.cpp
@@ -134,10 +134,6 @@ void OSystem_libretro::engineInit() {
 	_gamePalette.reset();
 }
 
-void OSystem_libretro::engineDone() {
-	reset_performance_tuner();
-}
-
 bool OSystem_libretro::hasFeature(Feature f) {
 	return (f == OSystem::kFeatureCursorPalette) || (f == OSystem::kFeatureCursorAlpha);
 }




More information about the Scummvm-git-logs mailing list