diff --git a/VisualC/SDL/SDL_VS2012_WinRT.vcxproj b/VisualC/SDL/SDL_VS2012_WinRT.vcxproj
index bdf0478d6..7d6deb876 100644
--- a/VisualC/SDL/SDL_VS2012_WinRT.vcxproj
+++ b/VisualC/SDL/SDL_VS2012_WinRT.vcxproj
@@ -94,8 +94,8 @@
-
+
diff --git a/include/SDL_config_windowsrt.h b/include/SDL_config_windowsrt.h
index 7634d48a6..8330c10be 100644
--- a/include/SDL_config_windowsrt.h
+++ b/include/SDL_config_windowsrt.h
@@ -154,10 +154,7 @@ typedef unsigned int uintptr_t;
#define SDL_THREAD_STDCPP 1
/* Enable various timer systems */
-// TODO, WinRT: look into getting SDL's pre-WinRT timers working.
-// Some functions there are supported in WinRT, others are not.
-//#define SDL_TIMER_WINDOWS 1
-#define SDL_TIMERS_DISABLED 1
+#define SDL_TIMER_WINDOWS 1
/* Enable various video drivers */
#define SDL_VIDEO_DRIVER_WINRT 1
diff --git a/src/timer/windows/SDL_systimer.c b/src/timer/windows/SDL_systimer.c
index a08c9ff31..60524d93c 100644
--- a/src/timer/windows/SDL_systimer.c
+++ b/src/timer/windows/SDL_systimer.c
@@ -48,7 +48,7 @@ SDL_StartTicks(void)
#ifdef USE_GETTICKCOUNT
start = GetTickCount();
#else
-#if 0 /* Apparently there are problems with QPC on Win2K */
+#ifdef __WINRT__ /* Apparently there are problems with QPC on Win2K */
if (QueryPerformanceFrequency(&hires_ticks_per_second) == TRUE) {
hires_timer_available = TRUE;
QueryPerformanceCounter(&hires_start_ticks);
@@ -56,8 +56,12 @@ SDL_StartTicks(void)
#endif
{
hires_timer_available = FALSE;
+#ifdef __WINRT__
+ start = 0; /* the timer failed to start! */
+#else
timeBeginPeriod(1); /* use 1 ms timer precision */
start = timeGetTime();
+#endif
}
#endif
}
@@ -82,7 +86,11 @@ SDL_GetTicks(void)
return (DWORD) hires_now.QuadPart;
} else {
+#ifdef __WINRT__
+ now = 0;
+#else
now = timeGetTime();
+#endif
}
#endif
@@ -116,6 +124,19 @@ SDL_GetPerformanceFrequency(void)
return frequency.QuadPart;
}
+#ifdef __WINRT__
+static void
+Sleep(DWORD timeout)
+{
+ static HANDLE mutex = 0;
+ if ( ! mutex )
+ {
+ mutex = CreateEventEx(0, 0, 0, EVENT_ALL_ACCESS);
+ }
+ WaitForSingleObjectEx(mutex, timeout, FALSE);
+}
+#endif
+
void
SDL_Delay(Uint32 ms)
{