2 // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
11 // This file contains contains os-specific datatypes and
12 // declares any os-specific functions.
15 #if defined(_WIN32) || defined(_WIN64)
17 #elif defined(__APPLE__) || defined(__linux__) || \
18 defined(__FreeBSD__) || defined(__OpenBSD__) || \
20 #define ANGLE_OS_POSIX
22 #error Unsupported platform.
25 #if defined(ANGLE_USE_NSPR)
27 #elif defined(ANGLE_OS_WIN)
29 #define VC_EXTRALEAN 1
31 #elif defined(ANGLE_OS_POSIX)
33 #include <semaphore.h>
35 #endif // ANGLE_USE_NSPR
38 #include "compiler/debug.h"
41 // Thread Local Storage Operations
43 #if defined(ANGLE_USE_NSPR)
44 typedef PRUintn OS_TLSIndex;
45 #define OS_INVALID_TLS_INDEX 0xFFFFFFFF
46 #elif defined(ANGLE_OS_WIN)
47 typedef DWORD OS_TLSIndex;
48 #define OS_INVALID_TLS_INDEX (TLS_OUT_OF_INDEXES)
49 #elif defined(ANGLE_OS_POSIX)
50 typedef unsigned int OS_TLSIndex;
51 #define OS_INVALID_TLS_INDEX 0xFFFFFFFF
52 #endif // ANGLE_USE_NSPR
54 OS_TLSIndex OS_AllocTLSIndex();
55 bool OS_SetTLSValue(OS_TLSIndex nIndex, void *lpvValue);
56 bool OS_FreeTLSIndex(OS_TLSIndex nIndex);
58 inline void* OS_GetTLSValue(OS_TLSIndex nIndex)
60 ASSERT(nIndex != OS_INVALID_TLS_INDEX);
61 #if defined(ANGLE_USE_NSPR)
62 return PR_GetThreadPrivate(nIndex);
63 #elif defined(ANGLE_OS_WIN)
64 return TlsGetValue(nIndex);
65 #elif defined(ANGLE_OS_POSIX)
66 return pthread_getspecific(nIndex);
67 #endif // ANGLE_OS_WIN
70 #endif // __OSINCLUDE_H