]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Optional native/RTG autoswitch disable.
authorToni Wilen <twilen@winuae.net>
Wed, 9 Jul 2025 15:55:43 +0000 (18:55 +0300)
committerToni Wilen <twilen@winuae.net>
Wed, 9 Jul 2025 15:55:43 +0000 (18:55 +0300)
cfgfile.cpp
gfxboard.cpp
include/gfxboard.h
include/options.h
od-win32/resources/resource.h
od-win32/resources/winuae.rc
od-win32/win32gui.cpp

index d8810b3721fe00d3604f7fca168f55ecfd728793..42ae3c6e285a1ba350349100096eadffc513c98b 100644 (file)
@@ -2905,6 +2905,11 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
                                        _tcscat(tmp2, _T(","));
                                _stprintf(tmp2 + _tcslen(tmp2), _T("monitor=%d"), rbc->monitor_id);
                        }
+                       if (!rbc->autoswitch) {
+                               if (tmp2)
+                                       _tcscat(tmp2, _T(","));
+                               _tcscat(tmp2 + _tcslen(tmp2), _T("noautoswitch"));
+                       }
                        if (tmp2[0]) {
                                if (i > 0)
                                        _stprintf(tmp, _T("gfxcard%d_options"), i + 1);
@@ -6265,6 +6270,10 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCH
                                rbc->monitor_id = _tstol(s);
                                xfree(s);
                        }
+                       rbc->autoswitch = !cfgfile_option_find(value, _T("noautoswitch"));
+                       if (cfgfile_option_find(value, _T("autoswitch"))) {
+                               rbc->autoswitch = true;
+                       }
                        return 1;
                }
                if (i > 0)
index 18429635824a44a3ce741c038577eb0b2d42381a..1682921d87d1bf48f2f8e2afaf1ea8824cf304b1 100644 (file)
@@ -1743,7 +1743,7 @@ void gfxboard_vsync_handler(bool full_redraw_required, bool redraw_required)
                                        }
                                }
 #endif
-                               if (!gb->board->hasswitcher && gb->vram) {
+                               if ((!gb->board->hasswitcher && gb->rbc->autoswitch) && gb->vram) {
                                        bool svga_on(void *p);
                                        bool on = svga_on(gb->pcemobject2);
                                        set_monswitch(gb, on);
@@ -4727,6 +4727,15 @@ int gfxboard_get_configtype(struct rtgboardconfig *rbc)
        return gb->board->configtype;
 }
 
+bool gfxboard_get_switcher(struct rtgboardconfig *rbc)
+{
+       int type = rbc->rtgmem_type;
+       if (type < GFXBOARD_HARDWARE)
+               return true;
+       const struct gfxboard *b = find_board(type);
+       return b->hasswitcher;
+}
+
 bool gfxboard_need_byteswap (struct rtgboardconfig *rbc)
 {
        int type = rbc->rtgmem_type;
index 9aa8ec7fec48652f1c46c8e8e0dbdf4048e8f548..c298c8c4784f82aa6390f27a184a19d7f237b4a4 100644 (file)
@@ -16,6 +16,7 @@ extern int gfxboard_get_vram_min (struct rtgboardconfig*);
 extern int gfxboard_get_vram_max (struct rtgboardconfig*);
 extern bool gfxboard_need_byteswap (struct rtgboardconfig*);
 extern int gfxboard_get_autoconfig_size(struct rtgboardconfig*);
+extern bool gfxboard_get_switcher(struct rtgboardconfig *rbc);
 extern double gfxboard_get_vsync (void);
 extern void gfxboard_refresh (int monid);
 extern int gfxboard_toggle (int monid, int mode, int msg);
index fffe17ecb774587f1ed362a978fd182a06f89d6c..48bdcd2c4e73e0feb797f433bffe40f826b7ff73 100644 (file)
@@ -440,6 +440,7 @@ struct rtgboardconfig
        uae_u32 rtgmem_size;
        int device_order;
        int monitor_id;
+       bool autoswitch;
 };
 struct boardloadfile
 {
index 70aaf734497dfb5ef81c54fe89f140071b7d3624..67cfd9679af0e18b9b13525001f49f4397718fa4 100644 (file)
 #define IDC_RTG_INTEGERSCALE            1801
 #define IDC_INFOBOX_TEXT2               1802
 #define IDC_INPUTMAPOUTM                1802
+#define IDC_RTG_SWITCHER                1802
 #define IDC_INFOBOX_TEXT1               1803
 #define IDC_INFOBOX_TEXT3               1804
 #define IDC_CD_EJECT                    1804
index 1fbfc0ddf4e40da452fcffcd80b00740e10c96ac..493533dcc522e0a54fc64263086215fd95363f7b 100644 (file)
@@ -1263,12 +1263,12 @@ BEGIN
     CONTROL         "",IDC_P96MEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,88,94,103,20
     EDITTEXT        IDC_P96RAM,201,97,40,12,ES_CENTER | ES_READONLY
     CONTROL         "Scale if smaller than display size setting",IDC_RTG_SCALE,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,130,175,10
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,130,162,10
     CONTROL         "Always scale in windowed mode",IDC_RTG_SCALE_ALLOW,
                     "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,143,162,10
     CONTROL         "Always center",IDC_RTG_CENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,156,162,10
     CONTROL         "Integer scaling",IDC_RTG_INTEGERSCALE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,169,161,10
-    CONTROL         "Multithreaded",IDC_RTG_THREAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,143,83,10
+    CONTROL         "Multithreaded",IDC_RTG_THREAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,143,96,10
     CONTROL         "Hardware sprite emulation",IDC_RTG_HWSPRITE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,156,96,10
     CONTROL         "Hardware vertical blank interrupt",IDC_RTG_VBINTERRUPT,
                     "Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,169,129,10
@@ -1284,6 +1284,7 @@ BEGIN
     COMBOBOX        IDC_RTG_BUFFERCNT,153,227,84,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
     CTEXT           "Aspect ratio:",IDC_STATIC,282,212,83,10,SS_CENTERIMAGE
     COMBOBOX        IDC_RTG_SCALE_ASPECTRATIO,282,227,84,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+    CONTROL         "Native/RTG autoswitch",IDC_RTG_SWITCHER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,130,95,10
 END
 
 IDD_INPUTMAP DIALOGEX 0, 0, 421, 293
index 1b6b5db66ecd209d92d839298596f87e25c13afc..bda770753d189fe6c5ebd8face3f74dd2e75800e 100644 (file)
@@ -11563,6 +11563,7 @@ static INT_PTR CALLBACK Expansion2DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LP
 
 static void enable_for_expansiondlg(HWND hDlg)
 {
+       struct rtgboardconfig *rbc = &workprefs.rtgboards[gui_rtg_index];
        int z3 = true;
        int en;
 
@@ -11600,6 +11601,8 @@ static void enable_for_expansiondlg(HWND hDlg)
        ew(hDlg, IDC_RTG_VBINTERRUPT, rtg3);
        ew(hDlg, IDC_RTG_THREAD, rtg3 && en);
        ew(hDlg, IDC_RTG_HWSPRITE, rtg3);
+
+       ew(hDlg, IDC_RTG_SWITCHER, rbc->rtgmem_size > 0 && !gfxboard_get_switcher(rbc));
 }
 
 static void values_to_expansiondlg(HWND hDlg)
@@ -11712,6 +11715,7 @@ static void values_to_expansiondlg(HWND hDlg)
        CheckDlgButton(hDlg, IDC_RTG_VBINTERRUPT, workprefs.rtg_hardwareinterrupt);
        CheckDlgButton(hDlg, IDC_RTG_HWSPRITE, workprefs.rtg_hardwaresprite);
        CheckDlgButton(hDlg, IDC_RTG_THREAD, workprefs.rtg_multithread);
+       CheckDlgButton(hDlg, IDC_RTG_SWITCHER, rbc->rtgmem_size > 0 && (rbc->autoswitch || gfxboard_get_switcher(rbc) || rbc->rtgmem_type < GFXBOARD_HARDWARE));
 
        xSendDlgItemMessage(hDlg, IDC_RTG_SCALE_ASPECTRATIO, CB_SETCURSEL,
                                           (workprefs.win32_rtgscaleaspectratio == 0) ? 0 :
@@ -11863,6 +11867,12 @@ static INT_PTR CALLBACK ExpansionDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LP
                        case IDC_RTG_THREAD:
                                workprefs.rtg_multithread = ischecked(hDlg, IDC_RTG_THREAD);
                                break;
+                       case IDC_RTG_SWITCHER:
+                               {
+                                       struct rtgboardconfig *rbc = &workprefs.rtgboards[gui_rtg_index];
+                                       rbc->autoswitch = ischecked(hDlg, IDC_RTG_SWITCHER);
+                                       break;
+                               }
                        }
                        if (HIWORD (wParam) == CBN_SELENDOK || HIWORD (wParam) == CBN_KILLFOCUS || HIWORD (wParam) == CBN_EDITCHANGE)  {
                                uae_u32 mask = workprefs.picasso96_modeflags;