gpu_neon: make use of unai's lineskip mode
authornotaz <notasas@gmail.com>
Mon, 19 Dec 2011 21:32:49 +0000 (23:32 +0200)
committernotaz <notasas@gmail.com>
Mon, 19 Dec 2011 21:37:03 +0000 (23:37 +0200)
frontend/menu.c
frontend/plugin_lib.h
plugins/gpu_neon/unai_if.cpp
plugins/gpu_unai/gpu_command.h

index 3142506..d3e16a4 100644 (file)
@@ -283,6 +283,7 @@ static const struct {
        CE_INTVAL_V(frameskip, 3),
        CE_INTVAL_P(gpu_peops.iUseDither),
        CE_INTVAL_P(gpu_peops.dwActFixes),
+       CE_INTVAL_P(gpu_unai.lineskip),
        CE_INTVAL_P(gpu_unai.abe_hack),
        CE_INTVAL_P(gpu_unai.no_light),
        CE_INTVAL_P(gpu_unai.no_blend),
@@ -1191,6 +1192,7 @@ static int menu_loop_gfx_options(int id, int keys)
 
 static menu_entry e_menu_plugin_gpu_unai[] =
 {
+       mee_onoff     ("Skip every 2nd line",        0, pl_rearmed_cbs.gpu_unai.lineskip, 1),
        mee_onoff     ("Abe's Odyssey hack",         0, pl_rearmed_cbs.gpu_unai.abe_hack, 1),
        mee_onoff     ("Disable lighting",           0, pl_rearmed_cbs.gpu_unai.no_light, 1),
        mee_onoff     ("Disable blending",           0, pl_rearmed_cbs.gpu_unai.no_blend, 1),
index 0ec55a2..2806056 100644 (file)
@@ -59,6 +59,7 @@ struct rearmed_cbs {
        struct {
                int   abe_hack;
                int   no_light, no_blend;
+               int   lineskip;
        } gpu_unai;
 };
 
index 67e045d..4e3e7f9 100644 (file)
 #define        FRAME_HEIGHT       512
 #define        FRAME_OFFSET(x,y)  (((y)<<10)+(x))
 
-static bool isSkip = false; /* skip frame (info coming from GPU) */
-static int linesInterlace = 0;  /* internal lines interlace */
-
+#define isSkip 0 /* skip frame (info coming from GPU) */
 #define alt_fps 0
+static int linesInterlace;  /* internal lines interlace */
+static int force_interlace;
 
 static bool light = true; /* lighting */
 static bool blend = true; /* blending */
@@ -165,9 +165,13 @@ extern const unsigned char cmd_lengths[256];
 void do_cmd_list(unsigned int *list, int list_len)
 {
   unsigned int cmd, len;
-
   unsigned int *list_end = list + list_len;
 
+  linesInterlace = force_interlace;
+#ifndef __ARM_ARCH_7A__ /* XXX */
+  linesInterlace |= gpu.status.interlace;
+#endif
+
   for (; list < list_end; list += 1 + len)
   {
     cmd = *list >> 24;
@@ -274,6 +278,7 @@ void renderer_flush_queues(void)
 
 void renderer_set_config(const struct rearmed_cbs *cbs)
 {
+  force_interlace = cbs->gpu_unai.lineskip;
   enableAbbeyHack = cbs->gpu_unai.abe_hack;
   light = !cbs->gpu_unai.no_light;
   blend = !cbs->gpu_unai.no_blend;
index a5b61b6..d380dae 100644 (file)
@@ -373,7 +373,9 @@ void gpuSendPacketFunction(const int PRIM)
                        break;
                case 0xA0:          //  sys ->vid
                        gpuLoadImage();   //  prim handles updateLace && skip
+#ifndef isSkip // not a define
                        if (alt_fps) isSkip=false;
+#endif
                        DO_LOG(("gpuLoadImage(0x%x)\n",PRIM));
                        break;
                case 0xC0:          //  vid -> sys