From: Toni Wilen Date: Sat, 4 Nov 2023 13:58:25 +0000 (+0200) Subject: Removed more unneeded graphics subsystem resets when Amiga side mode changes but... X-Git-Tag: 5.1.0~63 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=28cab93533fb45cf826b237002cd67f419895ad6;p=francis%2Fwinuae.git Removed more unneeded graphics subsystem resets when Amiga side mode changes but mode change does not require any resets. --- diff --git a/od-win32/direct3d11.cpp b/od-win32/direct3d11.cpp index abd5df2f..9a1c6b7a 100644 --- a/od-win32/direct3d11.cpp +++ b/od-win32/direct3d11.cpp @@ -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; } diff --git a/od-win32/gdirender.cpp b/od-win32/gdirender.cpp index 925d7cd2..c1b6b2dd 100644 --- a/od-win32/gdirender.cpp +++ b/od-win32/gdirender.cpp @@ -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"); } diff --git a/od-win32/picasso96_win.cpp b/od-win32/picasso96_win.cpp index ad7759da..54ce718f 100644 --- a/od-win32/picasso96_win.cpp +++ b/od-win32/picasso96_win.cpp @@ -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; diff --git a/od-win32/win32gfx.cpp b/od-win32/win32gfx.cpp index 11cf0961..95c0f95f 100644 --- a/od-win32/win32gfx.cpp +++ b/od-win32/win32gfx.cpp @@ -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);