aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--frontend/main.c7
-rw-r--r--frontend/menu.c56
-rw-r--r--frontend/plugin.c2
-rw-r--r--frontend/plugin_lib.c22
-rw-r--r--frontend/plugin_lib.h12
-rw-r--r--plugins/dfxvideo/draw_fb.c7
-rw-r--r--plugins/dfxvideo/gpu.c19
-rw-r--r--plugins/gpu_unai/gpu.cpp2
8 files changed, 70 insertions, 57 deletions
diff --git a/frontend/main.c b/frontend/main.c
index f97610a..068fe50 100644
--- a/frontend/main.c
+++ b/frontend/main.c
@@ -36,9 +36,6 @@ enum sched_action emu_action, emu_action_old;
char hud_msg[64];
int hud_new_msg;
-// from softgpu plugin
-extern int UseFrameSkip;
-
static void make_path(char *buf, size_t size, const char *dir, const char *fname)
{
if (fname)
@@ -157,9 +154,9 @@ void do_emu_action(void)
state_slot = 9;
goto do_state_slot;
case SACTION_TOGGLE_FSKIP:
- UseFrameSkip ^= 1;
+ pl_rearmed_cbs.frameskip ^= 1;
snprintf(hud_msg, sizeof(hud_msg), "FRAMESKIP %s",
- UseFrameSkip ? "ON" : "OFF");
+ pl_rearmed_cbs.frameskip ? "ON" : "OFF");
break;
case SACTION_SCREENSHOT:
{
diff --git a/frontend/menu.c b/frontend/menu.c
index da1caea..6dc62f3 100644
--- a/frontend/menu.c
+++ b/frontend/menu.c
@@ -75,13 +75,6 @@ static char last_selected_fname[MAXPATHLEN];
static int warned_about_bios, region, in_type_sel;
int g_opts;
-// from softgpu plugin
-extern int iUseDither;
-extern int UseFrameSkip;
-extern uint32_t dwActFixes;
-extern float fFrameRateHz;
-extern int dwFrameRateTicks;
-
// sound plugin
extern int iUseReverb;
extern int iUseInterpolation;
@@ -154,8 +147,9 @@ static void menu_sync_config(void)
pl_frame_interval = Config.PsxType ? 20000 : 16667;
// used by P.E.Op.S. frameskip code
- fFrameRateHz = Config.PsxType ? 50.0f : 59.94f;
- dwFrameRateTicks = (100000*100 / (unsigned long)(fFrameRateHz*100));
+ pl_rearmed_cbs.gpu_peops.fFrameRateHz = Config.PsxType ? 50.0f : 59.94f;
+ pl_rearmed_cbs.gpu_peops.dwFrameRateTicks =
+ (100000*100 / (unsigned long)(pl_rearmed_cbs.gpu_peops.fFrameRateHz*100));
}
static void menu_set_defconfig(void)
@@ -169,9 +163,9 @@ static void menu_set_defconfig(void)
Config.Xa = Config.Cdda = Config.Sio =
Config.SpuIrq = Config.RCntFix = Config.VSyncWA = 0;
- iUseDither = 0;
- UseFrameSkip = 1;
- dwActFixes = 1<<7;
+ pl_rearmed_cbs.frameskip = 0;
+ pl_rearmed_cbs.gpu_peops.iUseDither = 0;
+ pl_rearmed_cbs.gpu_peops.dwActFixes = 1<<7;
iUseReverb = 2;
iUseInterpolation = 1;
@@ -194,6 +188,9 @@ static void menu_set_defconfig(void)
#define CE_INTVAL(val) \
{ #val, sizeof(val), &val }
+#define CE_INTVAL_P(val) \
+ { #val, sizeof(pl_rearmed_cbs.val), &pl_rearmed_cbs.val }
+
// 'versioned' var, used when defaults change
#define CE_INTVAL_V(val, ver) \
{ #val #ver, sizeof(val), &val }
@@ -228,9 +225,9 @@ static const struct {
CE_INTVAL(cpu_clock),
CE_INTVAL(g_opts),
CE_INTVAL(in_type_sel),
- CE_INTVAL(iUseDither),
- CE_INTVAL(UseFrameSkip),
- CE_INTVAL(dwActFixes),
+ CE_INTVAL_P(frameskip),
+ CE_INTVAL_P(gpu_peops.iUseDither),
+ CE_INTVAL_P(gpu_peops.dwActFixes),
CE_INTVAL(iUseReverb),
CE_INTVAL(iXAPitch),
CE_INTVAL_V(iUseInterpolation, 2),
@@ -1054,16 +1051,16 @@ static const char h_gpu_10[] = "Toggle busy flags after drawing";
static menu_entry e_menu_plugin_gpu[] =
{
- mee_enum ("Dithering", 0, iUseDither, men_gpu_dithering),
- mee_onoff_h ("Odd/even bit hack", 0, dwActFixes, 1<<0, h_gpu_0),
- mee_onoff_h ("Expand screen width", 0, dwActFixes, 1<<1, h_gpu_1),
- mee_onoff_h ("Ignore brightness color", 0, dwActFixes, 1<<2, h_gpu_2),
- mee_onoff_h ("Disable coordinate check", 0, dwActFixes, 1<<3, h_gpu_3),
- mee_onoff_h ("Lazy screen update", 0, dwActFixes, 1<<6, h_gpu_6),
- mee_onoff_h ("Old frame skipping", 0, dwActFixes, 1<<7, h_gpu_7),
- mee_onoff_h ("Repeated flat tex triangles ",0,dwActFixes, 1<<8, h_gpu_8),
- mee_onoff_h ("Draw quads with triangles", 0, dwActFixes, 1<<9, h_gpu_9),
- mee_onoff_h ("Fake 'gpu busy' states", 0, dwActFixes, 1<<10, h_gpu_10),
+ mee_enum ("Dithering", 0, pl_rearmed_cbs.gpu_peops.iUseDither, men_gpu_dithering),
+ mee_onoff_h ("Odd/even bit hack", 0, pl_rearmed_cbs.gpu_peops.dwActFixes, 1<<0, h_gpu_0),
+ mee_onoff_h ("Expand screen width", 0, pl_rearmed_cbs.gpu_peops.dwActFixes, 1<<1, h_gpu_1),
+ mee_onoff_h ("Ignore brightness color", 0, pl_rearmed_cbs.gpu_peops.dwActFixes, 1<<2, h_gpu_2),
+ mee_onoff_h ("Disable coordinate check", 0, pl_rearmed_cbs.gpu_peops.dwActFixes, 1<<3, h_gpu_3),
+ mee_onoff_h ("Lazy screen update", 0, pl_rearmed_cbs.gpu_peops.dwActFixes, 1<<6, h_gpu_6),
+ mee_onoff_h ("Old frame skipping", 0, pl_rearmed_cbs.gpu_peops.dwActFixes, 1<<7, h_gpu_7),
+ mee_onoff_h ("Repeated flat tex triangles ",0,pl_rearmed_cbs.gpu_peops.dwActFixes, 1<<8, h_gpu_8),
+ mee_onoff_h ("Draw quads with triangles", 0, pl_rearmed_cbs.gpu_peops.dwActFixes, 1<<9, h_gpu_9),
+ mee_onoff_h ("Fake 'gpu busy' states", 0, pl_rearmed_cbs.gpu_peops.dwActFixes, 1<<10, h_gpu_10),
mee_end,
};
@@ -1101,7 +1098,7 @@ static const char h_bios[] = "HLE is simulated BIOS. BIOS selection is sav
"the game for change to take effect";
static const char h_plugin_xpu[] = "Must save config and reload the game\n"
"for plugin change to take effect";
-static const char h_gpu[] = "Configure built-in P.E.Op.S. SoftGL Driver V1.17";
+static const char h_gpu[] = "Configure P.E.Op.S. SoftGL Driver V1.17";
static const char h_spu[] = "Configure built-in P.E.Op.S. Sound Driver V1.7";
static menu_entry e_menu_plugin_options[] =
@@ -1109,7 +1106,7 @@ static menu_entry e_menu_plugin_options[] =
mee_enum_h ("BIOS", 0, bios_sel, bioses, h_bios),
mee_enum_h ("GPU plugin", 0, gpu_plugsel, gpu_plugins, h_plugin_xpu),
mee_enum_h ("SPU plugin", 0, spu_plugsel, spu_plugins, h_plugin_xpu),
- mee_handler_h ("Configure built-in GPU plugin", menu_loop_plugin_gpu, h_gpu),
+ mee_handler_h ("Configure gpu_peops plugin", menu_loop_plugin_gpu, h_gpu),
mee_handler_h ("Configure built-in SPU plugin", menu_loop_plugin_spu, h_spu),
mee_end,
};
@@ -1188,7 +1185,7 @@ static menu_entry e_menu_options[] =
{
// mee_range ("Save slot", 0, state_slot, 0, 9),
// mee_enum_h ("Confirm savestate", 0, dummy, men_confirm_save, h_confirm_save),
- mee_onoff_h ("Frameskip", 0, UseFrameSkip, 1, h_frameskip),
+ mee_onoff_h ("Frameskip", 0, pl_rearmed_cbs.frameskip, 1, h_frameskip),
mee_onoff ("Show FPS", 0, g_opts, OPT_SHOWFPS),
mee_enum ("Region", 0, region, men_region),
mee_range ("CPU clock", MA_OPT_CPU_CLOCKS, cpu_clock, 20, 5000),
@@ -1769,6 +1766,9 @@ void menu_prepare_emu(void)
apply_filter(filter);
apply_cpu_clock();
+ // push config to GPU plugin
+ plugin_call_rearmed_cbs();
+
if (GPU_open != NULL) {
int ret = GPU_open(&gpuDisp, "PCSX", NULL);
if (ret)
diff --git a/frontend/plugin.c b/frontend/plugin.c
index 0d244fa..cbb5558 100644
--- a/frontend/plugin.c
+++ b/frontend/plugin.c
@@ -76,6 +76,7 @@ extern long GPUdmaChain(uint32_t *,uint32_t);
extern void GPUupdateLace(void);
extern long GPUfreeze(uint32_t, void *);
extern void GPUvBlank(int, uint32_t *);
+extern void GPUrearmedCallbacks(const struct rearmed_cbs *cbs);
#define DUMMY(id, name) \
@@ -168,6 +169,7 @@ static const struct {
DIRECT_GPU(GPUdmaChain),
DIRECT_GPU(GPUfreeze),
DIRECT_GPU(GPUvBlank),
+ DIRECT_GPU(GPUrearmedCallbacks),
DUMMY_GPU(GPUdisplayText),
/*
diff --git a/frontend/plugin_lib.c b/frontend/plugin_lib.c
index ee0e086..58c67d2 100644
--- a/frontend/plugin_lib.c
+++ b/frontend/plugin_lib.c
@@ -34,11 +34,7 @@ int in_type, in_keystate, in_a1[2] = { 127, 127 }, in_a2[2] = { 127, 127 };
static int pl_fbdev_w, pl_fbdev_h, pl_fbdev_bpp;
static int flip_cnt, vsync_cnt, flips_per_sec, tick_per_sec;
static float vsps_cur;
-static int plugin_skip_advice;
static int vsync_usec_time;
-// P.E.Op.S.
-extern int UseFrameSkip;
-extern float fps_skip;
static int get_cpu_ticks(void)
{
@@ -252,16 +248,11 @@ void pl_frame_limit(void)
usleep(diff - pl_frame_interval / 2);
}
- if (UseFrameSkip) {
- if (diff < -pl_frame_interval) {
- // P.E.Op.S. makes skip decision based on this
- fps_skip = 1.0f;
- plugin_skip_advice = 1;
- }
- else if (diff >= 0) {
- fps_skip = 100.0f;
- plugin_skip_advice = 0;
- }
+ if (pl_rearmed_cbs.frameskip) {
+ if (diff < -pl_frame_interval)
+ pl_rearmed_cbs.fskip_advice = 1;
+ else if (diff >= 0)
+ pl_rearmed_cbs.fskip_advice = 0;
}
pcnt_start(PCNT_ALL);
@@ -311,13 +302,12 @@ static void pl_get_layer_pos(int *x, int *y, int *w, int *h)
*h = g_layer_h;
}
-const struct rearmed_cbs pl_rearmed_cbs = {
+struct rearmed_cbs pl_rearmed_cbs = {
pl_get_layer_pos,
pl_fbdev_open,
pl_fbdev_set_mode,
pl_fbdev_flip,
pl_fbdev_close,
- &plugin_skip_advice,
};
/* watchdog */
diff --git a/frontend/plugin_lib.h b/frontend/plugin_lib.h
index 61dc3be..49894af 100644
--- a/frontend/plugin_lib.h
+++ b/frontend/plugin_lib.h
@@ -37,10 +37,18 @@ struct rearmed_cbs {
void *(*pl_fbdev_set_mode)(int w, int h, int bpp);
void *(*pl_fbdev_flip)(void);
void (*pl_fbdev_close)(void);
- int *fskip_option;
+ // gpu options
+ int frameskip;
+ int fskip_advice;
+ struct {
+ int iUseDither;
+ int dwActFixes;
+ float fFrameRateHz;
+ int dwFrameRateTicks;
+ } gpu_peops;
};
-extern const struct rearmed_cbs pl_rearmed_cbs;
+extern struct rearmed_cbs pl_rearmed_cbs;
extern int pl_frame_interval;
diff --git a/plugins/dfxvideo/draw_fb.c b/plugins/dfxvideo/draw_fb.c
index b560813..a3f50e8 100644
--- a/plugins/dfxvideo/draw_fb.c
+++ b/plugins/dfxvideo/draw_fb.c
@@ -9,9 +9,9 @@
#include "gpu.h"
-#include "plugin_lib.h"
-#include "arm_utils.h"
-#include "pcnt.h"
+#include "../../frontend/plugin_lib.h"
+#include "../../frontend/arm_utils.h"
+#include "../../frontend/pcnt.h"
// misc globals
long lLowerpart;
@@ -101,4 +101,3 @@ void CloseDisplay(void)
{
pl_fbdev_close();
}
-
diff --git a/plugins/dfxvideo/gpu.c b/plugins/dfxvideo/gpu.c
index b384526..9a614de 100644
--- a/plugins/dfxvideo/gpu.c
+++ b/plugins/dfxvideo/gpu.c
@@ -62,6 +62,7 @@ BOOL bDoLazyUpdate=FALSE;
uint32_t lGPUInfoVals[16];
static int iFakePrimBusy=0;
static uint32_t vBlank=0;
+static const int *skip_advice;
////////////////////////////////////////////////////////////////////////
// some misc external display funcs
@@ -232,7 +233,8 @@ static void decideSkip(void)
if(dwActFixes&0xa0) // -> pc fps calculation fix/old skipping fix
{
- if((fps_skip < fFrameRateHz) && !bSkipNextFrame) // -> skip max one in a row
+ int skip = (skip_advice && *skip_advice) || fps_skip < fFrameRateHz;
+ if(skip && !bSkipNextFrame) // -> skip max one in a row
{bSkipNextFrame = TRUE; fps_skip=fFrameRateHz;}
else bSkipNextFrame = FALSE;
}
@@ -1132,3 +1134,18 @@ void CALLBACK GPUvBlank(int val)
vBlank=val?0x80000000:0;
}
+// rearmed thing
+#include "../../frontend/plugin_lib.h"
+
+void GPUrearmedCallbacks(const struct rearmed_cbs *cbs)
+{
+ // sync config
+ UseFrameSkip = cbs->frameskip;
+ iUseDither = cbs->gpu_peops.iUseDither;
+ dwActFixes = cbs->gpu_peops.dwActFixes;
+ fFrameRateHz = cbs->gpu_peops.fFrameRateHz;
+ dwFrameRateTicks = cbs->gpu_peops.dwFrameRateTicks;
+
+ skip_advice = &cbs->fskip_advice;
+ fps_skip = 100.0f;
+}
diff --git a/plugins/gpu_unai/gpu.cpp b/plugins/gpu_unai/gpu.cpp
index 0ef8f51..808c891 100644
--- a/plugins/gpu_unai/gpu.cpp
+++ b/plugins/gpu_unai/gpu.cpp
@@ -938,7 +938,7 @@ void GPU_updateLace(void)
blit();
fb_dirty = false;
- if (*cbs->fskip_option)
+ if (cbs->fskip_advice)
isSkip = true;
}
else