From dd791f68387bfe4f6d1e5b614b3c7b4c88ec6f8c 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. (cherry picked from commit c74b406a4c813e8fa6d644de980d2265528b2d9e) --- 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 ab31074cab..047eaecc7d 100644 --- a/src/gpu/d3d12/SDL_gpu_d3d12.c +++ b/src/gpu/d3d12/SDL_gpu_d3d12.c @@ -4889,7 +4889,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;