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);