dfxvideo: remove unneeded double division in line code
[pcsx_rearmed.git] / plugins / dfxvideo / gpu.c
index 0d105f8..f9a49bb 100644 (file)
@@ -23,7 +23,6 @@
 // memory image of the PSX vram 
 ////////////////////////////////////////////////////////////////////////
 
-unsigned char  *psxVSecure;
 unsigned char  *psxVub;
 signed   char  *psxVsb;
 unsigned short *psxVuw;
@@ -88,16 +87,15 @@ static void SetFixes(void)
 // INIT, will be called after lib load... well, just do some var init...
 ////////////////////////////////////////////////////////////////////////
 
+// one extra MB for soft drawing funcs security
+static unsigned char vram[1024*512*2 + 1024*1024] __attribute__((aligned(2048)));
+
 long CALLBACK GPUinit(void)                                // GPU INIT
 {
  memset(ulStatusControl,0,256*sizeof(uint32_t));  // init save state scontrol field
 
- psxVSecure = (unsigned char *)malloc((512*2)*1024 + (1024*1024)); // always alloc one extra MB for soft drawing funcs security
- if (!psxVSecure)
-  return -1;
-
  //!!! ATTENTION !!!
- psxVub=psxVSecure + 512 * 1024;                           // security offset into double sized psx vram!
+ psxVub=vram + 512 * 1024;                           // security offset into double sized psx vram!
 
  psxVsb=(signed char *)psxVub;                         // different ways of accessing PSX VRAM
  psxVsw=(signed short *)psxVub;
@@ -107,7 +105,7 @@ long CALLBACK GPUinit(void)                                // GPU INIT
 
  psxVuw_eom=psxVuw+1024*512;                    // pre-calc of end of vram
 
- memset(psxVSecure,0x00,(512*2)*1024 + (1024*1024));
+ memset(vram,0x00,(512*2)*1024 + (1024*1024));
  memset(lGPUInfoVals,0x00,16*sizeof(uint32_t));
 
  PSXDisplay.RGB24        = FALSE;                      // init some stuff
@@ -185,7 +183,6 @@ long CALLBACK GPUclose()                               // GPU CLOSE
 long CALLBACK GPUshutdown(void)                            // GPU SHUTDOWN
 {
  CloseDisplay();                                       // shutdown direct draw
- free(psxVSecure);
  return 0;                                             // nothinh to do
 }
 
@@ -233,7 +230,7 @@ static void decideSkip(void)
 
  if(dwActFixes&0xa0)                                   // -> pc fps calculation fix/old skipping fix
   {
-   int skip = (skip_advice && *skip_advice) || fps_skip < fFrameRateHz;
+   int skip = (skip_advice && *skip_advice) || UseFrameSkip == 1 || fps_skip < fFrameRateHz;
    if(skip && !bSkipNextFrame)                         // -> skip max one in a row
        {bSkipNextFrame = TRUE; fps_skip=fFrameRateHz;}
    else bSkipNextFrame = FALSE;
@@ -649,7 +646,7 @@ void CALLBACK GPUwriteStatus(uint32_t gdata)      // WRITE STATUS
        }
       lGPUstatusRet|=GPUSTATUS_INTERLACED;
      }
-    else lGPUstatusRet&=~GPUSTATUS_INTERLACED;
+    else lGPUstatusRet&=~(GPUSTATUS_INTERLACED|0x80000000);
 
     if (PSXDisplay.PAL)
          lGPUstatusRet|=GPUSTATUS_PAL;
@@ -1118,6 +1115,7 @@ long CALLBACK GPUfreeze(uint32_t ulGetFreezeData,GPUFreeze_t * pF)
 
 // RESET TEXTURE STORE HERE, IF YOU USE SOMETHING LIKE THAT
 
+ PreviousPSXDisplay.Height = 0;
  GPUwriteStatus(ulStatusControl[0]);
  GPUwriteStatus(ulStatusControl[1]);
  GPUwriteStatus(ulStatusControl[2]);
@@ -1139,6 +1137,8 @@ void CALLBACK GPUvBlank(int val)
 // rearmed thing
 #include "../../frontend/plugin_lib.h"
 
+const struct rearmed_cbs *rcbs;
+
 void GPUrearmedCallbacks(const struct rearmed_cbs *cbs)
 {
  // sync config
@@ -1147,7 +1147,10 @@ void GPUrearmedCallbacks(const struct rearmed_cbs *cbs)
  dwActFixes = cbs->gpu_peops.dwActFixes;
  fFrameRateHz = cbs->gpu_peops.fFrameRateHz;
  dwFrameRateTicks = cbs->gpu_peops.dwFrameRateTicks;
+ if (cbs->pl_vout_set_raw_vram)
+  cbs->pl_vout_set_raw_vram(psxVub);
 
  skip_advice = &cbs->fskip_advice;
  fps_skip = 100.0f;
+ rcbs = cbs;
 }