[Mesa-dev] [PATCH v2 12/19] swr: [rasterizer] rename _aligned_malloc to AlignedMalloc

Rowley, Timothy O timothy.o.rowley at intel.com
Tue May 17 23:53:36 UTC 2016


Mesa has a number of utility functions that would be nice to use, but the swr/rasterizer directory is intended to be usable standalone, so it has some duplication of common utilities.

-Tim

> On May 17, 2016, at 6:07 PM, Ian Romanick <idr at freedesktop.org> wrote:
> 
> Gallium already has os_malloc_aligned (in
> src/gallium/auxiliary/os/os_memory_stdc.h) for this purpose.  Does this
> duplication add anything?
> 
> On 05/17/2016 03:36 PM, Tim Rowley wrote:
>> ---
>> src/gallium/drivers/swr/rasterizer/common/os.h       | 19 +++++++++++++++++--
>> src/gallium/drivers/swr/rasterizer/core/api.cpp      | 16 ++++++++--------
>> src/gallium/drivers/swr/rasterizer/core/arena.h      |  4 ++--
>> src/gallium/drivers/swr/rasterizer/core/frontend.cpp |  8 ++++----
>> src/gallium/drivers/swr/rasterizer/core/ringbuffer.h |  4 ++--
>> src/gallium/drivers/swr/rasterizer/core/tilemgr.cpp  |  2 +-
>> src/gallium/drivers/swr/rasterizer/core/tilemgr.h    |  4 ++--
>> src/gallium/drivers/swr/swr_screen.cpp               |  8 ++++----
>> 8 files changed, 40 insertions(+), 25 deletions(-)
>> 
>> diff --git a/src/gallium/drivers/swr/rasterizer/common/os.h b/src/gallium/drivers/swr/rasterizer/common/os.h
>> index 1d68585..8b15670 100644
>> --- a/src/gallium/drivers/swr/rasterizer/common/os.h
>> +++ b/src/gallium/drivers/swr/rasterizer/common/os.h
>> @@ -49,6 +49,16 @@
>> 
>> #define PRAGMA_WARNING_POP() __pragma(warning(pop))
>> 
>> +static inline void *AlignedMalloc(size_t _Size, size_t _Alignment)
>> +{
>> +    return _aligned_malloc(_Size, _Alignment);
>> +}
>> +
>> +static inline void AlignedFree(void* p)
>> +{
>> +    return _aligned_free(p);
>> +}
>> +
>> #if defined(_WIN64)
>> #define BitScanReverseSizeT BitScanReverse64
>> #define BitScanForwardSizeT BitScanForward64
>> @@ -155,7 +165,7 @@ unsigned char _BitScanReverse(unsigned int *Index, unsigned int Mask)
>> }
>> 
>> inline
>> -void *_aligned_malloc(unsigned int size, unsigned int alignment)
>> +void *AlignedMalloc(unsigned int size, unsigned int alignment)
>> {
>>     void *ret;
>>     if (posix_memalign(&ret, alignment, size))
>> @@ -171,12 +181,17 @@ unsigned char _bittest(const LONG *a, LONG b)
>>     return ((*(unsigned *)(a) & (1 << b)) != 0);
>> }
>> 
>> +static inline
>> +void AlignedFree(void* p)
>> +{
>> +    free(p);
>> +}
>> +
>> #define GetCurrentProcessId getpid
>> #define GetCurrentThreadId gettid
>> 
>> #define CreateDirectory(name, pSecurity) mkdir(name, 0777)
>> 
>> -#define _aligned_free free
>> #define InterlockedCompareExchange(Dest, Exchange, Comparand) __sync_val_compare_and_swap(Dest, Comparand, Exchange)
>> #define InterlockedExchangeAdd(Addend, Value) __sync_fetch_and_add(Addend, Value)
>> #define InterlockedDecrement(Append) __sync_sub_and_fetch(Append, 1)
>> diff --git a/src/gallium/drivers/swr/rasterizer/core/api.cpp b/src/gallium/drivers/swr/rasterizer/core/api.cpp
>> index 3c25370..9d6f250 100644
>> --- a/src/gallium/drivers/swr/rasterizer/core/api.cpp
>> +++ b/src/gallium/drivers/swr/rasterizer/core/api.cpp
>> @@ -57,7 +57,7 @@ HANDLE SwrCreateContext(
>>     RDTSC_RESET();
>>     RDTSC_INIT(0);
>> 
>> -    void* pContextMem = _aligned_malloc(sizeof(SWR_CONTEXT), KNOB_SIMD_WIDTH * 4);
>> +    void* pContextMem = AlignedMalloc(sizeof(SWR_CONTEXT), KNOB_SIMD_WIDTH * 4);
>>     memset(pContextMem, 0, sizeof(SWR_CONTEXT));
>>     SWR_CONTEXT *pContext = new (pContextMem) SWR_CONTEXT();
>> 
>> @@ -67,8 +67,8 @@ HANDLE SwrCreateContext(
>>     pContext->dcRing.Init(KNOB_MAX_DRAWS_IN_FLIGHT);
>>     pContext->dsRing.Init(KNOB_MAX_DRAWS_IN_FLIGHT);
>> 
>> -    pContext->pMacroTileManagerArray = (MacroTileMgr*)_aligned_malloc(sizeof(MacroTileMgr) * KNOB_MAX_DRAWS_IN_FLIGHT, 64);
>> -    pContext->pDispatchQueueArray = (DispatchQueue*)_aligned_malloc(sizeof(DispatchQueue) * KNOB_MAX_DRAWS_IN_FLIGHT, 64);
>> +    pContext->pMacroTileManagerArray = (MacroTileMgr*)AlignedMalloc(sizeof(MacroTileMgr) * KNOB_MAX_DRAWS_IN_FLIGHT, 64);
>> +    pContext->pDispatchQueueArray = (DispatchQueue*)AlignedMalloc(sizeof(DispatchQueue) * KNOB_MAX_DRAWS_IN_FLIGHT, 64);
>> 
>>     for (uint32_t dc = 0; dc < KNOB_MAX_DRAWS_IN_FLIGHT; ++dc)
>>     {
>> @@ -110,7 +110,7 @@ HANDLE SwrCreateContext(
>>             MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE,
>>             numaNode);
>> #else
>> -        pContext->pScratch[i] = (uint8_t*)_aligned_malloc(32 * sizeof(KILOBYTE), KNOB_SIMD_WIDTH * 4);
>> +        pContext->pScratch[i] = (uint8_t*)AlignedMalloc(32 * sizeof(KILOBYTE), KNOB_SIMD_WIDTH * 4);
>> #endif
>>     }
>> 
>> @@ -152,8 +152,8 @@ void SwrDestroyContext(HANDLE hContext)
>>         pContext->pDispatchQueueArray[i].~DispatchQueue();
>>     }
>> 
>> -    _aligned_free(pContext->pDispatchQueueArray);
>> -    _aligned_free(pContext->pMacroTileManagerArray);
>> +    AlignedFree(pContext->pDispatchQueueArray);
>> +    AlignedFree(pContext->pMacroTileManagerArray);
>> 
>>     // Free scratch space.
>>     for (uint32_t i = 0; i < pContext->NumWorkerThreads; ++i)
>> @@ -161,14 +161,14 @@ void SwrDestroyContext(HANDLE hContext)
>> #if defined(_WIN32)
>>         VirtualFree(pContext->pScratch[i], 0, MEM_RELEASE);
>> #else
>> -        _aligned_free(pContext->pScratch[i]);
>> +        AlignedFree(pContext->pScratch[i]);
>> #endif
>>     }
>> 
>>     delete(pContext->pHotTileMgr);
>> 
>>     pContext->~SWR_CONTEXT();
>> -    _aligned_free((SWR_CONTEXT*)hContext);
>> +    AlignedFree((SWR_CONTEXT*)hContext);
>> }
>> 
>> void CopyState(DRAW_STATE& dst, const DRAW_STATE& src)
>> diff --git a/src/gallium/drivers/swr/rasterizer/core/arena.h b/src/gallium/drivers/swr/rasterizer/core/arena.h
>> index 26785db..1db0972 100644
>> --- a/src/gallium/drivers/swr/rasterizer/core/arena.h
>> +++ b/src/gallium/drivers/swr/rasterizer/core/arena.h
>> @@ -54,7 +54,7 @@ public:
>>     {
>>         SWR_ASSUME_ASSERT(size >= sizeof(ArenaBlock));
>> 
>> -        ArenaBlock* p = new (_aligned_malloc(size, align)) ArenaBlock();
>> +        ArenaBlock* p = new (AlignedMalloc(size, align)) ArenaBlock();
>>         p->blockSize = size;
>>         return p;
>>     }
>> @@ -64,7 +64,7 @@ public:
>>         if (pMem)
>>         {
>>             SWR_ASSUME_ASSERT(pMem->blockSize < size_t(0xdddddddd));
>> -            _aligned_free(pMem);
>> +            AlignedFree(pMem);
>>         }
>>     }
>> };
>> diff --git a/src/gallium/drivers/swr/rasterizer/core/frontend.cpp b/src/gallium/drivers/swr/rasterizer/core/frontend.cpp
>> index 6bb9b12..d6643c6 100644
>> --- a/src/gallium/drivers/swr/rasterizer/core/frontend.cpp
>> +++ b/src/gallium/drivers/swr/rasterizer/core/frontend.cpp
>> @@ -946,7 +946,7 @@ static void AllocateTessellationData(SWR_CONTEXT* pContext)
>>     if (gt_pTessellationThreadData == nullptr)
>>     {
>>         gt_pTessellationThreadData = (TessellationThreadLocalData*)
>> -            _aligned_malloc(sizeof(TessellationThreadLocalData), 64);
>> +            AlignedMalloc(sizeof(TessellationThreadLocalData), 64);
>>         memset(gt_pTessellationThreadData, 0, sizeof(*gt_pTessellationThreadData));
>>     }
>> }
>> @@ -985,7 +985,7 @@ static void TessellationStages(
>>         gt_pTessellationThreadData->tsCtxSize);
>>     if (tsCtx == nullptr)
>>     {
>> -        gt_pTessellationThreadData->pTxCtx = _aligned_malloc(gt_pTessellationThreadData->tsCtxSize, 64);
>> +        gt_pTessellationThreadData->pTxCtx = AlignedMalloc(gt_pTessellationThreadData->tsCtxSize, 64);
>>         tsCtx = TSInitCtx(
>>             tsState.domain,
>>             tsState.partitioning,
>> @@ -1063,8 +1063,8 @@ static void TessellationStages(
>>         size_t requiredAllocSize = sizeof(simdvector) * requiredDSOutputVectors;
>>         if (requiredDSOutputVectors > gt_pTessellationThreadData->numDSOutputVectors)
>>         {
>> -            _aligned_free(gt_pTessellationThreadData->pDSOutput);
>> -            gt_pTessellationThreadData->pDSOutput = (simdscalar*)_aligned_malloc(requiredAllocSize, 64);
>> +            AlignedFree(gt_pTessellationThreadData->pDSOutput);
>> +            gt_pTessellationThreadData->pDSOutput = (simdscalar*)AlignedMalloc(requiredAllocSize, 64);
>>             gt_pTessellationThreadData->numDSOutputVectors = requiredDSOutputVectors;
>>         }
>>         SWR_ASSERT(gt_pTessellationThreadData->pDSOutput);
>> diff --git a/src/gallium/drivers/swr/rasterizer/core/ringbuffer.h b/src/gallium/drivers/swr/rasterizer/core/ringbuffer.h
>> index d8eb50a..b9076de 100644
>> --- a/src/gallium/drivers/swr/rasterizer/core/ringbuffer.h
>> +++ b/src/gallium/drivers/swr/rasterizer/core/ringbuffer.h
>> @@ -47,14 +47,14 @@ public:
>>     {
>>         SWR_ASSERT(numEntries > 0);
>>         mNumEntries = numEntries;
>> -        mpRingBuffer = (T*)_aligned_malloc(sizeof(T)*numEntries, 64);
>> +        mpRingBuffer = (T*)AlignedMalloc(sizeof(T)*numEntries, 64);
>>         SWR_ASSERT(mpRingBuffer != nullptr);
>>         memset(mpRingBuffer, 0, sizeof(T)*numEntries);
>>     }
>> 
>>     void Destroy()
>>     {
>> -        _aligned_free(mpRingBuffer);
>> +        AlignedFree(mpRingBuffer);
>>         mpRingBuffer = nullptr;
>>     }
>> 
>> diff --git a/src/gallium/drivers/swr/rasterizer/core/tilemgr.cpp b/src/gallium/drivers/swr/rasterizer/core/tilemgr.cpp
>> index 87d9f42..e0aa8dd 100644
>> --- a/src/gallium/drivers/swr/rasterizer/core/tilemgr.cpp
>> +++ b/src/gallium/drivers/swr/rasterizer/core/tilemgr.cpp
>> @@ -181,7 +181,7 @@ HOTTILE* HotTileMgr::GetHotTileNoLoad(
>>         if (create)
>>         {
>>             uint32_t size = numSamples * mHotTileSize[attachment];
>> -            hotTile.pBuffer = (uint8_t*)_aligned_malloc(size, KNOB_SIMD_WIDTH * 4);
>> +            hotTile.pBuffer = (uint8_t*)AlignedMalloc(size, KNOB_SIMD_WIDTH * 4);
>>             hotTile.state = HOTTILE_INVALID;
>>             hotTile.numSamples = numSamples;
>>             hotTile.renderTargetArrayIndex = 0;
>> diff --git a/src/gallium/drivers/swr/rasterizer/core/tilemgr.h b/src/gallium/drivers/swr/rasterizer/core/tilemgr.h
>> index 82a15e1..41d29ba 100644
>> --- a/src/gallium/drivers/swr/rasterizer/core/tilemgr.h
>> +++ b/src/gallium/drivers/swr/rasterizer/core/tilemgr.h
>> @@ -313,7 +313,7 @@ private:
>>         HANDLE hProcess = GetCurrentProcess();
>>         p = VirtualAllocExNuma(hProcess, nullptr, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE, numaNode);
>> #else
>> -        p = _aligned_malloc(size, align);
>> +        p = AlignedMalloc(size, align);
>> #endif
>> 
>>         return p;
>> @@ -326,7 +326,7 @@ private:
>> #if defined(_WIN32)
>>             VirtualFree(pBuffer, 0, MEM_RELEASE);
>> #else
>> -            _aligned_free(pBuffer);
>> +            AlignedFree(pBuffer);
>> #endif
>>         }
>>     }
>> diff --git a/src/gallium/drivers/swr/swr_screen.cpp b/src/gallium/drivers/swr/swr_screen.cpp
>> index 3d280e3..90ad220 100644
>> --- a/src/gallium/drivers/swr/swr_screen.cpp
>> +++ b/src/gallium/drivers/swr/swr_screen.cpp
>> @@ -558,7 +558,7 @@ swr_texture_layout(struct swr_screen *screen,
>>    res->swr.pitch = res->row_stride[0];
>> 
>>    if (allocate) {
>> -      res->swr.pBaseAddress = (uint8_t *)_aligned_malloc(total_size, 64);
>> +      res->swr.pBaseAddress = (uint8_t *)AlignedMalloc(total_size, 64);
>> 
>>       if (res->has_depth && res->has_stencil) {
>>          SWR_FORMAT_INFO finfo = GetFormatInfo(res->secondary.format);
>> @@ -571,7 +571,7 @@ swr_texture_layout(struct swr_screen *screen,
>>          res->secondary.numSamples = (1 << pt->nr_samples);
>>          res->secondary.pitch = res->alignedWidth * finfo.Bpp;
>> 
>> -         res->secondary.pBaseAddress = (uint8_t *)_aligned_malloc(
>> +         res->secondary.pBaseAddress = (uint8_t *)AlignedMalloc(
>>             res->alignedHeight * res->secondary.pitch, 64);
>>       }
>>    }
>> @@ -663,9 +663,9 @@ swr_resource_destroy(struct pipe_screen *p_screen, struct pipe_resource *pt)
>>       struct sw_winsys *winsys = screen->winsys;
>>       winsys->displaytarget_destroy(winsys, spr->display_target);
>>    } else
>> -      _aligned_free(spr->swr.pBaseAddress);
>> +      AlignedFree(spr->swr.pBaseAddress);
>> 
>> -   _aligned_free(spr->secondary.pBaseAddress);
>> +   AlignedFree(spr->secondary.pBaseAddress);
>> 
>>    FREE(spr);
>> }
>> 
> 



More information about the mesa-dev mailing list