Further good news re the use of the "super resolutions" to minimize screen switching.
The Playstation (driver) is capable of many resolutions. Many games also make use of these various resolutions abundantly, which as a result causes a lot of screen switching with GM. The Playstation is capable of the following resolutions (NTSC example):
Progressive:
256x240_60Hz
320x240_60Hz
368x240_60Hz
512x240_60Hz
640x240_60Hz
Interlaced:
256x480_60Hz
320x480_60Hz
368x480_60Hz
512x480_60Hz
640x480_60Hz
Now interestingly, just as we used 1280x224 for the Genesis driver, there's two "super resolutions" for the Playstation driver that will fit 8 PSX resolutions, while using integer scaling only (CRT pixel perfectness), or will fit all 10 resolutions if we're willing to lose 2 pixels of the 368x240 screenmode. The "super resolution" is: 2560x240_60Hz:
Horizontal resolution and scaling factor:
256 = 10x
320 = 8x
368 = 7x (if we're willing to scale 368x7=2576 pixels and cut off or "lose" 16/7 = ~2 pixels horizontally from original 368 resolution).
512 = 5x
640 = 4x
Now I've just been running the PSX driver on a 2560x240_60Hz screen with some games and it's amazing! Complete smooth experience (no switching) for all progressive modes and CRT pixel perfectness!
Short log from Ridge Race Type 4 shows how many times it changes resolution before getting to the first race:
SwitchRes: Resolution change from 640x480@60.000000 to 256x240@60.000000
SwitchRes: Resolution change from 256x240@60.000000 to 640x480@60.000000
SwitchRes: Resolution change from 640x480@60.000000 to 256x240@60.000000
SwitchRes: Resolution change from 256x240@60.000000 to 320x240@60.000000
SwitchRes: Resolution change from 320x240@60.000000 to 256x240@60.000000
SwitchRes: Resolution change from 256x240@60.000000 to 640x480@60.000000
SwitchRes: Resolution change from 640x480@60.000000 to 256x240@60.000000
SwitchRes: Resolution change from 256x240@60.000000 to 320x480@60.000000
SwitchRes: Resolution change from 320x480@60.000000 to 320x240@60.000000
SwitchRes: Resolution change from 320x240@60.000000 to 320x480@60.000000
SwitchRes: Resolution change from 320x480@60.000000 to 320x240@60.000000
This log is exemplary for a lot of PSX games, they switch screenmodes a lot, showing the benefit of using a "super resolution" to minimize the number of screen switches and bring the emulation experience on our beloved CRTs even more close to the real thing
.
Now the only thing is how do I get GM to choose between 2560x240_60Hz and 2560x480_60Hz
(interlaced) mode appropriately when the driver switches between progressive and interlaced mode? Since currently we're forcing 2560x240_60 through the resolution parameter this will not work. I guess it would need some additional logic in GM, maybe something similar to the crt_range functionality?
P.S. I don't see the 512x240 and 368x240 screenmodes used very often, so for most usage I guess the "super resolutions" of 1280x240 and 1280x480i would do for the PSX driver. Performance wise for older cards that could have some benefits also.