cdrom: change pause timing again
[pcsx_rearmed.git] / plugins / dfxvideo / soft.c
index 160b0c4..5c71fd3 100644 (file)
@@ -292,7 +292,7 @@ static inline void GetShadeTransCol32(uint32_t * pdest,uint32_t color)
     {
      int32_t sr,sb,sg,src,sbc,sgc,c;
      src=XCOL1(color);sbc=XCOL2(color);sgc=XCOL3(color);
-     c=GETLE32(pdest)>>16;
+     c=HIWORD(GETLE32(pdest));
      sr=(XCOL1(c))-src;   if(sr&0x8000) sr=0;
      sb=(XCOL2(c))-sbc;  if(sb&0x8000) sb=0;
      sg=(XCOL3(c))-sgc; if(sg&0x8000) sg=0;
@@ -327,8 +327,8 @@ static inline void GetShadeTransCol32(uint32_t * pdest,uint32_t color)
     {
      uint32_t ma=GETLE32(pdest);
      PUTLE32(pdest, (X32PSXCOL(r,g,b))|lSetMask);//0x80008000;
-     if(ma&0x80000000) PUTLE32(pdest, (ma&0xFFFF0000)|(*pdest&0xFFFF));
-     if(ma&0x00008000) PUTLE32(pdest, (ma&0xFFFF)    |(*pdest&0xFFFF0000));
+     if(ma&0x80000000) PUTLE32(pdest, (ma&0xFFFF0000)|(GETLE32(pdest)&0xFFFF));
+     if(ma&0x00008000) PUTLE32(pdest, (ma&0xFFFF)    |(GETLE32(pdest)&0xFFFF0000));
      return;
     }
    PUTLE32(pdest, (X32PSXCOL(r,g,b))|lSetMask);//0x80008000;
@@ -950,7 +950,7 @@ static void FillSoftwareAreaTrans(short x0,short y0,short x1, // FILL AREA TRANS
   {
    static int iCheat=0;
    col+=iCheat;
-   if(iCheat==1) iCheat=0; else iCheat=1;
+   iCheat ^= 1;
   }
 
 
@@ -971,16 +971,17 @@ static void FillSoftwareAreaTrans(short x0,short y0,short x1, // FILL AREA TRANS
   {
    uint32_t *DSTPtr;
    unsigned short LineOffset;
-   uint32_t lcol=lSetMask|(((uint32_t)(col))<<16)|col;
+   uint32_t lcol = lSetMask | ((uint32_t)col << 16) | col;
    dx>>=1;
    DSTPtr = (uint32_t *)(psxVuw + (1024*y0) + x0);
    LineOffset = 512 - dx;
 
    if(!bCheckMask && !DrawSemiTrans)
     {
+     lcol = HOST2LE32(lcol);
      for(i=0;i<dy;i++)
       {
-       for(j=0;j<dx;j++) { PUTLE32(DSTPtr, lcol); DSTPtr++; }
+       for(j=0;j<dx;j++) { *DSTPtr++ = lcol; }
        DSTPtr += LineOffset;
       }
     }
@@ -1035,14 +1036,14 @@ static void FillSoftwareArea(short x0,short y0,short x1,      // FILL AREA (BLK
   {
    uint32_t *DSTPtr;
    unsigned short LineOffset;
-   uint32_t lcol=(((int32_t)col)<<16)|col;
+   uint32_t lcol = HOST2LE32((((uint32_t)(col)) << 16) | col);
    dx>>=1;
    DSTPtr = (uint32_t *)(psxVuw + (1024*y0) + x0);
    LineOffset = 512 - dx;
 
    for(i=0;i<dy;i++)
     {
-     for(j=0;j<dx;j++) { PUTLE32(DSTPtr, lcol); DSTPtr++; }
+     for(j=0;j<dx;j++) { *DSTPtr++ = lcol; }
      DSTPtr += LineOffset;
     } 
   }
@@ -2401,7 +2402,7 @@ static inline void drawPoly3Fi(short x1,short y1,short x2,short y2,short x3,shor
 
  if(!bCheckMask && !DrawSemiTrans)
   {
-   color |=sSetMask;
+   lcolor = HOST2LE32(lcolor);
    for (i=ymin;i<=ymax;i++)
     {
      xmin=left_x >> 16;      if(drawX>xmin) xmin=drawX;
@@ -2409,9 +2410,9 @@ static inline void drawPoly3Fi(short x1,short y1,short x2,short y2,short x3,shor
 
      for(j=xmin;j<xmax;j+=2) 
       {
-       PUTLE32(((uint32_t *)&psxVuw[(i<<10)+j]), lcolor);
+       *(uint32_t *)&psxVuw[(i<<10)+j] = lcolor;
       }
-     if(j==xmax) PUTLE16(&psxVuw[(i<<10)+j], color);
+     if(j==xmax) psxVuw[(i<<10)+j] = lcolor;
 
      if(NextRow_F()) return;
     }
@@ -2481,7 +2482,7 @@ static void drawPoly4F(int32_t rgb)
 
  if(!bCheckMask && !DrawSemiTrans)
   {
-   color |=sSetMask;
+   lcolor = HOST2LE32(lcolor);
    for (i=ymin;i<=ymax;i++)
     {
      xmin=left_x >> 16;      if(drawX>xmin) xmin=drawX;
@@ -2489,9 +2490,9 @@ static void drawPoly4F(int32_t rgb)
 
      for(j=xmin;j<xmax;j+=2) 
       {
-       PUTLE32(((uint32_t *)&psxVuw[(i<<10)+j]), lcolor);
+       *(uint32_t *)&psxVuw[(i<<10)+j] = lcolor;
       }
-     if(j==xmax) PUTLE16(&psxVuw[(i<<10)+j], color);
+     if(j==xmax) psxVuw[(i<<10)+j] = lcolor;
 
      if(NextRow_F4()) return;
     }
@@ -6316,6 +6317,7 @@ static void DrawSoftwareSpriteMirror(unsigned char * baseAddr,int32_t w,int32_t
     sprtYa=(sprtY<<10);
     clutP=(clutY0<<10)+clutX0;
     for (sprCY=0;sprCY<sprtH;sprCY++)
+    {
      for (sprCX=0;sprCX<sprtW;sprCX++)
       {
        tC= psxVub[((textY0+(sprCY*lYDir))<<11) + textX0 +(sprCX*lXDir)];
@@ -6323,28 +6325,33 @@ static void DrawSoftwareSpriteMirror(unsigned char * baseAddr,int32_t w,int32_t
        GetTextureTransColG_SPR(&psxVuw[sprA],GETLE16(&psxVuw[clutP+((tC>>4)&0xf)]));
        GetTextureTransColG_SPR(&psxVuw[sprA+1],GETLE16(&psxVuw[clutP+(tC&0xf)]));
       }
+    }
     return;
 
    case 1: 
 
     clutP>>=1;
     for(sprCY=0;sprCY<sprtH;sprCY++)
+    {
      for(sprCX=0;sprCX<sprtW;sprCX++)
       { 
        tC = psxVub[((textY0+(sprCY*lYDir))<<11)+(GlobalTextAddrX<<1) + textX0 + (sprCX*lXDir)] & 0xff;
        GetTextureTransColG_SPR(&psxVuw[((sprtY+sprCY)<<10)+sprtX + sprCX],psxVuw[clutP+tC]);
       }
-     return;
+    }
+    return;
 
    case 2:
 
     for (sprCY=0;sprCY<sprtH;sprCY++)
+    {
      for (sprCX=0;sprCX<sprtW;sprCX++)
       { 
        GetTextureTransColG_SPR(&psxVuw[((sprtY+sprCY)<<10)+sprtX+sprCX],
            GETLE16(&psxVuw[((textY0+(sprCY*lYDir))<<10)+GlobalTextAddrX + textX0 +(sprCX*lXDir)]));
       }
-     return;
+    }
+    return;
   }
 }
 
@@ -7092,7 +7099,7 @@ static void DrawSoftwareLineShade(int32_t rgb0, int32_t rgb1)
 {
        short x0, y0, x1, y1, xt, yt;
        int32_t rgbt;
-       double m, dy, dx;
+       int dy, dx;
 
        if (lx0 > drawW && lx1 > drawW) return;
        if (ly0 > drawH && ly1 > drawH) return;
@@ -7142,17 +7149,15 @@ static void DrawSoftwareLineShade(int32_t rgb0, int32_t rgb1)
                                dy = y1 - y0;
                        }
 
-                       m = dy / dx;
-
-                       if (m >= 0)
+                       if ((dx >= 0 && dy >= 0) || (dx < 0 && dy < 0))
                        {
-                               if (m > 1)
+                               if (abs(dy) > abs(dx))
                                        Line_S_SE_Shade(x0, y0, x1, y1, rgb0, rgb1);
                                else
                                        Line_E_SE_Shade(x0, y0, x1, y1, rgb0, rgb1);
                        }
                        else
-                               if (m < -1)
+                               if (abs(dy) > abs(dx))
                                        Line_N_NE_Shade(x0, y0, x1, y1, rgb0, rgb1);
                                else
                                        Line_E_NE_Shade(x0, y0, x1, y1, rgb0, rgb1);
@@ -7164,7 +7169,7 @@ static void DrawSoftwareLineShade(int32_t rgb0, int32_t rgb1)
 static void DrawSoftwareLineFlat(int32_t rgb)
 {
        short x0, y0, x1, y1, xt, yt;
-       double m, dy, dx;
+       int dy, dx;
        unsigned short colour = 0;
  
        if (lx0 > drawW && lx1 > drawW) return;
@@ -7216,17 +7221,15 @@ static void DrawSoftwareLineFlat(int32_t rgb)
                                dy = y1 - y0;
                        }
 
-                       m = dy/dx;
-
-                       if (m >= 0)
+                       if ((dx >= 0 && dy >= 0) || (dx < 0 && dy < 0))
                        {
-                               if (m > 1)
+                               if (abs(dy) > abs(dx))
                                        Line_S_SE_Flat(x0, y0, x1, y1, colour);
                                else
                                        Line_E_SE_Flat(x0, y0, x1, y1, colour);
                        }
                        else
-                               if (m < -1)
+                               if (abs(dy) > abs(dx))
                                        Line_N_NE_Flat(x0, y0, x1, y1, colour);
                                else
                                        Line_E_NE_Flat(x0, y0, x1, y1, colour);