mirror of https://github.com/encounter/SDL.git
thread/windows: Statically link synchronization APIs on WINRT
GetModuleHandleW is not available on those platforms --- .../WinPhone81_VS2013/SDL-WinPhone81.vcxproj | 8 ++++---- VisualC-WinRT/WinRT81_VS2013/SDL-WinRT81.vcxproj | 12 ++++++------ src/thread/windows/SDL_sysmutex.c | 12 ++++++++++++ src/thread/windows/SDL_syssem.c | 11 +++++++++++ 4 files changed, 33 insertions(+), 10 deletions(-)
This commit is contained in:
parent
ff913a22f4
commit
d6afc1c608
|
@ -431,7 +431,7 @@
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||||
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||||
<AdditionalDependencies>DXGI.lib;d3d11.lib;mmdevapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>DXGI.lib;d3d11.lib;mmdevapi.lib;synchronization.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
@ -445,7 +445,7 @@
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||||
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||||
<AdditionalDependencies>DXGI.lib;d3d11.lib;mmdevapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>DXGI.lib;d3d11.lib;mmdevapi.lib;synchronization.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|arm'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|arm'">
|
||||||
|
@ -459,7 +459,7 @@
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||||
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||||
<AdditionalDependencies>DXGI.lib;d3d11.lib;mmdevapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>DXGI.lib;d3d11.lib;mmdevapi.lib;synchronization.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|arm'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|arm'">
|
||||||
|
@ -473,7 +473,7 @@
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||||
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||||
<AdditionalDependencies>DXGI.lib;d3d11.lib;mmdevapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>DXGI.lib;d3d11.lib;mmdevapi.lib;synchronization.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
|
|
@ -510,7 +510,7 @@
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||||
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||||
<AdditionalDependencies>vccorlibd.lib;msvcrtd.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<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)</AdditionalDependencies>
|
||||||
<IgnoreSpecificDefaultLibraries>vccorlibd;msvcrtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>vccorlibd;msvcrtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
|
@ -525,7 +525,7 @@
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||||
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||||
<AdditionalDependencies>vccorlib.lib;msvcrt.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<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)</AdditionalDependencies>
|
||||||
<IgnoreSpecificDefaultLibraries>vccorlib;msvcrt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>vccorlib;msvcrt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
|
@ -540,7 +540,7 @@
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||||
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||||
<AdditionalDependencies>vccorlibd.lib;msvcrtd.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<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)</AdditionalDependencies>
|
||||||
<IgnoreSpecificDefaultLibraries>vccorlibd;msvcrtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>vccorlibd;msvcrtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
|
@ -555,7 +555,7 @@
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||||
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||||
<AdditionalDependencies>vccorlib.lib;msvcrt.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<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)</AdditionalDependencies>
|
||||||
<IgnoreSpecificDefaultLibraries>vccorlib;msvcrt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>vccorlib;msvcrt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
|
@ -570,7 +570,7 @@
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||||
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||||
<AdditionalDependencies>vccorlibd.lib;msvcrtd.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<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)</AdditionalDependencies>
|
||||||
<IgnoreSpecificDefaultLibraries>vccorlibd;msvcrtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>vccorlibd;msvcrtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
|
@ -585,7 +585,7 @@
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
||||||
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||||
<AdditionalDependencies>vccorlib.lib;msvcrt.lib;xinput.lib;mmdevapi.lib;d2d1.lib;d3d11.lib;dxgi.lib;ole32.lib;windowscodecs.lib;dwrite.lib;kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<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)</AdditionalDependencies>
|
||||||
<IgnoreSpecificDefaultLibraries>vccorlib;msvcrt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>vccorlib;msvcrt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
|
|
|
@ -66,12 +66,19 @@ typedef struct _SRWLOCK {
|
||||||
} SRWLOCK, *PSRWLOCK;
|
} SRWLOCK, *PSRWLOCK;
|
||||||
#endif
|
#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 *pfnReleaseSRWLockExclusive)(PSRWLOCK);
|
||||||
typedef VOID(WINAPI *pfnAcquireSRWLockExclusive)(PSRWLOCK);
|
typedef VOID(WINAPI *pfnAcquireSRWLockExclusive)(PSRWLOCK);
|
||||||
typedef BOOLEAN(WINAPI *pfnTryAcquireSRWLockExclusive)(PSRWLOCK);
|
typedef BOOLEAN(WINAPI *pfnTryAcquireSRWLockExclusive)(PSRWLOCK);
|
||||||
static pfnReleaseSRWLockExclusive pReleaseSRWLockExclusive = NULL;
|
static pfnReleaseSRWLockExclusive pReleaseSRWLockExclusive = NULL;
|
||||||
static pfnAcquireSRWLockExclusive pAcquireSRWLockExclusive = NULL;
|
static pfnAcquireSRWLockExclusive pAcquireSRWLockExclusive = NULL;
|
||||||
static pfnTryAcquireSRWLockExclusive pTryAcquireSRWLockExclusive = NULL;
|
static pfnTryAcquireSRWLockExclusive pTryAcquireSRWLockExclusive = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct SDL_mutex_srw
|
typedef struct SDL_mutex_srw
|
||||||
{
|
{
|
||||||
|
@ -291,6 +298,10 @@ SDL_CreateMutex(void)
|
||||||
const SDL_mutex_impl_t * impl = &SDL_mutex_impl_cs;
|
const SDL_mutex_impl_t * impl = &SDL_mutex_impl_cs;
|
||||||
|
|
||||||
if (!SDL_GetHintBoolean(SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS, SDL_FALSE)) {
|
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 */
|
/* Try faster implementation for Windows 7 and newer */
|
||||||
HMODULE kernel32 = GetModuleHandleW(L"kernel32.dll");
|
HMODULE kernel32 = GetModuleHandleW(L"kernel32.dll");
|
||||||
if (kernel32) {
|
if (kernel32) {
|
||||||
|
@ -303,6 +314,7 @@ SDL_CreateMutex(void)
|
||||||
impl = &SDL_mutex_impl_srw;
|
impl = &SDL_mutex_impl_srw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy instead of using pointer to save one level of indirection */
|
/* Copy instead of using pointer to save one level of indirection */
|
||||||
|
|
|
@ -66,11 +66,17 @@ static SDL_sem_impl_t SDL_sem_impl_active = {0};
|
||||||
* Atomic + WaitOnAddress implementation
|
* 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 BOOL(WINAPI *pfnWaitOnAddress)(volatile VOID*, PVOID, SIZE_T, DWORD);
|
||||||
typedef VOID(WINAPI *pfnWakeByAddressSingle)(PVOID);
|
typedef VOID(WINAPI *pfnWakeByAddressSingle)(PVOID);
|
||||||
|
|
||||||
static pfnWaitOnAddress pWaitOnAddress = NULL;
|
static pfnWaitOnAddress pWaitOnAddress = NULL;
|
||||||
static pfnWakeByAddressSingle pWakeByAddressSingle = NULL;
|
static pfnWakeByAddressSingle pWakeByAddressSingle = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct SDL_semaphore_atom
|
typedef struct SDL_semaphore_atom
|
||||||
{
|
{
|
||||||
|
@ -387,6 +393,10 @@ SDL_CreateSemaphore(Uint32 initial_value)
|
||||||
const SDL_sem_impl_t * impl = &SDL_sem_impl_kern;
|
const SDL_sem_impl_t * impl = &SDL_sem_impl_kern;
|
||||||
|
|
||||||
if (!SDL_GetHintBoolean(SDL_HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL, SDL_FALSE)) {
|
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
|
/* We already statically link to features from this Api
|
||||||
* Set (e.g. WaitForSingleObject). Dynamically loading
|
* Set (e.g. WaitForSingleObject). Dynamically loading
|
||||||
* API Sets is not explicitly documented but according to
|
* API Sets is not explicitly documented but according to
|
||||||
|
@ -403,6 +413,7 @@ SDL_CreateSemaphore(Uint32 initial_value)
|
||||||
impl = &SDL_sem_impl_atom;
|
impl = &SDL_sem_impl_atom;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy instead of using pointer to save one level of indirection */
|
/* Copy instead of using pointer to save one level of indirection */
|
||||||
|
|
Loading…
Reference in New Issue