Software Support > GroovyMAME

Groovymame 0.246 - Switchres 2.002l

(1/58) > >>

Calamity:
What is GroovyMAME?

GroovyMAME is a M.A.M.E. fork aimed at CRT monitors, with a strong focus on CRT preservation, since this is the only display technology that accurately replicates the genuine video game experience. However you can use GroovyMAME to alleviate some of the annoyances associated to emulation on LCD displays, specially for those models which are capable of refreshing at custom rates.

GroovyMAME's main features as compared to official MAME:


* Improved video and audio synchronization that achieves truly smooth scrolling, tearing-free video and hiccup-free audio.

* Automatic generation of custom video timings for CRT monitors.

* Reduced input latency
Download:

Always get the most recent GroovyMAME's package from our github's site.

Important: in Windows, just unzip and run! Ignore instructions about downloading official MAME and replacing the binary.


What is Switchres 2.0?

Switchres 2.0 is a modeline generation engine for emulation. The Switchres project has become an independent library, and with it, GroovyMAME has been reworked, to hopefully achieve a cleaner and more robust integration.

New features:


* Multi-monitor support: Switchres 2.0 can handle up to 4 displays simultaneously, each with its own separate configuration. Default Switchres settings for all displays are read from MAME's usual .ini system, but now you can create specific per-display .ini files, named display0.ini, display1.ini, etc., that allow independent configuration for each display. Vertical synchronization (-syncrefresh) is always done to display #0.

Most importantly, the user can decide which exact monitor the output will go to in a multi-monitor setup. While this is not a new feature, it now works reliably on both Windows and Linux. As usual, set the option -screen <screen> for that. Remind that in Windows <screen> is typically \\.\DISPLAY1, \\.\DISPLAY2, etc., while in Linux (SDL2) you have screen0, screen1, etc.


* Automatic LCD monitor preset: now -monitor lcd dynamically creates a fixed resolution preset based on your reported monitor timings, so GM can adjust output refresh rate to match game's refresh on supported graphic cards (Windows: AMD; Linux: AMD, Nvidia, Intel), within the Hz range defined by -lcd_range <min_refresh-max_refresh>. In Windows, it requires -allow_hw_refresh.

New options:

All platforms

* -switchres_backend <option>: Choose between different supported backends: ati, adl, powerstrip, xrandr, drmkms. Default (recommended) setting is auto. Notice that drmkms doesn't work yet but is expected to be a real alternative as SDL2 support gets better.


* -[no]modesetting: sets video modes directly bypassing the renderer backend. This is useful when the backend doesn't handle mode switching natively (BGFX) or uses a cached mode list so it doesn't see the modes we create at runtime (SDL2). Note that while mode switching on BGFX is now possible, synchronization with -frame_delay is still only supported on the following backends: d3d (Windows) and opengl (Linux).


* -[no]pixel_precision: greatly improves horizontal centering of video modes, by calculating horizontal borders with 1-pixel precision, instead of the default 8-pixels blocks that were required in the past.
Windows

* -[no]allow_hw_refresh: dynamically adds new modes or updates existing ones just like VMMaker does, even on stock AMD drivers. This feature is experimental and is disabled by default. It has the following limitations and problems:

* Synchronization is not perfect yet and the new modes may not always be ready on time for mode switching, causing a wrong display output.

* A plug-n-play audio notification will be present on startup and exit, if the explorer shell is used.

* Refreshing the hardware is an expensive task that takes time, specially if the app has already entered fullscreen mode. This makes it unpractical for games that switch video modes more than once, unless -nochangeres is used, or alternatively super resolutions are forced (-resolution 2560x0) so that effective mode changes are neutralized (the later trick won't help for games that switch between interlaced and progressive).

* When used on stock AMD drivers instead of CRT Emudriver, usual limitations apply: no support for low resolutions (below 640x480) nor low dotclocks. Not a problem however if you're using a 31 kHz monitor.
Still, this feature is interesting enough to be provided as an option, and is a requirement for the new automatic lcd preset (as it's what makes it possible to refresh the current desktop mode).

Linux/X11

* -[no]screen_compositing: adjusts the crtc position each time a new video mode is set, maintaining the relative position of screens in a multi-monitor setup.


* -[no]screen_reordering: stacks the screens vertically on startup to allow each screen to freely resize up to the maximum width. Useful to avoid video glitches when using super-resolutions. -screen_reordering overrides -screen_compositing.
Dropped features:


* Magic resolutions (Windows XP). This old technique relied on a Windows XP's feature that was abolished on newer Windows versions and is no longer possible. It has been replaced in practice by super resolutions.

Dropped options:


* -orientation <option>: This option has been removed since experience has proved it caused confusion to new users because it collided with MAME's native rotation options. So now, all orientation settings are handled through MAME's options. Leave the default settings for an horizontally mounted monitor, and use either -autoror or -autorol for a vertical one.


* -connector <option> This option was meant to achieve multi-monitor support on Linux but was never properly wired and now has been superseded by the more correct integration with MAME's -screen option.

Calamity:
What's new in Switchres 2.002l (August 2022)

- Added controls for geometry adjustment. These are available both as command-line/.ini options and in-game sliders for interactive adjustment:

  * H-size [0.5 - 1.5]: option -h_size
  * H-shift [positive or negative, in pixels]: option -h_shift
  * V-shift [positive or negative, in lines]: option -v_shift

   As a reminder: V-size is not possible from software.

What's new in Switchres 2.002k (July 2022)

- [Linux] Add low latency (drm) vsync to sdl2 video backend (-video accel).

- Properly apply -keepaspect on rotated targets with -autostretch.


What's new in Switchres 2.002j (June 2022)

- Improve UI text drawing performance. [Oomek]

- Another fix to the scaling algorithm (hopefully the last needed).


What's new in Switchres 2.002i (April 2022)

- Fixed wrong scaling of vertical games in certain cases.

- [Linux] Internal changes to support libdrm hook (experimental feature).


What's new in Switchres 2.002g (January 2022)

- New option -switchres_ini. If enabled, GroovyMAME will try to parse switchres.ini and use it for its configuration. Options priorities, in increasing order: mame.ini < switchres.ini < display#.ini < orientation.ini < ..... < command line.

- [Linux] Improved support for mode switching on KMS.

- [Linux] Fixes toggling fullscreen on/off (still imperfect but functional).


What's new in Switchres 2.002f (December 2021)

- [Linux] First release ever to support mode switching on KMS. It needs Substring's patched kernel and SDL2 (>=2.0.16) available on GroovyArcade's repository.


What's new in Switchres 2.002e (October 2021)

- Properly fix configuration saving from the ui.


What's new in Switchres 2.002d (October 2021)

- [Windows] Fix bug that caused interlaced modes to lock screen updates.

- Fix bug that caused an exception when saving configuration after doing changes from the ui.

- Make -vsync_offset slider setting not propagate between different games when launched from the ui.


What's new in Switchres 2.002c (September 2021)

- [Windows] Fixed bug that caused games using interlaced modes run at double speed.


What's new in Switchres 2.002b (June 2021)

- New option -[no]syncaudio: Make audio synchronization (resampling) optional. Default is enabled. Disable to avoid sound wobble with erratic emulation speeds (like that caused by frame delay on some systems).

- New option -[no]autostretch: Make auto stretching feature optional. Default is enabled, so GM will apply the scaling mode (fractional or integer) that best fits the situation.

- New option -[no]autofilter: Make auto filter optional. Default is enabled, so GM will apply bilinear filtering when fractional scaling or an interlaced mode are used.

- New option -[no]interlace_force_even: Calculate all vertical values of interlaced modes as even numbers. Required by AMD APU hardware on Linux

- [Windows] Implement asynchronous rendering through native D3D9ex api (replace for old multithreaded -triplebuffer). This mode is selected automatically by -autosync. You can force it manually with -waitvsync -nosyncrefresh.

- [Linux] New option -sync_mode <0-4>: In combination with -syncrefresh, select the synchronization mode that offers the lowest latency based for the specific video driver. The default value is 2, which gives good results for both amdgpu and radeon on X11 and kms mode. Other modes are provided that could be useful with other hardware/driver combination.


--- Code: ---sync   algorithm        amdgpu          radeon          radeon/kms      amdgpu/kms
mode
   0  -Swap(1)          perfect(1)      perfect         smooth          smooth
      -glFinish                                         lag 1 frame     lag 1 frame

   1  -Swap(0)          tearing         tearing         perfect         tearing/
      -drmWaitVBlank    perfect w/fd                                    stuttering
      -glFinish

   2  -Swap(1)          perfect(1)      perfect         perfect         perfect(1)
      -drmWaitVBlank
      -glFinish

   3  -drmWaitVBlank    tearing         perfect(2)      tearing         tearing
      -Swap(0)
      -glFinish
               
   4  -drmWaitVBlank    half speed      half speed      smooth          smooth
      -Swap(1)                                          lag 1 frame     lag 1 frame
      -glFinish

- Swap(x), x = Opegl swap interval (0 = immediate, 1 = v-sync)
(1) Low frame delay performance
(2) GM's pre-0.232 implementation
perfect = smooth + subframe latency

--- End code ---

Note: amdgpu on X11 has tearing with mode 1, however tearing can be removed with frame delay, and when done, it offers better performance than mode 2.


What's new in Switchres 2.002a (March 2021)

- Fixed crash on emulated systems with 2 or more screens.

- Correctly update game video information after machine initialization.

- Properly account for refresh scaling & black frame insertion with frame delay.

Calamity:
Placeholder

Calamity:
Placeholder

donluca:
First!  :afro:

Good stuff, I'm really interested in what other emulator developers will be able to do with the new standalone switchres... I might ping the blast'em developer about this...  :angel:

Navigation

[0] Message Index

[#] Next page

Go to full version