Add GUI to change JIT settings
This commit is contained in:
parent
e0945c362b
commit
ff2ebe400d
|
@ -54,6 +54,8 @@ OPT(hud_mic, bool, false, HudDisplay, Mic)
|
||||||
OPT(fpslimiter, bool, true, Config, FpsLimiter)
|
OPT(fpslimiter, bool, true, Config, FpsLimiter)
|
||||||
OPT(autoframeskip, bool, true, Config, AudoFrameskip)
|
OPT(autoframeskip, bool, true, Config, AudoFrameskip)
|
||||||
OPT(frameskip, int, 0, Config, Frameskip)
|
OPT(frameskip, int, 0, Config, Frameskip)
|
||||||
|
OPT(use_jit,bool,false,Config,JIT_Enabled)
|
||||||
|
OPT(jit_max_block_size,int,100,Config,JITBlockSize)
|
||||||
|
|
||||||
/* Audio */
|
/* Audio */
|
||||||
OPT(audio_enabled, bool, true, Audio, Enabled)
|
OPT(audio_enabled, bool, true, Audio, Enabled)
|
||||||
|
|
|
@ -158,6 +158,11 @@ static void ToggleHudDisplay(GtkToggleAction* action, gpointer data);
|
||||||
#ifdef DESMUME_GTK_FIRMWARE_BROKEN
|
#ifdef DESMUME_GTK_FIRMWARE_BROKEN
|
||||||
static void SelectFirmwareFile();
|
static void SelectFirmwareFile();
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_JIT
|
||||||
|
static void EmulationSettingsDialog();
|
||||||
|
static void ToggleJIT();
|
||||||
|
static void JITMaxBlockSizeChanged(GtkAdjustment* adj,void *);
|
||||||
|
#endif
|
||||||
|
|
||||||
static const char *ui_description =
|
static const char *ui_description =
|
||||||
"<ui>"
|
"<ui>"
|
||||||
|
@ -296,6 +301,25 @@ static const char *ui_description =
|
||||||
" <menuitem action='view_statusbar'/>"
|
" <menuitem action='view_statusbar'/>"
|
||||||
" </menu>"
|
" </menu>"
|
||||||
" <menu action='ConfigMenu'>"
|
" <menu action='ConfigMenu'>"
|
||||||
|
" <menu action='FrameskipMenu'>"
|
||||||
|
" <menuitem action='enablefpslimiter'/>"
|
||||||
|
" <separator/>"
|
||||||
|
" <menuitem action='frameskipA'/>"
|
||||||
|
" <separator/>"
|
||||||
|
" <menuitem action='frameskip0'/>"
|
||||||
|
" <menuitem action='frameskip1'/>"
|
||||||
|
" <menuitem action='frameskip2'/>"
|
||||||
|
" <menuitem action='frameskip3'/>"
|
||||||
|
" <menuitem action='frameskip4'/>"
|
||||||
|
" <menuitem action='frameskip5'/>"
|
||||||
|
" <menuitem action='frameskip6'/>"
|
||||||
|
" <menuitem action='frameskip7'/>"
|
||||||
|
" <menuitem action='frameskip8'/>"
|
||||||
|
" <menuitem action='frameskip9'/>"
|
||||||
|
" </menu>"
|
||||||
|
#ifdef HAVE_JIT
|
||||||
|
" <menuitem action='emulationsettings'/>"
|
||||||
|
#endif
|
||||||
" <menuitem action='enableaudio'/>"
|
" <menuitem action='enableaudio'/>"
|
||||||
#ifdef FAKE_MIC
|
#ifdef FAKE_MIC
|
||||||
" <menuitem action='micnoise'/>"
|
" <menuitem action='micnoise'/>"
|
||||||
|
@ -313,22 +337,6 @@ static const char *ui_description =
|
||||||
" <menuitem action='SPUInterpolationLinear'/>"
|
" <menuitem action='SPUInterpolationLinear'/>"
|
||||||
" <menuitem action='SPUInterpolationCosine'/>"
|
" <menuitem action='SPUInterpolationCosine'/>"
|
||||||
" </menu>"
|
" </menu>"
|
||||||
" <menu action='FrameskipMenu'>"
|
|
||||||
" <menuitem action='enablefpslimiter'/>"
|
|
||||||
" <separator/>"
|
|
||||||
" <menuitem action='frameskipA'/>"
|
|
||||||
" <separator/>"
|
|
||||||
" <menuitem action='frameskip0'/>"
|
|
||||||
" <menuitem action='frameskip1'/>"
|
|
||||||
" <menuitem action='frameskip2'/>"
|
|
||||||
" <menuitem action='frameskip3'/>"
|
|
||||||
" <menuitem action='frameskip4'/>"
|
|
||||||
" <menuitem action='frameskip5'/>"
|
|
||||||
" <menuitem action='frameskip6'/>"
|
|
||||||
" <menuitem action='frameskip7'/>"
|
|
||||||
" <menuitem action='frameskip8'/>"
|
|
||||||
" <menuitem action='frameskip9'/>"
|
|
||||||
" </menu>"
|
|
||||||
" <menu action='CheatMenu'>"
|
" <menu action='CheatMenu'>"
|
||||||
" <menuitem action='cheatsearch'/>"
|
" <menuitem action='cheatsearch'/>"
|
||||||
" <menuitem action='cheatlist'/>"
|
" <menuitem action='cheatlist'/>"
|
||||||
|
@ -409,9 +417,12 @@ static const GtkActionEntry action_entries[] = {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
{ "ConfigMenu", NULL, "_Config" },
|
{ "ConfigMenu", NULL, "_Config" },
|
||||||
{ "SPUModeMenu", NULL, "Audio _Synchronization" },
|
|
||||||
{ "SPUInterpolationMenu", NULL, "Audio _Interpolation" },
|
|
||||||
{ "FrameskipMenu", NULL, "_Frameskip" },
|
{ "FrameskipMenu", NULL, "_Frameskip" },
|
||||||
|
#ifdef HAVE_JIT
|
||||||
|
{ "emulationsettings",NULL,"Em_ulation Settings",NULL,NULL,EmulationSettingsDialog},
|
||||||
|
#endif
|
||||||
|
{ "SPUModeMenu", NULL, "Audio _Synchronization" },
|
||||||
|
{ "SPUInterpolationMenu", NULL, "Audio _Interpolation" },
|
||||||
{ "CheatMenu", NULL, "_Cheat" },
|
{ "CheatMenu", NULL, "_Cheat" },
|
||||||
{ "cheatsearch", NULL, "_Search", NULL, NULL, CheatSearch },
|
{ "cheatsearch", NULL, "_Search", NULL, NULL, CheatSearch },
|
||||||
{ "cheatlist", NULL, "_List", NULL, NULL, CheatList },
|
{ "cheatlist", NULL, "_List", NULL, NULL, CheatList },
|
||||||
|
@ -431,7 +442,7 @@ static const GtkToggleActionEntry toggle_entries[] = {
|
||||||
#ifdef FAKE_MIC
|
#ifdef FAKE_MIC
|
||||||
{ "micnoise", NULL, "Fake mic _noise", NULL, NULL, G_CALLBACK(ToggleMicNoise), FALSE},
|
{ "micnoise", NULL, "Fake mic _noise", NULL, NULL, G_CALLBACK(ToggleMicNoise), FALSE},
|
||||||
#endif
|
#endif
|
||||||
{ "enablefpslimiter", NULL, "_Limit to 60 fps", NULL, NULL, G_CALLBACK(ToggleFpsLimiter), TRUE},
|
{ "enablefpslimiter", NULL, "_Limit framerate", NULL, NULL, G_CALLBACK(ToggleFpsLimiter), TRUE},
|
||||||
{ "frameskipA", NULL, "_Auto-minimize skipping", NULL, NULL, G_CALLBACK(ToggleAutoFrameskip), TRUE},
|
{ "frameskipA", NULL, "_Auto-minimize skipping", NULL, NULL, G_CALLBACK(ToggleAutoFrameskip), TRUE},
|
||||||
{ "gap", NULL, "Screen _Gap", NULL, NULL, G_CALLBACK(ToggleGap), FALSE},
|
{ "gap", NULL, "Screen _Gap", NULL, NULL, G_CALLBACK(ToggleGap), FALSE},
|
||||||
{ "view_menu", NULL, "Show _menu", NULL, NULL, G_CALLBACK(ToggleMenuVisible), TRUE},
|
{ "view_menu", NULL, "Show _menu", NULL, NULL, G_CALLBACK(ToggleMenuVisible), TRUE},
|
||||||
|
@ -2073,6 +2084,77 @@ static void Modify_JoyKey(GtkWidget* widget, gpointer data)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_JIT
|
||||||
|
|
||||||
|
static void EmulationSettingsDialog(){
|
||||||
|
GtkWidget *esDialog;
|
||||||
|
GtkWidget *esKey;
|
||||||
|
|
||||||
|
esDialog=gtk_dialog_new_with_buttons("Emulation Settings",
|
||||||
|
GTK_WINDOW(pWindow),
|
||||||
|
GTK_DIALOG_MODAL,
|
||||||
|
GTK_STOCK_OK,GTK_RESPONSE_OK,
|
||||||
|
GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
esKey=gtk_label_new("CPU Mode:\n");
|
||||||
|
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(esDialog)->vbox), esKey,TRUE, FALSE, 0);
|
||||||
|
|
||||||
|
esKey=gtk_check_button_new_with_label("Use dynamic recompiler");
|
||||||
|
gtk_toggle_button_set_active((GtkToggleButton*)esKey,config.use_jit);
|
||||||
|
g_signal_connect(G_OBJECT(esKey),"clicked",G_CALLBACK(ToggleJIT),GINT_TO_POINTER(0));
|
||||||
|
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(esDialog)->vbox), esKey,TRUE, FALSE, 0);
|
||||||
|
|
||||||
|
esKey=gtk_label_new("Block Size (1 - accuracy, 100 - fastest):");
|
||||||
|
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(esDialog)->vbox), esKey,TRUE, FALSE, 0);
|
||||||
|
|
||||||
|
GtkAdjustment* JITBlockSizeAdjustment=(GtkAdjustment*)gtk_adjustment_new(config.jit_max_block_size,1,100,1,5,0);
|
||||||
|
esKey=gtk_hscale_new(JITBlockSizeAdjustment);
|
||||||
|
gtk_scale_set_digits((GtkScale*)esKey,0);
|
||||||
|
g_signal_connect(G_OBJECT(JITBlockSizeAdjustment),"value_changed",G_CALLBACK(JITMaxBlockSizeChanged),NULL);
|
||||||
|
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(esDialog)->vbox), esKey,TRUE, FALSE, 0);
|
||||||
|
|
||||||
|
esKey=gtk_label_new(
|
||||||
|
"Enabling this will get you 0-50% speedups. It is optional because it\n"
|
||||||
|
"may still contain small small bugs, due mostly merely to newness, \n"
|
||||||
|
"which can safely be fixed in time. Furthermore, you may have to \n"
|
||||||
|
"tune the block size to prevent some games from breaking.\n"
|
||||||
|
"\n"
|
||||||
|
"This should not be assumed to be deterministic."
|
||||||
|
);
|
||||||
|
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(esDialog)->vbox), esKey,TRUE, FALSE, 0);
|
||||||
|
|
||||||
|
gtk_widget_show_all(GTK_DIALOG(esDialog)->vbox);
|
||||||
|
|
||||||
|
bool prev_use_jit=config.use_jit;
|
||||||
|
int prev_jit_max_block_size=config.jit_max_block_size;
|
||||||
|
|
||||||
|
switch (gtk_dialog_run(GTK_DIALOG(esDialog))) {
|
||||||
|
case GTK_RESPONSE_OK:
|
||||||
|
CommonSettings.jit_max_block_size=config.jit_max_block_size;
|
||||||
|
arm_jit_sync();
|
||||||
|
arm_jit_reset(CommonSettings.use_jit=config.use_jit);
|
||||||
|
break;
|
||||||
|
case GTK_RESPONSE_CANCEL:
|
||||||
|
case GTK_RESPONSE_NONE:
|
||||||
|
config.use_jit=prev_use_jit;
|
||||||
|
config.jit_max_block_size=prev_jit_max_block_size;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
gtk_widget_destroy(esDialog);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void JITMaxBlockSizeChanged(GtkAdjustment* adj,void * nullPtr){
|
||||||
|
config.jit_max_block_size=(int)adj->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ToggleJIT(){
|
||||||
|
config.use_jit=!config.use_jit;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
static void Edit_Joystick_Controls()
|
static void Edit_Joystick_Controls()
|
||||||
{
|
{
|
||||||
GtkWidget *ecDialog;
|
GtkWidget *ecDialog;
|
||||||
|
@ -3257,6 +3339,7 @@ int main (int argc, char *argv[])
|
||||||
// The global menu screws up the window size...
|
// The global menu screws up the window size...
|
||||||
unsetenv("UBUNTU_MENUPROXY");
|
unsetenv("UBUNTU_MENUPROXY");
|
||||||
|
|
||||||
|
|
||||||
my_config.parse(argc, argv);
|
my_config.parse(argc, argv);
|
||||||
init_configured_features( &my_config);
|
init_configured_features( &my_config);
|
||||||
|
|
||||||
|
@ -3268,7 +3351,13 @@ int main (int argc, char *argv[])
|
||||||
if ( !fill_configured_features( &my_config, argv)) {
|
if ( !fill_configured_features( &my_config, argv)) {
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_JIT
|
||||||
|
config.load();
|
||||||
|
CommonSettings.jit_max_block_size=config.jit_max_block_size;
|
||||||
|
CommonSettings.use_jit=config.use_jit;
|
||||||
|
arm_jit_sync();
|
||||||
|
arm_jit_reset(CommonSettings.use_jit);
|
||||||
|
#endif
|
||||||
return common_gtk_main( &my_config);
|
return common_gtk_main( &my_config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue