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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
diff --git a/CMakeLists.txt b/CMakeLists.txt
index bf3f427..751bddd 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 f0b1e6e..c4f2e8c 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 dc5c4c7..b393c3b 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 447e6a0..3059e23 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 @@ done:
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);