diff --git a/VisualC-WinRT/WinPhone81_VS2013/SDL-WinPhone81.vcxproj b/VisualC-WinRT/WinPhone81_VS2013/SDL-WinPhone81.vcxproj
index b36d4f111..f91dbcd65 100644
--- a/VisualC-WinRT/WinPhone81_VS2013/SDL-WinPhone81.vcxproj
+++ b/VisualC-WinRT/WinPhone81_VS2013/SDL-WinPhone81.vcxproj
@@ -431,7 +431,7 @@
Console
false
false
- DXGI.lib;d3d11.lib;mmdevapi.lib;%(AdditionalDependencies)
+ DXGI.lib;d3d11.lib;mmdevapi.lib;synchronization.lib;%(AdditionalDependencies)
@@ -445,7 +445,7 @@
Console
false
false
- DXGI.lib;d3d11.lib;mmdevapi.lib;%(AdditionalDependencies)
+ DXGI.lib;d3d11.lib;mmdevapi.lib;synchronization.lib;%(AdditionalDependencies)
@@ -459,7 +459,7 @@
Console
false
false
- DXGI.lib;d3d11.lib;mmdevapi.lib;%(AdditionalDependencies)
+ DXGI.lib;d3d11.lib;mmdevapi.lib;synchronization.lib;%(AdditionalDependencies)
@@ -473,7 +473,7 @@
Console
false
false
- DXGI.lib;d3d11.lib;mmdevapi.lib;%(AdditionalDependencies)
+ DXGI.lib;d3d11.lib;mmdevapi.lib;synchronization.lib;%(AdditionalDependencies)
diff --git a/VisualC-WinRT/WinRT81_VS2013/SDL-WinRT81.vcxproj b/VisualC-WinRT/WinRT81_VS2013/SDL-WinRT81.vcxproj
index 39e791ad3..9e4fbe768 100644
--- a/VisualC-WinRT/WinRT81_VS2013/SDL-WinRT81.vcxproj
+++ b/VisualC-WinRT/WinRT81_VS2013/SDL-WinRT81.vcxproj
@@ -510,7 +510,7 @@
Console
false
false
- vccorlibd.lib;msvcrtd.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;%(AdditionalDependencies)
+ vccorlibd.lib;msvcrtd.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;synchronization.lib;%(AdditionalDependencies)
vccorlibd;msvcrtd;%(IgnoreSpecificDefaultLibraries)
@@ -525,7 +525,7 @@
Console
false
false
- vccorlib.lib;msvcrt.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;%(AdditionalDependencies)
+ vccorlib.lib;msvcrt.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;synchronization.lib;%(AdditionalDependencies)
vccorlib;msvcrt;%(IgnoreSpecificDefaultLibraries)
@@ -540,7 +540,7 @@
Console
false
false
- vccorlibd.lib;msvcrtd.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;%(AdditionalDependencies)
+ vccorlibd.lib;msvcrtd.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;synchronization.lib;%(AdditionalDependencies)
vccorlibd;msvcrtd;%(IgnoreSpecificDefaultLibraries)
@@ -555,7 +555,7 @@
Console
false
false
- vccorlib.lib;msvcrt.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;%(AdditionalDependencies)
+ vccorlib.lib;msvcrt.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;synchronization.lib;%(AdditionalDependencies)
vccorlib;msvcrt;%(IgnoreSpecificDefaultLibraries)
@@ -570,7 +570,7 @@
Console
false
false
- vccorlibd.lib;msvcrtd.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;%(AdditionalDependencies)
+ vccorlibd.lib;msvcrtd.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;synchronization.lib;%(AdditionalDependencies)
vccorlibd;msvcrtd;%(IgnoreSpecificDefaultLibraries)
@@ -585,7 +585,7 @@
Console
false
false
- vccorlib.lib;msvcrt.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;%(AdditionalDependencies)
+ vccorlib.lib;msvcrt.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;synchronization.lib;%(AdditionalDependencies)
vccorlib;msvcrt;%(IgnoreSpecificDefaultLibraries)
diff --git a/src/thread/windows/SDL_sysmutex.c b/src/thread/windows/SDL_sysmutex.c
index 7076239e7..eb4df31ae 100644
--- a/src/thread/windows/SDL_sysmutex.c
+++ b/src/thread/windows/SDL_sysmutex.c
@@ -66,12 +66,19 @@ typedef struct _SRWLOCK {
} SRWLOCK, *PSRWLOCK;
#endif
+#if __WINRT__
+/* Functions are guaranteed to be available */
+#define pReleaseSRWLockExclusive ReleaseSRWLockExclusive
+#define pAcquireSRWLockExclusive AcquireSRWLockExclusive
+#define pTryAcquireSRWLockExclusive TryAcquireSRWLockExclusive
+#else
typedef VOID(WINAPI *pfnReleaseSRWLockExclusive)(PSRWLOCK);
typedef VOID(WINAPI *pfnAcquireSRWLockExclusive)(PSRWLOCK);
typedef BOOLEAN(WINAPI *pfnTryAcquireSRWLockExclusive)(PSRWLOCK);
static pfnReleaseSRWLockExclusive pReleaseSRWLockExclusive = NULL;
static pfnAcquireSRWLockExclusive pAcquireSRWLockExclusive = NULL;
static pfnTryAcquireSRWLockExclusive pTryAcquireSRWLockExclusive = NULL;
+#endif
typedef struct SDL_mutex_srw
{
@@ -291,6 +298,10 @@ SDL_CreateMutex(void)
const SDL_mutex_impl_t * impl = &SDL_mutex_impl_cs;
if (!SDL_GetHintBoolean(SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS, SDL_FALSE)) {
+#if __WINRT__
+ /* Link statically on this platform */
+ impl = &SDL_mutex_impl_srw;
+#else
/* Try faster implementation for Windows 7 and newer */
HMODULE kernel32 = GetModuleHandleW(L"kernel32.dll");
if (kernel32) {
@@ -303,6 +314,7 @@ SDL_CreateMutex(void)
impl = &SDL_mutex_impl_srw;
}
}
+#endif
}
/* Copy instead of using pointer to save one level of indirection */
diff --git a/src/thread/windows/SDL_syssem.c b/src/thread/windows/SDL_syssem.c
index ed0e78b2c..45497fc4a 100644
--- a/src/thread/windows/SDL_syssem.c
+++ b/src/thread/windows/SDL_syssem.c
@@ -66,11 +66,17 @@ static SDL_sem_impl_t SDL_sem_impl_active = {0};
* Atomic + WaitOnAddress implementation
*/
+#if __WINRT__
+/* Functions are guaranteed to be available */
+#define pWaitOnAddress WaitOnAddress
+#define pWakeByAddressSingle WakeByAddressSingle
+#else
typedef BOOL(WINAPI *pfnWaitOnAddress)(volatile VOID*, PVOID, SIZE_T, DWORD);
typedef VOID(WINAPI *pfnWakeByAddressSingle)(PVOID);
static pfnWaitOnAddress pWaitOnAddress = NULL;
static pfnWakeByAddressSingle pWakeByAddressSingle = NULL;
+#endif
typedef struct SDL_semaphore_atom
{
@@ -387,6 +393,10 @@ SDL_CreateSemaphore(Uint32 initial_value)
const SDL_sem_impl_t * impl = &SDL_sem_impl_kern;
if (!SDL_GetHintBoolean(SDL_HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL, SDL_FALSE)) {
+#if __WINRT__
+ /* Link statically on this platform */
+ impl = &SDL_sem_impl_atom;
+#else
/* We already statically link to features from this Api
* Set (e.g. WaitForSingleObject). Dynamically loading
* API Sets is not explicitly documented but according to
@@ -403,6 +413,7 @@ SDL_CreateSemaphore(Uint32 initial_value)
impl = &SDL_sem_impl_atom;
}
}
+#endif
}
/* Copy instead of using pointer to save one level of indirection */