gpu_neon: integrate Exophase's rasterizer
[pcsx_rearmed.git] / plugins / gpu_neon / unai_if.cpp
index 488d26c..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;
@@ -231,6 +235,18 @@ void do_cmd_list(unsigned int *list, int list_len)
         break;
       }
 
+#ifdef TEST
+      case 0xA0:          //  sys -> vid
+      {
+        u32 load_width = list[2] & 0xffff;
+        u32 load_height = list[2] >> 16;
+        u32 load_size = load_width * load_height;
+
+        len += load_size / 2;
+        break;
+      }
+#endif
+
       default:
         unai_do_prim(cmd, list, len + 1);
         break;
@@ -256,11 +272,16 @@ void renderer_flush_queues(void)
 {
 }
 
+#ifndef TEST
+
 #include "../../frontend/plugin_lib.h"
 
 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;
 }
+
+#endif