diff -Nur a/core/hw/pvr/Renderer_if.cpp b/core/hw/pvr/Renderer_if.cpp --- a/core/hw/pvr/Renderer_if.cpp 2015-08-27 12:17:34.719561251 -0300 +++ b/core/hw/pvr/Renderer_if.cpp 2015-08-27 12:21:45.917501578 -0300 @@ -187,6 +187,7 @@ bool rend_frame(TA_context* ctx, bool draw_osd) { bool proc = renderer->Process(ctx); + FinishRender(_pvrrc); #if !defined(TARGET_NO_THREADS) re.Set(); #endif @@ -213,7 +214,7 @@ bool do_swp = rend_frame(_pvrrc, true); //clear up & free data .. - FinishRender(_pvrrc); + tactx_Recycle(_pvrrc); _pvrrc=0; return do_swp; @@ -267,6 +268,7 @@ #endif bool pend_rend = false; +extern TA_context* rqueue; void rend_resize(int width, int height) { renderer->Resize(width, height); @@ -275,6 +277,10 @@ void rend_start_render() { + if (rqueue) { + rend_end_render(); + } + pend_rend = false; bool is_rtt=(FB_W_SOF1& 0x1000000)!=0; TA_context* ctx = tactx_Pop(CORE_CURRENT_CTX); diff -Nur a/core/hw/pvr/ta_ctx.cpp b/core/hw/pvr/ta_ctx.cpp --- a/core/hw/pvr/ta_ctx.cpp 2015-08-27 12:17:34.720561259 -0300 +++ b/core/hw/pvr/ta_ctx.cpp 2015-08-27 12:23:24.614248467 -0300 @@ -153,8 +153,6 @@ mtx_rqueue.Lock(); rqueue = 0; mtx_rqueue.Unlock(); - - tactx_Recycle(ctx); frame_finished.Set(); }