From 1a278bb511943d3b6a8e9152c44f31cc4df4e775 Mon Sep 17 00:00:00 2001
From: Lucas Murray <[EMAIL REDACTED]>
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 063095200fc96..278452294b1ec 100644
--- a/src/gpu/d3d12/SDL_gpu_d3d12.c
+++ b/src/gpu/d3d12/SDL_gpu_d3d12.c
@@ -2906,8 +2906,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(
@@ -2915,8 +2913,8 @@ static SDL_GPUComputePipeline *D3D12_CreateComputePipeline(
createinfo->code,
createinfo->code_size,
createinfo->format,
- &bytecode,
- &bytecodeSize)) {
+ NULL,
+ NULL)) {
return NULL;
}
@@ -2925,13 +2923,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;
@@ -2946,7 +2943,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;
}
@@ -2955,7 +2951,6 @@ static SDL_GPUComputePipeline *D3D12_CreateComputePipeline(
if (!computePipeline) {
ID3D12PipelineState_Release(pipelineState);
- SDL_free(bytecode);
return NULL;
}