From: Tim Rowley Date: Tue, 8 Aug 2017 01:33:24 +0000 (-0500) Subject: swr/rast: Fix invalid casting for calls to Interlocked* functions X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b333bc753e2dd1ed1a676606046a4289e7d58187;p=mesa.git swr/rast: Fix invalid casting for calls to Interlocked* functions CID: 1416243, 1416244, 1416255 CC: mesa-stable@lists.freedesktop.org Reviewed-by: Bruce Cherniak --- diff --git a/src/gallium/drivers/swr/rasterizer/core/api.cpp b/src/gallium/drivers/swr/rasterizer/core/api.cpp index 8dc9ac24a74..ccb6dfb7a19 100644 --- a/src/gallium/drivers/swr/rasterizer/core/api.cpp +++ b/src/gallium/drivers/swr/rasterizer/core/api.cpp @@ -189,7 +189,7 @@ void QueueWork(SWR_CONTEXT *pContext) if (IsDraw) { - InterlockedIncrement((volatile long*)&pContext->drawsOutstandingFE); + InterlockedIncrement(&pContext->drawsOutstandingFE); } _ReadWriteBarrier(); diff --git a/src/gallium/drivers/swr/rasterizer/core/context.h b/src/gallium/drivers/swr/rasterizer/core/context.h index 131b3cbbb03..bcd5801a3b6 100644 --- a/src/gallium/drivers/swr/rasterizer/core/context.h +++ b/src/gallium/drivers/swr/rasterizer/core/context.h @@ -409,12 +409,12 @@ struct DRAW_CONTEXT bool dependent; // Backend work is dependent on all previous BE bool isCompute; // Is this DC a compute context? bool cleanupState; // True if this is the last draw using an entry in the state ring. - volatile bool doneFE; // Is FE work done for this draw? FE_WORK FeWork; + volatile OSALIGNLINE(bool) doneFE; // Is FE work done for this draw? volatile OSALIGNLINE(uint32_t) FeLock; - volatile int32_t threadsDone; + volatile OSALIGNLINE(uint32_t) threadsDone; SYNC_DESC retireCallback; // Call this func when this DC is retired. }; @@ -503,9 +503,9 @@ struct SWR_CONTEXT // Scratch space for workers. uint8_t** ppScratch; - volatile int32_t drawsOutstandingFE; + volatile OSALIGNLINE(uint32_t) drawsOutstandingFE; - CachingAllocator cachingArenaAllocator; + OSALIGNLINE(CachingAllocator) cachingArenaAllocator; uint32_t frameCount; uint32_t lastFrameChecked; diff --git a/src/gallium/drivers/swr/rasterizer/core/threads.cpp b/src/gallium/drivers/swr/rasterizer/core/threads.cpp index 70bde027ee0..b704d23f547 100644 --- a/src/gallium/drivers/swr/rasterizer/core/threads.cpp +++ b/src/gallium/drivers/swr/rasterizer/core/threads.cpp @@ -393,7 +393,7 @@ INLINE void ExecuteCallbacks(SWR_CONTEXT* pContext, uint32_t workerId, DRAW_CONT // inlined-only version INLINE int32_t CompleteDrawContextInl(SWR_CONTEXT* pContext, uint32_t workerId, DRAW_CONTEXT* pDC) { - int32_t result = InterlockedDecrement((volatile long*)&pDC->threadsDone); + int32_t result = static_cast(InterlockedDecrement(&pDC->threadsDone)); SWR_ASSERT(result >= 0); AR_FLUSH(pDC->drawId); @@ -639,7 +639,7 @@ INLINE void CompleteDrawFE(SWR_CONTEXT* pContext, uint32_t workerId, DRAW_CONTEX _mm_mfence(); pDC->doneFE = true; - InterlockedDecrement((volatile long*)&pContext->drawsOutstandingFE); + InterlockedDecrement(&pContext->drawsOutstandingFE); } void WorkOnFifoFE(SWR_CONTEXT *pContext, uint32_t workerId, uint32_t &curDrawFE)