From: Toni Wilen Date: Wed, 11 Jul 2018 17:43:05 +0000 (+0300) Subject: Make sure RTG render thread does not have rtg lock at reset. X-Git-Tag: 4010~14 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=bbba85628b927ab35f74d3ce82c9c5d9c9d96bf8;p=francis%2Fwinuae.git Make sure RTG render thread does not have rtg lock at reset. --- diff --git a/include/xwin.h b/include/xwin.h index b03f0767..e1d631c1 100644 --- a/include/xwin.h +++ b/include/xwin.h @@ -165,7 +165,7 @@ struct vidbuf_description struct amigadisplay { - bool picasso_requested_on; + volatile bool picasso_requested_on; bool picasso_requested_forced_on; bool picasso_on; int picasso_redraw_necessary; diff --git a/od-win32/picasso96_win.cpp b/od-win32/picasso96_win.cpp index d0b1c97e..0f3223cd 100644 --- a/od-win32/picasso96_win.cpp +++ b/od-win32/picasso96_win.cpp @@ -4686,9 +4686,11 @@ static void *render_thread(void *v) struct amigadisplay *ad = &adisplays[monid]; if (ad->picasso_on && ad->picasso_requested_on) { lockrtg(); - struct picasso96_state_struct *state = &picasso96_state[monid]; - picasso_flushpixels(idx, gfxmem_banks[idx]->start + natmem_offset, state->XYOffset - gfxmem_banks[idx]->start, false); - ad->pending_render = true; + if (ad->picasso_requested_on) { + struct picasso96_state_struct *state = &picasso96_state[monid]; + picasso_flushpixels(idx, gfxmem_banks[idx]->start + natmem_offset, state->XYOffset - gfxmem_banks[idx]->start, false); + ad->pending_render = true; + } unlockrtg(); } } @@ -5091,6 +5093,8 @@ void picasso_reset(int monid) } } + lockrtg(); + rtg_index = -1; if (savestate_state != STATE_RESTORE) { uaegfx_base = 0; @@ -5101,9 +5105,17 @@ void picasso_reset(int monid) resetpalette(state); InitPicasso96(monid); } + if (is_uaegfx_active() && currprefs.rtgboards[0].monitor_id > 0) { close_rtg(currprefs.rtgboards[0].monitor_id); } + + for (int i = 0; i < MAX_AMIGADISPLAYS; i++) { + struct amigadisplay *ad = &adisplays[i]; + ad->picasso_requested_on = false; + } + + unlockrtg(); } void uaegfx_install_code (uaecptr start)