summaryrefslogtreecommitdiff
path: root/devel/opencl/files/patch-cl.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'devel/opencl/files/patch-cl.hpp')
-rw-r--r--devel/opencl/files/patch-cl.hpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/devel/opencl/files/patch-cl.hpp b/devel/opencl/files/patch-cl.hpp
new file mode 100644
index 000000000000..d59d24491425
--- /dev/null
+++ b/devel/opencl/files/patch-cl.hpp
@@ -0,0 +1,52 @@
+--- cl.hpp.orig 2013-09-01 13:35:56.642641000 +0000
++++ cl.hpp
+@@ -210,11 +210,10 @@
+ #include <string>
+ #endif
+
+-#if defined(linux) || defined(__APPLE__) || defined(__MACOSX)
++#if defined(linux) || defined(__APPLE__) || defined(__MACOSX) \
++ || defined(__FreeBSD__) || defined(__DragonFly__)
+ #include <alloca.h>
+
+-#include <emmintrin.h>
+-#include <xmmintrin.h>
+ #endif // linux
+
+ #include <cstring>
+@@ -1037,7 +1036,7 @@ namespace detail {
+ #endif // !_WIN32
+ }
+
+- inline void fence() { _mm_mfence(); }
++ inline void fence() { __sync_synchronize(); }
+ }; // namespace detail
+
+
+@@ -2037,6 +2036,26 @@ public:
+ #endif // #if defined(CL_VERSION_1_1)
+ };
+
++template <typename Func>
++cl_int detail::GetInfoHelper<Func, VECTOR_CLASS<cl::Device> >::
++ get(Func f, cl_uint name, VECTOR_CLASS<cl::Device>* param)
++ {
++ ::size_t required;
++ cl_int err = f(name, 0, NULL, &required);
++ if (err != CL_SUCCESS) {
++ return err;
++ }
++
++ cl_device_id* value = (cl_device_id*) alloca(required);
++ err = f(name, required, value, NULL);
++ if (err != CL_SUCCESS) {
++ return err;
++ }
++
++ param->assign(&value[0], &value[required/sizeof(cl_device_id)]);
++ return CL_SUCCESS;
++ }
++
+ /*! \brief Class interface for cl_platform_id.
+ *
+ * \note Copies of these objects are inexpensive, since they don't 'own'