From c74b406a4c813e8fa6d644de980d2265528b2d9e Mon Sep 17 00:00:00 2001 From: Edu Garcia <28616+Arcnor@users.noreply.github.com> Date: Thu, 9 Oct 2025 14:43:11 +0100 Subject: [PATCH] Fix SDL GPU D3D12 Descriptor Heap leak When descriptor leaks overflow, the D3D12 SDL GPU renderer fetches more from the pool, but never returns them, which eventually causes an "out of memory" crash. --- src/gpu/d3d12/SDL_gpu_d3d12.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/gpu/d3d12/SDL_gpu_d3d12.c b/src/gpu/d3d12/SDL_gpu_d3d12.c index 28a7c5ce5..85e397a89 100644 --- a/src/gpu/d3d12/SDL_gpu_d3d12.c +++ b/src/gpu/d3d12/SDL_gpu_d3d12.c @@ -4885,7 +4885,14 @@ static void D3D12_INTERNAL_SetGPUDescriptorHeaps(D3D12CommandBuffer *commandBuff viewHeap = D3D12_INTERNAL_AcquireGPUDescriptorHeapFromPool(commandBuffer, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); samplerHeap = D3D12_INTERNAL_AcquireGPUDescriptorHeapFromPool(commandBuffer, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER); + if (commandBuffer->gpuDescriptorHeaps[0] != NULL) { + D3D12_INTERNAL_ReturnGPUDescriptorHeapToPool(commandBuffer->renderer, commandBuffer->gpuDescriptorHeaps[0]); + } commandBuffer->gpuDescriptorHeaps[0] = viewHeap; + + if (commandBuffer->gpuDescriptorHeaps[1] != NULL) { + D3D12_INTERNAL_ReturnGPUDescriptorHeapToPool(commandBuffer->renderer, commandBuffer->gpuDescriptorHeaps[1]); + } commandBuffer->gpuDescriptorHeaps[1] = samplerHeap; heaps[0] = viewHeap->handle;