From fba064572196c69de43e3c69245369d94d3be929 Mon Sep 17 00:00:00 2001 From: notaz Date: Fri, 31 Dec 2010 01:43:28 +0200 Subject: [PATCH] prepare for external gpu plugins also fixes framelimiter and some config being overwritten by dfxvideo --- frontend/common/plat.h | 1 + frontend/menu.c | 27 +++++++++++++++++++++++---- frontend/plat_omap.c | 19 +++++++++++++++++++ plugins/dfxvideo/cfg.c | 9 +++++---- 4 files changed, 48 insertions(+), 8 deletions(-) diff --git a/frontend/common/plat.h b/frontend/common/plat.h index c16f8885..03570406 100644 --- a/frontend/common/plat.h +++ b/frontend/common/plat.h @@ -33,6 +33,7 @@ void plat_status_msg_clear(void); void plat_video_menu_enter(int is_rom_loaded); void plat_video_menu_begin(void); void plat_video_menu_end(void); +void plat_video_menu_leave(void); void plat_video_flip(void); void plat_video_wait_vsync(void); diff --git a/frontend/menu.c b/frontend/menu.c index 592eb78a..0469868a 100644 --- a/frontend/menu.c +++ b/frontend/menu.c @@ -66,7 +66,10 @@ int g_opts; // from softgpu plugin extern int iUseDither; extern int UseFrameSkip; +extern int UseFrameLimit; extern uint32_t dwActFixes; +extern float fFrameRateHz; +extern int dwFrameRateTicks; // sound plugin extern int iUseReverb; @@ -139,6 +142,7 @@ static void menu_set_defconfig(void) Config.SpuIrq = Config.RCntFix = Config.VSyncWA = 0; iUseDither = UseFrameSkip = 0; + UseFrameLimit = 1; dwActFixes = 1<<7; iUseReverb = 2; @@ -191,6 +195,7 @@ static const struct { CE_INTVAL(g_opts), CE_INTVAL(iUseDither), CE_INTVAL(UseFrameSkip), + CE_INTVAL(UseFrameLimit), CE_INTVAL(dwActFixes), CE_INTVAL(iUseReverb), CE_INTVAL(iUseInterpolation), @@ -775,6 +780,8 @@ static int menu_loop_plugin_options(int id, int keys) // ------------ adv options menu ------------ +static const char h_cfg_cpul[] = "Shows CPU usage in %%"; +static const char h_cfg_fl[] = "Keeps the game from running too fast"; static const char h_cfg_xa[] = "Disables XA sound, which can sometimes improve performance"; static const char h_cfg_cdda[] = "Disable CD Audio for a performance boost\n" "(proper .cue/.bin dump is needed otherwise)"; @@ -785,7 +792,8 @@ static const char h_cfg_rcnt2[] = "InuYasha Sengoku Battle Fix"; static menu_entry e_menu_adv_options[] = { - mee_onoff ("Show CPU load", 0, g_opts, OPT_SHOWCPU), + mee_onoff_h ("Show CPU load", 0, g_opts, OPT_SHOWCPU, h_cfg_cpul), + mee_onoff_h ("Frame Limiter", 0, UseFrameLimit, 1, h_cfg_fl), mee_onoff_h ("Disable XA Decoding", 0, Config.Xa, 1, h_cfg_xa), mee_onoff_h ("Disable CD Audio", 0, Config.Cdda, 1, h_cfg_cdda), mee_onoff_h ("SIO IRQ Always Enabled", 0, Config.Sio, 1, h_cfg_sio), @@ -896,7 +904,9 @@ static int run_cd_image(const char *fname) { extern void set_cd_image(const char *fname); ready_to_go = 0; + pl_fbdev_buf = NULL; + ClosePlugins(); set_cd_image(fname); LoadPlugins(); NetOpened = 0; @@ -974,6 +984,7 @@ static int main_menu_handler(int id, int keys) break; case MA_MAIN_RESET_GAME: if (ready_to_go) { + ClosePlugins(); OpenPlugins(); SysReset(); if (CheckCdrom() != -1) { @@ -1045,8 +1056,6 @@ void menu_loop(void) in_set_config_int(0, IN_CFG_BLOCKING, 0); - memset(g_menuscreen_ptr, 0, g_menuscreen_w * g_menuscreen_h * 2); - menu_draw_end(); menu_prepare_emu(); } @@ -1158,7 +1167,7 @@ static void menu_leave_emu(void) } memcpy(g_menubg_ptr, g_menubg_src_ptr, g_menuscreen_w * g_menuscreen_h * 2); - if (ready_to_go && last_psx_bpp == 16) { + if (pl_fbdev_buf != NULL && ready_to_go && last_psx_bpp == 16) { int x = max(0, g_menuscreen_w - last_psx_w); int y = max(0, g_menuscreen_h / 2 - last_psx_h / 2); int w = min(g_menuscreen_w, last_psx_w); @@ -1169,10 +1178,14 @@ static void menu_leave_emu(void) for (; h > 0; h--, d += g_menuscreen_w, s += last_psx_w) menu_darken_bg(d, s, w, 0); } + + plat_video_menu_enter(ready_to_go); } void menu_prepare_emu(void) { + plat_video_menu_leave(); + switch (scaling) { case SCALE_1_1: menu_notify_mode_change(last_psx_w, last_psx_h, last_psx_bpp); @@ -1197,6 +1210,12 @@ void menu_prepare_emu(void) if (Config.Cdda) CDR_stop(); + // HACK to set up the frame limiter if softgpu is not used.. + if (gpu_plugsel != 0) { + fFrameRateHz = Config.PsxType ? 50.0f : 59.94f; + dwFrameRateTicks = (100000*100 / (unsigned long)(fFrameRateHz*100)); + } + if (GPU_open != NULL) { extern unsigned long gpuDisp; int ret = GPU_open(&gpuDisp, "PCSX", NULL); diff --git a/frontend/plat_omap.c b/frontend/plat_omap.c index ec483a04..e6a1105d 100644 --- a/frontend/plat_omap.c +++ b/frontend/plat_omap.c @@ -120,6 +120,14 @@ int omap_enable_layer(int enabled) g_layer_x, g_layer_y, g_layer_w, g_layer_h, 0); } +void plat_video_menu_enter(int is_rom_loaded) +{ + g_menuscreen_ptr = vout_fbdev_resize(main_fb, + g_menuscreen_w, g_menuscreen_h, 16, 0, 0, 0, 0, 3); + if (g_menuscreen_ptr == NULL) + fprintf(stderr, "warning: vout_fbdev_resize failed\n"); +} + void plat_video_menu_begin(void) { } @@ -129,6 +137,17 @@ void plat_video_menu_end(void) g_menuscreen_ptr = vout_fbdev_flip(main_fb); } +void plat_video_menu_leave(void) +{ + /* have to get rid of panning so that plugins that + * use fb0 and don't ever pan can work. */ + vout_fbdev_clear(main_fb); + g_menuscreen_ptr = vout_fbdev_resize(main_fb, + g_menuscreen_w, g_menuscreen_h, 16, 0, 0, 0, 0, 1); + if (g_menuscreen_ptr == NULL) + fprintf(stderr, "warning: vout_fbdev_resize failed\n"); +} + void plat_init(void) { const char *main_fb_name, *layer_fb_name; diff --git a/plugins/dfxvideo/cfg.c b/plugins/dfxvideo/cfg.c index dbc3bc58..710883b5 100644 --- a/plugins/dfxvideo/cfg.c +++ b/plugins/dfxvideo/cfg.c @@ -221,15 +221,16 @@ void ReadConfigGPU(void) iColDepth=32; iWindowMode=1; iMaintainAspect=0; - UseFrameLimit=1; - UseFrameSkip=0; iFrameLimit=2; fFrameRate=200.0f; - dwCfgFixes=0; iUseFixes=0; iUseNoStretchBlt=0; - iUseDither=0; iShowFPS=0; + // pcsx-rearmed: managed by frontend + //UseFrameLimit=1; + //UseFrameSkip=0; + //dwCfgFixes=0; + //iUseDither=0; // read sets ReadConfigFile(); -- 2.39.5