Fix more build errors in mingw
Based on https://github.com/GPUOpen-LibrariesAndSDKs/D3D12MemoryAllocator/pull/77/
diff --git a/src/D3D12MemAlloc.cpp b/src/D3D12MemAlloc.cpp
index 6e93839..fa53586 100644
--- a/src/D3D12MemAlloc.cpp
+++ b/src/D3D12MemAlloc.cpp
@@ -33,11 +33,24 @@
#include <shared_mutex>
#endif
-// Includes needed for MinGW - see #71.
-#ifndef _MSC_VER
- #include <guiddef.h>
- // guiddef.h must be included first.
- #include <dxguids.h>
+// On older mingw versions, using the Agility SDK will cause linker errors unless dxguids.h is included.
+// But on newer mingw versions, the includes aren't necessary thus no need to grab DirectX-Headers.
+// Release cycles are slow for LTS distros on Linux, so this codeblock will need to stay for a few years.
+#if defined(__MINGW64_VERSION_MAJOR) && defined(__MINGW64_VERSION_MINOR) && \
+ defined(__MINGW64_VERSION_BUGFIX) && defined(__ID3D12Device8_INTERFACE_DEFINED__)
+ #define D3D12MA_MAKE_MINGW_VERSION(x, y, z) ((x << 20u) | (y << 10u) | (z))
+ #if D3D12MA_MAKE_MINGW_VERSION(__MINGW64_VERSION_MAJOR, __MINGW64_VERSION_MINOR, \
+ __MINGW64_VERSION_BUGFIX) <= D3D12MA_MAKE_MINGW_VERSION(11, 0, 1)
+ #if defined(__has_include)
+ #if !__has_include(<dxguids.h>)
+ #error "mingw or gcc detected. dxguids.h is needed. You can grab it from https://github.com/microsoft/DirectX-Headers or if you're on Ubuntu just run sudo apt install directx-headers-dev"
+ #endif
+ #endif
+ #include <guiddef.h>
+ // // guiddef.h must be included first.
+ #include <dxguids.h>
+ #endif
+ #undef D3D12MA_MAKE_MINGW_VERSION
#endif
////////////////////////////////////////////////////////////////////////////////