swr/rast: Correctly allocate SWR_STATS memory as cacheline aligned

Cacheline alignment of SWR_STATS to prevent sharing of cachelines
between threads (performance).

Gets rid of gcc-7.1 warning about using c++17's over-aligned new
feature.

Cc: mesa-stable@lists.freedesktop.org

Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
(cherry picked from commit bab03c06fc)
This commit is contained in:
Tim Rowley 2017-07-06 13:16:18 -05:00 committed by Andres Gomez
parent 7bd9eccbfe
commit d856e97d92
2 changed files with 5 additions and 5 deletions

View file

@ -108,7 +108,7 @@ HANDLE SwrCreateContext(
CreateThreadPool(pContext, &pContext->threadPool);
pContext->ppScratch = new uint8_t*[pContext->NumWorkerThreads];
pContext->pStats = new SWR_STATS[pContext->NumWorkerThreads];
pContext->pStats = (SWR_STATS*)AlignedMalloc(sizeof(SWR_STATS) * pContext->NumWorkerThreads, 64);
#if defined(KNOB_ENABLE_AR)
// Setup ArchRast thread contexts which includes +1 for API thread.
@ -367,7 +367,7 @@ void SwrDestroyContext(HANDLE hContext)
// free the fifos
for (uint32_t i = 0; i < KNOB_MAX_DRAWS_IN_FLIGHT; ++i)
{
delete[] pContext->dcRing[i].dynState.pStats;
AlignedFree(pContext->dcRing[i].dynState.pStats);
delete pContext->dcRing[i].pArena;
delete pContext->dsRing[i].pArena;
pContext->pMacroTileManagerArray[i].~MacroTileMgr();
@ -392,7 +392,7 @@ void SwrDestroyContext(HANDLE hContext)
}
delete[] pContext->ppScratch;
delete[] pContext->pStats;
AlignedFree(pContext->pStats);
delete(pContext->pHotTileMgr);

View file

@ -363,7 +363,7 @@ INLINE void UpdateClientStats(SWR_CONTEXT* pContext, uint32_t workerId, DRAW_CON
}
DRAW_DYNAMIC_STATE& dynState = pDC->dynState;
SWR_STATS stats{ 0 };
OSALIGNLINE(SWR_STATS) stats{ 0 };
// Sum up stats across all workers before sending to client.
for (uint32_t i = 0; i < pContext->NumWorkerThreads; ++i)
@ -972,7 +972,7 @@ void CreateThreadPool(SWR_CONTEXT* pContext, THREAD_POOL* pPool)
// Initialize DRAW_CONTEXT's per-thread stats
for (uint32_t dc = 0; dc < KNOB_MAX_DRAWS_IN_FLIGHT; ++dc)
{
pContext->dcRing[dc].dynState.pStats = new SWR_STATS[numThreads];
pContext->dcRing[dc].dynState.pStats = (SWR_STATS*)AlignedMalloc(sizeof(SWR_STATS) * numThreads, 64);
memset(pContext->dcRing[dc].dynState.pStats, 0, sizeof(SWR_STATS) * numThreads);
}