SDL: Updated CMakeLists.txt and configure.asc/script so that it checks for the required Windows SDK version before it enables the...

From 7a335df9cfce651890842069aff90f5aecfef07d Mon Sep 17 00:00:00 2001
From: chalonverse <[EMAIL REDACTED]>
Date: Tue, 7 Jun 2022 16:11:25 -0700
Subject: [PATCH] Updated CMakeLists.txt and configure.asc/script so that it
 checks for the required Windows SDK version before it enables the d3d12
 renderer. Also fixed reported warnings in some builds.

---
 CMakeLists.txt                           |  7 +++++-
 configure                                | 27 ++++++++++++++++++++----
 configure.ac                             | 10 ++++++++-
 src/render/direct3d12/SDL_render_d3d12.c | 21 +++++++-----------
 4 files changed, 46 insertions(+), 19 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index bf3f42710a0..751bddd8553 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1591,7 +1591,12 @@ elseif(WINDOWS)
 
     check_include_file(d3d9.h HAVE_D3D_H)
     check_include_file(d3d11_1.h HAVE_D3D11_H)
-    check_include_file(d3d12.h HAVE_D3D12_H)
+    check_c_source_compiles("
+      #include <winsdkver.h>
+      #include <sdkddkver.h>
+      #if WDK_NTDDI_VERSION > 0x0A000008
+      int main(int argc, char **argv) { return 0; }
+      #endif" HAVE_D3D12_H)
     check_include_file(ddraw.h HAVE_DDRAW_H)
     check_include_file(dsound.h HAVE_DSOUND_H)
     check_include_file(dinput.h HAVE_DINPUT_H)
diff --git a/configure b/configure
index f0b1e6e8898..c4f2e8c046f 100755
--- a/configure
+++ b/configure
@@ -25083,12 +25083,31 @@ if test "x$ac_cv_header_d3d11_1_h" = xyes; then :
 fi
 
 
-        ac_fn_c_check_header_mongrel "$LINENO" "d3d12.h" "ac_cv_header_d3d12_h" "$ac_includes_default"
-if test "x$ac_cv_header_d3d12_h" = xyes; then :
-  have_d3d12=yes
-fi
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for d3d12 Windows SDK version" >&5
+$as_echo_n "checking for d3d12 Windows SDK version... " >&6; }
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
+#include <winsdkver.h>
+#include <sdkddkver.h>
+#if WDK_NTDDI_VERSION < 0x0A000008
+asdf
+#endif
+
+int
+main ()
+{
 
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  have_d3d12=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: have_d3d12" >&5
+$as_echo "have_d3d12" >&6; }
         ac_fn_c_check_header_mongrel "$LINENO" "ddraw.h" "ac_cv_header_ddraw_h" "$ac_includes_default"
 if test "x$ac_cv_header_ddraw_h" = xyes; then :
   have_ddraw=yes
diff --git a/configure.ac b/configure.ac
index dc5c4c718b5..b393c3b5c6a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3264,7 +3264,15 @@ CheckDIRECTX()
     if test x$enable_directx = xyes; then
         AC_CHECK_HEADER(d3d9.h, have_d3d=yes)
         AC_CHECK_HEADER(d3d11_1.h, have_d3d11=yes)
-        AC_CHECK_HEADER(d3d12.h, have_d3d12=yes)
+        AC_MSG_CHECKING(for d3d12 Windows SDK version)
+        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <winsdkver.h>
+#include <sdkddkver.h>
+#if WDK_NTDDI_VERSION < 0x0A000008
+asdf
+#endif
+            ]],[])], [have_d3d12=yes],[])
+        AC_MSG_RESULT(have_d3d12)
         AC_CHECK_HEADER(ddraw.h, have_ddraw=yes)
         AC_CHECK_HEADER(dsound.h, have_dsound=yes)
         AC_CHECK_HEADER(dinput.h, have_dinput=yes)
diff --git a/src/render/direct3d12/SDL_render_d3d12.c b/src/render/direct3d12/SDL_render_d3d12.c
index 447e6a07b54..3059e235f3e 100644
--- a/src/render/direct3d12/SDL_render_d3d12.c
+++ b/src/render/direct3d12/SDL_render_d3d12.c
@@ -713,13 +713,13 @@ D3D12_CreateDeviceResources(SDL_Renderer* renderer)
             goto done;
         }
 
-        result = DXGIGetDebugInterfaceFunc(0, &SDL_IID_IDXGIDebug1, &data->dxgiDebug);
+        result = DXGIGetDebugInterfaceFunc(0, &SDL_IID_IDXGIDebug1, (void **)&data->dxgiDebug);
         if (FAILED(result)) {
             WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("DXGIGetDebugInterface1"), result);
             goto done;
         }
 
-        result = DXGIGetDebugInterfaceFunc(0, &SDL_IID_IDXGIInfoQueue, &dxgiInfoQueue);
+        result = DXGIGetDebugInterfaceFunc(0, &SDL_IID_IDXGIInfoQueue, (void **)&dxgiInfoQueue);
         if (FAILED(result)) {
             WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("DXGIGetDebugInterface1"), result);
             goto done;
@@ -1019,8 +1019,6 @@ D3D12_CreateDeviceResources(SDL_Renderer* renderer)
     return result;
 }
 
-#ifdef __WIN32__
-
 static DXGI_MODE_ROTATION
 D3D12_GetCurrentRotation()
 {
@@ -1028,8 +1026,6 @@ D3D12_GetCurrentRotation()
     return DXGI_MODE_ROTATION_IDENTITY;
 }
 
-#endif /* __WIN32__ */
-
 static BOOL
 D3D12_IsDisplayRotated90Degrees(DXGI_MODE_ROTATION rotation)
 {
@@ -1143,7 +1139,7 @@ D3D12_CreateSwapChain(SDL_Renderer * renderer, int w, int h)
 
     IDXGIFactory_MakeWindowAssociation(data->dxgiFactory, windowinfo.info.win.window, DXGI_MWA_NO_WINDOW_CHANGES);
 
-    result = IDXGISwapChain1_QueryInterface(swapChain, &SDL_IID_IDXGISwapChain4, &data->swapChain);
+    result = IDXGISwapChain1_QueryInterface(swapChain, &SDL_IID_IDXGISwapChain4, (void **)&data->swapChain);
     if (FAILED(result)) {
         WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain1::QueryInterface"), result);
         goto done;
@@ -1267,7 +1263,7 @@ D3D12_CreateWindowSizeDependentResources(SDL_Renderer * renderer)
             data->swapChain,
             i,
             &SDL_IID_ID3D12Resource,
-            &data->renderTargets[i]
+            (void **) &data->renderTargets[i]
             );
         if (FAILED(result)) {
             WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain4::GetBuffer"), result);
@@ -1664,7 +1660,7 @@ D3D12_UpdateTextureInternal(D3D12_RenderData * rendererData, ID3D12Resource * te
     result = ID3D12Resource_Map(rendererData->uploadBuffers[rendererData->currentUploadBuffer],
         0,
         NULL,
-        &textureMemory
+        (void **)&textureMemory
         );
     if (FAILED(result)) {
         SAFE_RELEASE(rendererData->uploadBuffers[rendererData->currentUploadBuffer]);
@@ -1926,7 +1922,7 @@ D3D12_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
     result = ID3D12Resource_Map(textureData->stagingBuffer,
         0,
         NULL,
-        &textureMemory
+        (void **)&textureMemory
     );
     if (FAILED(result)) {
         SAFE_RELEASE(rendererData->uploadBuffers[rendererData->currentUploadBuffer]);
@@ -2182,7 +2178,6 @@ D3D12_UpdateVertexBuffer(SDL_Renderer *renderer,
     HRESULT result = S_OK;
     const int vbidx = rendererData->currentVertexBuffer;
     const UINT stride = sizeof(VertexPositionColor);
-    const UINT offset = 0;
     UINT8* vertexBufferData = NULL;
     D3D12_RANGE range;
 
@@ -2205,7 +2200,7 @@ D3D12_UpdateVertexBuffer(SDL_Renderer *renderer,
         return E_FAIL;
     }
 
-    result = ID3D12Resource_Map(rendererData->vertexBuffers[vbidx].resource, 0, &range, &vertexBufferData);
+    result = ID3D12Resource_Map(rendererData->vertexBuffers[vbidx].resource, 0, &range, (void **)&vertexBufferData);
     if (FAILED(result)) {
         return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Resource::Map [vertex buffer]"), result);
     }
@@ -2810,7 +2805,7 @@ D3D12_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect,
     result = ID3D12Resource_Map(readbackBuffer,
         0,
         NULL,
-        &textureMemory
+        (void **)&textureMemory
     );
     if (FAILED(result)) {
         SAFE_RELEASE(readbackBuffer);