diff options
author | Tim Rowley <[email protected]> | 2017-07-06 13:16:18 -0500 |
---|---|---|
committer | Tim Rowley <[email protected]> | 2017-07-06 15:01:00 -0500 |
commit | bab03c06fc79ec5624982777684d0c5f123c127c (patch) | |
tree | d4fd3b19abf9bfe55ba11d2474998dd7f1e9e7e8 | |
parent | 1f0680b51ef445a06f990684142f52286ce4a314 (diff) |
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: [email protected]
Reviewed-by: Bruce Cherniak <[email protected]>
-rw-r--r-- | src/gallium/drivers/swr/rasterizer/core/api.cpp | 6 | ||||
-rw-r--r-- | src/gallium/drivers/swr/rasterizer/core/threads.cpp | 4 |
2 files changed, 5 insertions, 5 deletions
diff --git a/src/gallium/drivers/swr/rasterizer/core/api.cpp b/src/gallium/drivers/swr/rasterizer/core/api.cpp index d3d80e4a789..087a24a95ed 100644 --- a/src/gallium/drivers/swr/rasterizer/core/api.cpp +++ b/src/gallium/drivers/swr/rasterizer/core/api.cpp @@ -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. @@ -363,7 +363,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(); @@ -388,7 +388,7 @@ void SwrDestroyContext(HANDLE hContext) } delete[] pContext->ppScratch; - delete[] pContext->pStats; + AlignedFree(pContext->pStats); delete(pContext->pHotTileMgr); diff --git a/src/gallium/drivers/swr/rasterizer/core/threads.cpp b/src/gallium/drivers/swr/rasterizer/core/threads.cpp index e03632b443b..36710bf0da5 100644 --- a/src/gallium/drivers/swr/rasterizer/core/threads.cpp +++ b/src/gallium/drivers/swr/rasterizer/core/threads.cpp @@ -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) @@ -986,7 +986,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); } |