diff --git a/core/hw/pvr/ta_ctx.h b/core/hw/pvr/ta_ctx.h index 40f9b6dc1..fbc08df9d 100644 --- a/core/hw/pvr/ta_ctx.h +++ b/core/hw/pvr/ta_ctx.h @@ -184,12 +184,12 @@ struct TA_context { tad.Reset((u8*)OS_aligned_malloc(32, 8*1024*1024)); - rend.verts.InitBytes(1024*1024,&rend.Overrun); //up to 1 mb of vtx data/frame = ~ 38k vtx/frame - rend.idx.Init(60*1024,&rend.Overrun); //up to 60K indexes ( idx have stripification overhead ) + rend.verts.InitBytes(2*1024*1024,&rend.Overrun); //up to 2 MB of vtx data/frame = ~ 75k vtx/frame + rend.idx.Init(120*1024,&rend.Overrun); //up to 120K indexes ( idx have stripification overhead ) rend.global_param_op.Init(4096,&rend.Overrun); rend.global_param_pt.Init(4096,&rend.Overrun); rend.global_param_mvo.Init(4096,&rend.Overrun); - rend.global_param_tr.Init(4096,&rend.Overrun); + rend.global_param_tr.Init(8192,&rend.Overrun); rend.modtrig.Init(8192,&rend.Overrun); diff --git a/core/hw/pvr/ta_vtx.cpp b/core/hw/pvr/ta_vtx.cpp index ccd750c9d..0177d9f9e 100644 --- a/core/hw/pvr/ta_vtx.cpp +++ b/core/hw/pvr/ta_vtx.cpp @@ -1490,11 +1490,14 @@ bool ta_parse_vdrc(TA_context* ctx) rv = true; //whatever } + bool overrun = ctx->rend.Overrun; vd_ctx->rend = vd_rc; vd_ctx = 0; ctx->rend_inuse.Unlock(); + ctx->rend.Overrun = overrun; + return rv; } diff --git a/core/rend/gles/gles.cpp b/core/rend/gles/gles.cpp index 80eaea832..b8f6b9634 100755 --- a/core/rend/gles/gles.cpp +++ b/core/rend/gles/gles.cpp @@ -1420,7 +1420,10 @@ bool ProcessFrame(TA_context* ctx) CollectCleanup(); - return true; + if (ctx->rend.Overrun) + printf("ERROR: TA context overrun\n"); + + return !ctx->rend.Overrun; } bool RenderFrame()