From 0bb2d8d9dc820170605efc2e788e613f9032e541 Mon Sep 17 00:00:00 2001 From: Patedam Date: Sat, 1 Aug 2026 19:49:03 -0400 Subject: [PATCH] replaced alloca by temp arena --- Juliet/src/Graphics/D3D12/D3D12Synchronization.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Juliet/src/Graphics/D3D12/D3D12Synchronization.cpp b/Juliet/src/Graphics/D3D12/D3D12Synchronization.cpp index d59f9b2..db4f9e2 100644 --- a/Juliet/src/Graphics/D3D12/D3D12Synchronization.cpp +++ b/Juliet/src/Graphics/D3D12/D3D12Synchronization.cpp @@ -85,8 +85,9 @@ namespace Juliet::D3D12 { auto d3d12driver = static_cast(driver.Get()); - // TODO: use scratch allocator for alloca (stack alloc) - HANDLE* events = static_cast(alloca(sizeof(HANDLE) * numFences)); + TempArena tempArena = ArenaTempBegin(d3d12driver->DriverArena); + + HANDLE* events = ArenaPushArray(tempArena.Arena, numFences, "JUST IN CASE"); MemoryZero(events, sizeof(HANDLE) * numFences); for (uint32 i = 0; i < numFences; ++i) @@ -97,6 +98,7 @@ namespace Juliet::D3D12 if (FAILED(res)) { LogError(d3d12driver->D3D12Device, "Setting fence event failed!", res); + ArenaTempEnd(tempArena); return false; } @@ -113,6 +115,9 @@ namespace Juliet::D3D12 } DWORD waitResult = WaitForMultipleObjects(numFences, events, waitForAll, INFINITE); + + ArenaTempEnd(tempArena); + if (waitResult == WAIT_FAILED) { LogError(LogCategory::Graphics, "Wait failed"); @@ -155,8 +160,8 @@ namespace Juliet::D3D12 auto d3d12Fence = reinterpret_cast(fence.Get()); #if JULIET_DEBUG - LogDebug(LogCategory::Graphics, "ReleaseFence | %x fence. Handle %x | Event %x | Refcount %d | Querier %s", d3d12Fence, - d3d12Fence->Handle, d3d12Fence->Event, d3d12Fence->ReferenceCount, CStr(querier)); + LogDebug(LogCategory::Graphics, "ReleaseFence | %x fence. Handle %x | Event %x | Refcount %d | Querier %s", + d3d12Fence, d3d12Fence->Handle, d3d12Fence->Event, d3d12Fence->ReferenceCount, CStr(querier)); #endif if (--d3d12Fence->ReferenceCount == 0) {