From a0dc3a6727b8511f505278655dbd3ffa6d4c4d90 Mon Sep 17 00:00:00 2001 From: Lucas Murray <22484+lmurray@users.noreply.github.com> Date: Mon, 5 Jan 2026 09:55:35 +1100 Subject: [PATCH] GPU: Fix memory leak when creating D3D12 compute pipelines --- src/gpu/d3d12/SDL_gpu_d3d12.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/gpu/d3d12/SDL_gpu_d3d12.c b/src/gpu/d3d12/SDL_gpu_d3d12.c index 3780737155..f53a2d4c17 100644 --- a/src/gpu/d3d12/SDL_gpu_d3d12.c +++ b/src/gpu/d3d12/SDL_gpu_d3d12.c @@ -2953,8 +2953,6 @@ static SDL_GPUComputePipeline *D3D12_CreateComputePipeline( const SDL_GPUComputePipelineCreateInfo *createinfo) { D3D12Renderer *renderer = (D3D12Renderer *)driverData; - void *bytecode; - size_t bytecodeSize; ID3D12PipelineState *pipelineState; if (!D3D12_INTERNAL_CreateShaderBytecode( @@ -2962,8 +2960,8 @@ static SDL_GPUComputePipeline *D3D12_CreateComputePipeline( createinfo->code, createinfo->code_size, createinfo->format, - &bytecode, - &bytecodeSize)) { + NULL, + NULL)) { return NULL; } @@ -2972,13 +2970,12 @@ static SDL_GPUComputePipeline *D3D12_CreateComputePipeline( createinfo); if (rootSignature == NULL) { - SDL_free(bytecode); SET_STRING_ERROR_AND_RETURN("Could not create root signature!", NULL); } D3D12_COMPUTE_PIPELINE_STATE_DESC pipelineDesc; - pipelineDesc.CS.pShaderBytecode = bytecode; - pipelineDesc.CS.BytecodeLength = bytecodeSize; + pipelineDesc.CS.pShaderBytecode = createinfo->code; + pipelineDesc.CS.BytecodeLength = createinfo->code_size; pipelineDesc.pRootSignature = rootSignature->handle; pipelineDesc.CachedPSO.CachedBlobSizeInBytes = 0; pipelineDesc.CachedPSO.pCachedBlob = NULL; @@ -2993,7 +2990,6 @@ static SDL_GPUComputePipeline *D3D12_CreateComputePipeline( if (FAILED(res)) { D3D12_INTERNAL_SetError(renderer, "Could not create compute pipeline state", res); - SDL_free(bytecode); return NULL; } @@ -3002,7 +2998,6 @@ static SDL_GPUComputePipeline *D3D12_CreateComputePipeline( if (!computePipeline) { ID3D12PipelineState_Release(pipelineState); - SDL_free(bytecode); return NULL; }