summaryrefslogtreecommitdiffstats
path: root/src/system/Qt3DSPlatformSpecific.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/system/Qt3DSPlatformSpecific.h')
-rw-r--r--src/system/Qt3DSPlatformSpecific.h207
1 files changed, 207 insertions, 0 deletions
diff --git a/src/system/Qt3DSPlatformSpecific.h b/src/system/Qt3DSPlatformSpecific.h
new file mode 100644
index 0000000..3fc3401
--- /dev/null
+++ b/src/system/Qt3DSPlatformSpecific.h
@@ -0,0 +1,207 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#pragma once
+
+#if defined(_PCPLATFORM)
+
+#define Q3DStudio_memcpy(inDest, inSource, inCount) \
+ memcpy(inDest, inSource, static_cast<size_t>(inCount))
+#define Q3DStudio_memmove(inDest, inSource, inCount) \
+ memmove(inDest, inSource, static_cast<size_t>(inCount))
+#define Q3DStudio_memset(inDest, inChar, inCount) \
+ memset(inDest, inChar, static_cast<size_t>(inCount))
+#define Q3DStudio_memcmp(inDest, inSource, inCount) \
+ memcmp(inDest, inSource, static_cast<size_t>(inCount))
+#define Q3DStudio_sprintf _snprintf
+#define Q3DStudio_stricmp(inStr1, inStr2) _stricmp(inStr1, inStr2)
+#define Q3DStudio_strnicmp(inStr1, inStr2, inCount) _strnicmp(inStr1, inStr2, inCount)
+#define Q3DStudio_tolower tolower
+#define Q3DStudio_restrict /*__restrict*/
+#define Q3DStudio_dcbt(inOffset, inAddress)
+#define Q3DStudio_strcpy(inDest, inSize, inSource) strcpy_s(inDest, inSize, inSource)
+#define Q3DStudio_strcat(inDest, inSize, inSource) strcat_s(inDest, inSize, inSource)
+#define Q3DStudio_fopen fopen_s
+#define Q3DStudio_sleepmillisec(inMillisec) Sleep(inMillisec)
+#define Q3DStudio_getpid GetCurrentProcessId
+
+#elif defined(_TEGRAPLATFORM)
+
+#define Q3DStudio_memcpy(inDest, inSource, inCount) \
+ memcpy(inDest, inSource, static_cast<size_t>(inCount))
+#define Q3DStudio_memmove(inDest, inSource, inCount) \
+ memmove(inDest, inSource, static_cast<size_t>(inCount))
+#define Q3DStudio_memset(inDest, inChar, inCount) \
+ memset(inDest, inChar, static_cast<size_t>(inCount))
+#define Q3DStudio_memcmp(inDest, inSource, inCount) \
+ memcmp(inDest, inSource, static_cast<size_t>(inCount))
+#define Q3DStudio_sprintf _snprintf
+#define Q3DStudio_stricmp(inStr1, inStr2) _stricmp(inStr1, inStr2)
+#define Q3DStudio_strnicmp(inStr1, inStr2, inCount) _strnicmp(inStr1, inStr2, inCount)
+#define Q3DStudio_tolower tolower
+#define Q3DStudio_restrict /*__restrict*/
+#define Q3DStudio_dcbt(inOffset, inAddress)
+#define Q3DStudio_strcpy(inDest, inSize, inSource) strcpy_s(inDest, inSize, inSource)
+#define Q3DStudio_strcat(inDest, inSize, inSource) strcat_s(inDest, inSize, inSource)
+#define Q3DStudio_fopen(inFilePtr, inFilename, inMode) fopen_s(inFilePtr, inFilename, inMode)
+#define Q3DStudio_sleepmillisec(inMillisec) Sleep(inMillisec)
+#define Q3DStudio_getpid GetCurrentProcessId
+
+#elif defined(_XENONPLATFORM)
+
+#include <xtl.h>
+#define Q3DStudio_memcpy(inDest, inSource, inCount) \
+ memcpy(inDest, inSource, static_cast<size_t>(inCount))
+#define Q3DStudio_memmove(inDest, inSource, inCount) \
+ memmove(inDest, inSource, static_cast<size_t>(inCount))
+#define Q3DStudio_memset(inDest, inChar, inCount) \
+ memset(inDest, inChar, static_cast<size_t>(inCount))
+#define Q3DStudio_memcmp(inDest, inSource, inCount) \
+ memcmp(inDest, inSource, static_cast<size_t>(inCount))
+//#define Q3DStudio_memcpy( inDest, inSource, inCount ) XMemCpy( inDest, inSource,
+//static_cast<SIZE_T>( inCount ) )
+//#define Q3DStudio_memset( inDest, inChar, inCount ) XMemSet( inDest, inChar,
+//static_cast<SIZE_T>( inCount ) )
+#define Q3DStudio_sprintf _snprintf
+#define Q3DStudio_tolower tolower
+#define Q3DStudio_restrict /*__restrict*/
+#define Q3DStudio_dcbt(inOffset, inAddress) __dcbt(inOffset, inAddress)
+#define Q3DStudio_strcpy(inDest, inSize, inSource) strcpy_s(inDest, inSize, inSource)
+#define Q3DStudio_strcat(inDest, inSize, inSource) strcat_s(inDest, inSize, inSource)
+#define Q3DStudio_fopen(inFilePtr, inFilename, inMode) fopen_s(inFilePtr, inFilename, inMode)
+#define Q3DStudio_sleepmillisec(inMillisec) Sleep(inMillisec)
+#define Q3DStudio_getpid GetCurrentProcessId
+#define Q3DStudio_strnicmp(inStr1, inStr2, inCount) _strnicmp(inStr1, inStr2, inCount)
+#define Q3DStudio_stricmp(inStr1, inStr2) _stricmp(inStr1, inStr2)
+
+#elif defined(_PS3PLATFORM)
+
+#define Q3DStudio_memcpy(inDest, inSource, inCount) \
+ memcpy(inDest, inSource, static_cast<size_t>(inCount))
+#define Q3DStudio_memmove(inDest, inSource, inCount) \
+ memmove(inDest, inSource, static_cast<size_t>(inCount))
+#define Q3DStudio_memset(inDest, inChar, inCount) \
+ memset(inDest, inChar, static_cast<size_t>(inCount))
+#define Q3DStudio_memcmp(inDest, inSource, inCount) \
+ memcmp(inDest, inSource, static_cast<size_t>(inCount))
+#define Q3DStudio_sprintf snprintf
+#define Q3DStudio_tolower std::tolower
+#define Q3DStudio_restrict
+#define Q3DStudio_dcbt(inOffset, inAddress)
+#define Q3DStudio_strcpy(inDest, inSize, inSource) strcpy(inDest, inSource)
+#define Q3DStudio_strcat(inDest, inSize, inSource) strcat(inDest, inSource)
+#define Q3DStudio_fopen(inFilePtr, inFilename, inMode) *(inFilePtr) = fopen(inFilename, inMode)
+#define Q3DStudio_sleepmillisec(inMillisec) \
+ { \
+ struct timespec theSleepTime = { inMillisec / 1000, (inMillisec % 1000) * 1000000 }; \
+ ::nanosleep(&theSleepTime, NULL); \
+ }
+#define Q3DStudio_getpid getpid
+#define Q3DStudio_stricmp(inStr1, inStr2) strcasecmp(inStr1, inStr2)
+#define Q3DStudio_strnicmp(inStr1, inStr2, inCount) strncasecmp(inStr1, inStr2, inCount)
+
+#elif defined(_LINUXPLATFORM) || defined(_INTEGRITYPLATFORM)
+#include <time.h>
+#define Q3DStudio_memcpy(inDest, inSource, inCount) \
+ memcpy(inDest, inSource, static_cast<size_t>(inCount))
+#define Q3DStudio_memmove(inDest, inSource, inCount) \
+ memmove(inDest, inSource, static_cast<size_t>(inCount))
+#define Q3DStudio_memset(inDest, inChar, inCount) \
+ memset(inDest, inChar, static_cast<size_t>(inCount))
+#define Q3DStudio_memcmp(inDest, inSource, inCount) \
+ memcmp(inDest, inSource, static_cast<size_t>(inCount))
+#define Q3DStudio_sprintf snprintf
+#define Q3DStudio_stricmp(inStr1, inStr2) strcasecmp(inStr1, inStr2)
+#define Q3DStudio_strnicmp(inStr1, inStr2, inCount) strncasecmp(inStr1, inStr2, inCount)
+#define Q3DStudio_tolower tolower
+#define Q3DStudio_restrict /*__restrict*/
+#define Q3DStudio_dcbt(inOffset, inAddress)
+#define Q3DStudio_strcpy(inDest, inSize, inSource) strcpy(inDest, inSource)
+#define Q3DStudio_strcat(inDest, inSize, inSource) strcat(inDest, inSource)
+#define Q3DStudio_fopen(inFilePtr, inFilename, inMode) *(inFilePtr) = fopen(inFilename, inMode)
+#define Q3DStudio_sleepmillisec(inMillisec) \
+ { \
+ struct timespec theSleepTime = { inMillisec / 1000, (inMillisec % 1000) * 1000000 }; \
+ ::nanosleep(&theSleepTime, NULL); \
+ }
+#define Q3DStudio_getpid getpid
+
+#else
+#error "A platform must be defined"
+#endif
+
+//==============================================================================
+/** @def Q3DStudio_dcbt( inOffset, inAddress )
+ * @brief Data Cache Block Touch - Loads the block of memory containing
+ * the specified address into the data cache.
+ *
+ * A program uses the dcbt instruction to request a cache block fetch before
+ * it is actually needed by the program. This prevents stalls in the pipeline.
+ */
+
+//==============================================================================
+/** @def Q3DStudio_restrict
+ * @brief Cross platform macro for pointer aliasing.
+ *
+ * Performance Implications of Pointer Aliasing
+ *
+ * Doug Cook
+ * Silicon Graphics, Inc.
+ * August, 1997
+ *
+ * Pointer aliasing can have a severe impact on program performance.
+ * Understanding its implications is critical to writing high-performance code.
+ * This document provides a brief introduction to the problem, and suggests
+ * several approaches to solving it through source-code restructuring, compiler
+ * options, and C or C++ language extensions.
+ *
+ * *Aliasing*
+ *
+ * Here's a brief overview of aliasing. Consider the following function:
+ *
+ * void process_data(float *in, float *out, float gain, int nsamps)
+ * {
+ * int i;
+ * for (i = 0; i < nsamps; i++) {
+ * out[i] = in[i] * gain;
+ * }
+ * }
+ *
+ * In C or C++, it is legal for the parameters in and out to point to
+ * overlapping regions in memory. When this happens, in and out are said to be
+ * aliases. When the compiler optimizes the function, it does not in general
+ * know whether in and out are aliases. It must therefore assume that any
+ * store through out can affect the memory pointed to by in, which severely
+ * limits its ability to reorder or parallelize the code (For some simple
+ * cases, the compiler could analyze the entire program to determine that two
+ * pointers cannot be aliases. But in general, it is impossible for the
+ * compiler to determine whether or not two pointers are aliases, so to be
+ * safe, it must assume that they are).
+ */