From ab6a65ba4fc963c8db3ad8754ba055b89dbf8299 Mon Sep 17 00:00:00 2001 From: Stefanos Kornilios Mitsis Poiitidis Date: Sun, 29 Dec 2024 21:15:18 +0200 Subject: [PATCH] Cull atomics if vbuf is nearly full --- vendor/librw/src/dc/rwdc.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/vendor/librw/src/dc/rwdc.cpp b/vendor/librw/src/dc/rwdc.cpp index fd5b47aa..c4e5c9cc 100644 --- a/vendor/librw/src/dc/rwdc.cpp +++ b/vendor/librw/src/dc/rwdc.cpp @@ -3219,6 +3219,15 @@ void pvr_poly_cxt_txr_fast(pvr_poly_hdr_t *hdr, pvr_list_t list, +size_t vertexBufferFree() { + size_t end = PVR_GET(PVR_TA_VERTBUF_END); + size_t pos = PVR_GET(PVR_TA_VERTBUF_POS); + + size_t free = end - pos; + + return free; +} + void defaultRenderCB(ObjPipeline *pipe, Atomic *atomic) { rw::Camera *cam = engine->currentCamera; @@ -3400,6 +3409,9 @@ void defaultRenderCB(ObjPipeline *pipe, Atomic *atomic) { // clipping performed per meshlet auto renderCB = [contextId, n] { + if (vertexBufferFree() < (128 * 1024)) { + return; + } const atomic_context_t* acp = &atomicContexts[contextId]; auto geo = acp->geo; auto mesh = geo->meshHeader->getMeshes() + n;