Ver código fonte

Initial SYCL support:

The core and some ext functions should work.
rhoarau 6 anos atrás
pai
commit
8fb71ffd07
3 arquivos alterados com 51 adições e 0 exclusões
  1. 43 0
      glm/detail/setup.hpp
  2. 7 0
      glm/simd/platform.h
  3. 1 0
      readme.md

+ 43 - 0
glm/detail/setup.hpp

@@ -410,6 +410,7 @@
 #if GLM_COMPILER & GLM_COMPILER_CUDA
 #	define GLM_CUDA_FUNC_DEF __device__ __host__
 #	define GLM_CUDA_FUNC_DECL __device__ __host__
+#error "oops cuda shit"
 #else
 #	define GLM_CUDA_FUNC_DEF
 #	define GLM_CUDA_FUNC_DECL
@@ -529,6 +530,48 @@
 #	define GLM_EXPLICIT
 #endif
 
+///////////////////////////////////////////////////////////////////////////////////
+// SYCL
+
+#if GLM_COMPILER==GLM_COMPILER_SYCL
+
+#include <CL/sycl.hpp>
+#include <limits>
+
+namespace glm {
+namespace std {
+    // import sycl function into the namespace glm::std to force their usages.
+    // It's important to use the builtin intrinsics (sin, exp, ...)
+    // of sycl instead the std ones.
+    using namespace cl::sycl;
+
+    ///////////////////////////////////////////////////////////////////////////////
+    // Import some "harmless" std's stuffs used by glm into
+    // the new glm::std namespace.
+    template<typename T>
+    using numeric_limits = ::std::numeric_limits<T>;
+
+    using ::std::size_t;
+
+    using ::std::uint8_t;
+    using ::std::uint16_t;
+    using ::std::uint32_t;
+    using ::std::uint64_t;
+
+    using ::std::int8_t;
+    using ::std::int16_t;
+    using ::std::int32_t;
+    using ::std::int64_t;
+
+    using ::std::make_unsigned;
+    ///////////////////////////////////////////////////////////////////////////////
+} //namespace std
+} //namespace glm
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////////
+
 ///////////////////////////////////////////////////////////////////////////////////
 // Length type: all length functions returns a length_t type.
 // When GLM_FORCE_SIZE_T_LENGTH is defined, length_t is a typedef of size_t otherwise

+ 7 - 0
glm/simd/platform.h

@@ -81,6 +81,9 @@
 #define GLM_COMPILER_CUDA75			0x100000B0
 #define GLM_COMPILER_CUDA80			0x100000C0
 
+// SYCL
+#define GLM_COMPILER_SYCL			0x00300000
+
 // Clang
 #define GLM_COMPILER_CLANG			0x20000000
 #define GLM_COMPILER_CLANG34		0x20000050
@@ -129,6 +132,10 @@
 #		error "GLM requires CUDA 7.0 or higher"
 #	endif
 
+// SYCL
+#elif defined(__SYCL_DEVICE_ONLY__)
+#	define GLM_COMPILER GLM_COMPILER_SYCL
+
 // Clang
 #elif defined(__clang__)
 #	if defined(__apple_build_version__)

+ 1 - 0
readme.md

@@ -15,6 +15,7 @@ This library works perfectly with *[OpenGL](https://www.opengl.org)* but it also
 - [LLVM](http://llvm.org/) 3.4 and higher
 - [Visual C++](http://www.visualstudio.com/) 2013 and higher
 - [CUDA](https://developer.nvidia.com/about-cuda) 7.0 and higher (experimental)
+- [SYCL](https://www.khronos.org/sycl/) 1.2.1 and higher (experimental: only [ComputeCpp](https://codeplay.com/products/computesuite/computecpp) has been tested).
 - Any C++11 compiler
 
 For more information about *GLM*, please have a look at the [manual](manual.md) and the [API reference documentation](http://glm.g-truc.net/0.9.8/api/index.html).