replaced alloca by temp arena

This commit is contained in:
2026-08-01 19:49:03 -04:00
parent 9f6064995f
commit 0bb2d8d9dc
@@ -85,8 +85,9 @@ namespace Juliet::D3D12
{
auto d3d12driver = static_cast<D3D12Driver*>(driver.Get());
// TODO: use scratch allocator for alloca (stack alloc)
HANDLE* events = static_cast<HANDLE*>(alloca(sizeof(HANDLE) * numFences));
TempArena tempArena = ArenaTempBegin(d3d12driver->DriverArena);
HANDLE* events = ArenaPushArray<HANDLE>(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<D3D12Fence*>(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)
{