]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Removed more unneeded graphics subsystem resets when Amiga side mode changes but...
authorToni Wilen <twilen@winuae.net>
Sat, 4 Nov 2023 13:58:25 +0000 (15:58 +0200)
committerToni Wilen <twilen@winuae.net>
Sat, 4 Nov 2023 13:58:25 +0000 (15:58 +0200)
od-win32/direct3d11.cpp
od-win32/gdirender.cpp
od-win32/picasso96_win.cpp
od-win32/win32gfx.cpp

index abd5df2f948fa556213d05b15d234764566757bf..9a1c6b7aa7d66b31dcc7b9dba6cb6ce6433a7440 100644 (file)
@@ -4219,6 +4219,8 @@ static const TCHAR *xD3D11_init(HWND ahwnd, int monid, int w_w, int w_h, int dep
                struct d3d11struct *d3d = &d3d11data[monid];
                if (xD3D11_initvals(ahwnd, monid, w_w, w_h, w_w, w_h, depth, freq, mmulth, mmultv, true)) {
                        d3d->fsresizedo = true;
+               } else {
+                       *errp = -1;
                }
                return NULL;
        }
index 925d7cd22e5208932fd67e3bca93c1bfc300b2b6..c1b6b2dd6ffad5037b5187d0e83adc73a218f3ae 100644 (file)
@@ -442,7 +442,7 @@ static const TCHAR *gdi_init(HWND ahwnd, int monid, int w_w, int w_h, int depth,
        struct gdistruct *gdi = &gdidata[monid];
 
        if (isfullscreen() > 0) {
-               *errp = -1;
+               *errp = 2;
                return _T("GDI fullscreen not supported");
        }
 
index ad7759dac2105bf660232ab0259d89fe85b4c4ed..54ce718f5eee3857dd95f8a2a9f619e6b18e2f4a 100644 (file)
@@ -1088,7 +1088,7 @@ static void setconvert(int monid)
        if (vidinfo->host_mode != vidinfo->ohost_mode || state->RGBFormat != vidinfo->orgbformat) {
                write_log (_T("RTG conversion: Depth=%d HostRGBF=%d P96RGBF=%d Mode=%d/%d\n"),
                        picasso_vidinfo[monid].pixbytes, vidinfo->host_mode, state->RGBFormat, vidinfo->picasso_convert[0], vidinfo->picasso_convert[1]);
-               if (vidinfo->host_mode != vidinfo->ohost_mode && currprefs.win32_rtgmatchdepth) {
+               if (vidinfo->host_mode != vidinfo->ohost_mode && isfullscreen() > 0 && currprefs.win32_rtgmatchdepth) {
                        state->ModeChanged = true;
                }
                vidinfo->ohost_mode = vidinfo->host_mode;
@@ -3138,7 +3138,7 @@ static uae_u32 REGPARAM2 picasso_SetGC (TrapContext *ctx)
        state->VirtualHeight = state->Height; /* in case SetPanning doesn't get called */
 
        uae_u8 d = trap_get_byte(ctx, modeinfo + PSSO_ModeInfo_Depth);
-       if (d != state->GC_Depth) {
+       if (d != state->GC_Depth && isfullscreen() > 0 && currprefs.win32_rtgmatchdepth) {
                state->ModeChanged = true;
        }
        state->GC_Depth = d;
index 11cf09618c9a1624134cfbc557ddbbc78cb7da34..95c0f95f2dde52bc59648ad35bde1c1505d94e35 100644 (file)
@@ -554,7 +554,6 @@ static void display_param_init(struct AmigaMonitor *mon)
        if (!wait_vblank_display || !wait_vblank_display->HasAdapterData) {
                write_log(_T("Selected display mode does not have adapter data!\n"));
        }
-       Sleep(10);
        scanlinecalibrating = true;
        target_calibrate_spin();
        scanlinecalibrating = false;
@@ -3737,7 +3736,9 @@ static int create_windows(struct AmigaMonitor *mon)
                        mon->currentmode.native_width = rc.right - rc.left;
                        mon->currentmode.native_height = rc.bottom - rc.top;
                }
-               flags |= currprefs.win32_main_alwaysontop ? WS_EX_TOPMOST : 0;
+               if (currprefs.gfx_api < 2) {
+                       flags |= currprefs.win32_main_alwaysontop ? WS_EX_TOPMOST : 0;
+               }
 
                if (!borderless) {
                        RECT rc2;
@@ -3920,11 +3921,13 @@ static BOOL doInit(struct AmigaMonitor *mon)
 {
        int tmp_depth;
        int ret = 0;
+       bool modechanged;
 
 retry:
        struct vidbuf_description *avidinfo = &adisplays[mon->monitor_id].gfxvidinfo;
        struct amigadisplay *ad = &adisplays[mon->monitor_id];
 
+       modechanged = true;
        if (wasfullwindow_a == 0)
                wasfullwindow_a = currprefs.gfx_apmode[0].gfx_fullscreen == GFX_FULLWINDOW ? 1 : -1;
        if (wasfullwindow_p == 0)
@@ -4046,8 +4049,8 @@ retry:
                int errv = 0;
                const TCHAR *err = D3D_init(mon->hAmigaWnd, mon->monitor_id, mon->currentmode.native_width, mon->currentmode.native_height,
                        mon->currentmode.current_depth, &mon->currentmode.freq, fmh, fmv, &errv);
-               if (errv) {
-                       if (errv == -1 && currprefs.gfx_api == 0) {
+               if (errv > 0) {
+                       if (errv == 2 && currprefs.gfx_api == 0) {
                                write_log("Retrying D3D %s\n", err);
                                changed_prefs.gfx_api = currprefs.gfx_api = 2;
                                changed_prefs.color_mode = currprefs.color_mode = 5;
@@ -4069,7 +4072,7 @@ retry:
                                err = D3D_init(mon->hAmigaWnd, mon->monitor_id, mon->currentmode.native_width, mon->currentmode.native_height,
                                        mon->currentmode.current_depth, &mon->currentmode.freq, fmh, fmv, &errv);
                        }
-                       if (errv) {
+                       if (errv > 0) {
                                D3D_free(0, true);
                                if (isfullscreen() > 0) {
                                        int idx = mon->screen_is_picasso ? 1 : 0;
@@ -4094,24 +4097,30 @@ retry:
                                ret = -1;
                                goto oops;
                        }
+               } else if (errv < 0) {
+                       modechanged = false;
                }
                target_graphics_buffer_update(mon->monitor_id);
                updatewinrect(mon, true);
        }
-       init_colors(mon->monitor_id);
 
        mon->screen_is_initialized = 1;
 
-       display_param_init(mon);
+       if (modechanged) {
+               init_colors(mon->monitor_id);
+               display_param_init(mon);
+               createstatusline(mon->hAmigaWnd, mon->monitor_id);
+       }
+
 
-       createstatusline(mon->hAmigaWnd, mon->monitor_id);
        picasso_refresh(mon->monitor_id);
 #ifdef RETROPLATFORM
-       rp_set_hwnd_delayed ();
+       rp_set_hwnd_delayed();
 #endif
 
-       if (isfullscreen () != 0)
+       if (isfullscreen () != 0) {
                setmouseactive(mon->monitor_id, -1);
+       }
 
        osk_setup(mon->monitor_id, -2);