From 99571667232f4a9ed1b64452ed77fd178fc549f4 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 28 Apr 2026 21:55:52 +0200 Subject: [PATCH] Optimize `RendererAllocation` by reducing fragmentation with operating on power-of-2 blocks --- Source/Engine/Renderer/RenderList.cpp | 2 ++ Source/Engine/Renderer/RendererAllocation.h | 3 +++ 2 files changed, 5 insertions(+) diff --git a/Source/Engine/Renderer/RenderList.cpp b/Source/Engine/Renderer/RenderList.cpp index 6687bdc97..80ad67164 100644 --- a/Source/Engine/Renderer/RenderList.cpp +++ b/Source/Engine/Renderer/RenderList.cpp @@ -220,6 +220,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++) @@ -240,6 +241,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: