Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
tsoc
openmm
Commits
1796f668
Unverified
Commit
1796f668
authored
Jan 14, 2020
by
peastman
Committed by
GitHub
Jan 14, 2020
Browse files
Merge pull request #2522 from jaimergp/fix-ppc64le
Update cl.hpp
parents
90656381
2a7d78a6
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
1365 additions
and
714 deletions
+1365
-714
platforms/opencl/src/cl.hpp
platforms/opencl/src/cl.hpp
+1365
-714
No files found.
platforms/opencl/src/cl.hpp
View file @
1796f668
/*******************************************************************************
/*******************************************************************************
* Copyright (c) 2008-201
3
The Khronos Group Inc.
* Copyright (c) 2008-201
5
The Khronos Group Inc.
*
*
* Permission is hereby granted, free of charge, to any person obtaining a
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and/or associated documentation files (the
* copy of this software and/or associated documentation files (the
...
@@ -12,6 +12,11 @@
...
@@ -12,6 +12,11 @@
* The above copyright notice and this permission notice shall be included
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Materials.
* in all copies or substantial portions of the Materials.
*
*
* MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
* KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
* SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
* https://www.khronos.org/registry/
*
* THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
...
@@ -31,9 +36,10 @@
...
@@ -31,9 +36,10 @@
* Brian Cole, March 3rd 2010 and April 2012
* Brian Cole, March 3rd 2010 and April 2012
* Matt Gruenke, April 2012.
* Matt Gruenke, April 2012.
* Bruce Merry, February 2013.
* Bruce Merry, February 2013.
* Tom Deakin and Simon McIntosh-Smith, July 2013
*
*
* \version 1.2.
5
* \version 1.2.
9
* \date
June
201
3
* \date
December
201
5
*
*
* Optional extension support
* Optional extension support
*
*
...
@@ -143,41 +149,49 @@
...
@@ -143,41 +149,49 @@
*/
*/
#ifndef CL_HPP_
#ifndef CL_HPP_
#define CL_HPP_
#define CL_HPP_
#define CL_USE_DEPRECATED_OPENCL_2_0_APIS
// The latest version of the OpenCL C++ bindings can be found on GitHub:
// -> https://github.com/KhronosGroup/OpenCL-CLHPP
#pragma message("This version of the OpenCL Host API C++ bindings is deprecated, please use cl2.hpp instead.")
#ifdef _WIN32
#ifdef _WIN32
#include <windows.h>
#include <malloc.h>
#include <malloc.h>
#include <iterator>
#include <intrin.h>
#if defined(__CL_ENABLE_EXCEPTIONS)
#include <exception>
#endif // #if defined(__CL_ENABLE_EXCEPTIONS)
#pragma push_macro("max")
#undef max
#if defined(USE_DX_INTEROP)
#if defined(USE_DX_INTEROP)
#include <CL/cl_d3d10.h>
#include <CL/cl_d3d10.h>
#include <CL/cl_dx9_media_sharing.h>
#include <CL/cl_dx9_media_sharing.h>
#endif
#endif
#endif // _WIN32
#endif // _WIN32
#if defined(_MSC_VER)
#include <intrin.h>
#endif // _MSC_VER
//
//
#if defined(USE_CL_DEVICE_FISSION)
#if defined(USE_CL_DEVICE_FISSION)
#include <CL/cl_ext.h>
#include <CL/cl_ext.h>
#endif
#endif
#if defined(__APPLE__) || defined(__MACOSX)
#if defined(__APPLE__) || defined(__MACOSX)
#include <OpenGL/OpenGL.h>
#include <OpenCL/opencl.h>
#include <OpenCL/opencl.h>
#include <libkern/OSAtomic.h>
#else
#else
#include <GL/gl.h>
#include <CL/opencl.h>
#include <CL/opencl.h>
#endif // !__APPLE__
#endif // !__APPLE__
#if (_MSC_VER >= 1700) || (__cplusplus >= 201103L)
#define CL_HPP_RVALUE_REFERENCES_SUPPORTED
#define CL_HPP_CPP11_ATOMICS_SUPPORTED
#include <atomic>
#endif
#if (__cplusplus >= 201103L)
#define CL_HPP_NOEXCEPT noexcept
#else
#define CL_HPP_NOEXCEPT
#endif
// To avoid accidentally taking ownership of core OpenCL types
// To avoid accidentally taking ownership of core OpenCL types
// such as cl_kernel constructors are made explicit
// such as cl_kernel constructors are made explicit
// under OpenCL 1.2
// under OpenCL 1.2
...
@@ -202,6 +216,11 @@
...
@@ -202,6 +216,11 @@
#include <utility>
#include <utility>
#include <limits>
#include <limits>
#include <iterator>
#if defined(__CL_ENABLE_EXCEPTIONS)
#include <exception>
#endif // #if defined(__CL_ENABLE_EXCEPTIONS)
#if !defined(__NO_STD_VECTOR)
#if !defined(__NO_STD_VECTOR)
#include <vector>
#include <vector>
...
@@ -211,15 +230,31 @@
...
@@ -211,15 +230,31 @@
#include <string>
#include <string>
#endif
#endif
#if defined(linux) || defined(__APPLE__) || defined(__MACOSX)
#if
defined(__ANDROID__) ||
defined(linux) || defined(__APPLE__) || defined(__MACOSX)
#include <alloca.h>
#include <alloca.h>
#include <emmintrin.h>
#include <xmmintrin.h>
#endif // linux
#endif // linux
#include <cstring>
#include <cstring>
// Compiler specific weak linking
#ifndef CL_WEAK_ATTRIB_PREFIX
// C++17: use inline variables/functions
#if __cplusplus >= 201703L
#define CL_USE_INLINE
#endif
#ifdef CL_USE_INLINE
#define CL_WEAK_ATTRIB_PREFIX inline
#define CL_WEAK_ATTRIB_SUFFIX
#elif _WIN32
#define CL_WEAK_ATTRIB_PREFIX __declspec(selectany)
#define CL_WEAK_ATTRIB_SUFFIX
#else // GCC, CLANG, etc.
#define CL_WEAK_ATTRIB_PREFIX
#define CL_WEAK_ATTRIB_SUFFIX __attribute__((weak))
#endif // CL_USE_INLINE
#endif // CL_WEAK_ATTRIB_PREFIX
/*! \namespace cl
/*! \namespace cl
*
*
...
@@ -389,7 +424,7 @@ static inline cl_int errHandler (cl_int err, const char * errStr = NULL)
...
@@ -389,7 +424,7 @@ static inline cl_int errHandler (cl_int err, const char * errStr = NULL)
#define __BUILD_PROGRAM_ERR __ERR_STR(clBuildProgram)
#define __BUILD_PROGRAM_ERR __ERR_STR(clBuildProgram)
#if defined(CL_VERSION_1_2)
#if defined(CL_VERSION_1_2)
#define __COMPILE_PROGRAM_ERR __ERR_STR(clCompileProgram)
#define __COMPILE_PROGRAM_ERR __ERR_STR(clCompileProgram)
#define __LINK_PROGRAM_ERR __ERR_STR(clLinkProgram)
#endif // #if defined(CL_VERSION_1_2)
#endif // #if defined(CL_VERSION_1_2)
#define __CREATE_KERNELS_IN_PROGRAM_ERR __ERR_STR(clCreateKernelsInProgram)
#define __CREATE_KERNELS_IN_PROGRAM_ERR __ERR_STR(clCreateKernelsInProgram)
...
@@ -474,7 +509,7 @@ typedef std::string STRING_CLASS;
...
@@ -474,7 +509,7 @@ typedef std::string STRING_CLASS;
* re-define the string class to match the std::string
* re-define the string class to match the std::string
* interface by defining STRING_CLASS
* interface by defining STRING_CLASS
*/
*/
class
CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
string
CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
class
CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
string
{
{
private:
private:
::
size_t
size_
;
::
size_t
size_
;
...
@@ -546,7 +581,7 @@ public:
...
@@ -546,7 +581,7 @@ public:
}
}
else
{
else
{
char
*
newString
=
new
char
[
n
+
1
];
char
*
newString
=
new
char
[
n
+
1
];
in
t
copySize
=
n
;
::
size_
t
copySize
=
n
;
if
(
size_
<
n
)
{
if
(
size_
<
n
)
{
copySize
=
size_
;
copySize
=
size_
;
}
}
...
@@ -640,7 +675,7 @@ public:
...
@@ -640,7 +675,7 @@ public:
* or "" if empty/unset.
* or "" if empty/unset.
*/
*/
const
char
*
c_str
(
void
)
const
{
return
(
str_
)
?
str_
:
""
;}
const
char
*
c_str
(
void
)
const
{
return
(
str_
)
?
str_
:
""
;}
};
}
CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
;
typedef
cl
::
string
STRING_CLASS
;
typedef
cl
::
string
STRING_CLASS
;
#endif // #elif !defined(__USE_DEV_STRING)
#endif // #elif !defined(__USE_DEV_STRING)
...
@@ -676,7 +711,7 @@ typedef cl::string STRING_CLASS;
...
@@ -676,7 +711,7 @@ typedef cl::string STRING_CLASS;
* \param N maximum size of the vector.
* \param N maximum size of the vector.
*/
*/
template
<
typename
T
,
unsigned
int
N
=
__MAX_DEFAULT_VECTOR_SIZE
>
template
<
typename
T
,
unsigned
int
N
=
__MAX_DEFAULT_VECTOR_SIZE
>
class
CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
vector
CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
class
CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
vector
{
{
private:
private:
T
data_
[
N
];
T
data_
[
N
];
...
@@ -830,6 +865,28 @@ public:
...
@@ -830,6 +865,28 @@ public:
return
N
;
return
N
;
}
}
//! \brief Resizes the vector to the given size
void
resize
(
unsigned
int
newSize
,
T
fill
=
T
())
{
if
(
newSize
>
N
)
{
detail
::
errHandler
(
CL_MEM_OBJECT_ALLOCATION_FAILURE
,
__VECTOR_CAPACITY_ERR
);
}
else
{
while
(
size_
<
newSize
)
{
new
(
&
data_
[
size_
])
T
(
fill
);
size_
++
;
}
while
(
size_
>
newSize
)
{
--
size_
;
data_
[
size_
].
~
T
();
}
}
}
/*! \brief Returns a reference to a given element.
/*! \brief Returns a reference to a given element.
*
*
* \param index which element to access. *
* \param index which element to access. *
...
@@ -1006,7 +1063,7 @@ public:
...
@@ -1006,7 +1063,7 @@ public:
{
{
return
data_
[
size_
-
1
];
return
data_
[
size_
-
1
];
}
}
}
;
}
CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
;
#endif // #if !defined(__USE_DEV_VECTOR) && !defined(__NO_STD_VECTOR)
#endif // #if !defined(__USE_DEV_VECTOR) && !defined(__NO_STD_VECTOR)
...
@@ -1021,25 +1078,39 @@ namespace detail {
...
@@ -1021,25 +1078,39 @@ namespace detail {
/*
/*
* Compare and exchange primitives are needed for handling of defaults
* Compare and exchange primitives are needed for handling of defaults
*/
*/
#ifdef CL_HPP_CPP11_ATOMICS_SUPPORTED
inline
int
compare_exchange
(
std
::
atomic
<
int
>
*
dest
,
int
exchange
,
int
comparand
)
#else // !CL_HPP_CPP11_ATOMICS_SUPPORTED
inline
int
compare_exchange
(
volatile
int
*
dest
,
int
exchange
,
int
comparand
)
inline
int
compare_exchange
(
volatile
int
*
dest
,
int
exchange
,
int
comparand
)
#endif // !CL_HPP_CPP11_ATOMICS_SUPPORTED
{
{
#ifdef _WIN32
#ifdef CL_HPP_CPP11_ATOMICS_SUPPORTED
return
(
int
)(
InterlockedCompareExchange
(
std
::
atomic_compare_exchange_strong
(
dest
,
&
comparand
,
exchange
);
return
comparand
;
#elif _MSC_VER
return
(
int
)(
_InterlockedCompareExchange
(
(
volatile
long
*
)
dest
,
(
volatile
long
*
)
dest
,
(
long
)
exchange
,
(
long
)
exchange
,
(
long
)
comparand
));
(
long
)
comparand
));
#elif defined(__APPLE__) || defined(__MACOSX)
#else // !_MSC_VER && !CL_HPP_CPP11_ATOMICS_SUPPORTED
return
OSAtomicOr32Orig
((
uint32_t
)
exchange
,
(
volatile
uint32_t
*
)
dest
);
#else // !_WIN32 || defined(__APPLE__) || defined(__MACOSX)
return
(
__sync_val_compare_and_swap
(
return
(
__sync_val_compare_and_swap
(
dest
,
dest
,
comparand
,
comparand
,
exchange
));
exchange
));
#endif // !
_WIN32
#endif // !
CL_HPP_CPP11_ATOMICS_SUPPORTED
}
}
inline
void
fence
()
{
_mm_mfence
();
}
inline
void
fence
()
{
};
// namespace detail
#ifdef CL_HPP_CPP11_ATOMICS_SUPPORTED
std
::
atomic_thread_fence
(
std
::
memory_order_seq_cst
);
#elif _MSC_VER // !CL_HPP_CPP11_ATOMICS_SUPPORTED
_ReadWriteBarrier
();
#else // !_MSC_VER && !CL_HPP_CPP11_ATOMICS_SUPPORTED
__sync_synchronize
();
#endif // !CL_HPP_CPP11_ATOMICS_SUPPORTED
}
}
// namespace detail
/*! \brief class used to interface between C++ and
/*! \brief class used to interface between C++ and
...
@@ -1163,13 +1234,14 @@ inline cl_int getInfoHelper(Func f, cl_uint name, VECTOR_CLASS<char *>* param, i
...
@@ -1163,13 +1234,14 @@ inline cl_int getInfoHelper(Func f, cl_uint name, VECTOR_CLASS<char *>* param, i
template
<
typename
Func
>
template
<
typename
Func
>
inline
cl_int
getInfoHelper
(
Func
f
,
cl_uint
name
,
STRING_CLASS
*
param
,
long
)
inline
cl_int
getInfoHelper
(
Func
f
,
cl_uint
name
,
STRING_CLASS
*
param
,
long
)
{
{
#if defined(__NO_STD_VECTOR) || defined(__NO_STD_STRING)
::
size_t
required
;
::
size_t
required
;
cl_int
err
=
f
(
name
,
0
,
NULL
,
&
required
);
cl_int
err
=
f
(
name
,
0
,
NULL
,
&
required
);
if
(
err
!=
CL_SUCCESS
)
{
if
(
err
!=
CL_SUCCESS
)
{
return
err
;
return
err
;
}
}
char
*
value
=
(
char
*
)
alloca
(
required
);
char
*
value
=
(
char
*
)
alloca
(
required
);
err
=
f
(
name
,
required
,
value
,
NULL
);
err
=
f
(
name
,
required
,
value
,
NULL
);
if
(
err
!=
CL_SUCCESS
)
{
if
(
err
!=
CL_SUCCESS
)
{
return
err
;
return
err
;
...
@@ -1177,6 +1249,30 @@ inline cl_int getInfoHelper(Func f, cl_uint name, STRING_CLASS* param, long)
...
@@ -1177,6 +1249,30 @@ inline cl_int getInfoHelper(Func f, cl_uint name, STRING_CLASS* param, long)
*
param
=
value
;
*
param
=
value
;
return
CL_SUCCESS
;
return
CL_SUCCESS
;
#else
::
size_t
required
;
cl_int
err
=
f
(
name
,
0
,
NULL
,
&
required
);
if
(
err
!=
CL_SUCCESS
)
{
return
err
;
}
if
(
required
>
0
)
{
// std::string has a constant data member
// a char vector does not
VECTOR_CLASS
<
char
>
value
(
required
);
err
=
f
(
name
,
required
,
value
.
data
(),
NULL
);
if
(
err
!=
CL_SUCCESS
)
{
return
err
;
}
if
(
param
)
{
param
->
assign
(
value
.
begin
(),
value
.
end
()
-
1u
);
}
}
else
if
(
param
)
{
param
->
assign
(
""
);
}
#endif
return
CL_SUCCESS
;
}
}
// Specialized GetInfoHelper for cl::size_t params
// Specialized GetInfoHelper for cl::size_t params
...
@@ -1264,6 +1360,8 @@ inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typename T::cl_
...
@@ -1264,6 +1360,8 @@ inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typename T::cl_
F(cl_device_info, CL_DEVICE_MEM_BASE_ADDR_ALIGN, cl_uint) \
F(cl_device_info, CL_DEVICE_MEM_BASE_ADDR_ALIGN, cl_uint) \
F(cl_device_info, CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE, cl_uint) \
F(cl_device_info, CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE, cl_uint) \
F(cl_device_info, CL_DEVICE_SINGLE_FP_CONFIG, cl_device_fp_config) \
F(cl_device_info, CL_DEVICE_SINGLE_FP_CONFIG, cl_device_fp_config) \
F(cl_device_info, CL_DEVICE_DOUBLE_FP_CONFIG, cl_device_fp_config) \
F(cl_device_info, CL_DEVICE_HALF_FP_CONFIG, cl_device_fp_config) \
F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_TYPE, cl_device_mem_cache_type) \
F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_TYPE, cl_device_mem_cache_type) \
F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE, cl_uint)\
F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE, cl_uint)\
F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_SIZE, cl_ulong) \
F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_SIZE, cl_ulong) \
...
@@ -1294,7 +1392,7 @@ inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typename T::cl_
...
@@ -1294,7 +1392,7 @@ inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typename T::cl_
F(cl_event_info, CL_EVENT_COMMAND_QUEUE, cl::CommandQueue) \
F(cl_event_info, CL_EVENT_COMMAND_QUEUE, cl::CommandQueue) \
F(cl_event_info, CL_EVENT_COMMAND_TYPE, cl_command_type) \
F(cl_event_info, CL_EVENT_COMMAND_TYPE, cl_command_type) \
F(cl_event_info, CL_EVENT_REFERENCE_COUNT, cl_uint) \
F(cl_event_info, CL_EVENT_REFERENCE_COUNT, cl_uint) \
F(cl_event_info, CL_EVENT_COMMAND_EXECUTION_STATUS, cl_
u
int) \
F(cl_event_info, CL_EVENT_COMMAND_EXECUTION_STATUS, cl_int) \
\
\
F(cl_profiling_info, CL_PROFILING_COMMAND_QUEUED, cl_ulong) \
F(cl_profiling_info, CL_PROFILING_COMMAND_QUEUED, cl_ulong) \
F(cl_profiling_info, CL_PROFILING_COMMAND_SUBMIT, cl_ulong) \
F(cl_profiling_info, CL_PROFILING_COMMAND_SUBMIT, cl_ulong) \
...
@@ -1319,9 +1417,9 @@ inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typename T::cl_
...
@@ -1319,9 +1417,9 @@ inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typename T::cl_
\
\
F(cl_sampler_info, CL_SAMPLER_REFERENCE_COUNT, cl_uint) \
F(cl_sampler_info, CL_SAMPLER_REFERENCE_COUNT, cl_uint) \
F(cl_sampler_info, CL_SAMPLER_CONTEXT, cl::Context) \
F(cl_sampler_info, CL_SAMPLER_CONTEXT, cl::Context) \
F(cl_sampler_info, CL_SAMPLER_NORMALIZED_COORDS, cl_
addressing_mode
) \
F(cl_sampler_info, CL_SAMPLER_NORMALIZED_COORDS, cl_
bool
) \
F(cl_sampler_info, CL_SAMPLER_ADDRESSING_MODE, cl_
filter
_mode) \
F(cl_sampler_info, CL_SAMPLER_ADDRESSING_MODE, cl_
addressing
_mode) \
F(cl_sampler_info, CL_SAMPLER_FILTER_MODE, cl_
bool
) \
F(cl_sampler_info, CL_SAMPLER_FILTER_MODE, cl_
filter_mode
) \
\
\
F(cl_program_info, CL_PROGRAM_REFERENCE_COUNT, cl_uint) \
F(cl_program_info, CL_PROGRAM_REFERENCE_COUNT, cl_uint) \
F(cl_program_info, CL_PROGRAM_CONTEXT, cl::Context) \
F(cl_program_info, CL_PROGRAM_CONTEXT, cl::Context) \
...
@@ -1361,8 +1459,6 @@ inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typename T::cl_
...
@@ -1361,8 +1459,6 @@ inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typename T::cl_
F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT, cl_uint) \
F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT, cl_uint) \
F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE, cl_uint) \
F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE, cl_uint) \
F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF, cl_uint) \
F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF, cl_uint) \
F(cl_device_info, CL_DEVICE_DOUBLE_FP_CONFIG, cl_device_fp_config) \
F(cl_device_info, CL_DEVICE_HALF_FP_CONFIG, cl_device_fp_config) \
F(cl_device_info, CL_DEVICE_HOST_UNIFIED_MEMORY, cl_bool) \
F(cl_device_info, CL_DEVICE_HOST_UNIFIED_MEMORY, cl_bool) \
F(cl_device_info, CL_DEVICE_OPENCL_C_VERSION, STRING_CLASS) \
F(cl_device_info, CL_DEVICE_OPENCL_C_VERSION, STRING_CLASS) \
\
\
...
@@ -1378,7 +1474,10 @@ inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typename T::cl_
...
@@ -1378,7 +1474,10 @@ inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typename T::cl_
#if defined(CL_VERSION_1_2)
#if defined(CL_VERSION_1_2)
#define __PARAM_NAME_INFO_1_2(F) \
#define __PARAM_NAME_INFO_1_2(F) \
F(cl_image_info, CL_IMAGE_ARRAY_SIZE, ::size_t) \
F(cl_image_info, CL_IMAGE_BUFFER, cl::Buffer) \
F(cl_image_info, CL_IMAGE_BUFFER, cl::Buffer) \
F(cl_image_info, CL_IMAGE_NUM_MIP_LEVELS, cl_uint) \
F(cl_image_info, CL_IMAGE_NUM_SAMPLES, cl_uint) \
\
\
F(cl_program_info, CL_PROGRAM_NUM_KERNELS, ::size_t) \
F(cl_program_info, CL_PROGRAM_NUM_KERNELS, ::size_t) \
F(cl_program_info, CL_PROGRAM_KERNEL_NAMES, STRING_CLASS) \
F(cl_program_info, CL_PROGRAM_KERNEL_NAMES, STRING_CLASS) \
...
@@ -1390,15 +1489,21 @@ inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typename T::cl_
...
@@ -1390,15 +1489,21 @@ inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typename T::cl_
F(cl_kernel_arg_info, CL_KERNEL_ARG_ADDRESS_QUALIFIER, cl_kernel_arg_address_qualifier) \
F(cl_kernel_arg_info, CL_KERNEL_ARG_ADDRESS_QUALIFIER, cl_kernel_arg_address_qualifier) \
F(cl_kernel_arg_info, CL_KERNEL_ARG_ACCESS_QUALIFIER, cl_kernel_arg_access_qualifier) \
F(cl_kernel_arg_info, CL_KERNEL_ARG_ACCESS_QUALIFIER, cl_kernel_arg_access_qualifier) \
F(cl_kernel_arg_info, CL_KERNEL_ARG_TYPE_NAME, STRING_CLASS) \
F(cl_kernel_arg_info, CL_KERNEL_ARG_TYPE_NAME, STRING_CLASS) \
F(cl_kernel_arg_info, CL_KERNEL_ARG_TYPE_QUALIFIER, cl_kernel_arg_type_qualifier) \
F(cl_kernel_arg_info, CL_KERNEL_ARG_NAME, STRING_CLASS) \
F(cl_kernel_arg_info, CL_KERNEL_ARG_NAME, STRING_CLASS) \
\
\
F(cl_device_info, CL_DEVICE_IMAGE_MAX_BUFFER_SIZE, ::size_t) \
F(cl_device_info, CL_DEVICE_IMAGE_MAX_ARRAY_SIZE, ::size_t) \
F(cl_device_info, CL_DEVICE_LINKER_AVAILABLE, cl_bool) \
F(cl_device_info, CL_DEVICE_BUILT_IN_KERNELS, STRING_CLASS) \
F(cl_device_info, CL_DEVICE_PRINTF_BUFFER_SIZE, ::size_t) \
F(cl_device_info, CL_DEVICE_PREFERRED_INTEROP_USER_SYNC, cl_bool) \
F(cl_device_info, CL_DEVICE_PARENT_DEVICE, cl_device_id) \
F(cl_device_info, CL_DEVICE_PARENT_DEVICE, cl_device_id) \
F(cl_device_info, CL_DEVICE_PARTITION_MAX_SUB_DEVICES, cl_uint) \
F(cl_device_info, CL_DEVICE_PARTITION_PROPERTIES, VECTOR_CLASS<cl_device_partition_property>) \
F(cl_device_info, CL_DEVICE_PARTITION_PROPERTIES, VECTOR_CLASS<cl_device_partition_property>) \
F(cl_device_info, CL_DEVICE_PARTITION_TYPE, VECTOR_CLASS<cl_device_partition_property>) \
F(cl_device_info, CL_DEVICE_REFERENCE_COUNT, cl_uint) \
F(cl_device_info, CL_DEVICE_PREFERRED_INTEROP_USER_SYNC, ::size_t) \
F(cl_device_info, CL_DEVICE_PARTITION_AFFINITY_DOMAIN, cl_device_affinity_domain) \
F(cl_device_info, CL_DEVICE_PARTITION_AFFINITY_DOMAIN, cl_device_affinity_domain) \
F(cl_device_info, CL_DEVICE_BUILT_IN_KERNELS, STRING_CLASS)
F(cl_device_info, CL_DEVICE_PARTITION_TYPE, VECTOR_CLASS<cl_device_partition_property>) \
F(cl_device_info, CL_DEVICE_REFERENCE_COUNT, cl_uint)
#endif // #if defined(CL_VERSION_1_2)
#endif // #if defined(CL_VERSION_1_2)
#if defined(USE_CL_DEVICE_FISSION)
#if defined(USE_CL_DEVICE_FISSION)
...
@@ -1675,7 +1780,7 @@ static cl_uint getVersion(const char *versionInfo)
...
@@ -1675,7 +1780,7 @@ static cl_uint getVersion(const char *versionInfo)
++
index
;
++
index
;
}
}
++
index
;
++
index
;
while
(
versionInfo
[
index
]
!=
' '
)
{
while
(
versionInfo
[
index
]
!=
' '
&&
versionInfo
[
index
]
!=
'\0'
)
{
lowVersion
*=
10
;
lowVersion
*=
10
;
lowVersion
+=
versionInfo
[
index
]
-
'0'
;
lowVersion
+=
versionInfo
[
index
]
-
'0'
;
++
index
;
++
index
;
...
@@ -1739,13 +1844,35 @@ public:
...
@@ -1739,13 +1844,35 @@ public:
if
(
object_
!=
NULL
)
{
detail
::
errHandler
(
retain
(),
__RETAIN_ERR
);
}
if
(
object_
!=
NULL
)
{
detail
::
errHandler
(
retain
(),
__RETAIN_ERR
);
}
}
}
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
Wrapper
(
Wrapper
<
cl_type
>&&
rhs
)
CL_HPP_NOEXCEPT
{
object_
=
rhs
.
object_
;
rhs
.
object_
=
NULL
;
}
#endif
Wrapper
<
cl_type
>&
operator
=
(
const
Wrapper
<
cl_type
>&
rhs
)
Wrapper
<
cl_type
>&
operator
=
(
const
Wrapper
<
cl_type
>&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
if
(
object_
!=
NULL
)
{
detail
::
errHandler
(
release
(),
__RELEASE_ERR
);
}
if
(
object_
!=
NULL
)
{
detail
::
errHandler
(
release
(),
__RELEASE_ERR
);
}
object_
=
rhs
.
object_
;
object_
=
rhs
.
object_
;
if
(
object_
!=
NULL
)
{
detail
::
errHandler
(
retain
(),
__RETAIN_ERR
);
}
if
(
object_
!=
NULL
)
{
detail
::
errHandler
(
retain
(),
__RETAIN_ERR
);
}
}
return
*
this
;
}
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
Wrapper
<
cl_type
>&
operator
=
(
Wrapper
<
cl_type
>&&
rhs
)
{
if
(
this
!=
&
rhs
)
{
if
(
object_
!=
NULL
)
{
detail
::
errHandler
(
release
(),
__RELEASE_ERR
);
}
object_
=
rhs
.
object_
;
rhs
.
object_
=
NULL
;
}
return
*
this
;
return
*
this
;
}
}
#endif
Wrapper
<
cl_type
>&
operator
=
(
const
cl_type
&
rhs
)
Wrapper
<
cl_type
>&
operator
=
(
const
cl_type
&
rhs
)
{
{
...
@@ -1817,14 +1944,40 @@ public:
...
@@ -1817,14 +1944,40 @@ public:
if
(
object_
!=
NULL
)
{
detail
::
errHandler
(
retain
(),
__RETAIN_ERR
);
}
if
(
object_
!=
NULL
)
{
detail
::
errHandler
(
retain
(),
__RETAIN_ERR
);
}
}
}
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
Wrapper
(
Wrapper
<
cl_type
>&&
rhs
)
CL_HPP_NOEXCEPT
{
object_
=
rhs
.
object_
;
referenceCountable_
=
rhs
.
referenceCountable_
;
rhs
.
object_
=
NULL
;
rhs
.
referenceCountable_
=
false
;
}
#endif
Wrapper
<
cl_type
>&
operator
=
(
const
Wrapper
<
cl_type
>&
rhs
)
Wrapper
<
cl_type
>&
operator
=
(
const
Wrapper
<
cl_type
>&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
if
(
object_
!=
NULL
)
{
detail
::
errHandler
(
release
(),
__RELEASE_ERR
);
}
if
(
object_
!=
NULL
)
{
detail
::
errHandler
(
release
(),
__RELEASE_ERR
);
}
object_
=
rhs
.
object_
;
object_
=
rhs
.
object_
;
referenceCountable_
=
rhs
.
referenceCountable_
;
referenceCountable_
=
rhs
.
referenceCountable_
;
if
(
object_
!=
NULL
)
{
detail
::
errHandler
(
retain
(),
__RETAIN_ERR
);
}
if
(
object_
!=
NULL
)
{
detail
::
errHandler
(
retain
(),
__RETAIN_ERR
);
}
}
return
*
this
;
}
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
Wrapper
<
cl_type
>&
operator
=
(
Wrapper
<
cl_type
>&&
rhs
)
{
if
(
this
!=
&
rhs
)
{
if
(
object_
!=
NULL
)
{
detail
::
errHandler
(
release
(),
__RELEASE_ERR
);
}
object_
=
rhs
.
object_
;
referenceCountable_
=
rhs
.
referenceCountable_
;
rhs
.
object_
=
NULL
;
rhs
.
referenceCountable_
=
false
;
}
return
*
this
;
return
*
this
;
}
}
#endif
Wrapper
<
cl_type
>&
operator
=
(
const
cl_type
&
rhs
)
Wrapper
<
cl_type
>&
operator
=
(
const
cl_type
&
rhs
)
{
{
...
@@ -1910,17 +2063,11 @@ public:
...
@@ -1910,17 +2063,11 @@ public:
//! \brief Default constructor - initializes to NULL.
//! \brief Default constructor - initializes to NULL.
Device
()
:
detail
::
Wrapper
<
cl_type
>
()
{
}
Device
()
:
detail
::
Wrapper
<
cl_type
>
()
{
}
/*! \brief Copy constructor.
*
* This simply copies the device ID value, which is an inexpensive operation.
*/
Device
(
const
Device
&
device
)
:
detail
::
Wrapper
<
cl_type
>
(
device
)
{
}
/*! \brief Constructor from cl_device_id.
/*! \brief Constructor from cl_device_id.
*
*
* This simply copies the device ID value, which is an inexpensive operation.
* This simply copies the device ID value, which is an inexpensive operation.
*/
*/
Device
(
const
cl_device_id
&
device
)
:
detail
::
Wrapper
<
cl_type
>
(
device
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Device
(
const
cl_device_id
&
device
)
:
detail
::
Wrapper
<
cl_type
>
(
device
)
{
}
/*! \brief Returns the first device on the default context.
/*! \brief Returns the first device on the default context.
*
*
...
@@ -1928,27 +2075,45 @@ public:
...
@@ -1928,27 +2075,45 @@ public:
*/
*/
static
Device
getDefault
(
cl_int
*
err
=
NULL
);
static
Device
getDefault
(
cl_int
*
err
=
NULL
);
/*! \brief Assignment operator from
D
evice.
/*! \brief Assignment operator from
cl_d
evice
_id
.
*
*
* This simply copies the device ID value, which is an inexpensive operation.
* This simply copies the device ID value, which is an inexpensive operation.
*/
*/
Device
&
operator
=
(
const
D
evice
&
rhs
)
Device
&
operator
=
(
const
cl_d
evice
_id
&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
return
*
this
;
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
Device
(
const
Device
&
dev
)
:
detail
::
Wrapper
<
cl_type
>
(
dev
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
Device
&
operator
=
(
const
Device
&
dev
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
dev
);
return
*
this
;
return
*
this
;
}
}
/*! \brief Assignment operator from cl_device_id.
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
*
/*! \brief Move constructor to forward move to the superclass correctly.
*
This simply copies the device ID value, which is an inexpensive operation
.
*
Required for MSVC
.
*/
*/
Device
&
operator
=
(
const
cl_device_id
&
rhs
)
Device
(
Device
&&
dev
)
CL_HPP_NOEXCEPT
:
detail
::
Wrapper
<
cl_type
>
(
std
::
move
(
dev
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
Device
&
operator
=
(
Device
&&
dev
)
{
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
detail
::
Wrapper
<
cl_type
>::
operator
=
(
std
::
move
(
dev
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
//! \brief Wrapper for clGetDeviceInfo().
//! \brief Wrapper for clGetDeviceInfo().
template
<
typename
T
>
template
<
typename
T
>
...
@@ -2051,29 +2216,11 @@ public:
...
@@ -2051,29 +2216,11 @@ public:
//! \brief Default constructor - initializes to NULL.
//! \brief Default constructor - initializes to NULL.
Platform
()
:
detail
::
Wrapper
<
cl_type
>
()
{
}
Platform
()
:
detail
::
Wrapper
<
cl_type
>
()
{
}
/*! \brief Copy constructor.
*
* This simply copies the platform ID value, which is an inexpensive operation.
*/
Platform
(
const
Platform
&
platform
)
:
detail
::
Wrapper
<
cl_type
>
(
platform
)
{
}
/*! \brief Constructor from cl_platform_id.
/*! \brief Constructor from cl_platform_id.
*
*
* This simply copies the platform ID value, which is an inexpensive operation.
* This simply copies the platform ID value, which is an inexpensive operation.
*/
*/
Platform
(
const
cl_platform_id
&
platform
)
:
detail
::
Wrapper
<
cl_type
>
(
platform
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Platform
(
const
cl_platform_id
&
platform
)
:
detail
::
Wrapper
<
cl_type
>
(
platform
)
{
}
/*! \brief Assignment operator from Platform.
*
* This simply copies the platform ID value, which is an inexpensive operation.
*/
Platform
&
operator
=
(
const
Platform
&
rhs
)
{
if
(
this
!=
&
rhs
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
}
return
*
this
;
}
/*! \brief Assignment operator from cl_platform_id.
/*! \brief Assignment operator from cl_platform_id.
*
*
...
@@ -2284,6 +2431,7 @@ public:
...
@@ -2284,6 +2431,7 @@ public:
if
(
errResult
!=
NULL
)
{
if
(
errResult
!=
NULL
)
{
*
errResult
=
err
;
*
errResult
=
err
;
}
}
return
Platform
();
}
}
cl_platform_id
*
ids
=
(
cl_platform_id
*
)
alloca
(
cl_platform_id
*
ids
=
(
cl_platform_id
*
)
alloca
(
...
@@ -2292,13 +2440,14 @@ public:
...
@@ -2292,13 +2440,14 @@ public:
if
(
err
!=
CL_SUCCESS
)
{
if
(
err
!=
CL_SUCCESS
)
{
detail
::
errHandler
(
err
,
__GET_PLATFORM_IDS_ERR
);
detail
::
errHandler
(
err
,
__GET_PLATFORM_IDS_ERR
);
}
if
(
errResult
!=
NULL
)
{
if
(
errResult
!=
NULL
)
{
*
errResult
=
err
;
*
errResult
=
err
;
}
}
return
Platform
();
}
return
ids
[
0
];
return
Platform
(
ids
[
0
]);
}
}
static
Platform
getDefault
(
static
Platform
getDefault
(
...
@@ -2347,16 +2496,15 @@ class Context
...
@@ -2347,16 +2496,15 @@ class Context
:
public
detail
::
Wrapper
<
cl_context
>
:
public
detail
::
Wrapper
<
cl_context
>
{
{
private:
private:
#ifdef CL_HPP_CPP11_ATOMICS_SUPPORTED
static
std
::
atomic
<
int
>
default_initialized_
;
#else // !CL_HPP_CPP11_ATOMICS_SUPPORTED
static
volatile
int
default_initialized_
;
static
volatile
int
default_initialized_
;
#endif // !CL_HPP_CPP11_ATOMICS_SUPPORTED
static
Context
default_
;
static
Context
default_
;
static
volatile
cl_int
default_error_
;
static
volatile
cl_int
default_error_
;
public:
public:
/*! \brief Destructor.
*
* This calls clReleaseContext() on the value held by this instance.
*/
~
Context
()
{
}
/*! \brief Constructs a context including a list of specified devices.
/*! \brief Constructs a context including a list of specified devices.
*
*
* Wraps clCreateContext().
* Wraps clCreateContext().
...
@@ -2417,7 +2565,7 @@ public:
...
@@ -2417,7 +2565,7 @@ public:
}
}
}
}
/*! \brief Constructs a context including all devices of a specified type.
/*! \brief Constructs a context including all
or a subset of
devices of a specified type.
*
*
* Wraps clCreateContextFromType().
* Wraps clCreateContextFromType().
*/
*/
...
@@ -2434,18 +2582,62 @@ public:
...
@@ -2434,18 +2582,62 @@ public:
{
{
cl_int
error
;
cl_int
error
;
#if !defined(__APPLE__)
||
!defined(__MACOS)
#if !defined(__APPLE__)
&&
!defined(__MACOS)
cl_context_properties
prop
[
4
]
=
{
CL_CONTEXT_PLATFORM
,
0
,
0
,
0
};
cl_context_properties
prop
[
4
]
=
{
CL_CONTEXT_PLATFORM
,
0
,
0
,
0
};
if
(
properties
==
NULL
)
{
if
(
properties
==
NULL
)
{
prop
[
1
]
=
(
cl_context_properties
)
Platform
::
get
(
&
error
)();
// Get a valid platform ID as we cannot send in a blank one
VECTOR_CLASS
<
Platform
>
platforms
;
error
=
Platform
::
get
(
&
platforms
);
if
(
error
!=
CL_SUCCESS
)
{
if
(
error
!=
CL_SUCCESS
)
{
detail
::
errHandler
(
error
,
__CREATE_CONTEXT_FROM_TYPE_ERR
);
detail
::
errHandler
(
error
,
__CREATE_CONTEXT_FROM_TYPE_ERR
);
if
(
err
!=
NULL
)
{
if
(
err
!=
NULL
)
{
*
err
=
error
;
*
err
=
error
;
}
return
;
return
;
}
}
// Check the platforms we found for a device of our specified type
cl_context_properties
platform_id
=
0
;
for
(
unsigned
int
i
=
0
;
i
<
platforms
.
size
();
i
++
)
{
VECTOR_CLASS
<
Device
>
devices
;
#if defined(__CL_ENABLE_EXCEPTIONS)
try
{
#endif
error
=
platforms
[
i
].
getDevices
(
type
,
&
devices
);
#if defined(__CL_ENABLE_EXCEPTIONS)
}
catch
(
Error
&
)
{}
// Catch if exceptions are enabled as we don't want to exit if first platform has no devices of type
// We do error checking next anyway, and can throw there if needed
#endif
// Only squash CL_SUCCESS and CL_DEVICE_NOT_FOUND
if
(
error
!=
CL_SUCCESS
&&
error
!=
CL_DEVICE_NOT_FOUND
)
{
detail
::
errHandler
(
error
,
__CREATE_CONTEXT_FROM_TYPE_ERR
);
if
(
err
!=
NULL
)
{
*
err
=
error
;
}
}
if
(
devices
.
size
()
>
0
)
{
platform_id
=
(
cl_context_properties
)
platforms
[
i
]();
break
;
}
}
if
(
platform_id
==
0
)
{
detail
::
errHandler
(
CL_DEVICE_NOT_FOUND
,
__CREATE_CONTEXT_FROM_TYPE_ERR
);
if
(
err
!=
NULL
)
{
*
err
=
CL_DEVICE_NOT_FOUND
;
}
return
;
}
}
prop
[
1
]
=
platform_id
;
properties
=
&
prop
[
0
];
properties
=
&
prop
[
0
];
}
}
#endif
#endif
...
@@ -2458,6 +2650,36 @@ public:
...
@@ -2458,6 +2650,36 @@ public:
}
}
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
Context
(
const
Context
&
ctx
)
:
detail
::
Wrapper
<
cl_type
>
(
ctx
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
Context
&
operator
=
(
const
Context
&
ctx
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
ctx
);
return
*
this
;
}
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
/*! \brief Move constructor to forward move to the superclass correctly.
* Required for MSVC.
*/
Context
(
Context
&&
ctx
)
CL_HPP_NOEXCEPT
:
detail
::
Wrapper
<
cl_type
>
(
std
::
move
(
ctx
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
Context
&
operator
=
(
Context
&&
ctx
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
std
::
move
(
ctx
));
return
*
this
;
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
/*! \brief Returns a singleton context including all devices of CL_DEVICE_TYPE_DEFAULT.
/*! \brief Returns a singleton context including all devices of CL_DEVICE_TYPE_DEFAULT.
*
*
* \note All calls to this function return the same cl_context as the first.
* \note All calls to this function return the same cl_context as the first.
...
@@ -2513,12 +2735,6 @@ public:
...
@@ -2513,12 +2735,6 @@ public:
//! \brief Default constructor - initializes to NULL.
//! \brief Default constructor - initializes to NULL.
Context
()
:
detail
::
Wrapper
<
cl_type
>
()
{
}
Context
()
:
detail
::
Wrapper
<
cl_type
>
()
{
}
/*! \brief Copy constructor.
*
* This calls clRetainContext() on the parameter's cl_context.
*/
Context
(
const
Context
&
context
)
:
detail
::
Wrapper
<
cl_type
>
(
context
)
{
}
/*! \brief Constructor from cl_context - takes ownership.
/*! \brief Constructor from cl_context - takes ownership.
*
*
* This effectively transfers ownership of a refcount on the cl_context
* This effectively transfers ownership of a refcount on the cl_context
...
@@ -2526,19 +2742,6 @@ public:
...
@@ -2526,19 +2742,6 @@ public:
*/
*/
__CL_EXPLICIT_CONSTRUCTORS
Context
(
const
cl_context
&
context
)
:
detail
::
Wrapper
<
cl_type
>
(
context
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Context
(
const
cl_context
&
context
)
:
detail
::
Wrapper
<
cl_type
>
(
context
)
{
}
/*! \brief Assignment operator from Context.
*
* This calls clRetainContext() on the parameter and clReleaseContext() on
* the previous value held by this instance.
*/
Context
&
operator
=
(
const
Context
&
rhs
)
{
if
(
this
!=
&
rhs
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
}
return
*
this
;
}
/*! \brief Assignment operator from cl_context - takes ownership.
/*! \brief Assignment operator from cl_context - takes ownership.
*
*
* This effectively transfers ownership of a refcount on the rhs and calls
* This effectively transfers ownership of a refcount on the rhs and calls
...
@@ -2583,6 +2786,11 @@ public:
...
@@ -2583,6 +2786,11 @@ public:
VECTOR_CLASS
<
ImageFormat
>*
formats
)
const
VECTOR_CLASS
<
ImageFormat
>*
formats
)
const
{
{
cl_uint
numEntries
;
cl_uint
numEntries
;
if
(
!
formats
)
{
return
CL_SUCCESS
;
}
cl_int
err
=
::
clGetSupportedImageFormats
(
cl_int
err
=
::
clGetSupportedImageFormats
(
object_
,
object_
,
flags
,
flags
,
...
@@ -2594,6 +2802,7 @@ public:
...
@@ -2594,6 +2802,7 @@ public:
return
detail
::
errHandler
(
err
,
__GET_SUPPORTED_IMAGE_FORMATS_ERR
);
return
detail
::
errHandler
(
err
,
__GET_SUPPORTED_IMAGE_FORMATS_ERR
);
}
}
if
(
numEntries
>
0
)
{
ImageFormat
*
value
=
(
ImageFormat
*
)
ImageFormat
*
value
=
(
ImageFormat
*
)
alloca
(
numEntries
*
sizeof
(
ImageFormat
));
alloca
(
numEntries
*
sizeof
(
ImageFormat
));
err
=
::
clGetSupportedImageFormats
(
err
=
::
clGetSupportedImageFormats
(
...
@@ -2601,13 +2810,17 @@ public:
...
@@ -2601,13 +2810,17 @@ public:
flags
,
flags
,
type
,
type
,
numEntries
,
numEntries
,
(
cl_image_format
*
)
value
,
(
cl_image_format
*
)
value
,
NULL
);
NULL
);
if
(
err
!=
CL_SUCCESS
)
{
if
(
err
!=
CL_SUCCESS
)
{
return
detail
::
errHandler
(
err
,
__GET_SUPPORTED_IMAGE_FORMATS_ERR
);
return
detail
::
errHandler
(
err
,
__GET_SUPPORTED_IMAGE_FORMATS_ERR
);
}
}
formats
->
assign
(
&
value
[
0
],
&
value
[
numEntries
]);
formats
->
assign
(
&
value
[
0
],
&
value
[
numEntries
]);
}
else
{
formats
->
clear
();
}
return
CL_SUCCESS
;
return
CL_SUCCESS
;
}
}
};
};
...
@@ -2618,7 +2831,7 @@ inline Device Device::getDefault(cl_int * err)
...
@@ -2618,7 +2831,7 @@ inline Device Device::getDefault(cl_int * err)
Device
device
;
Device
device
;
Context
context
=
Context
::
getDefault
(
&
error
);
Context
context
=
Context
::
getDefault
(
&
error
);
detail
::
errHandler
(
error
,
__CREATE_CO
MMAND_QUEUE
_ERR
);
detail
::
errHandler
(
error
,
__CREATE_CO
NTEXT
_ERR
);
if
(
error
!=
CL_SUCCESS
)
{
if
(
error
!=
CL_SUCCESS
)
{
if
(
err
!=
NULL
)
{
if
(
err
!=
NULL
)
{
...
@@ -2635,16 +2848,14 @@ inline Device Device::getDefault(cl_int * err)
...
@@ -2635,16 +2848,14 @@ inline Device Device::getDefault(cl_int * err)
return
device
;
return
device
;
}
}
#ifdef CL_HPP_CPP11_ATOMICS_SUPPORTED
CL_WEAK_ATTRIB_PREFIX
std
::
atomic
<
int
>
CL_WEAK_ATTRIB_SUFFIX
Context
::
default_initialized_
;
#else // !CL_HPP_CPP11_ATOMICS_SUPPORTED
CL_WEAK_ATTRIB_PREFIX
volatile
int
CL_WEAK_ATTRIB_SUFFIX
Context
::
default_initialized_
=
__DEFAULT_NOT_INITIALIZED
;
#endif // !CL_HPP_CPP11_ATOMICS_SUPPORTED
#ifdef _WIN32
CL_WEAK_ATTRIB_PREFIX
Context
CL_WEAK_ATTRIB_SUFFIX
Context
::
default_
;
__declspec
(
selectany
)
volatile
int
Context
::
default_initialized_
=
__DEFAULT_NOT_INITIALIZED
;
CL_WEAK_ATTRIB_PREFIX
volatile
cl_int
CL_WEAK_ATTRIB_SUFFIX
Context
::
default_error_
=
CL_SUCCESS
;
__declspec
(
selectany
)
Context
Context
::
default_
;
__declspec
(
selectany
)
volatile
cl_int
Context
::
default_error_
=
CL_SUCCESS
;
#else
__attribute__
((
weak
))
volatile
int
Context
::
default_initialized_
=
__DEFAULT_NOT_INITIALIZED
;
__attribute__
((
weak
))
Context
Context
::
default_
;
__attribute__
((
weak
))
volatile
cl_int
Context
::
default_error_
=
CL_SUCCESS
;
#endif
/*! \brief Class interface for cl_event.
/*! \brief Class interface for cl_event.
*
*
...
@@ -2657,46 +2868,21 @@ __attribute__((weak)) volatile cl_int Context::default_error_ = CL_SUCCESS;
...
@@ -2657,46 +2868,21 @@ __attribute__((weak)) volatile cl_int Context::default_error_ = CL_SUCCESS;
class
Event
:
public
detail
::
Wrapper
<
cl_event
>
class
Event
:
public
detail
::
Wrapper
<
cl_event
>
{
{
public:
public:
/*! \brief Destructor.
*
* This calls clReleaseEvent() on the value held by this instance.
*/
~
Event
()
{
}
//! \brief Default constructor - initializes to NULL.
//! \brief Default constructor - initializes to NULL.
Event
()
:
detail
::
Wrapper
<
cl_type
>
()
{
}
Event
()
:
detail
::
Wrapper
<
cl_type
>
()
{
}
/*! \brief Copy constructor.
*
* This calls clRetainEvent() on the parameter's cl_event.
*/
Event
(
const
Event
&
event
)
:
detail
::
Wrapper
<
cl_type
>
(
event
)
{
}
/*! \brief Constructor from cl_event - takes ownership.
/*! \brief Constructor from cl_event - takes ownership.
*
*
* This effectively transfers ownership of a refcount on the cl_event
* This effectively transfers ownership of a refcount on the cl_event
* into the new Event object.
* into the new Event object.
*/
*/
Event
(
const
cl_event
&
event
)
:
detail
::
Wrapper
<
cl_type
>
(
event
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Event
(
const
cl_event
&
event
)
:
detail
::
Wrapper
<
cl_type
>
(
event
)
{
}
/*! \brief Assignment operator from cl_event - takes ownership.
/*! \brief Assignment operator from cl_event - takes ownership.
*
*
* This effectively transfers ownership of a refcount on the rhs and calls
* This effectively transfers ownership of a refcount on the rhs and calls
* clReleaseEvent() on the value previously held by this instance.
* clReleaseEvent() on the value previously held by this instance.
*/
*/
Event
&
operator
=
(
const
Event
&
rhs
)
{
if
(
this
!=
&
rhs
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
}
return
*
this
;
}
/*! \brief Assignment operator from cl_event.
*
* This calls clRetainEvent() on the parameter and clReleaseEvent() on
* the previous value held by this instance.
*/
Event
&
operator
=
(
const
cl_event
&
rhs
)
Event
&
operator
=
(
const
cl_event
&
rhs
)
{
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
...
@@ -2789,7 +2975,7 @@ public:
...
@@ -2789,7 +2975,7 @@ public:
{
{
return
detail
::
errHandler
(
return
detail
::
errHandler
(
::
clWaitForEvents
(
::
clWaitForEvents
(
(
cl_uint
)
events
.
size
(),
(
cl_event
*
)
&
events
.
front
()),
(
cl_uint
)
events
.
size
(),
(
events
.
size
()
>
0
)
?
(
cl_event
*
)
&
events
.
front
()
:
NULL
),
__WAIT_FOR_EVENTS_ERR
);
__WAIT_FOR_EVENTS_ERR
);
}
}
};
};
...
@@ -2824,18 +3010,6 @@ public:
...
@@ -2824,18 +3010,6 @@ public:
//! \brief Default constructor - initializes to NULL.
//! \brief Default constructor - initializes to NULL.
UserEvent
()
:
Event
()
{
}
UserEvent
()
:
Event
()
{
}
//! \brief Copy constructor - performs shallow copy.
UserEvent
(
const
UserEvent
&
event
)
:
Event
(
event
)
{
}
//! \brief Assignment Operator - performs shallow copy.
UserEvent
&
operator
=
(
const
UserEvent
&
rhs
)
{
if
(
this
!=
&
rhs
)
{
Event
::
operator
=
(
rhs
);
}
return
*
this
;
}
/*! \brief Sets the execution status of a user event object.
/*! \brief Sets the execution status of a user event object.
*
*
* Wraps clSetUserEventStatus().
* Wraps clSetUserEventStatus().
...
@@ -2858,7 +3032,7 @@ WaitForEvents(const VECTOR_CLASS<Event>& events)
...
@@ -2858,7 +3032,7 @@ WaitForEvents(const VECTOR_CLASS<Event>& events)
{
{
return
detail
::
errHandler
(
return
detail
::
errHandler
(
::
clWaitForEvents
(
::
clWaitForEvents
(
(
cl_uint
)
events
.
size
(),
(
cl_event
*
)
&
events
.
front
()),
(
cl_uint
)
events
.
size
(),
(
events
.
size
()
>
0
)
?
(
cl_event
*
)
&
events
.
front
()
:
NULL
),
__WAIT_FOR_EVENTS_ERR
);
__WAIT_FOR_EVENTS_ERR
);
}
}
...
@@ -2873,22 +3047,9 @@ WaitForEvents(const VECTOR_CLASS<Event>& events)
...
@@ -2873,22 +3047,9 @@ WaitForEvents(const VECTOR_CLASS<Event>& events)
class
Memory
:
public
detail
::
Wrapper
<
cl_mem
>
class
Memory
:
public
detail
::
Wrapper
<
cl_mem
>
{
{
public:
public:
/*! \brief Destructor.
*
* This calls clReleaseMemObject() on the value held by this instance.
*/
~
Memory
()
{}
//! \brief Default constructor - initializes to NULL.
//! \brief Default constructor - initializes to NULL.
Memory
()
:
detail
::
Wrapper
<
cl_type
>
()
{
}
Memory
()
:
detail
::
Wrapper
<
cl_type
>
()
{
}
/*! \brief Copy constructor - performs shallow copy.
*
* This calls clRetainMemObject() on the parameter's cl_mem.
*/
Memory
(
const
Memory
&
memory
)
:
detail
::
Wrapper
<
cl_type
>
(
memory
)
{
}
/*! \brief Constructor from cl_mem - takes ownership.
/*! \brief Constructor from cl_mem - takes ownership.
*
*
* This effectively transfers ownership of a refcount on the cl_mem
* This effectively transfers ownership of a refcount on the cl_mem
...
@@ -2896,29 +3057,46 @@ public:
...
@@ -2896,29 +3057,46 @@ public:
*/
*/
__CL_EXPLICIT_CONSTRUCTORS
Memory
(
const
cl_mem
&
memory
)
:
detail
::
Wrapper
<
cl_type
>
(
memory
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Memory
(
const
cl_mem
&
memory
)
:
detail
::
Wrapper
<
cl_type
>
(
memory
)
{
}
/*! \brief Assignment operator from
Memory
.
/*! \brief Assignment operator from
cl_mem - takes ownership
.
*
*
* This
calls clRetainMemObject() on the parameter and clReleaseMemObject()
* This
effectively transfers ownership of a refcount on the rhs and calls
* on the previous
value
held by this instance.
*
clReleaseMemObject()
on the
value
previous
ly
held by this instance.
*/
*/
Memory
&
operator
=
(
const
Memory
&
rhs
)
Memory
&
operator
=
(
const
cl_mem
&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
return
*
this
;
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
Memory
(
const
Memory
&
mem
)
:
detail
::
Wrapper
<
cl_type
>
(
mem
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
Memory
&
operator
=
(
const
Memory
&
mem
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
mem
);
return
*
this
;
return
*
this
;
}
}
/*! \brief Assignment operator from cl_mem - takes ownership.
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
*
/*! \brief Move constructor to forward move to the superclass correctly.
* This effectively transfers ownership of a refcount on the rhs and calls
* Required for MSVC.
* clReleaseMemObject() on the value previously held by this instance.
*/
*/
Memory
&
operator
=
(
const
cl_mem
&
rhs
)
Memory
(
Memory
&&
mem
)
CL_HPP_NOEXCEPT
:
detail
::
Wrapper
<
cl_type
>
(
std
::
move
(
mem
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
Memory
&
operator
=
(
Memory
&&
mem
)
{
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
detail
::
Wrapper
<
cl_type
>::
operator
=
(
std
::
move
(
mem
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
//! \brief Wrapper for clGetMemObjectInfo().
//! \brief Wrapper for clGetMemObjectInfo().
template
<
typename
T
>
template
<
typename
T
>
...
@@ -2978,7 +3156,12 @@ template< typename IteratorType >
...
@@ -2978,7 +3156,12 @@ template< typename IteratorType >
cl_int
copy
(
IteratorType
startIterator
,
IteratorType
endIterator
,
cl
::
Buffer
&
buffer
);
cl_int
copy
(
IteratorType
startIterator
,
IteratorType
endIterator
,
cl
::
Buffer
&
buffer
);
template
<
typename
IteratorType
>
template
<
typename
IteratorType
>
cl_int
copy
(
const
cl
::
Buffer
&
buffer
,
IteratorType
startIterator
,
IteratorType
endIterator
);
cl_int
copy
(
const
cl
::
Buffer
&
buffer
,
IteratorType
startIterator
,
IteratorType
endIterator
);
template
<
typename
IteratorType
>
cl_int
copy
(
const
CommandQueue
&
queue
,
IteratorType
startIterator
,
IteratorType
endIterator
,
cl
::
Buffer
&
buffer
);
template
<
typename
IteratorType
>
cl_int
copy
(
const
CommandQueue
&
queue
,
const
cl
::
Buffer
&
buffer
,
IteratorType
startIterator
,
IteratorType
endIterator
);
/*! \brief Class interface for Buffer Memory Objects.
/*! \brief Class interface for Buffer Memory Objects.
*
*
* See Memory for details about copy semantics, etc.
* See Memory for details about copy semantics, etc.
...
@@ -3041,7 +3224,8 @@ public:
...
@@ -3041,7 +3224,8 @@ public:
/*!
/*!
* \brief Construct a Buffer from a host container via iterators.
* \brief Construct a Buffer from a host container via iterators.
* If useHostPtr is specified iterators must be random access.
* IteratorType must be random access.
* If useHostPtr is specified iterators must represent contiguous data.
*/
*/
template
<
typename
IteratorType
>
template
<
typename
IteratorType
>
Buffer
(
Buffer
(
...
@@ -3089,14 +3273,25 @@ public:
...
@@ -3089,14 +3273,25 @@ public:
}
}
}
}
//! \brief Default constructor - initializes to NULL.
/*!
Buffer
()
:
Memory
()
{
}
* \brief Construct a Buffer from a host container via iterators using a specified context.
* IteratorType must be random access.
* If useHostPtr is specified iterators must represent contiguous data.
*/
template
<
typename
IteratorType
>
Buffer
(
const
Context
&
context
,
IteratorType
startIterator
,
IteratorType
endIterator
,
bool
readOnly
,
bool
useHostPtr
=
false
,
cl_int
*
err
=
NULL
);
/*!
\brief Copy constructor - performs shallow copy.
/*!
*
*
\brief Construct a Buffer from a host container via iterators using a specified queue.
* See Memory for further details
.
* If useHostPtr is specified iterators must represent contiguous data
.
*/
*/
Buffer
(
const
Buffer
&
buffer
)
:
Memory
(
buffer
)
{
}
template
<
typename
IteratorType
>
Buffer
(
const
CommandQueue
&
queue
,
IteratorType
startIterator
,
IteratorType
endIterator
,
bool
readOnly
,
bool
useHostPtr
=
false
,
cl_int
*
err
=
NULL
);
//! \brief Default constructor - initializes to NULL.
Buffer
()
:
Memory
()
{
}
/*! \brief Constructor from cl_mem - takes ownership.
/*! \brief Constructor from cl_mem - takes ownership.
*
*
...
@@ -3104,27 +3299,45 @@ public:
...
@@ -3104,27 +3299,45 @@ public:
*/
*/
__CL_EXPLICIT_CONSTRUCTORS
Buffer
(
const
cl_mem
&
buffer
)
:
Memory
(
buffer
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Buffer
(
const
cl_mem
&
buffer
)
:
Memory
(
buffer
)
{
}
/*! \brief Assignment from
Buffer
- performs shallow copy.
/*! \brief Assignment from
cl_mem
- performs shallow copy.
*
*
* See Memory for further details.
* See Memory for further details.
*/
*/
Buffer
&
operator
=
(
const
Buffer
&
rhs
)
Buffer
&
operator
=
(
const
cl_mem
&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
Memory
::
operator
=
(
rhs
);
Memory
::
operator
=
(
rhs
);
return
*
this
;
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
Buffer
(
const
Buffer
&
buf
)
:
Memory
(
buf
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
Buffer
&
operator
=
(
const
Buffer
&
buf
)
{
Memory
::
operator
=
(
buf
);
return
*
this
;
return
*
this
;
}
}
/*! \brief Assignment from cl_mem - performs shallow copy.
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
*
/*! \brief Move constructor to forward move to the superclass correctly.
*
See Memory for further details
.
*
Required for MSVC
.
*/
*/
Buffer
&
operator
=
(
const
cl_mem
&
rhs
)
Buffer
(
Buffer
&&
buf
)
CL_HPP_NOEXCEPT
:
Memory
(
std
::
move
(
buf
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
Buffer
&
operator
=
(
Buffer
&&
buf
)
{
{
Memory
::
operator
=
(
rhs
);
Memory
::
operator
=
(
std
::
move
(
buf
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
#if defined(CL_VERSION_1_1)
#if defined(CL_VERSION_1_1)
/*! \brief Creates a new buffer object from this.
/*! \brief Creates a new buffer object from this.
...
@@ -3215,39 +3428,51 @@ public:
...
@@ -3215,39 +3428,51 @@ public:
//! \brief Default constructor - initializes to NULL.
//! \brief Default constructor - initializes to NULL.
BufferD3D10
()
:
Buffer
()
{
}
BufferD3D10
()
:
Buffer
()
{
}
/*! \brief Copy constructor - performs shallow copy.
*
* See Memory for further details.
*/
BufferD3D10
(
const
BufferD3D10
&
buffer
)
:
Buffer
(
buffer
)
{
}
/*! \brief Constructor from cl_mem - takes ownership.
/*! \brief Constructor from cl_mem - takes ownership.
*
*
* See Memory for further details.
* See Memory for further details.
*/
*/
__CL_EXPLICIT_CONSTRUCTORS
BufferD3D10
(
const
cl_mem
&
buffer
)
:
Buffer
(
buffer
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
BufferD3D10
(
const
cl_mem
&
buffer
)
:
Buffer
(
buffer
)
{
}
/*! \brief Assignment from
BufferD3D10
- performs shallow copy.
/*! \brief Assignment from
cl_mem
- performs shallow copy.
*
*
* See Memory for further details.
* See Memory for further details.
*/
*/
BufferD3D10
&
operator
=
(
const
BufferD3D10
&
rhs
)
BufferD3D10
&
operator
=
(
const
cl_mem
&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
Buffer
::
operator
=
(
rhs
);
Buffer
::
operator
=
(
rhs
);
return
*
this
;
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
BufferD3D10
(
const
BufferD3D10
&
buf
)
:
Buffer
(
buf
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
BufferD3D10
&
operator
=
(
const
BufferD3D10
&
buf
)
{
Buffer
::
operator
=
(
buf
);
return
*
this
;
return
*
this
;
}
}
/*! \brief Assignment from cl_mem - performs shallow copy.
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
*
/*! \brief Move constructor to forward move to the superclass correctly.
*
See Memory for further details
.
*
Required for MSVC
.
*/
*/
BufferD3D10
&
operator
=
(
const
cl_mem
&
rhs
)
BufferD3D10
(
BufferD3D10
&&
buf
)
CL_HPP_NOEXCEPT
:
Buffer
(
std
::
move
(
buf
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
BufferD3D10
&
operator
=
(
BufferD3D10
&&
buf
)
{
{
Buffer
::
operator
=
(
rhs
);
Buffer
::
operator
=
(
std
::
move
(
buf
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
};
};
#endif
#endif
...
@@ -3270,7 +3495,7 @@ public:
...
@@ -3270,7 +3495,7 @@ public:
BufferGL
(
BufferGL
(
const
Context
&
context
,
const
Context
&
context
,
cl_mem_flags
flags
,
cl_mem_flags
flags
,
GLuint
bufobj
,
cl_
GLuint
bufobj
,
cl_int
*
err
=
NULL
)
cl_int
*
err
=
NULL
)
{
{
cl_int
error
;
cl_int
error
;
...
@@ -3289,30 +3514,12 @@ public:
...
@@ -3289,30 +3514,12 @@ public:
//! \brief Default constructor - initializes to NULL.
//! \brief Default constructor - initializes to NULL.
BufferGL
()
:
Buffer
()
{
}
BufferGL
()
:
Buffer
()
{
}
/*! \brief Copy constructor - performs shallow copy.
*
* See Memory for further details.
*/
BufferGL
(
const
BufferGL
&
buffer
)
:
Buffer
(
buffer
)
{
}
/*! \brief Constructor from cl_mem - takes ownership.
/*! \brief Constructor from cl_mem - takes ownership.
*
*
* See Memory for further details.
* See Memory for further details.
*/
*/
__CL_EXPLICIT_CONSTRUCTORS
BufferGL
(
const
cl_mem
&
buffer
)
:
Buffer
(
buffer
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
BufferGL
(
const
cl_mem
&
buffer
)
:
Buffer
(
buffer
)
{
}
/*! \brief Assignment from BufferGL - performs shallow copy.
*
* See Memory for further details.
*/
BufferGL
&
operator
=
(
const
BufferGL
&
rhs
)
{
if
(
this
!=
&
rhs
)
{
Buffer
::
operator
=
(
rhs
);
}
return
*
this
;
}
/*! \brief Assignment from cl_mem - performs shallow copy.
/*! \brief Assignment from cl_mem - performs shallow copy.
*
*
* See Memory for further details.
* See Memory for further details.
...
@@ -3323,93 +3530,40 @@ public:
...
@@ -3323,93 +3530,40 @@ public:
return
*
this
;
return
*
this
;
}
}
//! \brief Wrapper for clGetGLObjectInfo().
/*! \brief Copy constructor to forward copy to the superclass correctly.
cl_int
getObjectInfo
(
* Required for MSVC.
cl_gl_object_type
*
type
,
GLuint
*
gl_object_name
)
{
return
detail
::
errHandler
(
::
clGetGLObjectInfo
(
object_
,
type
,
gl_object_name
),
__GET_GL_OBJECT_INFO_ERR
);
}
};
/*! \brief Class interface for GL Render Buffer Memory Objects.
*
* This is provided to facilitate interoperability with OpenGL.
*
* See Memory for details about copy semantics, etc.
*
* \see Memory
*/
class
BufferRenderGL
:
public
Buffer
{
public:
/*! \brief Constructs a BufferRenderGL in a specified context, from a given
* GL Renderbuffer.
*
* Wraps clCreateFromGLRenderbuffer().
*/
BufferRenderGL
(
const
Context
&
context
,
cl_mem_flags
flags
,
GLuint
bufobj
,
cl_int
*
err
=
NULL
)
{
cl_int
error
;
object_
=
::
clCreateFromGLRenderbuffer
(
context
(),
flags
,
bufobj
,
&
error
);
detail
::
errHandler
(
error
,
__CREATE_GL_RENDER_BUFFER_ERR
);
if
(
err
!=
NULL
)
{
*
err
=
error
;
}
}
//! \brief Default constructor - initializes to NULL.
BufferRenderGL
()
:
Buffer
()
{
}
/*! \brief Copy constructor - performs shallow copy.
*
* See Memory for further details.
*/
BufferRenderGL
(
const
BufferGL
&
buffer
)
:
Buffer
(
buffer
)
{
}
/*! \brief Constructor from cl_mem - takes ownership.
*
* See Memory for further details.
*/
*/
__CL_EXPLICIT_CONSTRUCTORS
BufferRend
erGL
(
const
cl_mem
&
buf
fer
)
:
Buffer
(
buf
fer
)
{
}
Buff
erGL
(
const
BufferGL
&
buf
)
:
Buffer
(
buf
)
{}
/*! \brief Assignment from BufferGL - performs shallow copy.
/*! \brief Copy assignment to forward copy to the superclass correctly.
*
* Required for MSVC.
* See Memory for further details.
*/
*/
Buffer
Render
GL
&
operator
=
(
const
Buffer
RenderGL
&
rhs
)
BufferGL
&
operator
=
(
const
Buffer
GL
&
buf
)
{
{
if
(
this
!=
&
rhs
)
{
Buffer
::
operator
=
(
buf
);
Buffer
::
operator
=
(
rhs
);
}
return
*
this
;
return
*
this
;
}
}
/*! \brief Assignment from cl_mem - performs shallow copy.
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
*
/*! \brief Move constructor to forward move to the superclass correctly.
*
See Memory for further details
.
*
Required for MSVC
.
*/
*/
BufferRenderGL
&
operator
=
(
const
cl_mem
&
rhs
)
BufferGL
(
BufferGL
&&
buf
)
CL_HPP_NOEXCEPT
:
Buffer
(
std
::
move
(
buf
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
BufferGL
&
operator
=
(
BufferGL
&&
buf
)
{
{
Buffer
::
operator
=
(
rhs
);
Buffer
::
operator
=
(
std
::
move
(
buf
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
//! \brief Wrapper for clGetGLObjectInfo().
//! \brief Wrapper for clGetGLObjectInfo().
cl_int
getObjectInfo
(
cl_int
getObjectInfo
(
cl_gl_object_type
*
type
,
cl_gl_object_type
*
type
,
GLuint
*
gl_object_name
)
cl_
GLuint
*
gl_object_name
)
{
{
return
detail
::
errHandler
(
return
detail
::
errHandler
(
::
clGetGLObjectInfo
(
object_
,
type
,
gl_object_name
),
::
clGetGLObjectInfo
(
object_
,
type
,
gl_object_name
),
...
@@ -3429,39 +3583,51 @@ protected:
...
@@ -3429,39 +3583,51 @@ protected:
//! \brief Default constructor - initializes to NULL.
//! \brief Default constructor - initializes to NULL.
Image
()
:
Memory
()
{
}
Image
()
:
Memory
()
{
}
/*! \brief Copy constructor - performs shallow copy.
*
* See Memory for further details.
*/
Image
(
const
Image
&
image
)
:
Memory
(
image
)
{
}
/*! \brief Constructor from cl_mem - takes ownership.
/*! \brief Constructor from cl_mem - takes ownership.
*
*
* See Memory for further details.
* See Memory for further details.
*/
*/
__CL_EXPLICIT_CONSTRUCTORS
Image
(
const
cl_mem
&
image
)
:
Memory
(
image
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Image
(
const
cl_mem
&
image
)
:
Memory
(
image
)
{
}
/*! \brief Assignment from
Image
- performs shallow copy.
/*! \brief Assignment from
cl_mem
- performs shallow copy.
*
*
* See Memory for further details.
* See Memory for further details.
*/
*/
Image
&
operator
=
(
const
Image
&
rhs
)
Image
&
operator
=
(
const
cl_mem
&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
Memory
::
operator
=
(
rhs
);
Memory
::
operator
=
(
rhs
);
return
*
this
;
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image
(
const
Image
&
img
)
:
Memory
(
img
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image
&
operator
=
(
const
Image
&
img
)
{
Memory
::
operator
=
(
img
);
return
*
this
;
return
*
this
;
}
}
/*! \brief Assignment from cl_mem - performs shallow copy.
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
*
/*! \brief Move constructor to forward move to the superclass correctly.
*
See Memory for further details
.
*
Required for MSVC
.
*/
*/
Image
&
operator
=
(
const
cl_mem
&
rhs
)
Image
(
Image
&&
img
)
CL_HPP_NOEXCEPT
:
Memory
(
std
::
move
(
img
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
Image
&
operator
=
(
Image
&&
img
)
{
{
Memory
::
operator
=
(
rhs
);
Memory
::
operator
=
(
std
::
move
(
img
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
public:
public:
//! \brief Wrapper for clGetImageInfo().
//! \brief Wrapper for clGetImageInfo().
...
@@ -3511,13 +3677,12 @@ public:
...
@@ -3511,13 +3677,12 @@ public:
cl_int
*
err
=
NULL
)
cl_int
*
err
=
NULL
)
{
{
cl_int
error
;
cl_int
error
;
cl_image_desc
desc
;
cl_image_desc
desc
=
desc
.
image_type
=
CL_MEM_OBJECT_IMAGE1D
;
{
desc
.
image_width
=
width
;
CL_MEM_OBJECT_IMAGE1D
,
desc
.
image_row_pitch
=
0
;
width
,
desc
.
num_mip_levels
=
0
;
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
desc
.
num_samples
=
0
;
};
desc
.
buffer
=
0
;
object_
=
::
clCreateImage
(
object_
=
::
clCreateImage
(
context
(),
context
(),
flags
,
flags
,
...
@@ -3535,39 +3700,51 @@ public:
...
@@ -3535,39 +3700,51 @@ public:
//! \brief Default constructor - initializes to NULL.
//! \brief Default constructor - initializes to NULL.
Image1D
()
{
}
Image1D
()
{
}
/*! \brief Copy constructor - performs shallow copy.
*
* See Memory for further details.
*/
Image1D
(
const
Image1D
&
image1D
)
:
Image
(
image1D
)
{
}
/*! \brief Constructor from cl_mem - takes ownership.
/*! \brief Constructor from cl_mem - takes ownership.
*
*
* See Memory for further details.
* See Memory for further details.
*/
*/
__CL_EXPLICIT_CONSTRUCTORS
Image1D
(
const
cl_mem
&
image1D
)
:
Image
(
image1D
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Image1D
(
const
cl_mem
&
image1D
)
:
Image
(
image1D
)
{
}
/*! \brief Assignment from
Image1D
- performs shallow copy.
/*! \brief Assignment from
cl_mem
- performs shallow copy.
*
*
* See Memory for further details.
* See Memory for further details.
*/
*/
Image1D
&
operator
=
(
const
Image1D
&
rhs
)
Image1D
&
operator
=
(
const
cl_mem
&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
Image
::
operator
=
(
rhs
);
Image
::
operator
=
(
rhs
);
return
*
this
;
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image1D
(
const
Image1D
&
img
)
:
Image
(
img
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image1D
&
operator
=
(
const
Image1D
&
img
)
{
Image
::
operator
=
(
img
);
return
*
this
;
return
*
this
;
}
}
/*! \brief Assignment from cl_mem - performs shallow copy.
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
*
/*! \brief Move constructor to forward move to the superclass correctly.
*
See Memory for further details
.
*
Required for MSVC
.
*/
*/
Image1D
&
operator
=
(
const
cl_mem
&
rhs
)
Image1D
(
Image1D
&&
img
)
CL_HPP_NOEXCEPT
:
Image
(
std
::
move
(
img
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
Image1D
&
operator
=
(
Image1D
&&
img
)
{
{
Image
::
operator
=
(
rhs
);
Image
::
operator
=
(
std
::
move
(
img
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
};
};
/*! \class Image1DBuffer
/*! \class Image1DBuffer
...
@@ -3585,13 +3762,13 @@ public:
...
@@ -3585,13 +3762,13 @@ public:
cl_int
*
err
=
NULL
)
cl_int
*
err
=
NULL
)
{
{
cl_int
error
;
cl_int
error
;
cl_image_desc
desc
;
cl_image_desc
desc
=
desc
.
image_type
=
CL_MEM_OBJECT_IMAGE1D_BUFFER
;
{
desc
.
image_width
=
width
;
CL_MEM_OBJECT_IMAGE1D_BUFFER
,
desc
.
image_row_pitch
=
0
;
width
,
desc
.
num_mip_levels
=
0
;
0
,
0
,
0
,
0
,
0
,
0
,
0
,
desc
.
num_samples
=
0
;
buffer
()
desc
.
buffer
=
buffer
()
;
}
;
object_
=
::
clCreateImage
(
object_
=
::
clCreateImage
(
context
(),
context
(),
flags
,
flags
,
...
@@ -3608,23 +3785,43 @@ public:
...
@@ -3608,23 +3785,43 @@ public:
Image1DBuffer
()
{
}
Image1DBuffer
()
{
}
Image1DBuffer
(
const
Image1DBuffer
&
image1D
)
:
Image
(
image1D
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Image1DBuffer
(
const
cl_mem
&
image1D
)
:
Image
(
image1D
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Image1DBuffer
(
const
cl_mem
&
image1D
)
:
Image
(
image1D
)
{
}
Image1DBuffer
&
operator
=
(
const
Image1DBuffer
&
rhs
)
Image1DBuffer
&
operator
=
(
const
cl_mem
&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
Image
::
operator
=
(
rhs
);
Image
::
operator
=
(
rhs
);
return
*
this
;
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image1DBuffer
(
const
Image1DBuffer
&
img
)
:
Image
(
img
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image1DBuffer
&
operator
=
(
const
Image1DBuffer
&
img
)
{
Image
::
operator
=
(
img
);
return
*
this
;
return
*
this
;
}
}
Image1DBuffer
&
operator
=
(
const
cl_mem
&
rhs
)
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
/*! \brief Move constructor to forward move to the superclass correctly.
* Required for MSVC.
*/
Image1DBuffer
(
Image1DBuffer
&&
img
)
CL_HPP_NOEXCEPT
:
Image
(
std
::
move
(
img
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
Image1DBuffer
&
operator
=
(
Image1DBuffer
&&
img
)
{
{
Image
::
operator
=
(
rhs
);
Image
::
operator
=
(
std
::
move
(
img
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
};
};
/*! \class Image1DArray
/*! \class Image1DArray
...
@@ -3644,14 +3841,15 @@ public:
...
@@ -3644,14 +3841,15 @@ public:
cl_int
*
err
=
NULL
)
cl_int
*
err
=
NULL
)
{
{
cl_int
error
;
cl_int
error
;
cl_image_desc
desc
;
cl_image_desc
desc
=
desc
.
image_type
=
CL_MEM_OBJECT_IMAGE1D_ARRAY
;
{
desc
.
image_array_size
=
arraySize
;
CL_MEM_OBJECT_IMAGE1D_ARRAY
,
desc
.
image_width
=
width
;
width
,
desc
.
image_row_pitch
=
rowPitch
;
0
,
0
,
// height, depth (unused)
desc
.
num_mip_levels
=
0
;
arraySize
,
desc
.
num_samples
=
0
;
rowPitch
,
desc
.
buffer
=
0
;
0
,
0
,
0
,
0
};
object_
=
::
clCreateImage
(
object_
=
::
clCreateImage
(
context
(),
context
(),
flags
,
flags
,
...
@@ -3668,23 +3866,43 @@ public:
...
@@ -3668,23 +3866,43 @@ public:
Image1DArray
()
{
}
Image1DArray
()
{
}
Image1DArray
(
const
Image1DArray
&
imageArray
)
:
Image
(
imageArray
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Image1DArray
(
const
cl_mem
&
imageArray
)
:
Image
(
imageArray
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Image1DArray
(
const
cl_mem
&
imageArray
)
:
Image
(
imageArray
)
{
}
Image1DArray
&
operator
=
(
const
Image1DArray
&
rhs
)
Image1DArray
&
operator
=
(
const
cl_mem
&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
Image
::
operator
=
(
rhs
);
Image
::
operator
=
(
rhs
);
return
*
this
;
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image1DArray
(
const
Image1DArray
&
img
)
:
Image
(
img
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image1DArray
&
operator
=
(
const
Image1DArray
&
img
)
{
Image
::
operator
=
(
img
);
return
*
this
;
return
*
this
;
}
}
Image1DArray
&
operator
=
(
const
cl_mem
&
rhs
)
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
/*! \brief Move constructor to forward move to the superclass correctly.
* Required for MSVC.
*/
Image1DArray
(
Image1DArray
&&
img
)
CL_HPP_NOEXCEPT
:
Image
(
std
::
move
(
img
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
Image1DArray
&
operator
=
(
Image1DArray
&&
img
)
{
{
Image
::
operator
=
(
rhs
);
Image
::
operator
=
(
std
::
move
(
img
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
};
};
#endif // #if defined(CL_VERSION_1_2)
#endif // #if defined(CL_VERSION_1_2)
...
@@ -3730,14 +3948,15 @@ public:
...
@@ -3730,14 +3948,15 @@ public:
#if defined(CL_VERSION_1_2)
#if defined(CL_VERSION_1_2)
if
(
useCreateImage
)
if
(
useCreateImage
)
{
{
cl_image_desc
desc
;
cl_image_desc
desc
=
desc
.
image_type
=
CL_MEM_OBJECT_IMAGE2D
;
{
desc
.
image_width
=
width
;
CL_MEM_OBJECT_IMAGE2D
,
desc
.
image_height
=
height
;
width
,
desc
.
image_row_pitch
=
row_pitch
;
height
,
desc
.
num_mip_levels
=
0
;
0
,
0
,
// depth, array size (unused)
desc
.
num_samples
=
0
;
row_pitch
,
desc
.
buffer
=
0
;
0
,
0
,
0
,
0
};
object_
=
::
clCreateImage
(
object_
=
::
clCreateImage
(
context
(),
context
(),
flags
,
flags
,
...
@@ -3769,39 +3988,51 @@ public:
...
@@ -3769,39 +3988,51 @@ public:
//! \brief Default constructor - initializes to NULL.
//! \brief Default constructor - initializes to NULL.
Image2D
()
{
}
Image2D
()
{
}
/*! \brief Copy constructor - performs shallow copy.
*
* See Memory for further details.
*/
Image2D
(
const
Image2D
&
image2D
)
:
Image
(
image2D
)
{
}
/*! \brief Constructor from cl_mem - takes ownership.
/*! \brief Constructor from cl_mem - takes ownership.
*
*
* See Memory for further details.
* See Memory for further details.
*/
*/
__CL_EXPLICIT_CONSTRUCTORS
Image2D
(
const
cl_mem
&
image2D
)
:
Image
(
image2D
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Image2D
(
const
cl_mem
&
image2D
)
:
Image
(
image2D
)
{
}
/*! \brief Assignment from
Image2D
- performs shallow copy.
/*! \brief Assignment from
cl_mem
- performs shallow copy.
*
*
* See Memory for further details.
* See Memory for further details.
*/
*/
Image2D
&
operator
=
(
const
Image2D
&
rhs
)
Image2D
&
operator
=
(
const
cl_mem
&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
Image
::
operator
=
(
rhs
);
Image
::
operator
=
(
rhs
);
return
*
this
;
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image2D
(
const
Image2D
&
img
)
:
Image
(
img
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image2D
&
operator
=
(
const
Image2D
&
img
)
{
Image
::
operator
=
(
img
);
return
*
this
;
return
*
this
;
}
}
/*! \brief Assignment from cl_mem - performs shallow copy.
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
*
/*! \brief Move constructor to forward move to the superclass correctly.
*
See Memory for further details
.
*
Required for MSVC
.
*/
*/
Image2D
&
operator
=
(
const
cl_mem
&
rhs
)
Image2D
(
Image2D
&&
img
)
CL_HPP_NOEXCEPT
:
Image
(
std
::
move
(
img
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
Image2D
&
operator
=
(
Image2D
&&
img
)
{
{
Image
::
operator
=
(
rhs
);
Image
::
operator
=
(
std
::
move
(
img
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
};
};
...
@@ -3826,9 +4057,9 @@ public:
...
@@ -3826,9 +4057,9 @@ public:
Image2DGL
(
Image2DGL
(
const
Context
&
context
,
const
Context
&
context
,
cl_mem_flags
flags
,
cl_mem_flags
flags
,
GLenum
target
,
cl_
GLenum
target
,
GLint
miplevel
,
cl_
GLint
miplevel
,
GLuint
texobj
,
cl_
GLuint
texobj
,
cl_int
*
err
=
NULL
)
cl_int
*
err
=
NULL
)
{
{
cl_int
error
;
cl_int
error
;
...
@@ -3850,39 +4081,51 @@ public:
...
@@ -3850,39 +4081,51 @@ public:
//! \brief Default constructor - initializes to NULL.
//! \brief Default constructor - initializes to NULL.
Image2DGL
()
:
Image2D
()
{
}
Image2DGL
()
:
Image2D
()
{
}
/*! \brief Copy constructor - performs shallow copy.
*
* See Memory for further details.
*/
Image2DGL
(
const
Image2DGL
&
image
)
:
Image2D
(
image
)
{
}
/*! \brief Constructor from cl_mem - takes ownership.
/*! \brief Constructor from cl_mem - takes ownership.
*
*
* See Memory for further details.
* See Memory for further details.
*/
*/
__CL_EXPLICIT_CONSTRUCTORS
Image2DGL
(
const
cl_mem
&
image
)
:
Image2D
(
image
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Image2DGL
(
const
cl_mem
&
image
)
:
Image2D
(
image
)
{
}
/*! \brief Assignment from
Image2DGL
- performs shallow copy.
/*! \brief Assignment from
cl_mem
- performs shallow copy.
*
*
* See Memory for further details.
* See Memory for further details.
*/
*/
Image2DGL
&
operator
=
(
const
Image2DGL
&
rhs
)
Image2DGL
&
operator
=
(
const
cl_mem
&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
Image2D
::
operator
=
(
rhs
);
Image2D
::
operator
=
(
rhs
);
return
*
this
;
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image2DGL
(
const
Image2DGL
&
img
)
:
Image2D
(
img
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image2DGL
&
operator
=
(
const
Image2DGL
&
img
)
{
Image2D
::
operator
=
(
img
);
return
*
this
;
return
*
this
;
}
}
/*! \brief Assignment from cl_mem - performs shallow copy.
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
*
/*! \brief Move constructor to forward move to the superclass correctly.
*
See Memory for further details
.
*
Required for MSVC
.
*/
*/
Image2DGL
&
operator
=
(
const
cl_mem
&
rhs
)
Image2DGL
(
Image2DGL
&&
img
)
CL_HPP_NOEXCEPT
:
Image2D
(
std
::
move
(
img
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
Image2DGL
&
operator
=
(
Image2DGL
&&
img
)
{
{
Image2D
::
operator
=
(
rhs
);
Image2D
::
operator
=
(
std
::
move
(
img
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
};
};
#endif // #if !defined(CL_VERSION_1_2)
#endif // #if !defined(CL_VERSION_1_2)
...
@@ -3906,16 +4149,17 @@ public:
...
@@ -3906,16 +4149,17 @@ public:
cl_int
*
err
=
NULL
)
cl_int
*
err
=
NULL
)
{
{
cl_int
error
;
cl_int
error
;
cl_image_desc
desc
;
cl_image_desc
desc
=
desc
.
image_type
=
CL_MEM_OBJECT_IMAGE2D_ARRAY
;
{
desc
.
image_array_size
=
arraySize
;
CL_MEM_OBJECT_IMAGE2D_ARRAY
,
desc
.
image_width
=
width
;
width
,
desc
.
image_height
=
height
;
height
,
desc
.
image_row_pitch
=
rowPitch
;
0
,
// depth (unused)
desc
.
image_slice_pitch
=
slicePitch
;
arraySize
,
desc
.
num_mip_levels
=
0
;
rowPitch
,
desc
.
num_samples
=
0
;
slicePitch
,
desc
.
buffer
=
0
;
0
,
0
,
0
};
object_
=
::
clCreateImage
(
object_
=
::
clCreateImage
(
context
(),
context
(),
flags
,
flags
,
...
@@ -3932,23 +4176,43 @@ public:
...
@@ -3932,23 +4176,43 @@ public:
Image2DArray
()
{
}
Image2DArray
()
{
}
Image2DArray
(
const
Image2DArray
&
imageArray
)
:
Image
(
imageArray
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Image2DArray
(
const
cl_mem
&
imageArray
)
:
Image
(
imageArray
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Image2DArray
(
const
cl_mem
&
imageArray
)
:
Image
(
imageArray
)
{
}
Image2DArray
&
operator
=
(
const
Image2DArray
&
rhs
)
Image2DArray
&
operator
=
(
const
cl_mem
&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
Image
::
operator
=
(
rhs
);
Image
::
operator
=
(
rhs
);
return
*
this
;
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image2DArray
(
const
Image2DArray
&
img
)
:
Image
(
img
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image2DArray
&
operator
=
(
const
Image2DArray
&
img
)
{
Image
::
operator
=
(
img
);
return
*
this
;
return
*
this
;
}
}
Image2DArray
&
operator
=
(
const
cl_mem
&
rhs
)
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
/*! \brief Move constructor to forward move to the superclass correctly.
* Required for MSVC.
*/
Image2DArray
(
Image2DArray
&&
img
)
CL_HPP_NOEXCEPT
:
Image
(
std
::
move
(
img
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
Image2DArray
&
operator
=
(
Image2DArray
&&
img
)
{
{
Image
::
operator
=
(
rhs
);
Image
::
operator
=
(
std
::
move
(
img
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
};
};
#endif // #if defined(CL_VERSION_1_2)
#endif // #if defined(CL_VERSION_1_2)
...
@@ -3995,16 +4259,17 @@ public:
...
@@ -3995,16 +4259,17 @@ public:
#if defined(CL_VERSION_1_2)
#if defined(CL_VERSION_1_2)
if
(
useCreateImage
)
if
(
useCreateImage
)
{
{
cl_image_desc
desc
;
cl_image_desc
desc
=
desc
.
image_type
=
CL_MEM_OBJECT_IMAGE3D
;
{
desc
.
image_width
=
width
;
CL_MEM_OBJECT_IMAGE3D
,
desc
.
image_height
=
height
;
width
,
desc
.
image_depth
=
depth
;
height
,
desc
.
image_row_pitch
=
row_pitch
;
depth
,
desc
.
image_slice_pitch
=
slice_pitch
;
0
,
// array size (unused)
desc
.
num_mip_levels
=
0
;
row_pitch
,
desc
.
num_samples
=
0
;
slice_pitch
,
desc
.
buffer
=
0
;
0
,
0
,
0
};
object_
=
::
clCreateImage
(
object_
=
::
clCreateImage
(
context
(),
context
(),
flags
,
flags
,
...
@@ -4035,13 +4300,7 @@ public:
...
@@ -4035,13 +4300,7 @@ public:
}
}
//! \brief Default constructor - initializes to NULL.
//! \brief Default constructor - initializes to NULL.
Image3D
()
{
}
Image3D
()
:
Image
()
{
}
/*! \brief Copy constructor - performs shallow copy.
*
* See Memory for further details.
*/
Image3D
(
const
Image3D
&
image3D
)
:
Image
(
image3D
)
{
}
/*! \brief Constructor from cl_mem - takes ownership.
/*! \brief Constructor from cl_mem - takes ownership.
*
*
...
@@ -4049,27 +4308,45 @@ public:
...
@@ -4049,27 +4308,45 @@ public:
*/
*/
__CL_EXPLICIT_CONSTRUCTORS
Image3D
(
const
cl_mem
&
image3D
)
:
Image
(
image3D
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Image3D
(
const
cl_mem
&
image3D
)
:
Image
(
image3D
)
{
}
/*! \brief Assignment from
Image3D
- performs shallow copy.
/*! \brief Assignment from
cl_mem
- performs shallow copy.
*
*
* See Memory for further details.
* See Memory for further details.
*/
*/
Image3D
&
operator
=
(
const
Image3D
&
rhs
)
Image3D
&
operator
=
(
const
cl_mem
&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
Image
::
operator
=
(
rhs
);
Image
::
operator
=
(
rhs
);
return
*
this
;
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image3D
(
const
Image3D
&
img
)
:
Image
(
img
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image3D
&
operator
=
(
const
Image3D
&
img
)
{
Image
::
operator
=
(
img
);
return
*
this
;
return
*
this
;
}
}
/*! \brief Assignment from cl_mem - performs shallow copy.
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
*
/*! \brief Move constructor to forward move to the superclass correctly.
*
See Memory for further details
.
*
Required for MSVC
.
*/
*/
Image3D
&
operator
=
(
const
cl_mem
&
rhs
)
Image3D
(
Image3D
&&
img
)
CL_HPP_NOEXCEPT
:
Image
(
std
::
move
(
img
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
Image3D
&
operator
=
(
Image3D
&&
img
)
{
{
Image
::
operator
=
(
rhs
);
Image
::
operator
=
(
std
::
move
(
img
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
};
};
#if !defined(CL_VERSION_1_2)
#if !defined(CL_VERSION_1_2)
...
@@ -4092,9 +4369,9 @@ public:
...
@@ -4092,9 +4369,9 @@ public:
Image3DGL
(
Image3DGL
(
const
Context
&
context
,
const
Context
&
context
,
cl_mem_flags
flags
,
cl_mem_flags
flags
,
GLenum
target
,
cl_
GLenum
target
,
GLint
miplevel
,
cl_
GLint
miplevel
,
GLuint
texobj
,
cl_
GLuint
texobj
,
cl_int
*
err
=
NULL
)
cl_int
*
err
=
NULL
)
{
{
cl_int
error
;
cl_int
error
;
...
@@ -4115,39 +4392,51 @@ public:
...
@@ -4115,39 +4392,51 @@ public:
//! \brief Default constructor - initializes to NULL.
//! \brief Default constructor - initializes to NULL.
Image3DGL
()
:
Image3D
()
{
}
Image3DGL
()
:
Image3D
()
{
}
/*! \brief Copy constructor - performs shallow copy.
*
* See Memory for further details.
*/
Image3DGL
(
const
Image3DGL
&
image
)
:
Image3D
(
image
)
{
}
/*! \brief Constructor from cl_mem - takes ownership.
/*! \brief Constructor from cl_mem - takes ownership.
*
*
* See Memory for further details.
* See Memory for further details.
*/
*/
__CL_EXPLICIT_CONSTRUCTORS
Image3DGL
(
const
cl_mem
&
image
)
:
Image3D
(
image
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Image3DGL
(
const
cl_mem
&
image
)
:
Image3D
(
image
)
{
}
/*! \brief Assignment from
Image3DGL
- performs shallow copy.
/*! \brief Assignment from
cl_mem
- performs shallow copy.
*
*
* See Memory for further details.
* See Memory for further details.
*/
*/
Image3DGL
&
operator
=
(
const
Image3DGL
&
rhs
)
Image3DGL
&
operator
=
(
const
cl_mem
&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
Image3D
::
operator
=
(
rhs
);
Image3D
::
operator
=
(
rhs
);
return
*
this
;
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image3DGL
(
const
Image3DGL
&
img
)
:
Image3D
(
img
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
Image3DGL
&
operator
=
(
const
Image3DGL
&
img
)
{
Image3D
::
operator
=
(
img
);
return
*
this
;
return
*
this
;
}
}
/*! \brief Assignment from cl_mem - performs shallow copy.
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
*
/*! \brief Move constructor to forward move to the superclass correctly.
*
See Memory for further details
.
*
Required for MSVC
.
*/
*/
Image3DGL
&
operator
=
(
const
cl_mem
&
rhs
)
Image3DGL
(
Image3DGL
&&
img
)
CL_HPP_NOEXCEPT
:
Image3D
(
std
::
move
(
img
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
Image3DGL
&
operator
=
(
Image3DGL
&&
img
)
{
{
Image3D
::
operator
=
(
rhs
);
Image3D
::
operator
=
(
std
::
move
(
img
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
};
};
#endif // #if !defined(CL_VERSION_1_2)
#endif // #if !defined(CL_VERSION_1_2)
...
@@ -4164,9 +4453,9 @@ public:
...
@@ -4164,9 +4453,9 @@ public:
ImageGL
(
ImageGL
(
const
Context
&
context
,
const
Context
&
context
,
cl_mem_flags
flags
,
cl_mem_flags
flags
,
GLenum
target
,
cl_
GLenum
target
,
GLint
miplevel
,
cl_
GLint
miplevel
,
GLuint
texobj
,
cl_
GLuint
texobj
,
cl_int
*
err
=
NULL
)
cl_int
*
err
=
NULL
)
{
{
cl_int
error
;
cl_int
error
;
...
@@ -4186,26 +4475,178 @@ public:
...
@@ -4186,26 +4475,178 @@ public:
ImageGL
()
:
Image
()
{
}
ImageGL
()
:
Image
()
{
}
ImageGL
(
const
ImageGL
&
image
)
:
Image
(
image
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
ImageGL
(
const
cl_mem
&
image
)
:
Image
(
image
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
ImageGL
(
const
cl_mem
&
image
)
:
Image
(
image
)
{
}
ImageGL
&
operator
=
(
const
ImageGL
&
rhs
)
ImageGL
&
operator
=
(
const
cl_mem
&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
Image
::
operator
=
(
rhs
);
Image
::
operator
=
(
rhs
);
return
*
this
;
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
ImageGL
(
const
ImageGL
&
img
)
:
Image
(
img
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
ImageGL
&
operator
=
(
const
ImageGL
&
img
)
{
Image
::
operator
=
(
img
);
return
*
this
;
return
*
this
;
}
}
ImageGL
&
operator
=
(
const
cl_mem
&
rhs
)
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
/*! \brief Move constructor to forward move to the superclass correctly.
* Required for MSVC.
*/
ImageGL
(
ImageGL
&&
img
)
CL_HPP_NOEXCEPT
:
Image
(
std
::
move
(
img
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
ImageGL
&
operator
=
(
ImageGL
&&
img
)
{
{
Image
::
operator
=
(
rhs
);
Image
::
operator
=
(
std
::
move
(
img
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
};
};
#endif // #if defined(CL_VERSION_1_2)
#endif // #if defined(CL_VERSION_1_2)
/*! \brief Class interface for GL Render Buffer Memory Objects.
*
* This is provided to facilitate interoperability with OpenGL.
*
* See Memory for details about copy semantics, etc.
*
* \see Memory
*/
class
BufferRenderGL
:
#if defined(CL_VERSION_1_2)
public
ImageGL
#else // #if defined(CL_VERSION_1_2)
public
Image2DGL
#endif //#if defined(CL_VERSION_1_2)
{
public:
/*! \brief Constructs a BufferRenderGL in a specified context, from a given
* GL Renderbuffer.
*
* Wraps clCreateFromGLRenderbuffer().
*/
BufferRenderGL
(
const
Context
&
context
,
cl_mem_flags
flags
,
cl_GLuint
bufobj
,
cl_int
*
err
=
NULL
)
{
cl_int
error
;
object_
=
::
clCreateFromGLRenderbuffer
(
context
(),
flags
,
bufobj
,
&
error
);
detail
::
errHandler
(
error
,
__CREATE_GL_RENDER_BUFFER_ERR
);
if
(
err
!=
NULL
)
{
*
err
=
error
;
}
}
//! \brief Default constructor - initializes to NULL.
#if defined(CL_VERSION_1_2)
BufferRenderGL
()
:
ImageGL
()
{};
#else // #if defined(CL_VERSION_1_2)
BufferRenderGL
()
:
Image2DGL
()
{};
#endif //#if defined(CL_VERSION_1_2)
/*! \brief Constructor from cl_mem - takes ownership.
*
* See Memory for further details.
*/
#if defined(CL_VERSION_1_2)
__CL_EXPLICIT_CONSTRUCTORS
BufferRenderGL
(
const
cl_mem
&
buffer
)
:
ImageGL
(
buffer
)
{
}
#else // #if defined(CL_VERSION_1_2)
__CL_EXPLICIT_CONSTRUCTORS
BufferRenderGL
(
const
cl_mem
&
buffer
)
:
Image2DGL
(
buffer
)
{
}
#endif //#if defined(CL_VERSION_1_2)
/*! \brief Assignment from cl_mem - performs shallow copy.
*
* See Memory for further details.
*/
BufferRenderGL
&
operator
=
(
const
cl_mem
&
rhs
)
{
#if defined(CL_VERSION_1_2)
ImageGL
::
operator
=
(
rhs
);
#else // #if defined(CL_VERSION_1_2)
Image2DGL
::
operator
=
(
rhs
);
#endif //#if defined(CL_VERSION_1_2)
return
*
this
;
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
#if defined(CL_VERSION_1_2)
BufferRenderGL
(
const
BufferRenderGL
&
buf
)
:
ImageGL
(
buf
)
{}
#else // #if defined(CL_VERSION_1_2)
BufferRenderGL
(
const
BufferRenderGL
&
buf
)
:
Image2DGL
(
buf
)
{}
#endif //#if defined(CL_VERSION_1_2)
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
BufferRenderGL
&
operator
=
(
const
BufferRenderGL
&
rhs
)
{
#if defined(CL_VERSION_1_2)
ImageGL
::
operator
=
(
rhs
);
#else // #if defined(CL_VERSION_1_2)
Image2DGL
::
operator
=
(
rhs
);
#endif //#if defined(CL_VERSION_1_2)
return
*
this
;
}
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
/*! \brief Move constructor to forward move to the superclass correctly.
* Required for MSVC.
*/
#if defined(CL_VERSION_1_2)
BufferRenderGL
(
BufferRenderGL
&&
buf
)
CL_HPP_NOEXCEPT
:
ImageGL
(
std
::
move
(
buf
))
{}
#else // #if defined(CL_VERSION_1_2)
BufferRenderGL
(
BufferRenderGL
&&
buf
)
CL_HPP_NOEXCEPT
:
Image2DGL
(
std
::
move
(
buf
))
{}
#endif //#if defined(CL_VERSION_1_2)
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
BufferRenderGL
&
operator
=
(
BufferRenderGL
&&
buf
)
{
#if defined(CL_VERSION_1_2)
ImageGL
::
operator
=
(
std
::
move
(
buf
));
#else // #if defined(CL_VERSION_1_2)
Image2DGL
::
operator
=
(
std
::
move
(
buf
));
#endif //#if defined(CL_VERSION_1_2)
return
*
this
;
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
//! \brief Wrapper for clGetGLObjectInfo().
cl_int
getObjectInfo
(
cl_gl_object_type
*
type
,
cl_GLuint
*
gl_object_name
)
{
return
detail
::
errHandler
(
::
clGetGLObjectInfo
(
object_
,
type
,
gl_object_name
),
__GET_GL_OBJECT_INFO_ERR
);
}
};
/*! \brief Class interface for cl_sampler.
/*! \brief Class interface for cl_sampler.
*
*
* \note Copies of these objects are shallow, meaning that the copy will refer
* \note Copies of these objects are shallow, meaning that the copy will refer
...
@@ -4217,12 +4658,6 @@ public:
...
@@ -4217,12 +4658,6 @@ public:
class
Sampler
:
public
detail
::
Wrapper
<
cl_sampler
>
class
Sampler
:
public
detail
::
Wrapper
<
cl_sampler
>
{
{
public:
public:
/*! \brief Destructor.
*
* This calls clReleaseSampler() on the value held by this instance.
*/
~
Sampler
()
{
}
//! \brief Default constructor - initializes to NULL.
//! \brief Default constructor - initializes to NULL.
Sampler
()
{
}
Sampler
()
{
}
...
@@ -4251,42 +4686,53 @@ public:
...
@@ -4251,42 +4686,53 @@ public:
}
}
}
}
/*! \brief Copy constructor - performs shallow copy.
*
* This calls clRetainSampler() on the parameter's cl_sampler.
*/
Sampler
(
const
Sampler
&
sampler
)
:
detail
::
Wrapper
<
cl_type
>
(
sampler
)
{
}
/*! \brief Constructor from cl_sampler - takes ownership.
/*! \brief Constructor from cl_sampler - takes ownership.
*
*
* This effectively transfers ownership of a refcount on the cl_sampler
* This effectively transfers ownership of a refcount on the cl_sampler
* into the new Sampler object.
* into the new Sampler object.
*/
*/
Sampler
(
const
cl_sampler
&
sampler
)
:
detail
::
Wrapper
<
cl_type
>
(
sampler
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Sampler
(
const
cl_sampler
&
sampler
)
:
detail
::
Wrapper
<
cl_type
>
(
sampler
)
{
}
/*! \brief Assignment operator from
S
ampler.
/*! \brief Assignment operator from
cl_s
ampler
- takes ownership
.
*
*
* This
calls clRetainSampler() on the parameter and clReleaseSampler()
* This
effectively transfers ownership of a refcount on the rhs and calls
* on the previous
value
held by this instance.
*
clReleaseSampler()
on the
value
previous
ly
held by this instance.
*/
*/
Sampler
&
operator
=
(
const
S
ampler
&
rhs
)
Sampler
&
operator
=
(
const
cl_s
ampler
&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
return
*
this
;
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
Sampler
(
const
Sampler
&
sam
)
:
detail
::
Wrapper
<
cl_type
>
(
sam
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
Sampler
&
operator
=
(
const
Sampler
&
sam
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
sam
);
return
*
this
;
return
*
this
;
}
}
/*! \brief Assignment operator from cl_sampler - takes ownership.
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
*
/*! \brief Move constructor to forward move to the superclass correctly.
* This effectively transfers ownership of a refcount on the rhs and calls
* Required for MSVC.
* clReleaseSampler() on the value previously held by this instance.
*/
*/
Sampler
&
operator
=
(
const
cl_sampler
&
rhs
)
Sampler
(
Sampler
&&
sam
)
CL_HPP_NOEXCEPT
:
detail
::
Wrapper
<
cl_type
>
(
std
::
move
(
sam
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
Sampler
&
operator
=
(
Sampler
&&
sam
)
{
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
detail
::
Wrapper
<
cl_type
>::
operator
=
(
std
::
move
(
sam
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
//! \brief Wrapper for clGetSamplerInfo().
//! \brief Wrapper for clGetSamplerInfo().
template
<
typename
T
>
template
<
typename
T
>
...
@@ -4380,14 +4826,14 @@ template <typename T>
...
@@ -4380,14 +4826,14 @@ template <typename T>
struct
KernelArgumentHandler
struct
KernelArgumentHandler
{
{
static
::
size_t
size
(
const
T
&
)
{
return
sizeof
(
T
);
}
static
::
size_t
size
(
const
T
&
)
{
return
sizeof
(
T
);
}
static
T
*
ptr
(
T
&
value
)
{
return
&
value
;
}
static
const
T
*
ptr
(
const
T
&
value
)
{
return
&
value
;
}
};
};
template
<
>
template
<
>
struct
KernelArgumentHandler
<
LocalSpaceArg
>
struct
KernelArgumentHandler
<
LocalSpaceArg
>
{
{
static
::
size_t
size
(
const
LocalSpaceArg
&
value
)
{
return
value
.
size_
;
}
static
::
size_t
size
(
const
LocalSpaceArg
&
value
)
{
return
value
.
size_
;
}
static
void
*
ptr
(
LocalSpaceArg
&
)
{
return
NULL
;
}
static
const
void
*
ptr
(
const
LocalSpaceArg
&
)
{
return
NULL
;
}
};
};
}
}
...
@@ -4431,21 +4877,9 @@ class Kernel : public detail::Wrapper<cl_kernel>
...
@@ -4431,21 +4877,9 @@ class Kernel : public detail::Wrapper<cl_kernel>
public:
public:
inline
Kernel
(
const
Program
&
program
,
const
char
*
name
,
cl_int
*
err
=
NULL
);
inline
Kernel
(
const
Program
&
program
,
const
char
*
name
,
cl_int
*
err
=
NULL
);
/*! \brief Destructor.
*
* This calls clReleaseKernel() on the value held by this instance.
*/
~
Kernel
()
{
}
//! \brief Default constructor - initializes to NULL.
//! \brief Default constructor - initializes to NULL.
Kernel
()
{
}
Kernel
()
{
}
/*! \brief Copy constructor - performs shallow copy.
*
* This calls clRetainKernel() on the parameter's cl_kernel.
*/
Kernel
(
const
Kernel
&
kernel
)
:
detail
::
Wrapper
<
cl_type
>
(
kernel
)
{
}
/*! \brief Constructor from cl_kernel - takes ownership.
/*! \brief Constructor from cl_kernel - takes ownership.
*
*
* This effectively transfers ownership of a refcount on the cl_kernel
* This effectively transfers ownership of a refcount on the cl_kernel
...
@@ -4453,29 +4887,46 @@ public:
...
@@ -4453,29 +4887,46 @@ public:
*/
*/
__CL_EXPLICIT_CONSTRUCTORS
Kernel
(
const
cl_kernel
&
kernel
)
:
detail
::
Wrapper
<
cl_type
>
(
kernel
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Kernel
(
const
cl_kernel
&
kernel
)
:
detail
::
Wrapper
<
cl_type
>
(
kernel
)
{
}
/*! \brief Assignment operator from Kernel.
/*! \brief Assignment operator from cl_kernel - takes ownership.
*
*
* This calls clRetainKernel() on the parameter and clReleaseKernel()
* This effectively transfers ownership of a refcount on the rhs and calls
* on the previous value held by this instance.
* clReleaseKernel() on the value previously held by this instance.
*/
Kernel
&
operator
=
(
const
cl_kernel
&
rhs
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
return
*
this
;
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
Kernel
(
const
Kernel
&
kernel
)
:
detail
::
Wrapper
<
cl_type
>
(
kernel
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
*/
Kernel
&
operator
=
(
const
Kernel
&
rhs
)
Kernel
&
operator
=
(
const
Kernel
&
kernel
)
{
{
if
(
this
!=
&
rhs
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
kernel
);
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
}
return
*
this
;
return
*
this
;
}
}
/*! \brief Assignment operator from cl_kernel - takes ownership.
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
*
/*! \brief Move constructor to forward move to the superclass correctly.
* This effectively transfers ownership of a refcount on the rhs and calls
* Required for MSVC.
* clReleaseKernel() on the value previously held by this instance.
*/
*/
Kernel
&
operator
=
(
const
cl_kernel
&
rhs
)
Kernel
(
Kernel
&&
kernel
)
CL_HPP_NOEXCEPT
:
detail
::
Wrapper
<
cl_type
>
(
std
::
move
(
kernel
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
Kernel
&
operator
=
(
Kernel
&&
kernel
)
{
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
detail
::
Wrapper
<
cl_type
>::
operator
=
(
std
::
move
(
kernel
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
template
<
typename
T
>
template
<
typename
T
>
cl_int
getInfo
(
cl_kernel_info
name
,
T
*
param
)
const
cl_int
getInfo
(
cl_kernel_info
name
,
T
*
param
)
const
...
@@ -4545,7 +4996,7 @@ public:
...
@@ -4545,7 +4996,7 @@ public:
}
}
template
<
typename
T
>
template
<
typename
T
>
cl_int
setArg
(
cl_uint
index
,
T
value
)
cl_int
setArg
(
cl_uint
index
,
const
T
&
value
)
{
{
return
detail
::
errHandler
(
return
detail
::
errHandler
(
::
clSetKernelArg
(
::
clSetKernelArg
(
...
@@ -4556,7 +5007,7 @@ public:
...
@@ -4556,7 +5007,7 @@ public:
__SET_KERNEL_ARGS_ERR
);
__SET_KERNEL_ARGS_ERR
);
}
}
cl_int
setArg
(
cl_uint
index
,
::
size_t
size
,
void
*
argPtr
)
cl_int
setArg
(
cl_uint
index
,
::
size_t
size
,
const
void
*
argPtr
)
{
{
return
detail
::
errHandler
(
return
detail
::
errHandler
(
::
clSetKernelArg
(
object_
,
index
,
size
,
argPtr
),
::
clSetKernelArg
(
object_
,
index
,
size
,
argPtr
),
...
@@ -4575,41 +5026,7 @@ public:
...
@@ -4575,41 +5026,7 @@ public:
Program
(
Program
(
const
STRING_CLASS
&
source
,
const
STRING_CLASS
&
source
,
cl_int
*
err
=
NULL
)
bool
build
=
false
,
{
cl_int
error
;
const
char
*
strings
=
source
.
c_str
();
const
::
size_t
length
=
source
.
size
();
Context
context
=
Context
::
getDefault
(
err
);
object_
=
::
clCreateProgramWithSource
(
context
(),
(
cl_uint
)
1
,
&
strings
,
&
length
,
&
error
);
detail
::
errHandler
(
error
,
__CREATE_PROGRAM_WITH_SOURCE_ERR
);
if
(
error
==
CL_SUCCESS
)
{
error
=
::
clBuildProgram
(
object_
,
0
,
NULL
,
""
,
NULL
,
NULL
);
detail
::
errHandler
(
error
,
__BUILD_PROGRAM_ERR
);
}
if
(
err
!=
NULL
)
{
*
err
=
error
;
}
}
Program
(
const
STRING_CLASS
&
source
,
bool
build
,
cl_int
*
err
=
NULL
)
cl_int
*
err
=
NULL
)
{
{
cl_int
error
;
cl_int
error
;
...
@@ -4761,7 +5178,7 @@ public:
...
@@ -4761,7 +5178,7 @@ public:
object_
=
::
clCreateProgramWithBinary
(
object_
=
::
clCreateProgramWithBinary
(
context
(),
(
cl_uint
)
devices
.
size
(),
context
(),
(
cl_uint
)
devices
.
size
(),
deviceIDs
,
deviceIDs
,
lengths
,
images
,
binaryStatus
!=
NULL
lengths
,
images
,
(
binaryStatus
!=
NULL
&&
numDevices
>
0
)
?
&
binaryStatus
->
front
()
?
&
binaryStatus
->
front
()
:
NULL
,
&
error
);
:
NULL
,
&
error
);
...
@@ -4808,23 +5225,43 @@ public:
...
@@ -4808,23 +5225,43 @@ public:
Program
()
{
}
Program
()
{
}
Program
(
const
Program
&
program
)
:
detail
::
Wrapper
<
cl_type
>
(
program
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Program
(
const
cl_program
&
program
)
:
detail
::
Wrapper
<
cl_type
>
(
program
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
Program
(
const
cl_program
&
program
)
:
detail
::
Wrapper
<
cl_type
>
(
program
)
{
}
Program
&
operator
=
(
const
P
rogram
&
rhs
)
Program
&
operator
=
(
const
cl_p
rogram
&
rhs
)
{
{
if
(
this
!=
&
rhs
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
return
*
this
;
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
Program
(
const
Program
&
program
)
:
detail
::
Wrapper
<
cl_type
>
(
program
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
Program
&
operator
=
(
const
Program
&
program
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
program
);
return
*
this
;
return
*
this
;
}
}
Program
&
operator
=
(
const
cl_program
&
rhs
)
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
/*! \brief Move constructor to forward move to the superclass correctly.
* Required for MSVC.
*/
Program
(
Program
&&
program
)
CL_HPP_NOEXCEPT
:
detail
::
Wrapper
<
cl_type
>
(
std
::
move
(
program
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
Program
&
operator
=
(
Program
&&
program
)
{
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
detail
::
Wrapper
<
cl_type
>::
operator
=
(
std
::
move
(
program
)
);
return
*
this
;
return
*
this
;
}
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
cl_int
build
(
cl_int
build
(
const
VECTOR_CLASS
<
Device
>&
devices
,
const
VECTOR_CLASS
<
Device
>&
devices
,
...
@@ -4960,11 +5397,14 @@ inline Program linkProgram(
...
@@ -4960,11 +5397,14 @@ inline Program linkProgram(
void
*
data
=
NULL
,
void
*
data
=
NULL
,
cl_int
*
err
=
NULL
)
cl_int
*
err
=
NULL
)
{
{
cl_int
err_local
=
CL_SUCCESS
;
cl_int
err
or
_local
=
CL_SUCCESS
;
cl_program
programs
[
2
]
=
{
input1
(),
input2
()
};
cl_program
programs
[
2
]
=
{
input1
(),
input2
()
};
Context
ctx
=
input1
.
getInfo
<
CL_PROGRAM_CONTEXT
>
();
Context
ctx
=
input1
.
getInfo
<
CL_PROGRAM_CONTEXT
>
(
&
error_local
);
if
(
error_local
!=
CL_SUCCESS
)
{
detail
::
errHandler
(
error_local
,
__LINK_PROGRAM_ERR
);
}
cl_program
prog
=
::
clLinkProgram
(
cl_program
prog
=
::
clLinkProgram
(
ctx
(),
ctx
(),
...
@@ -4975,11 +5415,11 @@ inline Program linkProgram(
...
@@ -4975,11 +5415,11 @@ inline Program linkProgram(
programs
,
programs
,
notifyFptr
,
notifyFptr
,
data
,
data
,
&
err_local
);
&
err
or
_local
);
detail
::
errHandler
(
err_local
,
__COMPILE_PROGRAM_ERR
);
detail
::
errHandler
(
err
or
_local
,
__COMPILE_PROGRAM_ERR
);
if
(
err
!=
NULL
)
{
if
(
err
!=
NULL
)
{
*
err
=
err_local
;
*
err
=
err
or
_local
;
}
}
return
Program
(
prog
);
return
Program
(
prog
);
...
@@ -4992,7 +5432,7 @@ inline Program linkProgram(
...
@@ -4992,7 +5432,7 @@ inline Program linkProgram(
void
*
data
=
NULL
,
void
*
data
=
NULL
,
cl_int
*
err
=
NULL
)
cl_int
*
err
=
NULL
)
{
{
cl_int
err_local
=
CL_SUCCESS
;
cl_int
err
or
_local
=
CL_SUCCESS
;
cl_program
*
programs
=
(
cl_program
*
)
alloca
(
inputPrograms
.
size
()
*
sizeof
(
cl_program
));
cl_program
*
programs
=
(
cl_program
*
)
alloca
(
inputPrograms
.
size
()
*
sizeof
(
cl_program
));
...
@@ -5002,8 +5442,15 @@ inline Program linkProgram(
...
@@ -5002,8 +5442,15 @@ inline Program linkProgram(
}
}
}
}
Context
ctx
;
if
(
inputPrograms
.
size
()
>
0
)
{
ctx
=
inputPrograms
[
0
].
getInfo
<
CL_PROGRAM_CONTEXT
>
(
&
error_local
);
if
(
error_local
!=
CL_SUCCESS
)
{
detail
::
errHandler
(
error_local
,
__LINK_PROGRAM_ERR
);
}
}
cl_program
prog
=
::
clLinkProgram
(
cl_program
prog
=
::
clLinkProgram
(
Context
::
getDefault
()
(),
ctx
(),
0
,
0
,
NULL
,
NULL
,
options
,
options
,
...
@@ -5011,11 +5458,11 @@ inline Program linkProgram(
...
@@ -5011,11 +5458,11 @@ inline Program linkProgram(
programs
,
programs
,
notifyFptr
,
notifyFptr
,
data
,
data
,
&
err_local
);
&
err
or
_local
);
detail
::
errHandler
(
err_local
,
__COMPILE_PROGRAM_ERR
);
detail
::
errHandler
(
err
or
_local
,
__COMPILE_PROGRAM_ERR
);
if
(
err
!=
NULL
)
{
if
(
err
!=
NULL
)
{
*
err
=
err_local
;
*
err
=
err
or
_local
;
}
}
return
Program
(
prog
);
return
Program
(
prog
);
...
@@ -5061,7 +5508,11 @@ inline Kernel::Kernel(const Program& program, const char* name, cl_int* err)
...
@@ -5061,7 +5508,11 @@ inline Kernel::Kernel(const Program& program, const char* name, cl_int* err)
class
CommandQueue
:
public
detail
::
Wrapper
<
cl_command_queue
>
class
CommandQueue
:
public
detail
::
Wrapper
<
cl_command_queue
>
{
{
private:
private:
#ifdef CL_HPP_CPP11_ATOMICS_SUPPORTED
static
std
::
atomic
<
int
>
default_initialized_
;
#else // !CL_HPP_CPP11_ATOMICS_SUPPORTED
static
volatile
int
default_initialized_
;
static
volatile
int
default_initialized_
;
#endif // !CL_HPP_CPP11_ATOMICS_SUPPORTED
static
CommandQueue
default_
;
static
CommandQueue
default_
;
static
volatile
cl_int
default_error_
;
static
volatile
cl_int
default_error_
;
public:
public:
...
@@ -5072,7 +5523,7 @@ public:
...
@@ -5072,7 +5523,7 @@ public:
cl_int
error
;
cl_int
error
;
Context
context
=
Context
::
getDefault
(
&
error
);
Context
context
=
Context
::
getDefault
(
&
error
);
detail
::
errHandler
(
error
,
__CREATE_CO
MMAND_QUEUE
_ERR
);
detail
::
errHandler
(
error
,
__CREATE_CO
NTEXT
_ERR
);
if
(
error
!=
CL_SUCCESS
)
{
if
(
error
!=
CL_SUCCESS
)
{
if
(
err
!=
NULL
)
{
if
(
err
!=
NULL
)
{
...
@@ -5091,6 +5542,37 @@ public:
...
@@ -5091,6 +5542,37 @@ public:
}
}
}
}
}
}
/*!
* \brief Constructs a CommandQueue for an implementation defined device in the given context
*/
explicit
CommandQueue
(
const
Context
&
context
,
cl_command_queue_properties
properties
=
0
,
cl_int
*
err
=
NULL
)
{
cl_int
error
;
VECTOR_CLASS
<
cl
::
Device
>
devices
;
error
=
context
.
getInfo
(
CL_CONTEXT_DEVICES
,
&
devices
);
detail
::
errHandler
(
error
,
__CREATE_CONTEXT_ERR
);
if
(
error
!=
CL_SUCCESS
)
{
if
(
err
!=
NULL
)
{
*
err
=
error
;
}
return
;
}
object_
=
::
clCreateCommandQueue
(
context
(),
devices
[
0
](),
properties
,
&
error
);
detail
::
errHandler
(
error
,
__CREATE_COMMAND_QUEUE_ERR
);
if
(
err
!=
NULL
)
{
*
err
=
error
;
}
}
CommandQueue
(
CommandQueue
(
const
Context
&
context
,
const
Context
&
context
,
...
@@ -5108,6 +5590,36 @@ public:
...
@@ -5108,6 +5590,36 @@ public:
}
}
}
}
/*! \brief Copy constructor to forward copy to the superclass correctly.
* Required for MSVC.
*/
CommandQueue
(
const
CommandQueue
&
queue
)
:
detail
::
Wrapper
<
cl_type
>
(
queue
)
{}
/*! \brief Copy assignment to forward copy to the superclass correctly.
* Required for MSVC.
*/
CommandQueue
&
operator
=
(
const
CommandQueue
&
queue
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
queue
);
return
*
this
;
}
#if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
/*! \brief Move constructor to forward move to the superclass correctly.
* Required for MSVC.
*/
CommandQueue
(
CommandQueue
&&
queue
)
CL_HPP_NOEXCEPT
:
detail
::
Wrapper
<
cl_type
>
(
std
::
move
(
queue
))
{}
/*! \brief Move assignment to forward move to the superclass correctly.
* Required for MSVC.
*/
CommandQueue
&
operator
=
(
CommandQueue
&&
queue
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
std
::
move
(
queue
));
return
*
this
;
}
#endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
static
CommandQueue
getDefault
(
cl_int
*
err
=
NULL
)
static
CommandQueue
getDefault
(
cl_int
*
err
=
NULL
)
{
{
int
state
=
detail
::
compare_exchange
(
int
state
=
detail
::
compare_exchange
(
...
@@ -5171,17 +5683,7 @@ public:
...
@@ -5171,17 +5683,7 @@ public:
CommandQueue
()
{
}
CommandQueue
()
{
}
CommandQueue
(
const
CommandQueue
&
commandQueue
)
:
detail
::
Wrapper
<
cl_type
>
(
commandQueue
)
{
}
__CL_EXPLICIT_CONSTRUCTORS
CommandQueue
(
const
cl_command_queue
&
commandQueue
)
:
detail
::
Wrapper
<
cl_type
>
(
commandQueue
)
{
}
CommandQueue
(
const
cl_command_queue
&
commandQueue
)
:
detail
::
Wrapper
<
cl_type
>
(
commandQueue
)
{
}
CommandQueue
&
operator
=
(
const
CommandQueue
&
rhs
)
{
if
(
this
!=
&
rhs
)
{
detail
::
Wrapper
<
cl_type
>::
operator
=
(
rhs
);
}
return
*
this
;
}
CommandQueue
&
operator
=
(
const
cl_command_queue
&
rhs
)
CommandQueue
&
operator
=
(
const
cl_command_queue
&
rhs
)
{
{
...
@@ -5284,6 +5786,7 @@ public:
...
@@ -5284,6 +5786,7 @@ public:
return
err
;
return
err
;
}
}
#if defined(CL_VERSION_1_1)
cl_int
enqueueReadBufferRect
(
cl_int
enqueueReadBufferRect
(
const
Buffer
&
buffer
,
const
Buffer
&
buffer
,
...
@@ -5334,7 +5837,7 @@ public:
...
@@ -5334,7 +5837,7 @@ public:
::
size_t
buffer_slice_pitch
,
::
size_t
buffer_slice_pitch
,
::
size_t
host_row_pitch
,
::
size_t
host_row_pitch
,
::
size_t
host_slice_pitch
,
::
size_t
host_slice_pitch
,
void
*
ptr
,
const
void
*
ptr
,
const
VECTOR_CLASS
<
Event
>*
events
=
NULL
,
const
VECTOR_CLASS
<
Event
>*
events
=
NULL
,
Event
*
event
=
NULL
)
const
Event
*
event
=
NULL
)
const
{
{
...
@@ -5399,6 +5902,7 @@ public:
...
@@ -5399,6 +5902,7 @@ public:
return
err
;
return
err
;
}
}
#endif //if defined(CL_VERSION_1_1)
#if defined(CL_VERSION_1_2)
#if defined(CL_VERSION_1_2)
/**
/**
...
@@ -5471,7 +5975,7 @@ public:
...
@@ -5471,7 +5975,7 @@ public:
const
size_t
<
3
>&
region
,
const
size_t
<
3
>&
region
,
::
size_t
row_pitch
,
::
size_t
row_pitch
,
::
size_t
slice_pitch
,
::
size_t
slice_pitch
,
void
*
ptr
,
const
void
*
ptr
,
const
VECTOR_CLASS
<
Event
>*
events
=
NULL
,
const
VECTOR_CLASS
<
Event
>*
events
=
NULL
,
Event
*
event
=
NULL
)
const
Event
*
event
=
NULL
)
const
{
{
...
@@ -5680,18 +6184,22 @@ public:
...
@@ -5680,18 +6184,22 @@ public:
Event
*
event
=
NULL
,
Event
*
event
=
NULL
,
cl_int
*
err
=
NULL
)
const
cl_int
*
err
=
NULL
)
const
{
{
cl_event
tmp
;
cl_int
error
;
cl_int
error
;
void
*
result
=
::
clEnqueueMapBuffer
(
void
*
result
=
::
clEnqueueMapBuffer
(
object_
,
buffer
(),
blocking
,
flags
,
offset
,
size
,
object_
,
buffer
(),
blocking
,
flags
,
offset
,
size
,
(
events
!=
NULL
)
?
(
cl_uint
)
events
->
size
()
:
0
,
(
events
!=
NULL
)
?
(
cl_uint
)
events
->
size
()
:
0
,
(
events
!=
NULL
&&
events
->
size
()
>
0
)
?
(
cl_event
*
)
&
events
->
front
()
:
NULL
,
(
events
!=
NULL
&&
events
->
size
()
>
0
)
?
(
cl_event
*
)
&
events
->
front
()
:
NULL
,
(
cl_
event
*
)
event
,
(
event
!=
NULL
)
?
&
tmp
:
NULL
,
&
error
);
&
error
);
detail
::
errHandler
(
error
,
__ENQUEUE_MAP_BUFFER_ERR
);
detail
::
errHandler
(
error
,
__ENQUEUE_MAP_BUFFER_ERR
);
if
(
err
!=
NULL
)
{
if
(
err
!=
NULL
)
{
*
err
=
error
;
*
err
=
error
;
}
}
if
(
event
!=
NULL
&&
error
==
CL_SUCCESS
)
*
event
=
tmp
;
return
result
;
return
result
;
}
}
...
@@ -5707,6 +6215,7 @@ public:
...
@@ -5707,6 +6215,7 @@ public:
Event
*
event
=
NULL
,
Event
*
event
=
NULL
,
cl_int
*
err
=
NULL
)
const
cl_int
*
err
=
NULL
)
const
{
{
cl_event
tmp
;
cl_int
error
;
cl_int
error
;
void
*
result
=
::
clEnqueueMapImage
(
void
*
result
=
::
clEnqueueMapImage
(
object_
,
buffer
(),
blocking
,
flags
,
object_
,
buffer
(),
blocking
,
flags
,
...
@@ -5714,13 +6223,15 @@ public:
...
@@ -5714,13 +6223,15 @@ public:
row_pitch
,
slice_pitch
,
row_pitch
,
slice_pitch
,
(
events
!=
NULL
)
?
(
cl_uint
)
events
->
size
()
:
0
,
(
events
!=
NULL
)
?
(
cl_uint
)
events
->
size
()
:
0
,
(
events
!=
NULL
&&
events
->
size
()
>
0
)
?
(
cl_event
*
)
&
events
->
front
()
:
NULL
,
(
events
!=
NULL
&&
events
->
size
()
>
0
)
?
(
cl_event
*
)
&
events
->
front
()
:
NULL
,
(
cl_
event
*
)
event
,
(
event
!=
NULL
)
?
&
tmp
:
NULL
,
&
error
);
&
error
);
detail
::
errHandler
(
error
,
__ENQUEUE_MAP_IMAGE_ERR
);
detail
::
errHandler
(
error
,
__ENQUEUE_MAP_IMAGE_ERR
);
if
(
err
!=
NULL
)
{
if
(
err
!=
NULL
)
{
*
err
=
error
;
*
err
=
error
;
}
}
if
(
event
!=
NULL
&&
error
==
CL_SUCCESS
)
*
event
=
tmp
;
return
result
;
return
result
;
}
}
...
@@ -5759,7 +6270,7 @@ public:
...
@@ -5759,7 +6270,7 @@ public:
*/
*/
cl_int
enqueueMarkerWithWaitList
(
cl_int
enqueueMarkerWithWaitList
(
const
VECTOR_CLASS
<
Event
>
*
events
=
0
,
const
VECTOR_CLASS
<
Event
>
*
events
=
0
,
Event
*
event
=
0
)
Event
*
event
=
0
)
const
{
{
cl_event
tmp
;
cl_event
tmp
;
cl_int
err
=
detail
::
errHandler
(
cl_int
err
=
detail
::
errHandler
(
...
@@ -5789,7 +6300,7 @@ public:
...
@@ -5789,7 +6300,7 @@ public:
*/
*/
cl_int
enqueueBarrierWithWaitList
(
cl_int
enqueueBarrierWithWaitList
(
const
VECTOR_CLASS
<
Event
>
*
events
=
0
,
const
VECTOR_CLASS
<
Event
>
*
events
=
0
,
Event
*
event
=
0
)
Event
*
event
=
0
)
const
{
{
cl_event
tmp
;
cl_event
tmp
;
cl_int
err
=
detail
::
errHandler
(
cl_int
err
=
detail
::
errHandler
(
...
@@ -5815,7 +6326,7 @@ public:
...
@@ -5815,7 +6326,7 @@ public:
cl_mem_migration_flags
flags
,
cl_mem_migration_flags
flags
,
const
VECTOR_CLASS
<
Event
>*
events
=
NULL
,
const
VECTOR_CLASS
<
Event
>*
events
=
NULL
,
Event
*
event
=
NULL
Event
*
event
=
NULL
)
)
const
{
{
cl_event
tmp
;
cl_event
tmp
;
...
@@ -5913,7 +6424,7 @@ public:
...
@@ -5913,7 +6424,7 @@ public:
object_
,
userFptr
,
args
.
first
,
args
.
second
,
object_
,
userFptr
,
args
.
first
,
args
.
second
,
(
mem_objects
!=
NULL
)
?
(
cl_uint
)
mem_objects
->
size
()
:
0
,
(
mem_objects
!=
NULL
)
?
(
cl_uint
)
mem_objects
->
size
()
:
0
,
mems
,
mems
,
(
mem_locs
!=
NULL
)
?
(
const
void
**
)
&
mem_locs
->
front
()
:
NULL
,
(
mem_locs
!=
NULL
&&
mem_locs
->
size
()
>
0
)
?
(
const
void
**
)
&
mem_locs
->
front
()
:
NULL
,
(
events
!=
NULL
)
?
(
cl_uint
)
events
->
size
()
:
0
,
(
events
!=
NULL
)
?
(
cl_uint
)
events
->
size
()
:
0
,
(
events
!=
NULL
&&
events
->
size
()
>
0
)
?
(
cl_event
*
)
&
events
->
front
()
:
NULL
,
(
events
!=
NULL
&&
events
->
size
()
>
0
)
?
(
cl_event
*
)
&
events
->
front
()
:
NULL
,
(
event
!=
NULL
)
?
&
tmp
:
NULL
),
(
event
!=
NULL
)
?
&
tmp
:
NULL
),
...
@@ -5932,9 +6443,17 @@ public:
...
@@ -5932,9 +6443,17 @@ public:
CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
cl_int
enqueueMarker
(
Event
*
event
=
NULL
)
const
CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
cl_int
enqueueMarker
(
Event
*
event
=
NULL
)
const
CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
{
{
return
detail
::
errHandler
(
cl_event
tmp
;
::
clEnqueueMarker
(
object_
,
(
cl_event
*
)
event
),
cl_int
err
=
detail
::
errHandler
(
::
clEnqueueMarker
(
object_
,
(
event
!=
NULL
)
?
&
tmp
:
NULL
),
__ENQUEUE_MARKER_ERR
);
__ENQUEUE_MARKER_ERR
);
if
(
event
!=
NULL
&&
err
==
CL_SUCCESS
)
*
event
=
tmp
;
return
err
;
}
}
CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
...
@@ -5944,7 +6463,7 @@ public:
...
@@ -5944,7 +6463,7 @@ public:
::
clEnqueueWaitForEvents
(
::
clEnqueueWaitForEvents
(
object_
,
object_
,
(
cl_uint
)
events
.
size
(),
(
cl_uint
)
events
.
size
(),
(
const
cl_event
*
)
&
events
.
front
()),
events
.
size
()
>
0
?
(
const
cl_event
*
)
&
events
.
front
()
:
NULL
),
__ENQUEUE_WAIT_FOR_EVENTS_ERR
);
__ENQUEUE_WAIT_FOR_EVENTS_ERR
);
}
}
#endif // #if defined(CL_VERSION_1_1)
#endif // #if defined(CL_VERSION_1_1)
...
@@ -5959,7 +6478,7 @@ public:
...
@@ -5959,7 +6478,7 @@ public:
::
clEnqueueAcquireGLObjects
(
::
clEnqueueAcquireGLObjects
(
object_
,
object_
,
(
mem_objects
!=
NULL
)
?
(
cl_uint
)
mem_objects
->
size
()
:
0
,
(
mem_objects
!=
NULL
)
?
(
cl_uint
)
mem_objects
->
size
()
:
0
,
(
mem_objects
!=
NULL
)
?
(
const
cl_mem
*
)
&
mem_objects
->
front
()
:
NULL
,
(
mem_objects
!=
NULL
&&
mem_objects
->
size
()
>
0
)
?
(
const
cl_mem
*
)
&
mem_objects
->
front
()
:
NULL
,
(
events
!=
NULL
)
?
(
cl_uint
)
events
->
size
()
:
0
,
(
events
!=
NULL
)
?
(
cl_uint
)
events
->
size
()
:
0
,
(
events
!=
NULL
&&
events
->
size
()
>
0
)
?
(
cl_event
*
)
&
events
->
front
()
:
NULL
,
(
events
!=
NULL
&&
events
->
size
()
>
0
)
?
(
cl_event
*
)
&
events
->
front
()
:
NULL
,
(
event
!=
NULL
)
?
&
tmp
:
NULL
),
(
event
!=
NULL
)
?
&
tmp
:
NULL
),
...
@@ -5981,7 +6500,7 @@ public:
...
@@ -5981,7 +6500,7 @@ public:
::
clEnqueueReleaseGLObjects
(
::
clEnqueueReleaseGLObjects
(
object_
,
object_
,
(
mem_objects
!=
NULL
)
?
(
cl_uint
)
mem_objects
->
size
()
:
0
,
(
mem_objects
!=
NULL
)
?
(
cl_uint
)
mem_objects
->
size
()
:
0
,
(
mem_objects
!=
NULL
)
?
(
const
cl_mem
*
)
&
mem_objects
->
front
()
:
NULL
,
(
mem_objects
!=
NULL
&&
mem_objects
->
size
()
>
0
)
?
(
const
cl_mem
*
)
&
mem_objects
->
front
()
:
NULL
,
(
events
!=
NULL
)
?
(
cl_uint
)
events
->
size
()
:
0
,
(
events
!=
NULL
)
?
(
cl_uint
)
events
->
size
()
:
0
,
(
events
!=
NULL
&&
events
->
size
()
>
0
)
?
(
cl_event
*
)
&
events
->
front
()
:
NULL
,
(
events
!=
NULL
&&
events
->
size
()
>
0
)
?
(
cl_event
*
)
&
events
->
front
()
:
NULL
,
(
event
!=
NULL
)
?
&
tmp
:
NULL
),
(
event
!=
NULL
)
?
&
tmp
:
NULL
),
...
@@ -6024,7 +6543,7 @@ typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueReleaseD3D10ObjectsKHR)(
...
@@ -6024,7 +6543,7 @@ typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueReleaseD3D10ObjectsKHR)(
pfn_clEnqueueAcquireD3D10ObjectsKHR
(
pfn_clEnqueueAcquireD3D10ObjectsKHR
(
object_
,
object_
,
(
mem_objects
!=
NULL
)
?
(
cl_uint
)
mem_objects
->
size
()
:
0
,
(
mem_objects
!=
NULL
)
?
(
cl_uint
)
mem_objects
->
size
()
:
0
,
(
mem_objects
!=
NULL
)
?
(
const
cl_mem
*
)
&
mem_objects
->
front
()
:
NULL
,
(
mem_objects
!=
NULL
&&
mem_objects
->
size
()
>
0
)
?
(
const
cl_mem
*
)
&
mem_objects
->
front
()
:
NULL
,
(
events
!=
NULL
)
?
(
cl_uint
)
events
->
size
()
:
0
,
(
events
!=
NULL
)
?
(
cl_uint
)
events
->
size
()
:
0
,
(
events
!=
NULL
)
?
(
cl_event
*
)
&
events
->
front
()
:
NULL
,
(
events
!=
NULL
)
?
(
cl_event
*
)
&
events
->
front
()
:
NULL
,
(
event
!=
NULL
)
?
&
tmp
:
NULL
),
(
event
!=
NULL
)
?
&
tmp
:
NULL
),
...
@@ -6057,9 +6576,9 @@ typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueReleaseD3D10ObjectsKHR)(
...
@@ -6057,9 +6576,9 @@ typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueReleaseD3D10ObjectsKHR)(
pfn_clEnqueueReleaseD3D10ObjectsKHR
(
pfn_clEnqueueReleaseD3D10ObjectsKHR
(
object_
,
object_
,
(
mem_objects
!=
NULL
)
?
(
cl_uint
)
mem_objects
->
size
()
:
0
,
(
mem_objects
!=
NULL
)
?
(
cl_uint
)
mem_objects
->
size
()
:
0
,
(
mem_objects
!=
NULL
)
?
(
const
cl_mem
*
)
&
mem_objects
->
front
()
:
NULL
,
(
mem_objects
!=
NULL
&&
mem_objects
->
size
()
>
0
)
?
(
const
cl_mem
*
)
&
mem_objects
->
front
()
:
NULL
,
(
events
!=
NULL
)
?
(
cl_uint
)
events
->
size
()
:
0
,
(
events
!=
NULL
)
?
(
cl_uint
)
events
->
size
()
:
0
,
(
events
!=
NULL
)
?
(
cl_event
*
)
&
events
->
front
()
:
NULL
,
(
events
!=
NULL
&&
events
->
size
()
>
0
)
?
(
cl_event
*
)
&
events
->
front
()
:
NULL
,
(
event
!=
NULL
)
?
&
tmp
:
NULL
),
(
event
!=
NULL
)
?
&
tmp
:
NULL
),
__ENQUEUE_RELEASE_GL_ERR
);
__ENQUEUE_RELEASE_GL_ERR
);
...
@@ -6094,15 +6613,113 @@ typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueReleaseD3D10ObjectsKHR)(
...
@@ -6094,15 +6613,113 @@ typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueReleaseD3D10ObjectsKHR)(
}
}
};
};
#ifdef _WIN32
#ifdef CL_HPP_CPP11_ATOMICS_SUPPORTED
__declspec
(
selectany
)
volatile
int
CommandQueue
::
default_initialized_
=
__DEFAULT_NOT_INITIALIZED
;
CL_WEAK_ATTRIB_PREFIX
std
::
atomic
<
int
>
CL_WEAK_ATTRIB_SUFFIX
CommandQueue
::
default_initialized_
;
__declspec
(
selectany
)
CommandQueue
CommandQueue
::
default_
;
#else // !CL_HPP_CPP11_ATOMICS_SUPPORTED
__declspec
(
selectany
)
volatile
cl_int
CommandQueue
::
default_error_
=
CL_SUCCESS
;
CL_WEAK_ATTRIB_PREFIX
volatile
int
CL_WEAK_ATTRIB_SUFFIX
CommandQueue
::
default_initialized_
=
__DEFAULT_NOT_INITIALIZED
;
#else
#endif // !CL_HPP_CPP11_ATOMICS_SUPPORTED
__attribute__
((
weak
))
volatile
int
CommandQueue
::
default_initialized_
=
__DEFAULT_NOT_INITIALIZED
;
__attribute__
((
weak
))
CommandQueue
CommandQueue
::
default_
;
CL_WEAK_ATTRIB_PREFIX
CommandQueue
CL_WEAK_ATTRIB_SUFFIX
CommandQueue
::
default_
;
__attribute__
((
weak
))
volatile
cl_int
CommandQueue
::
default_error_
=
CL_SUCCESS
;
CL_WEAK_ATTRIB_PREFIX
volatile
cl_int
CL_WEAK_ATTRIB_SUFFIX
CommandQueue
::
default_error_
=
CL_SUCCESS
;
#endif
template
<
typename
IteratorType
>
Buffer
::
Buffer
(
const
Context
&
context
,
IteratorType
startIterator
,
IteratorType
endIterator
,
bool
readOnly
,
bool
useHostPtr
,
cl_int
*
err
)
{
typedef
typename
std
::
iterator_traits
<
IteratorType
>::
value_type
DataType
;
cl_int
error
;
cl_mem_flags
flags
=
0
;
if
(
readOnly
)
{
flags
|=
CL_MEM_READ_ONLY
;
}
else
{
flags
|=
CL_MEM_READ_WRITE
;
}
if
(
useHostPtr
)
{
flags
|=
CL_MEM_USE_HOST_PTR
;
}
::
size_t
size
=
sizeof
(
DataType
)
*
(
endIterator
-
startIterator
);
if
(
useHostPtr
)
{
object_
=
::
clCreateBuffer
(
context
(),
flags
,
size
,
static_cast
<
DataType
*>
(
&*
startIterator
),
&
error
);
}
else
{
object_
=
::
clCreateBuffer
(
context
(),
flags
,
size
,
0
,
&
error
);
}
detail
::
errHandler
(
error
,
__CREATE_BUFFER_ERR
);
if
(
err
!=
NULL
)
{
*
err
=
error
;
}
if
(
!
useHostPtr
)
{
CommandQueue
queue
(
context
,
0
,
&
error
);
detail
::
errHandler
(
error
,
__CREATE_BUFFER_ERR
);
if
(
err
!=
NULL
)
{
*
err
=
error
;
}
error
=
cl
::
copy
(
queue
,
startIterator
,
endIterator
,
*
this
);
detail
::
errHandler
(
error
,
__CREATE_BUFFER_ERR
);
if
(
err
!=
NULL
)
{
*
err
=
error
;
}
}
}
template
<
typename
IteratorType
>
Buffer
::
Buffer
(
const
CommandQueue
&
queue
,
IteratorType
startIterator
,
IteratorType
endIterator
,
bool
readOnly
,
bool
useHostPtr
,
cl_int
*
err
)
{
typedef
typename
std
::
iterator_traits
<
IteratorType
>::
value_type
DataType
;
cl_int
error
;
cl_mem_flags
flags
=
0
;
if
(
readOnly
)
{
flags
|=
CL_MEM_READ_ONLY
;
}
else
{
flags
|=
CL_MEM_READ_WRITE
;
}
if
(
useHostPtr
)
{
flags
|=
CL_MEM_USE_HOST_PTR
;
}
::
size_t
size
=
sizeof
(
DataType
)
*
(
endIterator
-
startIterator
);
Context
context
=
queue
.
getInfo
<
CL_QUEUE_CONTEXT
>
();
if
(
useHostPtr
)
{
object_
=
::
clCreateBuffer
(
context
(),
flags
,
size
,
static_cast
<
DataType
*>
(
&*
startIterator
),
&
error
);
}
else
{
object_
=
::
clCreateBuffer
(
context
(),
flags
,
size
,
0
,
&
error
);
}
detail
::
errHandler
(
error
,
__CREATE_BUFFER_ERR
);
if
(
err
!=
NULL
)
{
*
err
=
error
;
}
if
(
!
useHostPtr
)
{
error
=
cl
::
copy
(
queue
,
startIterator
,
endIterator
,
*
this
);
detail
::
errHandler
(
error
,
__CREATE_BUFFER_ERR
);
if
(
err
!=
NULL
)
{
*
err
=
error
;
}
}
}
inline
cl_int
enqueueReadBuffer
(
inline
cl_int
enqueueReadBuffer
(
const
Buffer
&
buffer
,
const
Buffer
&
buffer
,
...
@@ -6222,9 +6839,43 @@ inline cl_int enqueueCopyBuffer(
...
@@ -6222,9 +6839,43 @@ inline cl_int enqueueCopyBuffer(
/**
/**
* Blocking copy operation between iterators and a buffer.
* Blocking copy operation between iterators and a buffer.
* Host to Device.
* Uses default command queue.
*/
*/
template
<
typename
IteratorType
>
template
<
typename
IteratorType
>
inline
cl_int
copy
(
IteratorType
startIterator
,
IteratorType
endIterator
,
cl
::
Buffer
&
buffer
)
inline
cl_int
copy
(
IteratorType
startIterator
,
IteratorType
endIterator
,
cl
::
Buffer
&
buffer
)
{
cl_int
error
;
CommandQueue
queue
=
CommandQueue
::
getDefault
(
&
error
);
if
(
error
!=
CL_SUCCESS
)
return
error
;
return
cl
::
copy
(
queue
,
startIterator
,
endIterator
,
buffer
);
}
/**
* Blocking copy operation between iterators and a buffer.
* Device to Host.
* Uses default command queue.
*/
template
<
typename
IteratorType
>
inline
cl_int
copy
(
const
cl
::
Buffer
&
buffer
,
IteratorType
startIterator
,
IteratorType
endIterator
)
{
cl_int
error
;
CommandQueue
queue
=
CommandQueue
::
getDefault
(
&
error
);
if
(
error
!=
CL_SUCCESS
)
return
error
;
return
cl
::
copy
(
queue
,
buffer
,
startIterator
,
endIterator
);
}
/**
* Blocking copy operation between iterators and a buffer.
* Host to Device.
* Uses specified queue.
*/
template
<
typename
IteratorType
>
inline
cl_int
copy
(
const
CommandQueue
&
queue
,
IteratorType
startIterator
,
IteratorType
endIterator
,
cl
::
Buffer
&
buffer
)
{
{
typedef
typename
std
::
iterator_traits
<
IteratorType
>::
value_type
DataType
;
typedef
typename
std
::
iterator_traits
<
IteratorType
>::
value_type
DataType
;
cl_int
error
;
cl_int
error
;
...
@@ -6233,7 +6884,7 @@ inline cl_int copy( IteratorType startIterator, IteratorType endIterator, cl::Bu
...
@@ -6233,7 +6884,7 @@ inline cl_int copy( IteratorType startIterator, IteratorType endIterator, cl::Bu
::
size_t
byteLength
=
length
*
sizeof
(
DataType
);
::
size_t
byteLength
=
length
*
sizeof
(
DataType
);
DataType
*
pointer
=
DataType
*
pointer
=
static_cast
<
DataType
*>
(
enqueueMapBuffer
(
buffer
,
CL_TRUE
,
CL_MAP_WRITE
,
0
,
byteLength
,
0
,
0
,
&
error
));
static_cast
<
DataType
*>
(
queue
.
enqueueMapBuffer
(
buffer
,
CL_TRUE
,
CL_MAP_WRITE
,
0
,
byteLength
,
0
,
0
,
&
error
));
// if exceptions enabled, enqueueMapBuffer will throw
// if exceptions enabled, enqueueMapBuffer will throw
if
(
error
!=
CL_SUCCESS
)
{
if
(
error
!=
CL_SUCCESS
)
{
return
error
;
return
error
;
...
@@ -6248,7 +6899,7 @@ inline cl_int copy( IteratorType startIterator, IteratorType endIterator, cl::Bu
...
@@ -6248,7 +6899,7 @@ inline cl_int copy( IteratorType startIterator, IteratorType endIterator, cl::Bu
std
::
copy
(
startIterator
,
endIterator
,
pointer
);
std
::
copy
(
startIterator
,
endIterator
,
pointer
);
#endif
#endif
Event
endEvent
;
Event
endEvent
;
error
=
enqueueUnmapMemObject
(
buffer
,
pointer
,
0
,
&
endEvent
);
error
=
queue
.
enqueueUnmapMemObject
(
buffer
,
pointer
,
0
,
&
endEvent
);
// if exceptions enabled, enqueueUnmapMemObject will throw
// if exceptions enabled, enqueueUnmapMemObject will throw
if
(
error
!=
CL_SUCCESS
)
{
if
(
error
!=
CL_SUCCESS
)
{
return
error
;
return
error
;
...
@@ -6259,9 +6910,11 @@ inline cl_int copy( IteratorType startIterator, IteratorType endIterator, cl::Bu
...
@@ -6259,9 +6910,11 @@ inline cl_int copy( IteratorType startIterator, IteratorType endIterator, cl::Bu
/**
/**
* Blocking copy operation between iterators and a buffer.
* Blocking copy operation between iterators and a buffer.
* Device to Host.
* Uses specified queue.
*/
*/
template
<
typename
IteratorType
>
template
<
typename
IteratorType
>
inline
cl_int
copy
(
const
cl
::
Buffer
&
buffer
,
IteratorType
startIterator
,
IteratorType
endIterator
)
inline
cl_int
copy
(
const
CommandQueue
&
queue
,
const
cl
::
Buffer
&
buffer
,
IteratorType
startIterator
,
IteratorType
endIterator
)
{
{
typedef
typename
std
::
iterator_traits
<
IteratorType
>::
value_type
DataType
;
typedef
typename
std
::
iterator_traits
<
IteratorType
>::
value_type
DataType
;
cl_int
error
;
cl_int
error
;
...
@@ -6270,14 +6923,14 @@ inline cl_int copy( const cl::Buffer &buffer, IteratorType startIterator, Iterat
...
@@ -6270,14 +6923,14 @@ inline cl_int copy( const cl::Buffer &buffer, IteratorType startIterator, Iterat
::
size_t
byteLength
=
length
*
sizeof
(
DataType
);
::
size_t
byteLength
=
length
*
sizeof
(
DataType
);
DataType
*
pointer
=
DataType
*
pointer
=
static_cast
<
DataType
*>
(
enqueueMapBuffer
(
buffer
,
CL_TRUE
,
CL_MAP_READ
,
0
,
byteLength
,
0
,
0
,
&
error
));
static_cast
<
DataType
*>
(
queue
.
enqueueMapBuffer
(
buffer
,
CL_TRUE
,
CL_MAP_READ
,
0
,
byteLength
,
0
,
0
,
&
error
));
// if exceptions enabled, enqueueMapBuffer will throw
// if exceptions enabled, enqueueMapBuffer will throw
if
(
error
!=
CL_SUCCESS
)
{
if
(
error
!=
CL_SUCCESS
)
{
return
error
;
return
error
;
}
}
std
::
copy
(
pointer
,
pointer
+
length
,
startIterator
);
std
::
copy
(
pointer
,
pointer
+
length
,
startIterator
);
Event
endEvent
;
Event
endEvent
;
error
=
enqueueUnmapMemObject
(
buffer
,
pointer
,
0
,
&
endEvent
);
error
=
queue
.
enqueueUnmapMemObject
(
buffer
,
pointer
,
0
,
&
endEvent
);
// if exceptions enabled, enqueueUnmapMemObject will throw
// if exceptions enabled, enqueueUnmapMemObject will throw
if
(
error
!=
CL_SUCCESS
)
{
if
(
error
!=
CL_SUCCESS
)
{
return
error
;
return
error
;
...
@@ -6333,7 +6986,7 @@ inline cl_int enqueueWriteBufferRect(
...
@@ -6333,7 +6986,7 @@ inline cl_int enqueueWriteBufferRect(
::
size_t
buffer_slice_pitch
,
::
size_t
buffer_slice_pitch
,
::
size_t
host_row_pitch
,
::
size_t
host_row_pitch
,
::
size_t
host_slice_pitch
,
::
size_t
host_slice_pitch
,
void
*
ptr
,
const
void
*
ptr
,
const
VECTOR_CLASS
<
Event
>*
events
=
NULL
,
const
VECTOR_CLASS
<
Event
>*
events
=
NULL
,
Event
*
event
=
NULL
)
Event
*
event
=
NULL
)
{
{
...
@@ -6431,7 +7084,7 @@ inline cl_int enqueueWriteImage(
...
@@ -6431,7 +7084,7 @@ inline cl_int enqueueWriteImage(
const
size_t
<
3
>&
region
,
const
size_t
<
3
>&
region
,
::
size_t
row_pitch
,
::
size_t
row_pitch
,
::
size_t
slice_pitch
,
::
size_t
slice_pitch
,
void
*
ptr
,
const
void
*
ptr
,
const
VECTOR_CLASS
<
Event
>*
events
=
NULL
,
const
VECTOR_CLASS
<
Event
>*
events
=
NULL
,
Event
*
event
=
NULL
)
Event
*
event
=
NULL
)
{
{
...
@@ -12297,11 +12950,9 @@ public:
...
@@ -12297,11 +12950,9 @@ public:
#undef __DEFAULT_BEING_INITIALIZED
#undef __DEFAULT_BEING_INITIALIZED
#undef __DEFAULT_INITIALIZED
#undef __DEFAULT_INITIALIZED
}
// namespace cl
#undef CL_HPP_RVALUE_REFERENCES_SUPPORTED
#undef CL_HPP_NOEXCEPT
#ifdef _WIN32
}
// namespace cl
#pragma pop_macro("max")
#endif // _WIN32
#endif // CL_HPP_
#endif // CL_HPP_
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment