swr: [rasterizer core] fix dependency bug
[mesa.git] / src / gallium / drivers / swr / rasterizer / core / ringbuffer.h
index 97f75c6550e0703f505f3de9c5c021f6d275641e..f1bef2190fb8611650edf86e3c64d325a606b51c 100644 (file)
@@ -46,6 +46,7 @@ public:
     void Init(uint32_t numEntries)
     {
         SWR_ASSERT(numEntries > 0);
+        SWR_ASSERT(((1ULL << 32) % numEntries) == 0, "%d is not evenly divisible into 2 ^ 32.  Wrap errors will occur!", numEntries);
         mNumEntries = numEntries;
         mpRingBuffer = (T*)AlignedMalloc(sizeof(T)*numEntries, 64);
         SWR_ASSERT(mpRingBuffer != nullptr);
@@ -67,6 +68,8 @@ public:
     INLINE void Enqueue()
     {
         mRingHead++; // There's only one producer.
+        // Assert to find wrap-around cases, NEVER ENABLE DURING CHECKIN!!
+        // SWR_REL_ASSERT(mRingHead);
     }
 
     INLINE void Dequeue()
@@ -81,10 +84,7 @@ public:
 
     INLINE bool IsFull()
     {
-        ///@note We don't handle wrap case due to using 64-bit indices.
-        ///      It would take 11 million years to wrap at 50,000 DCs per sec.
-        ///      If we used 32-bit indices then its about 23 hours to wrap.
-        uint64_t numEnqueued = GetHead() - GetTail();
+        uint32_t numEnqueued = GetHead() - GetTail();
         SWR_ASSERT(numEnqueued <= mNumEntries);
 
         return (numEnqueued == mNumEntries);