unbreak enhanced resolution
authornotaz <notasas@gmail.com>
Sat, 12 Apr 2025 20:51:39 +0000 (23:51 +0300)
committernotaz <notasas@gmail.com>
Sat, 12 Apr 2025 20:51:39 +0000 (23:51 +0300)
Fixes: cdc1d78f3e3e22c45e8461368b3aa58fce23c09c

frontend/libretro.c
frontend/plugin_lib.c

index d8462e4..407253e 100644 (file)
@@ -380,6 +380,8 @@ static void vout_flip(const void *vram_, int vram_ofs, int bgr24,
    unsigned char *dest = vout_buf_ptr;
    const unsigned char *vram = vram_;
    int dstride = vout_pitch_b, h1 = h;
+   int enhres = w > psx_w;
+   u32 vram_mask = enhres ? ~0 : 0xfffff;
    int port = 0, hwrapped;
 
    if (vram == NULL || dims_changed || (in_enable_crosshair[0] + in_enable_crosshair[1]) > 0)
@@ -400,11 +402,11 @@ static void vout_flip(const void *vram_, int vram_ofs, int bgr24,
 
    for (; h1-- > 0; dest += dstride) {
       bgr_to_fb(dest, vram + vram_ofs, w * bytes_pp_s);
-      vram_ofs = (vram_ofs + 2048) & 0xfffff;
+      vram_ofs = (vram_ofs + 2048) & vram_mask;
    }
 
    hwrapped = (vram_ofs & 2047) + w * bytes_pp_s - 2048;
-   if (hwrapped > 0) {
+   if (!enhres && hwrapped > 0) {
       // this is super-rare so just fix-up
       vram_ofs = (vram_ofs - h * 2048) & 0xff800;
       dest -= dstride * h;
index e2268c7..98e86ea 100644 (file)
@@ -318,6 +318,7 @@ static void pl_vout_flip(const void *vram_, int vram_ofs, int bgr24,
        const unsigned char *vram = vram_;
        int dstride = pl_vout_w, h1 = h;
        int h_full = pl_vout_h - pl_vout_yoffset;
+       int enhres = w > psx_w;
        int xoffs = 0, doffs;
        int hwrapped;
 
@@ -438,13 +439,14 @@ static void pl_vout_flip(const void *vram_, int vram_ofs, int bgr24,
 #endif
        else
        {
+               unsigned int vram_mask = enhres ? ~0 : 0xfffff;
                for (; h1-- > 0; dest += dstride * 2) {
                        bgr555_to_rgb565(dest, vram + vram_ofs, w * 2);
-                       vram_ofs = (vram_ofs + 2048) & 0xfffff;
+                       vram_ofs = (vram_ofs + 2048) & vram_mask;
                }
 
                hwrapped = (vram_ofs & 2047) + w * 2 - 2048;
-               if (hwrapped > 0) {
+               if (!enhres && hwrapped > 0) {
                        vram_ofs = (vram_ofs - h * 2048) & 0xff800;
                        dest -= dstride * 2 * h;
                        dest += w * 2 - hwrapped;