swr: [rasterizer core] Reduce Arena blocksize to 128KB (from 1MB).
authorTim Rowley <timothy.o.rowley@intel.com>
Tue, 22 Mar 2016 15:27:18 +0000 (09:27 -0600)
committerTim Rowley <timothy.o.rowley@intel.com>
Fri, 25 Mar 2016 19:45:40 +0000 (14:45 -0500)
With global allocator this doesn't seem to affect performance at all.
Overall memory consumption drops by up to 85%.

src/gallium/drivers/swr/rasterizer/core/arena.h

index 5d08cda6506deafb68ac68160b4acf8653543b7d..d777c20a4ee65c6e6adb9c7cc2645e1ed6511147 100644 (file)
@@ -212,7 +212,7 @@ struct CachingAllocatorT : DefaultAllocator
 };
 typedef CachingAllocatorT<> CachingAllocator;
 
-template<typename T = DefaultAllocator>
+template<typename T = DefaultAllocator, size_t BlockSizeT = (128 * 1024)>
 class TArena
 {
 public:
@@ -225,7 +225,11 @@ public:
 
     void* AllocAligned(size_t size, size_t  align)
     {
-        SWR_ASSERT(size);
+        if (0 == size)
+        {
+            return nullptr;
+        }
+
         SWR_ASSERT(align <= ARENA_BLOCK_ALIGN);
 
         if (m_pCurBlock)
@@ -244,7 +248,7 @@ public:
             // a new block
         }
 
-        static const size_t ArenaBlockSize = 1024 * 1024 - ARENA_BLOCK_ALIGN;
+        static const size_t ArenaBlockSize = BlockSizeT - ARENA_BLOCK_ALIGN;
         size_t blockSize = std::max(size, ArenaBlockSize);
 
         // Add in one BLOCK_ALIGN unit to store ArenaBlock in.