[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