diff --git a/include/SDL3/SDL_render.h b/include/SDL3/SDL_render.h index 9fde47f2c6..5b745b54ea 100644 --- a/include/SDL3/SDL_render.h +++ b/include/SDL3/SDL_render.h @@ -313,6 +313,7 @@ extern DECLSPEC int SDLCALL SDL_GetRendererInfo(SDL_Renderer *renderer, SDL_Rend * "SDL.renderer.d3d9.device" - the IDirect3DDevice9 associated with the renderer * "SDL.renderer.d3d11.device" - the ID3D11Device associated with the renderer * "SDL.renderer.d3d12.device" - the ID3D12Device associated with the renderer + * "SDL.renderer.d3d12.command_queue" - the ID3D12CommandQueue associated with the renderer * * \param renderer the rendering context * \returns a valid property ID on success or 0 on failure; call diff --git a/src/render/direct3d12/SDL_render_d3d12.c b/src/render/direct3d12/SDL_render_d3d12.c index 2fd1f00d10..8e89185a01 100644 --- a/src/render/direct3d12/SDL_render_d3d12.c +++ b/src/render/direct3d12/SDL_render_d3d12.c @@ -323,6 +323,10 @@ static void D3D12_ReleaseAll(SDL_Renderer *renderer) D3D12_RenderData *data = (D3D12_RenderData *)renderer->driverdata; SDL_Texture *texture = NULL; + SDL_PropertiesID props = SDL_GetRendererProperties(renderer); + SDL_SetProperty(props, "SDL.renderer.d3d12.device", NULL); + SDL_SetProperty(props, "SDL.renderer.d3d12.command_queue", NULL); + /* Release all textures */ for (texture = renderer->textures; texture; texture = texture->next) { D3D12_DestroyTexture(renderer, texture); @@ -1068,7 +1072,9 @@ static HRESULT D3D12_CreateDeviceResources(SDL_Renderer *renderer) } data->srvPoolHead = &data->srvPoolNodes[0]; - SDL_SetProperty(SDL_GetRendererProperties(renderer), "SDL.renderer.d3d12.device", data->d3dDevice); + SDL_PropertiesID props = SDL_GetRendererProperties(renderer); + SDL_SetProperty(props, "SDL.renderer.d3d12.device", data->d3dDevice); + SDL_SetProperty(props, "SDL.renderer.d3d12.command_queue", data->commandQueue); done: SAFE_RELEASE(d3dDevice);