diff --git a/Source/Engine/Renderer/RenderList.cpp b/Source/Engine/Renderer/RenderList.cpp
index 90ad13574..d0d33077e 100644
--- a/Source/Engine/Renderer/RenderList.cpp
+++ b/Source/Engine/Renderer/RenderList.cpp
@@ -218,6 +218,7 @@ void RenderFogData::Init(const RenderView& view, IFogRenderer* renderer)
void* RendererAllocation::Allocate(uintptr size)
{
PROFILE_CPU();
+ size = AllocationUtils::AlignToPowerOf2((int32)size); // Reduce fragmentation by operating on power-of-2 blocks
void* result = nullptr;
MemPoolLocker.Lock();
for (int32 i = 0; i < MemPool.Count(); i++)
@@ -238,6 +239,7 @@ void* RendererAllocation::Allocate(uintptr size)
void RendererAllocation::Free(void* ptr, uintptr size)
{
PROFILE_CPU();
+ size = AllocationUtils::AlignToPowerOf2((int32)size); // Reduce fragmentation by operating on power-of-2 blocks
MemPoolLocker.Lock();
MemPool.Add({ ptr, size });
MemPoolLocker.Unlock();
diff --git a/Source/Engine/Renderer/RendererAllocation.h b/Source/Engine/Renderer/RendererAllocation.h
index 30e55fbd8..80dc40b6e 100644
--- a/Source/Engine/Renderer/RendererAllocation.h
+++ b/Source/Engine/Renderer/RendererAllocation.h
@@ -4,6 +4,9 @@
#include "Engine/Core/Memory/SimpleHeapAllocation.h"
+///
+/// Shared pool allocator for the renderer used for large chunks of memory.
+///
class RendererAllocation : public SimpleHeapAllocation
{
public: