dfxvideo: decouple from main emu
authornotaz <notasas@gmail.com>
Fri, 17 Jun 2011 22:23:27 +0000 (01:23 +0300)
committernotaz <notasas@gmail.com>
Thu, 7 Jul 2011 21:15:06 +0000 (00:15 +0300)
frontend/main.c
frontend/menu.c
frontend/plugin.c
frontend/plugin_lib.c
frontend/plugin_lib.h
plugins/dfxvideo/draw_fb.c
plugins/dfxvideo/gpu.c
plugins/gpu_unai/gpu.cpp

index f97610a..068fe50 100644 (file)
@@ -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:
                {
index da1caea..6dc62f3 100644 (file)
@@ -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)
index 0d244fa..cbb5558 100644 (file)
@@ -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),
 /*
index ee0e086..58c67d2 100644 (file)
@@ -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 */
index 61dc3be..49894af 100644 (file)
@@ -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;
 
index b560813..a3f50e8 100644 (file)
@@ -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();
 }
-
index b384526..9a614de 100644 (file)
@@ -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;
+}
index 0ef8f51..808c891 100644 (file)
@@ -938,7 +938,7 @@ void GPU_updateLace(void)
                blit();
 
                fb_dirty = false;
-               if (*cbs->fskip_option)
+               if (cbs->fskip_advice)
                        isSkip = true;
        }
        else