cdrom: change pause timing again
[pcsx_rearmed.git] / plugins / gpu-gles / gpulib_if.c
index c669b63..f00c459 100644 (file)
@@ -16,6 +16,7 @@
  *                                                                         *
  ***************************************************************************/
 
+#include "gpuStdafx.h"
 #include "gpuDraw.c"
 #include "gpuTexture.c"
 #include "gpuPrim.c"
@@ -26,10 +27,10 @@ short g_m1,g_m2,g_m3;
 short DrawSemiTrans;
 
 short          ly0,lx0,ly1,lx1,ly2,lx2,ly3,lx3;        // global psx vertex coords
-long           GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP;
-long           GlobalTextREST,GlobalTextABR,GlobalTextPAGE;
+int            GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP;
+int            GlobalTextREST,GlobalTextABR,GlobalTextPAGE;
 
-unsigned long dwGPUVersion;
+unsigned int  dwGPUVersion;
 int           iGPUHeight=512;
 int           iGPUHeightMask=511;
 int           GlobalTextIL;
@@ -41,15 +42,15 @@ GLfloat         gl_z=0.0f;
 BOOL            bNeedInterlaceUpdate;
 BOOL            bNeedRGB24Update;
 BOOL            bChangeWinMode;
-long            lGPUstatusRet;
-unsigned long   ulGPUInfoVals[16];
+int             lGPUstatusRet;
+unsigned int    ulGPUInfoVals[16];
 VRAMLoad_t      VRAMWrite;
 VRAMLoad_t      VRAMRead;
 int             iDataWriteMode;
 int             iDataReadMode;
 
-long            lClearOnSwap;
-long            lClearOnSwapColor;
+int             lClearOnSwap;
+int             lClearOnSwapColor;
 BOOL            bSkipNextFrame;
 
 PSXDisplay_t    PSXDisplay;
@@ -195,13 +196,13 @@ void updateFrontDisplay(void)
 
 static void ChangeDispOffsetsX(void)                  // CENTER X
 {
-long lx,l;short sO;
+int lx,l;short sO;
 
 if(!PSXDisplay.Range.x1) return;                      // some range given?
 
 l=PSXDisplay.DisplayMode.x;
 
-l*=(long)PSXDisplay.Range.x1;                         // some funky calculation
+l*=(int)PSXDisplay.Range.x1;                         // some funky calculation
 l/=2560;lx=l;l&=0xfffffff8;
 
 if(l==PreviousPSXDisplay.Range.x1) return;            // some change?
@@ -312,7 +313,7 @@ if(bUp) updateDisplay();                              // yeah, real update (swap
 }
 
 #define GPUwriteStatus_ext GPUwriteStatus_ext // for gpulib to see this
-void GPUwriteStatus_ext(unsigned long gdata)
+void GPUwriteStatus_ext(unsigned int gdata)
 {
 switch((gdata>>24)&0xff)
  {
@@ -479,10 +480,15 @@ switch((gdata>>24)&0xff)
 
 static int is_opened;
 
-int renderer_init(void)
+static void set_vram(void *vram)
 {
- psxVub=(void *)gpu.vram;
+ psxVub=vram;
  psxVuw=(unsigned short *)psxVub;
+}
+
+int renderer_init(void)
+{
+ set_vram(gpu.vram);
 
  PSXDisplay.RGB24        = FALSE;                      // init some stuff
  PSXDisplay.Interlaced   = FALSE;
@@ -500,10 +506,23 @@ int renderer_init(void)
  return 0;
 }
 
+void renderer_finish(void)
+{
+}
+
+void renderer_notify_res_change(void)
+{
+}
+
+void renderer_notify_scanout_change(int x, int y)
+{
+}
+
 extern const unsigned char cmd_lengths[256];
 
 // XXX: mostly dupe code from soft peops
-int do_cmd_list(unsigned int *list, int list_len, int *last_cmd)
+int do_cmd_list(uint32_t *list, int list_len,
+ int *cycles_sum_out, int *cycles_last, int *last_cmd)
 {
   unsigned int cmd, len;
   unsigned int *list_start = list;
@@ -536,7 +555,12 @@ int do_cmd_list(unsigned int *list, int list_len, int *last_cmd)
 
         while(1)
         {
-          if((*list_position & 0xf000f000) == 0x50005000 || list_position >= list_end)
+          if(list_position >= list_end) {
+            cmd = -1;
+            goto breakloop;
+          }
+
+          if((*list_position & 0xf000f000) == 0x50005000)
             break;
 
           list_position++;
@@ -554,7 +578,12 @@ int do_cmd_list(unsigned int *list, int list_len, int *last_cmd)
 
         while(1)
         {
-          if((*list_position & 0xf000f000) == 0x50005000 || list_position >= list_end)
+          if(list_position >= list_end) {
+            cmd = -1;
+            goto breakloop;
+          }
+
+          if((*list_position & 0xf000f000) == 0x50005000)
             break;
 
           list_position += 2;
@@ -580,6 +609,7 @@ int do_cmd_list(unsigned int *list, int list_len, int *last_cmd)
     }
   }
 
+breakloop:
   gpu.ex_regs[1] &= ~0x1ff;
   gpu.ex_regs[1] |= lGPUstatusRet & 0x1ff;
 
@@ -597,7 +627,7 @@ void renderer_sync_ecmds(uint32_t *ecmds)
   cmdSTP((unsigned char *)&ecmds[6]);
 }
 
-void renderer_update_caches(int x, int y, int w, int h)
+void renderer_update_caches(int x, int y, int w, int h, int state_changed)
 {
  VRAMWrite.x = x;
  VRAMWrite.y = y;
@@ -640,9 +670,17 @@ void vout_update(void)
  }
 }
 
+void vout_blank(void)
+{
+}
+
+void vout_set_config(const struct rearmed_cbs *cbs)
+{
+}
+
 static struct rearmed_cbs *cbs;
 
-long GPUopen(void **dpy)
+long GPUopen(unsigned long *disp, char *cap, char *cfg)
 {
  int ret;
 
@@ -658,7 +696,7 @@ long GPUopen(void **dpy)
 
  InitializeTextureStore();                             // init texture mem
 
- ret = GLinitialize();
+ ret = GLinitialize(cbs->gles_display, cbs->gles_surface);
  MakeDisplayLists();
 
  is_opened = 1;
@@ -694,15 +732,23 @@ void renderer_set_config(const struct rearmed_cbs *cbs_)
  bUseFastMdec = cbs->gpu_peopsgl.bUseFastMdec;
  iTexGarbageCollection = cbs->gpu_peopsgl.iTexGarbageCollection;
  iVRamSize = cbs->gpu_peopsgl.iVRamSize;
-}
 
-void vout_set_config(const struct rearmed_cbs *cbs)
-{
+ if (cbs->pl_set_gpu_caps)
+  cbs->pl_set_gpu_caps(GPU_CAP_OWNS_DISPLAY);
+
+ if (is_opened && cbs->gles_display != NULL && cbs->gles_surface != NULL) {
+  // HACK..
+  GPUclose();
+  GPUopen(NULL, NULL, NULL);
+ }
+
+ set_vram(gpu.vram);
 }
 
 void SetAspectRatio(void)
 {
- cbs->pl_get_layer_pos(&rRatioRect.left, &rRatioRect.top, &rRatioRect.right, &rRatioRect.bottom);
+ if (cbs->pl_get_layer_pos)
+  cbs->pl_get_layer_pos(&rRatioRect.left, &rRatioRect.top, &rRatioRect.right, &rRatioRect.bottom);
 
  glScissor(rRatioRect.left,
            iResY-(rRatioRect.top+rRatioRect.bottom),