From e433a6d80e392ed9f72556854fb228c8432849d4 Mon Sep 17 00:00:00 2001 From: rogerman Date: Mon, 4 Feb 2019 23:40:15 -0800 Subject: [PATCH] SoftRasterizer: Fix a bug where some games would occasionally have unreliable rendering or precipitous performance drops. (Regression from commit e06d11f.) --- desmume/src/rasterize.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/desmume/src/rasterize.cpp b/desmume/src/rasterize.cpp index a6ddf0421..809132768 100755 --- a/desmume/src/rasterize.cpp +++ b/desmume/src/rasterize.cpp @@ -1724,6 +1724,8 @@ SoftRasterizerRenderer::SoftRasterizerRenderer() _deviceInfo.maxAnisotropy = 1.0f; _deviceInfo.maxSamples = 0; + _clippedPolyList = (CPoly *)malloc_alignedCacheLine(POLYLIST_SIZE * 2 * sizeof(CPoly)); + _task = NULL; _debug_drawClippedUserPoly = -1; @@ -1832,6 +1834,9 @@ SoftRasterizerRenderer::~SoftRasterizerRenderer() delete this->_framebufferAttributes; this->_framebufferAttributes = NULL; + + free_aligned(this->_clippedPolyList); + this->_clippedPolyList = NULL; } void SoftRasterizerRenderer::__InitTables() @@ -2011,7 +2016,7 @@ Render3DError SoftRasterizerRenderer::BeginRender(const GFX3D &engine) this->currentRenderState = (GFX3D_State *)&engine.renderState; this->_clippedPolyCount = engine.clippedPolyCount; this->_clippedPolyOpaqueCount = engine.clippedPolyOpaqueCount; - this->_clippedPolyList = engine.clippedPolyList; + memcpy(this->_clippedPolyList, engine.clippedPolyList, this->_clippedPolyCount * sizeof(CPoly)); const bool doMultithreadedStateSetup = (this->_threadCount >= 2);