From: Toni Wilen Date: Mon, 12 Feb 2018 19:28:18 +0000 (+0200) Subject: Multithreaded RTG didn't update screen when only hardware sprite moved or changed. X-Git-Tag: 4000~188 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=4448744ff4c4549a884bc367b01f749dfe6e6b9e;p=francis%2Fwinuae.git Multithreaded RTG didn't update screen when only hardware sprite moved or changed. --- diff --git a/od-win32/picasso96_win.cpp b/od-win32/picasso96_win.cpp index cb6aa220..b5086e2e 100644 --- a/od-win32/picasso96_win.cpp +++ b/od-win32/picasso96_win.cpp @@ -817,10 +817,7 @@ static bool rtg_render (void) } else { bool full = full_refresh > 0; if (uaegfx_active) { - if (currprefs.rtg_multithread) { - write_comm_pipe_int(render_pipe, rtg_index, 0); - flushed = true; - } else { + if (!currprefs.rtg_multithread) { flushed = picasso_flushpixels(rtg_index, gfxmem_banks[rtg_index]->start + natmem_offset, picasso96_state.XYOffset - gfxmem_banks[rtg_index]->start); } } else { @@ -829,7 +826,11 @@ static bool rtg_render (void) if (full_refresh > 0) full_refresh--; } - flushed |= gfxboard_vsync_handler(full); + bool flushed2 = gfxboard_vsync_handler(full); + if (currprefs.rtg_multithread && uaegfx_active) { + write_comm_pipe_int(render_pipe, rtg_index | (flushed2 ? 0x80000000 : 0), 0); + } + flushed |= flushed2; } return flushed; } @@ -4621,11 +4622,15 @@ static void *render_thread(void *v) render_thread_state = 1; for (;;) { int idx = read_comm_pipe_int_blocking(render_pipe); + bool flush = (idx & 0x80000000) != 0; if (idx == -1) break; if (picasso_on && picasso_requested_on) { lockrtg(); - picasso_flushpixels(idx, gfxmem_banks[idx]->start + natmem_offset, picasso96_state.XYOffset - gfxmem_banks[idx]->start); + if (!picasso_flushpixels(idx, gfxmem_banks[idx]->start + natmem_offset, picasso96_state.XYOffset - gfxmem_banks[idx]->start)) { + if (flush) + gfx_unlock_picasso(true); + } unlockrtg(); } }