[Scummvm-git-logs] scummvm master -> 1d5d6056ea2370d60375f9250511cad05193555f

spleen1981 noreply at scummvm.org
Sat Apr 8 22:12:12 UTC 2023


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

Summary:
ebd8997375 LIBRETRO: simplify reduce framerate option
7460d2c3d7 LIBRETRO: change auto perf tuner actions order
fd754d3f2a LIBRETRO: always use auto framerate reduction and drop setting
ebb3095541 LIBRETRO: update latency in all cases when flagged
8d6700f346 LIBRETRO: fix first loop with fixed frameskip
b3c1dc48bb LIBRETRO: do not frameskip if within THREAD_SWITCH_UPDATE loop
c49c7dbf6d LIBRETRO: add current frame to frameskip debug log
3c5bfb83c0 LIBRETRO: count single frames skipped for auto perf tuner
0707a3db54 LIBRETRO: drop reduce framerate workaround
f568826067 LIBRETRO: remove redundant latency update
ebcce94d3b LIBRETRO: drop call to video_cb on frame skip
1d5d6056ea LIBRETRO: drop call to audio_cb on mute


Commit: ebd8997375a1bfe43c200c4c9e724abaa8e97304
    https://github.com/scummvm/scummvm/commit/ebd8997375a1bfe43c200c4c9e724abaa8e97304
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2023-04-09T00:10:14+02:00

Commit Message:
LIBRETRO: simplify reduce framerate option

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


diff --git a/backends/platform/libretro/include/libretro-core-options-intl.h b/backends/platform/libretro/include/libretro-core-options-intl.h
index 141e02e5898..a74e0f4e93a 100644
--- a/backends/platform/libretro/include/libretro-core-options-intl.h
+++ b/backends/platform/libretro/include/libretro-core-options-intl.h
@@ -225,14 +225,10 @@ struct retro_core_option_v2_definition option_defs_it[] = {
 		"scummvm_reduce_framerate_type",
 		"Riduzione del framerate",
 		NULL,
-		"Riduce il framerate corrente per abbassare le richieste di CPU. La modalità 'Auto' riduce temporaneamente il framerate quando Reduces current framerate to reduce CPU requirements. 'Auto' mode temporarily reduces the framerate as needed when audio buffer underrun is detected, while the in the other modes the reduction is constant.",
+		"Riduce temporaneamente il framerate quando viene rilevato un audio buffer underrun.",
 		NULL,
 		NULL,
 		{
-			{ "disabled", NULL },
-			{ "auto", "Auto" },
-			{ "half", "1/2 del framerate attuale" },
-			{ "quarter", "1/4 del framerate attuale" },
 			{ NULL, NULL },
 		},
 		NULL
diff --git a/backends/platform/libretro/include/libretro-core-options.h b/backends/platform/libretro/include/libretro-core-options.h
index d142d679d16..597c5806ccd 100644
--- a/backends/platform/libretro/include/libretro-core-options.h
+++ b/backends/platform/libretro/include/libretro-core-options.h
@@ -294,14 +294,12 @@ struct retro_core_option_v2_definition option_defs_us[] = {
 		"scummvm_reduce_framerate_type",
 		"Reduce framerate",
 		NULL,
-		"Reduces current framerate to reduce CPU requirements. 'Auto' mode temporarily reduces the framerate as needed when audio buffer underrun is detected, while the in the other modes the reduction is constant.",
+		"Temporarily reduces the framerate as needed when audio buffer underrun is detected.",
 		NULL,
 		"timing",
 		{
-			{ "disabled", NULL },
-			{ "auto", "Auto" },
-			{ "half", "1/2 of current framerate" },
-			{ "quarter", "1/4 of current framerate" },
+			{"disabled", NULL},
+			{"enabled", NULL},
 			{ NULL, NULL },
 		},
 		"disabled"
diff --git a/backends/platform/libretro/include/os.h b/backends/platform/libretro/include/os.h
index 296d8b6cd0e..e6a5c180cd7 100644
--- a/backends/platform/libretro/include/os.h
+++ b/backends/platform/libretro/include/os.h
@@ -47,8 +47,6 @@
 #define REDUCE_FRAMERATE_REST           REFRESH_RATE / 2
 #define REDUCE_FRAMERATE_SHIFT_MAX      2
 #define REDUCE_FRAMERATE_SHIFT_AUTO     1
-#define REDUCE_FRAMERATE_SHIFT_HALF     2
-#define REDUCE_FRAMERATE_SHIFT_QUARTER  3
 
 // Thread switch caller
 #define THREAD_SWITCH_POLL              (1 << 0)
diff --git a/backends/platform/libretro/src/libretro.cpp b/backends/platform/libretro/src/libretro.cpp
index ce11bec020e..34715f308c2 100644
--- a/backends/platform/libretro/src/libretro.cpp
+++ b/backends/platform/libretro/src/libretro.cpp
@@ -284,12 +284,8 @@ static void update_variables(void) {
 	if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
 		if (strcmp(var.value, "disabled") == 0)
 			reduce_framerate_type = 0;
-		else if (strcmp(var.value, "auto") == 0)
+		else
 			reduce_framerate_type = REDUCE_FRAMERATE_SHIFT_AUTO;
-		else if (strcmp(var.value, "half") == 0)
-			reduce_framerate_type = REDUCE_FRAMERATE_SHIFT_HALF;
-		else if (strcmp(var.value, "quarter") == 0)
-			reduce_framerate_type = REDUCE_FRAMERATE_SHIFT_QUARTER;
 	}
 
 	var.key = "scummvm_auto_performance_tuner";
@@ -745,7 +741,7 @@ void retro_run(void) {
 		do {
 
 			/* Framerate reduction using sound buffer size */
-			if (reduce_framerate_type == REDUCE_FRAMERATE_SHIFT_AUTO || (performance_switch & PERF_SWITCH_ENABLE_REDUCE_FRAMERATE)) {
+			if (reduce_framerate_type == REDUCE_FRAMERATE_SHIFT_AUTO || (performance_switch & PERF_SWITCH_ENABLE_REDUCE_FRAMERATE) || (getThreadSwitchCaller() & THREAD_SWITCH_UPDATE)) {
 				if ((audio_status & AUDIO_STATUS_BUFFER_UNDERRUN) && !(audio_status & AUDIO_STATUS_MUTE)) {
 					if (reduce_framerate_shift < REDUCE_FRAMERATE_SHIFT_MAX)
 						reduce_framerate_shift++;
@@ -755,10 +751,6 @@ void retro_run(void) {
 					reduce_framerate_countdown--;
 				else
 					reduce_framerate_shift = 0;
-			} else if ((reduce_framerate_type == REDUCE_FRAMERATE_SHIFT_HALF) || (getThreadSwitchCaller() & THREAD_SWITCH_UPDATE)) {
-				reduce_framerate_shift = 1;
-			} else if (reduce_framerate_type == REDUCE_FRAMERATE_SHIFT_QUARTER) {
-				reduce_framerate_shift = 2;
 			} else {
 				reduce_framerate_shift = 0;
 			}


Commit: 7460d2c3d703c5de23a57691f396145aa7632eb0
    https://github.com/scummvm/scummvm/commit/7460d2c3d703c5de23a57691f396145aa7632eb0
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2023-04-09T00:10:14+02:00

Commit Message:
LIBRETRO: change auto perf tuner actions order

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


diff --git a/backends/platform/libretro/src/libretro.cpp b/backends/platform/libretro/src/libretro.cpp
index 34715f308c2..698c696524a 100644
--- a/backends/platform/libretro/src/libretro.cpp
+++ b/backends/platform/libretro/src/libretro.cpp
@@ -151,6 +151,12 @@ static void set_audio_buffer_status() {
 }
 
 static void increase_performance() {
+	if (!(performance_switch & PERF_SWITCH_ENABLE_REDUCE_FRAMERATE)) {
+		performance_switch |= PERF_SWITCH_ENABLE_REDUCE_FRAMERATE;
+		log_cb(RETRO_LOG_DEBUG, "Auto performance tuner: 'Auto reduce framerate' enabled.\n");
+		return;
+	}
+
 	if (!(performance_switch & PERF_SWITCH_DISABLE_CONSECUTIVE_SCREEN_UPDATES)) {
 		performance_switch |= PERF_SWITCH_DISABLE_CONSECUTIVE_SCREEN_UPDATES;
 		log_cb(RETRO_LOG_DEBUG, "Auto performance tuner: 'Disable consecutive screen updates' enabled.\n");
@@ -163,24 +169,12 @@ static void increase_performance() {
 		return;
 	}
 
-	if (!(performance_switch & PERF_SWITCH_ENABLE_REDUCE_FRAMERATE)) {
-		performance_switch |= PERF_SWITCH_ENABLE_REDUCE_FRAMERATE;
-		log_cb(RETRO_LOG_DEBUG, "Auto performance tuner: 'Auto reduce framerate' enabled.\n");
-		return;
-	}
-
 	performance_switch |= PERF_SWITCH_OVER;
 }
 
 static void increase_accuracy() {
 	performance_switch &= ~PERF_SWITCH_OVER;
 
-	if (performance_switch & PERF_SWITCH_ENABLE_REDUCE_FRAMERATE) {
-		performance_switch &= ~PERF_SWITCH_ENABLE_REDUCE_FRAMERATE;
-		log_cb(RETRO_LOG_DEBUG, "Auto performance tuner: 'Auto reduce framerate' disabled.\n");
-		return;
-	}
-
 	if (performance_switch & PERF_SWITCH_ENABLE_TIMING_INACCURACIES) {
 		performance_switch &= ~PERF_SWITCH_ENABLE_TIMING_INACCURACIES;
 		log_cb(RETRO_LOG_DEBUG, "Auto performance tuner: 'Allow Timing Inaccuracies' disabled.\n");
@@ -193,6 +187,12 @@ static void increase_accuracy() {
 		log_cb(RETRO_LOG_DEBUG, "Auto performance tuner: 'Disable consecutive screen updates' disabled.\n");
 		return;
 	}
+
+	if (performance_switch & PERF_SWITCH_ENABLE_REDUCE_FRAMERATE) {
+		performance_switch &= ~PERF_SWITCH_ENABLE_REDUCE_FRAMERATE;
+		log_cb(RETRO_LOG_DEBUG, "Auto performance tuner: 'Auto reduce framerate' disabled.\n");
+		return;
+	}
 }
 
 void reset_performance_tuner() {
@@ -739,22 +739,6 @@ void retro_run(void) {
 		delayMillis call in ScummVM thread.
 		*/
 		do {
-
-			/* Framerate reduction using sound buffer size */
-			if (reduce_framerate_type == REDUCE_FRAMERATE_SHIFT_AUTO || (performance_switch & PERF_SWITCH_ENABLE_REDUCE_FRAMERATE) || (getThreadSwitchCaller() & THREAD_SWITCH_UPDATE)) {
-				if ((audio_status & AUDIO_STATUS_BUFFER_UNDERRUN) && !(audio_status & AUDIO_STATUS_MUTE)) {
-					if (reduce_framerate_shift < REDUCE_FRAMERATE_SHIFT_MAX)
-						reduce_framerate_shift++;
-					reduce_framerate_countdown = REDUCE_FRAMERATE_REST;
-				}
-				if (reduce_framerate_countdown)
-					reduce_framerate_countdown--;
-				else
-					reduce_framerate_shift = 0;
-			} else {
-				reduce_framerate_shift = 0;
-			}
-
 			/* Determine frameskip need based on settings */
 			if ((frameskip_type == 2) || (performance_switch & PERF_SWITCH_ON))
 				skip_frame = (audio_status & AUDIO_STATUS_BUFFER_UNDERRUN);
@@ -807,6 +791,21 @@ void retro_run(void) {
 			/* Retrieve audio */
 			samples_count = 0;
 			if (audio_video_enable & 2) {
+				/* Framerate reduction using sound buffer size */
+				if (reduce_framerate_type == REDUCE_FRAMERATE_SHIFT_AUTO || (performance_switch & PERF_SWITCH_ENABLE_REDUCE_FRAMERATE) || (getThreadSwitchCaller() & THREAD_SWITCH_UPDATE)) {
+					if ((audio_status & AUDIO_STATUS_BUFFER_UNDERRUN) && !(audio_status & AUDIO_STATUS_MUTE)) {
+						if (reduce_framerate_shift < REDUCE_FRAMERATE_SHIFT_MAX)
+							reduce_framerate_shift++;
+						reduce_framerate_countdown = REDUCE_FRAMERATE_REST;
+					}
+					if (reduce_framerate_countdown)
+						reduce_framerate_countdown--;
+					else
+						reduce_framerate_shift = 0;
+				} else {
+					reduce_framerate_shift = 0;
+				}
+
 				samples_count = ((Audio::MixerImpl *)g_system->getMixer())->mixCallback((byte *) sound_buffer, samples_per_frame_buffer_size << reduce_framerate_shift);
 			}
 			audio_status = samples_count ? (audio_status & ~AUDIO_STATUS_MUTE) : (audio_status | AUDIO_STATUS_MUTE);


Commit: fd754d3f2aec57c2061fc960db13d492deb7737d
    https://github.com/scummvm/scummvm/commit/fd754d3f2aec57c2061fc960db13d492deb7737d
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2023-04-09T00:10:15+02:00

Commit Message:
LIBRETRO: always use auto framerate reduction and drop setting

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


diff --git a/backends/platform/libretro/include/libretro-core-options-intl.h b/backends/platform/libretro/include/libretro-core-options-intl.h
index a74e0f4e93a..29cf511bcea 100644
--- a/backends/platform/libretro/include/libretro-core-options-intl.h
+++ b/backends/platform/libretro/include/libretro-core-options-intl.h
@@ -221,18 +221,6 @@ struct retro_core_option_v2_definition option_defs_it[] = {
 		},
 		NULL
 	},
-	{
-		"scummvm_reduce_framerate_type",
-		"Riduzione del framerate",
-		NULL,
-		"Riduce temporaneamente il framerate quando viene rilevato un audio buffer underrun.",
-		NULL,
-		NULL,
-		{
-			{ NULL, NULL },
-		},
-		NULL
-        },
 	{
 		"scummvm_auto_performance_tuner",
 		"Regolazione automatica performance",
diff --git a/backends/platform/libretro/include/libretro-core-options.h b/backends/platform/libretro/include/libretro-core-options.h
index 597c5806ccd..e000d010518 100644
--- a/backends/platform/libretro/include/libretro-core-options.h
+++ b/backends/platform/libretro/include/libretro-core-options.h
@@ -290,20 +290,6 @@ struct retro_core_option_v2_definition option_defs_us[] = {
 		},
 		"disabled"
 	},
-	{
-		"scummvm_reduce_framerate_type",
-		"Reduce framerate",
-		NULL,
-		"Temporarily reduces the framerate as needed when audio buffer underrun is detected.",
-		NULL,
-		"timing",
-		{
-			{"disabled", NULL},
-			{"enabled", NULL},
-			{ NULL, NULL },
-		},
-		"disabled"
-	},
 	{
 		"scummvm_auto_performance_tuner",
 		"Auto performance tuner",
diff --git a/backends/platform/libretro/include/os.h b/backends/platform/libretro/include/os.h
index e6a5c180cd7..2d07b5f93f6 100644
--- a/backends/platform/libretro/include/os.h
+++ b/backends/platform/libretro/include/os.h
@@ -37,16 +37,14 @@
 #define PERF_SWITCH_FRAMESKIP_EVENTS                    REFRESH_RATE / 2
 #define PERF_SWITCH_ON                                  (1 << 0)
 #define PERF_SWITCH_ENABLE_TIMING_INACCURACIES          (1 << 1)
-#define PERF_SWITCH_ENABLE_REDUCE_FRAMERATE             (1 << 2)
-#define PERF_SWITCH_DISABLE_CONSECUTIVE_SCREEN_UPDATES  (1 << 3)
-#define PERF_SWITCH_OVER                                (1 << 4)
+#define PERF_SWITCH_DISABLE_CONSECUTIVE_SCREEN_UPDATES  (1 << 2)
+#define PERF_SWITCH_OVER                                (1 << 3)
 #define PERF_SWITCH_RESET_THRESHOLD                     60
 #define PERF_SWITCH_RESET_REST                          REFRESH_RATE * 30
 
 // Reduce framerate
 #define REDUCE_FRAMERATE_REST           REFRESH_RATE / 2
 #define REDUCE_FRAMERATE_SHIFT_MAX      2
-#define REDUCE_FRAMERATE_SHIFT_AUTO     1
 
 // Thread switch caller
 #define THREAD_SWITCH_POLL              (1 << 0)
diff --git a/backends/platform/libretro/src/libretro.cpp b/backends/platform/libretro/src/libretro.cpp
index 698c696524a..e09ed9d5c48 100644
--- a/backends/platform/libretro/src/libretro.cpp
+++ b/backends/platform/libretro/src/libretro.cpp
@@ -140,23 +140,7 @@ static void retro_audio_buff_status_cb(bool active, unsigned occupancy, bool und
 	retro_audio_buff_occupancy = occupancy;
 }
 
-static void set_audio_buffer_status() {
-	if (frameskip_type > 1 || (performance_switch & PERF_SWITCH_ON) || reduce_framerate_type) {
-		struct retro_audio_buffer_status_callback buf_status_cb;
-		buf_status_cb.callback = retro_audio_buff_status_cb;
-		audio_status = environ_cb(RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK, &buf_status_cb) ? (audio_status | AUDIO_STATUS_BUFFER_SUPPORT) : (audio_status & ~AUDIO_STATUS_BUFFER_SUPPORT);
-	} else {
-		audio_status = environ_cb(RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK, NULL) ? (audio_status | AUDIO_STATUS_BUFFER_SUPPORT) : (audio_status & ~AUDIO_STATUS_BUFFER_SUPPORT);
-	}
-}
-
 static void increase_performance() {
-	if (!(performance_switch & PERF_SWITCH_ENABLE_REDUCE_FRAMERATE)) {
-		performance_switch |= PERF_SWITCH_ENABLE_REDUCE_FRAMERATE;
-		log_cb(RETRO_LOG_DEBUG, "Auto performance tuner: 'Auto reduce framerate' enabled.\n");
-		return;
-	}
-
 	if (!(performance_switch & PERF_SWITCH_DISABLE_CONSECUTIVE_SCREEN_UPDATES)) {
 		performance_switch |= PERF_SWITCH_DISABLE_CONSECUTIVE_SCREEN_UPDATES;
 		log_cb(RETRO_LOG_DEBUG, "Auto performance tuner: 'Disable consecutive screen updates' enabled.\n");
@@ -187,12 +171,6 @@ static void increase_accuracy() {
 		log_cb(RETRO_LOG_DEBUG, "Auto performance tuner: 'Disable consecutive screen updates' disabled.\n");
 		return;
 	}
-
-	if (performance_switch & PERF_SWITCH_ENABLE_REDUCE_FRAMERATE) {
-		performance_switch &= ~PERF_SWITCH_ENABLE_REDUCE_FRAMERATE;
-		log_cb(RETRO_LOG_DEBUG, "Auto performance tuner: 'Auto reduce framerate' disabled.\n");
-		return;
-	}
 }
 
 void reset_performance_tuner() {
@@ -279,15 +257,6 @@ static void update_variables(void) {
 			frameskip_type = 3;
 	}
 
-	var.key = "scummvm_reduce_framerate_type";
-	var.value = NULL;
-	if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
-		if (strcmp(var.value, "disabled") == 0)
-			reduce_framerate_type = 0;
-		else
-			reduce_framerate_type = REDUCE_FRAMERATE_SHIFT_AUTO;
-	}
-
 	var.key = "scummvm_auto_performance_tuner";
 	if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
 		if (strcmp(var.value, "enabled") == 0) {
@@ -308,8 +277,6 @@ static void update_variables(void) {
 			consecutive_screen_updates = true;
 	}
 
-	set_audio_buffer_status();
-
 	if (!(audio_status & AUDIO_STATUS_BUFFER_SUPPORT)) {
 		if (frameskip_type > 1) {
 			log_cb(RETRO_LOG_WARN, "Selected frameskip mode not available.\n");
@@ -318,13 +285,6 @@ static void update_variables(void) {
 			frameskip_type = 0;
 		}
 
-		if (reduce_framerate_type == REDUCE_FRAMERATE_SHIFT_AUTO) {
-			log_cb(RETRO_LOG_WARN, "Auto reduce framerate not available.\n");
-			retro_msg.msg = "Auto reduce framerate not available";
-			environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE_EXT, &retro_msg);
-			reduce_framerate_type = 0;
-		}
-
 		if (performance_switch) {
 			log_cb(RETRO_LOG_WARN, "Auto performance tuner not available.\n");
 			retro_msg.msg = "Auto performance tuner not available";
@@ -507,13 +467,15 @@ void retro_init(void) {
 	else
 		log_cb = NULL;
 
+	environ_cb(RETRO_ENVIRONMENT_GET_CAN_DUPE, &can_dupe);
+	struct retro_audio_buffer_status_callback buf_status_cb;
+	buf_status_cb.callback = retro_audio_buff_status_cb;
+	audio_status = environ_cb(RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK, &buf_status_cb) ? (audio_status | AUDIO_STATUS_BUFFER_SUPPORT) : (audio_status & ~AUDIO_STATUS_BUFFER_SUPPORT);
 	frame_rate = environ_cb(RETRO_ENVIRONMENT_GET_TARGET_REFRESH_RATE, &frame_rate) ? frame_rate : REFRESH_RATE;
 
 	audio_buffer_init(SAMPLE_RATE, (uint16) frame_rate);
 	update_variables();
 
-	environ_cb(RETRO_ENVIRONMENT_GET_CAN_DUPE, &can_dupe);
-
 	cmd_params_num = 1;
 	strcpy(cmd_params[0], "scummvm\0");
 
@@ -792,20 +754,19 @@ void retro_run(void) {
 			samples_count = 0;
 			if (audio_video_enable & 2) {
 				/* Framerate reduction using sound buffer size */
-				if (reduce_framerate_type == REDUCE_FRAMERATE_SHIFT_AUTO || (performance_switch & PERF_SWITCH_ENABLE_REDUCE_FRAMERATE) || (getThreadSwitchCaller() & THREAD_SWITCH_UPDATE)) {
-					if ((audio_status & AUDIO_STATUS_BUFFER_UNDERRUN) && !(audio_status & AUDIO_STATUS_MUTE)) {
-						if (reduce_framerate_shift < REDUCE_FRAMERATE_SHIFT_MAX)
-							reduce_framerate_shift++;
-						reduce_framerate_countdown = REDUCE_FRAMERATE_REST;
-					}
-					if (reduce_framerate_countdown)
-						reduce_framerate_countdown--;
-					else
-						reduce_framerate_shift = 0;
-				} else {
-					reduce_framerate_shift = 0;
+				if ((audio_status & (AUDIO_STATUS_BUFFER_SUPPORT | AUDIO_STATUS_MUTE | AUDIO_STATUS_BUFFER_UNDERRUN)) == (AUDIO_STATUS_BUFFER_SUPPORT | AUDIO_STATUS_BUFFER_UNDERRUN)) {
+					if (reduce_framerate_shift < REDUCE_FRAMERATE_SHIFT_MAX)
+						reduce_framerate_shift++;
+					reduce_framerate_countdown = REDUCE_FRAMERATE_REST;
 				}
 
+				if (reduce_framerate_countdown)
+					reduce_framerate_countdown--;
+				else if (getThreadSwitchCaller() & THREAD_SWITCH_UPDATE)
+					reduce_framerate_shift = REDUCE_FRAMERATE_SHIFT_MAX;
+				else
+					reduce_framerate_shift = 0;
+
 				samples_count = ((Audio::MixerImpl *)g_system->getMixer())->mixCallback((byte *) sound_buffer, samples_per_frame_buffer_size << reduce_framerate_shift);
 			}
 			audio_status = samples_count ? (audio_status & ~AUDIO_STATUS_MUTE) : (audio_status | AUDIO_STATUS_MUTE);


Commit: ebb3095541fed10b8587546dec3b0d9cfd272fe5
    https://github.com/scummvm/scummvm/commit/ebb3095541fed10b8587546dec3b0d9cfd272fe5
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2023-04-09T00:10:16+02:00

Commit Message:
LIBRETRO: update latency in all cases when flagged

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


diff --git a/backends/platform/libretro/src/libretro.cpp b/backends/platform/libretro/src/libretro.cpp
index e09ed9d5c48..70ed6786221 100644
--- a/backends/platform/libretro/src/libretro.cpp
+++ b/backends/platform/libretro/src/libretro.cpp
@@ -475,6 +475,7 @@ void retro_init(void) {
 
 	audio_buffer_init(SAMPLE_RATE, (uint16) frame_rate);
 	update_variables();
+	audio_status |= AUDIO_STATUS_UPDATE_LATENCY;
 
 	cmd_params_num = 1;
 	strcpy(cmd_params[0], "scummvm\0");
@@ -686,6 +687,23 @@ void retro_run(void) {
 		return;
 	}
 
+	bool updated = false;
+	if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated){
+		update_variables();
+	}
+
+	if (audio_status & AUDIO_STATUS_UPDATE_LATENCY){
+		uint32 audio_latency;
+		float frame_time_msec = 1000.0f / frame_rate;
+
+		audio_latency = (uint32)((8.0f * frame_time_msec) + 0.5f);
+		audio_latency = (audio_latency + 0x1F) & ~0x1F;
+
+		/* This can only be called from within retro_run() */
+		environ_cb(RETRO_ENVIRONMENT_SET_MINIMUM_AUDIO_LATENCY, &audio_latency);
+		audio_status &= ~AUDIO_STATUS_UPDATE_LATENCY;
+	}
+
 	/* Setting RA's video or audio driver to null will disable video/audio bits */
 	int audio_video_enable = 0;
 	environ_cb(RETRO_ENVIRONMENT_GET_AUDIO_VIDEO_ENABLE, &audio_video_enable);
@@ -798,26 +816,6 @@ void retro_run(void) {
 		poll_cb();
 		retroProcessMouse(input_cb, retro_device, gampad_cursor_speed, gamepad_acceleration_time, analog_response_is_quadratic, analog_deadzone, mouse_speed);
 	}
-
-	bool updated = false;
-	if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated){
-		update_variables();
-	}
-
-	if (audio_status & AUDIO_STATUS_UPDATE_LATENCY){
-		uint32 audio_latency;
-		if (frameskip_type > 1 || (performance_switch & PERF_SWITCH_ON) || reduce_framerate_type) {
-			float frame_time_msec = 1000.0f / frame_rate;
-
-			audio_latency = (uint32)((8.0f * frame_time_msec) + 0.5f);
-			audio_latency = (audio_latency + 0x1F) & ~0x1F;
-		} else {
-			audio_latency = 0;
-		}
-		/* This can only be called from within retro_run() */
-		environ_cb(RETRO_ENVIRONMENT_SET_MINIMUM_AUDIO_LATENCY, &audio_latency);
-		audio_status &= ~AUDIO_STATUS_UPDATE_LATENCY;
-	}
 }
 
 void retro_unload_game(void) {


Commit: 8d6700f34640e22232ec0699c99a821a6d19b887
    https://github.com/scummvm/scummvm/commit/8d6700f34640e22232ec0699c99a821a6d19b887
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2023-04-09T00:10:17+02:00

Commit Message:
LIBRETRO: fix first loop with fixed frameskip

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


diff --git a/backends/platform/libretro/src/libretro.cpp b/backends/platform/libretro/src/libretro.cpp
index 70ed6786221..e4ecc093074 100644
--- a/backends/platform/libretro/src/libretro.cpp
+++ b/backends/platform/libretro/src/libretro.cpp
@@ -722,8 +722,9 @@ 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);
-			else if (frameskip_type == 1)
-				skip_frame = !(current_frame % frameskip_no == 0);
+			else if (frameskip_type == 1){
+				skip_frame = !((current_frame - 1) % frameskip_no == 0);
+}
 			else if (frameskip_type == 3)
 				skip_frame = (retro_audio_buff_occupancy < frameskip_threshold);
 


Commit: b3c1dc48bbb5e6d1d459c3c9796d7d7957f1ef77
    https://github.com/scummvm/scummvm/commit/b3c1dc48bbb5e6d1d459c3c9796d7d7957f1ef77
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2023-04-09T00:10:18+02:00

Commit Message:
LIBRETRO: do not frameskip if within THREAD_SWITCH_UPDATE loop

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


diff --git a/backends/platform/libretro/src/libretro.cpp b/backends/platform/libretro/src/libretro.cpp
index e4ecc093074..28a266e789c 100644
--- a/backends/platform/libretro/src/libretro.cpp
+++ b/backends/platform/libretro/src/libretro.cpp
@@ -729,8 +729,11 @@ void retro_run(void) {
 				skip_frame = (retro_audio_buff_occupancy < frameskip_threshold);
 
 
-			/* No frame skipping if there is no incoming audio (e.g. GUI) or if frontend does not support frame skipping*/
-			skip_frame = skip_frame && !(audio_status & AUDIO_STATUS_MUTE)  && can_dupe;
+			/* No frame skipping if
+			- no incoming audio (e.g. GUI)
+			- frontend does not support frame skipping
+			- doing a THREAD_SWITCH_UPDATE loop*/
+			skip_frame = skip_frame && !(audio_status & AUDIO_STATUS_MUTE)  && can_dupe && !(getThreadSwitchCaller() & THREAD_SWITCH_UPDATE);
 
 			/* Reset frameskip counter if not flagged */
 			if ((!skip_frame && frameskip_counter) || frameskip_counter >= FRAMESKIP_MAX) {


Commit: c49c7dbf6d5c7a07a97212cc2b01f3bb88c52558
    https://github.com/scummvm/scummvm/commit/c49c7dbf6d5c7a07a97212cc2b01f3bb88c52558
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2023-04-09T00:10:18+02:00

Commit Message:
LIBRETRO: add current frame to frameskip debug log

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


diff --git a/backends/platform/libretro/src/libretro.cpp b/backends/platform/libretro/src/libretro.cpp
index 28a266e789c..11a7892c3f2 100644
--- a/backends/platform/libretro/src/libretro.cpp
+++ b/backends/platform/libretro/src/libretro.cpp
@@ -737,7 +737,7 @@ void retro_run(void) {
 
 			/* Reset frameskip counter if not flagged */
 			if ((!skip_frame && frameskip_counter) || frameskip_counter >= FRAMESKIP_MAX) {
-				log_cb(RETRO_LOG_DEBUG, "%d frame(s) skipped\n",frameskip_counter);
+				log_cb(RETRO_LOG_DEBUG, "%d frame(s) skipped (%ld)\n", frameskip_counter, current_frame);
 				skip_frame = false;
 				frameskip_counter = 0;
 			/* Keep on skipping frames if flagged */


Commit: 3c5bfb83c0961d1bd2a7f2d0deec42dc5989ceb0
    https://github.com/scummvm/scummvm/commit/3c5bfb83c0961d1bd2a7f2d0deec42dc5989ceb0
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2023-04-09T00:10:21+02:00

Commit Message:
LIBRETRO: count single frames skipped for auto perf tuner

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


diff --git a/backends/platform/libretro/src/libretro.cpp b/backends/platform/libretro/src/libretro.cpp
index 11a7892c3f2..54c0e2de5c4 100644
--- a/backends/platform/libretro/src/libretro.cpp
+++ b/backends/platform/libretro/src/libretro.cpp
@@ -745,7 +745,7 @@ void retro_run(void) {
 				frameskip_counter++;
 				/* Performance counter */
 				if ((performance_switch & PERF_SWITCH_ON) && !(performance_switch & PERF_SWITCH_OVER)) {
-					frameskip_events++;
+					frameskip_events += frameskip_counter;
 					if (frameskip_events > PERF_SWITCH_FRAMESKIP_EVENTS) {
 						increase_performance();
 						frameskip_events = 0;


Commit: 0707a3db540bff6df8422936c91a66164ffc6daa
    https://github.com/scummvm/scummvm/commit/0707a3db540bff6df8422936c91a66164ffc6daa
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2023-04-09T00:11:28+02:00

Commit Message:
LIBRETRO: drop reduce framerate workaround

Changed paths:
    backends/platform/libretro/include/os.h
    backends/platform/libretro/src/libretro.cpp


diff --git a/backends/platform/libretro/include/os.h b/backends/platform/libretro/include/os.h
index 2d07b5f93f6..8fdd994964b 100644
--- a/backends/platform/libretro/include/os.h
+++ b/backends/platform/libretro/include/os.h
@@ -42,10 +42,6 @@
 #define PERF_SWITCH_RESET_THRESHOLD                     60
 #define PERF_SWITCH_RESET_REST                          REFRESH_RATE * 30
 
-// Reduce framerate
-#define REDUCE_FRAMERATE_REST           REFRESH_RATE / 2
-#define REDUCE_FRAMERATE_SHIFT_MAX      2
-
 // Thread switch caller
 #define THREAD_SWITCH_POLL              (1 << 0)
 #define THREAD_SWITCH_DELAY             (1 << 1)
diff --git a/backends/platform/libretro/src/libretro.cpp b/backends/platform/libretro/src/libretro.cpp
index 54c0e2de5c4..79ee0be73f6 100644
--- a/backends/platform/libretro/src/libretro.cpp
+++ b/backends/platform/libretro/src/libretro.cpp
@@ -115,11 +115,11 @@ static void audio_buffer_init(uint16 sample_rate, uint16 frame_rate) {
 	samples_per_frame_buffer_size = samples_per_frame << 1 * sizeof(int16_t);
 
 	if (sound_buffer)
-		sound_buffer = (int16_t *)realloc(sound_buffer, samples_per_frame_buffer_size << REDUCE_FRAMERATE_SHIFT_MAX);
+		sound_buffer = (int16_t *)realloc(sound_buffer, samples_per_frame_buffer_size);
 	else
-		sound_buffer = (int16_t *)malloc(samples_per_frame_buffer_size << REDUCE_FRAMERATE_SHIFT_MAX);
+		sound_buffer = (int16_t *)malloc(samples_per_frame_buffer_size);
 	if (sound_buffer)
-		memset(sound_buffer, 0, samples_per_frame_buffer_size << REDUCE_FRAMERATE_SHIFT_MAX);
+		memset(sound_buffer, 0, samples_per_frame_buffer_size);
 	else
 		log_cb(RETRO_LOG_ERROR, "audio_buffer_init error.\n");
 
@@ -775,21 +775,7 @@ void retro_run(void) {
 			/* Retrieve audio */
 			samples_count = 0;
 			if (audio_video_enable & 2) {
-				/* Framerate reduction using sound buffer size */
-				if ((audio_status & (AUDIO_STATUS_BUFFER_SUPPORT | AUDIO_STATUS_MUTE | AUDIO_STATUS_BUFFER_UNDERRUN)) == (AUDIO_STATUS_BUFFER_SUPPORT | AUDIO_STATUS_BUFFER_UNDERRUN)) {
-					if (reduce_framerate_shift < REDUCE_FRAMERATE_SHIFT_MAX)
-						reduce_framerate_shift++;
-					reduce_framerate_countdown = REDUCE_FRAMERATE_REST;
-				}
-
-				if (reduce_framerate_countdown)
-					reduce_framerate_countdown--;
-				else if (getThreadSwitchCaller() & THREAD_SWITCH_UPDATE)
-					reduce_framerate_shift = REDUCE_FRAMERATE_SHIFT_MAX;
-				else
-					reduce_framerate_shift = 0;
-
-				samples_count = ((Audio::MixerImpl *)g_system->getMixer())->mixCallback((byte *) sound_buffer, samples_per_frame_buffer_size << reduce_framerate_shift);
+				samples_count = ((Audio::MixerImpl *)g_system->getMixer())->mixCallback((byte *) sound_buffer, samples_per_frame_buffer_size);
 			}
 			audio_status = samples_count ? (audio_status & ~AUDIO_STATUS_MUTE) : (audio_status | AUDIO_STATUS_MUTE);
 


Commit: f568826067326cd75762c335728a1939194f0556
    https://github.com/scummvm/scummvm/commit/f568826067326cd75762c335728a1939194f0556
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2023-04-09T00:11:29+02:00

Commit Message:
LIBRETRO: remove redundant latency update

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


diff --git a/backends/platform/libretro/src/libretro.cpp b/backends/platform/libretro/src/libretro.cpp
index 79ee0be73f6..827a579d009 100644
--- a/backends/platform/libretro/src/libretro.cpp
+++ b/backends/platform/libretro/src/libretro.cpp
@@ -475,7 +475,6 @@ void retro_init(void) {
 
 	audio_buffer_init(SAMPLE_RATE, (uint16) frame_rate);
 	update_variables();
-	audio_status |= AUDIO_STATUS_UPDATE_LATENCY;
 
 	cmd_params_num = 1;
 	strcpy(cmd_params[0], "scummvm\0");
@@ -728,7 +727,6 @@ void retro_run(void) {
 			else if (frameskip_type == 3)
 				skip_frame = (retro_audio_buff_occupancy < frameskip_threshold);
 
-
 			/* No frame skipping if
 			- no incoming audio (e.g. GUI)
 			- frontend does not support frame skipping


Commit: ebcce94d3bdf36f62ca049bff062b834cb639401
    https://github.com/scummvm/scummvm/commit/ebcce94d3bdf36f62ca049bff062b834cb639401
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2023-04-09T00:11:30+02:00

Commit Message:
LIBRETRO: drop call to video_cb on frame skip

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


diff --git a/backends/platform/libretro/src/libretro.cpp b/backends/platform/libretro/src/libretro.cpp
index 827a579d009..62fa057c7bd 100644
--- a/backends/platform/libretro/src/libretro.cpp
+++ b/backends/platform/libretro/src/libretro.cpp
@@ -93,7 +93,6 @@ static uint8 reduce_framerate_countdown = 0;
 
 static bool consecutive_screen_updates = false;
 
-static bool can_dupe = false;
 static uint8 audio_status = 0;
 
 static unsigned retro_audio_buff_occupancy = 0;
@@ -467,7 +466,6 @@ void retro_init(void) {
 	else
 		log_cb = NULL;
 
-	environ_cb(RETRO_ENVIRONMENT_GET_CAN_DUPE, &can_dupe);
 	struct retro_audio_buffer_status_callback buf_status_cb;
 	buf_status_cb.callback = retro_audio_buff_status_cb;
 	audio_status = environ_cb(RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK, &buf_status_cb) ? (audio_status | AUDIO_STATUS_BUFFER_SUPPORT) : (audio_status & ~AUDIO_STATUS_BUFFER_SUPPORT);
@@ -729,9 +727,8 @@ void retro_run(void) {
 
 			/* No frame skipping if
 			- no incoming audio (e.g. GUI)
-			- frontend does not support frame skipping
 			- doing a THREAD_SWITCH_UPDATE loop*/
-			skip_frame = skip_frame && !(audio_status & AUDIO_STATUS_MUTE)  && can_dupe && !(getThreadSwitchCaller() & THREAD_SWITCH_UPDATE);
+			skip_frame = skip_frame && !(audio_status & AUDIO_STATUS_MUTE) && !(getThreadSwitchCaller() & THREAD_SWITCH_UPDATE);
 
 			/* Reset frameskip counter if not flagged */
 			if ((!skip_frame && frameskip_counter) || frameskip_counter >= FRAMESKIP_MAX) {
@@ -781,8 +778,6 @@ void retro_run(void) {
 			if ((audio_video_enable & 1) && !skip_frame) {
 				const Graphics::Surface &screen = getScreen();
 				video_cb(screen.getPixels(), screen.w, screen.h, screen.pitch);
-			} else {
-				video_cb(NULL, 0, 0, 0); // Set to NULL to skip frame rendering
 			}
 
 #if defined(_3DS)


Commit: 1d5d6056ea2370d60375f9250511cad05193555f
    https://github.com/scummvm/scummvm/commit/1d5d6056ea2370d60375f9250511cad05193555f
Author: Giovanni Cascione (ing.cascione at gmail.com)
Date: 2023-04-09T00:11:32+02:00

Commit Message:
LIBRETRO: drop call to audio_cb on mute

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


diff --git a/backends/platform/libretro/src/libretro.cpp b/backends/platform/libretro/src/libretro.cpp
index 62fa057c7bd..c5dab707480 100644
--- a/backends/platform/libretro/src/libretro.cpp
+++ b/backends/platform/libretro/src/libretro.cpp
@@ -790,7 +790,8 @@ void retro_run(void) {
 				audio_buffer_init(SAMPLE_RATE, (uint16) frame_rate);
 			}
 #endif
-			audio_batch_cb((audio_status & AUDIO_STATUS_MUTE) ? NULL : (int16_t *) sound_buffer, samples_count); // Set to NULL to skip sound rendering
+			if (!(audio_status & AUDIO_STATUS_MUTE))
+				audio_batch_cb((int16_t *) sound_buffer, samples_count);
 
 			current_frame++;
 




More information about the Scummvm-git-logs mailing list