SDL: Added the "SDL.renderer.d3d12.command_queue" property

From 6c91b28e71e46d509431178fb52a7715385d54af Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Wed, 8 Nov 2023 11:27:00 -0800
Subject: [PATCH] Added the "SDL.renderer.d3d12.command_queue" property

Fixes https://github.com/libsdl-org/SDL/issues/8491
---
 include/SDL3/SDL_render.h                | 1 +
 src/render/direct3d12/SDL_render_d3d12.c | 8 +++++++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/include/SDL3/SDL_render.h b/include/SDL3/SDL_render.h
index 9fde47f2c6b3..5b745b54eac1 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 2fd1f00d10b5..8e89185a0103 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);