1*61046927SAndroid Build Coastguard Worker //
2*61046927SAndroid Build Coastguard Worker // Copyright (c) 2008-2020 The Khronos Group Inc.
3*61046927SAndroid Build Coastguard Worker //
4*61046927SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
5*61046927SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
6*61046927SAndroid Build Coastguard Worker // You may obtain a copy of the License at
7*61046927SAndroid Build Coastguard Worker //
8*61046927SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0
9*61046927SAndroid Build Coastguard Worker //
10*61046927SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
11*61046927SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
12*61046927SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*61046927SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
14*61046927SAndroid Build Coastguard Worker // limitations under the License.
15*61046927SAndroid Build Coastguard Worker //
16*61046927SAndroid Build Coastguard Worker
17*61046927SAndroid Build Coastguard Worker /*! \file
18*61046927SAndroid Build Coastguard Worker *
19*61046927SAndroid Build Coastguard Worker * \brief C++ bindings for OpenCL 1.0 (rev 48), OpenCL 1.1 (rev 33) and
20*61046927SAndroid Build Coastguard Worker * OpenCL 1.2 (rev 15)
21*61046927SAndroid Build Coastguard Worker * \author Benedict R. Gaster, Laurent Morichetti and Lee Howes
22*61046927SAndroid Build Coastguard Worker *
23*61046927SAndroid Build Coastguard Worker * Additions and fixes from:
24*61046927SAndroid Build Coastguard Worker * Brian Cole, March 3rd 2010 and April 2012
25*61046927SAndroid Build Coastguard Worker * Matt Gruenke, April 2012.
26*61046927SAndroid Build Coastguard Worker * Bruce Merry, February 2013.
27*61046927SAndroid Build Coastguard Worker * Tom Deakin and Simon McIntosh-Smith, July 2013
28*61046927SAndroid Build Coastguard Worker *
29*61046927SAndroid Build Coastguard Worker * \version 1.2.9
30*61046927SAndroid Build Coastguard Worker * \date December 2015
31*61046927SAndroid Build Coastguard Worker *
32*61046927SAndroid Build Coastguard Worker * Optional extension support
33*61046927SAndroid Build Coastguard Worker *
34*61046927SAndroid Build Coastguard Worker * cl
35*61046927SAndroid Build Coastguard Worker * cl_ext_device_fission
36*61046927SAndroid Build Coastguard Worker * #define USE_CL_DEVICE_FISSION
37*61046927SAndroid Build Coastguard Worker */
38*61046927SAndroid Build Coastguard Worker
39*61046927SAndroid Build Coastguard Worker /*! \mainpage
40*61046927SAndroid Build Coastguard Worker * \section intro Introduction
41*61046927SAndroid Build Coastguard Worker * For many large applications C++ is the language of choice and so it seems
42*61046927SAndroid Build Coastguard Worker * reasonable to define C++ bindings for OpenCL.
43*61046927SAndroid Build Coastguard Worker *
44*61046927SAndroid Build Coastguard Worker *
45*61046927SAndroid Build Coastguard Worker * The interface is contained with a single C++ header file \em cl.hpp and all
46*61046927SAndroid Build Coastguard Worker * definitions are contained within the namespace \em cl. There is no additional
47*61046927SAndroid Build Coastguard Worker * requirement to include \em cl.h and to use either the C++ or original C
48*61046927SAndroid Build Coastguard Worker * bindings it is enough to simply include \em cl.hpp.
49*61046927SAndroid Build Coastguard Worker *
50*61046927SAndroid Build Coastguard Worker * The bindings themselves are lightweight and correspond closely to the
51*61046927SAndroid Build Coastguard Worker * underlying C API. Using the C++ bindings introduces no additional execution
52*61046927SAndroid Build Coastguard Worker * overhead.
53*61046927SAndroid Build Coastguard Worker *
54*61046927SAndroid Build Coastguard Worker * For detail documentation on the bindings see:
55*61046927SAndroid Build Coastguard Worker *
56*61046927SAndroid Build Coastguard Worker * The OpenCL C++ Wrapper API 1.2 (revision 09)
57*61046927SAndroid Build Coastguard Worker * http://www.khronos.org/registry/cl/specs/opencl-cplusplus-1.2.pdf
58*61046927SAndroid Build Coastguard Worker *
59*61046927SAndroid Build Coastguard Worker * \section example Example
60*61046927SAndroid Build Coastguard Worker *
61*61046927SAndroid Build Coastguard Worker * The following example shows a general use case for the C++
62*61046927SAndroid Build Coastguard Worker * bindings, including support for the optional exception feature and
63*61046927SAndroid Build Coastguard Worker * also the supplied vector and string classes, see following sections for
64*61046927SAndroid Build Coastguard Worker * decriptions of these features.
65*61046927SAndroid Build Coastguard Worker *
66*61046927SAndroid Build Coastguard Worker * \code
67*61046927SAndroid Build Coastguard Worker * #define __CL_ENABLE_EXCEPTIONS
68*61046927SAndroid Build Coastguard Worker *
69*61046927SAndroid Build Coastguard Worker * #if defined(__APPLE__) || defined(__MACOSX)
70*61046927SAndroid Build Coastguard Worker * #include <OpenCL/cl.hpp>
71*61046927SAndroid Build Coastguard Worker * #else
72*61046927SAndroid Build Coastguard Worker * #include <CL/cl.hpp>
73*61046927SAndroid Build Coastguard Worker * #endif
74*61046927SAndroid Build Coastguard Worker * #include <cstdio>
75*61046927SAndroid Build Coastguard Worker * #include <cstdlib>
76*61046927SAndroid Build Coastguard Worker * #include <iostream>
77*61046927SAndroid Build Coastguard Worker *
78*61046927SAndroid Build Coastguard Worker * const char * helloStr = "__kernel void "
79*61046927SAndroid Build Coastguard Worker * "hello(void) "
80*61046927SAndroid Build Coastguard Worker * "{ "
81*61046927SAndroid Build Coastguard Worker * " "
82*61046927SAndroid Build Coastguard Worker * "} ";
83*61046927SAndroid Build Coastguard Worker *
84*61046927SAndroid Build Coastguard Worker * int
85*61046927SAndroid Build Coastguard Worker * main(void)
86*61046927SAndroid Build Coastguard Worker * {
87*61046927SAndroid Build Coastguard Worker * cl_int err = CL_SUCCESS;
88*61046927SAndroid Build Coastguard Worker * try {
89*61046927SAndroid Build Coastguard Worker *
90*61046927SAndroid Build Coastguard Worker * std::vector<cl::Platform> platforms;
91*61046927SAndroid Build Coastguard Worker * cl::Platform::get(&platforms);
92*61046927SAndroid Build Coastguard Worker * if (platforms.size() == 0) {
93*61046927SAndroid Build Coastguard Worker * std::cout << "Platform size 0\n";
94*61046927SAndroid Build Coastguard Worker * return -1;
95*61046927SAndroid Build Coastguard Worker * }
96*61046927SAndroid Build Coastguard Worker *
97*61046927SAndroid Build Coastguard Worker * cl_context_properties properties[] =
98*61046927SAndroid Build Coastguard Worker * { CL_CONTEXT_PLATFORM, (cl_context_properties)(platforms[0])(), 0};
99*61046927SAndroid Build Coastguard Worker * cl::Context context(CL_DEVICE_TYPE_CPU, properties);
100*61046927SAndroid Build Coastguard Worker *
101*61046927SAndroid Build Coastguard Worker * std::vector<cl::Device> devices = context.getInfo<CL_CONTEXT_DEVICES>();
102*61046927SAndroid Build Coastguard Worker *
103*61046927SAndroid Build Coastguard Worker * cl::Program::Sources source(1,
104*61046927SAndroid Build Coastguard Worker * std::make_pair(helloStr,strlen(helloStr)));
105*61046927SAndroid Build Coastguard Worker * cl::Program program_ = cl::Program(context, source);
106*61046927SAndroid Build Coastguard Worker * program_.build(devices);
107*61046927SAndroid Build Coastguard Worker *
108*61046927SAndroid Build Coastguard Worker * cl::Kernel kernel(program_, "hello", &err);
109*61046927SAndroid Build Coastguard Worker *
110*61046927SAndroid Build Coastguard Worker * cl::Event event;
111*61046927SAndroid Build Coastguard Worker * cl::CommandQueue queue(context, devices[0], 0, &err);
112*61046927SAndroid Build Coastguard Worker * queue.enqueueNDRangeKernel(
113*61046927SAndroid Build Coastguard Worker * kernel,
114*61046927SAndroid Build Coastguard Worker * cl::NullRange,
115*61046927SAndroid Build Coastguard Worker * cl::NDRange(4,4),
116*61046927SAndroid Build Coastguard Worker * cl::NullRange,
117*61046927SAndroid Build Coastguard Worker * NULL,
118*61046927SAndroid Build Coastguard Worker * &event);
119*61046927SAndroid Build Coastguard Worker *
120*61046927SAndroid Build Coastguard Worker * event.wait();
121*61046927SAndroid Build Coastguard Worker * }
122*61046927SAndroid Build Coastguard Worker * catch (cl::Error err) {
123*61046927SAndroid Build Coastguard Worker * std::cerr
124*61046927SAndroid Build Coastguard Worker * << "ERROR: "
125*61046927SAndroid Build Coastguard Worker * << err.what()
126*61046927SAndroid Build Coastguard Worker * << "("
127*61046927SAndroid Build Coastguard Worker * << err.err()
128*61046927SAndroid Build Coastguard Worker * << ")"
129*61046927SAndroid Build Coastguard Worker * << std::endl;
130*61046927SAndroid Build Coastguard Worker * }
131*61046927SAndroid Build Coastguard Worker *
132*61046927SAndroid Build Coastguard Worker * return EXIT_SUCCESS;
133*61046927SAndroid Build Coastguard Worker * }
134*61046927SAndroid Build Coastguard Worker *
135*61046927SAndroid Build Coastguard Worker * \endcode
136*61046927SAndroid Build Coastguard Worker *
137*61046927SAndroid Build Coastguard Worker */
138*61046927SAndroid Build Coastguard Worker #ifndef CL_HPP_
139*61046927SAndroid Build Coastguard Worker #define CL_HPP_
140*61046927SAndroid Build Coastguard Worker
141*61046927SAndroid Build Coastguard Worker // The latest version of the OpenCL C++ bindings can be found on GitHub:
142*61046927SAndroid Build Coastguard Worker // -> https://github.com/KhronosGroup/OpenCL-CLHPP
143*61046927SAndroid Build Coastguard Worker #pragma message("This version of the OpenCL Host API C++ bindings is deprecated, please use cl2.hpp instead.")
144*61046927SAndroid Build Coastguard Worker
145*61046927SAndroid Build Coastguard Worker #ifdef _WIN32
146*61046927SAndroid Build Coastguard Worker
147*61046927SAndroid Build Coastguard Worker #include <malloc.h>
148*61046927SAndroid Build Coastguard Worker
149*61046927SAndroid Build Coastguard Worker #if defined(USE_DX_INTEROP)
150*61046927SAndroid Build Coastguard Worker #include <CL/cl_d3d10.h>
151*61046927SAndroid Build Coastguard Worker #include <CL/cl_dx9_media_sharing.h>
152*61046927SAndroid Build Coastguard Worker #endif
153*61046927SAndroid Build Coastguard Worker #endif // _WIN32
154*61046927SAndroid Build Coastguard Worker
155*61046927SAndroid Build Coastguard Worker #if defined(_MSC_VER)
156*61046927SAndroid Build Coastguard Worker #include <intrin.h>
157*61046927SAndroid Build Coastguard Worker #endif // _MSC_VER
158*61046927SAndroid Build Coastguard Worker
159*61046927SAndroid Build Coastguard Worker //
160*61046927SAndroid Build Coastguard Worker #if defined(USE_CL_DEVICE_FISSION)
161*61046927SAndroid Build Coastguard Worker #include <CL/cl_ext.h>
162*61046927SAndroid Build Coastguard Worker #endif
163*61046927SAndroid Build Coastguard Worker
164*61046927SAndroid Build Coastguard Worker #if defined(__APPLE__) || defined(__MACOSX)
165*61046927SAndroid Build Coastguard Worker #include <OpenCL/opencl.h>
166*61046927SAndroid Build Coastguard Worker #else
167*61046927SAndroid Build Coastguard Worker #include <CL/opencl.h>
168*61046927SAndroid Build Coastguard Worker #endif // !__APPLE__
169*61046927SAndroid Build Coastguard Worker
170*61046927SAndroid Build Coastguard Worker #if (_MSC_VER >= 1700) || (__cplusplus >= 201103L)
171*61046927SAndroid Build Coastguard Worker #define CL_HPP_RVALUE_REFERENCES_SUPPORTED
172*61046927SAndroid Build Coastguard Worker #define CL_HPP_CPP11_ATOMICS_SUPPORTED
173*61046927SAndroid Build Coastguard Worker #include <atomic>
174*61046927SAndroid Build Coastguard Worker #endif
175*61046927SAndroid Build Coastguard Worker
176*61046927SAndroid Build Coastguard Worker #if (__cplusplus >= 201103L)
177*61046927SAndroid Build Coastguard Worker #define CL_HPP_NOEXCEPT noexcept
178*61046927SAndroid Build Coastguard Worker #else
179*61046927SAndroid Build Coastguard Worker #define CL_HPP_NOEXCEPT
180*61046927SAndroid Build Coastguard Worker #endif
181*61046927SAndroid Build Coastguard Worker
182*61046927SAndroid Build Coastguard Worker
183*61046927SAndroid Build Coastguard Worker // To avoid accidentally taking ownership of core OpenCL types
184*61046927SAndroid Build Coastguard Worker // such as cl_kernel constructors are made explicit
185*61046927SAndroid Build Coastguard Worker // under OpenCL 1.2
186*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2) && !defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
187*61046927SAndroid Build Coastguard Worker #define __CL_EXPLICIT_CONSTRUCTORS explicit
188*61046927SAndroid Build Coastguard Worker #else // #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
189*61046927SAndroid Build Coastguard Worker #define __CL_EXPLICIT_CONSTRUCTORS
190*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
191*61046927SAndroid Build Coastguard Worker
192*61046927SAndroid Build Coastguard Worker // Define deprecated prefixes and suffixes to ensure compilation
193*61046927SAndroid Build Coastguard Worker // in case they are not pre-defined
194*61046927SAndroid Build Coastguard Worker #if !defined(CL_EXT_PREFIX__VERSION_1_1_DEPRECATED)
195*61046927SAndroid Build Coastguard Worker #define CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
196*61046927SAndroid Build Coastguard Worker #endif // #if !defined(CL_EXT_PREFIX__VERSION_1_1_DEPRECATED)
197*61046927SAndroid Build Coastguard Worker #if !defined(CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED)
198*61046927SAndroid Build Coastguard Worker #define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
199*61046927SAndroid Build Coastguard Worker #endif // #if !defined(CL_EXT_PREFIX__VERSION_1_1_DEPRECATED)
200*61046927SAndroid Build Coastguard Worker
201*61046927SAndroid Build Coastguard Worker #if !defined(CL_CALLBACK)
202*61046927SAndroid Build Coastguard Worker #define CL_CALLBACK
203*61046927SAndroid Build Coastguard Worker #endif //CL_CALLBACK
204*61046927SAndroid Build Coastguard Worker
205*61046927SAndroid Build Coastguard Worker #include <utility>
206*61046927SAndroid Build Coastguard Worker #include <limits>
207*61046927SAndroid Build Coastguard Worker #include <iterator>
208*61046927SAndroid Build Coastguard Worker
209*61046927SAndroid Build Coastguard Worker #if defined(__CL_ENABLE_EXCEPTIONS)
210*61046927SAndroid Build Coastguard Worker #include <exception>
211*61046927SAndroid Build Coastguard Worker #endif // #if defined(__CL_ENABLE_EXCEPTIONS)
212*61046927SAndroid Build Coastguard Worker
213*61046927SAndroid Build Coastguard Worker #if !defined(__NO_STD_VECTOR)
214*61046927SAndroid Build Coastguard Worker #include <vector>
215*61046927SAndroid Build Coastguard Worker #endif
216*61046927SAndroid Build Coastguard Worker
217*61046927SAndroid Build Coastguard Worker #if !defined(__NO_STD_STRING)
218*61046927SAndroid Build Coastguard Worker #include <string>
219*61046927SAndroid Build Coastguard Worker #endif
220*61046927SAndroid Build Coastguard Worker
221*61046927SAndroid Build Coastguard Worker #if defined(__ANDROID__) || defined(linux) || defined(__APPLE__) || defined(__MACOSX)
222*61046927SAndroid Build Coastguard Worker #include <alloca.h>
223*61046927SAndroid Build Coastguard Worker #endif // linux
224*61046927SAndroid Build Coastguard Worker
225*61046927SAndroid Build Coastguard Worker #include <cstring>
226*61046927SAndroid Build Coastguard Worker
227*61046927SAndroid Build Coastguard Worker // Compiler specific weak linking
228*61046927SAndroid Build Coastguard Worker #ifndef CL_WEAK_ATTRIB_PREFIX
229*61046927SAndroid Build Coastguard Worker // C++17: use inline variables/functions
230*61046927SAndroid Build Coastguard Worker #if __cplusplus >= 201703L
231*61046927SAndroid Build Coastguard Worker #define CL_USE_INLINE
232*61046927SAndroid Build Coastguard Worker #endif
233*61046927SAndroid Build Coastguard Worker
234*61046927SAndroid Build Coastguard Worker #ifdef CL_USE_INLINE
235*61046927SAndroid Build Coastguard Worker #define CL_WEAK_ATTRIB_PREFIX inline
236*61046927SAndroid Build Coastguard Worker #define CL_WEAK_ATTRIB_SUFFIX
237*61046927SAndroid Build Coastguard Worker #elif defined(_MSC_VER)
238*61046927SAndroid Build Coastguard Worker #define CL_WEAK_ATTRIB_PREFIX __declspec(selectany)
239*61046927SAndroid Build Coastguard Worker #define CL_WEAK_ATTRIB_SUFFIX
240*61046927SAndroid Build Coastguard Worker #elif defined(__MINGW32__)
241*61046927SAndroid Build Coastguard Worker #define CL_WEAK_ATTRIB_PREFIX
242*61046927SAndroid Build Coastguard Worker #define CL_WEAK_ATTRIB_SUFFIX __attribute__((selectany))
243*61046927SAndroid Build Coastguard Worker #else // GCC, CLANG, etc.
244*61046927SAndroid Build Coastguard Worker #define CL_WEAK_ATTRIB_PREFIX
245*61046927SAndroid Build Coastguard Worker #define CL_WEAK_ATTRIB_SUFFIX __attribute__((weak))
246*61046927SAndroid Build Coastguard Worker #endif // CL_USE_INLINE
247*61046927SAndroid Build Coastguard Worker
248*61046927SAndroid Build Coastguard Worker #endif // CL_WEAK_ATTRIB_PREFIX
249*61046927SAndroid Build Coastguard Worker
250*61046927SAndroid Build Coastguard Worker /*! \namespace cl
251*61046927SAndroid Build Coastguard Worker *
252*61046927SAndroid Build Coastguard Worker * \brief The OpenCL C++ bindings are defined within this namespace.
253*61046927SAndroid Build Coastguard Worker *
254*61046927SAndroid Build Coastguard Worker */
255*61046927SAndroid Build Coastguard Worker namespace cl {
256*61046927SAndroid Build Coastguard Worker
257*61046927SAndroid Build Coastguard Worker class Memory;
258*61046927SAndroid Build Coastguard Worker
259*61046927SAndroid Build Coastguard Worker /**
260*61046927SAndroid Build Coastguard Worker * Deprecated APIs for 1.2
261*61046927SAndroid Build Coastguard Worker */
262*61046927SAndroid Build Coastguard Worker #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) || (defined(CL_VERSION_1_1) && !defined(CL_VERSION_1_2))
263*61046927SAndroid Build Coastguard Worker #define __INIT_CL_EXT_FCN_PTR(name) \
264*61046927SAndroid Build Coastguard Worker if(!pfn_##name) { \
265*61046927SAndroid Build Coastguard Worker pfn_##name = (PFN_##name) \
266*61046927SAndroid Build Coastguard Worker clGetExtensionFunctionAddress(#name); \
267*61046927SAndroid Build Coastguard Worker if(!pfn_##name) { \
268*61046927SAndroid Build Coastguard Worker } \
269*61046927SAndroid Build Coastguard Worker }
270*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_1)
271*61046927SAndroid Build Coastguard Worker
272*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
273*61046927SAndroid Build Coastguard Worker #define __INIT_CL_EXT_FCN_PTR_PLATFORM(platform, name) \
274*61046927SAndroid Build Coastguard Worker if(!pfn_##name) { \
275*61046927SAndroid Build Coastguard Worker pfn_##name = (PFN_##name) \
276*61046927SAndroid Build Coastguard Worker clGetExtensionFunctionAddressForPlatform(platform, #name); \
277*61046927SAndroid Build Coastguard Worker if(!pfn_##name) { \
278*61046927SAndroid Build Coastguard Worker } \
279*61046927SAndroid Build Coastguard Worker }
280*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_1)
281*61046927SAndroid Build Coastguard Worker
282*61046927SAndroid Build Coastguard Worker class Program;
283*61046927SAndroid Build Coastguard Worker class Device;
284*61046927SAndroid Build Coastguard Worker class Context;
285*61046927SAndroid Build Coastguard Worker class CommandQueue;
286*61046927SAndroid Build Coastguard Worker class Memory;
287*61046927SAndroid Build Coastguard Worker class Buffer;
288*61046927SAndroid Build Coastguard Worker
289*61046927SAndroid Build Coastguard Worker #if defined(__CL_ENABLE_EXCEPTIONS)
290*61046927SAndroid Build Coastguard Worker /*! \brief Exception class
291*61046927SAndroid Build Coastguard Worker *
292*61046927SAndroid Build Coastguard Worker * This may be thrown by API functions when __CL_ENABLE_EXCEPTIONS is defined.
293*61046927SAndroid Build Coastguard Worker */
294*61046927SAndroid Build Coastguard Worker class Error : public std::exception
295*61046927SAndroid Build Coastguard Worker {
296*61046927SAndroid Build Coastguard Worker private:
297*61046927SAndroid Build Coastguard Worker cl_int err_;
298*61046927SAndroid Build Coastguard Worker const char * errStr_;
299*61046927SAndroid Build Coastguard Worker public:
300*61046927SAndroid Build Coastguard Worker /*! \brief Create a new CL error exception for a given error code
301*61046927SAndroid Build Coastguard Worker * and corresponding message.
302*61046927SAndroid Build Coastguard Worker *
303*61046927SAndroid Build Coastguard Worker * \param err error code value.
304*61046927SAndroid Build Coastguard Worker *
305*61046927SAndroid Build Coastguard Worker * \param errStr a descriptive string that must remain in scope until
306*61046927SAndroid Build Coastguard Worker * handling of the exception has concluded. If set, it
307*61046927SAndroid Build Coastguard Worker * will be returned by what().
308*61046927SAndroid Build Coastguard Worker */
Error(cl_int err,const char * errStr=NULL)309*61046927SAndroid Build Coastguard Worker Error(cl_int err, const char * errStr = NULL) : err_(err), errStr_(errStr)
310*61046927SAndroid Build Coastguard Worker {}
311*61046927SAndroid Build Coastguard Worker
~Error()312*61046927SAndroid Build Coastguard Worker ~Error() throw() {}
313*61046927SAndroid Build Coastguard Worker
314*61046927SAndroid Build Coastguard Worker /*! \brief Get error string associated with exception
315*61046927SAndroid Build Coastguard Worker *
316*61046927SAndroid Build Coastguard Worker * \return A memory pointer to the error message string.
317*61046927SAndroid Build Coastguard Worker */
what() const318*61046927SAndroid Build Coastguard Worker virtual const char * what() const throw ()
319*61046927SAndroid Build Coastguard Worker {
320*61046927SAndroid Build Coastguard Worker if (errStr_ == NULL) {
321*61046927SAndroid Build Coastguard Worker return "empty";
322*61046927SAndroid Build Coastguard Worker }
323*61046927SAndroid Build Coastguard Worker else {
324*61046927SAndroid Build Coastguard Worker return errStr_;
325*61046927SAndroid Build Coastguard Worker }
326*61046927SAndroid Build Coastguard Worker }
327*61046927SAndroid Build Coastguard Worker
328*61046927SAndroid Build Coastguard Worker /*! \brief Get error code associated with exception
329*61046927SAndroid Build Coastguard Worker *
330*61046927SAndroid Build Coastguard Worker * \return The error code.
331*61046927SAndroid Build Coastguard Worker */
err(void) const332*61046927SAndroid Build Coastguard Worker cl_int err(void) const { return err_; }
333*61046927SAndroid Build Coastguard Worker };
334*61046927SAndroid Build Coastguard Worker
335*61046927SAndroid Build Coastguard Worker #define __ERR_STR(x) #x
336*61046927SAndroid Build Coastguard Worker #else
337*61046927SAndroid Build Coastguard Worker #define __ERR_STR(x) NULL
338*61046927SAndroid Build Coastguard Worker #endif // __CL_ENABLE_EXCEPTIONS
339*61046927SAndroid Build Coastguard Worker
340*61046927SAndroid Build Coastguard Worker
341*61046927SAndroid Build Coastguard Worker namespace detail
342*61046927SAndroid Build Coastguard Worker {
343*61046927SAndroid Build Coastguard Worker #if defined(__CL_ENABLE_EXCEPTIONS)
errHandler(cl_int err,const char * errStr=NULL)344*61046927SAndroid Build Coastguard Worker static inline cl_int errHandler (
345*61046927SAndroid Build Coastguard Worker cl_int err,
346*61046927SAndroid Build Coastguard Worker const char * errStr = NULL)
347*61046927SAndroid Build Coastguard Worker {
348*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
349*61046927SAndroid Build Coastguard Worker throw Error(err, errStr);
350*61046927SAndroid Build Coastguard Worker }
351*61046927SAndroid Build Coastguard Worker return err;
352*61046927SAndroid Build Coastguard Worker }
353*61046927SAndroid Build Coastguard Worker #else
354*61046927SAndroid Build Coastguard Worker static inline cl_int errHandler (cl_int err, const char * errStr = NULL)
355*61046927SAndroid Build Coastguard Worker {
356*61046927SAndroid Build Coastguard Worker (void) errStr; // suppress unused variable warning
357*61046927SAndroid Build Coastguard Worker return err;
358*61046927SAndroid Build Coastguard Worker }
359*61046927SAndroid Build Coastguard Worker #endif // __CL_ENABLE_EXCEPTIONS
360*61046927SAndroid Build Coastguard Worker }
361*61046927SAndroid Build Coastguard Worker
362*61046927SAndroid Build Coastguard Worker
363*61046927SAndroid Build Coastguard Worker
364*61046927SAndroid Build Coastguard Worker //! \cond DOXYGEN_DETAIL
365*61046927SAndroid Build Coastguard Worker #if !defined(__CL_USER_OVERRIDE_ERROR_STRINGS)
366*61046927SAndroid Build Coastguard Worker #define __GET_DEVICE_INFO_ERR __ERR_STR(clGetDeviceInfo)
367*61046927SAndroid Build Coastguard Worker #define __GET_PLATFORM_INFO_ERR __ERR_STR(clGetPlatformInfo)
368*61046927SAndroid Build Coastguard Worker #define __GET_DEVICE_IDS_ERR __ERR_STR(clGetDeviceIDs)
369*61046927SAndroid Build Coastguard Worker #define __GET_PLATFORM_IDS_ERR __ERR_STR(clGetPlatformIDs)
370*61046927SAndroid Build Coastguard Worker #define __GET_CONTEXT_INFO_ERR __ERR_STR(clGetContextInfo)
371*61046927SAndroid Build Coastguard Worker #define __GET_EVENT_INFO_ERR __ERR_STR(clGetEventInfo)
372*61046927SAndroid Build Coastguard Worker #define __GET_EVENT_PROFILE_INFO_ERR __ERR_STR(clGetEventProfileInfo)
373*61046927SAndroid Build Coastguard Worker #define __GET_MEM_OBJECT_INFO_ERR __ERR_STR(clGetMemObjectInfo)
374*61046927SAndroid Build Coastguard Worker #define __GET_IMAGE_INFO_ERR __ERR_STR(clGetImageInfo)
375*61046927SAndroid Build Coastguard Worker #define __GET_SAMPLER_INFO_ERR __ERR_STR(clGetSamplerInfo)
376*61046927SAndroid Build Coastguard Worker #define __GET_KERNEL_INFO_ERR __ERR_STR(clGetKernelInfo)
377*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
378*61046927SAndroid Build Coastguard Worker #define __GET_KERNEL_ARG_INFO_ERR __ERR_STR(clGetKernelArgInfo)
379*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
380*61046927SAndroid Build Coastguard Worker #define __GET_KERNEL_WORK_GROUP_INFO_ERR __ERR_STR(clGetKernelWorkGroupInfo)
381*61046927SAndroid Build Coastguard Worker #define __GET_PROGRAM_INFO_ERR __ERR_STR(clGetProgramInfo)
382*61046927SAndroid Build Coastguard Worker #define __GET_PROGRAM_BUILD_INFO_ERR __ERR_STR(clGetProgramBuildInfo)
383*61046927SAndroid Build Coastguard Worker #define __GET_COMMAND_QUEUE_INFO_ERR __ERR_STR(clGetCommandQueueInfo)
384*61046927SAndroid Build Coastguard Worker
385*61046927SAndroid Build Coastguard Worker #define __CREATE_CONTEXT_ERR __ERR_STR(clCreateContext)
386*61046927SAndroid Build Coastguard Worker #define __CREATE_CONTEXT_FROM_TYPE_ERR __ERR_STR(clCreateContextFromType)
387*61046927SAndroid Build Coastguard Worker #define __GET_SUPPORTED_IMAGE_FORMATS_ERR __ERR_STR(clGetSupportedImageFormats)
388*61046927SAndroid Build Coastguard Worker
389*61046927SAndroid Build Coastguard Worker #define __CREATE_BUFFER_ERR __ERR_STR(clCreateBuffer)
390*61046927SAndroid Build Coastguard Worker #define __COPY_ERR __ERR_STR(cl::copy)
391*61046927SAndroid Build Coastguard Worker #define __CREATE_SUBBUFFER_ERR __ERR_STR(clCreateSubBuffer)
392*61046927SAndroid Build Coastguard Worker #define __CREATE_GL_BUFFER_ERR __ERR_STR(clCreateFromGLBuffer)
393*61046927SAndroid Build Coastguard Worker #define __CREATE_GL_RENDER_BUFFER_ERR __ERR_STR(clCreateFromGLBuffer)
394*61046927SAndroid Build Coastguard Worker #define __GET_GL_OBJECT_INFO_ERR __ERR_STR(clGetGLObjectInfo)
395*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
396*61046927SAndroid Build Coastguard Worker #define __CREATE_IMAGE_ERR __ERR_STR(clCreateImage)
397*61046927SAndroid Build Coastguard Worker #define __CREATE_GL_TEXTURE_ERR __ERR_STR(clCreateFromGLTexture)
398*61046927SAndroid Build Coastguard Worker #define __IMAGE_DIMENSION_ERR __ERR_STR(Incorrect image dimensions)
399*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
400*61046927SAndroid Build Coastguard Worker #define __CREATE_SAMPLER_ERR __ERR_STR(clCreateSampler)
401*61046927SAndroid Build Coastguard Worker #define __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR __ERR_STR(clSetMemObjectDestructorCallback)
402*61046927SAndroid Build Coastguard Worker
403*61046927SAndroid Build Coastguard Worker #define __CREATE_USER_EVENT_ERR __ERR_STR(clCreateUserEvent)
404*61046927SAndroid Build Coastguard Worker #define __SET_USER_EVENT_STATUS_ERR __ERR_STR(clSetUserEventStatus)
405*61046927SAndroid Build Coastguard Worker #define __SET_EVENT_CALLBACK_ERR __ERR_STR(clSetEventCallback)
406*61046927SAndroid Build Coastguard Worker #define __WAIT_FOR_EVENTS_ERR __ERR_STR(clWaitForEvents)
407*61046927SAndroid Build Coastguard Worker
408*61046927SAndroid Build Coastguard Worker #define __CREATE_KERNEL_ERR __ERR_STR(clCreateKernel)
409*61046927SAndroid Build Coastguard Worker #define __SET_KERNEL_ARGS_ERR __ERR_STR(clSetKernelArg)
410*61046927SAndroid Build Coastguard Worker #define __CREATE_PROGRAM_WITH_SOURCE_ERR __ERR_STR(clCreateProgramWithSource)
411*61046927SAndroid Build Coastguard Worker #define __CREATE_PROGRAM_WITH_BINARY_ERR __ERR_STR(clCreateProgramWithBinary)
412*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
413*61046927SAndroid Build Coastguard Worker #define __CREATE_PROGRAM_WITH_BUILT_IN_KERNELS_ERR __ERR_STR(clCreateProgramWithBuiltInKernels)
414*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
415*61046927SAndroid Build Coastguard Worker #define __BUILD_PROGRAM_ERR __ERR_STR(clBuildProgram)
416*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
417*61046927SAndroid Build Coastguard Worker #define __COMPILE_PROGRAM_ERR __ERR_STR(clCompileProgram)
418*61046927SAndroid Build Coastguard Worker #define __LINK_PROGRAM_ERR __ERR_STR(clLinkProgram)
419*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
420*61046927SAndroid Build Coastguard Worker #define __CREATE_KERNELS_IN_PROGRAM_ERR __ERR_STR(clCreateKernelsInProgram)
421*61046927SAndroid Build Coastguard Worker
422*61046927SAndroid Build Coastguard Worker #define __CREATE_COMMAND_QUEUE_ERR __ERR_STR(clCreateCommandQueue)
423*61046927SAndroid Build Coastguard Worker #define __SET_COMMAND_QUEUE_PROPERTY_ERR __ERR_STR(clSetCommandQueueProperty)
424*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_READ_BUFFER_ERR __ERR_STR(clEnqueueReadBuffer)
425*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_READ_BUFFER_RECT_ERR __ERR_STR(clEnqueueReadBufferRect)
426*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_WRITE_BUFFER_ERR __ERR_STR(clEnqueueWriteBuffer)
427*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_WRITE_BUFFER_RECT_ERR __ERR_STR(clEnqueueWriteBufferRect)
428*61046927SAndroid Build Coastguard Worker #define __ENQEUE_COPY_BUFFER_ERR __ERR_STR(clEnqueueCopyBuffer)
429*61046927SAndroid Build Coastguard Worker #define __ENQEUE_COPY_BUFFER_RECT_ERR __ERR_STR(clEnqueueCopyBufferRect)
430*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_FILL_BUFFER_ERR __ERR_STR(clEnqueueFillBuffer)
431*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_READ_IMAGE_ERR __ERR_STR(clEnqueueReadImage)
432*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_WRITE_IMAGE_ERR __ERR_STR(clEnqueueWriteImage)
433*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_COPY_IMAGE_ERR __ERR_STR(clEnqueueCopyImage)
434*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_FILL_IMAGE_ERR __ERR_STR(clEnqueueFillImage)
435*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR __ERR_STR(clEnqueueCopyImageToBuffer)
436*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR __ERR_STR(clEnqueueCopyBufferToImage)
437*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_MAP_BUFFER_ERR __ERR_STR(clEnqueueMapBuffer)
438*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_MAP_IMAGE_ERR __ERR_STR(clEnqueueMapImage)
439*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_UNMAP_MEM_OBJECT_ERR __ERR_STR(clEnqueueUnMapMemObject)
440*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_NDRANGE_KERNEL_ERR __ERR_STR(clEnqueueNDRangeKernel)
441*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_TASK_ERR __ERR_STR(clEnqueueTask)
442*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_NATIVE_KERNEL __ERR_STR(clEnqueueNativeKernel)
443*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
444*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_MIGRATE_MEM_OBJECTS_ERR __ERR_STR(clEnqueueMigrateMemObjects)
445*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
446*61046927SAndroid Build Coastguard Worker
447*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_ACQUIRE_GL_ERR __ERR_STR(clEnqueueAcquireGLObjects)
448*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_RELEASE_GL_ERR __ERR_STR(clEnqueueReleaseGLObjects)
449*61046927SAndroid Build Coastguard Worker
450*61046927SAndroid Build Coastguard Worker
451*61046927SAndroid Build Coastguard Worker #define __RETAIN_ERR __ERR_STR(Retain Object)
452*61046927SAndroid Build Coastguard Worker #define __RELEASE_ERR __ERR_STR(Release Object)
453*61046927SAndroid Build Coastguard Worker #define __FLUSH_ERR __ERR_STR(clFlush)
454*61046927SAndroid Build Coastguard Worker #define __FINISH_ERR __ERR_STR(clFinish)
455*61046927SAndroid Build Coastguard Worker #define __VECTOR_CAPACITY_ERR __ERR_STR(Vector capacity error)
456*61046927SAndroid Build Coastguard Worker
457*61046927SAndroid Build Coastguard Worker /**
458*61046927SAndroid Build Coastguard Worker * CL 1.2 version that uses device fission.
459*61046927SAndroid Build Coastguard Worker */
460*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
461*61046927SAndroid Build Coastguard Worker #define __CREATE_SUB_DEVICES __ERR_STR(clCreateSubDevices)
462*61046927SAndroid Build Coastguard Worker #else
463*61046927SAndroid Build Coastguard Worker #define __CREATE_SUB_DEVICES __ERR_STR(clCreateSubDevicesEXT)
464*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
465*61046927SAndroid Build Coastguard Worker
466*61046927SAndroid Build Coastguard Worker /**
467*61046927SAndroid Build Coastguard Worker * Deprecated APIs for 1.2
468*61046927SAndroid Build Coastguard Worker */
469*61046927SAndroid Build Coastguard Worker #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) || (defined(CL_VERSION_1_1) && !defined(CL_VERSION_1_2))
470*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_MARKER_ERR __ERR_STR(clEnqueueMarker)
471*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_WAIT_FOR_EVENTS_ERR __ERR_STR(clEnqueueWaitForEvents)
472*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_BARRIER_ERR __ERR_STR(clEnqueueBarrier)
473*61046927SAndroid Build Coastguard Worker #define __UNLOAD_COMPILER_ERR __ERR_STR(clUnloadCompiler)
474*61046927SAndroid Build Coastguard Worker #define __CREATE_GL_TEXTURE_2D_ERR __ERR_STR(clCreateFromGLTexture2D)
475*61046927SAndroid Build Coastguard Worker #define __CREATE_GL_TEXTURE_3D_ERR __ERR_STR(clCreateFromGLTexture3D)
476*61046927SAndroid Build Coastguard Worker #define __CREATE_IMAGE2D_ERR __ERR_STR(clCreateImage2D)
477*61046927SAndroid Build Coastguard Worker #define __CREATE_IMAGE3D_ERR __ERR_STR(clCreateImage3D)
478*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_1)
479*61046927SAndroid Build Coastguard Worker
480*61046927SAndroid Build Coastguard Worker #endif // __CL_USER_OVERRIDE_ERROR_STRINGS
481*61046927SAndroid Build Coastguard Worker //! \endcond
482*61046927SAndroid Build Coastguard Worker
483*61046927SAndroid Build Coastguard Worker /**
484*61046927SAndroid Build Coastguard Worker * CL 1.2 marker and barrier commands
485*61046927SAndroid Build Coastguard Worker */
486*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
487*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_MARKER_WAIT_LIST_ERR __ERR_STR(clEnqueueMarkerWithWaitList)
488*61046927SAndroid Build Coastguard Worker #define __ENQUEUE_BARRIER_WAIT_LIST_ERR __ERR_STR(clEnqueueBarrierWithWaitList)
489*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
490*61046927SAndroid Build Coastguard Worker
491*61046927SAndroid Build Coastguard Worker #if !defined(__USE_DEV_STRING) && !defined(__NO_STD_STRING)
492*61046927SAndroid Build Coastguard Worker typedef std::string STRING_CLASS;
493*61046927SAndroid Build Coastguard Worker #elif !defined(__USE_DEV_STRING)
494*61046927SAndroid Build Coastguard Worker
495*61046927SAndroid Build Coastguard Worker /*! \class string
496*61046927SAndroid Build Coastguard Worker * \brief Simple string class, that provides a limited subset of std::string
497*61046927SAndroid Build Coastguard Worker * functionality but avoids many of the issues that come with that class.
498*61046927SAndroid Build Coastguard Worker
499*61046927SAndroid Build Coastguard Worker * \note Deprecated. Please use std::string as default or
500*61046927SAndroid Build Coastguard Worker * re-define the string class to match the std::string
501*61046927SAndroid Build Coastguard Worker * interface by defining STRING_CLASS
502*61046927SAndroid Build Coastguard Worker */
503*61046927SAndroid Build Coastguard Worker class CL_EXT_PREFIX__VERSION_1_1_DEPRECATED string
504*61046927SAndroid Build Coastguard Worker {
505*61046927SAndroid Build Coastguard Worker private:
506*61046927SAndroid Build Coastguard Worker ::size_t size_;
507*61046927SAndroid Build Coastguard Worker char * str_;
508*61046927SAndroid Build Coastguard Worker public:
509*61046927SAndroid Build Coastguard Worker //! \brief Constructs an empty string, allocating no memory.
string(void)510*61046927SAndroid Build Coastguard Worker string(void) : size_(0), str_(NULL)
511*61046927SAndroid Build Coastguard Worker {
512*61046927SAndroid Build Coastguard Worker }
513*61046927SAndroid Build Coastguard Worker
514*61046927SAndroid Build Coastguard Worker /*! \brief Constructs a string populated from an arbitrary value of
515*61046927SAndroid Build Coastguard Worker * specified size.
516*61046927SAndroid Build Coastguard Worker *
517*61046927SAndroid Build Coastguard Worker * An extra '\0' is added, in case none was contained in str.
518*61046927SAndroid Build Coastguard Worker *
519*61046927SAndroid Build Coastguard Worker * \param str the initial value of the string instance. Note that '\0'
520*61046927SAndroid Build Coastguard Worker * characters receive no special treatment. If NULL,
521*61046927SAndroid Build Coastguard Worker * the string is left empty, with a size of 0.
522*61046927SAndroid Build Coastguard Worker *
523*61046927SAndroid Build Coastguard Worker * \param size the number of characters to copy from str.
524*61046927SAndroid Build Coastguard Worker */
string(const char * str,::size_t size)525*61046927SAndroid Build Coastguard Worker string(const char * str, ::size_t size) :
526*61046927SAndroid Build Coastguard Worker size_(size),
527*61046927SAndroid Build Coastguard Worker str_(NULL)
528*61046927SAndroid Build Coastguard Worker {
529*61046927SAndroid Build Coastguard Worker if( size > 0 ) {
530*61046927SAndroid Build Coastguard Worker str_ = new char[size_+1];
531*61046927SAndroid Build Coastguard Worker if (str_ != NULL) {
532*61046927SAndroid Build Coastguard Worker memcpy(str_, str, size_ * sizeof(char));
533*61046927SAndroid Build Coastguard Worker str_[size_] = '\0';
534*61046927SAndroid Build Coastguard Worker }
535*61046927SAndroid Build Coastguard Worker else {
536*61046927SAndroid Build Coastguard Worker size_ = 0;
537*61046927SAndroid Build Coastguard Worker }
538*61046927SAndroid Build Coastguard Worker }
539*61046927SAndroid Build Coastguard Worker }
540*61046927SAndroid Build Coastguard Worker
541*61046927SAndroid Build Coastguard Worker /*! \brief Constructs a string populated from a null-terminated value.
542*61046927SAndroid Build Coastguard Worker *
543*61046927SAndroid Build Coastguard Worker * \param str the null-terminated initial value of the string instance.
544*61046927SAndroid Build Coastguard Worker * If NULL, the string is left empty, with a size of 0.
545*61046927SAndroid Build Coastguard Worker */
string(const char * str)546*61046927SAndroid Build Coastguard Worker string(const char * str) :
547*61046927SAndroid Build Coastguard Worker size_(0),
548*61046927SAndroid Build Coastguard Worker str_(NULL)
549*61046927SAndroid Build Coastguard Worker {
550*61046927SAndroid Build Coastguard Worker if( str ) {
551*61046927SAndroid Build Coastguard Worker size_= ::strlen(str);
552*61046927SAndroid Build Coastguard Worker }
553*61046927SAndroid Build Coastguard Worker if( size_ > 0 ) {
554*61046927SAndroid Build Coastguard Worker str_ = new char[size_ + 1];
555*61046927SAndroid Build Coastguard Worker if (str_ != NULL) {
556*61046927SAndroid Build Coastguard Worker memcpy(str_, str, (size_ + 1) * sizeof(char));
557*61046927SAndroid Build Coastguard Worker }
558*61046927SAndroid Build Coastguard Worker }
559*61046927SAndroid Build Coastguard Worker }
560*61046927SAndroid Build Coastguard Worker
resize(::size_t n)561*61046927SAndroid Build Coastguard Worker void resize( ::size_t n )
562*61046927SAndroid Build Coastguard Worker {
563*61046927SAndroid Build Coastguard Worker if( size_ == n ) {
564*61046927SAndroid Build Coastguard Worker return;
565*61046927SAndroid Build Coastguard Worker }
566*61046927SAndroid Build Coastguard Worker if (n == 0) {
567*61046927SAndroid Build Coastguard Worker if( str_ ) {
568*61046927SAndroid Build Coastguard Worker delete [] str_;
569*61046927SAndroid Build Coastguard Worker }
570*61046927SAndroid Build Coastguard Worker str_ = NULL;
571*61046927SAndroid Build Coastguard Worker size_ = 0;
572*61046927SAndroid Build Coastguard Worker }
573*61046927SAndroid Build Coastguard Worker else {
574*61046927SAndroid Build Coastguard Worker char *newString = new char[n + 1];
575*61046927SAndroid Build Coastguard Worker ::size_t copySize = n;
576*61046927SAndroid Build Coastguard Worker if( size_ < n ) {
577*61046927SAndroid Build Coastguard Worker copySize = size_;
578*61046927SAndroid Build Coastguard Worker }
579*61046927SAndroid Build Coastguard Worker size_ = n;
580*61046927SAndroid Build Coastguard Worker
581*61046927SAndroid Build Coastguard Worker if(str_) {
582*61046927SAndroid Build Coastguard Worker memcpy(newString, str_, (copySize + 1) * sizeof(char));
583*61046927SAndroid Build Coastguard Worker }
584*61046927SAndroid Build Coastguard Worker if( copySize < size_ ) {
585*61046927SAndroid Build Coastguard Worker memset(newString + copySize, 0, size_ - copySize);
586*61046927SAndroid Build Coastguard Worker }
587*61046927SAndroid Build Coastguard Worker newString[size_] = '\0';
588*61046927SAndroid Build Coastguard Worker
589*61046927SAndroid Build Coastguard Worker delete [] str_;
590*61046927SAndroid Build Coastguard Worker str_ = newString;
591*61046927SAndroid Build Coastguard Worker }
592*61046927SAndroid Build Coastguard Worker }
593*61046927SAndroid Build Coastguard Worker
operator [](::size_t pos) const594*61046927SAndroid Build Coastguard Worker const char& operator[] ( ::size_t pos ) const
595*61046927SAndroid Build Coastguard Worker {
596*61046927SAndroid Build Coastguard Worker return str_[pos];
597*61046927SAndroid Build Coastguard Worker }
598*61046927SAndroid Build Coastguard Worker
operator [](::size_t pos)599*61046927SAndroid Build Coastguard Worker char& operator[] ( ::size_t pos )
600*61046927SAndroid Build Coastguard Worker {
601*61046927SAndroid Build Coastguard Worker return str_[pos];
602*61046927SAndroid Build Coastguard Worker }
603*61046927SAndroid Build Coastguard Worker
604*61046927SAndroid Build Coastguard Worker /*! \brief Copies the value of another string to this one.
605*61046927SAndroid Build Coastguard Worker *
606*61046927SAndroid Build Coastguard Worker * \param rhs the string to copy.
607*61046927SAndroid Build Coastguard Worker *
608*61046927SAndroid Build Coastguard Worker * \returns a reference to the modified instance.
609*61046927SAndroid Build Coastguard Worker */
operator =(const string & rhs)610*61046927SAndroid Build Coastguard Worker string& operator=(const string& rhs)
611*61046927SAndroid Build Coastguard Worker {
612*61046927SAndroid Build Coastguard Worker if (this == &rhs) {
613*61046927SAndroid Build Coastguard Worker return *this;
614*61046927SAndroid Build Coastguard Worker }
615*61046927SAndroid Build Coastguard Worker
616*61046927SAndroid Build Coastguard Worker if( str_ != NULL ) {
617*61046927SAndroid Build Coastguard Worker delete [] str_;
618*61046927SAndroid Build Coastguard Worker str_ = NULL;
619*61046927SAndroid Build Coastguard Worker size_ = 0;
620*61046927SAndroid Build Coastguard Worker }
621*61046927SAndroid Build Coastguard Worker
622*61046927SAndroid Build Coastguard Worker if (rhs.size_ == 0 || rhs.str_ == NULL) {
623*61046927SAndroid Build Coastguard Worker str_ = NULL;
624*61046927SAndroid Build Coastguard Worker size_ = 0;
625*61046927SAndroid Build Coastguard Worker }
626*61046927SAndroid Build Coastguard Worker else {
627*61046927SAndroid Build Coastguard Worker str_ = new char[rhs.size_ + 1];
628*61046927SAndroid Build Coastguard Worker size_ = rhs.size_;
629*61046927SAndroid Build Coastguard Worker
630*61046927SAndroid Build Coastguard Worker if (str_ != NULL) {
631*61046927SAndroid Build Coastguard Worker memcpy(str_, rhs.str_, (size_ + 1) * sizeof(char));
632*61046927SAndroid Build Coastguard Worker }
633*61046927SAndroid Build Coastguard Worker else {
634*61046927SAndroid Build Coastguard Worker size_ = 0;
635*61046927SAndroid Build Coastguard Worker }
636*61046927SAndroid Build Coastguard Worker }
637*61046927SAndroid Build Coastguard Worker
638*61046927SAndroid Build Coastguard Worker return *this;
639*61046927SAndroid Build Coastguard Worker }
640*61046927SAndroid Build Coastguard Worker
641*61046927SAndroid Build Coastguard Worker /*! \brief Constructs a string by copying the value of another instance.
642*61046927SAndroid Build Coastguard Worker *
643*61046927SAndroid Build Coastguard Worker * \param rhs the string to copy.
644*61046927SAndroid Build Coastguard Worker */
string(const string & rhs)645*61046927SAndroid Build Coastguard Worker string(const string& rhs) :
646*61046927SAndroid Build Coastguard Worker size_(0),
647*61046927SAndroid Build Coastguard Worker str_(NULL)
648*61046927SAndroid Build Coastguard Worker {
649*61046927SAndroid Build Coastguard Worker *this = rhs;
650*61046927SAndroid Build Coastguard Worker }
651*61046927SAndroid Build Coastguard Worker
652*61046927SAndroid Build Coastguard Worker //! \brief Destructor - frees memory used to hold the current value.
~string()653*61046927SAndroid Build Coastguard Worker ~string()
654*61046927SAndroid Build Coastguard Worker {
655*61046927SAndroid Build Coastguard Worker delete[] str_;
656*61046927SAndroid Build Coastguard Worker str_ = NULL;
657*61046927SAndroid Build Coastguard Worker }
658*61046927SAndroid Build Coastguard Worker
659*61046927SAndroid Build Coastguard Worker //! \brief Queries the length of the string, excluding any added '\0's.
size(void) const660*61046927SAndroid Build Coastguard Worker ::size_t size(void) const { return size_; }
661*61046927SAndroid Build Coastguard Worker
662*61046927SAndroid Build Coastguard Worker //! \brief Queries the length of the string, excluding any added '\0's.
length(void) const663*61046927SAndroid Build Coastguard Worker ::size_t length(void) const { return size(); }
664*61046927SAndroid Build Coastguard Worker
665*61046927SAndroid Build Coastguard Worker /*! \brief Returns a pointer to the private copy held by this instance,
666*61046927SAndroid Build Coastguard Worker * or "" if empty/unset.
667*61046927SAndroid Build Coastguard Worker */
c_str(void) const668*61046927SAndroid Build Coastguard Worker const char * c_str(void) const { return (str_) ? str_ : "";}
669*61046927SAndroid Build Coastguard Worker } CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
670*61046927SAndroid Build Coastguard Worker typedef cl::string STRING_CLASS;
671*61046927SAndroid Build Coastguard Worker #endif // #elif !defined(__USE_DEV_STRING)
672*61046927SAndroid Build Coastguard Worker
673*61046927SAndroid Build Coastguard Worker #if !defined(__USE_DEV_VECTOR) && !defined(__NO_STD_VECTOR)
674*61046927SAndroid Build Coastguard Worker #define VECTOR_CLASS std::vector
675*61046927SAndroid Build Coastguard Worker #elif !defined(__USE_DEV_VECTOR)
676*61046927SAndroid Build Coastguard Worker #define VECTOR_CLASS cl::vector
677*61046927SAndroid Build Coastguard Worker
678*61046927SAndroid Build Coastguard Worker #if !defined(__MAX_DEFAULT_VECTOR_SIZE)
679*61046927SAndroid Build Coastguard Worker #define __MAX_DEFAULT_VECTOR_SIZE 10
680*61046927SAndroid Build Coastguard Worker #endif
681*61046927SAndroid Build Coastguard Worker
682*61046927SAndroid Build Coastguard Worker /*! \class vector
683*61046927SAndroid Build Coastguard Worker * \brief Fixed sized vector implementation that mirroring
684*61046927SAndroid Build Coastguard Worker *
685*61046927SAndroid Build Coastguard Worker * \note Deprecated. Please use std::vector as default or
686*61046927SAndroid Build Coastguard Worker * re-define the vector class to match the std::vector
687*61046927SAndroid Build Coastguard Worker * interface by defining VECTOR_CLASS
688*61046927SAndroid Build Coastguard Worker
689*61046927SAndroid Build Coastguard Worker * \note Not recommended for use with custom objects as
690*61046927SAndroid Build Coastguard Worker * current implementation will construct N elements
691*61046927SAndroid Build Coastguard Worker *
692*61046927SAndroid Build Coastguard Worker * std::vector functionality.
693*61046927SAndroid Build Coastguard Worker * \brief Fixed sized vector compatible with std::vector.
694*61046927SAndroid Build Coastguard Worker *
695*61046927SAndroid Build Coastguard Worker * \note
696*61046927SAndroid Build Coastguard Worker * This differs from std::vector<> not just in memory allocation,
697*61046927SAndroid Build Coastguard Worker * but also in terms of when members are constructed, destroyed,
698*61046927SAndroid Build Coastguard Worker * and assigned instead of being copy constructed.
699*61046927SAndroid Build Coastguard Worker *
700*61046927SAndroid Build Coastguard Worker * \param T type of element contained in the vector.
701*61046927SAndroid Build Coastguard Worker *
702*61046927SAndroid Build Coastguard Worker * \param N maximum size of the vector.
703*61046927SAndroid Build Coastguard Worker */
704*61046927SAndroid Build Coastguard Worker template <typename T, unsigned int N = __MAX_DEFAULT_VECTOR_SIZE>
705*61046927SAndroid Build Coastguard Worker class CL_EXT_PREFIX__VERSION_1_1_DEPRECATED vector
706*61046927SAndroid Build Coastguard Worker {
707*61046927SAndroid Build Coastguard Worker private:
708*61046927SAndroid Build Coastguard Worker T data_[N];
709*61046927SAndroid Build Coastguard Worker unsigned int size_;
710*61046927SAndroid Build Coastguard Worker
711*61046927SAndroid Build Coastguard Worker public:
712*61046927SAndroid Build Coastguard Worker //! \brief Constructs an empty vector with no memory allocated.
vector()713*61046927SAndroid Build Coastguard Worker vector() :
714*61046927SAndroid Build Coastguard Worker size_(static_cast<unsigned int>(0))
715*61046927SAndroid Build Coastguard Worker {}
716*61046927SAndroid Build Coastguard Worker
717*61046927SAndroid Build Coastguard Worker //! \brief Deallocates the vector's memory and destroys all of its elements.
~vector()718*61046927SAndroid Build Coastguard Worker ~vector()
719*61046927SAndroid Build Coastguard Worker {
720*61046927SAndroid Build Coastguard Worker clear();
721*61046927SAndroid Build Coastguard Worker }
722*61046927SAndroid Build Coastguard Worker
723*61046927SAndroid Build Coastguard Worker //! \brief Returns the number of elements currently contained.
size(void) const724*61046927SAndroid Build Coastguard Worker unsigned int size(void) const
725*61046927SAndroid Build Coastguard Worker {
726*61046927SAndroid Build Coastguard Worker return size_;
727*61046927SAndroid Build Coastguard Worker }
728*61046927SAndroid Build Coastguard Worker
729*61046927SAndroid Build Coastguard Worker /*! \brief Empties the vector of all elements.
730*61046927SAndroid Build Coastguard Worker * \note
731*61046927SAndroid Build Coastguard Worker * This does not deallocate memory but will invoke destructors
732*61046927SAndroid Build Coastguard Worker * on contained elements.
733*61046927SAndroid Build Coastguard Worker */
clear()734*61046927SAndroid Build Coastguard Worker void clear()
735*61046927SAndroid Build Coastguard Worker {
736*61046927SAndroid Build Coastguard Worker while(!empty()) {
737*61046927SAndroid Build Coastguard Worker pop_back();
738*61046927SAndroid Build Coastguard Worker }
739*61046927SAndroid Build Coastguard Worker }
740*61046927SAndroid Build Coastguard Worker
741*61046927SAndroid Build Coastguard Worker /*! \brief Appends an element after the last valid element.
742*61046927SAndroid Build Coastguard Worker * Calling this on a vector that has reached capacity will throw an
743*61046927SAndroid Build Coastguard Worker * exception if exceptions are enabled.
744*61046927SAndroid Build Coastguard Worker */
push_back(const T & x)745*61046927SAndroid Build Coastguard Worker void push_back (const T& x)
746*61046927SAndroid Build Coastguard Worker {
747*61046927SAndroid Build Coastguard Worker if (size() < N) {
748*61046927SAndroid Build Coastguard Worker new (&data_[size_]) T(x);
749*61046927SAndroid Build Coastguard Worker size_++;
750*61046927SAndroid Build Coastguard Worker } else {
751*61046927SAndroid Build Coastguard Worker detail::errHandler(CL_MEM_OBJECT_ALLOCATION_FAILURE, __VECTOR_CAPACITY_ERR);
752*61046927SAndroid Build Coastguard Worker }
753*61046927SAndroid Build Coastguard Worker }
754*61046927SAndroid Build Coastguard Worker
755*61046927SAndroid Build Coastguard Worker /*! \brief Removes the last valid element from the vector.
756*61046927SAndroid Build Coastguard Worker * Calling this on an empty vector will throw an exception
757*61046927SAndroid Build Coastguard Worker * if exceptions are enabled.
758*61046927SAndroid Build Coastguard Worker */
pop_back(void)759*61046927SAndroid Build Coastguard Worker void pop_back(void)
760*61046927SAndroid Build Coastguard Worker {
761*61046927SAndroid Build Coastguard Worker if (size_ != 0) {
762*61046927SAndroid Build Coastguard Worker --size_;
763*61046927SAndroid Build Coastguard Worker data_[size_].~T();
764*61046927SAndroid Build Coastguard Worker } else {
765*61046927SAndroid Build Coastguard Worker detail::errHandler(CL_MEM_OBJECT_ALLOCATION_FAILURE, __VECTOR_CAPACITY_ERR);
766*61046927SAndroid Build Coastguard Worker }
767*61046927SAndroid Build Coastguard Worker }
768*61046927SAndroid Build Coastguard Worker
769*61046927SAndroid Build Coastguard Worker /*! \brief Constructs with a value copied from another.
770*61046927SAndroid Build Coastguard Worker *
771*61046927SAndroid Build Coastguard Worker * \param vec the vector to copy.
772*61046927SAndroid Build Coastguard Worker */
vector(const vector<T,N> & vec)773*61046927SAndroid Build Coastguard Worker vector(const vector<T, N>& vec) :
774*61046927SAndroid Build Coastguard Worker size_(vec.size_)
775*61046927SAndroid Build Coastguard Worker {
776*61046927SAndroid Build Coastguard Worker if (size_ != 0) {
777*61046927SAndroid Build Coastguard Worker assign(vec.begin(), vec.end());
778*61046927SAndroid Build Coastguard Worker }
779*61046927SAndroid Build Coastguard Worker }
780*61046927SAndroid Build Coastguard Worker
781*61046927SAndroid Build Coastguard Worker /*! \brief Constructs with a specified number of initial elements.
782*61046927SAndroid Build Coastguard Worker *
783*61046927SAndroid Build Coastguard Worker * \param size number of initial elements.
784*61046927SAndroid Build Coastguard Worker *
785*61046927SAndroid Build Coastguard Worker * \param val value of initial elements.
786*61046927SAndroid Build Coastguard Worker */
vector(unsigned int size,const T & val=T ())787*61046927SAndroid Build Coastguard Worker vector(unsigned int size, const T& val = T()) :
788*61046927SAndroid Build Coastguard Worker size_(0)
789*61046927SAndroid Build Coastguard Worker {
790*61046927SAndroid Build Coastguard Worker for (unsigned int i = 0; i < size; i++) {
791*61046927SAndroid Build Coastguard Worker push_back(val);
792*61046927SAndroid Build Coastguard Worker }
793*61046927SAndroid Build Coastguard Worker }
794*61046927SAndroid Build Coastguard Worker
795*61046927SAndroid Build Coastguard Worker /*! \brief Overwrites the current content with that copied from another
796*61046927SAndroid Build Coastguard Worker * instance.
797*61046927SAndroid Build Coastguard Worker *
798*61046927SAndroid Build Coastguard Worker * \param rhs vector to copy.
799*61046927SAndroid Build Coastguard Worker *
800*61046927SAndroid Build Coastguard Worker * \returns a reference to this.
801*61046927SAndroid Build Coastguard Worker */
operator =(const vector<T,N> & rhs)802*61046927SAndroid Build Coastguard Worker vector<T, N>& operator=(const vector<T, N>& rhs)
803*61046927SAndroid Build Coastguard Worker {
804*61046927SAndroid Build Coastguard Worker if (this == &rhs) {
805*61046927SAndroid Build Coastguard Worker return *this;
806*61046927SAndroid Build Coastguard Worker }
807*61046927SAndroid Build Coastguard Worker
808*61046927SAndroid Build Coastguard Worker if (rhs.size_ != 0) {
809*61046927SAndroid Build Coastguard Worker assign(rhs.begin(), rhs.end());
810*61046927SAndroid Build Coastguard Worker } else {
811*61046927SAndroid Build Coastguard Worker clear();
812*61046927SAndroid Build Coastguard Worker }
813*61046927SAndroid Build Coastguard Worker
814*61046927SAndroid Build Coastguard Worker return *this;
815*61046927SAndroid Build Coastguard Worker }
816*61046927SAndroid Build Coastguard Worker
817*61046927SAndroid Build Coastguard Worker /*! \brief Tests equality against another instance.
818*61046927SAndroid Build Coastguard Worker *
819*61046927SAndroid Build Coastguard Worker * \param vec the vector against which to compare.
820*61046927SAndroid Build Coastguard Worker */
operator ==(vector<T,N> & vec)821*61046927SAndroid Build Coastguard Worker bool operator==(vector<T,N> &vec)
822*61046927SAndroid Build Coastguard Worker {
823*61046927SAndroid Build Coastguard Worker if (size() != vec.size()) {
824*61046927SAndroid Build Coastguard Worker return false;
825*61046927SAndroid Build Coastguard Worker }
826*61046927SAndroid Build Coastguard Worker
827*61046927SAndroid Build Coastguard Worker for( unsigned int i = 0; i < size(); ++i ) {
828*61046927SAndroid Build Coastguard Worker if( operator[](i) != vec[i] ) {
829*61046927SAndroid Build Coastguard Worker return false;
830*61046927SAndroid Build Coastguard Worker }
831*61046927SAndroid Build Coastguard Worker }
832*61046927SAndroid Build Coastguard Worker return true;
833*61046927SAndroid Build Coastguard Worker }
834*61046927SAndroid Build Coastguard Worker
835*61046927SAndroid Build Coastguard Worker //! \brief Conversion operator to T*.
operator T*()836*61046927SAndroid Build Coastguard Worker operator T* () { return data_; }
837*61046927SAndroid Build Coastguard Worker
838*61046927SAndroid Build Coastguard Worker //! \brief Conversion operator to const T*.
operator const T*() const839*61046927SAndroid Build Coastguard Worker operator const T* () const { return data_; }
840*61046927SAndroid Build Coastguard Worker
841*61046927SAndroid Build Coastguard Worker //! \brief Tests whether this instance has any elements.
empty(void) const842*61046927SAndroid Build Coastguard Worker bool empty (void) const
843*61046927SAndroid Build Coastguard Worker {
844*61046927SAndroid Build Coastguard Worker return size_==0;
845*61046927SAndroid Build Coastguard Worker }
846*61046927SAndroid Build Coastguard Worker
847*61046927SAndroid Build Coastguard Worker //! \brief Returns the maximum number of elements this instance can hold.
max_size(void) const848*61046927SAndroid Build Coastguard Worker unsigned int max_size (void) const
849*61046927SAndroid Build Coastguard Worker {
850*61046927SAndroid Build Coastguard Worker return N;
851*61046927SAndroid Build Coastguard Worker }
852*61046927SAndroid Build Coastguard Worker
853*61046927SAndroid Build Coastguard Worker //! \brief Returns the maximum number of elements this instance can hold.
capacity() const854*61046927SAndroid Build Coastguard Worker unsigned int capacity () const
855*61046927SAndroid Build Coastguard Worker {
856*61046927SAndroid Build Coastguard Worker return N;
857*61046927SAndroid Build Coastguard Worker }
858*61046927SAndroid Build Coastguard Worker
859*61046927SAndroid Build Coastguard Worker //! \brief Resizes the vector to the given size
resize(unsigned int newSize,T fill=T ())860*61046927SAndroid Build Coastguard Worker void resize(unsigned int newSize, T fill = T())
861*61046927SAndroid Build Coastguard Worker {
862*61046927SAndroid Build Coastguard Worker if (newSize > N)
863*61046927SAndroid Build Coastguard Worker {
864*61046927SAndroid Build Coastguard Worker detail::errHandler(CL_MEM_OBJECT_ALLOCATION_FAILURE, __VECTOR_CAPACITY_ERR);
865*61046927SAndroid Build Coastguard Worker }
866*61046927SAndroid Build Coastguard Worker else
867*61046927SAndroid Build Coastguard Worker {
868*61046927SAndroid Build Coastguard Worker while (size_ < newSize)
869*61046927SAndroid Build Coastguard Worker {
870*61046927SAndroid Build Coastguard Worker new (&data_[size_]) T(fill);
871*61046927SAndroid Build Coastguard Worker size_++;
872*61046927SAndroid Build Coastguard Worker }
873*61046927SAndroid Build Coastguard Worker while (size_ > newSize)
874*61046927SAndroid Build Coastguard Worker {
875*61046927SAndroid Build Coastguard Worker --size_;
876*61046927SAndroid Build Coastguard Worker data_[size_].~T();
877*61046927SAndroid Build Coastguard Worker }
878*61046927SAndroid Build Coastguard Worker }
879*61046927SAndroid Build Coastguard Worker }
880*61046927SAndroid Build Coastguard Worker
881*61046927SAndroid Build Coastguard Worker /*! \brief Returns a reference to a given element.
882*61046927SAndroid Build Coastguard Worker *
883*61046927SAndroid Build Coastguard Worker * \param index which element to access. *
884*61046927SAndroid Build Coastguard Worker * \note
885*61046927SAndroid Build Coastguard Worker * The caller is responsible for ensuring index is >= 0 and < size().
886*61046927SAndroid Build Coastguard Worker */
operator [](int index)887*61046927SAndroid Build Coastguard Worker T& operator[](int index)
888*61046927SAndroid Build Coastguard Worker {
889*61046927SAndroid Build Coastguard Worker return data_[index];
890*61046927SAndroid Build Coastguard Worker }
891*61046927SAndroid Build Coastguard Worker
892*61046927SAndroid Build Coastguard Worker /*! \brief Returns a const reference to a given element.
893*61046927SAndroid Build Coastguard Worker *
894*61046927SAndroid Build Coastguard Worker * \param index which element to access.
895*61046927SAndroid Build Coastguard Worker *
896*61046927SAndroid Build Coastguard Worker * \note
897*61046927SAndroid Build Coastguard Worker * The caller is responsible for ensuring index is >= 0 and < size().
898*61046927SAndroid Build Coastguard Worker */
operator [](int index) const899*61046927SAndroid Build Coastguard Worker const T& operator[](int index) const
900*61046927SAndroid Build Coastguard Worker {
901*61046927SAndroid Build Coastguard Worker return data_[index];
902*61046927SAndroid Build Coastguard Worker }
903*61046927SAndroid Build Coastguard Worker
904*61046927SAndroid Build Coastguard Worker /*! \brief Assigns elements of the vector based on a source iterator range.
905*61046927SAndroid Build Coastguard Worker *
906*61046927SAndroid Build Coastguard Worker * \param start Beginning iterator of source range
907*61046927SAndroid Build Coastguard Worker * \param end Enditerator of source range
908*61046927SAndroid Build Coastguard Worker *
909*61046927SAndroid Build Coastguard Worker * \note
910*61046927SAndroid Build Coastguard Worker * Will throw an exception if exceptions are enabled and size exceeded.
911*61046927SAndroid Build Coastguard Worker */
912*61046927SAndroid Build Coastguard Worker template<class I>
assign(I start,I end)913*61046927SAndroid Build Coastguard Worker void assign(I start, I end)
914*61046927SAndroid Build Coastguard Worker {
915*61046927SAndroid Build Coastguard Worker clear();
916*61046927SAndroid Build Coastguard Worker while(start != end) {
917*61046927SAndroid Build Coastguard Worker push_back(*start);
918*61046927SAndroid Build Coastguard Worker start++;
919*61046927SAndroid Build Coastguard Worker }
920*61046927SAndroid Build Coastguard Worker }
921*61046927SAndroid Build Coastguard Worker
922*61046927SAndroid Build Coastguard Worker /*! \class iterator
923*61046927SAndroid Build Coastguard Worker * \brief Const iterator class for vectors
924*61046927SAndroid Build Coastguard Worker */
925*61046927SAndroid Build Coastguard Worker class iterator
926*61046927SAndroid Build Coastguard Worker {
927*61046927SAndroid Build Coastguard Worker private:
928*61046927SAndroid Build Coastguard Worker const vector<T,N> *vec_;
929*61046927SAndroid Build Coastguard Worker int index_;
930*61046927SAndroid Build Coastguard Worker
931*61046927SAndroid Build Coastguard Worker /**
932*61046927SAndroid Build Coastguard Worker * Internal iterator constructor to capture reference
933*61046927SAndroid Build Coastguard Worker * to the vector it iterates over rather than taking
934*61046927SAndroid Build Coastguard Worker * the vector by copy.
935*61046927SAndroid Build Coastguard Worker */
iterator(const vector<T,N> & vec,int index)936*61046927SAndroid Build Coastguard Worker iterator (const vector<T,N> &vec, int index) :
937*61046927SAndroid Build Coastguard Worker vec_(&vec)
938*61046927SAndroid Build Coastguard Worker {
939*61046927SAndroid Build Coastguard Worker if( !vec.empty() ) {
940*61046927SAndroid Build Coastguard Worker index_ = index;
941*61046927SAndroid Build Coastguard Worker } else {
942*61046927SAndroid Build Coastguard Worker index_ = -1;
943*61046927SAndroid Build Coastguard Worker }
944*61046927SAndroid Build Coastguard Worker }
945*61046927SAndroid Build Coastguard Worker
946*61046927SAndroid Build Coastguard Worker public:
iterator(void)947*61046927SAndroid Build Coastguard Worker iterator(void) :
948*61046927SAndroid Build Coastguard Worker index_(-1),
949*61046927SAndroid Build Coastguard Worker vec_(NULL)
950*61046927SAndroid Build Coastguard Worker {
951*61046927SAndroid Build Coastguard Worker }
952*61046927SAndroid Build Coastguard Worker
iterator(const iterator & rhs)953*61046927SAndroid Build Coastguard Worker iterator(const iterator& rhs) :
954*61046927SAndroid Build Coastguard Worker vec_(rhs.vec_),
955*61046927SAndroid Build Coastguard Worker index_(rhs.index_)
956*61046927SAndroid Build Coastguard Worker {
957*61046927SAndroid Build Coastguard Worker }
958*61046927SAndroid Build Coastguard Worker
~iterator(void)959*61046927SAndroid Build Coastguard Worker ~iterator(void) {}
960*61046927SAndroid Build Coastguard Worker
begin(const cl::vector<T,N> & vec)961*61046927SAndroid Build Coastguard Worker static iterator begin(const cl::vector<T,N> &vec)
962*61046927SAndroid Build Coastguard Worker {
963*61046927SAndroid Build Coastguard Worker iterator i(vec, 0);
964*61046927SAndroid Build Coastguard Worker
965*61046927SAndroid Build Coastguard Worker return i;
966*61046927SAndroid Build Coastguard Worker }
967*61046927SAndroid Build Coastguard Worker
end(const cl::vector<T,N> & vec)968*61046927SAndroid Build Coastguard Worker static iterator end(const cl::vector<T,N> &vec)
969*61046927SAndroid Build Coastguard Worker {
970*61046927SAndroid Build Coastguard Worker iterator i(vec, vec.size());
971*61046927SAndroid Build Coastguard Worker
972*61046927SAndroid Build Coastguard Worker return i;
973*61046927SAndroid Build Coastguard Worker }
974*61046927SAndroid Build Coastguard Worker
operator ==(iterator i)975*61046927SAndroid Build Coastguard Worker bool operator==(iterator i)
976*61046927SAndroid Build Coastguard Worker {
977*61046927SAndroid Build Coastguard Worker return ((vec_ == i.vec_) &&
978*61046927SAndroid Build Coastguard Worker (index_ == i.index_));
979*61046927SAndroid Build Coastguard Worker }
980*61046927SAndroid Build Coastguard Worker
operator !=(iterator i)981*61046927SAndroid Build Coastguard Worker bool operator!=(iterator i)
982*61046927SAndroid Build Coastguard Worker {
983*61046927SAndroid Build Coastguard Worker return (!(*this==i));
984*61046927SAndroid Build Coastguard Worker }
985*61046927SAndroid Build Coastguard Worker
operator ++()986*61046927SAndroid Build Coastguard Worker iterator& operator++()
987*61046927SAndroid Build Coastguard Worker {
988*61046927SAndroid Build Coastguard Worker ++index_;
989*61046927SAndroid Build Coastguard Worker return *this;
990*61046927SAndroid Build Coastguard Worker }
991*61046927SAndroid Build Coastguard Worker
operator ++(int)992*61046927SAndroid Build Coastguard Worker iterator operator++(int)
993*61046927SAndroid Build Coastguard Worker {
994*61046927SAndroid Build Coastguard Worker iterator retVal(*this);
995*61046927SAndroid Build Coastguard Worker ++index_;
996*61046927SAndroid Build Coastguard Worker return retVal;
997*61046927SAndroid Build Coastguard Worker }
998*61046927SAndroid Build Coastguard Worker
operator --()999*61046927SAndroid Build Coastguard Worker iterator& operator--()
1000*61046927SAndroid Build Coastguard Worker {
1001*61046927SAndroid Build Coastguard Worker --index_;
1002*61046927SAndroid Build Coastguard Worker return *this;
1003*61046927SAndroid Build Coastguard Worker }
1004*61046927SAndroid Build Coastguard Worker
operator --(int)1005*61046927SAndroid Build Coastguard Worker iterator operator--(int)
1006*61046927SAndroid Build Coastguard Worker {
1007*61046927SAndroid Build Coastguard Worker iterator retVal(*this);
1008*61046927SAndroid Build Coastguard Worker --index_;
1009*61046927SAndroid Build Coastguard Worker return retVal;
1010*61046927SAndroid Build Coastguard Worker }
1011*61046927SAndroid Build Coastguard Worker
operator *() const1012*61046927SAndroid Build Coastguard Worker const T& operator *() const
1013*61046927SAndroid Build Coastguard Worker {
1014*61046927SAndroid Build Coastguard Worker return (*vec_)[index_];
1015*61046927SAndroid Build Coastguard Worker }
1016*61046927SAndroid Build Coastguard Worker };
1017*61046927SAndroid Build Coastguard Worker
begin(void)1018*61046927SAndroid Build Coastguard Worker iterator begin(void)
1019*61046927SAndroid Build Coastguard Worker {
1020*61046927SAndroid Build Coastguard Worker return iterator::begin(*this);
1021*61046927SAndroid Build Coastguard Worker }
1022*61046927SAndroid Build Coastguard Worker
begin(void) const1023*61046927SAndroid Build Coastguard Worker iterator begin(void) const
1024*61046927SAndroid Build Coastguard Worker {
1025*61046927SAndroid Build Coastguard Worker return iterator::begin(*this);
1026*61046927SAndroid Build Coastguard Worker }
1027*61046927SAndroid Build Coastguard Worker
end(void)1028*61046927SAndroid Build Coastguard Worker iterator end(void)
1029*61046927SAndroid Build Coastguard Worker {
1030*61046927SAndroid Build Coastguard Worker return iterator::end(*this);
1031*61046927SAndroid Build Coastguard Worker }
1032*61046927SAndroid Build Coastguard Worker
end(void) const1033*61046927SAndroid Build Coastguard Worker iterator end(void) const
1034*61046927SAndroid Build Coastguard Worker {
1035*61046927SAndroid Build Coastguard Worker return iterator::end(*this);
1036*61046927SAndroid Build Coastguard Worker }
1037*61046927SAndroid Build Coastguard Worker
front(void)1038*61046927SAndroid Build Coastguard Worker T& front(void)
1039*61046927SAndroid Build Coastguard Worker {
1040*61046927SAndroid Build Coastguard Worker return data_[0];
1041*61046927SAndroid Build Coastguard Worker }
1042*61046927SAndroid Build Coastguard Worker
back(void)1043*61046927SAndroid Build Coastguard Worker T& back(void)
1044*61046927SAndroid Build Coastguard Worker {
1045*61046927SAndroid Build Coastguard Worker return data_[size_];
1046*61046927SAndroid Build Coastguard Worker }
1047*61046927SAndroid Build Coastguard Worker
front(void) const1048*61046927SAndroid Build Coastguard Worker const T& front(void) const
1049*61046927SAndroid Build Coastguard Worker {
1050*61046927SAndroid Build Coastguard Worker return data_[0];
1051*61046927SAndroid Build Coastguard Worker }
1052*61046927SAndroid Build Coastguard Worker
back(void) const1053*61046927SAndroid Build Coastguard Worker const T& back(void) const
1054*61046927SAndroid Build Coastguard Worker {
1055*61046927SAndroid Build Coastguard Worker return data_[size_-1];
1056*61046927SAndroid Build Coastguard Worker }
1057*61046927SAndroid Build Coastguard Worker } CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
1058*61046927SAndroid Build Coastguard Worker #endif // #if !defined(__USE_DEV_VECTOR) && !defined(__NO_STD_VECTOR)
1059*61046927SAndroid Build Coastguard Worker
1060*61046927SAndroid Build Coastguard Worker
1061*61046927SAndroid Build Coastguard Worker
1062*61046927SAndroid Build Coastguard Worker
1063*61046927SAndroid Build Coastguard Worker
1064*61046927SAndroid Build Coastguard Worker namespace detail {
1065*61046927SAndroid Build Coastguard Worker #define __DEFAULT_NOT_INITIALIZED 1
1066*61046927SAndroid Build Coastguard Worker #define __DEFAULT_BEING_INITIALIZED 2
1067*61046927SAndroid Build Coastguard Worker #define __DEFAULT_INITIALIZED 4
1068*61046927SAndroid Build Coastguard Worker
1069*61046927SAndroid Build Coastguard Worker /*
1070*61046927SAndroid Build Coastguard Worker * Compare and exchange primitives are needed for handling of defaults
1071*61046927SAndroid Build Coastguard Worker */
1072*61046927SAndroid Build Coastguard Worker
1073*61046927SAndroid Build Coastguard Worker #ifdef CL_HPP_CPP11_ATOMICS_SUPPORTED
compare_exchange(std::atomic<int> * dest,int exchange,int comparand)1074*61046927SAndroid Build Coastguard Worker inline int compare_exchange(std::atomic<int> * dest, int exchange, int comparand)
1075*61046927SAndroid Build Coastguard Worker #else // !CL_HPP_CPP11_ATOMICS_SUPPORTED
1076*61046927SAndroid Build Coastguard Worker inline int compare_exchange(volatile int * dest, int exchange, int comparand)
1077*61046927SAndroid Build Coastguard Worker #endif // !CL_HPP_CPP11_ATOMICS_SUPPORTED
1078*61046927SAndroid Build Coastguard Worker {
1079*61046927SAndroid Build Coastguard Worker #ifdef CL_HPP_CPP11_ATOMICS_SUPPORTED
1080*61046927SAndroid Build Coastguard Worker std::atomic_compare_exchange_strong(dest, &comparand, exchange);
1081*61046927SAndroid Build Coastguard Worker return comparand;
1082*61046927SAndroid Build Coastguard Worker #elif _MSC_VER
1083*61046927SAndroid Build Coastguard Worker return (int)(_InterlockedCompareExchange(
1084*61046927SAndroid Build Coastguard Worker (volatile long*)dest,
1085*61046927SAndroid Build Coastguard Worker (long)exchange,
1086*61046927SAndroid Build Coastguard Worker (long)comparand));
1087*61046927SAndroid Build Coastguard Worker #else // !_MSC_VER && !CL_HPP_CPP11_ATOMICS_SUPPORTED
1088*61046927SAndroid Build Coastguard Worker return (__sync_val_compare_and_swap(
1089*61046927SAndroid Build Coastguard Worker dest,
1090*61046927SAndroid Build Coastguard Worker comparand,
1091*61046927SAndroid Build Coastguard Worker exchange));
1092*61046927SAndroid Build Coastguard Worker #endif // !CL_HPP_CPP11_ATOMICS_SUPPORTED
1093*61046927SAndroid Build Coastguard Worker }
1094*61046927SAndroid Build Coastguard Worker
fence()1095*61046927SAndroid Build Coastguard Worker inline void fence() {
1096*61046927SAndroid Build Coastguard Worker #ifdef CL_HPP_CPP11_ATOMICS_SUPPORTED
1097*61046927SAndroid Build Coastguard Worker std::atomic_thread_fence(std::memory_order_seq_cst);
1098*61046927SAndroid Build Coastguard Worker #elif _MSC_VER // !CL_HPP_CPP11_ATOMICS_SUPPORTED
1099*61046927SAndroid Build Coastguard Worker _ReadWriteBarrier();
1100*61046927SAndroid Build Coastguard Worker #else // !_MSC_VER && !CL_HPP_CPP11_ATOMICS_SUPPORTED
1101*61046927SAndroid Build Coastguard Worker __sync_synchronize();
1102*61046927SAndroid Build Coastguard Worker #endif // !CL_HPP_CPP11_ATOMICS_SUPPORTED
1103*61046927SAndroid Build Coastguard Worker }
1104*61046927SAndroid Build Coastguard Worker } // namespace detail
1105*61046927SAndroid Build Coastguard Worker
1106*61046927SAndroid Build Coastguard Worker
1107*61046927SAndroid Build Coastguard Worker /*! \brief class used to interface between C++ and
1108*61046927SAndroid Build Coastguard Worker * OpenCL C calls that require arrays of size_t values, whose
1109*61046927SAndroid Build Coastguard Worker * size is known statically.
1110*61046927SAndroid Build Coastguard Worker */
1111*61046927SAndroid Build Coastguard Worker template <int N>
1112*61046927SAndroid Build Coastguard Worker class size_t
1113*61046927SAndroid Build Coastguard Worker {
1114*61046927SAndroid Build Coastguard Worker private:
1115*61046927SAndroid Build Coastguard Worker ::size_t data_[N];
1116*61046927SAndroid Build Coastguard Worker
1117*61046927SAndroid Build Coastguard Worker public:
1118*61046927SAndroid Build Coastguard Worker //! \brief Initialize size_t to all 0s
size_t()1119*61046927SAndroid Build Coastguard Worker size_t()
1120*61046927SAndroid Build Coastguard Worker {
1121*61046927SAndroid Build Coastguard Worker for( int i = 0; i < N; ++i ) {
1122*61046927SAndroid Build Coastguard Worker data_[i] = 0;
1123*61046927SAndroid Build Coastguard Worker }
1124*61046927SAndroid Build Coastguard Worker }
1125*61046927SAndroid Build Coastguard Worker
operator [](int index)1126*61046927SAndroid Build Coastguard Worker ::size_t& operator[](int index)
1127*61046927SAndroid Build Coastguard Worker {
1128*61046927SAndroid Build Coastguard Worker return data_[index];
1129*61046927SAndroid Build Coastguard Worker }
1130*61046927SAndroid Build Coastguard Worker
operator [](int index) const1131*61046927SAndroid Build Coastguard Worker const ::size_t& operator[](int index) const
1132*61046927SAndroid Build Coastguard Worker {
1133*61046927SAndroid Build Coastguard Worker return data_[index];
1134*61046927SAndroid Build Coastguard Worker }
1135*61046927SAndroid Build Coastguard Worker
1136*61046927SAndroid Build Coastguard Worker //! \brief Conversion operator to T*.
operator ::size_t*()1137*61046927SAndroid Build Coastguard Worker operator ::size_t* () { return data_; }
1138*61046927SAndroid Build Coastguard Worker
1139*61046927SAndroid Build Coastguard Worker //! \brief Conversion operator to const T*.
operator const::size_t*() const1140*61046927SAndroid Build Coastguard Worker operator const ::size_t* () const { return data_; }
1141*61046927SAndroid Build Coastguard Worker };
1142*61046927SAndroid Build Coastguard Worker
1143*61046927SAndroid Build Coastguard Worker namespace detail {
1144*61046927SAndroid Build Coastguard Worker
1145*61046927SAndroid Build Coastguard Worker // Generic getInfoHelper. The final parameter is used to guide overload
1146*61046927SAndroid Build Coastguard Worker // resolution: the actual parameter passed is an int, which makes this
1147*61046927SAndroid Build Coastguard Worker // a worse conversion sequence than a specialization that declares the
1148*61046927SAndroid Build Coastguard Worker // parameter as an int.
1149*61046927SAndroid Build Coastguard Worker template<typename Functor, typename T>
getInfoHelper(Functor f,cl_uint name,T * param,long)1150*61046927SAndroid Build Coastguard Worker inline cl_int getInfoHelper(Functor f, cl_uint name, T* param, long)
1151*61046927SAndroid Build Coastguard Worker {
1152*61046927SAndroid Build Coastguard Worker return f(name, sizeof(T), param, NULL);
1153*61046927SAndroid Build Coastguard Worker }
1154*61046927SAndroid Build Coastguard Worker
1155*61046927SAndroid Build Coastguard Worker // Specialized getInfoHelper for VECTOR_CLASS params
1156*61046927SAndroid Build Coastguard Worker template <typename Func, typename T>
getInfoHelper(Func f,cl_uint name,VECTOR_CLASS<T> * param,long)1157*61046927SAndroid Build Coastguard Worker inline cl_int getInfoHelper(Func f, cl_uint name, VECTOR_CLASS<T>* param, long)
1158*61046927SAndroid Build Coastguard Worker {
1159*61046927SAndroid Build Coastguard Worker ::size_t required;
1160*61046927SAndroid Build Coastguard Worker cl_int err = f(name, 0, NULL, &required);
1161*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
1162*61046927SAndroid Build Coastguard Worker return err;
1163*61046927SAndroid Build Coastguard Worker }
1164*61046927SAndroid Build Coastguard Worker
1165*61046927SAndroid Build Coastguard Worker T* value = (T*) alloca(required);
1166*61046927SAndroid Build Coastguard Worker err = f(name, required, value, NULL);
1167*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
1168*61046927SAndroid Build Coastguard Worker return err;
1169*61046927SAndroid Build Coastguard Worker }
1170*61046927SAndroid Build Coastguard Worker
1171*61046927SAndroid Build Coastguard Worker param->assign(&value[0], &value[required/sizeof(T)]);
1172*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
1173*61046927SAndroid Build Coastguard Worker }
1174*61046927SAndroid Build Coastguard Worker
1175*61046927SAndroid Build Coastguard Worker /* Specialization for reference-counted types. This depends on the
1176*61046927SAndroid Build Coastguard Worker * existence of Wrapper<T>::cl_type, and none of the other types having the
1177*61046927SAndroid Build Coastguard Worker * cl_type member. Note that simplify specifying the parameter as Wrapper<T>
1178*61046927SAndroid Build Coastguard Worker * does not work, because when using a derived type (e.g. Context) the generic
1179*61046927SAndroid Build Coastguard Worker * template will provide a better match.
1180*61046927SAndroid Build Coastguard Worker */
1181*61046927SAndroid Build Coastguard Worker template <typename Func, typename T>
getInfoHelper(Func f,cl_uint name,VECTOR_CLASS<T> * param,int,typename T::cl_type=0)1182*61046927SAndroid Build Coastguard Worker inline cl_int getInfoHelper(Func f, cl_uint name, VECTOR_CLASS<T>* param, int, typename T::cl_type = 0)
1183*61046927SAndroid Build Coastguard Worker {
1184*61046927SAndroid Build Coastguard Worker ::size_t required;
1185*61046927SAndroid Build Coastguard Worker cl_int err = f(name, 0, NULL, &required);
1186*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
1187*61046927SAndroid Build Coastguard Worker return err;
1188*61046927SAndroid Build Coastguard Worker }
1189*61046927SAndroid Build Coastguard Worker
1190*61046927SAndroid Build Coastguard Worker typename T::cl_type * value = (typename T::cl_type *) alloca(required);
1191*61046927SAndroid Build Coastguard Worker err = f(name, required, value, NULL);
1192*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
1193*61046927SAndroid Build Coastguard Worker return err;
1194*61046927SAndroid Build Coastguard Worker }
1195*61046927SAndroid Build Coastguard Worker
1196*61046927SAndroid Build Coastguard Worker ::size_t elements = required / sizeof(typename T::cl_type);
1197*61046927SAndroid Build Coastguard Worker param->assign(&value[0], &value[elements]);
1198*61046927SAndroid Build Coastguard Worker for (::size_t i = 0; i < elements; i++)
1199*61046927SAndroid Build Coastguard Worker {
1200*61046927SAndroid Build Coastguard Worker if (value[i] != NULL)
1201*61046927SAndroid Build Coastguard Worker {
1202*61046927SAndroid Build Coastguard Worker err = (*param)[i].retain();
1203*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
1204*61046927SAndroid Build Coastguard Worker return err;
1205*61046927SAndroid Build Coastguard Worker }
1206*61046927SAndroid Build Coastguard Worker }
1207*61046927SAndroid Build Coastguard Worker }
1208*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
1209*61046927SAndroid Build Coastguard Worker }
1210*61046927SAndroid Build Coastguard Worker
1211*61046927SAndroid Build Coastguard Worker // Specialized for getInfo<CL_PROGRAM_BINARIES>
1212*61046927SAndroid Build Coastguard Worker template <typename Func>
getInfoHelper(Func f,cl_uint name,VECTOR_CLASS<char * > * param,int)1213*61046927SAndroid Build Coastguard Worker inline cl_int getInfoHelper(Func f, cl_uint name, VECTOR_CLASS<char *>* param, int)
1214*61046927SAndroid Build Coastguard Worker {
1215*61046927SAndroid Build Coastguard Worker cl_int err = f(name, param->size() * sizeof(char *), &(*param)[0], NULL);
1216*61046927SAndroid Build Coastguard Worker
1217*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
1218*61046927SAndroid Build Coastguard Worker return err;
1219*61046927SAndroid Build Coastguard Worker }
1220*61046927SAndroid Build Coastguard Worker
1221*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
1222*61046927SAndroid Build Coastguard Worker }
1223*61046927SAndroid Build Coastguard Worker
1224*61046927SAndroid Build Coastguard Worker // Specialized GetInfoHelper for STRING_CLASS params
1225*61046927SAndroid Build Coastguard Worker template <typename Func>
getInfoHelper(Func f,cl_uint name,STRING_CLASS * param,long)1226*61046927SAndroid Build Coastguard Worker inline cl_int getInfoHelper(Func f, cl_uint name, STRING_CLASS* param, long)
1227*61046927SAndroid Build Coastguard Worker {
1228*61046927SAndroid Build Coastguard Worker #if defined(__NO_STD_VECTOR) || defined(__NO_STD_STRING)
1229*61046927SAndroid Build Coastguard Worker ::size_t required;
1230*61046927SAndroid Build Coastguard Worker cl_int err = f(name, 0, NULL, &required);
1231*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
1232*61046927SAndroid Build Coastguard Worker return err;
1233*61046927SAndroid Build Coastguard Worker }
1234*61046927SAndroid Build Coastguard Worker
1235*61046927SAndroid Build Coastguard Worker char* value = (char*)alloca(required);
1236*61046927SAndroid Build Coastguard Worker err = f(name, required, value, NULL);
1237*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
1238*61046927SAndroid Build Coastguard Worker return err;
1239*61046927SAndroid Build Coastguard Worker }
1240*61046927SAndroid Build Coastguard Worker
1241*61046927SAndroid Build Coastguard Worker *param = value;
1242*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
1243*61046927SAndroid Build Coastguard Worker #else
1244*61046927SAndroid Build Coastguard Worker ::size_t required;
1245*61046927SAndroid Build Coastguard Worker cl_int err = f(name, 0, NULL, &required);
1246*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
1247*61046927SAndroid Build Coastguard Worker return err;
1248*61046927SAndroid Build Coastguard Worker }
1249*61046927SAndroid Build Coastguard Worker
1250*61046927SAndroid Build Coastguard Worker if (required > 0) {
1251*61046927SAndroid Build Coastguard Worker // std::string has a constant data member
1252*61046927SAndroid Build Coastguard Worker // a char vector does not
1253*61046927SAndroid Build Coastguard Worker VECTOR_CLASS<char> value(required);
1254*61046927SAndroid Build Coastguard Worker err = f(name, required, value.data(), NULL);
1255*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
1256*61046927SAndroid Build Coastguard Worker return err;
1257*61046927SAndroid Build Coastguard Worker }
1258*61046927SAndroid Build Coastguard Worker if (param) {
1259*61046927SAndroid Build Coastguard Worker param->assign(value.begin(), value.end() - 1u);
1260*61046927SAndroid Build Coastguard Worker }
1261*61046927SAndroid Build Coastguard Worker }
1262*61046927SAndroid Build Coastguard Worker else if (param) {
1263*61046927SAndroid Build Coastguard Worker param->assign("");
1264*61046927SAndroid Build Coastguard Worker }
1265*61046927SAndroid Build Coastguard Worker #endif
1266*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
1267*61046927SAndroid Build Coastguard Worker }
1268*61046927SAndroid Build Coastguard Worker
1269*61046927SAndroid Build Coastguard Worker // Specialized GetInfoHelper for cl::size_t params
1270*61046927SAndroid Build Coastguard Worker template <typename Func, ::size_t N>
getInfoHelper(Func f,cl_uint name,size_t<N> * param,long)1271*61046927SAndroid Build Coastguard Worker inline cl_int getInfoHelper(Func f, cl_uint name, size_t<N>* param, long)
1272*61046927SAndroid Build Coastguard Worker {
1273*61046927SAndroid Build Coastguard Worker ::size_t required;
1274*61046927SAndroid Build Coastguard Worker cl_int err = f(name, 0, NULL, &required);
1275*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
1276*61046927SAndroid Build Coastguard Worker return err;
1277*61046927SAndroid Build Coastguard Worker }
1278*61046927SAndroid Build Coastguard Worker
1279*61046927SAndroid Build Coastguard Worker ::size_t* value = (::size_t*) alloca(required);
1280*61046927SAndroid Build Coastguard Worker err = f(name, required, value, NULL);
1281*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
1282*61046927SAndroid Build Coastguard Worker return err;
1283*61046927SAndroid Build Coastguard Worker }
1284*61046927SAndroid Build Coastguard Worker
1285*61046927SAndroid Build Coastguard Worker for(int i = 0; i < N; ++i) {
1286*61046927SAndroid Build Coastguard Worker (*param)[i] = value[i];
1287*61046927SAndroid Build Coastguard Worker }
1288*61046927SAndroid Build Coastguard Worker
1289*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
1290*61046927SAndroid Build Coastguard Worker }
1291*61046927SAndroid Build Coastguard Worker
1292*61046927SAndroid Build Coastguard Worker template<typename T> struct ReferenceHandler;
1293*61046927SAndroid Build Coastguard Worker
1294*61046927SAndroid Build Coastguard Worker /* Specialization for reference-counted types. This depends on the
1295*61046927SAndroid Build Coastguard Worker * existence of Wrapper<T>::cl_type, and none of the other types having the
1296*61046927SAndroid Build Coastguard Worker * cl_type member. Note that simplify specifying the parameter as Wrapper<T>
1297*61046927SAndroid Build Coastguard Worker * does not work, because when using a derived type (e.g. Context) the generic
1298*61046927SAndroid Build Coastguard Worker * template will provide a better match.
1299*61046927SAndroid Build Coastguard Worker */
1300*61046927SAndroid Build Coastguard Worker template<typename Func, typename T>
getInfoHelper(Func f,cl_uint name,T * param,int,typename T::cl_type=0)1301*61046927SAndroid Build Coastguard Worker inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typename T::cl_type = 0)
1302*61046927SAndroid Build Coastguard Worker {
1303*61046927SAndroid Build Coastguard Worker typename T::cl_type value;
1304*61046927SAndroid Build Coastguard Worker cl_int err = f(name, sizeof(value), &value, NULL);
1305*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
1306*61046927SAndroid Build Coastguard Worker return err;
1307*61046927SAndroid Build Coastguard Worker }
1308*61046927SAndroid Build Coastguard Worker *param = value;
1309*61046927SAndroid Build Coastguard Worker if (value != NULL)
1310*61046927SAndroid Build Coastguard Worker {
1311*61046927SAndroid Build Coastguard Worker err = param->retain();
1312*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
1313*61046927SAndroid Build Coastguard Worker return err;
1314*61046927SAndroid Build Coastguard Worker }
1315*61046927SAndroid Build Coastguard Worker }
1316*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
1317*61046927SAndroid Build Coastguard Worker }
1318*61046927SAndroid Build Coastguard Worker
1319*61046927SAndroid Build Coastguard Worker #define __PARAM_NAME_INFO_1_0(F) \
1320*61046927SAndroid Build Coastguard Worker F(cl_platform_info, CL_PLATFORM_PROFILE, STRING_CLASS) \
1321*61046927SAndroid Build Coastguard Worker F(cl_platform_info, CL_PLATFORM_VERSION, STRING_CLASS) \
1322*61046927SAndroid Build Coastguard Worker F(cl_platform_info, CL_PLATFORM_NAME, STRING_CLASS) \
1323*61046927SAndroid Build Coastguard Worker F(cl_platform_info, CL_PLATFORM_VENDOR, STRING_CLASS) \
1324*61046927SAndroid Build Coastguard Worker F(cl_platform_info, CL_PLATFORM_EXTENSIONS, STRING_CLASS) \
1325*61046927SAndroid Build Coastguard Worker \
1326*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_TYPE, cl_device_type) \
1327*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_VENDOR_ID, cl_uint) \
1328*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_MAX_COMPUTE_UNITS, cl_uint) \
1329*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, cl_uint) \
1330*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_MAX_WORK_GROUP_SIZE, ::size_t) \
1331*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_MAX_WORK_ITEM_SIZES, VECTOR_CLASS< ::size_t>) \
1332*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR, cl_uint) \
1333*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT, cl_uint) \
1334*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT, cl_uint) \
1335*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG, cl_uint) \
1336*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT, cl_uint) \
1337*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE, cl_uint) \
1338*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_MAX_CLOCK_FREQUENCY, cl_uint) \
1339*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_ADDRESS_BITS, cl_uint) \
1340*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_MAX_READ_IMAGE_ARGS, cl_uint) \
1341*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_MAX_WRITE_IMAGE_ARGS, cl_uint) \
1342*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_MAX_MEM_ALLOC_SIZE, cl_ulong) \
1343*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_IMAGE2D_MAX_WIDTH, ::size_t) \
1344*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_IMAGE2D_MAX_HEIGHT, ::size_t) \
1345*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_WIDTH, ::size_t) \
1346*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_HEIGHT, ::size_t) \
1347*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_DEPTH, ::size_t) \
1348*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_IMAGE_SUPPORT, cl_bool) \
1349*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_MAX_PARAMETER_SIZE, ::size_t) \
1350*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_MAX_SAMPLERS, cl_uint) \
1351*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_MEM_BASE_ADDR_ALIGN, cl_uint) \
1352*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE, cl_uint) \
1353*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_SINGLE_FP_CONFIG, cl_device_fp_config) \
1354*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_DOUBLE_FP_CONFIG, cl_device_fp_config) \
1355*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_HALF_FP_CONFIG, cl_device_fp_config) \
1356*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_TYPE, cl_device_mem_cache_type) \
1357*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE, cl_uint)\
1358*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_SIZE, cl_ulong) \
1359*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_GLOBAL_MEM_SIZE, cl_ulong) \
1360*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, cl_ulong) \
1361*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_MAX_CONSTANT_ARGS, cl_uint) \
1362*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_LOCAL_MEM_TYPE, cl_device_local_mem_type) \
1363*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_LOCAL_MEM_SIZE, cl_ulong) \
1364*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_ERROR_CORRECTION_SUPPORT, cl_bool) \
1365*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PROFILING_TIMER_RESOLUTION, ::size_t) \
1366*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_ENDIAN_LITTLE, cl_bool) \
1367*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_AVAILABLE, cl_bool) \
1368*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_COMPILER_AVAILABLE, cl_bool) \
1369*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_EXECUTION_CAPABILITIES, cl_device_exec_capabilities) \
1370*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_QUEUE_PROPERTIES, cl_command_queue_properties) \
1371*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PLATFORM, cl_platform_id) \
1372*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_NAME, STRING_CLASS) \
1373*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_VENDOR, STRING_CLASS) \
1374*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DRIVER_VERSION, STRING_CLASS) \
1375*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PROFILE, STRING_CLASS) \
1376*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_VERSION, STRING_CLASS) \
1377*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_EXTENSIONS, STRING_CLASS) \
1378*61046927SAndroid Build Coastguard Worker \
1379*61046927SAndroid Build Coastguard Worker F(cl_context_info, CL_CONTEXT_REFERENCE_COUNT, cl_uint) \
1380*61046927SAndroid Build Coastguard Worker F(cl_context_info, CL_CONTEXT_DEVICES, VECTOR_CLASS<Device>) \
1381*61046927SAndroid Build Coastguard Worker F(cl_context_info, CL_CONTEXT_PROPERTIES, VECTOR_CLASS<cl_context_properties>) \
1382*61046927SAndroid Build Coastguard Worker \
1383*61046927SAndroid Build Coastguard Worker F(cl_event_info, CL_EVENT_COMMAND_QUEUE, cl::CommandQueue) \
1384*61046927SAndroid Build Coastguard Worker F(cl_event_info, CL_EVENT_COMMAND_TYPE, cl_command_type) \
1385*61046927SAndroid Build Coastguard Worker F(cl_event_info, CL_EVENT_REFERENCE_COUNT, cl_uint) \
1386*61046927SAndroid Build Coastguard Worker F(cl_event_info, CL_EVENT_COMMAND_EXECUTION_STATUS, cl_int) \
1387*61046927SAndroid Build Coastguard Worker \
1388*61046927SAndroid Build Coastguard Worker F(cl_profiling_info, CL_PROFILING_COMMAND_QUEUED, cl_ulong) \
1389*61046927SAndroid Build Coastguard Worker F(cl_profiling_info, CL_PROFILING_COMMAND_SUBMIT, cl_ulong) \
1390*61046927SAndroid Build Coastguard Worker F(cl_profiling_info, CL_PROFILING_COMMAND_START, cl_ulong) \
1391*61046927SAndroid Build Coastguard Worker F(cl_profiling_info, CL_PROFILING_COMMAND_END, cl_ulong) \
1392*61046927SAndroid Build Coastguard Worker \
1393*61046927SAndroid Build Coastguard Worker F(cl_mem_info, CL_MEM_TYPE, cl_mem_object_type) \
1394*61046927SAndroid Build Coastguard Worker F(cl_mem_info, CL_MEM_FLAGS, cl_mem_flags) \
1395*61046927SAndroid Build Coastguard Worker F(cl_mem_info, CL_MEM_SIZE, ::size_t) \
1396*61046927SAndroid Build Coastguard Worker F(cl_mem_info, CL_MEM_HOST_PTR, void*) \
1397*61046927SAndroid Build Coastguard Worker F(cl_mem_info, CL_MEM_MAP_COUNT, cl_uint) \
1398*61046927SAndroid Build Coastguard Worker F(cl_mem_info, CL_MEM_REFERENCE_COUNT, cl_uint) \
1399*61046927SAndroid Build Coastguard Worker F(cl_mem_info, CL_MEM_CONTEXT, cl::Context) \
1400*61046927SAndroid Build Coastguard Worker \
1401*61046927SAndroid Build Coastguard Worker F(cl_image_info, CL_IMAGE_FORMAT, cl_image_format) \
1402*61046927SAndroid Build Coastguard Worker F(cl_image_info, CL_IMAGE_ELEMENT_SIZE, ::size_t) \
1403*61046927SAndroid Build Coastguard Worker F(cl_image_info, CL_IMAGE_ROW_PITCH, ::size_t) \
1404*61046927SAndroid Build Coastguard Worker F(cl_image_info, CL_IMAGE_SLICE_PITCH, ::size_t) \
1405*61046927SAndroid Build Coastguard Worker F(cl_image_info, CL_IMAGE_WIDTH, ::size_t) \
1406*61046927SAndroid Build Coastguard Worker F(cl_image_info, CL_IMAGE_HEIGHT, ::size_t) \
1407*61046927SAndroid Build Coastguard Worker F(cl_image_info, CL_IMAGE_DEPTH, ::size_t) \
1408*61046927SAndroid Build Coastguard Worker \
1409*61046927SAndroid Build Coastguard Worker F(cl_sampler_info, CL_SAMPLER_REFERENCE_COUNT, cl_uint) \
1410*61046927SAndroid Build Coastguard Worker F(cl_sampler_info, CL_SAMPLER_CONTEXT, cl::Context) \
1411*61046927SAndroid Build Coastguard Worker F(cl_sampler_info, CL_SAMPLER_NORMALIZED_COORDS, cl_bool) \
1412*61046927SAndroid Build Coastguard Worker F(cl_sampler_info, CL_SAMPLER_ADDRESSING_MODE, cl_addressing_mode) \
1413*61046927SAndroid Build Coastguard Worker F(cl_sampler_info, CL_SAMPLER_FILTER_MODE, cl_filter_mode) \
1414*61046927SAndroid Build Coastguard Worker \
1415*61046927SAndroid Build Coastguard Worker F(cl_program_info, CL_PROGRAM_REFERENCE_COUNT, cl_uint) \
1416*61046927SAndroid Build Coastguard Worker F(cl_program_info, CL_PROGRAM_CONTEXT, cl::Context) \
1417*61046927SAndroid Build Coastguard Worker F(cl_program_info, CL_PROGRAM_NUM_DEVICES, cl_uint) \
1418*61046927SAndroid Build Coastguard Worker F(cl_program_info, CL_PROGRAM_DEVICES, VECTOR_CLASS<Device>) \
1419*61046927SAndroid Build Coastguard Worker F(cl_program_info, CL_PROGRAM_SOURCE, STRING_CLASS) \
1420*61046927SAndroid Build Coastguard Worker F(cl_program_info, CL_PROGRAM_BINARY_SIZES, VECTOR_CLASS< ::size_t>) \
1421*61046927SAndroid Build Coastguard Worker F(cl_program_info, CL_PROGRAM_BINARIES, VECTOR_CLASS<char *>) \
1422*61046927SAndroid Build Coastguard Worker \
1423*61046927SAndroid Build Coastguard Worker F(cl_program_build_info, CL_PROGRAM_BUILD_STATUS, cl_build_status) \
1424*61046927SAndroid Build Coastguard Worker F(cl_program_build_info, CL_PROGRAM_BUILD_OPTIONS, STRING_CLASS) \
1425*61046927SAndroid Build Coastguard Worker F(cl_program_build_info, CL_PROGRAM_BUILD_LOG, STRING_CLASS) \
1426*61046927SAndroid Build Coastguard Worker \
1427*61046927SAndroid Build Coastguard Worker F(cl_kernel_info, CL_KERNEL_FUNCTION_NAME, STRING_CLASS) \
1428*61046927SAndroid Build Coastguard Worker F(cl_kernel_info, CL_KERNEL_NUM_ARGS, cl_uint) \
1429*61046927SAndroid Build Coastguard Worker F(cl_kernel_info, CL_KERNEL_REFERENCE_COUNT, cl_uint) \
1430*61046927SAndroid Build Coastguard Worker F(cl_kernel_info, CL_KERNEL_CONTEXT, cl::Context) \
1431*61046927SAndroid Build Coastguard Worker F(cl_kernel_info, CL_KERNEL_PROGRAM, cl::Program) \
1432*61046927SAndroid Build Coastguard Worker \
1433*61046927SAndroid Build Coastguard Worker F(cl_kernel_work_group_info, CL_KERNEL_WORK_GROUP_SIZE, ::size_t) \
1434*61046927SAndroid Build Coastguard Worker F(cl_kernel_work_group_info, CL_KERNEL_COMPILE_WORK_GROUP_SIZE, cl::size_t<3>) \
1435*61046927SAndroid Build Coastguard Worker F(cl_kernel_work_group_info, CL_KERNEL_LOCAL_MEM_SIZE, cl_ulong) \
1436*61046927SAndroid Build Coastguard Worker \
1437*61046927SAndroid Build Coastguard Worker F(cl_command_queue_info, CL_QUEUE_CONTEXT, cl::Context) \
1438*61046927SAndroid Build Coastguard Worker F(cl_command_queue_info, CL_QUEUE_DEVICE, cl::Device) \
1439*61046927SAndroid Build Coastguard Worker F(cl_command_queue_info, CL_QUEUE_REFERENCE_COUNT, cl_uint) \
1440*61046927SAndroid Build Coastguard Worker F(cl_command_queue_info, CL_QUEUE_PROPERTIES, cl_command_queue_properties)
1441*61046927SAndroid Build Coastguard Worker
1442*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_1)
1443*61046927SAndroid Build Coastguard Worker #define __PARAM_NAME_INFO_1_1(F) \
1444*61046927SAndroid Build Coastguard Worker F(cl_context_info, CL_CONTEXT_NUM_DEVICES, cl_uint)\
1445*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF, cl_uint) \
1446*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR, cl_uint) \
1447*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT, cl_uint) \
1448*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_INT, cl_uint) \
1449*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG, cl_uint) \
1450*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT, cl_uint) \
1451*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE, cl_uint) \
1452*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF, cl_uint) \
1453*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_HOST_UNIFIED_MEMORY, cl_bool) \
1454*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_OPENCL_C_VERSION, STRING_CLASS) \
1455*61046927SAndroid Build Coastguard Worker \
1456*61046927SAndroid Build Coastguard Worker F(cl_mem_info, CL_MEM_ASSOCIATED_MEMOBJECT, cl::Memory) \
1457*61046927SAndroid Build Coastguard Worker F(cl_mem_info, CL_MEM_OFFSET, ::size_t) \
1458*61046927SAndroid Build Coastguard Worker \
1459*61046927SAndroid Build Coastguard Worker F(cl_kernel_work_group_info, CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, ::size_t) \
1460*61046927SAndroid Build Coastguard Worker F(cl_kernel_work_group_info, CL_KERNEL_PRIVATE_MEM_SIZE, cl_ulong) \
1461*61046927SAndroid Build Coastguard Worker \
1462*61046927SAndroid Build Coastguard Worker F(cl_event_info, CL_EVENT_CONTEXT, cl::Context)
1463*61046927SAndroid Build Coastguard Worker #endif // CL_VERSION_1_1
1464*61046927SAndroid Build Coastguard Worker
1465*61046927SAndroid Build Coastguard Worker
1466*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
1467*61046927SAndroid Build Coastguard Worker #define __PARAM_NAME_INFO_1_2(F) \
1468*61046927SAndroid Build Coastguard Worker F(cl_image_info, CL_IMAGE_ARRAY_SIZE, ::size_t) \
1469*61046927SAndroid Build Coastguard Worker F(cl_image_info, CL_IMAGE_BUFFER, cl::Buffer) \
1470*61046927SAndroid Build Coastguard Worker F(cl_image_info, CL_IMAGE_NUM_MIP_LEVELS, cl_uint) \
1471*61046927SAndroid Build Coastguard Worker F(cl_image_info, CL_IMAGE_NUM_SAMPLES, cl_uint) \
1472*61046927SAndroid Build Coastguard Worker \
1473*61046927SAndroid Build Coastguard Worker F(cl_program_info, CL_PROGRAM_NUM_KERNELS, ::size_t) \
1474*61046927SAndroid Build Coastguard Worker F(cl_program_info, CL_PROGRAM_KERNEL_NAMES, STRING_CLASS) \
1475*61046927SAndroid Build Coastguard Worker \
1476*61046927SAndroid Build Coastguard Worker F(cl_program_build_info, CL_PROGRAM_BINARY_TYPE, cl_program_binary_type) \
1477*61046927SAndroid Build Coastguard Worker \
1478*61046927SAndroid Build Coastguard Worker F(cl_kernel_info, CL_KERNEL_ATTRIBUTES, STRING_CLASS) \
1479*61046927SAndroid Build Coastguard Worker \
1480*61046927SAndroid Build Coastguard Worker F(cl_kernel_arg_info, CL_KERNEL_ARG_ADDRESS_QUALIFIER, cl_kernel_arg_address_qualifier) \
1481*61046927SAndroid Build Coastguard Worker F(cl_kernel_arg_info, CL_KERNEL_ARG_ACCESS_QUALIFIER, cl_kernel_arg_access_qualifier) \
1482*61046927SAndroid Build Coastguard Worker F(cl_kernel_arg_info, CL_KERNEL_ARG_TYPE_NAME, STRING_CLASS) \
1483*61046927SAndroid Build Coastguard Worker F(cl_kernel_arg_info, CL_KERNEL_ARG_TYPE_QUALIFIER, cl_kernel_arg_type_qualifier) \
1484*61046927SAndroid Build Coastguard Worker F(cl_kernel_arg_info, CL_KERNEL_ARG_NAME, STRING_CLASS) \
1485*61046927SAndroid Build Coastguard Worker \
1486*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_IMAGE_MAX_BUFFER_SIZE, ::size_t) \
1487*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_IMAGE_MAX_ARRAY_SIZE, ::size_t) \
1488*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_LINKER_AVAILABLE, cl_bool) \
1489*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_BUILT_IN_KERNELS, STRING_CLASS) \
1490*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PRINTF_BUFFER_SIZE, ::size_t) \
1491*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PREFERRED_INTEROP_USER_SYNC, cl_bool) \
1492*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PARENT_DEVICE, cl_device_id) \
1493*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PARTITION_MAX_SUB_DEVICES, cl_uint) \
1494*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PARTITION_PROPERTIES, VECTOR_CLASS<cl_device_partition_property>) \
1495*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PARTITION_AFFINITY_DOMAIN, cl_device_affinity_domain) \
1496*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PARTITION_TYPE, VECTOR_CLASS<cl_device_partition_property>) \
1497*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_REFERENCE_COUNT, cl_uint)
1498*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
1499*61046927SAndroid Build Coastguard Worker
1500*61046927SAndroid Build Coastguard Worker #if defined(USE_CL_DEVICE_FISSION)
1501*61046927SAndroid Build Coastguard Worker #define __PARAM_NAME_DEVICE_FISSION(F) \
1502*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PARENT_DEVICE_EXT, cl_device_id) \
1503*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PARTITION_TYPES_EXT, VECTOR_CLASS<cl_device_partition_property_ext>) \
1504*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_AFFINITY_DOMAINS_EXT, VECTOR_CLASS<cl_device_partition_property_ext>) \
1505*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_REFERENCE_COUNT_EXT , cl_uint) \
1506*61046927SAndroid Build Coastguard Worker F(cl_device_info, CL_DEVICE_PARTITION_STYLE_EXT, VECTOR_CLASS<cl_device_partition_property_ext>)
1507*61046927SAndroid Build Coastguard Worker #endif // USE_CL_DEVICE_FISSION
1508*61046927SAndroid Build Coastguard Worker
1509*61046927SAndroid Build Coastguard Worker template <typename enum_type, cl_int Name>
1510*61046927SAndroid Build Coastguard Worker struct param_traits {};
1511*61046927SAndroid Build Coastguard Worker
1512*61046927SAndroid Build Coastguard Worker #define __CL_DECLARE_PARAM_TRAITS(token, param_name, T) \
1513*61046927SAndroid Build Coastguard Worker struct token; \
1514*61046927SAndroid Build Coastguard Worker template<> \
1515*61046927SAndroid Build Coastguard Worker struct param_traits<detail:: token,param_name> \
1516*61046927SAndroid Build Coastguard Worker { \
1517*61046927SAndroid Build Coastguard Worker enum { value = param_name }; \
1518*61046927SAndroid Build Coastguard Worker typedef T param_type; \
1519*61046927SAndroid Build Coastguard Worker };
1520*61046927SAndroid Build Coastguard Worker
1521*61046927SAndroid Build Coastguard Worker __PARAM_NAME_INFO_1_0(__CL_DECLARE_PARAM_TRAITS)
1522*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_1)
1523*61046927SAndroid Build Coastguard Worker __PARAM_NAME_INFO_1_1(__CL_DECLARE_PARAM_TRAITS)
1524*61046927SAndroid Build Coastguard Worker #endif // CL_VERSION_1_1
1525*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
1526*61046927SAndroid Build Coastguard Worker __PARAM_NAME_INFO_1_2(__CL_DECLARE_PARAM_TRAITS)
1527*61046927SAndroid Build Coastguard Worker #endif // CL_VERSION_1_1
1528*61046927SAndroid Build Coastguard Worker
1529*61046927SAndroid Build Coastguard Worker #if defined(USE_CL_DEVICE_FISSION)
1530*61046927SAndroid Build Coastguard Worker __PARAM_NAME_DEVICE_FISSION(__CL_DECLARE_PARAM_TRAITS);
1531*61046927SAndroid Build Coastguard Worker #endif // USE_CL_DEVICE_FISSION
1532*61046927SAndroid Build Coastguard Worker
1533*61046927SAndroid Build Coastguard Worker #ifdef CL_PLATFORM_ICD_SUFFIX_KHR
__CL_DECLARE_PARAM_TRAITS(cl_platform_info,CL_PLATFORM_ICD_SUFFIX_KHR,STRING_CLASS)1534*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_platform_info, CL_PLATFORM_ICD_SUFFIX_KHR, STRING_CLASS)
1535*61046927SAndroid Build Coastguard Worker #endif
1536*61046927SAndroid Build Coastguard Worker
1537*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_PROFILING_TIMER_OFFSET_AMD
1538*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_PROFILING_TIMER_OFFSET_AMD, cl_ulong)
1539*61046927SAndroid Build Coastguard Worker #endif
1540*61046927SAndroid Build Coastguard Worker
1541*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_GLOBAL_FREE_MEMORY_AMD
1542*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_GLOBAL_FREE_MEMORY_AMD, VECTOR_CLASS< ::size_t>)
1543*61046927SAndroid Build Coastguard Worker #endif
1544*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD
1545*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD, cl_uint)
1546*61046927SAndroid Build Coastguard Worker #endif
1547*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_SIMD_WIDTH_AMD
1548*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_SIMD_WIDTH_AMD, cl_uint)
1549*61046927SAndroid Build Coastguard Worker #endif
1550*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD
1551*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD, cl_uint)
1552*61046927SAndroid Build Coastguard Worker #endif
1553*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_WAVEFRONT_WIDTH_AMD
1554*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_WAVEFRONT_WIDTH_AMD, cl_uint)
1555*61046927SAndroid Build Coastguard Worker #endif
1556*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD
1557*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD, cl_uint)
1558*61046927SAndroid Build Coastguard Worker #endif
1559*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD
1560*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD, cl_uint)
1561*61046927SAndroid Build Coastguard Worker #endif
1562*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD
1563*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD, cl_uint)
1564*61046927SAndroid Build Coastguard Worker #endif
1565*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD
1566*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD, cl_uint)
1567*61046927SAndroid Build Coastguard Worker #endif
1568*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_LOCAL_MEM_BANKS_AMD
1569*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_LOCAL_MEM_BANKS_AMD, cl_uint)
1570*61046927SAndroid Build Coastguard Worker #endif
1571*61046927SAndroid Build Coastguard Worker
1572*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV
1573*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV, cl_uint)
1574*61046927SAndroid Build Coastguard Worker #endif
1575*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV
1576*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV, cl_uint)
1577*61046927SAndroid Build Coastguard Worker #endif
1578*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_REGISTERS_PER_BLOCK_NV
1579*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_REGISTERS_PER_BLOCK_NV, cl_uint)
1580*61046927SAndroid Build Coastguard Worker #endif
1581*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_WARP_SIZE_NV
1582*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_WARP_SIZE_NV, cl_uint)
1583*61046927SAndroid Build Coastguard Worker #endif
1584*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_GPU_OVERLAP_NV
1585*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_GPU_OVERLAP_NV, cl_bool)
1586*61046927SAndroid Build Coastguard Worker #endif
1587*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV
1588*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV, cl_bool)
1589*61046927SAndroid Build Coastguard Worker #endif
1590*61046927SAndroid Build Coastguard Worker #ifdef CL_DEVICE_INTEGRATED_MEMORY_NV
1591*61046927SAndroid Build Coastguard Worker __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_INTEGRATED_MEMORY_NV, cl_bool)
1592*61046927SAndroid Build Coastguard Worker #endif
1593*61046927SAndroid Build Coastguard Worker
1594*61046927SAndroid Build Coastguard Worker // Convenience functions
1595*61046927SAndroid Build Coastguard Worker
1596*61046927SAndroid Build Coastguard Worker template <typename Func, typename T>
1597*61046927SAndroid Build Coastguard Worker inline cl_int
1598*61046927SAndroid Build Coastguard Worker getInfo(Func f, cl_uint name, T* param)
1599*61046927SAndroid Build Coastguard Worker {
1600*61046927SAndroid Build Coastguard Worker return getInfoHelper(f, name, param, 0);
1601*61046927SAndroid Build Coastguard Worker }
1602*61046927SAndroid Build Coastguard Worker
1603*61046927SAndroid Build Coastguard Worker template <typename Func, typename Arg0>
1604*61046927SAndroid Build Coastguard Worker struct GetInfoFunctor0
1605*61046927SAndroid Build Coastguard Worker {
1606*61046927SAndroid Build Coastguard Worker Func f_; const Arg0& arg0_;
operator ()cl::detail::GetInfoFunctor01607*61046927SAndroid Build Coastguard Worker cl_int operator ()(
1608*61046927SAndroid Build Coastguard Worker cl_uint param, ::size_t size, void* value, ::size_t* size_ret)
1609*61046927SAndroid Build Coastguard Worker { return f_(arg0_, param, size, value, size_ret); }
1610*61046927SAndroid Build Coastguard Worker };
1611*61046927SAndroid Build Coastguard Worker
1612*61046927SAndroid Build Coastguard Worker template <typename Func, typename Arg0, typename Arg1>
1613*61046927SAndroid Build Coastguard Worker struct GetInfoFunctor1
1614*61046927SAndroid Build Coastguard Worker {
1615*61046927SAndroid Build Coastguard Worker Func f_; const Arg0& arg0_; const Arg1& arg1_;
operator ()cl::detail::GetInfoFunctor11616*61046927SAndroid Build Coastguard Worker cl_int operator ()(
1617*61046927SAndroid Build Coastguard Worker cl_uint param, ::size_t size, void* value, ::size_t* size_ret)
1618*61046927SAndroid Build Coastguard Worker { return f_(arg0_, arg1_, param, size, value, size_ret); }
1619*61046927SAndroid Build Coastguard Worker };
1620*61046927SAndroid Build Coastguard Worker
1621*61046927SAndroid Build Coastguard Worker template <typename Func, typename Arg0, typename T>
1622*61046927SAndroid Build Coastguard Worker inline cl_int
getInfo(Func f,const Arg0 & arg0,cl_uint name,T * param)1623*61046927SAndroid Build Coastguard Worker getInfo(Func f, const Arg0& arg0, cl_uint name, T* param)
1624*61046927SAndroid Build Coastguard Worker {
1625*61046927SAndroid Build Coastguard Worker GetInfoFunctor0<Func, Arg0> f0 = { f, arg0 };
1626*61046927SAndroid Build Coastguard Worker return getInfoHelper(f0, name, param, 0);
1627*61046927SAndroid Build Coastguard Worker }
1628*61046927SAndroid Build Coastguard Worker
1629*61046927SAndroid Build Coastguard Worker template <typename Func, typename Arg0, typename Arg1, typename T>
1630*61046927SAndroid Build Coastguard Worker inline cl_int
getInfo(Func f,const Arg0 & arg0,const Arg1 & arg1,cl_uint name,T * param)1631*61046927SAndroid Build Coastguard Worker getInfo(Func f, const Arg0& arg0, const Arg1& arg1, cl_uint name, T* param)
1632*61046927SAndroid Build Coastguard Worker {
1633*61046927SAndroid Build Coastguard Worker GetInfoFunctor1<Func, Arg0, Arg1> f0 = { f, arg0, arg1 };
1634*61046927SAndroid Build Coastguard Worker return getInfoHelper(f0, name, param, 0);
1635*61046927SAndroid Build Coastguard Worker }
1636*61046927SAndroid Build Coastguard Worker
1637*61046927SAndroid Build Coastguard Worker template<typename T>
1638*61046927SAndroid Build Coastguard Worker struct ReferenceHandler
1639*61046927SAndroid Build Coastguard Worker { };
1640*61046927SAndroid Build Coastguard Worker
1641*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
1642*61046927SAndroid Build Coastguard Worker /**
1643*61046927SAndroid Build Coastguard Worker * OpenCL 1.2 devices do have retain/release.
1644*61046927SAndroid Build Coastguard Worker */
1645*61046927SAndroid Build Coastguard Worker template <>
1646*61046927SAndroid Build Coastguard Worker struct ReferenceHandler<cl_device_id>
1647*61046927SAndroid Build Coastguard Worker {
1648*61046927SAndroid Build Coastguard Worker /**
1649*61046927SAndroid Build Coastguard Worker * Retain the device.
1650*61046927SAndroid Build Coastguard Worker * \param device A valid device created using createSubDevices
1651*61046927SAndroid Build Coastguard Worker * \return
1652*61046927SAndroid Build Coastguard Worker * CL_SUCCESS if the function executed successfully.
1653*61046927SAndroid Build Coastguard Worker * CL_INVALID_DEVICE if device was not a valid subdevice
1654*61046927SAndroid Build Coastguard Worker * CL_OUT_OF_RESOURCES
1655*61046927SAndroid Build Coastguard Worker * CL_OUT_OF_HOST_MEMORY
1656*61046927SAndroid Build Coastguard Worker */
retaincl::detail::ReferenceHandler1657*61046927SAndroid Build Coastguard Worker static cl_int retain(cl_device_id device)
1658*61046927SAndroid Build Coastguard Worker { return ::clRetainDevice(device); }
1659*61046927SAndroid Build Coastguard Worker /**
1660*61046927SAndroid Build Coastguard Worker * Retain the device.
1661*61046927SAndroid Build Coastguard Worker * \param device A valid device created using createSubDevices
1662*61046927SAndroid Build Coastguard Worker * \return
1663*61046927SAndroid Build Coastguard Worker * CL_SUCCESS if the function executed successfully.
1664*61046927SAndroid Build Coastguard Worker * CL_INVALID_DEVICE if device was not a valid subdevice
1665*61046927SAndroid Build Coastguard Worker * CL_OUT_OF_RESOURCES
1666*61046927SAndroid Build Coastguard Worker * CL_OUT_OF_HOST_MEMORY
1667*61046927SAndroid Build Coastguard Worker */
releasecl::detail::ReferenceHandler1668*61046927SAndroid Build Coastguard Worker static cl_int release(cl_device_id device)
1669*61046927SAndroid Build Coastguard Worker { return ::clReleaseDevice(device); }
1670*61046927SAndroid Build Coastguard Worker };
1671*61046927SAndroid Build Coastguard Worker #else // #if defined(CL_VERSION_1_2)
1672*61046927SAndroid Build Coastguard Worker /**
1673*61046927SAndroid Build Coastguard Worker * OpenCL 1.1 devices do not have retain/release.
1674*61046927SAndroid Build Coastguard Worker */
1675*61046927SAndroid Build Coastguard Worker template <>
1676*61046927SAndroid Build Coastguard Worker struct ReferenceHandler<cl_device_id>
1677*61046927SAndroid Build Coastguard Worker {
1678*61046927SAndroid Build Coastguard Worker // cl_device_id does not have retain().
retaincl::detail::ReferenceHandler1679*61046927SAndroid Build Coastguard Worker static cl_int retain(cl_device_id)
1680*61046927SAndroid Build Coastguard Worker { return CL_SUCCESS; }
1681*61046927SAndroid Build Coastguard Worker // cl_device_id does not have release().
releasecl::detail::ReferenceHandler1682*61046927SAndroid Build Coastguard Worker static cl_int release(cl_device_id)
1683*61046927SAndroid Build Coastguard Worker { return CL_SUCCESS; }
1684*61046927SAndroid Build Coastguard Worker };
1685*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
1686*61046927SAndroid Build Coastguard Worker
1687*61046927SAndroid Build Coastguard Worker template <>
1688*61046927SAndroid Build Coastguard Worker struct ReferenceHandler<cl_platform_id>
1689*61046927SAndroid Build Coastguard Worker {
1690*61046927SAndroid Build Coastguard Worker // cl_platform_id does not have retain().
retaincl::detail::ReferenceHandler1691*61046927SAndroid Build Coastguard Worker static cl_int retain(cl_platform_id)
1692*61046927SAndroid Build Coastguard Worker { return CL_SUCCESS; }
1693*61046927SAndroid Build Coastguard Worker // cl_platform_id does not have release().
releasecl::detail::ReferenceHandler1694*61046927SAndroid Build Coastguard Worker static cl_int release(cl_platform_id)
1695*61046927SAndroid Build Coastguard Worker { return CL_SUCCESS; }
1696*61046927SAndroid Build Coastguard Worker };
1697*61046927SAndroid Build Coastguard Worker
1698*61046927SAndroid Build Coastguard Worker template <>
1699*61046927SAndroid Build Coastguard Worker struct ReferenceHandler<cl_context>
1700*61046927SAndroid Build Coastguard Worker {
retaincl::detail::ReferenceHandler1701*61046927SAndroid Build Coastguard Worker static cl_int retain(cl_context context)
1702*61046927SAndroid Build Coastguard Worker { return ::clRetainContext(context); }
releasecl::detail::ReferenceHandler1703*61046927SAndroid Build Coastguard Worker static cl_int release(cl_context context)
1704*61046927SAndroid Build Coastguard Worker { return ::clReleaseContext(context); }
1705*61046927SAndroid Build Coastguard Worker };
1706*61046927SAndroid Build Coastguard Worker
1707*61046927SAndroid Build Coastguard Worker template <>
1708*61046927SAndroid Build Coastguard Worker struct ReferenceHandler<cl_command_queue>
1709*61046927SAndroid Build Coastguard Worker {
retaincl::detail::ReferenceHandler1710*61046927SAndroid Build Coastguard Worker static cl_int retain(cl_command_queue queue)
1711*61046927SAndroid Build Coastguard Worker { return ::clRetainCommandQueue(queue); }
releasecl::detail::ReferenceHandler1712*61046927SAndroid Build Coastguard Worker static cl_int release(cl_command_queue queue)
1713*61046927SAndroid Build Coastguard Worker { return ::clReleaseCommandQueue(queue); }
1714*61046927SAndroid Build Coastguard Worker };
1715*61046927SAndroid Build Coastguard Worker
1716*61046927SAndroid Build Coastguard Worker template <>
1717*61046927SAndroid Build Coastguard Worker struct ReferenceHandler<cl_mem>
1718*61046927SAndroid Build Coastguard Worker {
retaincl::detail::ReferenceHandler1719*61046927SAndroid Build Coastguard Worker static cl_int retain(cl_mem memory)
1720*61046927SAndroid Build Coastguard Worker { return ::clRetainMemObject(memory); }
releasecl::detail::ReferenceHandler1721*61046927SAndroid Build Coastguard Worker static cl_int release(cl_mem memory)
1722*61046927SAndroid Build Coastguard Worker { return ::clReleaseMemObject(memory); }
1723*61046927SAndroid Build Coastguard Worker };
1724*61046927SAndroid Build Coastguard Worker
1725*61046927SAndroid Build Coastguard Worker template <>
1726*61046927SAndroid Build Coastguard Worker struct ReferenceHandler<cl_sampler>
1727*61046927SAndroid Build Coastguard Worker {
retaincl::detail::ReferenceHandler1728*61046927SAndroid Build Coastguard Worker static cl_int retain(cl_sampler sampler)
1729*61046927SAndroid Build Coastguard Worker { return ::clRetainSampler(sampler); }
releasecl::detail::ReferenceHandler1730*61046927SAndroid Build Coastguard Worker static cl_int release(cl_sampler sampler)
1731*61046927SAndroid Build Coastguard Worker { return ::clReleaseSampler(sampler); }
1732*61046927SAndroid Build Coastguard Worker };
1733*61046927SAndroid Build Coastguard Worker
1734*61046927SAndroid Build Coastguard Worker template <>
1735*61046927SAndroid Build Coastguard Worker struct ReferenceHandler<cl_program>
1736*61046927SAndroid Build Coastguard Worker {
retaincl::detail::ReferenceHandler1737*61046927SAndroid Build Coastguard Worker static cl_int retain(cl_program program)
1738*61046927SAndroid Build Coastguard Worker { return ::clRetainProgram(program); }
releasecl::detail::ReferenceHandler1739*61046927SAndroid Build Coastguard Worker static cl_int release(cl_program program)
1740*61046927SAndroid Build Coastguard Worker { return ::clReleaseProgram(program); }
1741*61046927SAndroid Build Coastguard Worker };
1742*61046927SAndroid Build Coastguard Worker
1743*61046927SAndroid Build Coastguard Worker template <>
1744*61046927SAndroid Build Coastguard Worker struct ReferenceHandler<cl_kernel>
1745*61046927SAndroid Build Coastguard Worker {
retaincl::detail::ReferenceHandler1746*61046927SAndroid Build Coastguard Worker static cl_int retain(cl_kernel kernel)
1747*61046927SAndroid Build Coastguard Worker { return ::clRetainKernel(kernel); }
releasecl::detail::ReferenceHandler1748*61046927SAndroid Build Coastguard Worker static cl_int release(cl_kernel kernel)
1749*61046927SAndroid Build Coastguard Worker { return ::clReleaseKernel(kernel); }
1750*61046927SAndroid Build Coastguard Worker };
1751*61046927SAndroid Build Coastguard Worker
1752*61046927SAndroid Build Coastguard Worker template <>
1753*61046927SAndroid Build Coastguard Worker struct ReferenceHandler<cl_event>
1754*61046927SAndroid Build Coastguard Worker {
retaincl::detail::ReferenceHandler1755*61046927SAndroid Build Coastguard Worker static cl_int retain(cl_event event)
1756*61046927SAndroid Build Coastguard Worker { return ::clRetainEvent(event); }
releasecl::detail::ReferenceHandler1757*61046927SAndroid Build Coastguard Worker static cl_int release(cl_event event)
1758*61046927SAndroid Build Coastguard Worker { return ::clReleaseEvent(event); }
1759*61046927SAndroid Build Coastguard Worker };
1760*61046927SAndroid Build Coastguard Worker
1761*61046927SAndroid Build Coastguard Worker
1762*61046927SAndroid Build Coastguard Worker // Extracts version number with major in the upper 16 bits, minor in the lower 16
getVersion(const char * versionInfo)1763*61046927SAndroid Build Coastguard Worker static cl_uint getVersion(const char *versionInfo)
1764*61046927SAndroid Build Coastguard Worker {
1765*61046927SAndroid Build Coastguard Worker int highVersion = 0;
1766*61046927SAndroid Build Coastguard Worker int lowVersion = 0;
1767*61046927SAndroid Build Coastguard Worker int index = 7;
1768*61046927SAndroid Build Coastguard Worker while(versionInfo[index] != '.' ) {
1769*61046927SAndroid Build Coastguard Worker highVersion *= 10;
1770*61046927SAndroid Build Coastguard Worker highVersion += versionInfo[index]-'0';
1771*61046927SAndroid Build Coastguard Worker ++index;
1772*61046927SAndroid Build Coastguard Worker }
1773*61046927SAndroid Build Coastguard Worker ++index;
1774*61046927SAndroid Build Coastguard Worker while(versionInfo[index] != ' ' && versionInfo[index] != '\0') {
1775*61046927SAndroid Build Coastguard Worker lowVersion *= 10;
1776*61046927SAndroid Build Coastguard Worker lowVersion += versionInfo[index]-'0';
1777*61046927SAndroid Build Coastguard Worker ++index;
1778*61046927SAndroid Build Coastguard Worker }
1779*61046927SAndroid Build Coastguard Worker return (highVersion << 16) | lowVersion;
1780*61046927SAndroid Build Coastguard Worker }
1781*61046927SAndroid Build Coastguard Worker
getPlatformVersion(cl_platform_id platform)1782*61046927SAndroid Build Coastguard Worker static cl_uint getPlatformVersion(cl_platform_id platform)
1783*61046927SAndroid Build Coastguard Worker {
1784*61046927SAndroid Build Coastguard Worker ::size_t size = 0;
1785*61046927SAndroid Build Coastguard Worker clGetPlatformInfo(platform, CL_PLATFORM_VERSION, 0, NULL, &size);
1786*61046927SAndroid Build Coastguard Worker char *versionInfo = (char *) alloca(size);
1787*61046927SAndroid Build Coastguard Worker clGetPlatformInfo(platform, CL_PLATFORM_VERSION, size, &versionInfo[0], &size);
1788*61046927SAndroid Build Coastguard Worker return getVersion(versionInfo);
1789*61046927SAndroid Build Coastguard Worker }
1790*61046927SAndroid Build Coastguard Worker
getDevicePlatformVersion(cl_device_id device)1791*61046927SAndroid Build Coastguard Worker static cl_uint getDevicePlatformVersion(cl_device_id device)
1792*61046927SAndroid Build Coastguard Worker {
1793*61046927SAndroid Build Coastguard Worker cl_platform_id platform;
1794*61046927SAndroid Build Coastguard Worker clGetDeviceInfo(device, CL_DEVICE_PLATFORM, sizeof(platform), &platform, NULL);
1795*61046927SAndroid Build Coastguard Worker return getPlatformVersion(platform);
1796*61046927SAndroid Build Coastguard Worker }
1797*61046927SAndroid Build Coastguard Worker
1798*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2) && defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
getContextPlatformVersion(cl_context context)1799*61046927SAndroid Build Coastguard Worker static cl_uint getContextPlatformVersion(cl_context context)
1800*61046927SAndroid Build Coastguard Worker {
1801*61046927SAndroid Build Coastguard Worker // The platform cannot be queried directly, so we first have to grab a
1802*61046927SAndroid Build Coastguard Worker // device and obtain its context
1803*61046927SAndroid Build Coastguard Worker ::size_t size = 0;
1804*61046927SAndroid Build Coastguard Worker clGetContextInfo(context, CL_CONTEXT_DEVICES, 0, NULL, &size);
1805*61046927SAndroid Build Coastguard Worker if (size == 0)
1806*61046927SAndroid Build Coastguard Worker return 0;
1807*61046927SAndroid Build Coastguard Worker cl_device_id *devices = (cl_device_id *) alloca(size);
1808*61046927SAndroid Build Coastguard Worker clGetContextInfo(context, CL_CONTEXT_DEVICES, size, devices, NULL);
1809*61046927SAndroid Build Coastguard Worker return getDevicePlatformVersion(devices[0]);
1810*61046927SAndroid Build Coastguard Worker }
1811*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2) && defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
1812*61046927SAndroid Build Coastguard Worker
1813*61046927SAndroid Build Coastguard Worker template <typename T>
1814*61046927SAndroid Build Coastguard Worker class Wrapper
1815*61046927SAndroid Build Coastguard Worker {
1816*61046927SAndroid Build Coastguard Worker public:
1817*61046927SAndroid Build Coastguard Worker typedef T cl_type;
1818*61046927SAndroid Build Coastguard Worker
1819*61046927SAndroid Build Coastguard Worker protected:
1820*61046927SAndroid Build Coastguard Worker cl_type object_;
1821*61046927SAndroid Build Coastguard Worker
1822*61046927SAndroid Build Coastguard Worker public:
Wrapper()1823*61046927SAndroid Build Coastguard Worker Wrapper() : object_(NULL) { }
1824*61046927SAndroid Build Coastguard Worker
Wrapper(const cl_type & obj)1825*61046927SAndroid Build Coastguard Worker Wrapper(const cl_type &obj) : object_(obj) { }
1826*61046927SAndroid Build Coastguard Worker
~Wrapper()1827*61046927SAndroid Build Coastguard Worker ~Wrapper()
1828*61046927SAndroid Build Coastguard Worker {
1829*61046927SAndroid Build Coastguard Worker if (object_ != NULL) { release(); }
1830*61046927SAndroid Build Coastguard Worker }
1831*61046927SAndroid Build Coastguard Worker
Wrapper(const Wrapper<cl_type> & rhs)1832*61046927SAndroid Build Coastguard Worker Wrapper(const Wrapper<cl_type>& rhs)
1833*61046927SAndroid Build Coastguard Worker {
1834*61046927SAndroid Build Coastguard Worker object_ = rhs.object_;
1835*61046927SAndroid Build Coastguard Worker if (object_ != NULL) { detail::errHandler(retain(), __RETAIN_ERR); }
1836*61046927SAndroid Build Coastguard Worker }
1837*61046927SAndroid Build Coastguard Worker
1838*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
Wrapper(Wrapper<cl_type> && rhs)1839*61046927SAndroid Build Coastguard Worker Wrapper(Wrapper<cl_type>&& rhs) CL_HPP_NOEXCEPT
1840*61046927SAndroid Build Coastguard Worker {
1841*61046927SAndroid Build Coastguard Worker object_ = rhs.object_;
1842*61046927SAndroid Build Coastguard Worker rhs.object_ = NULL;
1843*61046927SAndroid Build Coastguard Worker }
1844*61046927SAndroid Build Coastguard Worker #endif
1845*61046927SAndroid Build Coastguard Worker
operator =(const Wrapper<cl_type> & rhs)1846*61046927SAndroid Build Coastguard Worker Wrapper<cl_type>& operator = (const Wrapper<cl_type>& rhs)
1847*61046927SAndroid Build Coastguard Worker {
1848*61046927SAndroid Build Coastguard Worker if (this != &rhs) {
1849*61046927SAndroid Build Coastguard Worker if (object_ != NULL) { detail::errHandler(release(), __RELEASE_ERR); }
1850*61046927SAndroid Build Coastguard Worker object_ = rhs.object_;
1851*61046927SAndroid Build Coastguard Worker if (object_ != NULL) { detail::errHandler(retain(), __RETAIN_ERR); }
1852*61046927SAndroid Build Coastguard Worker }
1853*61046927SAndroid Build Coastguard Worker return *this;
1854*61046927SAndroid Build Coastguard Worker }
1855*61046927SAndroid Build Coastguard Worker
1856*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
operator =(Wrapper<cl_type> && rhs)1857*61046927SAndroid Build Coastguard Worker Wrapper<cl_type>& operator = (Wrapper<cl_type>&& rhs)
1858*61046927SAndroid Build Coastguard Worker {
1859*61046927SAndroid Build Coastguard Worker if (this != &rhs) {
1860*61046927SAndroid Build Coastguard Worker if (object_ != NULL) { detail::errHandler(release(), __RELEASE_ERR); }
1861*61046927SAndroid Build Coastguard Worker object_ = rhs.object_;
1862*61046927SAndroid Build Coastguard Worker rhs.object_ = NULL;
1863*61046927SAndroid Build Coastguard Worker }
1864*61046927SAndroid Build Coastguard Worker return *this;
1865*61046927SAndroid Build Coastguard Worker }
1866*61046927SAndroid Build Coastguard Worker #endif
1867*61046927SAndroid Build Coastguard Worker
operator =(const cl_type & rhs)1868*61046927SAndroid Build Coastguard Worker Wrapper<cl_type>& operator = (const cl_type &rhs)
1869*61046927SAndroid Build Coastguard Worker {
1870*61046927SAndroid Build Coastguard Worker if (object_ != NULL) { detail::errHandler(release(), __RELEASE_ERR); }
1871*61046927SAndroid Build Coastguard Worker object_ = rhs;
1872*61046927SAndroid Build Coastguard Worker return *this;
1873*61046927SAndroid Build Coastguard Worker }
1874*61046927SAndroid Build Coastguard Worker
operator ()() const1875*61046927SAndroid Build Coastguard Worker cl_type operator ()() const { return object_; }
1876*61046927SAndroid Build Coastguard Worker
operator ()()1877*61046927SAndroid Build Coastguard Worker cl_type& operator ()() { return object_; }
1878*61046927SAndroid Build Coastguard Worker
1879*61046927SAndroid Build Coastguard Worker protected:
1880*61046927SAndroid Build Coastguard Worker template<typename Func, typename U>
1881*61046927SAndroid Build Coastguard Worker friend inline cl_int getInfoHelper(Func, cl_uint, U*, int, typename U::cl_type);
1882*61046927SAndroid Build Coastguard Worker
retain() const1883*61046927SAndroid Build Coastguard Worker cl_int retain() const
1884*61046927SAndroid Build Coastguard Worker {
1885*61046927SAndroid Build Coastguard Worker return ReferenceHandler<cl_type>::retain(object_);
1886*61046927SAndroid Build Coastguard Worker }
1887*61046927SAndroid Build Coastguard Worker
release() const1888*61046927SAndroid Build Coastguard Worker cl_int release() const
1889*61046927SAndroid Build Coastguard Worker {
1890*61046927SAndroid Build Coastguard Worker return ReferenceHandler<cl_type>::release(object_);
1891*61046927SAndroid Build Coastguard Worker }
1892*61046927SAndroid Build Coastguard Worker };
1893*61046927SAndroid Build Coastguard Worker
1894*61046927SAndroid Build Coastguard Worker template <>
1895*61046927SAndroid Build Coastguard Worker class Wrapper<cl_device_id>
1896*61046927SAndroid Build Coastguard Worker {
1897*61046927SAndroid Build Coastguard Worker public:
1898*61046927SAndroid Build Coastguard Worker typedef cl_device_id cl_type;
1899*61046927SAndroid Build Coastguard Worker
1900*61046927SAndroid Build Coastguard Worker protected:
1901*61046927SAndroid Build Coastguard Worker cl_type object_;
1902*61046927SAndroid Build Coastguard Worker bool referenceCountable_;
1903*61046927SAndroid Build Coastguard Worker
isReferenceCountable(cl_device_id device)1904*61046927SAndroid Build Coastguard Worker static bool isReferenceCountable(cl_device_id device)
1905*61046927SAndroid Build Coastguard Worker {
1906*61046927SAndroid Build Coastguard Worker bool retVal = false;
1907*61046927SAndroid Build Coastguard Worker if (device != NULL) {
1908*61046927SAndroid Build Coastguard Worker int version = getDevicePlatformVersion(device);
1909*61046927SAndroid Build Coastguard Worker if(version > ((1 << 16) + 1)) {
1910*61046927SAndroid Build Coastguard Worker retVal = true;
1911*61046927SAndroid Build Coastguard Worker }
1912*61046927SAndroid Build Coastguard Worker }
1913*61046927SAndroid Build Coastguard Worker return retVal;
1914*61046927SAndroid Build Coastguard Worker }
1915*61046927SAndroid Build Coastguard Worker
1916*61046927SAndroid Build Coastguard Worker public:
Wrapper()1917*61046927SAndroid Build Coastguard Worker Wrapper() : object_(NULL), referenceCountable_(false)
1918*61046927SAndroid Build Coastguard Worker {
1919*61046927SAndroid Build Coastguard Worker }
1920*61046927SAndroid Build Coastguard Worker
Wrapper(const cl_type & obj)1921*61046927SAndroid Build Coastguard Worker Wrapper(const cl_type &obj) : object_(obj), referenceCountable_(false)
1922*61046927SAndroid Build Coastguard Worker {
1923*61046927SAndroid Build Coastguard Worker referenceCountable_ = isReferenceCountable(obj);
1924*61046927SAndroid Build Coastguard Worker }
1925*61046927SAndroid Build Coastguard Worker
~Wrapper()1926*61046927SAndroid Build Coastguard Worker ~Wrapper()
1927*61046927SAndroid Build Coastguard Worker {
1928*61046927SAndroid Build Coastguard Worker if (object_ != NULL) { release(); }
1929*61046927SAndroid Build Coastguard Worker }
1930*61046927SAndroid Build Coastguard Worker
Wrapper(const Wrapper<cl_type> & rhs)1931*61046927SAndroid Build Coastguard Worker Wrapper(const Wrapper<cl_type>& rhs)
1932*61046927SAndroid Build Coastguard Worker {
1933*61046927SAndroid Build Coastguard Worker object_ = rhs.object_;
1934*61046927SAndroid Build Coastguard Worker referenceCountable_ = isReferenceCountable(object_);
1935*61046927SAndroid Build Coastguard Worker if (object_ != NULL) { detail::errHandler(retain(), __RETAIN_ERR); }
1936*61046927SAndroid Build Coastguard Worker }
1937*61046927SAndroid Build Coastguard Worker
1938*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
Wrapper(Wrapper<cl_type> && rhs)1939*61046927SAndroid Build Coastguard Worker Wrapper(Wrapper<cl_type>&& rhs) CL_HPP_NOEXCEPT
1940*61046927SAndroid Build Coastguard Worker {
1941*61046927SAndroid Build Coastguard Worker object_ = rhs.object_;
1942*61046927SAndroid Build Coastguard Worker referenceCountable_ = rhs.referenceCountable_;
1943*61046927SAndroid Build Coastguard Worker rhs.object_ = NULL;
1944*61046927SAndroid Build Coastguard Worker rhs.referenceCountable_ = false;
1945*61046927SAndroid Build Coastguard Worker }
1946*61046927SAndroid Build Coastguard Worker #endif
1947*61046927SAndroid Build Coastguard Worker
operator =(const Wrapper<cl_type> & rhs)1948*61046927SAndroid Build Coastguard Worker Wrapper<cl_type>& operator = (const Wrapper<cl_type>& rhs)
1949*61046927SAndroid Build Coastguard Worker {
1950*61046927SAndroid Build Coastguard Worker if (this != &rhs) {
1951*61046927SAndroid Build Coastguard Worker if (object_ != NULL) { detail::errHandler(release(), __RELEASE_ERR); }
1952*61046927SAndroid Build Coastguard Worker object_ = rhs.object_;
1953*61046927SAndroid Build Coastguard Worker referenceCountable_ = rhs.referenceCountable_;
1954*61046927SAndroid Build Coastguard Worker if (object_ != NULL) { detail::errHandler(retain(), __RETAIN_ERR); }
1955*61046927SAndroid Build Coastguard Worker }
1956*61046927SAndroid Build Coastguard Worker return *this;
1957*61046927SAndroid Build Coastguard Worker }
1958*61046927SAndroid Build Coastguard Worker
1959*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
operator =(Wrapper<cl_type> && rhs)1960*61046927SAndroid Build Coastguard Worker Wrapper<cl_type>& operator = (Wrapper<cl_type>&& rhs)
1961*61046927SAndroid Build Coastguard Worker {
1962*61046927SAndroid Build Coastguard Worker if (this != &rhs) {
1963*61046927SAndroid Build Coastguard Worker if (object_ != NULL) { detail::errHandler(release(), __RELEASE_ERR); }
1964*61046927SAndroid Build Coastguard Worker object_ = rhs.object_;
1965*61046927SAndroid Build Coastguard Worker referenceCountable_ = rhs.referenceCountable_;
1966*61046927SAndroid Build Coastguard Worker rhs.object_ = NULL;
1967*61046927SAndroid Build Coastguard Worker rhs.referenceCountable_ = false;
1968*61046927SAndroid Build Coastguard Worker }
1969*61046927SAndroid Build Coastguard Worker return *this;
1970*61046927SAndroid Build Coastguard Worker }
1971*61046927SAndroid Build Coastguard Worker #endif
1972*61046927SAndroid Build Coastguard Worker
operator =(const cl_type & rhs)1973*61046927SAndroid Build Coastguard Worker Wrapper<cl_type>& operator = (const cl_type &rhs)
1974*61046927SAndroid Build Coastguard Worker {
1975*61046927SAndroid Build Coastguard Worker if (object_ != NULL) { detail::errHandler(release(), __RELEASE_ERR); }
1976*61046927SAndroid Build Coastguard Worker object_ = rhs;
1977*61046927SAndroid Build Coastguard Worker referenceCountable_ = isReferenceCountable(object_);
1978*61046927SAndroid Build Coastguard Worker return *this;
1979*61046927SAndroid Build Coastguard Worker }
1980*61046927SAndroid Build Coastguard Worker
operator ()() const1981*61046927SAndroid Build Coastguard Worker cl_type operator ()() const { return object_; }
1982*61046927SAndroid Build Coastguard Worker
operator ()()1983*61046927SAndroid Build Coastguard Worker cl_type& operator ()() { return object_; }
1984*61046927SAndroid Build Coastguard Worker
1985*61046927SAndroid Build Coastguard Worker protected:
1986*61046927SAndroid Build Coastguard Worker template<typename Func, typename U>
1987*61046927SAndroid Build Coastguard Worker friend inline cl_int getInfoHelper(Func, cl_uint, U*, int, typename U::cl_type);
1988*61046927SAndroid Build Coastguard Worker
1989*61046927SAndroid Build Coastguard Worker template<typename Func, typename U>
1990*61046927SAndroid Build Coastguard Worker friend inline cl_int getInfoHelper(Func, cl_uint, VECTOR_CLASS<U>*, int, typename U::cl_type);
1991*61046927SAndroid Build Coastguard Worker
retain() const1992*61046927SAndroid Build Coastguard Worker cl_int retain() const
1993*61046927SAndroid Build Coastguard Worker {
1994*61046927SAndroid Build Coastguard Worker if( referenceCountable_ ) {
1995*61046927SAndroid Build Coastguard Worker return ReferenceHandler<cl_type>::retain(object_);
1996*61046927SAndroid Build Coastguard Worker }
1997*61046927SAndroid Build Coastguard Worker else {
1998*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
1999*61046927SAndroid Build Coastguard Worker }
2000*61046927SAndroid Build Coastguard Worker }
2001*61046927SAndroid Build Coastguard Worker
release() const2002*61046927SAndroid Build Coastguard Worker cl_int release() const
2003*61046927SAndroid Build Coastguard Worker {
2004*61046927SAndroid Build Coastguard Worker if( referenceCountable_ ) {
2005*61046927SAndroid Build Coastguard Worker return ReferenceHandler<cl_type>::release(object_);
2006*61046927SAndroid Build Coastguard Worker }
2007*61046927SAndroid Build Coastguard Worker else {
2008*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
2009*61046927SAndroid Build Coastguard Worker }
2010*61046927SAndroid Build Coastguard Worker }
2011*61046927SAndroid Build Coastguard Worker };
2012*61046927SAndroid Build Coastguard Worker
2013*61046927SAndroid Build Coastguard Worker } // namespace detail
2014*61046927SAndroid Build Coastguard Worker //! \endcond
2015*61046927SAndroid Build Coastguard Worker
2016*61046927SAndroid Build Coastguard Worker /*! \stuct ImageFormat
2017*61046927SAndroid Build Coastguard Worker * \brief Adds constructors and member functions for cl_image_format.
2018*61046927SAndroid Build Coastguard Worker *
2019*61046927SAndroid Build Coastguard Worker * \see cl_image_format
2020*61046927SAndroid Build Coastguard Worker */
2021*61046927SAndroid Build Coastguard Worker struct ImageFormat : public cl_image_format
2022*61046927SAndroid Build Coastguard Worker {
2023*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - performs no initialization.
ImageFormatcl::ImageFormat2024*61046927SAndroid Build Coastguard Worker ImageFormat(){}
2025*61046927SAndroid Build Coastguard Worker
2026*61046927SAndroid Build Coastguard Worker //! \brief Initializing constructor.
ImageFormatcl::ImageFormat2027*61046927SAndroid Build Coastguard Worker ImageFormat(cl_channel_order order, cl_channel_type type)
2028*61046927SAndroid Build Coastguard Worker {
2029*61046927SAndroid Build Coastguard Worker image_channel_order = order;
2030*61046927SAndroid Build Coastguard Worker image_channel_data_type = type;
2031*61046927SAndroid Build Coastguard Worker }
2032*61046927SAndroid Build Coastguard Worker
2033*61046927SAndroid Build Coastguard Worker //! \brief Assignment operator.
operator =cl::ImageFormat2034*61046927SAndroid Build Coastguard Worker ImageFormat& operator = (const ImageFormat& rhs)
2035*61046927SAndroid Build Coastguard Worker {
2036*61046927SAndroid Build Coastguard Worker if (this != &rhs) {
2037*61046927SAndroid Build Coastguard Worker this->image_channel_data_type = rhs.image_channel_data_type;
2038*61046927SAndroid Build Coastguard Worker this->image_channel_order = rhs.image_channel_order;
2039*61046927SAndroid Build Coastguard Worker }
2040*61046927SAndroid Build Coastguard Worker return *this;
2041*61046927SAndroid Build Coastguard Worker }
2042*61046927SAndroid Build Coastguard Worker };
2043*61046927SAndroid Build Coastguard Worker
2044*61046927SAndroid Build Coastguard Worker /*! \brief Class interface for cl_device_id.
2045*61046927SAndroid Build Coastguard Worker *
2046*61046927SAndroid Build Coastguard Worker * \note Copies of these objects are inexpensive, since they don't 'own'
2047*61046927SAndroid Build Coastguard Worker * any underlying resources or data structures.
2048*61046927SAndroid Build Coastguard Worker *
2049*61046927SAndroid Build Coastguard Worker * \see cl_device_id
2050*61046927SAndroid Build Coastguard Worker */
2051*61046927SAndroid Build Coastguard Worker class Device : public detail::Wrapper<cl_device_id>
2052*61046927SAndroid Build Coastguard Worker {
2053*61046927SAndroid Build Coastguard Worker public:
2054*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
Device()2055*61046927SAndroid Build Coastguard Worker Device() : detail::Wrapper<cl_type>() { }
2056*61046927SAndroid Build Coastguard Worker
2057*61046927SAndroid Build Coastguard Worker /*! \brief Constructor from cl_device_id.
2058*61046927SAndroid Build Coastguard Worker *
2059*61046927SAndroid Build Coastguard Worker * This simply copies the device ID value, which is an inexpensive operation.
2060*61046927SAndroid Build Coastguard Worker */
Device(const cl_device_id & device)2061*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Device(const cl_device_id &device) : detail::Wrapper<cl_type>(device) { }
2062*61046927SAndroid Build Coastguard Worker
2063*61046927SAndroid Build Coastguard Worker /*! \brief Returns the first device on the default context.
2064*61046927SAndroid Build Coastguard Worker *
2065*61046927SAndroid Build Coastguard Worker * \see Context::getDefault()
2066*61046927SAndroid Build Coastguard Worker */
2067*61046927SAndroid Build Coastguard Worker static Device getDefault(cl_int * err = NULL);
2068*61046927SAndroid Build Coastguard Worker
2069*61046927SAndroid Build Coastguard Worker /*! \brief Assignment operator from cl_device_id.
2070*61046927SAndroid Build Coastguard Worker *
2071*61046927SAndroid Build Coastguard Worker * This simply copies the device ID value, which is an inexpensive operation.
2072*61046927SAndroid Build Coastguard Worker */
operator =(const cl_device_id & rhs)2073*61046927SAndroid Build Coastguard Worker Device& operator = (const cl_device_id& rhs)
2074*61046927SAndroid Build Coastguard Worker {
2075*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(rhs);
2076*61046927SAndroid Build Coastguard Worker return *this;
2077*61046927SAndroid Build Coastguard Worker }
2078*61046927SAndroid Build Coastguard Worker
2079*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
2080*61046927SAndroid Build Coastguard Worker * Required for MSVC.
2081*61046927SAndroid Build Coastguard Worker */
Device(const Device & dev)2082*61046927SAndroid Build Coastguard Worker Device(const Device& dev) : detail::Wrapper<cl_type>(dev) {}
2083*61046927SAndroid Build Coastguard Worker
2084*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
2085*61046927SAndroid Build Coastguard Worker * Required for MSVC.
2086*61046927SAndroid Build Coastguard Worker */
operator =(const Device & dev)2087*61046927SAndroid Build Coastguard Worker Device& operator = (const Device &dev)
2088*61046927SAndroid Build Coastguard Worker {
2089*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(dev);
2090*61046927SAndroid Build Coastguard Worker return *this;
2091*61046927SAndroid Build Coastguard Worker }
2092*61046927SAndroid Build Coastguard Worker
2093*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
2094*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
2095*61046927SAndroid Build Coastguard Worker * Required for MSVC.
2096*61046927SAndroid Build Coastguard Worker */
Device(Device && dev)2097*61046927SAndroid Build Coastguard Worker Device(Device&& dev) CL_HPP_NOEXCEPT : detail::Wrapper<cl_type>(std::move(dev)) {}
2098*61046927SAndroid Build Coastguard Worker
2099*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
2100*61046927SAndroid Build Coastguard Worker * Required for MSVC.
2101*61046927SAndroid Build Coastguard Worker */
operator =(Device && dev)2102*61046927SAndroid Build Coastguard Worker Device& operator = (Device &&dev)
2103*61046927SAndroid Build Coastguard Worker {
2104*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(std::move(dev));
2105*61046927SAndroid Build Coastguard Worker return *this;
2106*61046927SAndroid Build Coastguard Worker }
2107*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
2108*61046927SAndroid Build Coastguard Worker
2109*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetDeviceInfo().
2110*61046927SAndroid Build Coastguard Worker template <typename T>
getInfo(cl_device_info name,T * param) const2111*61046927SAndroid Build Coastguard Worker cl_int getInfo(cl_device_info name, T* param) const
2112*61046927SAndroid Build Coastguard Worker {
2113*61046927SAndroid Build Coastguard Worker return detail::errHandler(
2114*61046927SAndroid Build Coastguard Worker detail::getInfo(&::clGetDeviceInfo, object_, name, param),
2115*61046927SAndroid Build Coastguard Worker __GET_DEVICE_INFO_ERR);
2116*61046927SAndroid Build Coastguard Worker }
2117*61046927SAndroid Build Coastguard Worker
2118*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetDeviceInfo() that returns by value.
2119*61046927SAndroid Build Coastguard Worker template <cl_device_info name> typename
2120*61046927SAndroid Build Coastguard Worker detail::param_traits<detail::cl_device_info, name>::param_type
getInfo(cl_int * err=NULL) const2121*61046927SAndroid Build Coastguard Worker getInfo(cl_int* err = NULL) const
2122*61046927SAndroid Build Coastguard Worker {
2123*61046927SAndroid Build Coastguard Worker typename detail::param_traits<
2124*61046927SAndroid Build Coastguard Worker detail::cl_device_info, name>::param_type param;
2125*61046927SAndroid Build Coastguard Worker cl_int result = getInfo(name, ¶m);
2126*61046927SAndroid Build Coastguard Worker if (err != NULL) {
2127*61046927SAndroid Build Coastguard Worker *err = result;
2128*61046927SAndroid Build Coastguard Worker }
2129*61046927SAndroid Build Coastguard Worker return param;
2130*61046927SAndroid Build Coastguard Worker }
2131*61046927SAndroid Build Coastguard Worker
2132*61046927SAndroid Build Coastguard Worker /**
2133*61046927SAndroid Build Coastguard Worker * CL 1.2 version
2134*61046927SAndroid Build Coastguard Worker */
2135*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
2136*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clCreateSubDevicesEXT().
createSubDevices(const cl_device_partition_property * properties,VECTOR_CLASS<Device> * devices)2137*61046927SAndroid Build Coastguard Worker cl_int createSubDevices(
2138*61046927SAndroid Build Coastguard Worker const cl_device_partition_property * properties,
2139*61046927SAndroid Build Coastguard Worker VECTOR_CLASS<Device>* devices)
2140*61046927SAndroid Build Coastguard Worker {
2141*61046927SAndroid Build Coastguard Worker cl_uint n = 0;
2142*61046927SAndroid Build Coastguard Worker cl_int err = clCreateSubDevices(object_, properties, 0, NULL, &n);
2143*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
2144*61046927SAndroid Build Coastguard Worker return detail::errHandler(err, __CREATE_SUB_DEVICES);
2145*61046927SAndroid Build Coastguard Worker }
2146*61046927SAndroid Build Coastguard Worker
2147*61046927SAndroid Build Coastguard Worker cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id));
2148*61046927SAndroid Build Coastguard Worker err = clCreateSubDevices(object_, properties, n, ids, NULL);
2149*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
2150*61046927SAndroid Build Coastguard Worker return detail::errHandler(err, __CREATE_SUB_DEVICES);
2151*61046927SAndroid Build Coastguard Worker }
2152*61046927SAndroid Build Coastguard Worker
2153*61046927SAndroid Build Coastguard Worker devices->assign(&ids[0], &ids[n]);
2154*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
2155*61046927SAndroid Build Coastguard Worker }
2156*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
2157*61046927SAndroid Build Coastguard Worker
2158*61046927SAndroid Build Coastguard Worker /**
2159*61046927SAndroid Build Coastguard Worker * CL 1.1 version that uses device fission.
2160*61046927SAndroid Build Coastguard Worker */
2161*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_1)
2162*61046927SAndroid Build Coastguard Worker #if defined(USE_CL_DEVICE_FISSION)
createSubDevices(const cl_device_partition_property_ext * properties,VECTOR_CLASS<Device> * devices)2163*61046927SAndroid Build Coastguard Worker cl_int createSubDevices(
2164*61046927SAndroid Build Coastguard Worker const cl_device_partition_property_ext * properties,
2165*61046927SAndroid Build Coastguard Worker VECTOR_CLASS<Device>* devices)
2166*61046927SAndroid Build Coastguard Worker {
2167*61046927SAndroid Build Coastguard Worker typedef CL_API_ENTRY cl_int
2168*61046927SAndroid Build Coastguard Worker ( CL_API_CALL * PFN_clCreateSubDevicesEXT)(
2169*61046927SAndroid Build Coastguard Worker cl_device_id /*in_device*/,
2170*61046927SAndroid Build Coastguard Worker const cl_device_partition_property_ext * /* properties */,
2171*61046927SAndroid Build Coastguard Worker cl_uint /*num_entries*/,
2172*61046927SAndroid Build Coastguard Worker cl_device_id * /*out_devices*/,
2173*61046927SAndroid Build Coastguard Worker cl_uint * /*num_devices*/ ) CL_EXT_SUFFIX__VERSION_1_1;
2174*61046927SAndroid Build Coastguard Worker
2175*61046927SAndroid Build Coastguard Worker static PFN_clCreateSubDevicesEXT pfn_clCreateSubDevicesEXT = NULL;
2176*61046927SAndroid Build Coastguard Worker __INIT_CL_EXT_FCN_PTR(clCreateSubDevicesEXT);
2177*61046927SAndroid Build Coastguard Worker
2178*61046927SAndroid Build Coastguard Worker cl_uint n = 0;
2179*61046927SAndroid Build Coastguard Worker cl_int err = pfn_clCreateSubDevicesEXT(object_, properties, 0, NULL, &n);
2180*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
2181*61046927SAndroid Build Coastguard Worker return detail::errHandler(err, __CREATE_SUB_DEVICES);
2182*61046927SAndroid Build Coastguard Worker }
2183*61046927SAndroid Build Coastguard Worker
2184*61046927SAndroid Build Coastguard Worker cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id));
2185*61046927SAndroid Build Coastguard Worker err = pfn_clCreateSubDevicesEXT(object_, properties, n, ids, NULL);
2186*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
2187*61046927SAndroid Build Coastguard Worker return detail::errHandler(err, __CREATE_SUB_DEVICES);
2188*61046927SAndroid Build Coastguard Worker }
2189*61046927SAndroid Build Coastguard Worker
2190*61046927SAndroid Build Coastguard Worker devices->assign(&ids[0], &ids[n]);
2191*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
2192*61046927SAndroid Build Coastguard Worker }
2193*61046927SAndroid Build Coastguard Worker #endif // #if defined(USE_CL_DEVICE_FISSION)
2194*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_1)
2195*61046927SAndroid Build Coastguard Worker };
2196*61046927SAndroid Build Coastguard Worker
2197*61046927SAndroid Build Coastguard Worker /*! \brief Class interface for cl_platform_id.
2198*61046927SAndroid Build Coastguard Worker *
2199*61046927SAndroid Build Coastguard Worker * \note Copies of these objects are inexpensive, since they don't 'own'
2200*61046927SAndroid Build Coastguard Worker * any underlying resources or data structures.
2201*61046927SAndroid Build Coastguard Worker *
2202*61046927SAndroid Build Coastguard Worker * \see cl_platform_id
2203*61046927SAndroid Build Coastguard Worker */
2204*61046927SAndroid Build Coastguard Worker class Platform : public detail::Wrapper<cl_platform_id>
2205*61046927SAndroid Build Coastguard Worker {
2206*61046927SAndroid Build Coastguard Worker public:
2207*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
Platform()2208*61046927SAndroid Build Coastguard Worker Platform() : detail::Wrapper<cl_type>() { }
2209*61046927SAndroid Build Coastguard Worker
2210*61046927SAndroid Build Coastguard Worker /*! \brief Constructor from cl_platform_id.
2211*61046927SAndroid Build Coastguard Worker *
2212*61046927SAndroid Build Coastguard Worker * This simply copies the platform ID value, which is an inexpensive operation.
2213*61046927SAndroid Build Coastguard Worker */
Platform(const cl_platform_id & platform)2214*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Platform(const cl_platform_id &platform) : detail::Wrapper<cl_type>(platform) { }
2215*61046927SAndroid Build Coastguard Worker
2216*61046927SAndroid Build Coastguard Worker /*! \brief Assignment operator from cl_platform_id.
2217*61046927SAndroid Build Coastguard Worker *
2218*61046927SAndroid Build Coastguard Worker * This simply copies the platform ID value, which is an inexpensive operation.
2219*61046927SAndroid Build Coastguard Worker */
operator =(const cl_platform_id & rhs)2220*61046927SAndroid Build Coastguard Worker Platform& operator = (const cl_platform_id& rhs)
2221*61046927SAndroid Build Coastguard Worker {
2222*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(rhs);
2223*61046927SAndroid Build Coastguard Worker return *this;
2224*61046927SAndroid Build Coastguard Worker }
2225*61046927SAndroid Build Coastguard Worker
2226*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetPlatformInfo().
getInfo(cl_platform_info name,STRING_CLASS * param) const2227*61046927SAndroid Build Coastguard Worker cl_int getInfo(cl_platform_info name, STRING_CLASS* param) const
2228*61046927SAndroid Build Coastguard Worker {
2229*61046927SAndroid Build Coastguard Worker return detail::errHandler(
2230*61046927SAndroid Build Coastguard Worker detail::getInfo(&::clGetPlatformInfo, object_, name, param),
2231*61046927SAndroid Build Coastguard Worker __GET_PLATFORM_INFO_ERR);
2232*61046927SAndroid Build Coastguard Worker }
2233*61046927SAndroid Build Coastguard Worker
2234*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetPlatformInfo() that returns by value.
2235*61046927SAndroid Build Coastguard Worker template <cl_platform_info name> typename
2236*61046927SAndroid Build Coastguard Worker detail::param_traits<detail::cl_platform_info, name>::param_type
getInfo(cl_int * err=NULL) const2237*61046927SAndroid Build Coastguard Worker getInfo(cl_int* err = NULL) const
2238*61046927SAndroid Build Coastguard Worker {
2239*61046927SAndroid Build Coastguard Worker typename detail::param_traits<
2240*61046927SAndroid Build Coastguard Worker detail::cl_platform_info, name>::param_type param;
2241*61046927SAndroid Build Coastguard Worker cl_int result = getInfo(name, ¶m);
2242*61046927SAndroid Build Coastguard Worker if (err != NULL) {
2243*61046927SAndroid Build Coastguard Worker *err = result;
2244*61046927SAndroid Build Coastguard Worker }
2245*61046927SAndroid Build Coastguard Worker return param;
2246*61046927SAndroid Build Coastguard Worker }
2247*61046927SAndroid Build Coastguard Worker
2248*61046927SAndroid Build Coastguard Worker /*! \brief Gets a list of devices for this platform.
2249*61046927SAndroid Build Coastguard Worker *
2250*61046927SAndroid Build Coastguard Worker * Wraps clGetDeviceIDs().
2251*61046927SAndroid Build Coastguard Worker */
getDevices(cl_device_type type,VECTOR_CLASS<Device> * devices) const2252*61046927SAndroid Build Coastguard Worker cl_int getDevices(
2253*61046927SAndroid Build Coastguard Worker cl_device_type type,
2254*61046927SAndroid Build Coastguard Worker VECTOR_CLASS<Device>* devices) const
2255*61046927SAndroid Build Coastguard Worker {
2256*61046927SAndroid Build Coastguard Worker cl_uint n = 0;
2257*61046927SAndroid Build Coastguard Worker if( devices == NULL ) {
2258*61046927SAndroid Build Coastguard Worker return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_DEVICE_IDS_ERR);
2259*61046927SAndroid Build Coastguard Worker }
2260*61046927SAndroid Build Coastguard Worker cl_int err = ::clGetDeviceIDs(object_, type, 0, NULL, &n);
2261*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS && err != CL_DEVICE_NOT_FOUND) {
2262*61046927SAndroid Build Coastguard Worker return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
2263*61046927SAndroid Build Coastguard Worker }
2264*61046927SAndroid Build Coastguard Worker
2265*61046927SAndroid Build Coastguard Worker if (n > 0) {
2266*61046927SAndroid Build Coastguard Worker cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id));
2267*61046927SAndroid Build Coastguard Worker err = ::clGetDeviceIDs(object_, type, n, ids, NULL);
2268*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
2269*61046927SAndroid Build Coastguard Worker return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
2270*61046927SAndroid Build Coastguard Worker }
2271*61046927SAndroid Build Coastguard Worker
2272*61046927SAndroid Build Coastguard Worker devices->assign(&ids[0], &ids[n]);
2273*61046927SAndroid Build Coastguard Worker } else {
2274*61046927SAndroid Build Coastguard Worker devices->clear();
2275*61046927SAndroid Build Coastguard Worker }
2276*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
2277*61046927SAndroid Build Coastguard Worker }
2278*61046927SAndroid Build Coastguard Worker
2279*61046927SAndroid Build Coastguard Worker #if defined(USE_DX_INTEROP)
2280*61046927SAndroid Build Coastguard Worker /*! \brief Get the list of available D3D10 devices.
2281*61046927SAndroid Build Coastguard Worker *
2282*61046927SAndroid Build Coastguard Worker * \param d3d_device_source.
2283*61046927SAndroid Build Coastguard Worker *
2284*61046927SAndroid Build Coastguard Worker * \param d3d_object.
2285*61046927SAndroid Build Coastguard Worker *
2286*61046927SAndroid Build Coastguard Worker * \param d3d_device_set.
2287*61046927SAndroid Build Coastguard Worker *
2288*61046927SAndroid Build Coastguard Worker * \param devices returns a vector of OpenCL D3D10 devices found. The cl::Device
2289*61046927SAndroid Build Coastguard Worker * values returned in devices can be used to identify a specific OpenCL
2290*61046927SAndroid Build Coastguard Worker * device. If \a devices argument is NULL, this argument is ignored.
2291*61046927SAndroid Build Coastguard Worker *
2292*61046927SAndroid Build Coastguard Worker * \return One of the following values:
2293*61046927SAndroid Build Coastguard Worker * - CL_SUCCESS if the function is executed successfully.
2294*61046927SAndroid Build Coastguard Worker *
2295*61046927SAndroid Build Coastguard Worker * The application can query specific capabilities of the OpenCL device(s)
2296*61046927SAndroid Build Coastguard Worker * returned by cl::getDevices. This can be used by the application to
2297*61046927SAndroid Build Coastguard Worker * determine which device(s) to use.
2298*61046927SAndroid Build Coastguard Worker *
2299*61046927SAndroid Build Coastguard Worker * \note In the case that exceptions are enabled and a return value
2300*61046927SAndroid Build Coastguard Worker * other than CL_SUCCESS is generated, then cl::Error exception is
2301*61046927SAndroid Build Coastguard Worker * generated.
2302*61046927SAndroid Build Coastguard Worker */
getDevices(cl_d3d10_device_source_khr d3d_device_source,void * d3d_object,cl_d3d10_device_set_khr d3d_device_set,VECTOR_CLASS<Device> * devices) const2303*61046927SAndroid Build Coastguard Worker cl_int getDevices(
2304*61046927SAndroid Build Coastguard Worker cl_d3d10_device_source_khr d3d_device_source,
2305*61046927SAndroid Build Coastguard Worker void * d3d_object,
2306*61046927SAndroid Build Coastguard Worker cl_d3d10_device_set_khr d3d_device_set,
2307*61046927SAndroid Build Coastguard Worker VECTOR_CLASS<Device>* devices) const
2308*61046927SAndroid Build Coastguard Worker {
2309*61046927SAndroid Build Coastguard Worker typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clGetDeviceIDsFromD3D10KHR)(
2310*61046927SAndroid Build Coastguard Worker cl_platform_id platform,
2311*61046927SAndroid Build Coastguard Worker cl_d3d10_device_source_khr d3d_device_source,
2312*61046927SAndroid Build Coastguard Worker void * d3d_object,
2313*61046927SAndroid Build Coastguard Worker cl_d3d10_device_set_khr d3d_device_set,
2314*61046927SAndroid Build Coastguard Worker cl_uint num_entries,
2315*61046927SAndroid Build Coastguard Worker cl_device_id * devices,
2316*61046927SAndroid Build Coastguard Worker cl_uint* num_devices);
2317*61046927SAndroid Build Coastguard Worker
2318*61046927SAndroid Build Coastguard Worker if( devices == NULL ) {
2319*61046927SAndroid Build Coastguard Worker return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_DEVICE_IDS_ERR);
2320*61046927SAndroid Build Coastguard Worker }
2321*61046927SAndroid Build Coastguard Worker
2322*61046927SAndroid Build Coastguard Worker static PFN_clGetDeviceIDsFromD3D10KHR pfn_clGetDeviceIDsFromD3D10KHR = NULL;
2323*61046927SAndroid Build Coastguard Worker __INIT_CL_EXT_FCN_PTR_PLATFORM(object_, clGetDeviceIDsFromD3D10KHR);
2324*61046927SAndroid Build Coastguard Worker
2325*61046927SAndroid Build Coastguard Worker cl_uint n = 0;
2326*61046927SAndroid Build Coastguard Worker cl_int err = pfn_clGetDeviceIDsFromD3D10KHR(
2327*61046927SAndroid Build Coastguard Worker object_,
2328*61046927SAndroid Build Coastguard Worker d3d_device_source,
2329*61046927SAndroid Build Coastguard Worker d3d_object,
2330*61046927SAndroid Build Coastguard Worker d3d_device_set,
2331*61046927SAndroid Build Coastguard Worker 0,
2332*61046927SAndroid Build Coastguard Worker NULL,
2333*61046927SAndroid Build Coastguard Worker &n);
2334*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
2335*61046927SAndroid Build Coastguard Worker return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
2336*61046927SAndroid Build Coastguard Worker }
2337*61046927SAndroid Build Coastguard Worker
2338*61046927SAndroid Build Coastguard Worker cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id));
2339*61046927SAndroid Build Coastguard Worker err = pfn_clGetDeviceIDsFromD3D10KHR(
2340*61046927SAndroid Build Coastguard Worker object_,
2341*61046927SAndroid Build Coastguard Worker d3d_device_source,
2342*61046927SAndroid Build Coastguard Worker d3d_object,
2343*61046927SAndroid Build Coastguard Worker d3d_device_set,
2344*61046927SAndroid Build Coastguard Worker n,
2345*61046927SAndroid Build Coastguard Worker ids,
2346*61046927SAndroid Build Coastguard Worker NULL);
2347*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
2348*61046927SAndroid Build Coastguard Worker return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
2349*61046927SAndroid Build Coastguard Worker }
2350*61046927SAndroid Build Coastguard Worker
2351*61046927SAndroid Build Coastguard Worker devices->assign(&ids[0], &ids[n]);
2352*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
2353*61046927SAndroid Build Coastguard Worker }
2354*61046927SAndroid Build Coastguard Worker #endif
2355*61046927SAndroid Build Coastguard Worker
2356*61046927SAndroid Build Coastguard Worker /*! \brief Gets a list of available platforms.
2357*61046927SAndroid Build Coastguard Worker *
2358*61046927SAndroid Build Coastguard Worker * Wraps clGetPlatformIDs().
2359*61046927SAndroid Build Coastguard Worker */
get(VECTOR_CLASS<Platform> * platforms)2360*61046927SAndroid Build Coastguard Worker static cl_int get(
2361*61046927SAndroid Build Coastguard Worker VECTOR_CLASS<Platform>* platforms)
2362*61046927SAndroid Build Coastguard Worker {
2363*61046927SAndroid Build Coastguard Worker cl_uint n = 0;
2364*61046927SAndroid Build Coastguard Worker
2365*61046927SAndroid Build Coastguard Worker if( platforms == NULL ) {
2366*61046927SAndroid Build Coastguard Worker return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_PLATFORM_IDS_ERR);
2367*61046927SAndroid Build Coastguard Worker }
2368*61046927SAndroid Build Coastguard Worker
2369*61046927SAndroid Build Coastguard Worker cl_int err = ::clGetPlatformIDs(0, NULL, &n);
2370*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
2371*61046927SAndroid Build Coastguard Worker return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
2372*61046927SAndroid Build Coastguard Worker }
2373*61046927SAndroid Build Coastguard Worker
2374*61046927SAndroid Build Coastguard Worker cl_platform_id* ids = (cl_platform_id*) alloca(
2375*61046927SAndroid Build Coastguard Worker n * sizeof(cl_platform_id));
2376*61046927SAndroid Build Coastguard Worker err = ::clGetPlatformIDs(n, ids, NULL);
2377*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
2378*61046927SAndroid Build Coastguard Worker return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
2379*61046927SAndroid Build Coastguard Worker }
2380*61046927SAndroid Build Coastguard Worker
2381*61046927SAndroid Build Coastguard Worker platforms->assign(&ids[0], &ids[n]);
2382*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
2383*61046927SAndroid Build Coastguard Worker }
2384*61046927SAndroid Build Coastguard Worker
2385*61046927SAndroid Build Coastguard Worker /*! \brief Gets the first available platform.
2386*61046927SAndroid Build Coastguard Worker *
2387*61046927SAndroid Build Coastguard Worker * Wraps clGetPlatformIDs(), returning the first result.
2388*61046927SAndroid Build Coastguard Worker */
get(Platform * platform)2389*61046927SAndroid Build Coastguard Worker static cl_int get(
2390*61046927SAndroid Build Coastguard Worker Platform * platform)
2391*61046927SAndroid Build Coastguard Worker {
2392*61046927SAndroid Build Coastguard Worker cl_uint n = 0;
2393*61046927SAndroid Build Coastguard Worker
2394*61046927SAndroid Build Coastguard Worker if( platform == NULL ) {
2395*61046927SAndroid Build Coastguard Worker return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_PLATFORM_IDS_ERR);
2396*61046927SAndroid Build Coastguard Worker }
2397*61046927SAndroid Build Coastguard Worker
2398*61046927SAndroid Build Coastguard Worker cl_int err = ::clGetPlatformIDs(0, NULL, &n);
2399*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
2400*61046927SAndroid Build Coastguard Worker return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
2401*61046927SAndroid Build Coastguard Worker }
2402*61046927SAndroid Build Coastguard Worker
2403*61046927SAndroid Build Coastguard Worker cl_platform_id* ids = (cl_platform_id*) alloca(
2404*61046927SAndroid Build Coastguard Worker n * sizeof(cl_platform_id));
2405*61046927SAndroid Build Coastguard Worker err = ::clGetPlatformIDs(n, ids, NULL);
2406*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
2407*61046927SAndroid Build Coastguard Worker return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
2408*61046927SAndroid Build Coastguard Worker }
2409*61046927SAndroid Build Coastguard Worker
2410*61046927SAndroid Build Coastguard Worker *platform = ids[0];
2411*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
2412*61046927SAndroid Build Coastguard Worker }
2413*61046927SAndroid Build Coastguard Worker
2414*61046927SAndroid Build Coastguard Worker /*! \brief Gets the first available platform, returning it by value.
2415*61046927SAndroid Build Coastguard Worker *
2416*61046927SAndroid Build Coastguard Worker * Wraps clGetPlatformIDs(), returning the first result.
2417*61046927SAndroid Build Coastguard Worker */
get(cl_int * errResult=NULL)2418*61046927SAndroid Build Coastguard Worker static Platform get(
2419*61046927SAndroid Build Coastguard Worker cl_int * errResult = NULL)
2420*61046927SAndroid Build Coastguard Worker {
2421*61046927SAndroid Build Coastguard Worker Platform platform;
2422*61046927SAndroid Build Coastguard Worker cl_uint n = 0;
2423*61046927SAndroid Build Coastguard Worker cl_int err = ::clGetPlatformIDs(0, NULL, &n);
2424*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
2425*61046927SAndroid Build Coastguard Worker detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
2426*61046927SAndroid Build Coastguard Worker if (errResult != NULL) {
2427*61046927SAndroid Build Coastguard Worker *errResult = err;
2428*61046927SAndroid Build Coastguard Worker }
2429*61046927SAndroid Build Coastguard Worker return Platform();
2430*61046927SAndroid Build Coastguard Worker }
2431*61046927SAndroid Build Coastguard Worker
2432*61046927SAndroid Build Coastguard Worker cl_platform_id* ids = (cl_platform_id*) alloca(
2433*61046927SAndroid Build Coastguard Worker n * sizeof(cl_platform_id));
2434*61046927SAndroid Build Coastguard Worker err = ::clGetPlatformIDs(n, ids, NULL);
2435*61046927SAndroid Build Coastguard Worker
2436*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
2437*61046927SAndroid Build Coastguard Worker detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
2438*61046927SAndroid Build Coastguard Worker if (errResult != NULL) {
2439*61046927SAndroid Build Coastguard Worker *errResult = err;
2440*61046927SAndroid Build Coastguard Worker }
2441*61046927SAndroid Build Coastguard Worker return Platform();
2442*61046927SAndroid Build Coastguard Worker }
2443*61046927SAndroid Build Coastguard Worker
2444*61046927SAndroid Build Coastguard Worker
2445*61046927SAndroid Build Coastguard Worker return Platform(ids[0]);
2446*61046927SAndroid Build Coastguard Worker }
2447*61046927SAndroid Build Coastguard Worker
getDefault(cl_int * errResult=NULL)2448*61046927SAndroid Build Coastguard Worker static Platform getDefault(
2449*61046927SAndroid Build Coastguard Worker cl_int *errResult = NULL )
2450*61046927SAndroid Build Coastguard Worker {
2451*61046927SAndroid Build Coastguard Worker return get(errResult);
2452*61046927SAndroid Build Coastguard Worker }
2453*61046927SAndroid Build Coastguard Worker
2454*61046927SAndroid Build Coastguard Worker
2455*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
2456*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clUnloadCompiler().
2457*61046927SAndroid Build Coastguard Worker cl_int
unloadCompiler()2458*61046927SAndroid Build Coastguard Worker unloadCompiler()
2459*61046927SAndroid Build Coastguard Worker {
2460*61046927SAndroid Build Coastguard Worker return ::clUnloadPlatformCompiler(object_);
2461*61046927SAndroid Build Coastguard Worker }
2462*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
2463*61046927SAndroid Build Coastguard Worker }; // class Platform
2464*61046927SAndroid Build Coastguard Worker
2465*61046927SAndroid Build Coastguard Worker /**
2466*61046927SAndroid Build Coastguard Worker * Deprecated APIs for 1.2
2467*61046927SAndroid Build Coastguard Worker */
2468*61046927SAndroid Build Coastguard Worker #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) || (defined(CL_VERSION_1_1) && !defined(CL_VERSION_1_2))
2469*61046927SAndroid Build Coastguard Worker /**
2470*61046927SAndroid Build Coastguard Worker * Unload the OpenCL compiler.
2471*61046927SAndroid Build Coastguard Worker * \note Deprecated for OpenCL 1.2. Use Platform::unloadCompiler instead.
2472*61046927SAndroid Build Coastguard Worker */
2473*61046927SAndroid Build Coastguard Worker inline CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_int
2474*61046927SAndroid Build Coastguard Worker UnloadCompiler() CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
2475*61046927SAndroid Build Coastguard Worker inline cl_int
UnloadCompiler()2476*61046927SAndroid Build Coastguard Worker UnloadCompiler()
2477*61046927SAndroid Build Coastguard Worker {
2478*61046927SAndroid Build Coastguard Worker return ::clUnloadCompiler();
2479*61046927SAndroid Build Coastguard Worker }
2480*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_1)
2481*61046927SAndroid Build Coastguard Worker
2482*61046927SAndroid Build Coastguard Worker /*! \brief Class interface for cl_context.
2483*61046927SAndroid Build Coastguard Worker *
2484*61046927SAndroid Build Coastguard Worker * \note Copies of these objects are shallow, meaning that the copy will refer
2485*61046927SAndroid Build Coastguard Worker * to the same underlying cl_context as the original. For details, see
2486*61046927SAndroid Build Coastguard Worker * clRetainContext() and clReleaseContext().
2487*61046927SAndroid Build Coastguard Worker *
2488*61046927SAndroid Build Coastguard Worker * \see cl_context
2489*61046927SAndroid Build Coastguard Worker */
2490*61046927SAndroid Build Coastguard Worker class Context
2491*61046927SAndroid Build Coastguard Worker : public detail::Wrapper<cl_context>
2492*61046927SAndroid Build Coastguard Worker {
2493*61046927SAndroid Build Coastguard Worker private:
2494*61046927SAndroid Build Coastguard Worker
2495*61046927SAndroid Build Coastguard Worker #ifdef CL_HPP_CPP11_ATOMICS_SUPPORTED
2496*61046927SAndroid Build Coastguard Worker static std::atomic<int> default_initialized_;
2497*61046927SAndroid Build Coastguard Worker #else // !CL_HPP_CPP11_ATOMICS_SUPPORTED
2498*61046927SAndroid Build Coastguard Worker static volatile int default_initialized_;
2499*61046927SAndroid Build Coastguard Worker #endif // !CL_HPP_CPP11_ATOMICS_SUPPORTED
2500*61046927SAndroid Build Coastguard Worker static Context default_;
2501*61046927SAndroid Build Coastguard Worker static volatile cl_int default_error_;
2502*61046927SAndroid Build Coastguard Worker public:
2503*61046927SAndroid Build Coastguard Worker /*! \brief Constructs a context including a list of specified devices.
2504*61046927SAndroid Build Coastguard Worker *
2505*61046927SAndroid Build Coastguard Worker * Wraps clCreateContext().
2506*61046927SAndroid Build Coastguard Worker */
Context(const VECTOR_CLASS<Device> & devices,cl_context_properties * properties=NULL,void (CL_CALLBACK * notifyFptr)(const char *,const void *,::size_t,void *)=NULL,void * data=NULL,cl_int * err=NULL)2507*61046927SAndroid Build Coastguard Worker Context(
2508*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Device>& devices,
2509*61046927SAndroid Build Coastguard Worker cl_context_properties* properties = NULL,
2510*61046927SAndroid Build Coastguard Worker void (CL_CALLBACK * notifyFptr)(
2511*61046927SAndroid Build Coastguard Worker const char *,
2512*61046927SAndroid Build Coastguard Worker const void *,
2513*61046927SAndroid Build Coastguard Worker ::size_t,
2514*61046927SAndroid Build Coastguard Worker void *) = NULL,
2515*61046927SAndroid Build Coastguard Worker void* data = NULL,
2516*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
2517*61046927SAndroid Build Coastguard Worker {
2518*61046927SAndroid Build Coastguard Worker cl_int error;
2519*61046927SAndroid Build Coastguard Worker
2520*61046927SAndroid Build Coastguard Worker ::size_t numDevices = devices.size();
2521*61046927SAndroid Build Coastguard Worker cl_device_id* deviceIDs = (cl_device_id*) alloca(numDevices * sizeof(cl_device_id));
2522*61046927SAndroid Build Coastguard Worker for( ::size_t deviceIndex = 0; deviceIndex < numDevices; ++deviceIndex ) {
2523*61046927SAndroid Build Coastguard Worker deviceIDs[deviceIndex] = (devices[deviceIndex])();
2524*61046927SAndroid Build Coastguard Worker }
2525*61046927SAndroid Build Coastguard Worker
2526*61046927SAndroid Build Coastguard Worker object_ = ::clCreateContext(
2527*61046927SAndroid Build Coastguard Worker properties, (cl_uint) numDevices,
2528*61046927SAndroid Build Coastguard Worker deviceIDs,
2529*61046927SAndroid Build Coastguard Worker notifyFptr, data, &error);
2530*61046927SAndroid Build Coastguard Worker
2531*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_CONTEXT_ERR);
2532*61046927SAndroid Build Coastguard Worker if (err != NULL) {
2533*61046927SAndroid Build Coastguard Worker *err = error;
2534*61046927SAndroid Build Coastguard Worker }
2535*61046927SAndroid Build Coastguard Worker }
2536*61046927SAndroid Build Coastguard Worker
Context(const Device & device,cl_context_properties * properties=NULL,void (CL_CALLBACK * notifyFptr)(const char *,const void *,::size_t,void *)=NULL,void * data=NULL,cl_int * err=NULL)2537*61046927SAndroid Build Coastguard Worker Context(
2538*61046927SAndroid Build Coastguard Worker const Device& device,
2539*61046927SAndroid Build Coastguard Worker cl_context_properties* properties = NULL,
2540*61046927SAndroid Build Coastguard Worker void (CL_CALLBACK * notifyFptr)(
2541*61046927SAndroid Build Coastguard Worker const char *,
2542*61046927SAndroid Build Coastguard Worker const void *,
2543*61046927SAndroid Build Coastguard Worker ::size_t,
2544*61046927SAndroid Build Coastguard Worker void *) = NULL,
2545*61046927SAndroid Build Coastguard Worker void* data = NULL,
2546*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
2547*61046927SAndroid Build Coastguard Worker {
2548*61046927SAndroid Build Coastguard Worker cl_int error;
2549*61046927SAndroid Build Coastguard Worker
2550*61046927SAndroid Build Coastguard Worker cl_device_id deviceID = device();
2551*61046927SAndroid Build Coastguard Worker
2552*61046927SAndroid Build Coastguard Worker object_ = ::clCreateContext(
2553*61046927SAndroid Build Coastguard Worker properties, 1,
2554*61046927SAndroid Build Coastguard Worker &deviceID,
2555*61046927SAndroid Build Coastguard Worker notifyFptr, data, &error);
2556*61046927SAndroid Build Coastguard Worker
2557*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_CONTEXT_ERR);
2558*61046927SAndroid Build Coastguard Worker if (err != NULL) {
2559*61046927SAndroid Build Coastguard Worker *err = error;
2560*61046927SAndroid Build Coastguard Worker }
2561*61046927SAndroid Build Coastguard Worker }
2562*61046927SAndroid Build Coastguard Worker
2563*61046927SAndroid Build Coastguard Worker /*! \brief Constructs a context including all or a subset of devices of a specified type.
2564*61046927SAndroid Build Coastguard Worker *
2565*61046927SAndroid Build Coastguard Worker * Wraps clCreateContextFromType().
2566*61046927SAndroid Build Coastguard Worker */
Context(cl_device_type type,cl_context_properties * properties=NULL,void (CL_CALLBACK * notifyFptr)(const char *,const void *,::size_t,void *)=NULL,void * data=NULL,cl_int * err=NULL)2567*61046927SAndroid Build Coastguard Worker Context(
2568*61046927SAndroid Build Coastguard Worker cl_device_type type,
2569*61046927SAndroid Build Coastguard Worker cl_context_properties* properties = NULL,
2570*61046927SAndroid Build Coastguard Worker void (CL_CALLBACK * notifyFptr)(
2571*61046927SAndroid Build Coastguard Worker const char *,
2572*61046927SAndroid Build Coastguard Worker const void *,
2573*61046927SAndroid Build Coastguard Worker ::size_t,
2574*61046927SAndroid Build Coastguard Worker void *) = NULL,
2575*61046927SAndroid Build Coastguard Worker void* data = NULL,
2576*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
2577*61046927SAndroid Build Coastguard Worker {
2578*61046927SAndroid Build Coastguard Worker cl_int error;
2579*61046927SAndroid Build Coastguard Worker
2580*61046927SAndroid Build Coastguard Worker #if !defined(__APPLE__) && !defined(__MACOS)
2581*61046927SAndroid Build Coastguard Worker cl_context_properties prop[4] = {CL_CONTEXT_PLATFORM, 0, 0, 0 };
2582*61046927SAndroid Build Coastguard Worker
2583*61046927SAndroid Build Coastguard Worker if (properties == NULL) {
2584*61046927SAndroid Build Coastguard Worker // Get a valid platform ID as we cannot send in a blank one
2585*61046927SAndroid Build Coastguard Worker VECTOR_CLASS<Platform> platforms;
2586*61046927SAndroid Build Coastguard Worker error = Platform::get(&platforms);
2587*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
2588*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_CONTEXT_FROM_TYPE_ERR);
2589*61046927SAndroid Build Coastguard Worker if (err != NULL) {
2590*61046927SAndroid Build Coastguard Worker *err = error;
2591*61046927SAndroid Build Coastguard Worker }
2592*61046927SAndroid Build Coastguard Worker return;
2593*61046927SAndroid Build Coastguard Worker }
2594*61046927SAndroid Build Coastguard Worker
2595*61046927SAndroid Build Coastguard Worker // Check the platforms we found for a device of our specified type
2596*61046927SAndroid Build Coastguard Worker cl_context_properties platform_id = 0;
2597*61046927SAndroid Build Coastguard Worker for (unsigned int i = 0; i < platforms.size(); i++) {
2598*61046927SAndroid Build Coastguard Worker
2599*61046927SAndroid Build Coastguard Worker VECTOR_CLASS<Device> devices;
2600*61046927SAndroid Build Coastguard Worker
2601*61046927SAndroid Build Coastguard Worker #if defined(__CL_ENABLE_EXCEPTIONS)
2602*61046927SAndroid Build Coastguard Worker try {
2603*61046927SAndroid Build Coastguard Worker #endif
2604*61046927SAndroid Build Coastguard Worker
2605*61046927SAndroid Build Coastguard Worker error = platforms[i].getDevices(type, &devices);
2606*61046927SAndroid Build Coastguard Worker
2607*61046927SAndroid Build Coastguard Worker #if defined(__CL_ENABLE_EXCEPTIONS)
2608*61046927SAndroid Build Coastguard Worker } catch (Error &) {}
2609*61046927SAndroid Build Coastguard Worker // Catch if exceptions are enabled as we don't want to exit if first platform has no devices of type
2610*61046927SAndroid Build Coastguard Worker // We do error checking next anyway, and can throw there if needed
2611*61046927SAndroid Build Coastguard Worker #endif
2612*61046927SAndroid Build Coastguard Worker
2613*61046927SAndroid Build Coastguard Worker // Only squash CL_SUCCESS and CL_DEVICE_NOT_FOUND
2614*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS && error != CL_DEVICE_NOT_FOUND) {
2615*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_CONTEXT_FROM_TYPE_ERR);
2616*61046927SAndroid Build Coastguard Worker if (err != NULL) {
2617*61046927SAndroid Build Coastguard Worker *err = error;
2618*61046927SAndroid Build Coastguard Worker }
2619*61046927SAndroid Build Coastguard Worker }
2620*61046927SAndroid Build Coastguard Worker
2621*61046927SAndroid Build Coastguard Worker if (devices.size() > 0) {
2622*61046927SAndroid Build Coastguard Worker platform_id = (cl_context_properties)platforms[i]();
2623*61046927SAndroid Build Coastguard Worker break;
2624*61046927SAndroid Build Coastguard Worker }
2625*61046927SAndroid Build Coastguard Worker }
2626*61046927SAndroid Build Coastguard Worker
2627*61046927SAndroid Build Coastguard Worker if (platform_id == 0) {
2628*61046927SAndroid Build Coastguard Worker detail::errHandler(CL_DEVICE_NOT_FOUND, __CREATE_CONTEXT_FROM_TYPE_ERR);
2629*61046927SAndroid Build Coastguard Worker if (err != NULL) {
2630*61046927SAndroid Build Coastguard Worker *err = CL_DEVICE_NOT_FOUND;
2631*61046927SAndroid Build Coastguard Worker }
2632*61046927SAndroid Build Coastguard Worker return;
2633*61046927SAndroid Build Coastguard Worker }
2634*61046927SAndroid Build Coastguard Worker
2635*61046927SAndroid Build Coastguard Worker prop[1] = platform_id;
2636*61046927SAndroid Build Coastguard Worker properties = &prop[0];
2637*61046927SAndroid Build Coastguard Worker }
2638*61046927SAndroid Build Coastguard Worker #endif
2639*61046927SAndroid Build Coastguard Worker object_ = ::clCreateContextFromType(
2640*61046927SAndroid Build Coastguard Worker properties, type, notifyFptr, data, &error);
2641*61046927SAndroid Build Coastguard Worker
2642*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_CONTEXT_FROM_TYPE_ERR);
2643*61046927SAndroid Build Coastguard Worker if (err != NULL) {
2644*61046927SAndroid Build Coastguard Worker *err = error;
2645*61046927SAndroid Build Coastguard Worker }
2646*61046927SAndroid Build Coastguard Worker }
2647*61046927SAndroid Build Coastguard Worker
2648*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
2649*61046927SAndroid Build Coastguard Worker * Required for MSVC.
2650*61046927SAndroid Build Coastguard Worker */
Context(const Context & ctx)2651*61046927SAndroid Build Coastguard Worker Context(const Context& ctx) : detail::Wrapper<cl_type>(ctx) {}
2652*61046927SAndroid Build Coastguard Worker
2653*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
2654*61046927SAndroid Build Coastguard Worker * Required for MSVC.
2655*61046927SAndroid Build Coastguard Worker */
operator =(const Context & ctx)2656*61046927SAndroid Build Coastguard Worker Context& operator = (const Context &ctx)
2657*61046927SAndroid Build Coastguard Worker {
2658*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(ctx);
2659*61046927SAndroid Build Coastguard Worker return *this;
2660*61046927SAndroid Build Coastguard Worker }
2661*61046927SAndroid Build Coastguard Worker
2662*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
2663*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
2664*61046927SAndroid Build Coastguard Worker * Required for MSVC.
2665*61046927SAndroid Build Coastguard Worker */
Context(Context && ctx)2666*61046927SAndroid Build Coastguard Worker Context(Context&& ctx) CL_HPP_NOEXCEPT : detail::Wrapper<cl_type>(std::move(ctx)) {}
2667*61046927SAndroid Build Coastguard Worker
2668*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
2669*61046927SAndroid Build Coastguard Worker * Required for MSVC.
2670*61046927SAndroid Build Coastguard Worker */
operator =(Context && ctx)2671*61046927SAndroid Build Coastguard Worker Context& operator = (Context &&ctx)
2672*61046927SAndroid Build Coastguard Worker {
2673*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(std::move(ctx));
2674*61046927SAndroid Build Coastguard Worker return *this;
2675*61046927SAndroid Build Coastguard Worker }
2676*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
2677*61046927SAndroid Build Coastguard Worker
2678*61046927SAndroid Build Coastguard Worker /*! \brief Returns a singleton context including all devices of CL_DEVICE_TYPE_DEFAULT.
2679*61046927SAndroid Build Coastguard Worker *
2680*61046927SAndroid Build Coastguard Worker * \note All calls to this function return the same cl_context as the first.
2681*61046927SAndroid Build Coastguard Worker */
getDefault(cl_int * err=NULL)2682*61046927SAndroid Build Coastguard Worker static Context getDefault(cl_int * err = NULL)
2683*61046927SAndroid Build Coastguard Worker {
2684*61046927SAndroid Build Coastguard Worker int state = detail::compare_exchange(
2685*61046927SAndroid Build Coastguard Worker &default_initialized_,
2686*61046927SAndroid Build Coastguard Worker __DEFAULT_BEING_INITIALIZED, __DEFAULT_NOT_INITIALIZED);
2687*61046927SAndroid Build Coastguard Worker
2688*61046927SAndroid Build Coastguard Worker if (state & __DEFAULT_INITIALIZED) {
2689*61046927SAndroid Build Coastguard Worker if (err != NULL) {
2690*61046927SAndroid Build Coastguard Worker *err = default_error_;
2691*61046927SAndroid Build Coastguard Worker }
2692*61046927SAndroid Build Coastguard Worker return default_;
2693*61046927SAndroid Build Coastguard Worker }
2694*61046927SAndroid Build Coastguard Worker
2695*61046927SAndroid Build Coastguard Worker if (state & __DEFAULT_BEING_INITIALIZED) {
2696*61046927SAndroid Build Coastguard Worker // Assume writes will propagate eventually...
2697*61046927SAndroid Build Coastguard Worker while(default_initialized_ != __DEFAULT_INITIALIZED) {
2698*61046927SAndroid Build Coastguard Worker detail::fence();
2699*61046927SAndroid Build Coastguard Worker }
2700*61046927SAndroid Build Coastguard Worker
2701*61046927SAndroid Build Coastguard Worker if (err != NULL) {
2702*61046927SAndroid Build Coastguard Worker *err = default_error_;
2703*61046927SAndroid Build Coastguard Worker }
2704*61046927SAndroid Build Coastguard Worker return default_;
2705*61046927SAndroid Build Coastguard Worker }
2706*61046927SAndroid Build Coastguard Worker
2707*61046927SAndroid Build Coastguard Worker cl_int error;
2708*61046927SAndroid Build Coastguard Worker default_ = Context(
2709*61046927SAndroid Build Coastguard Worker CL_DEVICE_TYPE_DEFAULT,
2710*61046927SAndroid Build Coastguard Worker NULL,
2711*61046927SAndroid Build Coastguard Worker NULL,
2712*61046927SAndroid Build Coastguard Worker NULL,
2713*61046927SAndroid Build Coastguard Worker &error);
2714*61046927SAndroid Build Coastguard Worker
2715*61046927SAndroid Build Coastguard Worker detail::fence();
2716*61046927SAndroid Build Coastguard Worker
2717*61046927SAndroid Build Coastguard Worker default_error_ = error;
2718*61046927SAndroid Build Coastguard Worker // Assume writes will propagate eventually...
2719*61046927SAndroid Build Coastguard Worker default_initialized_ = __DEFAULT_INITIALIZED;
2720*61046927SAndroid Build Coastguard Worker
2721*61046927SAndroid Build Coastguard Worker detail::fence();
2722*61046927SAndroid Build Coastguard Worker
2723*61046927SAndroid Build Coastguard Worker if (err != NULL) {
2724*61046927SAndroid Build Coastguard Worker *err = default_error_;
2725*61046927SAndroid Build Coastguard Worker }
2726*61046927SAndroid Build Coastguard Worker return default_;
2727*61046927SAndroid Build Coastguard Worker
2728*61046927SAndroid Build Coastguard Worker }
2729*61046927SAndroid Build Coastguard Worker
2730*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
Context()2731*61046927SAndroid Build Coastguard Worker Context() : detail::Wrapper<cl_type>() { }
2732*61046927SAndroid Build Coastguard Worker
2733*61046927SAndroid Build Coastguard Worker /*! \brief Constructor from cl_context - takes ownership.
2734*61046927SAndroid Build Coastguard Worker *
2735*61046927SAndroid Build Coastguard Worker * This effectively transfers ownership of a refcount on the cl_context
2736*61046927SAndroid Build Coastguard Worker * into the new Context object.
2737*61046927SAndroid Build Coastguard Worker */
Context(const cl_context & context)2738*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Context(const cl_context& context) : detail::Wrapper<cl_type>(context) { }
2739*61046927SAndroid Build Coastguard Worker
2740*61046927SAndroid Build Coastguard Worker /*! \brief Assignment operator from cl_context - takes ownership.
2741*61046927SAndroid Build Coastguard Worker *
2742*61046927SAndroid Build Coastguard Worker * This effectively transfers ownership of a refcount on the rhs and calls
2743*61046927SAndroid Build Coastguard Worker * clReleaseContext() on the value previously held by this instance.
2744*61046927SAndroid Build Coastguard Worker */
operator =(const cl_context & rhs)2745*61046927SAndroid Build Coastguard Worker Context& operator = (const cl_context& rhs)
2746*61046927SAndroid Build Coastguard Worker {
2747*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(rhs);
2748*61046927SAndroid Build Coastguard Worker return *this;
2749*61046927SAndroid Build Coastguard Worker }
2750*61046927SAndroid Build Coastguard Worker
2751*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetContextInfo().
2752*61046927SAndroid Build Coastguard Worker template <typename T>
getInfo(cl_context_info name,T * param) const2753*61046927SAndroid Build Coastguard Worker cl_int getInfo(cl_context_info name, T* param) const
2754*61046927SAndroid Build Coastguard Worker {
2755*61046927SAndroid Build Coastguard Worker return detail::errHandler(
2756*61046927SAndroid Build Coastguard Worker detail::getInfo(&::clGetContextInfo, object_, name, param),
2757*61046927SAndroid Build Coastguard Worker __GET_CONTEXT_INFO_ERR);
2758*61046927SAndroid Build Coastguard Worker }
2759*61046927SAndroid Build Coastguard Worker
2760*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetContextInfo() that returns by value.
2761*61046927SAndroid Build Coastguard Worker template <cl_context_info name> typename
2762*61046927SAndroid Build Coastguard Worker detail::param_traits<detail::cl_context_info, name>::param_type
getInfo(cl_int * err=NULL) const2763*61046927SAndroid Build Coastguard Worker getInfo(cl_int* err = NULL) const
2764*61046927SAndroid Build Coastguard Worker {
2765*61046927SAndroid Build Coastguard Worker typename detail::param_traits<
2766*61046927SAndroid Build Coastguard Worker detail::cl_context_info, name>::param_type param;
2767*61046927SAndroid Build Coastguard Worker cl_int result = getInfo(name, ¶m);
2768*61046927SAndroid Build Coastguard Worker if (err != NULL) {
2769*61046927SAndroid Build Coastguard Worker *err = result;
2770*61046927SAndroid Build Coastguard Worker }
2771*61046927SAndroid Build Coastguard Worker return param;
2772*61046927SAndroid Build Coastguard Worker }
2773*61046927SAndroid Build Coastguard Worker
2774*61046927SAndroid Build Coastguard Worker /*! \brief Gets a list of supported image formats.
2775*61046927SAndroid Build Coastguard Worker *
2776*61046927SAndroid Build Coastguard Worker * Wraps clGetSupportedImageFormats().
2777*61046927SAndroid Build Coastguard Worker */
getSupportedImageFormats(cl_mem_flags flags,cl_mem_object_type type,VECTOR_CLASS<ImageFormat> * formats) const2778*61046927SAndroid Build Coastguard Worker cl_int getSupportedImageFormats(
2779*61046927SAndroid Build Coastguard Worker cl_mem_flags flags,
2780*61046927SAndroid Build Coastguard Worker cl_mem_object_type type,
2781*61046927SAndroid Build Coastguard Worker VECTOR_CLASS<ImageFormat>* formats) const
2782*61046927SAndroid Build Coastguard Worker {
2783*61046927SAndroid Build Coastguard Worker cl_uint numEntries;
2784*61046927SAndroid Build Coastguard Worker
2785*61046927SAndroid Build Coastguard Worker if (!formats) {
2786*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
2787*61046927SAndroid Build Coastguard Worker }
2788*61046927SAndroid Build Coastguard Worker
2789*61046927SAndroid Build Coastguard Worker cl_int err = ::clGetSupportedImageFormats(
2790*61046927SAndroid Build Coastguard Worker object_,
2791*61046927SAndroid Build Coastguard Worker flags,
2792*61046927SAndroid Build Coastguard Worker type,
2793*61046927SAndroid Build Coastguard Worker 0,
2794*61046927SAndroid Build Coastguard Worker NULL,
2795*61046927SAndroid Build Coastguard Worker &numEntries);
2796*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
2797*61046927SAndroid Build Coastguard Worker return detail::errHandler(err, __GET_SUPPORTED_IMAGE_FORMATS_ERR);
2798*61046927SAndroid Build Coastguard Worker }
2799*61046927SAndroid Build Coastguard Worker
2800*61046927SAndroid Build Coastguard Worker if (numEntries > 0) {
2801*61046927SAndroid Build Coastguard Worker ImageFormat* value = (ImageFormat*)
2802*61046927SAndroid Build Coastguard Worker alloca(numEntries * sizeof(ImageFormat));
2803*61046927SAndroid Build Coastguard Worker err = ::clGetSupportedImageFormats(
2804*61046927SAndroid Build Coastguard Worker object_,
2805*61046927SAndroid Build Coastguard Worker flags,
2806*61046927SAndroid Build Coastguard Worker type,
2807*61046927SAndroid Build Coastguard Worker numEntries,
2808*61046927SAndroid Build Coastguard Worker (cl_image_format*)value,
2809*61046927SAndroid Build Coastguard Worker NULL);
2810*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
2811*61046927SAndroid Build Coastguard Worker return detail::errHandler(err, __GET_SUPPORTED_IMAGE_FORMATS_ERR);
2812*61046927SAndroid Build Coastguard Worker }
2813*61046927SAndroid Build Coastguard Worker
2814*61046927SAndroid Build Coastguard Worker formats->assign(&value[0], &value[numEntries]);
2815*61046927SAndroid Build Coastguard Worker }
2816*61046927SAndroid Build Coastguard Worker else {
2817*61046927SAndroid Build Coastguard Worker formats->clear();
2818*61046927SAndroid Build Coastguard Worker }
2819*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
2820*61046927SAndroid Build Coastguard Worker }
2821*61046927SAndroid Build Coastguard Worker };
2822*61046927SAndroid Build Coastguard Worker
getDefault(cl_int * err)2823*61046927SAndroid Build Coastguard Worker inline Device Device::getDefault(cl_int * err)
2824*61046927SAndroid Build Coastguard Worker {
2825*61046927SAndroid Build Coastguard Worker cl_int error;
2826*61046927SAndroid Build Coastguard Worker Device device;
2827*61046927SAndroid Build Coastguard Worker
2828*61046927SAndroid Build Coastguard Worker Context context = Context::getDefault(&error);
2829*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_CONTEXT_ERR);
2830*61046927SAndroid Build Coastguard Worker
2831*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
2832*61046927SAndroid Build Coastguard Worker if (err != NULL) {
2833*61046927SAndroid Build Coastguard Worker *err = error;
2834*61046927SAndroid Build Coastguard Worker }
2835*61046927SAndroid Build Coastguard Worker }
2836*61046927SAndroid Build Coastguard Worker else {
2837*61046927SAndroid Build Coastguard Worker device = context.getInfo<CL_CONTEXT_DEVICES>()[0];
2838*61046927SAndroid Build Coastguard Worker if (err != NULL) {
2839*61046927SAndroid Build Coastguard Worker *err = CL_SUCCESS;
2840*61046927SAndroid Build Coastguard Worker }
2841*61046927SAndroid Build Coastguard Worker }
2842*61046927SAndroid Build Coastguard Worker
2843*61046927SAndroid Build Coastguard Worker return device;
2844*61046927SAndroid Build Coastguard Worker }
2845*61046927SAndroid Build Coastguard Worker
2846*61046927SAndroid Build Coastguard Worker #ifdef CL_HPP_CPP11_ATOMICS_SUPPORTED
2847*61046927SAndroid Build Coastguard Worker CL_WEAK_ATTRIB_PREFIX std::atomic<int> CL_WEAK_ATTRIB_SUFFIX Context::default_initialized_;
2848*61046927SAndroid Build Coastguard Worker #else // !CL_HPP_CPP11_ATOMICS_SUPPORTED
2849*61046927SAndroid Build Coastguard Worker CL_WEAK_ATTRIB_PREFIX volatile int CL_WEAK_ATTRIB_SUFFIX Context::default_initialized_ = __DEFAULT_NOT_INITIALIZED;
2850*61046927SAndroid Build Coastguard Worker #endif // !CL_HPP_CPP11_ATOMICS_SUPPORTED
2851*61046927SAndroid Build Coastguard Worker
2852*61046927SAndroid Build Coastguard Worker CL_WEAK_ATTRIB_PREFIX Context CL_WEAK_ATTRIB_SUFFIX Context::default_;
2853*61046927SAndroid Build Coastguard Worker CL_WEAK_ATTRIB_PREFIX volatile cl_int CL_WEAK_ATTRIB_SUFFIX Context::default_error_ = CL_SUCCESS;
2854*61046927SAndroid Build Coastguard Worker
2855*61046927SAndroid Build Coastguard Worker /*! \brief Class interface for cl_event.
2856*61046927SAndroid Build Coastguard Worker *
2857*61046927SAndroid Build Coastguard Worker * \note Copies of these objects are shallow, meaning that the copy will refer
2858*61046927SAndroid Build Coastguard Worker * to the same underlying cl_event as the original. For details, see
2859*61046927SAndroid Build Coastguard Worker * clRetainEvent() and clReleaseEvent().
2860*61046927SAndroid Build Coastguard Worker *
2861*61046927SAndroid Build Coastguard Worker * \see cl_event
2862*61046927SAndroid Build Coastguard Worker */
2863*61046927SAndroid Build Coastguard Worker class Event : public detail::Wrapper<cl_event>
2864*61046927SAndroid Build Coastguard Worker {
2865*61046927SAndroid Build Coastguard Worker public:
2866*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
Event()2867*61046927SAndroid Build Coastguard Worker Event() : detail::Wrapper<cl_type>() { }
2868*61046927SAndroid Build Coastguard Worker
2869*61046927SAndroid Build Coastguard Worker /*! \brief Constructor from cl_event - takes ownership.
2870*61046927SAndroid Build Coastguard Worker *
2871*61046927SAndroid Build Coastguard Worker * This effectively transfers ownership of a refcount on the cl_event
2872*61046927SAndroid Build Coastguard Worker * into the new Event object.
2873*61046927SAndroid Build Coastguard Worker */
Event(const cl_event & event)2874*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Event(const cl_event& event) : detail::Wrapper<cl_type>(event) { }
2875*61046927SAndroid Build Coastguard Worker
2876*61046927SAndroid Build Coastguard Worker /*! \brief Assignment operator from cl_event - takes ownership.
2877*61046927SAndroid Build Coastguard Worker *
2878*61046927SAndroid Build Coastguard Worker * This effectively transfers ownership of a refcount on the rhs and calls
2879*61046927SAndroid Build Coastguard Worker * clReleaseEvent() on the value previously held by this instance.
2880*61046927SAndroid Build Coastguard Worker */
operator =(const cl_event & rhs)2881*61046927SAndroid Build Coastguard Worker Event& operator = (const cl_event& rhs)
2882*61046927SAndroid Build Coastguard Worker {
2883*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(rhs);
2884*61046927SAndroid Build Coastguard Worker return *this;
2885*61046927SAndroid Build Coastguard Worker }
2886*61046927SAndroid Build Coastguard Worker
2887*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetEventInfo().
2888*61046927SAndroid Build Coastguard Worker template <typename T>
getInfo(cl_event_info name,T * param) const2889*61046927SAndroid Build Coastguard Worker cl_int getInfo(cl_event_info name, T* param) const
2890*61046927SAndroid Build Coastguard Worker {
2891*61046927SAndroid Build Coastguard Worker return detail::errHandler(
2892*61046927SAndroid Build Coastguard Worker detail::getInfo(&::clGetEventInfo, object_, name, param),
2893*61046927SAndroid Build Coastguard Worker __GET_EVENT_INFO_ERR);
2894*61046927SAndroid Build Coastguard Worker }
2895*61046927SAndroid Build Coastguard Worker
2896*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetEventInfo() that returns by value.
2897*61046927SAndroid Build Coastguard Worker template <cl_event_info name> typename
2898*61046927SAndroid Build Coastguard Worker detail::param_traits<detail::cl_event_info, name>::param_type
getInfo(cl_int * err=NULL) const2899*61046927SAndroid Build Coastguard Worker getInfo(cl_int* err = NULL) const
2900*61046927SAndroid Build Coastguard Worker {
2901*61046927SAndroid Build Coastguard Worker typename detail::param_traits<
2902*61046927SAndroid Build Coastguard Worker detail::cl_event_info, name>::param_type param;
2903*61046927SAndroid Build Coastguard Worker cl_int result = getInfo(name, ¶m);
2904*61046927SAndroid Build Coastguard Worker if (err != NULL) {
2905*61046927SAndroid Build Coastguard Worker *err = result;
2906*61046927SAndroid Build Coastguard Worker }
2907*61046927SAndroid Build Coastguard Worker return param;
2908*61046927SAndroid Build Coastguard Worker }
2909*61046927SAndroid Build Coastguard Worker
2910*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetEventProfilingInfo().
2911*61046927SAndroid Build Coastguard Worker template <typename T>
getProfilingInfo(cl_profiling_info name,T * param) const2912*61046927SAndroid Build Coastguard Worker cl_int getProfilingInfo(cl_profiling_info name, T* param) const
2913*61046927SAndroid Build Coastguard Worker {
2914*61046927SAndroid Build Coastguard Worker return detail::errHandler(detail::getInfo(
2915*61046927SAndroid Build Coastguard Worker &::clGetEventProfilingInfo, object_, name, param),
2916*61046927SAndroid Build Coastguard Worker __GET_EVENT_PROFILE_INFO_ERR);
2917*61046927SAndroid Build Coastguard Worker }
2918*61046927SAndroid Build Coastguard Worker
2919*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetEventProfilingInfo() that returns by value.
2920*61046927SAndroid Build Coastguard Worker template <cl_profiling_info name> typename
2921*61046927SAndroid Build Coastguard Worker detail::param_traits<detail::cl_profiling_info, name>::param_type
getProfilingInfo(cl_int * err=NULL) const2922*61046927SAndroid Build Coastguard Worker getProfilingInfo(cl_int* err = NULL) const
2923*61046927SAndroid Build Coastguard Worker {
2924*61046927SAndroid Build Coastguard Worker typename detail::param_traits<
2925*61046927SAndroid Build Coastguard Worker detail::cl_profiling_info, name>::param_type param;
2926*61046927SAndroid Build Coastguard Worker cl_int result = getProfilingInfo(name, ¶m);
2927*61046927SAndroid Build Coastguard Worker if (err != NULL) {
2928*61046927SAndroid Build Coastguard Worker *err = result;
2929*61046927SAndroid Build Coastguard Worker }
2930*61046927SAndroid Build Coastguard Worker return param;
2931*61046927SAndroid Build Coastguard Worker }
2932*61046927SAndroid Build Coastguard Worker
2933*61046927SAndroid Build Coastguard Worker /*! \brief Blocks the calling thread until this event completes.
2934*61046927SAndroid Build Coastguard Worker *
2935*61046927SAndroid Build Coastguard Worker * Wraps clWaitForEvents().
2936*61046927SAndroid Build Coastguard Worker */
wait() const2937*61046927SAndroid Build Coastguard Worker cl_int wait() const
2938*61046927SAndroid Build Coastguard Worker {
2939*61046927SAndroid Build Coastguard Worker return detail::errHandler(
2940*61046927SAndroid Build Coastguard Worker ::clWaitForEvents(1, &object_),
2941*61046927SAndroid Build Coastguard Worker __WAIT_FOR_EVENTS_ERR);
2942*61046927SAndroid Build Coastguard Worker }
2943*61046927SAndroid Build Coastguard Worker
2944*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_1)
2945*61046927SAndroid Build Coastguard Worker /*! \brief Registers a user callback function for a specific command execution status.
2946*61046927SAndroid Build Coastguard Worker *
2947*61046927SAndroid Build Coastguard Worker * Wraps clSetEventCallback().
2948*61046927SAndroid Build Coastguard Worker */
setCallback(cl_int type,void (CL_CALLBACK * pfn_notify)(cl_event,cl_int,void *),void * user_data=NULL)2949*61046927SAndroid Build Coastguard Worker cl_int setCallback(
2950*61046927SAndroid Build Coastguard Worker cl_int type,
2951*61046927SAndroid Build Coastguard Worker void (CL_CALLBACK * pfn_notify)(cl_event, cl_int, void *),
2952*61046927SAndroid Build Coastguard Worker void * user_data = NULL)
2953*61046927SAndroid Build Coastguard Worker {
2954*61046927SAndroid Build Coastguard Worker return detail::errHandler(
2955*61046927SAndroid Build Coastguard Worker ::clSetEventCallback(
2956*61046927SAndroid Build Coastguard Worker object_,
2957*61046927SAndroid Build Coastguard Worker type,
2958*61046927SAndroid Build Coastguard Worker pfn_notify,
2959*61046927SAndroid Build Coastguard Worker user_data),
2960*61046927SAndroid Build Coastguard Worker __SET_EVENT_CALLBACK_ERR);
2961*61046927SAndroid Build Coastguard Worker }
2962*61046927SAndroid Build Coastguard Worker #endif
2963*61046927SAndroid Build Coastguard Worker
2964*61046927SAndroid Build Coastguard Worker /*! \brief Blocks the calling thread until every event specified is complete.
2965*61046927SAndroid Build Coastguard Worker *
2966*61046927SAndroid Build Coastguard Worker * Wraps clWaitForEvents().
2967*61046927SAndroid Build Coastguard Worker */
2968*61046927SAndroid Build Coastguard Worker static cl_int
waitForEvents(const VECTOR_CLASS<Event> & events)2969*61046927SAndroid Build Coastguard Worker waitForEvents(const VECTOR_CLASS<Event>& events)
2970*61046927SAndroid Build Coastguard Worker {
2971*61046927SAndroid Build Coastguard Worker return detail::errHandler(
2972*61046927SAndroid Build Coastguard Worker ::clWaitForEvents(
2973*61046927SAndroid Build Coastguard Worker (cl_uint) events.size(), (events.size() > 0) ? (cl_event*)&events.front() : NULL),
2974*61046927SAndroid Build Coastguard Worker __WAIT_FOR_EVENTS_ERR);
2975*61046927SAndroid Build Coastguard Worker }
2976*61046927SAndroid Build Coastguard Worker };
2977*61046927SAndroid Build Coastguard Worker
2978*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_1)
2979*61046927SAndroid Build Coastguard Worker /*! \brief Class interface for user events (a subset of cl_event's).
2980*61046927SAndroid Build Coastguard Worker *
2981*61046927SAndroid Build Coastguard Worker * See Event for details about copy semantics, etc.
2982*61046927SAndroid Build Coastguard Worker */
2983*61046927SAndroid Build Coastguard Worker class UserEvent : public Event
2984*61046927SAndroid Build Coastguard Worker {
2985*61046927SAndroid Build Coastguard Worker public:
2986*61046927SAndroid Build Coastguard Worker /*! \brief Constructs a user event on a given context.
2987*61046927SAndroid Build Coastguard Worker *
2988*61046927SAndroid Build Coastguard Worker * Wraps clCreateUserEvent().
2989*61046927SAndroid Build Coastguard Worker */
UserEvent(const Context & context,cl_int * err=NULL)2990*61046927SAndroid Build Coastguard Worker UserEvent(
2991*61046927SAndroid Build Coastguard Worker const Context& context,
2992*61046927SAndroid Build Coastguard Worker cl_int * err = NULL)
2993*61046927SAndroid Build Coastguard Worker {
2994*61046927SAndroid Build Coastguard Worker cl_int error;
2995*61046927SAndroid Build Coastguard Worker object_ = ::clCreateUserEvent(
2996*61046927SAndroid Build Coastguard Worker context(),
2997*61046927SAndroid Build Coastguard Worker &error);
2998*61046927SAndroid Build Coastguard Worker
2999*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_USER_EVENT_ERR);
3000*61046927SAndroid Build Coastguard Worker if (err != NULL) {
3001*61046927SAndroid Build Coastguard Worker *err = error;
3002*61046927SAndroid Build Coastguard Worker }
3003*61046927SAndroid Build Coastguard Worker }
3004*61046927SAndroid Build Coastguard Worker
3005*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
UserEvent()3006*61046927SAndroid Build Coastguard Worker UserEvent() : Event() { }
3007*61046927SAndroid Build Coastguard Worker
3008*61046927SAndroid Build Coastguard Worker /*! \brief Sets the execution status of a user event object.
3009*61046927SAndroid Build Coastguard Worker *
3010*61046927SAndroid Build Coastguard Worker * Wraps clSetUserEventStatus().
3011*61046927SAndroid Build Coastguard Worker */
setStatus(cl_int status)3012*61046927SAndroid Build Coastguard Worker cl_int setStatus(cl_int status)
3013*61046927SAndroid Build Coastguard Worker {
3014*61046927SAndroid Build Coastguard Worker return detail::errHandler(
3015*61046927SAndroid Build Coastguard Worker ::clSetUserEventStatus(object_,status),
3016*61046927SAndroid Build Coastguard Worker __SET_USER_EVENT_STATUS_ERR);
3017*61046927SAndroid Build Coastguard Worker }
3018*61046927SAndroid Build Coastguard Worker };
3019*61046927SAndroid Build Coastguard Worker #endif
3020*61046927SAndroid Build Coastguard Worker
3021*61046927SAndroid Build Coastguard Worker /*! \brief Blocks the calling thread until every event specified is complete.
3022*61046927SAndroid Build Coastguard Worker *
3023*61046927SAndroid Build Coastguard Worker * Wraps clWaitForEvents().
3024*61046927SAndroid Build Coastguard Worker */
3025*61046927SAndroid Build Coastguard Worker inline static cl_int
WaitForEvents(const VECTOR_CLASS<Event> & events)3026*61046927SAndroid Build Coastguard Worker WaitForEvents(const VECTOR_CLASS<Event>& events)
3027*61046927SAndroid Build Coastguard Worker {
3028*61046927SAndroid Build Coastguard Worker return detail::errHandler(
3029*61046927SAndroid Build Coastguard Worker ::clWaitForEvents(
3030*61046927SAndroid Build Coastguard Worker (cl_uint) events.size(), (events.size() > 0) ? (cl_event*)&events.front() : NULL),
3031*61046927SAndroid Build Coastguard Worker __WAIT_FOR_EVENTS_ERR);
3032*61046927SAndroid Build Coastguard Worker }
3033*61046927SAndroid Build Coastguard Worker
3034*61046927SAndroid Build Coastguard Worker /*! \brief Class interface for cl_mem.
3035*61046927SAndroid Build Coastguard Worker *
3036*61046927SAndroid Build Coastguard Worker * \note Copies of these objects are shallow, meaning that the copy will refer
3037*61046927SAndroid Build Coastguard Worker * to the same underlying cl_mem as the original. For details, see
3038*61046927SAndroid Build Coastguard Worker * clRetainMemObject() and clReleaseMemObject().
3039*61046927SAndroid Build Coastguard Worker *
3040*61046927SAndroid Build Coastguard Worker * \see cl_mem
3041*61046927SAndroid Build Coastguard Worker */
3042*61046927SAndroid Build Coastguard Worker class Memory : public detail::Wrapper<cl_mem>
3043*61046927SAndroid Build Coastguard Worker {
3044*61046927SAndroid Build Coastguard Worker public:
3045*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
Memory()3046*61046927SAndroid Build Coastguard Worker Memory() : detail::Wrapper<cl_type>() { }
3047*61046927SAndroid Build Coastguard Worker
3048*61046927SAndroid Build Coastguard Worker /*! \brief Constructor from cl_mem - takes ownership.
3049*61046927SAndroid Build Coastguard Worker *
3050*61046927SAndroid Build Coastguard Worker * This effectively transfers ownership of a refcount on the cl_mem
3051*61046927SAndroid Build Coastguard Worker * into the new Memory object.
3052*61046927SAndroid Build Coastguard Worker */
Memory(const cl_mem & memory)3053*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Memory(const cl_mem& memory) : detail::Wrapper<cl_type>(memory) { }
3054*61046927SAndroid Build Coastguard Worker
3055*61046927SAndroid Build Coastguard Worker /*! \brief Assignment operator from cl_mem - takes ownership.
3056*61046927SAndroid Build Coastguard Worker *
3057*61046927SAndroid Build Coastguard Worker * This effectively transfers ownership of a refcount on the rhs and calls
3058*61046927SAndroid Build Coastguard Worker * clReleaseMemObject() on the value previously held by this instance.
3059*61046927SAndroid Build Coastguard Worker */
operator =(const cl_mem & rhs)3060*61046927SAndroid Build Coastguard Worker Memory& operator = (const cl_mem& rhs)
3061*61046927SAndroid Build Coastguard Worker {
3062*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(rhs);
3063*61046927SAndroid Build Coastguard Worker return *this;
3064*61046927SAndroid Build Coastguard Worker }
3065*61046927SAndroid Build Coastguard Worker
3066*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
3067*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3068*61046927SAndroid Build Coastguard Worker */
Memory(const Memory & mem)3069*61046927SAndroid Build Coastguard Worker Memory(const Memory& mem) : detail::Wrapper<cl_type>(mem) {}
3070*61046927SAndroid Build Coastguard Worker
3071*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
3072*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3073*61046927SAndroid Build Coastguard Worker */
operator =(const Memory & mem)3074*61046927SAndroid Build Coastguard Worker Memory& operator = (const Memory &mem)
3075*61046927SAndroid Build Coastguard Worker {
3076*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(mem);
3077*61046927SAndroid Build Coastguard Worker return *this;
3078*61046927SAndroid Build Coastguard Worker }
3079*61046927SAndroid Build Coastguard Worker
3080*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
3081*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
3082*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3083*61046927SAndroid Build Coastguard Worker */
Memory(Memory && mem)3084*61046927SAndroid Build Coastguard Worker Memory(Memory&& mem) CL_HPP_NOEXCEPT : detail::Wrapper<cl_type>(std::move(mem)) {}
3085*61046927SAndroid Build Coastguard Worker
3086*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
3087*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3088*61046927SAndroid Build Coastguard Worker */
operator =(Memory && mem)3089*61046927SAndroid Build Coastguard Worker Memory& operator = (Memory &&mem)
3090*61046927SAndroid Build Coastguard Worker {
3091*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(std::move(mem));
3092*61046927SAndroid Build Coastguard Worker return *this;
3093*61046927SAndroid Build Coastguard Worker }
3094*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
3095*61046927SAndroid Build Coastguard Worker
3096*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetMemObjectInfo().
3097*61046927SAndroid Build Coastguard Worker template <typename T>
getInfo(cl_mem_info name,T * param) const3098*61046927SAndroid Build Coastguard Worker cl_int getInfo(cl_mem_info name, T* param) const
3099*61046927SAndroid Build Coastguard Worker {
3100*61046927SAndroid Build Coastguard Worker return detail::errHandler(
3101*61046927SAndroid Build Coastguard Worker detail::getInfo(&::clGetMemObjectInfo, object_, name, param),
3102*61046927SAndroid Build Coastguard Worker __GET_MEM_OBJECT_INFO_ERR);
3103*61046927SAndroid Build Coastguard Worker }
3104*61046927SAndroid Build Coastguard Worker
3105*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetMemObjectInfo() that returns by value.
3106*61046927SAndroid Build Coastguard Worker template <cl_mem_info name> typename
3107*61046927SAndroid Build Coastguard Worker detail::param_traits<detail::cl_mem_info, name>::param_type
getInfo(cl_int * err=NULL) const3108*61046927SAndroid Build Coastguard Worker getInfo(cl_int* err = NULL) const
3109*61046927SAndroid Build Coastguard Worker {
3110*61046927SAndroid Build Coastguard Worker typename detail::param_traits<
3111*61046927SAndroid Build Coastguard Worker detail::cl_mem_info, name>::param_type param;
3112*61046927SAndroid Build Coastguard Worker cl_int result = getInfo(name, ¶m);
3113*61046927SAndroid Build Coastguard Worker if (err != NULL) {
3114*61046927SAndroid Build Coastguard Worker *err = result;
3115*61046927SAndroid Build Coastguard Worker }
3116*61046927SAndroid Build Coastguard Worker return param;
3117*61046927SAndroid Build Coastguard Worker }
3118*61046927SAndroid Build Coastguard Worker
3119*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_1)
3120*61046927SAndroid Build Coastguard Worker /*! \brief Registers a callback function to be called when the memory object
3121*61046927SAndroid Build Coastguard Worker * is no longer needed.
3122*61046927SAndroid Build Coastguard Worker *
3123*61046927SAndroid Build Coastguard Worker * Wraps clSetMemObjectDestructorCallback().
3124*61046927SAndroid Build Coastguard Worker *
3125*61046927SAndroid Build Coastguard Worker * Repeated calls to this function, for a given cl_mem value, will append
3126*61046927SAndroid Build Coastguard Worker * to the list of functions called (in reverse order) when memory object's
3127*61046927SAndroid Build Coastguard Worker * resources are freed and the memory object is deleted.
3128*61046927SAndroid Build Coastguard Worker *
3129*61046927SAndroid Build Coastguard Worker * \note
3130*61046927SAndroid Build Coastguard Worker * The registered callbacks are associated with the underlying cl_mem
3131*61046927SAndroid Build Coastguard Worker * value - not the Memory class instance.
3132*61046927SAndroid Build Coastguard Worker */
setDestructorCallback(void (CL_CALLBACK * pfn_notify)(cl_mem,void *),void * user_data=NULL)3133*61046927SAndroid Build Coastguard Worker cl_int setDestructorCallback(
3134*61046927SAndroid Build Coastguard Worker void (CL_CALLBACK * pfn_notify)(cl_mem, void *),
3135*61046927SAndroid Build Coastguard Worker void * user_data = NULL)
3136*61046927SAndroid Build Coastguard Worker {
3137*61046927SAndroid Build Coastguard Worker return detail::errHandler(
3138*61046927SAndroid Build Coastguard Worker ::clSetMemObjectDestructorCallback(
3139*61046927SAndroid Build Coastguard Worker object_,
3140*61046927SAndroid Build Coastguard Worker pfn_notify,
3141*61046927SAndroid Build Coastguard Worker user_data),
3142*61046927SAndroid Build Coastguard Worker __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR);
3143*61046927SAndroid Build Coastguard Worker }
3144*61046927SAndroid Build Coastguard Worker #endif
3145*61046927SAndroid Build Coastguard Worker
3146*61046927SAndroid Build Coastguard Worker };
3147*61046927SAndroid Build Coastguard Worker
3148*61046927SAndroid Build Coastguard Worker // Pre-declare copy functions
3149*61046927SAndroid Build Coastguard Worker class Buffer;
3150*61046927SAndroid Build Coastguard Worker template< typename IteratorType >
3151*61046927SAndroid Build Coastguard Worker cl_int copy( IteratorType startIterator, IteratorType endIterator, cl::Buffer &buffer );
3152*61046927SAndroid Build Coastguard Worker template< typename IteratorType >
3153*61046927SAndroid Build Coastguard Worker cl_int copy( const cl::Buffer &buffer, IteratorType startIterator, IteratorType endIterator );
3154*61046927SAndroid Build Coastguard Worker template< typename IteratorType >
3155*61046927SAndroid Build Coastguard Worker cl_int copy( const CommandQueue &queue, IteratorType startIterator, IteratorType endIterator, cl::Buffer &buffer );
3156*61046927SAndroid Build Coastguard Worker template< typename IteratorType >
3157*61046927SAndroid Build Coastguard Worker cl_int copy( const CommandQueue &queue, const cl::Buffer &buffer, IteratorType startIterator, IteratorType endIterator );
3158*61046927SAndroid Build Coastguard Worker
3159*61046927SAndroid Build Coastguard Worker
3160*61046927SAndroid Build Coastguard Worker /*! \brief Class interface for Buffer Memory Objects.
3161*61046927SAndroid Build Coastguard Worker *
3162*61046927SAndroid Build Coastguard Worker * See Memory for details about copy semantics, etc.
3163*61046927SAndroid Build Coastguard Worker *
3164*61046927SAndroid Build Coastguard Worker * \see Memory
3165*61046927SAndroid Build Coastguard Worker */
3166*61046927SAndroid Build Coastguard Worker class Buffer : public Memory
3167*61046927SAndroid Build Coastguard Worker {
3168*61046927SAndroid Build Coastguard Worker public:
3169*61046927SAndroid Build Coastguard Worker
3170*61046927SAndroid Build Coastguard Worker /*! \brief Constructs a Buffer in a specified context.
3171*61046927SAndroid Build Coastguard Worker *
3172*61046927SAndroid Build Coastguard Worker * Wraps clCreateBuffer().
3173*61046927SAndroid Build Coastguard Worker *
3174*61046927SAndroid Build Coastguard Worker * \param host_ptr Storage to be used if the CL_MEM_USE_HOST_PTR flag was
3175*61046927SAndroid Build Coastguard Worker * specified. Note alignment & exclusivity requirements.
3176*61046927SAndroid Build Coastguard Worker */
Buffer(const Context & context,cl_mem_flags flags,::size_t size,void * host_ptr=NULL,cl_int * err=NULL)3177*61046927SAndroid Build Coastguard Worker Buffer(
3178*61046927SAndroid Build Coastguard Worker const Context& context,
3179*61046927SAndroid Build Coastguard Worker cl_mem_flags flags,
3180*61046927SAndroid Build Coastguard Worker ::size_t size,
3181*61046927SAndroid Build Coastguard Worker void* host_ptr = NULL,
3182*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
3183*61046927SAndroid Build Coastguard Worker {
3184*61046927SAndroid Build Coastguard Worker cl_int error;
3185*61046927SAndroid Build Coastguard Worker object_ = ::clCreateBuffer(context(), flags, size, host_ptr, &error);
3186*61046927SAndroid Build Coastguard Worker
3187*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_BUFFER_ERR);
3188*61046927SAndroid Build Coastguard Worker if (err != NULL) {
3189*61046927SAndroid Build Coastguard Worker *err = error;
3190*61046927SAndroid Build Coastguard Worker }
3191*61046927SAndroid Build Coastguard Worker }
3192*61046927SAndroid Build Coastguard Worker
3193*61046927SAndroid Build Coastguard Worker /*! \brief Constructs a Buffer in the default context.
3194*61046927SAndroid Build Coastguard Worker *
3195*61046927SAndroid Build Coastguard Worker * Wraps clCreateBuffer().
3196*61046927SAndroid Build Coastguard Worker *
3197*61046927SAndroid Build Coastguard Worker * \param host_ptr Storage to be used if the CL_MEM_USE_HOST_PTR flag was
3198*61046927SAndroid Build Coastguard Worker * specified. Note alignment & exclusivity requirements.
3199*61046927SAndroid Build Coastguard Worker *
3200*61046927SAndroid Build Coastguard Worker * \see Context::getDefault()
3201*61046927SAndroid Build Coastguard Worker */
Buffer(cl_mem_flags flags,::size_t size,void * host_ptr=NULL,cl_int * err=NULL)3202*61046927SAndroid Build Coastguard Worker Buffer(
3203*61046927SAndroid Build Coastguard Worker cl_mem_flags flags,
3204*61046927SAndroid Build Coastguard Worker ::size_t size,
3205*61046927SAndroid Build Coastguard Worker void* host_ptr = NULL,
3206*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
3207*61046927SAndroid Build Coastguard Worker {
3208*61046927SAndroid Build Coastguard Worker cl_int error;
3209*61046927SAndroid Build Coastguard Worker
3210*61046927SAndroid Build Coastguard Worker Context context = Context::getDefault(err);
3211*61046927SAndroid Build Coastguard Worker
3212*61046927SAndroid Build Coastguard Worker object_ = ::clCreateBuffer(context(), flags, size, host_ptr, &error);
3213*61046927SAndroid Build Coastguard Worker
3214*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_BUFFER_ERR);
3215*61046927SAndroid Build Coastguard Worker if (err != NULL) {
3216*61046927SAndroid Build Coastguard Worker *err = error;
3217*61046927SAndroid Build Coastguard Worker }
3218*61046927SAndroid Build Coastguard Worker }
3219*61046927SAndroid Build Coastguard Worker
3220*61046927SAndroid Build Coastguard Worker /*!
3221*61046927SAndroid Build Coastguard Worker * \brief Construct a Buffer from a host container via iterators.
3222*61046927SAndroid Build Coastguard Worker * IteratorType must be random access.
3223*61046927SAndroid Build Coastguard Worker * If useHostPtr is specified iterators must represent contiguous data.
3224*61046927SAndroid Build Coastguard Worker */
3225*61046927SAndroid Build Coastguard Worker template< typename IteratorType >
Buffer(IteratorType startIterator,IteratorType endIterator,bool readOnly,bool useHostPtr=false,cl_int * err=NULL)3226*61046927SAndroid Build Coastguard Worker Buffer(
3227*61046927SAndroid Build Coastguard Worker IteratorType startIterator,
3228*61046927SAndroid Build Coastguard Worker IteratorType endIterator,
3229*61046927SAndroid Build Coastguard Worker bool readOnly,
3230*61046927SAndroid Build Coastguard Worker bool useHostPtr = false,
3231*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
3232*61046927SAndroid Build Coastguard Worker {
3233*61046927SAndroid Build Coastguard Worker typedef typename std::iterator_traits<IteratorType>::value_type DataType;
3234*61046927SAndroid Build Coastguard Worker cl_int error;
3235*61046927SAndroid Build Coastguard Worker
3236*61046927SAndroid Build Coastguard Worker cl_mem_flags flags = 0;
3237*61046927SAndroid Build Coastguard Worker if( readOnly ) {
3238*61046927SAndroid Build Coastguard Worker flags |= CL_MEM_READ_ONLY;
3239*61046927SAndroid Build Coastguard Worker }
3240*61046927SAndroid Build Coastguard Worker else {
3241*61046927SAndroid Build Coastguard Worker flags |= CL_MEM_READ_WRITE;
3242*61046927SAndroid Build Coastguard Worker }
3243*61046927SAndroid Build Coastguard Worker if( useHostPtr ) {
3244*61046927SAndroid Build Coastguard Worker flags |= CL_MEM_USE_HOST_PTR;
3245*61046927SAndroid Build Coastguard Worker }
3246*61046927SAndroid Build Coastguard Worker
3247*61046927SAndroid Build Coastguard Worker ::size_t size = sizeof(DataType)*(endIterator - startIterator);
3248*61046927SAndroid Build Coastguard Worker
3249*61046927SAndroid Build Coastguard Worker Context context = Context::getDefault(err);
3250*61046927SAndroid Build Coastguard Worker
3251*61046927SAndroid Build Coastguard Worker if( useHostPtr ) {
3252*61046927SAndroid Build Coastguard Worker object_ = ::clCreateBuffer(context(), flags, size, static_cast<DataType*>(&*startIterator), &error);
3253*61046927SAndroid Build Coastguard Worker } else {
3254*61046927SAndroid Build Coastguard Worker object_ = ::clCreateBuffer(context(), flags, size, 0, &error);
3255*61046927SAndroid Build Coastguard Worker }
3256*61046927SAndroid Build Coastguard Worker
3257*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_BUFFER_ERR);
3258*61046927SAndroid Build Coastguard Worker if (err != NULL) {
3259*61046927SAndroid Build Coastguard Worker *err = error;
3260*61046927SAndroid Build Coastguard Worker }
3261*61046927SAndroid Build Coastguard Worker
3262*61046927SAndroid Build Coastguard Worker if( !useHostPtr ) {
3263*61046927SAndroid Build Coastguard Worker error = cl::copy(startIterator, endIterator, *this);
3264*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_BUFFER_ERR);
3265*61046927SAndroid Build Coastguard Worker if (err != NULL) {
3266*61046927SAndroid Build Coastguard Worker *err = error;
3267*61046927SAndroid Build Coastguard Worker }
3268*61046927SAndroid Build Coastguard Worker }
3269*61046927SAndroid Build Coastguard Worker }
3270*61046927SAndroid Build Coastguard Worker
3271*61046927SAndroid Build Coastguard Worker /*!
3272*61046927SAndroid Build Coastguard Worker * \brief Construct a Buffer from a host container via iterators using a specified context.
3273*61046927SAndroid Build Coastguard Worker * IteratorType must be random access.
3274*61046927SAndroid Build Coastguard Worker * If useHostPtr is specified iterators must represent contiguous data.
3275*61046927SAndroid Build Coastguard Worker */
3276*61046927SAndroid Build Coastguard Worker template< typename IteratorType >
3277*61046927SAndroid Build Coastguard Worker Buffer(const Context &context, IteratorType startIterator, IteratorType endIterator,
3278*61046927SAndroid Build Coastguard Worker bool readOnly, bool useHostPtr = false, cl_int* err = NULL);
3279*61046927SAndroid Build Coastguard Worker
3280*61046927SAndroid Build Coastguard Worker /*!
3281*61046927SAndroid Build Coastguard Worker * \brief Construct a Buffer from a host container via iterators using a specified queue.
3282*61046927SAndroid Build Coastguard Worker * If useHostPtr is specified iterators must represent contiguous data.
3283*61046927SAndroid Build Coastguard Worker */
3284*61046927SAndroid Build Coastguard Worker template< typename IteratorType >
3285*61046927SAndroid Build Coastguard Worker Buffer(const CommandQueue &queue, IteratorType startIterator, IteratorType endIterator,
3286*61046927SAndroid Build Coastguard Worker bool readOnly, bool useHostPtr = false, cl_int* err = NULL);
3287*61046927SAndroid Build Coastguard Worker
3288*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
Buffer()3289*61046927SAndroid Build Coastguard Worker Buffer() : Memory() { }
3290*61046927SAndroid Build Coastguard Worker
3291*61046927SAndroid Build Coastguard Worker /*! \brief Constructor from cl_mem - takes ownership.
3292*61046927SAndroid Build Coastguard Worker *
3293*61046927SAndroid Build Coastguard Worker * See Memory for further details.
3294*61046927SAndroid Build Coastguard Worker */
Buffer(const cl_mem & buffer)3295*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Buffer(const cl_mem& buffer) : Memory(buffer) { }
3296*61046927SAndroid Build Coastguard Worker
3297*61046927SAndroid Build Coastguard Worker /*! \brief Assignment from cl_mem - performs shallow copy.
3298*61046927SAndroid Build Coastguard Worker *
3299*61046927SAndroid Build Coastguard Worker * See Memory for further details.
3300*61046927SAndroid Build Coastguard Worker */
operator =(const cl_mem & rhs)3301*61046927SAndroid Build Coastguard Worker Buffer& operator = (const cl_mem& rhs)
3302*61046927SAndroid Build Coastguard Worker {
3303*61046927SAndroid Build Coastguard Worker Memory::operator=(rhs);
3304*61046927SAndroid Build Coastguard Worker return *this;
3305*61046927SAndroid Build Coastguard Worker }
3306*61046927SAndroid Build Coastguard Worker
3307*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
3308*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3309*61046927SAndroid Build Coastguard Worker */
Buffer(const Buffer & buf)3310*61046927SAndroid Build Coastguard Worker Buffer(const Buffer& buf) : Memory(buf) {}
3311*61046927SAndroid Build Coastguard Worker
3312*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
3313*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3314*61046927SAndroid Build Coastguard Worker */
operator =(const Buffer & buf)3315*61046927SAndroid Build Coastguard Worker Buffer& operator = (const Buffer &buf)
3316*61046927SAndroid Build Coastguard Worker {
3317*61046927SAndroid Build Coastguard Worker Memory::operator=(buf);
3318*61046927SAndroid Build Coastguard Worker return *this;
3319*61046927SAndroid Build Coastguard Worker }
3320*61046927SAndroid Build Coastguard Worker
3321*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
3322*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
3323*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3324*61046927SAndroid Build Coastguard Worker */
Buffer(Buffer && buf)3325*61046927SAndroid Build Coastguard Worker Buffer(Buffer&& buf) CL_HPP_NOEXCEPT : Memory(std::move(buf)) {}
3326*61046927SAndroid Build Coastguard Worker
3327*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
3328*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3329*61046927SAndroid Build Coastguard Worker */
operator =(Buffer && buf)3330*61046927SAndroid Build Coastguard Worker Buffer& operator = (Buffer &&buf)
3331*61046927SAndroid Build Coastguard Worker {
3332*61046927SAndroid Build Coastguard Worker Memory::operator=(std::move(buf));
3333*61046927SAndroid Build Coastguard Worker return *this;
3334*61046927SAndroid Build Coastguard Worker }
3335*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
3336*61046927SAndroid Build Coastguard Worker
3337*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_1)
3338*61046927SAndroid Build Coastguard Worker /*! \brief Creates a new buffer object from this.
3339*61046927SAndroid Build Coastguard Worker *
3340*61046927SAndroid Build Coastguard Worker * Wraps clCreateSubBuffer().
3341*61046927SAndroid Build Coastguard Worker */
createSubBuffer(cl_mem_flags flags,cl_buffer_create_type buffer_create_type,const void * buffer_create_info,cl_int * err=NULL)3342*61046927SAndroid Build Coastguard Worker Buffer createSubBuffer(
3343*61046927SAndroid Build Coastguard Worker cl_mem_flags flags,
3344*61046927SAndroid Build Coastguard Worker cl_buffer_create_type buffer_create_type,
3345*61046927SAndroid Build Coastguard Worker const void * buffer_create_info,
3346*61046927SAndroid Build Coastguard Worker cl_int * err = NULL)
3347*61046927SAndroid Build Coastguard Worker {
3348*61046927SAndroid Build Coastguard Worker Buffer result;
3349*61046927SAndroid Build Coastguard Worker cl_int error;
3350*61046927SAndroid Build Coastguard Worker result.object_ = ::clCreateSubBuffer(
3351*61046927SAndroid Build Coastguard Worker object_,
3352*61046927SAndroid Build Coastguard Worker flags,
3353*61046927SAndroid Build Coastguard Worker buffer_create_type,
3354*61046927SAndroid Build Coastguard Worker buffer_create_info,
3355*61046927SAndroid Build Coastguard Worker &error);
3356*61046927SAndroid Build Coastguard Worker
3357*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_SUBBUFFER_ERR);
3358*61046927SAndroid Build Coastguard Worker if (err != NULL) {
3359*61046927SAndroid Build Coastguard Worker *err = error;
3360*61046927SAndroid Build Coastguard Worker }
3361*61046927SAndroid Build Coastguard Worker
3362*61046927SAndroid Build Coastguard Worker return result;
3363*61046927SAndroid Build Coastguard Worker }
3364*61046927SAndroid Build Coastguard Worker #endif
3365*61046927SAndroid Build Coastguard Worker };
3366*61046927SAndroid Build Coastguard Worker
3367*61046927SAndroid Build Coastguard Worker #if defined (USE_DX_INTEROP)
3368*61046927SAndroid Build Coastguard Worker /*! \brief Class interface for creating OpenCL buffers from ID3D10Buffer's.
3369*61046927SAndroid Build Coastguard Worker *
3370*61046927SAndroid Build Coastguard Worker * This is provided to facilitate interoperability with Direct3D.
3371*61046927SAndroid Build Coastguard Worker *
3372*61046927SAndroid Build Coastguard Worker * See Memory for details about copy semantics, etc.
3373*61046927SAndroid Build Coastguard Worker *
3374*61046927SAndroid Build Coastguard Worker * \see Memory
3375*61046927SAndroid Build Coastguard Worker */
3376*61046927SAndroid Build Coastguard Worker class BufferD3D10 : public Buffer
3377*61046927SAndroid Build Coastguard Worker {
3378*61046927SAndroid Build Coastguard Worker public:
3379*61046927SAndroid Build Coastguard Worker typedef CL_API_ENTRY cl_mem (CL_API_CALL *PFN_clCreateFromD3D10BufferKHR)(
3380*61046927SAndroid Build Coastguard Worker cl_context context, cl_mem_flags flags, ID3D10Buffer* buffer,
3381*61046927SAndroid Build Coastguard Worker cl_int* errcode_ret);
3382*61046927SAndroid Build Coastguard Worker
3383*61046927SAndroid Build Coastguard Worker /*! \brief Constructs a BufferD3D10, in a specified context, from a
3384*61046927SAndroid Build Coastguard Worker * given ID3D10Buffer.
3385*61046927SAndroid Build Coastguard Worker *
3386*61046927SAndroid Build Coastguard Worker * Wraps clCreateFromD3D10BufferKHR().
3387*61046927SAndroid Build Coastguard Worker */
BufferD3D10(const Context & context,cl_mem_flags flags,ID3D10Buffer * bufobj,cl_int * err=NULL)3388*61046927SAndroid Build Coastguard Worker BufferD3D10(
3389*61046927SAndroid Build Coastguard Worker const Context& context,
3390*61046927SAndroid Build Coastguard Worker cl_mem_flags flags,
3391*61046927SAndroid Build Coastguard Worker ID3D10Buffer* bufobj,
3392*61046927SAndroid Build Coastguard Worker cl_int * err = NULL)
3393*61046927SAndroid Build Coastguard Worker {
3394*61046927SAndroid Build Coastguard Worker static PFN_clCreateFromD3D10BufferKHR pfn_clCreateFromD3D10BufferKHR = NULL;
3395*61046927SAndroid Build Coastguard Worker
3396*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
3397*61046927SAndroid Build Coastguard Worker vector<cl_context_properties> props = context.getInfo<CL_CONTEXT_PROPERTIES>();
3398*61046927SAndroid Build Coastguard Worker cl_platform platform = -1;
3399*61046927SAndroid Build Coastguard Worker for( int i = 0; i < props.size(); ++i ) {
3400*61046927SAndroid Build Coastguard Worker if( props[i] == CL_CONTEXT_PLATFORM ) {
3401*61046927SAndroid Build Coastguard Worker platform = props[i+1];
3402*61046927SAndroid Build Coastguard Worker }
3403*61046927SAndroid Build Coastguard Worker }
3404*61046927SAndroid Build Coastguard Worker __INIT_CL_EXT_FCN_PTR_PLATFORM(platform, clCreateFromD3D10BufferKHR);
3405*61046927SAndroid Build Coastguard Worker #endif
3406*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_1)
3407*61046927SAndroid Build Coastguard Worker __INIT_CL_EXT_FCN_PTR(clCreateFromD3D10BufferKHR);
3408*61046927SAndroid Build Coastguard Worker #endif
3409*61046927SAndroid Build Coastguard Worker
3410*61046927SAndroid Build Coastguard Worker cl_int error;
3411*61046927SAndroid Build Coastguard Worker object_ = pfn_clCreateFromD3D10BufferKHR(
3412*61046927SAndroid Build Coastguard Worker context(),
3413*61046927SAndroid Build Coastguard Worker flags,
3414*61046927SAndroid Build Coastguard Worker bufobj,
3415*61046927SAndroid Build Coastguard Worker &error);
3416*61046927SAndroid Build Coastguard Worker
3417*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_GL_BUFFER_ERR);
3418*61046927SAndroid Build Coastguard Worker if (err != NULL) {
3419*61046927SAndroid Build Coastguard Worker *err = error;
3420*61046927SAndroid Build Coastguard Worker }
3421*61046927SAndroid Build Coastguard Worker }
3422*61046927SAndroid Build Coastguard Worker
3423*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
BufferD3D10()3424*61046927SAndroid Build Coastguard Worker BufferD3D10() : Buffer() { }
3425*61046927SAndroid Build Coastguard Worker
3426*61046927SAndroid Build Coastguard Worker /*! \brief Constructor from cl_mem - takes ownership.
3427*61046927SAndroid Build Coastguard Worker *
3428*61046927SAndroid Build Coastguard Worker * See Memory for further details.
3429*61046927SAndroid Build Coastguard Worker */
BufferD3D10(const cl_mem & buffer)3430*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS BufferD3D10(const cl_mem& buffer) : Buffer(buffer) { }
3431*61046927SAndroid Build Coastguard Worker
3432*61046927SAndroid Build Coastguard Worker /*! \brief Assignment from cl_mem - performs shallow copy.
3433*61046927SAndroid Build Coastguard Worker *
3434*61046927SAndroid Build Coastguard Worker * See Memory for further details.
3435*61046927SAndroid Build Coastguard Worker */
operator =(const cl_mem & rhs)3436*61046927SAndroid Build Coastguard Worker BufferD3D10& operator = (const cl_mem& rhs)
3437*61046927SAndroid Build Coastguard Worker {
3438*61046927SAndroid Build Coastguard Worker Buffer::operator=(rhs);
3439*61046927SAndroid Build Coastguard Worker return *this;
3440*61046927SAndroid Build Coastguard Worker }
3441*61046927SAndroid Build Coastguard Worker
3442*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
3443*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3444*61046927SAndroid Build Coastguard Worker */
BufferD3D10(const BufferD3D10 & buf)3445*61046927SAndroid Build Coastguard Worker BufferD3D10(const BufferD3D10& buf) : Buffer(buf) {}
3446*61046927SAndroid Build Coastguard Worker
3447*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
3448*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3449*61046927SAndroid Build Coastguard Worker */
operator =(const BufferD3D10 & buf)3450*61046927SAndroid Build Coastguard Worker BufferD3D10& operator = (const BufferD3D10 &buf)
3451*61046927SAndroid Build Coastguard Worker {
3452*61046927SAndroid Build Coastguard Worker Buffer::operator=(buf);
3453*61046927SAndroid Build Coastguard Worker return *this;
3454*61046927SAndroid Build Coastguard Worker }
3455*61046927SAndroid Build Coastguard Worker
3456*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
3457*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
3458*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3459*61046927SAndroid Build Coastguard Worker */
BufferD3D10(BufferD3D10 && buf)3460*61046927SAndroid Build Coastguard Worker BufferD3D10(BufferD3D10&& buf) CL_HPP_NOEXCEPT : Buffer(std::move(buf)) {}
3461*61046927SAndroid Build Coastguard Worker
3462*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
3463*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3464*61046927SAndroid Build Coastguard Worker */
operator =(BufferD3D10 && buf)3465*61046927SAndroid Build Coastguard Worker BufferD3D10& operator = (BufferD3D10 &&buf)
3466*61046927SAndroid Build Coastguard Worker {
3467*61046927SAndroid Build Coastguard Worker Buffer::operator=(std::move(buf));
3468*61046927SAndroid Build Coastguard Worker return *this;
3469*61046927SAndroid Build Coastguard Worker }
3470*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
3471*61046927SAndroid Build Coastguard Worker };
3472*61046927SAndroid Build Coastguard Worker #endif
3473*61046927SAndroid Build Coastguard Worker
3474*61046927SAndroid Build Coastguard Worker /*! \brief Class interface for GL Buffer Memory Objects.
3475*61046927SAndroid Build Coastguard Worker *
3476*61046927SAndroid Build Coastguard Worker * This is provided to facilitate interoperability with OpenGL.
3477*61046927SAndroid Build Coastguard Worker *
3478*61046927SAndroid Build Coastguard Worker * See Memory for details about copy semantics, etc.
3479*61046927SAndroid Build Coastguard Worker *
3480*61046927SAndroid Build Coastguard Worker * \see Memory
3481*61046927SAndroid Build Coastguard Worker */
3482*61046927SAndroid Build Coastguard Worker class BufferGL : public Buffer
3483*61046927SAndroid Build Coastguard Worker {
3484*61046927SAndroid Build Coastguard Worker public:
3485*61046927SAndroid Build Coastguard Worker /*! \brief Constructs a BufferGL in a specified context, from a given
3486*61046927SAndroid Build Coastguard Worker * GL buffer.
3487*61046927SAndroid Build Coastguard Worker *
3488*61046927SAndroid Build Coastguard Worker * Wraps clCreateFromGLBuffer().
3489*61046927SAndroid Build Coastguard Worker */
BufferGL(const Context & context,cl_mem_flags flags,cl_GLuint bufobj,cl_int * err=NULL)3490*61046927SAndroid Build Coastguard Worker BufferGL(
3491*61046927SAndroid Build Coastguard Worker const Context& context,
3492*61046927SAndroid Build Coastguard Worker cl_mem_flags flags,
3493*61046927SAndroid Build Coastguard Worker cl_GLuint bufobj,
3494*61046927SAndroid Build Coastguard Worker cl_int * err = NULL)
3495*61046927SAndroid Build Coastguard Worker {
3496*61046927SAndroid Build Coastguard Worker cl_int error;
3497*61046927SAndroid Build Coastguard Worker object_ = ::clCreateFromGLBuffer(
3498*61046927SAndroid Build Coastguard Worker context(),
3499*61046927SAndroid Build Coastguard Worker flags,
3500*61046927SAndroid Build Coastguard Worker bufobj,
3501*61046927SAndroid Build Coastguard Worker &error);
3502*61046927SAndroid Build Coastguard Worker
3503*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_GL_BUFFER_ERR);
3504*61046927SAndroid Build Coastguard Worker if (err != NULL) {
3505*61046927SAndroid Build Coastguard Worker *err = error;
3506*61046927SAndroid Build Coastguard Worker }
3507*61046927SAndroid Build Coastguard Worker }
3508*61046927SAndroid Build Coastguard Worker
3509*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
BufferGL()3510*61046927SAndroid Build Coastguard Worker BufferGL() : Buffer() { }
3511*61046927SAndroid Build Coastguard Worker
3512*61046927SAndroid Build Coastguard Worker /*! \brief Constructor from cl_mem - takes ownership.
3513*61046927SAndroid Build Coastguard Worker *
3514*61046927SAndroid Build Coastguard Worker * See Memory for further details.
3515*61046927SAndroid Build Coastguard Worker */
BufferGL(const cl_mem & buffer)3516*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS BufferGL(const cl_mem& buffer) : Buffer(buffer) { }
3517*61046927SAndroid Build Coastguard Worker
3518*61046927SAndroid Build Coastguard Worker /*! \brief Assignment from cl_mem - performs shallow copy.
3519*61046927SAndroid Build Coastguard Worker *
3520*61046927SAndroid Build Coastguard Worker * See Memory for further details.
3521*61046927SAndroid Build Coastguard Worker */
operator =(const cl_mem & rhs)3522*61046927SAndroid Build Coastguard Worker BufferGL& operator = (const cl_mem& rhs)
3523*61046927SAndroid Build Coastguard Worker {
3524*61046927SAndroid Build Coastguard Worker Buffer::operator=(rhs);
3525*61046927SAndroid Build Coastguard Worker return *this;
3526*61046927SAndroid Build Coastguard Worker }
3527*61046927SAndroid Build Coastguard Worker
3528*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
3529*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3530*61046927SAndroid Build Coastguard Worker */
BufferGL(const BufferGL & buf)3531*61046927SAndroid Build Coastguard Worker BufferGL(const BufferGL& buf) : Buffer(buf) {}
3532*61046927SAndroid Build Coastguard Worker
3533*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
3534*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3535*61046927SAndroid Build Coastguard Worker */
operator =(const BufferGL & buf)3536*61046927SAndroid Build Coastguard Worker BufferGL& operator = (const BufferGL &buf)
3537*61046927SAndroid Build Coastguard Worker {
3538*61046927SAndroid Build Coastguard Worker Buffer::operator=(buf);
3539*61046927SAndroid Build Coastguard Worker return *this;
3540*61046927SAndroid Build Coastguard Worker }
3541*61046927SAndroid Build Coastguard Worker
3542*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
3543*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
3544*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3545*61046927SAndroid Build Coastguard Worker */
BufferGL(BufferGL && buf)3546*61046927SAndroid Build Coastguard Worker BufferGL(BufferGL&& buf) CL_HPP_NOEXCEPT : Buffer(std::move(buf)) {}
3547*61046927SAndroid Build Coastguard Worker
3548*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
3549*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3550*61046927SAndroid Build Coastguard Worker */
operator =(BufferGL && buf)3551*61046927SAndroid Build Coastguard Worker BufferGL& operator = (BufferGL &&buf)
3552*61046927SAndroid Build Coastguard Worker {
3553*61046927SAndroid Build Coastguard Worker Buffer::operator=(std::move(buf));
3554*61046927SAndroid Build Coastguard Worker return *this;
3555*61046927SAndroid Build Coastguard Worker }
3556*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
3557*61046927SAndroid Build Coastguard Worker
3558*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetGLObjectInfo().
getObjectInfo(cl_gl_object_type * type,cl_GLuint * gl_object_name)3559*61046927SAndroid Build Coastguard Worker cl_int getObjectInfo(
3560*61046927SAndroid Build Coastguard Worker cl_gl_object_type *type,
3561*61046927SAndroid Build Coastguard Worker cl_GLuint * gl_object_name)
3562*61046927SAndroid Build Coastguard Worker {
3563*61046927SAndroid Build Coastguard Worker return detail::errHandler(
3564*61046927SAndroid Build Coastguard Worker ::clGetGLObjectInfo(object_,type,gl_object_name),
3565*61046927SAndroid Build Coastguard Worker __GET_GL_OBJECT_INFO_ERR);
3566*61046927SAndroid Build Coastguard Worker }
3567*61046927SAndroid Build Coastguard Worker };
3568*61046927SAndroid Build Coastguard Worker
3569*61046927SAndroid Build Coastguard Worker /*! \brief C++ base class for Image Memory objects.
3570*61046927SAndroid Build Coastguard Worker *
3571*61046927SAndroid Build Coastguard Worker * See Memory for details about copy semantics, etc.
3572*61046927SAndroid Build Coastguard Worker *
3573*61046927SAndroid Build Coastguard Worker * \see Memory
3574*61046927SAndroid Build Coastguard Worker */
3575*61046927SAndroid Build Coastguard Worker class Image : public Memory
3576*61046927SAndroid Build Coastguard Worker {
3577*61046927SAndroid Build Coastguard Worker protected:
3578*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
Image()3579*61046927SAndroid Build Coastguard Worker Image() : Memory() { }
3580*61046927SAndroid Build Coastguard Worker
3581*61046927SAndroid Build Coastguard Worker /*! \brief Constructor from cl_mem - takes ownership.
3582*61046927SAndroid Build Coastguard Worker *
3583*61046927SAndroid Build Coastguard Worker * See Memory for further details.
3584*61046927SAndroid Build Coastguard Worker */
Image(const cl_mem & image)3585*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Image(const cl_mem& image) : Memory(image) { }
3586*61046927SAndroid Build Coastguard Worker
3587*61046927SAndroid Build Coastguard Worker /*! \brief Assignment from cl_mem - performs shallow copy.
3588*61046927SAndroid Build Coastguard Worker *
3589*61046927SAndroid Build Coastguard Worker * See Memory for further details.
3590*61046927SAndroid Build Coastguard Worker */
operator =(const cl_mem & rhs)3591*61046927SAndroid Build Coastguard Worker Image& operator = (const cl_mem& rhs)
3592*61046927SAndroid Build Coastguard Worker {
3593*61046927SAndroid Build Coastguard Worker Memory::operator=(rhs);
3594*61046927SAndroid Build Coastguard Worker return *this;
3595*61046927SAndroid Build Coastguard Worker }
3596*61046927SAndroid Build Coastguard Worker
3597*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
3598*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3599*61046927SAndroid Build Coastguard Worker */
Image(const Image & img)3600*61046927SAndroid Build Coastguard Worker Image(const Image& img) : Memory(img) {}
3601*61046927SAndroid Build Coastguard Worker
3602*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
3603*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3604*61046927SAndroid Build Coastguard Worker */
operator =(const Image & img)3605*61046927SAndroid Build Coastguard Worker Image& operator = (const Image &img)
3606*61046927SAndroid Build Coastguard Worker {
3607*61046927SAndroid Build Coastguard Worker Memory::operator=(img);
3608*61046927SAndroid Build Coastguard Worker return *this;
3609*61046927SAndroid Build Coastguard Worker }
3610*61046927SAndroid Build Coastguard Worker
3611*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
3612*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
3613*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3614*61046927SAndroid Build Coastguard Worker */
Image(Image && img)3615*61046927SAndroid Build Coastguard Worker Image(Image&& img) CL_HPP_NOEXCEPT : Memory(std::move(img)) {}
3616*61046927SAndroid Build Coastguard Worker
3617*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
3618*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3619*61046927SAndroid Build Coastguard Worker */
operator =(Image && img)3620*61046927SAndroid Build Coastguard Worker Image& operator = (Image &&img)
3621*61046927SAndroid Build Coastguard Worker {
3622*61046927SAndroid Build Coastguard Worker Memory::operator=(std::move(img));
3623*61046927SAndroid Build Coastguard Worker return *this;
3624*61046927SAndroid Build Coastguard Worker }
3625*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
3626*61046927SAndroid Build Coastguard Worker
3627*61046927SAndroid Build Coastguard Worker public:
3628*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetImageInfo().
3629*61046927SAndroid Build Coastguard Worker template <typename T>
getImageInfo(cl_image_info name,T * param) const3630*61046927SAndroid Build Coastguard Worker cl_int getImageInfo(cl_image_info name, T* param) const
3631*61046927SAndroid Build Coastguard Worker {
3632*61046927SAndroid Build Coastguard Worker return detail::errHandler(
3633*61046927SAndroid Build Coastguard Worker detail::getInfo(&::clGetImageInfo, object_, name, param),
3634*61046927SAndroid Build Coastguard Worker __GET_IMAGE_INFO_ERR);
3635*61046927SAndroid Build Coastguard Worker }
3636*61046927SAndroid Build Coastguard Worker
3637*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetImageInfo() that returns by value.
3638*61046927SAndroid Build Coastguard Worker template <cl_image_info name> typename
3639*61046927SAndroid Build Coastguard Worker detail::param_traits<detail::cl_image_info, name>::param_type
getImageInfo(cl_int * err=NULL) const3640*61046927SAndroid Build Coastguard Worker getImageInfo(cl_int* err = NULL) const
3641*61046927SAndroid Build Coastguard Worker {
3642*61046927SAndroid Build Coastguard Worker typename detail::param_traits<
3643*61046927SAndroid Build Coastguard Worker detail::cl_image_info, name>::param_type param;
3644*61046927SAndroid Build Coastguard Worker cl_int result = getImageInfo(name, ¶m);
3645*61046927SAndroid Build Coastguard Worker if (err != NULL) {
3646*61046927SAndroid Build Coastguard Worker *err = result;
3647*61046927SAndroid Build Coastguard Worker }
3648*61046927SAndroid Build Coastguard Worker return param;
3649*61046927SAndroid Build Coastguard Worker }
3650*61046927SAndroid Build Coastguard Worker };
3651*61046927SAndroid Build Coastguard Worker
3652*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
3653*61046927SAndroid Build Coastguard Worker /*! \brief Class interface for 1D Image Memory objects.
3654*61046927SAndroid Build Coastguard Worker *
3655*61046927SAndroid Build Coastguard Worker * See Memory for details about copy semantics, etc.
3656*61046927SAndroid Build Coastguard Worker *
3657*61046927SAndroid Build Coastguard Worker * \see Memory
3658*61046927SAndroid Build Coastguard Worker */
3659*61046927SAndroid Build Coastguard Worker class Image1D : public Image
3660*61046927SAndroid Build Coastguard Worker {
3661*61046927SAndroid Build Coastguard Worker public:
3662*61046927SAndroid Build Coastguard Worker /*! \brief Constructs a 1D Image in a specified context.
3663*61046927SAndroid Build Coastguard Worker *
3664*61046927SAndroid Build Coastguard Worker * Wraps clCreateImage().
3665*61046927SAndroid Build Coastguard Worker */
Image1D(const Context & context,cl_mem_flags flags,ImageFormat format,::size_t width,void * host_ptr=NULL,cl_int * err=NULL)3666*61046927SAndroid Build Coastguard Worker Image1D(
3667*61046927SAndroid Build Coastguard Worker const Context& context,
3668*61046927SAndroid Build Coastguard Worker cl_mem_flags flags,
3669*61046927SAndroid Build Coastguard Worker ImageFormat format,
3670*61046927SAndroid Build Coastguard Worker ::size_t width,
3671*61046927SAndroid Build Coastguard Worker void* host_ptr = NULL,
3672*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
3673*61046927SAndroid Build Coastguard Worker {
3674*61046927SAndroid Build Coastguard Worker cl_int error;
3675*61046927SAndroid Build Coastguard Worker cl_image_desc desc =
3676*61046927SAndroid Build Coastguard Worker {
3677*61046927SAndroid Build Coastguard Worker CL_MEM_OBJECT_IMAGE1D,
3678*61046927SAndroid Build Coastguard Worker width,
3679*61046927SAndroid Build Coastguard Worker 0, 0, 0, 0, 0, 0, 0, 0
3680*61046927SAndroid Build Coastguard Worker };
3681*61046927SAndroid Build Coastguard Worker object_ = ::clCreateImage(
3682*61046927SAndroid Build Coastguard Worker context(),
3683*61046927SAndroid Build Coastguard Worker flags,
3684*61046927SAndroid Build Coastguard Worker &format,
3685*61046927SAndroid Build Coastguard Worker &desc,
3686*61046927SAndroid Build Coastguard Worker host_ptr,
3687*61046927SAndroid Build Coastguard Worker &error);
3688*61046927SAndroid Build Coastguard Worker
3689*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_IMAGE_ERR);
3690*61046927SAndroid Build Coastguard Worker if (err != NULL) {
3691*61046927SAndroid Build Coastguard Worker *err = error;
3692*61046927SAndroid Build Coastguard Worker }
3693*61046927SAndroid Build Coastguard Worker }
3694*61046927SAndroid Build Coastguard Worker
3695*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
Image1D()3696*61046927SAndroid Build Coastguard Worker Image1D() { }
3697*61046927SAndroid Build Coastguard Worker
3698*61046927SAndroid Build Coastguard Worker /*! \brief Constructor from cl_mem - takes ownership.
3699*61046927SAndroid Build Coastguard Worker *
3700*61046927SAndroid Build Coastguard Worker * See Memory for further details.
3701*61046927SAndroid Build Coastguard Worker */
Image1D(const cl_mem & image1D)3702*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Image1D(const cl_mem& image1D) : Image(image1D) { }
3703*61046927SAndroid Build Coastguard Worker
3704*61046927SAndroid Build Coastguard Worker /*! \brief Assignment from cl_mem - performs shallow copy.
3705*61046927SAndroid Build Coastguard Worker *
3706*61046927SAndroid Build Coastguard Worker * See Memory for further details.
3707*61046927SAndroid Build Coastguard Worker */
operator =(const cl_mem & rhs)3708*61046927SAndroid Build Coastguard Worker Image1D& operator = (const cl_mem& rhs)
3709*61046927SAndroid Build Coastguard Worker {
3710*61046927SAndroid Build Coastguard Worker Image::operator=(rhs);
3711*61046927SAndroid Build Coastguard Worker return *this;
3712*61046927SAndroid Build Coastguard Worker }
3713*61046927SAndroid Build Coastguard Worker
3714*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
3715*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3716*61046927SAndroid Build Coastguard Worker */
Image1D(const Image1D & img)3717*61046927SAndroid Build Coastguard Worker Image1D(const Image1D& img) : Image(img) {}
3718*61046927SAndroid Build Coastguard Worker
3719*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
3720*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3721*61046927SAndroid Build Coastguard Worker */
operator =(const Image1D & img)3722*61046927SAndroid Build Coastguard Worker Image1D& operator = (const Image1D &img)
3723*61046927SAndroid Build Coastguard Worker {
3724*61046927SAndroid Build Coastguard Worker Image::operator=(img);
3725*61046927SAndroid Build Coastguard Worker return *this;
3726*61046927SAndroid Build Coastguard Worker }
3727*61046927SAndroid Build Coastguard Worker
3728*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
3729*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
3730*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3731*61046927SAndroid Build Coastguard Worker */
Image1D(Image1D && img)3732*61046927SAndroid Build Coastguard Worker Image1D(Image1D&& img) CL_HPP_NOEXCEPT : Image(std::move(img)) {}
3733*61046927SAndroid Build Coastguard Worker
3734*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
3735*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3736*61046927SAndroid Build Coastguard Worker */
operator =(Image1D && img)3737*61046927SAndroid Build Coastguard Worker Image1D& operator = (Image1D &&img)
3738*61046927SAndroid Build Coastguard Worker {
3739*61046927SAndroid Build Coastguard Worker Image::operator=(std::move(img));
3740*61046927SAndroid Build Coastguard Worker return *this;
3741*61046927SAndroid Build Coastguard Worker }
3742*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
3743*61046927SAndroid Build Coastguard Worker };
3744*61046927SAndroid Build Coastguard Worker
3745*61046927SAndroid Build Coastguard Worker /*! \class Image1DBuffer
3746*61046927SAndroid Build Coastguard Worker * \brief Image interface for 1D buffer images.
3747*61046927SAndroid Build Coastguard Worker */
3748*61046927SAndroid Build Coastguard Worker class Image1DBuffer : public Image
3749*61046927SAndroid Build Coastguard Worker {
3750*61046927SAndroid Build Coastguard Worker public:
Image1DBuffer(const Context & context,cl_mem_flags flags,ImageFormat format,::size_t width,const Buffer & buffer,cl_int * err=NULL)3751*61046927SAndroid Build Coastguard Worker Image1DBuffer(
3752*61046927SAndroid Build Coastguard Worker const Context& context,
3753*61046927SAndroid Build Coastguard Worker cl_mem_flags flags,
3754*61046927SAndroid Build Coastguard Worker ImageFormat format,
3755*61046927SAndroid Build Coastguard Worker ::size_t width,
3756*61046927SAndroid Build Coastguard Worker const Buffer &buffer,
3757*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
3758*61046927SAndroid Build Coastguard Worker {
3759*61046927SAndroid Build Coastguard Worker cl_int error;
3760*61046927SAndroid Build Coastguard Worker cl_image_desc desc =
3761*61046927SAndroid Build Coastguard Worker {
3762*61046927SAndroid Build Coastguard Worker CL_MEM_OBJECT_IMAGE1D_BUFFER,
3763*61046927SAndroid Build Coastguard Worker width,
3764*61046927SAndroid Build Coastguard Worker 0, 0, 0, 0, 0, 0, 0,
3765*61046927SAndroid Build Coastguard Worker buffer()
3766*61046927SAndroid Build Coastguard Worker };
3767*61046927SAndroid Build Coastguard Worker object_ = ::clCreateImage(
3768*61046927SAndroid Build Coastguard Worker context(),
3769*61046927SAndroid Build Coastguard Worker flags,
3770*61046927SAndroid Build Coastguard Worker &format,
3771*61046927SAndroid Build Coastguard Worker &desc,
3772*61046927SAndroid Build Coastguard Worker NULL,
3773*61046927SAndroid Build Coastguard Worker &error);
3774*61046927SAndroid Build Coastguard Worker
3775*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_IMAGE_ERR);
3776*61046927SAndroid Build Coastguard Worker if (err != NULL) {
3777*61046927SAndroid Build Coastguard Worker *err = error;
3778*61046927SAndroid Build Coastguard Worker }
3779*61046927SAndroid Build Coastguard Worker }
3780*61046927SAndroid Build Coastguard Worker
Image1DBuffer()3781*61046927SAndroid Build Coastguard Worker Image1DBuffer() { }
3782*61046927SAndroid Build Coastguard Worker
Image1DBuffer(const cl_mem & image1D)3783*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Image1DBuffer(const cl_mem& image1D) : Image(image1D) { }
3784*61046927SAndroid Build Coastguard Worker
operator =(const cl_mem & rhs)3785*61046927SAndroid Build Coastguard Worker Image1DBuffer& operator = (const cl_mem& rhs)
3786*61046927SAndroid Build Coastguard Worker {
3787*61046927SAndroid Build Coastguard Worker Image::operator=(rhs);
3788*61046927SAndroid Build Coastguard Worker return *this;
3789*61046927SAndroid Build Coastguard Worker }
3790*61046927SAndroid Build Coastguard Worker
3791*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
3792*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3793*61046927SAndroid Build Coastguard Worker */
Image1DBuffer(const Image1DBuffer & img)3794*61046927SAndroid Build Coastguard Worker Image1DBuffer(const Image1DBuffer& img) : Image(img) {}
3795*61046927SAndroid Build Coastguard Worker
3796*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
3797*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3798*61046927SAndroid Build Coastguard Worker */
operator =(const Image1DBuffer & img)3799*61046927SAndroid Build Coastguard Worker Image1DBuffer& operator = (const Image1DBuffer &img)
3800*61046927SAndroid Build Coastguard Worker {
3801*61046927SAndroid Build Coastguard Worker Image::operator=(img);
3802*61046927SAndroid Build Coastguard Worker return *this;
3803*61046927SAndroid Build Coastguard Worker }
3804*61046927SAndroid Build Coastguard Worker
3805*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
3806*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
3807*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3808*61046927SAndroid Build Coastguard Worker */
Image1DBuffer(Image1DBuffer && img)3809*61046927SAndroid Build Coastguard Worker Image1DBuffer(Image1DBuffer&& img) CL_HPP_NOEXCEPT : Image(std::move(img)) {}
3810*61046927SAndroid Build Coastguard Worker
3811*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
3812*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3813*61046927SAndroid Build Coastguard Worker */
operator =(Image1DBuffer && img)3814*61046927SAndroid Build Coastguard Worker Image1DBuffer& operator = (Image1DBuffer &&img)
3815*61046927SAndroid Build Coastguard Worker {
3816*61046927SAndroid Build Coastguard Worker Image::operator=(std::move(img));
3817*61046927SAndroid Build Coastguard Worker return *this;
3818*61046927SAndroid Build Coastguard Worker }
3819*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
3820*61046927SAndroid Build Coastguard Worker };
3821*61046927SAndroid Build Coastguard Worker
3822*61046927SAndroid Build Coastguard Worker /*! \class Image1DArray
3823*61046927SAndroid Build Coastguard Worker * \brief Image interface for arrays of 1D images.
3824*61046927SAndroid Build Coastguard Worker */
3825*61046927SAndroid Build Coastguard Worker class Image1DArray : public Image
3826*61046927SAndroid Build Coastguard Worker {
3827*61046927SAndroid Build Coastguard Worker public:
Image1DArray(const Context & context,cl_mem_flags flags,ImageFormat format,::size_t arraySize,::size_t width,::size_t rowPitch,void * host_ptr=NULL,cl_int * err=NULL)3828*61046927SAndroid Build Coastguard Worker Image1DArray(
3829*61046927SAndroid Build Coastguard Worker const Context& context,
3830*61046927SAndroid Build Coastguard Worker cl_mem_flags flags,
3831*61046927SAndroid Build Coastguard Worker ImageFormat format,
3832*61046927SAndroid Build Coastguard Worker ::size_t arraySize,
3833*61046927SAndroid Build Coastguard Worker ::size_t width,
3834*61046927SAndroid Build Coastguard Worker ::size_t rowPitch,
3835*61046927SAndroid Build Coastguard Worker void* host_ptr = NULL,
3836*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
3837*61046927SAndroid Build Coastguard Worker {
3838*61046927SAndroid Build Coastguard Worker cl_int error;
3839*61046927SAndroid Build Coastguard Worker cl_image_desc desc =
3840*61046927SAndroid Build Coastguard Worker {
3841*61046927SAndroid Build Coastguard Worker CL_MEM_OBJECT_IMAGE1D_ARRAY,
3842*61046927SAndroid Build Coastguard Worker width,
3843*61046927SAndroid Build Coastguard Worker 0, 0, // height, depth (unused)
3844*61046927SAndroid Build Coastguard Worker arraySize,
3845*61046927SAndroid Build Coastguard Worker rowPitch,
3846*61046927SAndroid Build Coastguard Worker 0, 0, 0, 0
3847*61046927SAndroid Build Coastguard Worker };
3848*61046927SAndroid Build Coastguard Worker object_ = ::clCreateImage(
3849*61046927SAndroid Build Coastguard Worker context(),
3850*61046927SAndroid Build Coastguard Worker flags,
3851*61046927SAndroid Build Coastguard Worker &format,
3852*61046927SAndroid Build Coastguard Worker &desc,
3853*61046927SAndroid Build Coastguard Worker host_ptr,
3854*61046927SAndroid Build Coastguard Worker &error);
3855*61046927SAndroid Build Coastguard Worker
3856*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_IMAGE_ERR);
3857*61046927SAndroid Build Coastguard Worker if (err != NULL) {
3858*61046927SAndroid Build Coastguard Worker *err = error;
3859*61046927SAndroid Build Coastguard Worker }
3860*61046927SAndroid Build Coastguard Worker }
3861*61046927SAndroid Build Coastguard Worker
Image1DArray()3862*61046927SAndroid Build Coastguard Worker Image1DArray() { }
3863*61046927SAndroid Build Coastguard Worker
Image1DArray(const cl_mem & imageArray)3864*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Image1DArray(const cl_mem& imageArray) : Image(imageArray) { }
3865*61046927SAndroid Build Coastguard Worker
operator =(const cl_mem & rhs)3866*61046927SAndroid Build Coastguard Worker Image1DArray& operator = (const cl_mem& rhs)
3867*61046927SAndroid Build Coastguard Worker {
3868*61046927SAndroid Build Coastguard Worker Image::operator=(rhs);
3869*61046927SAndroid Build Coastguard Worker return *this;
3870*61046927SAndroid Build Coastguard Worker }
3871*61046927SAndroid Build Coastguard Worker
3872*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
3873*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3874*61046927SAndroid Build Coastguard Worker */
Image1DArray(const Image1DArray & img)3875*61046927SAndroid Build Coastguard Worker Image1DArray(const Image1DArray& img) : Image(img) {}
3876*61046927SAndroid Build Coastguard Worker
3877*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
3878*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3879*61046927SAndroid Build Coastguard Worker */
operator =(const Image1DArray & img)3880*61046927SAndroid Build Coastguard Worker Image1DArray& operator = (const Image1DArray &img)
3881*61046927SAndroid Build Coastguard Worker {
3882*61046927SAndroid Build Coastguard Worker Image::operator=(img);
3883*61046927SAndroid Build Coastguard Worker return *this;
3884*61046927SAndroid Build Coastguard Worker }
3885*61046927SAndroid Build Coastguard Worker
3886*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
3887*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
3888*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3889*61046927SAndroid Build Coastguard Worker */
Image1DArray(Image1DArray && img)3890*61046927SAndroid Build Coastguard Worker Image1DArray(Image1DArray&& img) CL_HPP_NOEXCEPT : Image(std::move(img)) {}
3891*61046927SAndroid Build Coastguard Worker
3892*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
3893*61046927SAndroid Build Coastguard Worker * Required for MSVC.
3894*61046927SAndroid Build Coastguard Worker */
operator =(Image1DArray && img)3895*61046927SAndroid Build Coastguard Worker Image1DArray& operator = (Image1DArray &&img)
3896*61046927SAndroid Build Coastguard Worker {
3897*61046927SAndroid Build Coastguard Worker Image::operator=(std::move(img));
3898*61046927SAndroid Build Coastguard Worker return *this;
3899*61046927SAndroid Build Coastguard Worker }
3900*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
3901*61046927SAndroid Build Coastguard Worker };
3902*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
3903*61046927SAndroid Build Coastguard Worker
3904*61046927SAndroid Build Coastguard Worker
3905*61046927SAndroid Build Coastguard Worker /*! \brief Class interface for 2D Image Memory objects.
3906*61046927SAndroid Build Coastguard Worker *
3907*61046927SAndroid Build Coastguard Worker * See Memory for details about copy semantics, etc.
3908*61046927SAndroid Build Coastguard Worker *
3909*61046927SAndroid Build Coastguard Worker * \see Memory
3910*61046927SAndroid Build Coastguard Worker */
3911*61046927SAndroid Build Coastguard Worker class Image2D : public Image
3912*61046927SAndroid Build Coastguard Worker {
3913*61046927SAndroid Build Coastguard Worker public:
3914*61046927SAndroid Build Coastguard Worker /*! \brief Constructs a 1D Image in a specified context.
3915*61046927SAndroid Build Coastguard Worker *
3916*61046927SAndroid Build Coastguard Worker * Wraps clCreateImage().
3917*61046927SAndroid Build Coastguard Worker */
Image2D(const Context & context,cl_mem_flags flags,ImageFormat format,::size_t width,::size_t height,::size_t row_pitch=0,void * host_ptr=NULL,cl_int * err=NULL)3918*61046927SAndroid Build Coastguard Worker Image2D(
3919*61046927SAndroid Build Coastguard Worker const Context& context,
3920*61046927SAndroid Build Coastguard Worker cl_mem_flags flags,
3921*61046927SAndroid Build Coastguard Worker ImageFormat format,
3922*61046927SAndroid Build Coastguard Worker ::size_t width,
3923*61046927SAndroid Build Coastguard Worker ::size_t height,
3924*61046927SAndroid Build Coastguard Worker ::size_t row_pitch = 0,
3925*61046927SAndroid Build Coastguard Worker void* host_ptr = NULL,
3926*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
3927*61046927SAndroid Build Coastguard Worker {
3928*61046927SAndroid Build Coastguard Worker cl_int error;
3929*61046927SAndroid Build Coastguard Worker bool useCreateImage;
3930*61046927SAndroid Build Coastguard Worker
3931*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2) && defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
3932*61046927SAndroid Build Coastguard Worker // Run-time decision based on the actual platform
3933*61046927SAndroid Build Coastguard Worker {
3934*61046927SAndroid Build Coastguard Worker cl_uint version = detail::getContextPlatformVersion(context());
3935*61046927SAndroid Build Coastguard Worker useCreateImage = (version >= 0x10002); // OpenCL 1.2 or above
3936*61046927SAndroid Build Coastguard Worker }
3937*61046927SAndroid Build Coastguard Worker #elif defined(CL_VERSION_1_2)
3938*61046927SAndroid Build Coastguard Worker useCreateImage = true;
3939*61046927SAndroid Build Coastguard Worker #else
3940*61046927SAndroid Build Coastguard Worker useCreateImage = false;
3941*61046927SAndroid Build Coastguard Worker #endif
3942*61046927SAndroid Build Coastguard Worker
3943*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
3944*61046927SAndroid Build Coastguard Worker if (useCreateImage)
3945*61046927SAndroid Build Coastguard Worker {
3946*61046927SAndroid Build Coastguard Worker cl_image_desc desc =
3947*61046927SAndroid Build Coastguard Worker {
3948*61046927SAndroid Build Coastguard Worker CL_MEM_OBJECT_IMAGE2D,
3949*61046927SAndroid Build Coastguard Worker width,
3950*61046927SAndroid Build Coastguard Worker height,
3951*61046927SAndroid Build Coastguard Worker 0, 0, // depth, array size (unused)
3952*61046927SAndroid Build Coastguard Worker row_pitch,
3953*61046927SAndroid Build Coastguard Worker 0, 0, 0, 0
3954*61046927SAndroid Build Coastguard Worker };
3955*61046927SAndroid Build Coastguard Worker object_ = ::clCreateImage(
3956*61046927SAndroid Build Coastguard Worker context(),
3957*61046927SAndroid Build Coastguard Worker flags,
3958*61046927SAndroid Build Coastguard Worker &format,
3959*61046927SAndroid Build Coastguard Worker &desc,
3960*61046927SAndroid Build Coastguard Worker host_ptr,
3961*61046927SAndroid Build Coastguard Worker &error);
3962*61046927SAndroid Build Coastguard Worker
3963*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_IMAGE_ERR);
3964*61046927SAndroid Build Coastguard Worker if (err != NULL) {
3965*61046927SAndroid Build Coastguard Worker *err = error;
3966*61046927SAndroid Build Coastguard Worker }
3967*61046927SAndroid Build Coastguard Worker }
3968*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
3969*61046927SAndroid Build Coastguard Worker #if !defined(CL_VERSION_1_2) || defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
3970*61046927SAndroid Build Coastguard Worker if (!useCreateImage)
3971*61046927SAndroid Build Coastguard Worker {
3972*61046927SAndroid Build Coastguard Worker object_ = ::clCreateImage2D(
3973*61046927SAndroid Build Coastguard Worker context(), flags,&format, width, height, row_pitch, host_ptr, &error);
3974*61046927SAndroid Build Coastguard Worker
3975*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_IMAGE2D_ERR);
3976*61046927SAndroid Build Coastguard Worker if (err != NULL) {
3977*61046927SAndroid Build Coastguard Worker *err = error;
3978*61046927SAndroid Build Coastguard Worker }
3979*61046927SAndroid Build Coastguard Worker }
3980*61046927SAndroid Build Coastguard Worker #endif // #if !defined(CL_VERSION_1_2) || defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
3981*61046927SAndroid Build Coastguard Worker }
3982*61046927SAndroid Build Coastguard Worker
3983*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
Image2D()3984*61046927SAndroid Build Coastguard Worker Image2D() { }
3985*61046927SAndroid Build Coastguard Worker
3986*61046927SAndroid Build Coastguard Worker /*! \brief Constructor from cl_mem - takes ownership.
3987*61046927SAndroid Build Coastguard Worker *
3988*61046927SAndroid Build Coastguard Worker * See Memory for further details.
3989*61046927SAndroid Build Coastguard Worker */
Image2D(const cl_mem & image2D)3990*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Image2D(const cl_mem& image2D) : Image(image2D) { }
3991*61046927SAndroid Build Coastguard Worker
3992*61046927SAndroid Build Coastguard Worker /*! \brief Assignment from cl_mem - performs shallow copy.
3993*61046927SAndroid Build Coastguard Worker *
3994*61046927SAndroid Build Coastguard Worker * See Memory for further details.
3995*61046927SAndroid Build Coastguard Worker */
operator =(const cl_mem & rhs)3996*61046927SAndroid Build Coastguard Worker Image2D& operator = (const cl_mem& rhs)
3997*61046927SAndroid Build Coastguard Worker {
3998*61046927SAndroid Build Coastguard Worker Image::operator=(rhs);
3999*61046927SAndroid Build Coastguard Worker return *this;
4000*61046927SAndroid Build Coastguard Worker }
4001*61046927SAndroid Build Coastguard Worker
4002*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
4003*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4004*61046927SAndroid Build Coastguard Worker */
Image2D(const Image2D & img)4005*61046927SAndroid Build Coastguard Worker Image2D(const Image2D& img) : Image(img) {}
4006*61046927SAndroid Build Coastguard Worker
4007*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
4008*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4009*61046927SAndroid Build Coastguard Worker */
operator =(const Image2D & img)4010*61046927SAndroid Build Coastguard Worker Image2D& operator = (const Image2D &img)
4011*61046927SAndroid Build Coastguard Worker {
4012*61046927SAndroid Build Coastguard Worker Image::operator=(img);
4013*61046927SAndroid Build Coastguard Worker return *this;
4014*61046927SAndroid Build Coastguard Worker }
4015*61046927SAndroid Build Coastguard Worker
4016*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4017*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
4018*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4019*61046927SAndroid Build Coastguard Worker */
Image2D(Image2D && img)4020*61046927SAndroid Build Coastguard Worker Image2D(Image2D&& img) CL_HPP_NOEXCEPT : Image(std::move(img)) {}
4021*61046927SAndroid Build Coastguard Worker
4022*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
4023*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4024*61046927SAndroid Build Coastguard Worker */
operator =(Image2D && img)4025*61046927SAndroid Build Coastguard Worker Image2D& operator = (Image2D &&img)
4026*61046927SAndroid Build Coastguard Worker {
4027*61046927SAndroid Build Coastguard Worker Image::operator=(std::move(img));
4028*61046927SAndroid Build Coastguard Worker return *this;
4029*61046927SAndroid Build Coastguard Worker }
4030*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4031*61046927SAndroid Build Coastguard Worker };
4032*61046927SAndroid Build Coastguard Worker
4033*61046927SAndroid Build Coastguard Worker
4034*61046927SAndroid Build Coastguard Worker #if !defined(CL_VERSION_1_2)
4035*61046927SAndroid Build Coastguard Worker /*! \brief Class interface for GL 2D Image Memory objects.
4036*61046927SAndroid Build Coastguard Worker *
4037*61046927SAndroid Build Coastguard Worker * This is provided to facilitate interoperability with OpenGL.
4038*61046927SAndroid Build Coastguard Worker *
4039*61046927SAndroid Build Coastguard Worker * See Memory for details about copy semantics, etc.
4040*61046927SAndroid Build Coastguard Worker *
4041*61046927SAndroid Build Coastguard Worker * \see Memory
4042*61046927SAndroid Build Coastguard Worker * \note Deprecated for OpenCL 1.2. Please use ImageGL instead.
4043*61046927SAndroid Build Coastguard Worker */
4044*61046927SAndroid Build Coastguard Worker class CL_EXT_PREFIX__VERSION_1_1_DEPRECATED Image2DGL CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED : public Image2D
4045*61046927SAndroid Build Coastguard Worker {
4046*61046927SAndroid Build Coastguard Worker public:
4047*61046927SAndroid Build Coastguard Worker /*! \brief Constructs an Image2DGL in a specified context, from a given
4048*61046927SAndroid Build Coastguard Worker * GL Texture.
4049*61046927SAndroid Build Coastguard Worker *
4050*61046927SAndroid Build Coastguard Worker * Wraps clCreateFromGLTexture2D().
4051*61046927SAndroid Build Coastguard Worker */
Image2DGL(const Context & context,cl_mem_flags flags,cl_GLenum target,cl_GLint miplevel,cl_GLuint texobj,cl_int * err=NULL)4052*61046927SAndroid Build Coastguard Worker Image2DGL(
4053*61046927SAndroid Build Coastguard Worker const Context& context,
4054*61046927SAndroid Build Coastguard Worker cl_mem_flags flags,
4055*61046927SAndroid Build Coastguard Worker cl_GLenum target,
4056*61046927SAndroid Build Coastguard Worker cl_GLint miplevel,
4057*61046927SAndroid Build Coastguard Worker cl_GLuint texobj,
4058*61046927SAndroid Build Coastguard Worker cl_int * err = NULL)
4059*61046927SAndroid Build Coastguard Worker {
4060*61046927SAndroid Build Coastguard Worker cl_int error;
4061*61046927SAndroid Build Coastguard Worker object_ = ::clCreateFromGLTexture2D(
4062*61046927SAndroid Build Coastguard Worker context(),
4063*61046927SAndroid Build Coastguard Worker flags,
4064*61046927SAndroid Build Coastguard Worker target,
4065*61046927SAndroid Build Coastguard Worker miplevel,
4066*61046927SAndroid Build Coastguard Worker texobj,
4067*61046927SAndroid Build Coastguard Worker &error);
4068*61046927SAndroid Build Coastguard Worker
4069*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_GL_TEXTURE_2D_ERR);
4070*61046927SAndroid Build Coastguard Worker if (err != NULL) {
4071*61046927SAndroid Build Coastguard Worker *err = error;
4072*61046927SAndroid Build Coastguard Worker }
4073*61046927SAndroid Build Coastguard Worker
4074*61046927SAndroid Build Coastguard Worker }
4075*61046927SAndroid Build Coastguard Worker
4076*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
Image2DGL()4077*61046927SAndroid Build Coastguard Worker Image2DGL() : Image2D() { }
4078*61046927SAndroid Build Coastguard Worker
4079*61046927SAndroid Build Coastguard Worker /*! \brief Constructor from cl_mem - takes ownership.
4080*61046927SAndroid Build Coastguard Worker *
4081*61046927SAndroid Build Coastguard Worker * See Memory for further details.
4082*61046927SAndroid Build Coastguard Worker */
Image2DGL(const cl_mem & image)4083*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Image2DGL(const cl_mem& image) : Image2D(image) { }
4084*61046927SAndroid Build Coastguard Worker
4085*61046927SAndroid Build Coastguard Worker /*! \brief Assignment from cl_mem - performs shallow copy.
4086*61046927SAndroid Build Coastguard Worker *
4087*61046927SAndroid Build Coastguard Worker * See Memory for further details.
4088*61046927SAndroid Build Coastguard Worker */
operator =(const cl_mem & rhs)4089*61046927SAndroid Build Coastguard Worker Image2DGL& operator = (const cl_mem& rhs)
4090*61046927SAndroid Build Coastguard Worker {
4091*61046927SAndroid Build Coastguard Worker Image2D::operator=(rhs);
4092*61046927SAndroid Build Coastguard Worker return *this;
4093*61046927SAndroid Build Coastguard Worker }
4094*61046927SAndroid Build Coastguard Worker
4095*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
4096*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4097*61046927SAndroid Build Coastguard Worker */
Image2DGL(const Image2DGL & img)4098*61046927SAndroid Build Coastguard Worker Image2DGL(const Image2DGL& img) : Image2D(img) {}
4099*61046927SAndroid Build Coastguard Worker
4100*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
4101*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4102*61046927SAndroid Build Coastguard Worker */
operator =(const Image2DGL & img)4103*61046927SAndroid Build Coastguard Worker Image2DGL& operator = (const Image2DGL &img)
4104*61046927SAndroid Build Coastguard Worker {
4105*61046927SAndroid Build Coastguard Worker Image2D::operator=(img);
4106*61046927SAndroid Build Coastguard Worker return *this;
4107*61046927SAndroid Build Coastguard Worker }
4108*61046927SAndroid Build Coastguard Worker
4109*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4110*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
4111*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4112*61046927SAndroid Build Coastguard Worker */
Image2DGL(Image2DGL && img)4113*61046927SAndroid Build Coastguard Worker Image2DGL(Image2DGL&& img) CL_HPP_NOEXCEPT : Image2D(std::move(img)) {}
4114*61046927SAndroid Build Coastguard Worker
4115*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
4116*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4117*61046927SAndroid Build Coastguard Worker */
operator =(Image2DGL && img)4118*61046927SAndroid Build Coastguard Worker Image2DGL& operator = (Image2DGL &&img)
4119*61046927SAndroid Build Coastguard Worker {
4120*61046927SAndroid Build Coastguard Worker Image2D::operator=(std::move(img));
4121*61046927SAndroid Build Coastguard Worker return *this;
4122*61046927SAndroid Build Coastguard Worker }
4123*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4124*61046927SAndroid Build Coastguard Worker };
4125*61046927SAndroid Build Coastguard Worker #endif // #if !defined(CL_VERSION_1_2)
4126*61046927SAndroid Build Coastguard Worker
4127*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
4128*61046927SAndroid Build Coastguard Worker /*! \class Image2DArray
4129*61046927SAndroid Build Coastguard Worker * \brief Image interface for arrays of 2D images.
4130*61046927SAndroid Build Coastguard Worker */
4131*61046927SAndroid Build Coastguard Worker class Image2DArray : public Image
4132*61046927SAndroid Build Coastguard Worker {
4133*61046927SAndroid Build Coastguard Worker public:
Image2DArray(const Context & context,cl_mem_flags flags,ImageFormat format,::size_t arraySize,::size_t width,::size_t height,::size_t rowPitch,::size_t slicePitch,void * host_ptr=NULL,cl_int * err=NULL)4134*61046927SAndroid Build Coastguard Worker Image2DArray(
4135*61046927SAndroid Build Coastguard Worker const Context& context,
4136*61046927SAndroid Build Coastguard Worker cl_mem_flags flags,
4137*61046927SAndroid Build Coastguard Worker ImageFormat format,
4138*61046927SAndroid Build Coastguard Worker ::size_t arraySize,
4139*61046927SAndroid Build Coastguard Worker ::size_t width,
4140*61046927SAndroid Build Coastguard Worker ::size_t height,
4141*61046927SAndroid Build Coastguard Worker ::size_t rowPitch,
4142*61046927SAndroid Build Coastguard Worker ::size_t slicePitch,
4143*61046927SAndroid Build Coastguard Worker void* host_ptr = NULL,
4144*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
4145*61046927SAndroid Build Coastguard Worker {
4146*61046927SAndroid Build Coastguard Worker cl_int error;
4147*61046927SAndroid Build Coastguard Worker cl_image_desc desc =
4148*61046927SAndroid Build Coastguard Worker {
4149*61046927SAndroid Build Coastguard Worker CL_MEM_OBJECT_IMAGE2D_ARRAY,
4150*61046927SAndroid Build Coastguard Worker width,
4151*61046927SAndroid Build Coastguard Worker height,
4152*61046927SAndroid Build Coastguard Worker 0, // depth (unused)
4153*61046927SAndroid Build Coastguard Worker arraySize,
4154*61046927SAndroid Build Coastguard Worker rowPitch,
4155*61046927SAndroid Build Coastguard Worker slicePitch,
4156*61046927SAndroid Build Coastguard Worker 0, 0, 0
4157*61046927SAndroid Build Coastguard Worker };
4158*61046927SAndroid Build Coastguard Worker object_ = ::clCreateImage(
4159*61046927SAndroid Build Coastguard Worker context(),
4160*61046927SAndroid Build Coastguard Worker flags,
4161*61046927SAndroid Build Coastguard Worker &format,
4162*61046927SAndroid Build Coastguard Worker &desc,
4163*61046927SAndroid Build Coastguard Worker host_ptr,
4164*61046927SAndroid Build Coastguard Worker &error);
4165*61046927SAndroid Build Coastguard Worker
4166*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_IMAGE_ERR);
4167*61046927SAndroid Build Coastguard Worker if (err != NULL) {
4168*61046927SAndroid Build Coastguard Worker *err = error;
4169*61046927SAndroid Build Coastguard Worker }
4170*61046927SAndroid Build Coastguard Worker }
4171*61046927SAndroid Build Coastguard Worker
Image2DArray()4172*61046927SAndroid Build Coastguard Worker Image2DArray() { }
4173*61046927SAndroid Build Coastguard Worker
Image2DArray(const cl_mem & imageArray)4174*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Image2DArray(const cl_mem& imageArray) : Image(imageArray) { }
4175*61046927SAndroid Build Coastguard Worker
operator =(const cl_mem & rhs)4176*61046927SAndroid Build Coastguard Worker Image2DArray& operator = (const cl_mem& rhs)
4177*61046927SAndroid Build Coastguard Worker {
4178*61046927SAndroid Build Coastguard Worker Image::operator=(rhs);
4179*61046927SAndroid Build Coastguard Worker return *this;
4180*61046927SAndroid Build Coastguard Worker }
4181*61046927SAndroid Build Coastguard Worker
4182*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
4183*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4184*61046927SAndroid Build Coastguard Worker */
Image2DArray(const Image2DArray & img)4185*61046927SAndroid Build Coastguard Worker Image2DArray(const Image2DArray& img) : Image(img) {}
4186*61046927SAndroid Build Coastguard Worker
4187*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
4188*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4189*61046927SAndroid Build Coastguard Worker */
operator =(const Image2DArray & img)4190*61046927SAndroid Build Coastguard Worker Image2DArray& operator = (const Image2DArray &img)
4191*61046927SAndroid Build Coastguard Worker {
4192*61046927SAndroid Build Coastguard Worker Image::operator=(img);
4193*61046927SAndroid Build Coastguard Worker return *this;
4194*61046927SAndroid Build Coastguard Worker }
4195*61046927SAndroid Build Coastguard Worker
4196*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4197*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
4198*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4199*61046927SAndroid Build Coastguard Worker */
Image2DArray(Image2DArray && img)4200*61046927SAndroid Build Coastguard Worker Image2DArray(Image2DArray&& img) CL_HPP_NOEXCEPT : Image(std::move(img)) {}
4201*61046927SAndroid Build Coastguard Worker
4202*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
4203*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4204*61046927SAndroid Build Coastguard Worker */
operator =(Image2DArray && img)4205*61046927SAndroid Build Coastguard Worker Image2DArray& operator = (Image2DArray &&img)
4206*61046927SAndroid Build Coastguard Worker {
4207*61046927SAndroid Build Coastguard Worker Image::operator=(std::move(img));
4208*61046927SAndroid Build Coastguard Worker return *this;
4209*61046927SAndroid Build Coastguard Worker }
4210*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4211*61046927SAndroid Build Coastguard Worker };
4212*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
4213*61046927SAndroid Build Coastguard Worker
4214*61046927SAndroid Build Coastguard Worker /*! \brief Class interface for 3D Image Memory objects.
4215*61046927SAndroid Build Coastguard Worker *
4216*61046927SAndroid Build Coastguard Worker * See Memory for details about copy semantics, etc.
4217*61046927SAndroid Build Coastguard Worker *
4218*61046927SAndroid Build Coastguard Worker * \see Memory
4219*61046927SAndroid Build Coastguard Worker */
4220*61046927SAndroid Build Coastguard Worker class Image3D : public Image
4221*61046927SAndroid Build Coastguard Worker {
4222*61046927SAndroid Build Coastguard Worker public:
4223*61046927SAndroid Build Coastguard Worker /*! \brief Constructs a 3D Image in a specified context.
4224*61046927SAndroid Build Coastguard Worker *
4225*61046927SAndroid Build Coastguard Worker * Wraps clCreateImage().
4226*61046927SAndroid Build Coastguard Worker */
Image3D(const Context & context,cl_mem_flags flags,ImageFormat format,::size_t width,::size_t height,::size_t depth,::size_t row_pitch=0,::size_t slice_pitch=0,void * host_ptr=NULL,cl_int * err=NULL)4227*61046927SAndroid Build Coastguard Worker Image3D(
4228*61046927SAndroid Build Coastguard Worker const Context& context,
4229*61046927SAndroid Build Coastguard Worker cl_mem_flags flags,
4230*61046927SAndroid Build Coastguard Worker ImageFormat format,
4231*61046927SAndroid Build Coastguard Worker ::size_t width,
4232*61046927SAndroid Build Coastguard Worker ::size_t height,
4233*61046927SAndroid Build Coastguard Worker ::size_t depth,
4234*61046927SAndroid Build Coastguard Worker ::size_t row_pitch = 0,
4235*61046927SAndroid Build Coastguard Worker ::size_t slice_pitch = 0,
4236*61046927SAndroid Build Coastguard Worker void* host_ptr = NULL,
4237*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
4238*61046927SAndroid Build Coastguard Worker {
4239*61046927SAndroid Build Coastguard Worker cl_int error;
4240*61046927SAndroid Build Coastguard Worker bool useCreateImage;
4241*61046927SAndroid Build Coastguard Worker
4242*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2) && defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
4243*61046927SAndroid Build Coastguard Worker // Run-time decision based on the actual platform
4244*61046927SAndroid Build Coastguard Worker {
4245*61046927SAndroid Build Coastguard Worker cl_uint version = detail::getContextPlatformVersion(context());
4246*61046927SAndroid Build Coastguard Worker useCreateImage = (version >= 0x10002); // OpenCL 1.2 or above
4247*61046927SAndroid Build Coastguard Worker }
4248*61046927SAndroid Build Coastguard Worker #elif defined(CL_VERSION_1_2)
4249*61046927SAndroid Build Coastguard Worker useCreateImage = true;
4250*61046927SAndroid Build Coastguard Worker #else
4251*61046927SAndroid Build Coastguard Worker useCreateImage = false;
4252*61046927SAndroid Build Coastguard Worker #endif
4253*61046927SAndroid Build Coastguard Worker
4254*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
4255*61046927SAndroid Build Coastguard Worker if (useCreateImage)
4256*61046927SAndroid Build Coastguard Worker {
4257*61046927SAndroid Build Coastguard Worker cl_image_desc desc =
4258*61046927SAndroid Build Coastguard Worker {
4259*61046927SAndroid Build Coastguard Worker CL_MEM_OBJECT_IMAGE3D,
4260*61046927SAndroid Build Coastguard Worker width,
4261*61046927SAndroid Build Coastguard Worker height,
4262*61046927SAndroid Build Coastguard Worker depth,
4263*61046927SAndroid Build Coastguard Worker 0, // array size (unused)
4264*61046927SAndroid Build Coastguard Worker row_pitch,
4265*61046927SAndroid Build Coastguard Worker slice_pitch,
4266*61046927SAndroid Build Coastguard Worker 0, 0, 0
4267*61046927SAndroid Build Coastguard Worker };
4268*61046927SAndroid Build Coastguard Worker object_ = ::clCreateImage(
4269*61046927SAndroid Build Coastguard Worker context(),
4270*61046927SAndroid Build Coastguard Worker flags,
4271*61046927SAndroid Build Coastguard Worker &format,
4272*61046927SAndroid Build Coastguard Worker &desc,
4273*61046927SAndroid Build Coastguard Worker host_ptr,
4274*61046927SAndroid Build Coastguard Worker &error);
4275*61046927SAndroid Build Coastguard Worker
4276*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_IMAGE_ERR);
4277*61046927SAndroid Build Coastguard Worker if (err != NULL) {
4278*61046927SAndroid Build Coastguard Worker *err = error;
4279*61046927SAndroid Build Coastguard Worker }
4280*61046927SAndroid Build Coastguard Worker }
4281*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
4282*61046927SAndroid Build Coastguard Worker #if !defined(CL_VERSION_1_2) || defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
4283*61046927SAndroid Build Coastguard Worker if (!useCreateImage)
4284*61046927SAndroid Build Coastguard Worker {
4285*61046927SAndroid Build Coastguard Worker object_ = ::clCreateImage3D(
4286*61046927SAndroid Build Coastguard Worker context(), flags, &format, width, height, depth, row_pitch,
4287*61046927SAndroid Build Coastguard Worker slice_pitch, host_ptr, &error);
4288*61046927SAndroid Build Coastguard Worker
4289*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_IMAGE3D_ERR);
4290*61046927SAndroid Build Coastguard Worker if (err != NULL) {
4291*61046927SAndroid Build Coastguard Worker *err = error;
4292*61046927SAndroid Build Coastguard Worker }
4293*61046927SAndroid Build Coastguard Worker }
4294*61046927SAndroid Build Coastguard Worker #endif // #if !defined(CL_VERSION_1_2) || defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
4295*61046927SAndroid Build Coastguard Worker }
4296*61046927SAndroid Build Coastguard Worker
4297*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
Image3D()4298*61046927SAndroid Build Coastguard Worker Image3D() : Image() { }
4299*61046927SAndroid Build Coastguard Worker
4300*61046927SAndroid Build Coastguard Worker /*! \brief Constructor from cl_mem - takes ownership.
4301*61046927SAndroid Build Coastguard Worker *
4302*61046927SAndroid Build Coastguard Worker * See Memory for further details.
4303*61046927SAndroid Build Coastguard Worker */
Image3D(const cl_mem & image3D)4304*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Image3D(const cl_mem& image3D) : Image(image3D) { }
4305*61046927SAndroid Build Coastguard Worker
4306*61046927SAndroid Build Coastguard Worker /*! \brief Assignment from cl_mem - performs shallow copy.
4307*61046927SAndroid Build Coastguard Worker *
4308*61046927SAndroid Build Coastguard Worker * See Memory for further details.
4309*61046927SAndroid Build Coastguard Worker */
operator =(const cl_mem & rhs)4310*61046927SAndroid Build Coastguard Worker Image3D& operator = (const cl_mem& rhs)
4311*61046927SAndroid Build Coastguard Worker {
4312*61046927SAndroid Build Coastguard Worker Image::operator=(rhs);
4313*61046927SAndroid Build Coastguard Worker return *this;
4314*61046927SAndroid Build Coastguard Worker }
4315*61046927SAndroid Build Coastguard Worker
4316*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
4317*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4318*61046927SAndroid Build Coastguard Worker */
Image3D(const Image3D & img)4319*61046927SAndroid Build Coastguard Worker Image3D(const Image3D& img) : Image(img) {}
4320*61046927SAndroid Build Coastguard Worker
4321*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
4322*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4323*61046927SAndroid Build Coastguard Worker */
operator =(const Image3D & img)4324*61046927SAndroid Build Coastguard Worker Image3D& operator = (const Image3D &img)
4325*61046927SAndroid Build Coastguard Worker {
4326*61046927SAndroid Build Coastguard Worker Image::operator=(img);
4327*61046927SAndroid Build Coastguard Worker return *this;
4328*61046927SAndroid Build Coastguard Worker }
4329*61046927SAndroid Build Coastguard Worker
4330*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4331*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
4332*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4333*61046927SAndroid Build Coastguard Worker */
Image3D(Image3D && img)4334*61046927SAndroid Build Coastguard Worker Image3D(Image3D&& img) CL_HPP_NOEXCEPT : Image(std::move(img)) {}
4335*61046927SAndroid Build Coastguard Worker
4336*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
4337*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4338*61046927SAndroid Build Coastguard Worker */
operator =(Image3D && img)4339*61046927SAndroid Build Coastguard Worker Image3D& operator = (Image3D &&img)
4340*61046927SAndroid Build Coastguard Worker {
4341*61046927SAndroid Build Coastguard Worker Image::operator=(std::move(img));
4342*61046927SAndroid Build Coastguard Worker return *this;
4343*61046927SAndroid Build Coastguard Worker }
4344*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4345*61046927SAndroid Build Coastguard Worker };
4346*61046927SAndroid Build Coastguard Worker
4347*61046927SAndroid Build Coastguard Worker #if !defined(CL_VERSION_1_2)
4348*61046927SAndroid Build Coastguard Worker /*! \brief Class interface for GL 3D Image Memory objects.
4349*61046927SAndroid Build Coastguard Worker *
4350*61046927SAndroid Build Coastguard Worker * This is provided to facilitate interoperability with OpenGL.
4351*61046927SAndroid Build Coastguard Worker *
4352*61046927SAndroid Build Coastguard Worker * See Memory for details about copy semantics, etc.
4353*61046927SAndroid Build Coastguard Worker *
4354*61046927SAndroid Build Coastguard Worker * \see Memory
4355*61046927SAndroid Build Coastguard Worker */
4356*61046927SAndroid Build Coastguard Worker class Image3DGL : public Image3D
4357*61046927SAndroid Build Coastguard Worker {
4358*61046927SAndroid Build Coastguard Worker public:
4359*61046927SAndroid Build Coastguard Worker /*! \brief Constructs an Image3DGL in a specified context, from a given
4360*61046927SAndroid Build Coastguard Worker * GL Texture.
4361*61046927SAndroid Build Coastguard Worker *
4362*61046927SAndroid Build Coastguard Worker * Wraps clCreateFromGLTexture3D().
4363*61046927SAndroid Build Coastguard Worker */
Image3DGL(const Context & context,cl_mem_flags flags,cl_GLenum target,cl_GLint miplevel,cl_GLuint texobj,cl_int * err=NULL)4364*61046927SAndroid Build Coastguard Worker Image3DGL(
4365*61046927SAndroid Build Coastguard Worker const Context& context,
4366*61046927SAndroid Build Coastguard Worker cl_mem_flags flags,
4367*61046927SAndroid Build Coastguard Worker cl_GLenum target,
4368*61046927SAndroid Build Coastguard Worker cl_GLint miplevel,
4369*61046927SAndroid Build Coastguard Worker cl_GLuint texobj,
4370*61046927SAndroid Build Coastguard Worker cl_int * err = NULL)
4371*61046927SAndroid Build Coastguard Worker {
4372*61046927SAndroid Build Coastguard Worker cl_int error;
4373*61046927SAndroid Build Coastguard Worker object_ = ::clCreateFromGLTexture3D(
4374*61046927SAndroid Build Coastguard Worker context(),
4375*61046927SAndroid Build Coastguard Worker flags,
4376*61046927SAndroid Build Coastguard Worker target,
4377*61046927SAndroid Build Coastguard Worker miplevel,
4378*61046927SAndroid Build Coastguard Worker texobj,
4379*61046927SAndroid Build Coastguard Worker &error);
4380*61046927SAndroid Build Coastguard Worker
4381*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_GL_TEXTURE_3D_ERR);
4382*61046927SAndroid Build Coastguard Worker if (err != NULL) {
4383*61046927SAndroid Build Coastguard Worker *err = error;
4384*61046927SAndroid Build Coastguard Worker }
4385*61046927SAndroid Build Coastguard Worker }
4386*61046927SAndroid Build Coastguard Worker
4387*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
Image3DGL()4388*61046927SAndroid Build Coastguard Worker Image3DGL() : Image3D() { }
4389*61046927SAndroid Build Coastguard Worker
4390*61046927SAndroid Build Coastguard Worker /*! \brief Constructor from cl_mem - takes ownership.
4391*61046927SAndroid Build Coastguard Worker *
4392*61046927SAndroid Build Coastguard Worker * See Memory for further details.
4393*61046927SAndroid Build Coastguard Worker */
Image3DGL(const cl_mem & image)4394*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Image3DGL(const cl_mem& image) : Image3D(image) { }
4395*61046927SAndroid Build Coastguard Worker
4396*61046927SAndroid Build Coastguard Worker /*! \brief Assignment from cl_mem - performs shallow copy.
4397*61046927SAndroid Build Coastguard Worker *
4398*61046927SAndroid Build Coastguard Worker * See Memory for further details.
4399*61046927SAndroid Build Coastguard Worker */
operator =(const cl_mem & rhs)4400*61046927SAndroid Build Coastguard Worker Image3DGL& operator = (const cl_mem& rhs)
4401*61046927SAndroid Build Coastguard Worker {
4402*61046927SAndroid Build Coastguard Worker Image3D::operator=(rhs);
4403*61046927SAndroid Build Coastguard Worker return *this;
4404*61046927SAndroid Build Coastguard Worker }
4405*61046927SAndroid Build Coastguard Worker
4406*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
4407*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4408*61046927SAndroid Build Coastguard Worker */
Image3DGL(const Image3DGL & img)4409*61046927SAndroid Build Coastguard Worker Image3DGL(const Image3DGL& img) : Image3D(img) {}
4410*61046927SAndroid Build Coastguard Worker
4411*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
4412*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4413*61046927SAndroid Build Coastguard Worker */
operator =(const Image3DGL & img)4414*61046927SAndroid Build Coastguard Worker Image3DGL& operator = (const Image3DGL &img)
4415*61046927SAndroid Build Coastguard Worker {
4416*61046927SAndroid Build Coastguard Worker Image3D::operator=(img);
4417*61046927SAndroid Build Coastguard Worker return *this;
4418*61046927SAndroid Build Coastguard Worker }
4419*61046927SAndroid Build Coastguard Worker
4420*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4421*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
4422*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4423*61046927SAndroid Build Coastguard Worker */
Image3DGL(Image3DGL && img)4424*61046927SAndroid Build Coastguard Worker Image3DGL(Image3DGL&& img) CL_HPP_NOEXCEPT : Image3D(std::move(img)) {}
4425*61046927SAndroid Build Coastguard Worker
4426*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
4427*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4428*61046927SAndroid Build Coastguard Worker */
operator =(Image3DGL && img)4429*61046927SAndroid Build Coastguard Worker Image3DGL& operator = (Image3DGL &&img)
4430*61046927SAndroid Build Coastguard Worker {
4431*61046927SAndroid Build Coastguard Worker Image3D::operator=(std::move(img));
4432*61046927SAndroid Build Coastguard Worker return *this;
4433*61046927SAndroid Build Coastguard Worker }
4434*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4435*61046927SAndroid Build Coastguard Worker };
4436*61046927SAndroid Build Coastguard Worker #endif // #if !defined(CL_VERSION_1_2)
4437*61046927SAndroid Build Coastguard Worker
4438*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
4439*61046927SAndroid Build Coastguard Worker /*! \class ImageGL
4440*61046927SAndroid Build Coastguard Worker * \brief general image interface for GL interop.
4441*61046927SAndroid Build Coastguard Worker * We abstract the 2D and 3D GL images into a single instance here
4442*61046927SAndroid Build Coastguard Worker * that wraps all GL sourced images on the grounds that setup information
4443*61046927SAndroid Build Coastguard Worker * was performed by OpenCL anyway.
4444*61046927SAndroid Build Coastguard Worker */
4445*61046927SAndroid Build Coastguard Worker class ImageGL : public Image
4446*61046927SAndroid Build Coastguard Worker {
4447*61046927SAndroid Build Coastguard Worker public:
ImageGL(const Context & context,cl_mem_flags flags,cl_GLenum target,cl_GLint miplevel,cl_GLuint texobj,cl_int * err=NULL)4448*61046927SAndroid Build Coastguard Worker ImageGL(
4449*61046927SAndroid Build Coastguard Worker const Context& context,
4450*61046927SAndroid Build Coastguard Worker cl_mem_flags flags,
4451*61046927SAndroid Build Coastguard Worker cl_GLenum target,
4452*61046927SAndroid Build Coastguard Worker cl_GLint miplevel,
4453*61046927SAndroid Build Coastguard Worker cl_GLuint texobj,
4454*61046927SAndroid Build Coastguard Worker cl_int * err = NULL)
4455*61046927SAndroid Build Coastguard Worker {
4456*61046927SAndroid Build Coastguard Worker cl_int error;
4457*61046927SAndroid Build Coastguard Worker object_ = ::clCreateFromGLTexture(
4458*61046927SAndroid Build Coastguard Worker context(),
4459*61046927SAndroid Build Coastguard Worker flags,
4460*61046927SAndroid Build Coastguard Worker target,
4461*61046927SAndroid Build Coastguard Worker miplevel,
4462*61046927SAndroid Build Coastguard Worker texobj,
4463*61046927SAndroid Build Coastguard Worker &error);
4464*61046927SAndroid Build Coastguard Worker
4465*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_GL_TEXTURE_ERR);
4466*61046927SAndroid Build Coastguard Worker if (err != NULL) {
4467*61046927SAndroid Build Coastguard Worker *err = error;
4468*61046927SAndroid Build Coastguard Worker }
4469*61046927SAndroid Build Coastguard Worker }
4470*61046927SAndroid Build Coastguard Worker
ImageGL()4471*61046927SAndroid Build Coastguard Worker ImageGL() : Image() { }
4472*61046927SAndroid Build Coastguard Worker
ImageGL(const cl_mem & image)4473*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS ImageGL(const cl_mem& image) : Image(image) { }
4474*61046927SAndroid Build Coastguard Worker
operator =(const cl_mem & rhs)4475*61046927SAndroid Build Coastguard Worker ImageGL& operator = (const cl_mem& rhs)
4476*61046927SAndroid Build Coastguard Worker {
4477*61046927SAndroid Build Coastguard Worker Image::operator=(rhs);
4478*61046927SAndroid Build Coastguard Worker return *this;
4479*61046927SAndroid Build Coastguard Worker }
4480*61046927SAndroid Build Coastguard Worker
4481*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
4482*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4483*61046927SAndroid Build Coastguard Worker */
ImageGL(const ImageGL & img)4484*61046927SAndroid Build Coastguard Worker ImageGL(const ImageGL& img) : Image(img) {}
4485*61046927SAndroid Build Coastguard Worker
4486*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
4487*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4488*61046927SAndroid Build Coastguard Worker */
operator =(const ImageGL & img)4489*61046927SAndroid Build Coastguard Worker ImageGL& operator = (const ImageGL &img)
4490*61046927SAndroid Build Coastguard Worker {
4491*61046927SAndroid Build Coastguard Worker Image::operator=(img);
4492*61046927SAndroid Build Coastguard Worker return *this;
4493*61046927SAndroid Build Coastguard Worker }
4494*61046927SAndroid Build Coastguard Worker
4495*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4496*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
4497*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4498*61046927SAndroid Build Coastguard Worker */
ImageGL(ImageGL && img)4499*61046927SAndroid Build Coastguard Worker ImageGL(ImageGL&& img) CL_HPP_NOEXCEPT : Image(std::move(img)) {}
4500*61046927SAndroid Build Coastguard Worker
4501*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
4502*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4503*61046927SAndroid Build Coastguard Worker */
operator =(ImageGL && img)4504*61046927SAndroid Build Coastguard Worker ImageGL& operator = (ImageGL &&img)
4505*61046927SAndroid Build Coastguard Worker {
4506*61046927SAndroid Build Coastguard Worker Image::operator=(std::move(img));
4507*61046927SAndroid Build Coastguard Worker return *this;
4508*61046927SAndroid Build Coastguard Worker }
4509*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4510*61046927SAndroid Build Coastguard Worker };
4511*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
4512*61046927SAndroid Build Coastguard Worker
4513*61046927SAndroid Build Coastguard Worker /*! \brief Class interface for GL Render Buffer Memory Objects.
4514*61046927SAndroid Build Coastguard Worker *
4515*61046927SAndroid Build Coastguard Worker * This is provided to facilitate interoperability with OpenGL.
4516*61046927SAndroid Build Coastguard Worker *
4517*61046927SAndroid Build Coastguard Worker * See Memory for details about copy semantics, etc.
4518*61046927SAndroid Build Coastguard Worker *
4519*61046927SAndroid Build Coastguard Worker * \see Memory
4520*61046927SAndroid Build Coastguard Worker */
4521*61046927SAndroid Build Coastguard Worker class BufferRenderGL :
4522*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
4523*61046927SAndroid Build Coastguard Worker public ImageGL
4524*61046927SAndroid Build Coastguard Worker #else // #if defined(CL_VERSION_1_2)
4525*61046927SAndroid Build Coastguard Worker public Image2DGL
4526*61046927SAndroid Build Coastguard Worker #endif //#if defined(CL_VERSION_1_2)
4527*61046927SAndroid Build Coastguard Worker {
4528*61046927SAndroid Build Coastguard Worker public:
4529*61046927SAndroid Build Coastguard Worker /*! \brief Constructs a BufferRenderGL in a specified context, from a given
4530*61046927SAndroid Build Coastguard Worker * GL Renderbuffer.
4531*61046927SAndroid Build Coastguard Worker *
4532*61046927SAndroid Build Coastguard Worker * Wraps clCreateFromGLRenderbuffer().
4533*61046927SAndroid Build Coastguard Worker */
BufferRenderGL(const Context & context,cl_mem_flags flags,cl_GLuint bufobj,cl_int * err=NULL)4534*61046927SAndroid Build Coastguard Worker BufferRenderGL(
4535*61046927SAndroid Build Coastguard Worker const Context& context,
4536*61046927SAndroid Build Coastguard Worker cl_mem_flags flags,
4537*61046927SAndroid Build Coastguard Worker cl_GLuint bufobj,
4538*61046927SAndroid Build Coastguard Worker cl_int * err = NULL)
4539*61046927SAndroid Build Coastguard Worker {
4540*61046927SAndroid Build Coastguard Worker cl_int error;
4541*61046927SAndroid Build Coastguard Worker object_ = ::clCreateFromGLRenderbuffer(
4542*61046927SAndroid Build Coastguard Worker context(),
4543*61046927SAndroid Build Coastguard Worker flags,
4544*61046927SAndroid Build Coastguard Worker bufobj,
4545*61046927SAndroid Build Coastguard Worker &error);
4546*61046927SAndroid Build Coastguard Worker
4547*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_GL_RENDER_BUFFER_ERR);
4548*61046927SAndroid Build Coastguard Worker if (err != NULL) {
4549*61046927SAndroid Build Coastguard Worker *err = error;
4550*61046927SAndroid Build Coastguard Worker }
4551*61046927SAndroid Build Coastguard Worker }
4552*61046927SAndroid Build Coastguard Worker
4553*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
4554*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
BufferRenderGL()4555*61046927SAndroid Build Coastguard Worker BufferRenderGL() : ImageGL() {};
4556*61046927SAndroid Build Coastguard Worker #else // #if defined(CL_VERSION_1_2)
BufferRenderGL()4557*61046927SAndroid Build Coastguard Worker BufferRenderGL() : Image2DGL() {};
4558*61046927SAndroid Build Coastguard Worker #endif //#if defined(CL_VERSION_1_2)
4559*61046927SAndroid Build Coastguard Worker
4560*61046927SAndroid Build Coastguard Worker /*! \brief Constructor from cl_mem - takes ownership.
4561*61046927SAndroid Build Coastguard Worker *
4562*61046927SAndroid Build Coastguard Worker * See Memory for further details.
4563*61046927SAndroid Build Coastguard Worker */
4564*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
BufferRenderGL(const cl_mem & buffer)4565*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS BufferRenderGL(const cl_mem& buffer) : ImageGL(buffer) { }
4566*61046927SAndroid Build Coastguard Worker #else // #if defined(CL_VERSION_1_2)
BufferRenderGL(const cl_mem & buffer)4567*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS BufferRenderGL(const cl_mem& buffer) : Image2DGL(buffer) { }
4568*61046927SAndroid Build Coastguard Worker #endif //#if defined(CL_VERSION_1_2)
4569*61046927SAndroid Build Coastguard Worker
4570*61046927SAndroid Build Coastguard Worker
4571*61046927SAndroid Build Coastguard Worker /*! \brief Assignment from cl_mem - performs shallow copy.
4572*61046927SAndroid Build Coastguard Worker *
4573*61046927SAndroid Build Coastguard Worker * See Memory for further details.
4574*61046927SAndroid Build Coastguard Worker */
operator =(const cl_mem & rhs)4575*61046927SAndroid Build Coastguard Worker BufferRenderGL& operator = (const cl_mem& rhs)
4576*61046927SAndroid Build Coastguard Worker {
4577*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
4578*61046927SAndroid Build Coastguard Worker ImageGL::operator=(rhs);
4579*61046927SAndroid Build Coastguard Worker #else // #if defined(CL_VERSION_1_2)
4580*61046927SAndroid Build Coastguard Worker Image2DGL::operator=(rhs);
4581*61046927SAndroid Build Coastguard Worker #endif //#if defined(CL_VERSION_1_2)
4582*61046927SAndroid Build Coastguard Worker
4583*61046927SAndroid Build Coastguard Worker return *this;
4584*61046927SAndroid Build Coastguard Worker }
4585*61046927SAndroid Build Coastguard Worker
4586*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
4587*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4588*61046927SAndroid Build Coastguard Worker */
4589*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
BufferRenderGL(const BufferRenderGL & buf)4590*61046927SAndroid Build Coastguard Worker BufferRenderGL(const BufferRenderGL& buf) : ImageGL(buf) {}
4591*61046927SAndroid Build Coastguard Worker #else // #if defined(CL_VERSION_1_2)
BufferRenderGL(const BufferRenderGL & buf)4592*61046927SAndroid Build Coastguard Worker BufferRenderGL(const BufferRenderGL& buf) : Image2DGL(buf) {}
4593*61046927SAndroid Build Coastguard Worker #endif //#if defined(CL_VERSION_1_2)
4594*61046927SAndroid Build Coastguard Worker
4595*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
4596*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4597*61046927SAndroid Build Coastguard Worker */
operator =(const BufferRenderGL & rhs)4598*61046927SAndroid Build Coastguard Worker BufferRenderGL& operator = (const BufferRenderGL &rhs)
4599*61046927SAndroid Build Coastguard Worker {
4600*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
4601*61046927SAndroid Build Coastguard Worker ImageGL::operator=(rhs);
4602*61046927SAndroid Build Coastguard Worker #else // #if defined(CL_VERSION_1_2)
4603*61046927SAndroid Build Coastguard Worker Image2DGL::operator=(rhs);
4604*61046927SAndroid Build Coastguard Worker #endif //#if defined(CL_VERSION_1_2)
4605*61046927SAndroid Build Coastguard Worker return *this;
4606*61046927SAndroid Build Coastguard Worker }
4607*61046927SAndroid Build Coastguard Worker
4608*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4609*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
4610*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4611*61046927SAndroid Build Coastguard Worker */
4612*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
BufferRenderGL(BufferRenderGL && buf)4613*61046927SAndroid Build Coastguard Worker BufferRenderGL(BufferRenderGL&& buf) CL_HPP_NOEXCEPT : ImageGL(std::move(buf)) {}
4614*61046927SAndroid Build Coastguard Worker #else // #if defined(CL_VERSION_1_2)
BufferRenderGL(BufferRenderGL && buf)4615*61046927SAndroid Build Coastguard Worker BufferRenderGL(BufferRenderGL&& buf) CL_HPP_NOEXCEPT : Image2DGL(std::move(buf)) {}
4616*61046927SAndroid Build Coastguard Worker #endif //#if defined(CL_VERSION_1_2)
4617*61046927SAndroid Build Coastguard Worker
4618*61046927SAndroid Build Coastguard Worker
4619*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
4620*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4621*61046927SAndroid Build Coastguard Worker */
operator =(BufferRenderGL && buf)4622*61046927SAndroid Build Coastguard Worker BufferRenderGL& operator = (BufferRenderGL &&buf)
4623*61046927SAndroid Build Coastguard Worker {
4624*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
4625*61046927SAndroid Build Coastguard Worker ImageGL::operator=(std::move(buf));
4626*61046927SAndroid Build Coastguard Worker #else // #if defined(CL_VERSION_1_2)
4627*61046927SAndroid Build Coastguard Worker Image2DGL::operator=(std::move(buf));
4628*61046927SAndroid Build Coastguard Worker #endif //#if defined(CL_VERSION_1_2)
4629*61046927SAndroid Build Coastguard Worker
4630*61046927SAndroid Build Coastguard Worker return *this;
4631*61046927SAndroid Build Coastguard Worker }
4632*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4633*61046927SAndroid Build Coastguard Worker
4634*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetGLObjectInfo().
getObjectInfo(cl_gl_object_type * type,cl_GLuint * gl_object_name)4635*61046927SAndroid Build Coastguard Worker cl_int getObjectInfo(
4636*61046927SAndroid Build Coastguard Worker cl_gl_object_type *type,
4637*61046927SAndroid Build Coastguard Worker cl_GLuint * gl_object_name)
4638*61046927SAndroid Build Coastguard Worker {
4639*61046927SAndroid Build Coastguard Worker return detail::errHandler(
4640*61046927SAndroid Build Coastguard Worker ::clGetGLObjectInfo(object_, type, gl_object_name),
4641*61046927SAndroid Build Coastguard Worker __GET_GL_OBJECT_INFO_ERR);
4642*61046927SAndroid Build Coastguard Worker }
4643*61046927SAndroid Build Coastguard Worker };
4644*61046927SAndroid Build Coastguard Worker
4645*61046927SAndroid Build Coastguard Worker /*! \brief Class interface for cl_sampler.
4646*61046927SAndroid Build Coastguard Worker *
4647*61046927SAndroid Build Coastguard Worker * \note Copies of these objects are shallow, meaning that the copy will refer
4648*61046927SAndroid Build Coastguard Worker * to the same underlying cl_sampler as the original. For details, see
4649*61046927SAndroid Build Coastguard Worker * clRetainSampler() and clReleaseSampler().
4650*61046927SAndroid Build Coastguard Worker *
4651*61046927SAndroid Build Coastguard Worker * \see cl_sampler
4652*61046927SAndroid Build Coastguard Worker */
4653*61046927SAndroid Build Coastguard Worker class Sampler : public detail::Wrapper<cl_sampler>
4654*61046927SAndroid Build Coastguard Worker {
4655*61046927SAndroid Build Coastguard Worker public:
4656*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
Sampler()4657*61046927SAndroid Build Coastguard Worker Sampler() { }
4658*61046927SAndroid Build Coastguard Worker
4659*61046927SAndroid Build Coastguard Worker /*! \brief Constructs a Sampler in a specified context.
4660*61046927SAndroid Build Coastguard Worker *
4661*61046927SAndroid Build Coastguard Worker * Wraps clCreateSampler().
4662*61046927SAndroid Build Coastguard Worker */
Sampler(const Context & context,cl_bool normalized_coords,cl_addressing_mode addressing_mode,cl_filter_mode filter_mode,cl_int * err=NULL)4663*61046927SAndroid Build Coastguard Worker Sampler(
4664*61046927SAndroid Build Coastguard Worker const Context& context,
4665*61046927SAndroid Build Coastguard Worker cl_bool normalized_coords,
4666*61046927SAndroid Build Coastguard Worker cl_addressing_mode addressing_mode,
4667*61046927SAndroid Build Coastguard Worker cl_filter_mode filter_mode,
4668*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
4669*61046927SAndroid Build Coastguard Worker {
4670*61046927SAndroid Build Coastguard Worker cl_int error;
4671*61046927SAndroid Build Coastguard Worker object_ = ::clCreateSampler(
4672*61046927SAndroid Build Coastguard Worker context(),
4673*61046927SAndroid Build Coastguard Worker normalized_coords,
4674*61046927SAndroid Build Coastguard Worker addressing_mode,
4675*61046927SAndroid Build Coastguard Worker filter_mode,
4676*61046927SAndroid Build Coastguard Worker &error);
4677*61046927SAndroid Build Coastguard Worker
4678*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_SAMPLER_ERR);
4679*61046927SAndroid Build Coastguard Worker if (err != NULL) {
4680*61046927SAndroid Build Coastguard Worker *err = error;
4681*61046927SAndroid Build Coastguard Worker }
4682*61046927SAndroid Build Coastguard Worker }
4683*61046927SAndroid Build Coastguard Worker
4684*61046927SAndroid Build Coastguard Worker /*! \brief Constructor from cl_sampler - takes ownership.
4685*61046927SAndroid Build Coastguard Worker *
4686*61046927SAndroid Build Coastguard Worker * This effectively transfers ownership of a refcount on the cl_sampler
4687*61046927SAndroid Build Coastguard Worker * into the new Sampler object.
4688*61046927SAndroid Build Coastguard Worker */
Sampler(const cl_sampler & sampler)4689*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Sampler(const cl_sampler& sampler) : detail::Wrapper<cl_type>(sampler) { }
4690*61046927SAndroid Build Coastguard Worker
4691*61046927SAndroid Build Coastguard Worker /*! \brief Assignment operator from cl_sampler - takes ownership.
4692*61046927SAndroid Build Coastguard Worker *
4693*61046927SAndroid Build Coastguard Worker * This effectively transfers ownership of a refcount on the rhs and calls
4694*61046927SAndroid Build Coastguard Worker * clReleaseSampler() on the value previously held by this instance.
4695*61046927SAndroid Build Coastguard Worker */
operator =(const cl_sampler & rhs)4696*61046927SAndroid Build Coastguard Worker Sampler& operator = (const cl_sampler& rhs)
4697*61046927SAndroid Build Coastguard Worker {
4698*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(rhs);
4699*61046927SAndroid Build Coastguard Worker return *this;
4700*61046927SAndroid Build Coastguard Worker }
4701*61046927SAndroid Build Coastguard Worker
4702*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
4703*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4704*61046927SAndroid Build Coastguard Worker */
Sampler(const Sampler & sam)4705*61046927SAndroid Build Coastguard Worker Sampler(const Sampler& sam) : detail::Wrapper<cl_type>(sam) {}
4706*61046927SAndroid Build Coastguard Worker
4707*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
4708*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4709*61046927SAndroid Build Coastguard Worker */
operator =(const Sampler & sam)4710*61046927SAndroid Build Coastguard Worker Sampler& operator = (const Sampler &sam)
4711*61046927SAndroid Build Coastguard Worker {
4712*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(sam);
4713*61046927SAndroid Build Coastguard Worker return *this;
4714*61046927SAndroid Build Coastguard Worker }
4715*61046927SAndroid Build Coastguard Worker
4716*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4717*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
4718*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4719*61046927SAndroid Build Coastguard Worker */
Sampler(Sampler && sam)4720*61046927SAndroid Build Coastguard Worker Sampler(Sampler&& sam) CL_HPP_NOEXCEPT : detail::Wrapper<cl_type>(std::move(sam)) {}
4721*61046927SAndroid Build Coastguard Worker
4722*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
4723*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4724*61046927SAndroid Build Coastguard Worker */
operator =(Sampler && sam)4725*61046927SAndroid Build Coastguard Worker Sampler& operator = (Sampler &&sam)
4726*61046927SAndroid Build Coastguard Worker {
4727*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(std::move(sam));
4728*61046927SAndroid Build Coastguard Worker return *this;
4729*61046927SAndroid Build Coastguard Worker }
4730*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4731*61046927SAndroid Build Coastguard Worker
4732*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetSamplerInfo().
4733*61046927SAndroid Build Coastguard Worker template <typename T>
getInfo(cl_sampler_info name,T * param) const4734*61046927SAndroid Build Coastguard Worker cl_int getInfo(cl_sampler_info name, T* param) const
4735*61046927SAndroid Build Coastguard Worker {
4736*61046927SAndroid Build Coastguard Worker return detail::errHandler(
4737*61046927SAndroid Build Coastguard Worker detail::getInfo(&::clGetSamplerInfo, object_, name, param),
4738*61046927SAndroid Build Coastguard Worker __GET_SAMPLER_INFO_ERR);
4739*61046927SAndroid Build Coastguard Worker }
4740*61046927SAndroid Build Coastguard Worker
4741*61046927SAndroid Build Coastguard Worker //! \brief Wrapper for clGetSamplerInfo() that returns by value.
4742*61046927SAndroid Build Coastguard Worker template <cl_sampler_info name> typename
4743*61046927SAndroid Build Coastguard Worker detail::param_traits<detail::cl_sampler_info, name>::param_type
getInfo(cl_int * err=NULL) const4744*61046927SAndroid Build Coastguard Worker getInfo(cl_int* err = NULL) const
4745*61046927SAndroid Build Coastguard Worker {
4746*61046927SAndroid Build Coastguard Worker typename detail::param_traits<
4747*61046927SAndroid Build Coastguard Worker detail::cl_sampler_info, name>::param_type param;
4748*61046927SAndroid Build Coastguard Worker cl_int result = getInfo(name, ¶m);
4749*61046927SAndroid Build Coastguard Worker if (err != NULL) {
4750*61046927SAndroid Build Coastguard Worker *err = result;
4751*61046927SAndroid Build Coastguard Worker }
4752*61046927SAndroid Build Coastguard Worker return param;
4753*61046927SAndroid Build Coastguard Worker }
4754*61046927SAndroid Build Coastguard Worker };
4755*61046927SAndroid Build Coastguard Worker
4756*61046927SAndroid Build Coastguard Worker class Program;
4757*61046927SAndroid Build Coastguard Worker class CommandQueue;
4758*61046927SAndroid Build Coastguard Worker class Kernel;
4759*61046927SAndroid Build Coastguard Worker
4760*61046927SAndroid Build Coastguard Worker //! \brief Class interface for specifying NDRange values.
4761*61046927SAndroid Build Coastguard Worker class NDRange
4762*61046927SAndroid Build Coastguard Worker {
4763*61046927SAndroid Build Coastguard Worker private:
4764*61046927SAndroid Build Coastguard Worker size_t<3> sizes_;
4765*61046927SAndroid Build Coastguard Worker cl_uint dimensions_;
4766*61046927SAndroid Build Coastguard Worker
4767*61046927SAndroid Build Coastguard Worker public:
4768*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - resulting range has zero dimensions.
NDRange()4769*61046927SAndroid Build Coastguard Worker NDRange()
4770*61046927SAndroid Build Coastguard Worker : dimensions_(0)
4771*61046927SAndroid Build Coastguard Worker { }
4772*61046927SAndroid Build Coastguard Worker
4773*61046927SAndroid Build Coastguard Worker //! \brief Constructs one-dimensional range.
NDRange(::size_t size0)4774*61046927SAndroid Build Coastguard Worker NDRange(::size_t size0)
4775*61046927SAndroid Build Coastguard Worker : dimensions_(1)
4776*61046927SAndroid Build Coastguard Worker {
4777*61046927SAndroid Build Coastguard Worker sizes_[0] = size0;
4778*61046927SAndroid Build Coastguard Worker }
4779*61046927SAndroid Build Coastguard Worker
4780*61046927SAndroid Build Coastguard Worker //! \brief Constructs two-dimensional range.
NDRange(::size_t size0,::size_t size1)4781*61046927SAndroid Build Coastguard Worker NDRange(::size_t size0, ::size_t size1)
4782*61046927SAndroid Build Coastguard Worker : dimensions_(2)
4783*61046927SAndroid Build Coastguard Worker {
4784*61046927SAndroid Build Coastguard Worker sizes_[0] = size0;
4785*61046927SAndroid Build Coastguard Worker sizes_[1] = size1;
4786*61046927SAndroid Build Coastguard Worker }
4787*61046927SAndroid Build Coastguard Worker
4788*61046927SAndroid Build Coastguard Worker //! \brief Constructs three-dimensional range.
NDRange(::size_t size0,::size_t size1,::size_t size2)4789*61046927SAndroid Build Coastguard Worker NDRange(::size_t size0, ::size_t size1, ::size_t size2)
4790*61046927SAndroid Build Coastguard Worker : dimensions_(3)
4791*61046927SAndroid Build Coastguard Worker {
4792*61046927SAndroid Build Coastguard Worker sizes_[0] = size0;
4793*61046927SAndroid Build Coastguard Worker sizes_[1] = size1;
4794*61046927SAndroid Build Coastguard Worker sizes_[2] = size2;
4795*61046927SAndroid Build Coastguard Worker }
4796*61046927SAndroid Build Coastguard Worker
4797*61046927SAndroid Build Coastguard Worker /*! \brief Conversion operator to const ::size_t *.
4798*61046927SAndroid Build Coastguard Worker *
4799*61046927SAndroid Build Coastguard Worker * \returns a pointer to the size of the first dimension.
4800*61046927SAndroid Build Coastguard Worker */
operator const::size_t*() const4801*61046927SAndroid Build Coastguard Worker operator const ::size_t*() const {
4802*61046927SAndroid Build Coastguard Worker return (const ::size_t*) sizes_;
4803*61046927SAndroid Build Coastguard Worker }
4804*61046927SAndroid Build Coastguard Worker
4805*61046927SAndroid Build Coastguard Worker //! \brief Queries the number of dimensions in the range.
dimensions() const4806*61046927SAndroid Build Coastguard Worker ::size_t dimensions() const { return dimensions_; }
4807*61046927SAndroid Build Coastguard Worker };
4808*61046927SAndroid Build Coastguard Worker
4809*61046927SAndroid Build Coastguard Worker //! \brief A zero-dimensional range.
4810*61046927SAndroid Build Coastguard Worker static const NDRange NullRange;
4811*61046927SAndroid Build Coastguard Worker
4812*61046927SAndroid Build Coastguard Worker //! \brief Local address wrapper for use with Kernel::setArg
4813*61046927SAndroid Build Coastguard Worker struct LocalSpaceArg
4814*61046927SAndroid Build Coastguard Worker {
4815*61046927SAndroid Build Coastguard Worker ::size_t size_;
4816*61046927SAndroid Build Coastguard Worker };
4817*61046927SAndroid Build Coastguard Worker
4818*61046927SAndroid Build Coastguard Worker namespace detail {
4819*61046927SAndroid Build Coastguard Worker
4820*61046927SAndroid Build Coastguard Worker template <typename T>
4821*61046927SAndroid Build Coastguard Worker struct KernelArgumentHandler
4822*61046927SAndroid Build Coastguard Worker {
sizecl::detail::KernelArgumentHandler4823*61046927SAndroid Build Coastguard Worker static ::size_t size(const T&) { return sizeof(T); }
ptrcl::detail::KernelArgumentHandler4824*61046927SAndroid Build Coastguard Worker static const T* ptr(const T& value) { return &value; }
4825*61046927SAndroid Build Coastguard Worker };
4826*61046927SAndroid Build Coastguard Worker
4827*61046927SAndroid Build Coastguard Worker template <>
4828*61046927SAndroid Build Coastguard Worker struct KernelArgumentHandler<LocalSpaceArg>
4829*61046927SAndroid Build Coastguard Worker {
sizecl::detail::KernelArgumentHandler4830*61046927SAndroid Build Coastguard Worker static ::size_t size(const LocalSpaceArg& value) { return value.size_; }
ptrcl::detail::KernelArgumentHandler4831*61046927SAndroid Build Coastguard Worker static const void* ptr(const LocalSpaceArg&) { return NULL; }
4832*61046927SAndroid Build Coastguard Worker };
4833*61046927SAndroid Build Coastguard Worker
4834*61046927SAndroid Build Coastguard Worker }
4835*61046927SAndroid Build Coastguard Worker //! \endcond
4836*61046927SAndroid Build Coastguard Worker
4837*61046927SAndroid Build Coastguard Worker /*! __local
4838*61046927SAndroid Build Coastguard Worker * \brief Helper function for generating LocalSpaceArg objects.
4839*61046927SAndroid Build Coastguard Worker * Deprecated. Replaced with Local.
4840*61046927SAndroid Build Coastguard Worker */
4841*61046927SAndroid Build Coastguard Worker inline CL_EXT_PREFIX__VERSION_1_1_DEPRECATED LocalSpaceArg
4842*61046927SAndroid Build Coastguard Worker __local(::size_t size) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
4843*61046927SAndroid Build Coastguard Worker inline LocalSpaceArg
__local(::size_t size)4844*61046927SAndroid Build Coastguard Worker __local(::size_t size)
4845*61046927SAndroid Build Coastguard Worker {
4846*61046927SAndroid Build Coastguard Worker LocalSpaceArg ret = { size };
4847*61046927SAndroid Build Coastguard Worker return ret;
4848*61046927SAndroid Build Coastguard Worker }
4849*61046927SAndroid Build Coastguard Worker
4850*61046927SAndroid Build Coastguard Worker /*! Local
4851*61046927SAndroid Build Coastguard Worker * \brief Helper function for generating LocalSpaceArg objects.
4852*61046927SAndroid Build Coastguard Worker */
4853*61046927SAndroid Build Coastguard Worker inline LocalSpaceArg
Local(::size_t size)4854*61046927SAndroid Build Coastguard Worker Local(::size_t size)
4855*61046927SAndroid Build Coastguard Worker {
4856*61046927SAndroid Build Coastguard Worker LocalSpaceArg ret = { size };
4857*61046927SAndroid Build Coastguard Worker return ret;
4858*61046927SAndroid Build Coastguard Worker }
4859*61046927SAndroid Build Coastguard Worker
4860*61046927SAndroid Build Coastguard Worker //class KernelFunctor;
4861*61046927SAndroid Build Coastguard Worker
4862*61046927SAndroid Build Coastguard Worker /*! \brief Class interface for cl_kernel.
4863*61046927SAndroid Build Coastguard Worker *
4864*61046927SAndroid Build Coastguard Worker * \note Copies of these objects are shallow, meaning that the copy will refer
4865*61046927SAndroid Build Coastguard Worker * to the same underlying cl_kernel as the original. For details, see
4866*61046927SAndroid Build Coastguard Worker * clRetainKernel() and clReleaseKernel().
4867*61046927SAndroid Build Coastguard Worker *
4868*61046927SAndroid Build Coastguard Worker * \see cl_kernel
4869*61046927SAndroid Build Coastguard Worker */
4870*61046927SAndroid Build Coastguard Worker class Kernel : public detail::Wrapper<cl_kernel>
4871*61046927SAndroid Build Coastguard Worker {
4872*61046927SAndroid Build Coastguard Worker public:
4873*61046927SAndroid Build Coastguard Worker inline Kernel(const Program& program, const char* name, cl_int* err = NULL);
4874*61046927SAndroid Build Coastguard Worker
4875*61046927SAndroid Build Coastguard Worker //! \brief Default constructor - initializes to NULL.
Kernel()4876*61046927SAndroid Build Coastguard Worker Kernel() { }
4877*61046927SAndroid Build Coastguard Worker
4878*61046927SAndroid Build Coastguard Worker /*! \brief Constructor from cl_kernel - takes ownership.
4879*61046927SAndroid Build Coastguard Worker *
4880*61046927SAndroid Build Coastguard Worker * This effectively transfers ownership of a refcount on the cl_kernel
4881*61046927SAndroid Build Coastguard Worker * into the new Kernel object.
4882*61046927SAndroid Build Coastguard Worker */
Kernel(const cl_kernel & kernel)4883*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Kernel(const cl_kernel& kernel) : detail::Wrapper<cl_type>(kernel) { }
4884*61046927SAndroid Build Coastguard Worker
4885*61046927SAndroid Build Coastguard Worker /*! \brief Assignment operator from cl_kernel - takes ownership.
4886*61046927SAndroid Build Coastguard Worker *
4887*61046927SAndroid Build Coastguard Worker * This effectively transfers ownership of a refcount on the rhs and calls
4888*61046927SAndroid Build Coastguard Worker * clReleaseKernel() on the value previously held by this instance.
4889*61046927SAndroid Build Coastguard Worker */
operator =(const cl_kernel & rhs)4890*61046927SAndroid Build Coastguard Worker Kernel& operator = (const cl_kernel& rhs)
4891*61046927SAndroid Build Coastguard Worker {
4892*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(rhs);
4893*61046927SAndroid Build Coastguard Worker return *this;
4894*61046927SAndroid Build Coastguard Worker }
4895*61046927SAndroid Build Coastguard Worker
4896*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
4897*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4898*61046927SAndroid Build Coastguard Worker */
Kernel(const Kernel & kernel)4899*61046927SAndroid Build Coastguard Worker Kernel(const Kernel& kernel) : detail::Wrapper<cl_type>(kernel) {}
4900*61046927SAndroid Build Coastguard Worker
4901*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
4902*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4903*61046927SAndroid Build Coastguard Worker */
operator =(const Kernel & kernel)4904*61046927SAndroid Build Coastguard Worker Kernel& operator = (const Kernel &kernel)
4905*61046927SAndroid Build Coastguard Worker {
4906*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(kernel);
4907*61046927SAndroid Build Coastguard Worker return *this;
4908*61046927SAndroid Build Coastguard Worker }
4909*61046927SAndroid Build Coastguard Worker
4910*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4911*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
4912*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4913*61046927SAndroid Build Coastguard Worker */
Kernel(Kernel && kernel)4914*61046927SAndroid Build Coastguard Worker Kernel(Kernel&& kernel) CL_HPP_NOEXCEPT : detail::Wrapper<cl_type>(std::move(kernel)) {}
4915*61046927SAndroid Build Coastguard Worker
4916*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
4917*61046927SAndroid Build Coastguard Worker * Required for MSVC.
4918*61046927SAndroid Build Coastguard Worker */
operator =(Kernel && kernel)4919*61046927SAndroid Build Coastguard Worker Kernel& operator = (Kernel &&kernel)
4920*61046927SAndroid Build Coastguard Worker {
4921*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(std::move(kernel));
4922*61046927SAndroid Build Coastguard Worker return *this;
4923*61046927SAndroid Build Coastguard Worker }
4924*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
4925*61046927SAndroid Build Coastguard Worker
4926*61046927SAndroid Build Coastguard Worker template <typename T>
getInfo(cl_kernel_info name,T * param) const4927*61046927SAndroid Build Coastguard Worker cl_int getInfo(cl_kernel_info name, T* param) const
4928*61046927SAndroid Build Coastguard Worker {
4929*61046927SAndroid Build Coastguard Worker return detail::errHandler(
4930*61046927SAndroid Build Coastguard Worker detail::getInfo(&::clGetKernelInfo, object_, name, param),
4931*61046927SAndroid Build Coastguard Worker __GET_KERNEL_INFO_ERR);
4932*61046927SAndroid Build Coastguard Worker }
4933*61046927SAndroid Build Coastguard Worker
4934*61046927SAndroid Build Coastguard Worker template <cl_kernel_info name> typename
4935*61046927SAndroid Build Coastguard Worker detail::param_traits<detail::cl_kernel_info, name>::param_type
getInfo(cl_int * err=NULL) const4936*61046927SAndroid Build Coastguard Worker getInfo(cl_int* err = NULL) const
4937*61046927SAndroid Build Coastguard Worker {
4938*61046927SAndroid Build Coastguard Worker typename detail::param_traits<
4939*61046927SAndroid Build Coastguard Worker detail::cl_kernel_info, name>::param_type param;
4940*61046927SAndroid Build Coastguard Worker cl_int result = getInfo(name, ¶m);
4941*61046927SAndroid Build Coastguard Worker if (err != NULL) {
4942*61046927SAndroid Build Coastguard Worker *err = result;
4943*61046927SAndroid Build Coastguard Worker }
4944*61046927SAndroid Build Coastguard Worker return param;
4945*61046927SAndroid Build Coastguard Worker }
4946*61046927SAndroid Build Coastguard Worker
4947*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
4948*61046927SAndroid Build Coastguard Worker template <typename T>
getArgInfo(cl_uint argIndex,cl_kernel_arg_info name,T * param) const4949*61046927SAndroid Build Coastguard Worker cl_int getArgInfo(cl_uint argIndex, cl_kernel_arg_info name, T* param) const
4950*61046927SAndroid Build Coastguard Worker {
4951*61046927SAndroid Build Coastguard Worker return detail::errHandler(
4952*61046927SAndroid Build Coastguard Worker detail::getInfo(&::clGetKernelArgInfo, object_, argIndex, name, param),
4953*61046927SAndroid Build Coastguard Worker __GET_KERNEL_ARG_INFO_ERR);
4954*61046927SAndroid Build Coastguard Worker }
4955*61046927SAndroid Build Coastguard Worker
4956*61046927SAndroid Build Coastguard Worker template <cl_kernel_arg_info name> typename
4957*61046927SAndroid Build Coastguard Worker detail::param_traits<detail::cl_kernel_arg_info, name>::param_type
getArgInfo(cl_uint argIndex,cl_int * err=NULL) const4958*61046927SAndroid Build Coastguard Worker getArgInfo(cl_uint argIndex, cl_int* err = NULL) const
4959*61046927SAndroid Build Coastguard Worker {
4960*61046927SAndroid Build Coastguard Worker typename detail::param_traits<
4961*61046927SAndroid Build Coastguard Worker detail::cl_kernel_arg_info, name>::param_type param;
4962*61046927SAndroid Build Coastguard Worker cl_int result = getArgInfo(argIndex, name, ¶m);
4963*61046927SAndroid Build Coastguard Worker if (err != NULL) {
4964*61046927SAndroid Build Coastguard Worker *err = result;
4965*61046927SAndroid Build Coastguard Worker }
4966*61046927SAndroid Build Coastguard Worker return param;
4967*61046927SAndroid Build Coastguard Worker }
4968*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
4969*61046927SAndroid Build Coastguard Worker
4970*61046927SAndroid Build Coastguard Worker template <typename T>
getWorkGroupInfo(const Device & device,cl_kernel_work_group_info name,T * param) const4971*61046927SAndroid Build Coastguard Worker cl_int getWorkGroupInfo(
4972*61046927SAndroid Build Coastguard Worker const Device& device, cl_kernel_work_group_info name, T* param) const
4973*61046927SAndroid Build Coastguard Worker {
4974*61046927SAndroid Build Coastguard Worker return detail::errHandler(
4975*61046927SAndroid Build Coastguard Worker detail::getInfo(
4976*61046927SAndroid Build Coastguard Worker &::clGetKernelWorkGroupInfo, object_, device(), name, param),
4977*61046927SAndroid Build Coastguard Worker __GET_KERNEL_WORK_GROUP_INFO_ERR);
4978*61046927SAndroid Build Coastguard Worker }
4979*61046927SAndroid Build Coastguard Worker
4980*61046927SAndroid Build Coastguard Worker template <cl_kernel_work_group_info name> typename
4981*61046927SAndroid Build Coastguard Worker detail::param_traits<detail::cl_kernel_work_group_info, name>::param_type
getWorkGroupInfo(const Device & device,cl_int * err=NULL) const4982*61046927SAndroid Build Coastguard Worker getWorkGroupInfo(const Device& device, cl_int* err = NULL) const
4983*61046927SAndroid Build Coastguard Worker {
4984*61046927SAndroid Build Coastguard Worker typename detail::param_traits<
4985*61046927SAndroid Build Coastguard Worker detail::cl_kernel_work_group_info, name>::param_type param;
4986*61046927SAndroid Build Coastguard Worker cl_int result = getWorkGroupInfo(device, name, ¶m);
4987*61046927SAndroid Build Coastguard Worker if (err != NULL) {
4988*61046927SAndroid Build Coastguard Worker *err = result;
4989*61046927SAndroid Build Coastguard Worker }
4990*61046927SAndroid Build Coastguard Worker return param;
4991*61046927SAndroid Build Coastguard Worker }
4992*61046927SAndroid Build Coastguard Worker
4993*61046927SAndroid Build Coastguard Worker template <typename T>
setArg(cl_uint index,const T & value)4994*61046927SAndroid Build Coastguard Worker cl_int setArg(cl_uint index, const T &value)
4995*61046927SAndroid Build Coastguard Worker {
4996*61046927SAndroid Build Coastguard Worker return detail::errHandler(
4997*61046927SAndroid Build Coastguard Worker ::clSetKernelArg(
4998*61046927SAndroid Build Coastguard Worker object_,
4999*61046927SAndroid Build Coastguard Worker index,
5000*61046927SAndroid Build Coastguard Worker detail::KernelArgumentHandler<T>::size(value),
5001*61046927SAndroid Build Coastguard Worker detail::KernelArgumentHandler<T>::ptr(value)),
5002*61046927SAndroid Build Coastguard Worker __SET_KERNEL_ARGS_ERR);
5003*61046927SAndroid Build Coastguard Worker }
5004*61046927SAndroid Build Coastguard Worker
setArg(cl_uint index,::size_t size,const void * argPtr)5005*61046927SAndroid Build Coastguard Worker cl_int setArg(cl_uint index, ::size_t size, const void* argPtr)
5006*61046927SAndroid Build Coastguard Worker {
5007*61046927SAndroid Build Coastguard Worker return detail::errHandler(
5008*61046927SAndroid Build Coastguard Worker ::clSetKernelArg(object_, index, size, argPtr),
5009*61046927SAndroid Build Coastguard Worker __SET_KERNEL_ARGS_ERR);
5010*61046927SAndroid Build Coastguard Worker }
5011*61046927SAndroid Build Coastguard Worker };
5012*61046927SAndroid Build Coastguard Worker
5013*61046927SAndroid Build Coastguard Worker /*! \class Program
5014*61046927SAndroid Build Coastguard Worker * \brief Program interface that implements cl_program.
5015*61046927SAndroid Build Coastguard Worker */
5016*61046927SAndroid Build Coastguard Worker class Program : public detail::Wrapper<cl_program>
5017*61046927SAndroid Build Coastguard Worker {
5018*61046927SAndroid Build Coastguard Worker public:
5019*61046927SAndroid Build Coastguard Worker typedef VECTOR_CLASS<std::pair<const void*, ::size_t> > Binaries;
5020*61046927SAndroid Build Coastguard Worker typedef VECTOR_CLASS<std::pair<const char*, ::size_t> > Sources;
5021*61046927SAndroid Build Coastguard Worker
Program(const STRING_CLASS & source,bool build=false,cl_int * err=NULL)5022*61046927SAndroid Build Coastguard Worker Program(
5023*61046927SAndroid Build Coastguard Worker const STRING_CLASS& source,
5024*61046927SAndroid Build Coastguard Worker bool build = false,
5025*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
5026*61046927SAndroid Build Coastguard Worker {
5027*61046927SAndroid Build Coastguard Worker cl_int error;
5028*61046927SAndroid Build Coastguard Worker
5029*61046927SAndroid Build Coastguard Worker const char * strings = source.c_str();
5030*61046927SAndroid Build Coastguard Worker const ::size_t length = source.size();
5031*61046927SAndroid Build Coastguard Worker
5032*61046927SAndroid Build Coastguard Worker Context context = Context::getDefault(err);
5033*61046927SAndroid Build Coastguard Worker
5034*61046927SAndroid Build Coastguard Worker object_ = ::clCreateProgramWithSource(
5035*61046927SAndroid Build Coastguard Worker context(), (cl_uint)1, &strings, &length, &error);
5036*61046927SAndroid Build Coastguard Worker
5037*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR);
5038*61046927SAndroid Build Coastguard Worker
5039*61046927SAndroid Build Coastguard Worker if (error == CL_SUCCESS && build) {
5040*61046927SAndroid Build Coastguard Worker
5041*61046927SAndroid Build Coastguard Worker error = ::clBuildProgram(
5042*61046927SAndroid Build Coastguard Worker object_,
5043*61046927SAndroid Build Coastguard Worker 0,
5044*61046927SAndroid Build Coastguard Worker NULL,
5045*61046927SAndroid Build Coastguard Worker "",
5046*61046927SAndroid Build Coastguard Worker NULL,
5047*61046927SAndroid Build Coastguard Worker NULL);
5048*61046927SAndroid Build Coastguard Worker
5049*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __BUILD_PROGRAM_ERR);
5050*61046927SAndroid Build Coastguard Worker }
5051*61046927SAndroid Build Coastguard Worker
5052*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5053*61046927SAndroid Build Coastguard Worker *err = error;
5054*61046927SAndroid Build Coastguard Worker }
5055*61046927SAndroid Build Coastguard Worker }
5056*61046927SAndroid Build Coastguard Worker
Program(const Context & context,const STRING_CLASS & source,bool build=false,cl_int * err=NULL)5057*61046927SAndroid Build Coastguard Worker Program(
5058*61046927SAndroid Build Coastguard Worker const Context& context,
5059*61046927SAndroid Build Coastguard Worker const STRING_CLASS& source,
5060*61046927SAndroid Build Coastguard Worker bool build = false,
5061*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
5062*61046927SAndroid Build Coastguard Worker {
5063*61046927SAndroid Build Coastguard Worker cl_int error;
5064*61046927SAndroid Build Coastguard Worker
5065*61046927SAndroid Build Coastguard Worker const char * strings = source.c_str();
5066*61046927SAndroid Build Coastguard Worker const ::size_t length = source.size();
5067*61046927SAndroid Build Coastguard Worker
5068*61046927SAndroid Build Coastguard Worker object_ = ::clCreateProgramWithSource(
5069*61046927SAndroid Build Coastguard Worker context(), (cl_uint)1, &strings, &length, &error);
5070*61046927SAndroid Build Coastguard Worker
5071*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR);
5072*61046927SAndroid Build Coastguard Worker
5073*61046927SAndroid Build Coastguard Worker if (error == CL_SUCCESS && build) {
5074*61046927SAndroid Build Coastguard Worker
5075*61046927SAndroid Build Coastguard Worker error = ::clBuildProgram(
5076*61046927SAndroid Build Coastguard Worker object_,
5077*61046927SAndroid Build Coastguard Worker 0,
5078*61046927SAndroid Build Coastguard Worker NULL,
5079*61046927SAndroid Build Coastguard Worker "",
5080*61046927SAndroid Build Coastguard Worker NULL,
5081*61046927SAndroid Build Coastguard Worker NULL);
5082*61046927SAndroid Build Coastguard Worker
5083*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __BUILD_PROGRAM_ERR);
5084*61046927SAndroid Build Coastguard Worker }
5085*61046927SAndroid Build Coastguard Worker
5086*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5087*61046927SAndroid Build Coastguard Worker *err = error;
5088*61046927SAndroid Build Coastguard Worker }
5089*61046927SAndroid Build Coastguard Worker }
5090*61046927SAndroid Build Coastguard Worker
Program(const Context & context,const Sources & sources,cl_int * err=NULL)5091*61046927SAndroid Build Coastguard Worker Program(
5092*61046927SAndroid Build Coastguard Worker const Context& context,
5093*61046927SAndroid Build Coastguard Worker const Sources& sources,
5094*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
5095*61046927SAndroid Build Coastguard Worker {
5096*61046927SAndroid Build Coastguard Worker cl_int error;
5097*61046927SAndroid Build Coastguard Worker
5098*61046927SAndroid Build Coastguard Worker const ::size_t n = (::size_t)sources.size();
5099*61046927SAndroid Build Coastguard Worker ::size_t* lengths = (::size_t*) alloca(n * sizeof(::size_t));
5100*61046927SAndroid Build Coastguard Worker const char** strings = (const char**) alloca(n * sizeof(const char*));
5101*61046927SAndroid Build Coastguard Worker
5102*61046927SAndroid Build Coastguard Worker for (::size_t i = 0; i < n; ++i) {
5103*61046927SAndroid Build Coastguard Worker strings[i] = sources[(int)i].first;
5104*61046927SAndroid Build Coastguard Worker lengths[i] = sources[(int)i].second;
5105*61046927SAndroid Build Coastguard Worker }
5106*61046927SAndroid Build Coastguard Worker
5107*61046927SAndroid Build Coastguard Worker object_ = ::clCreateProgramWithSource(
5108*61046927SAndroid Build Coastguard Worker context(), (cl_uint)n, strings, lengths, &error);
5109*61046927SAndroid Build Coastguard Worker
5110*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR);
5111*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5112*61046927SAndroid Build Coastguard Worker *err = error;
5113*61046927SAndroid Build Coastguard Worker }
5114*61046927SAndroid Build Coastguard Worker }
5115*61046927SAndroid Build Coastguard Worker
5116*61046927SAndroid Build Coastguard Worker /**
5117*61046927SAndroid Build Coastguard Worker * Construct a program object from a list of devices and a per-device list of binaries.
5118*61046927SAndroid Build Coastguard Worker * \param context A valid OpenCL context in which to construct the program.
5119*61046927SAndroid Build Coastguard Worker * \param devices A vector of OpenCL device objects for which the program will be created.
5120*61046927SAndroid Build Coastguard Worker * \param binaries A vector of pairs of a pointer to a binary object and its length.
5121*61046927SAndroid Build Coastguard Worker * \param binaryStatus An optional vector that on completion will be resized to
5122*61046927SAndroid Build Coastguard Worker * match the size of binaries and filled with values to specify if each binary
5123*61046927SAndroid Build Coastguard Worker * was successfully loaded.
5124*61046927SAndroid Build Coastguard Worker * Set to CL_SUCCESS if the binary was successfully loaded.
5125*61046927SAndroid Build Coastguard Worker * Set to CL_INVALID_VALUE if the length is 0 or the binary pointer is NULL.
5126*61046927SAndroid Build Coastguard Worker * Set to CL_INVALID_BINARY if the binary provided is not valid for the matching device.
5127*61046927SAndroid Build Coastguard Worker * \param err if non-NULL will be set to CL_SUCCESS on successful operation or one of the following errors:
5128*61046927SAndroid Build Coastguard Worker * CL_INVALID_CONTEXT if context is not a valid context.
5129*61046927SAndroid Build Coastguard Worker * CL_INVALID_VALUE if the length of devices is zero; or if the length of binaries does not match the length of devices;
5130*61046927SAndroid Build Coastguard Worker * or if any entry in binaries is NULL or has length 0.
5131*61046927SAndroid Build Coastguard Worker * CL_INVALID_DEVICE if OpenCL devices listed in devices are not in the list of devices associated with context.
5132*61046927SAndroid Build Coastguard Worker * CL_INVALID_BINARY if an invalid program binary was encountered for any device. binaryStatus will return specific status for each device.
5133*61046927SAndroid Build Coastguard Worker * CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources required by the OpenCL implementation on the host.
5134*61046927SAndroid Build Coastguard Worker */
Program(const Context & context,const VECTOR_CLASS<Device> & devices,const Binaries & binaries,VECTOR_CLASS<cl_int> * binaryStatus=NULL,cl_int * err=NULL)5135*61046927SAndroid Build Coastguard Worker Program(
5136*61046927SAndroid Build Coastguard Worker const Context& context,
5137*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Device>& devices,
5138*61046927SAndroid Build Coastguard Worker const Binaries& binaries,
5139*61046927SAndroid Build Coastguard Worker VECTOR_CLASS<cl_int>* binaryStatus = NULL,
5140*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
5141*61046927SAndroid Build Coastguard Worker {
5142*61046927SAndroid Build Coastguard Worker cl_int error;
5143*61046927SAndroid Build Coastguard Worker
5144*61046927SAndroid Build Coastguard Worker const ::size_t numDevices = devices.size();
5145*61046927SAndroid Build Coastguard Worker
5146*61046927SAndroid Build Coastguard Worker // Catch size mismatch early and return
5147*61046927SAndroid Build Coastguard Worker if(binaries.size() != numDevices) {
5148*61046927SAndroid Build Coastguard Worker error = CL_INVALID_VALUE;
5149*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_PROGRAM_WITH_BINARY_ERR);
5150*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5151*61046927SAndroid Build Coastguard Worker *err = error;
5152*61046927SAndroid Build Coastguard Worker }
5153*61046927SAndroid Build Coastguard Worker return;
5154*61046927SAndroid Build Coastguard Worker }
5155*61046927SAndroid Build Coastguard Worker
5156*61046927SAndroid Build Coastguard Worker ::size_t* lengths = (::size_t*) alloca(numDevices * sizeof(::size_t));
5157*61046927SAndroid Build Coastguard Worker const unsigned char** images = (const unsigned char**) alloca(numDevices * sizeof(const unsigned char**));
5158*61046927SAndroid Build Coastguard Worker
5159*61046927SAndroid Build Coastguard Worker for (::size_t i = 0; i < numDevices; ++i) {
5160*61046927SAndroid Build Coastguard Worker images[i] = (const unsigned char*)binaries[i].first;
5161*61046927SAndroid Build Coastguard Worker lengths[i] = binaries[(int)i].second;
5162*61046927SAndroid Build Coastguard Worker }
5163*61046927SAndroid Build Coastguard Worker
5164*61046927SAndroid Build Coastguard Worker cl_device_id* deviceIDs = (cl_device_id*) alloca(numDevices * sizeof(cl_device_id));
5165*61046927SAndroid Build Coastguard Worker for( ::size_t deviceIndex = 0; deviceIndex < numDevices; ++deviceIndex ) {
5166*61046927SAndroid Build Coastguard Worker deviceIDs[deviceIndex] = (devices[deviceIndex])();
5167*61046927SAndroid Build Coastguard Worker }
5168*61046927SAndroid Build Coastguard Worker
5169*61046927SAndroid Build Coastguard Worker if(binaryStatus) {
5170*61046927SAndroid Build Coastguard Worker binaryStatus->resize(numDevices);
5171*61046927SAndroid Build Coastguard Worker }
5172*61046927SAndroid Build Coastguard Worker
5173*61046927SAndroid Build Coastguard Worker object_ = ::clCreateProgramWithBinary(
5174*61046927SAndroid Build Coastguard Worker context(), (cl_uint) devices.size(),
5175*61046927SAndroid Build Coastguard Worker deviceIDs,
5176*61046927SAndroid Build Coastguard Worker lengths, images, (binaryStatus != NULL && numDevices > 0)
5177*61046927SAndroid Build Coastguard Worker ? &binaryStatus->front()
5178*61046927SAndroid Build Coastguard Worker : NULL, &error);
5179*61046927SAndroid Build Coastguard Worker
5180*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_PROGRAM_WITH_BINARY_ERR);
5181*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5182*61046927SAndroid Build Coastguard Worker *err = error;
5183*61046927SAndroid Build Coastguard Worker }
5184*61046927SAndroid Build Coastguard Worker }
5185*61046927SAndroid Build Coastguard Worker
5186*61046927SAndroid Build Coastguard Worker
5187*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
5188*61046927SAndroid Build Coastguard Worker /**
5189*61046927SAndroid Build Coastguard Worker * Create program using builtin kernels.
5190*61046927SAndroid Build Coastguard Worker * \param kernelNames Semi-colon separated list of builtin kernel names
5191*61046927SAndroid Build Coastguard Worker */
Program(const Context & context,const VECTOR_CLASS<Device> & devices,const STRING_CLASS & kernelNames,cl_int * err=NULL)5192*61046927SAndroid Build Coastguard Worker Program(
5193*61046927SAndroid Build Coastguard Worker const Context& context,
5194*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Device>& devices,
5195*61046927SAndroid Build Coastguard Worker const STRING_CLASS& kernelNames,
5196*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
5197*61046927SAndroid Build Coastguard Worker {
5198*61046927SAndroid Build Coastguard Worker cl_int error;
5199*61046927SAndroid Build Coastguard Worker
5200*61046927SAndroid Build Coastguard Worker
5201*61046927SAndroid Build Coastguard Worker ::size_t numDevices = devices.size();
5202*61046927SAndroid Build Coastguard Worker cl_device_id* deviceIDs = (cl_device_id*) alloca(numDevices * sizeof(cl_device_id));
5203*61046927SAndroid Build Coastguard Worker for( ::size_t deviceIndex = 0; deviceIndex < numDevices; ++deviceIndex ) {
5204*61046927SAndroid Build Coastguard Worker deviceIDs[deviceIndex] = (devices[deviceIndex])();
5205*61046927SAndroid Build Coastguard Worker }
5206*61046927SAndroid Build Coastguard Worker
5207*61046927SAndroid Build Coastguard Worker object_ = ::clCreateProgramWithBuiltInKernels(
5208*61046927SAndroid Build Coastguard Worker context(),
5209*61046927SAndroid Build Coastguard Worker (cl_uint) devices.size(),
5210*61046927SAndroid Build Coastguard Worker deviceIDs,
5211*61046927SAndroid Build Coastguard Worker kernelNames.c_str(),
5212*61046927SAndroid Build Coastguard Worker &error);
5213*61046927SAndroid Build Coastguard Worker
5214*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_PROGRAM_WITH_BUILT_IN_KERNELS_ERR);
5215*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5216*61046927SAndroid Build Coastguard Worker *err = error;
5217*61046927SAndroid Build Coastguard Worker }
5218*61046927SAndroid Build Coastguard Worker }
5219*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
5220*61046927SAndroid Build Coastguard Worker
Program()5221*61046927SAndroid Build Coastguard Worker Program() { }
5222*61046927SAndroid Build Coastguard Worker
Program(const cl_program & program)5223*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS Program(const cl_program& program) : detail::Wrapper<cl_type>(program) { }
5224*61046927SAndroid Build Coastguard Worker
operator =(const cl_program & rhs)5225*61046927SAndroid Build Coastguard Worker Program& operator = (const cl_program& rhs)
5226*61046927SAndroid Build Coastguard Worker {
5227*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(rhs);
5228*61046927SAndroid Build Coastguard Worker return *this;
5229*61046927SAndroid Build Coastguard Worker }
5230*61046927SAndroid Build Coastguard Worker
5231*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
5232*61046927SAndroid Build Coastguard Worker * Required for MSVC.
5233*61046927SAndroid Build Coastguard Worker */
Program(const Program & program)5234*61046927SAndroid Build Coastguard Worker Program(const Program& program) : detail::Wrapper<cl_type>(program) {}
5235*61046927SAndroid Build Coastguard Worker
5236*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
5237*61046927SAndroid Build Coastguard Worker * Required for MSVC.
5238*61046927SAndroid Build Coastguard Worker */
operator =(const Program & program)5239*61046927SAndroid Build Coastguard Worker Program& operator = (const Program &program)
5240*61046927SAndroid Build Coastguard Worker {
5241*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(program);
5242*61046927SAndroid Build Coastguard Worker return *this;
5243*61046927SAndroid Build Coastguard Worker }
5244*61046927SAndroid Build Coastguard Worker
5245*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
5246*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
5247*61046927SAndroid Build Coastguard Worker * Required for MSVC.
5248*61046927SAndroid Build Coastguard Worker */
Program(Program && program)5249*61046927SAndroid Build Coastguard Worker Program(Program&& program) CL_HPP_NOEXCEPT : detail::Wrapper<cl_type>(std::move(program)) {}
5250*61046927SAndroid Build Coastguard Worker
5251*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
5252*61046927SAndroid Build Coastguard Worker * Required for MSVC.
5253*61046927SAndroid Build Coastguard Worker */
operator =(Program && program)5254*61046927SAndroid Build Coastguard Worker Program& operator = (Program &&program)
5255*61046927SAndroid Build Coastguard Worker {
5256*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(std::move(program));
5257*61046927SAndroid Build Coastguard Worker return *this;
5258*61046927SAndroid Build Coastguard Worker }
5259*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
5260*61046927SAndroid Build Coastguard Worker
build(const VECTOR_CLASS<Device> & devices,const char * options=NULL,void (CL_CALLBACK * notifyFptr)(cl_program,void *)=NULL,void * data=NULL) const5261*61046927SAndroid Build Coastguard Worker cl_int build(
5262*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Device>& devices,
5263*61046927SAndroid Build Coastguard Worker const char* options = NULL,
5264*61046927SAndroid Build Coastguard Worker void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL,
5265*61046927SAndroid Build Coastguard Worker void* data = NULL) const
5266*61046927SAndroid Build Coastguard Worker {
5267*61046927SAndroid Build Coastguard Worker ::size_t numDevices = devices.size();
5268*61046927SAndroid Build Coastguard Worker cl_device_id* deviceIDs = (cl_device_id*) alloca(numDevices * sizeof(cl_device_id));
5269*61046927SAndroid Build Coastguard Worker for( ::size_t deviceIndex = 0; deviceIndex < numDevices; ++deviceIndex ) {
5270*61046927SAndroid Build Coastguard Worker deviceIDs[deviceIndex] = (devices[deviceIndex])();
5271*61046927SAndroid Build Coastguard Worker }
5272*61046927SAndroid Build Coastguard Worker
5273*61046927SAndroid Build Coastguard Worker return detail::errHandler(
5274*61046927SAndroid Build Coastguard Worker ::clBuildProgram(
5275*61046927SAndroid Build Coastguard Worker object_,
5276*61046927SAndroid Build Coastguard Worker (cl_uint)
5277*61046927SAndroid Build Coastguard Worker devices.size(),
5278*61046927SAndroid Build Coastguard Worker deviceIDs,
5279*61046927SAndroid Build Coastguard Worker options,
5280*61046927SAndroid Build Coastguard Worker notifyFptr,
5281*61046927SAndroid Build Coastguard Worker data),
5282*61046927SAndroid Build Coastguard Worker __BUILD_PROGRAM_ERR);
5283*61046927SAndroid Build Coastguard Worker }
5284*61046927SAndroid Build Coastguard Worker
build(const char * options=NULL,void (CL_CALLBACK * notifyFptr)(cl_program,void *)=NULL,void * data=NULL) const5285*61046927SAndroid Build Coastguard Worker cl_int build(
5286*61046927SAndroid Build Coastguard Worker const char* options = NULL,
5287*61046927SAndroid Build Coastguard Worker void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL,
5288*61046927SAndroid Build Coastguard Worker void* data = NULL) const
5289*61046927SAndroid Build Coastguard Worker {
5290*61046927SAndroid Build Coastguard Worker return detail::errHandler(
5291*61046927SAndroid Build Coastguard Worker ::clBuildProgram(
5292*61046927SAndroid Build Coastguard Worker object_,
5293*61046927SAndroid Build Coastguard Worker 0,
5294*61046927SAndroid Build Coastguard Worker NULL,
5295*61046927SAndroid Build Coastguard Worker options,
5296*61046927SAndroid Build Coastguard Worker notifyFptr,
5297*61046927SAndroid Build Coastguard Worker data),
5298*61046927SAndroid Build Coastguard Worker __BUILD_PROGRAM_ERR);
5299*61046927SAndroid Build Coastguard Worker }
5300*61046927SAndroid Build Coastguard Worker
5301*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
compile(const char * options=NULL,void (CL_CALLBACK * notifyFptr)(cl_program,void *)=NULL,void * data=NULL) const5302*61046927SAndroid Build Coastguard Worker cl_int compile(
5303*61046927SAndroid Build Coastguard Worker const char* options = NULL,
5304*61046927SAndroid Build Coastguard Worker void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL,
5305*61046927SAndroid Build Coastguard Worker void* data = NULL) const
5306*61046927SAndroid Build Coastguard Worker {
5307*61046927SAndroid Build Coastguard Worker return detail::errHandler(
5308*61046927SAndroid Build Coastguard Worker ::clCompileProgram(
5309*61046927SAndroid Build Coastguard Worker object_,
5310*61046927SAndroid Build Coastguard Worker 0,
5311*61046927SAndroid Build Coastguard Worker NULL,
5312*61046927SAndroid Build Coastguard Worker options,
5313*61046927SAndroid Build Coastguard Worker 0,
5314*61046927SAndroid Build Coastguard Worker NULL,
5315*61046927SAndroid Build Coastguard Worker NULL,
5316*61046927SAndroid Build Coastguard Worker notifyFptr,
5317*61046927SAndroid Build Coastguard Worker data),
5318*61046927SAndroid Build Coastguard Worker __COMPILE_PROGRAM_ERR);
5319*61046927SAndroid Build Coastguard Worker }
5320*61046927SAndroid Build Coastguard Worker #endif
5321*61046927SAndroid Build Coastguard Worker
5322*61046927SAndroid Build Coastguard Worker template <typename T>
getInfo(cl_program_info name,T * param) const5323*61046927SAndroid Build Coastguard Worker cl_int getInfo(cl_program_info name, T* param) const
5324*61046927SAndroid Build Coastguard Worker {
5325*61046927SAndroid Build Coastguard Worker return detail::errHandler(
5326*61046927SAndroid Build Coastguard Worker detail::getInfo(&::clGetProgramInfo, object_, name, param),
5327*61046927SAndroid Build Coastguard Worker __GET_PROGRAM_INFO_ERR);
5328*61046927SAndroid Build Coastguard Worker }
5329*61046927SAndroid Build Coastguard Worker
5330*61046927SAndroid Build Coastguard Worker template <cl_program_info name> typename
5331*61046927SAndroid Build Coastguard Worker detail::param_traits<detail::cl_program_info, name>::param_type
getInfo(cl_int * err=NULL) const5332*61046927SAndroid Build Coastguard Worker getInfo(cl_int* err = NULL) const
5333*61046927SAndroid Build Coastguard Worker {
5334*61046927SAndroid Build Coastguard Worker typename detail::param_traits<
5335*61046927SAndroid Build Coastguard Worker detail::cl_program_info, name>::param_type param;
5336*61046927SAndroid Build Coastguard Worker cl_int result = getInfo(name, ¶m);
5337*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5338*61046927SAndroid Build Coastguard Worker *err = result;
5339*61046927SAndroid Build Coastguard Worker }
5340*61046927SAndroid Build Coastguard Worker return param;
5341*61046927SAndroid Build Coastguard Worker }
5342*61046927SAndroid Build Coastguard Worker
5343*61046927SAndroid Build Coastguard Worker template <typename T>
getBuildInfo(const Device & device,cl_program_build_info name,T * param) const5344*61046927SAndroid Build Coastguard Worker cl_int getBuildInfo(
5345*61046927SAndroid Build Coastguard Worker const Device& device, cl_program_build_info name, T* param) const
5346*61046927SAndroid Build Coastguard Worker {
5347*61046927SAndroid Build Coastguard Worker return detail::errHandler(
5348*61046927SAndroid Build Coastguard Worker detail::getInfo(
5349*61046927SAndroid Build Coastguard Worker &::clGetProgramBuildInfo, object_, device(), name, param),
5350*61046927SAndroid Build Coastguard Worker __GET_PROGRAM_BUILD_INFO_ERR);
5351*61046927SAndroid Build Coastguard Worker }
5352*61046927SAndroid Build Coastguard Worker
5353*61046927SAndroid Build Coastguard Worker template <cl_program_build_info name> typename
5354*61046927SAndroid Build Coastguard Worker detail::param_traits<detail::cl_program_build_info, name>::param_type
getBuildInfo(const Device & device,cl_int * err=NULL) const5355*61046927SAndroid Build Coastguard Worker getBuildInfo(const Device& device, cl_int* err = NULL) const
5356*61046927SAndroid Build Coastguard Worker {
5357*61046927SAndroid Build Coastguard Worker typename detail::param_traits<
5358*61046927SAndroid Build Coastguard Worker detail::cl_program_build_info, name>::param_type param;
5359*61046927SAndroid Build Coastguard Worker cl_int result = getBuildInfo(device, name, ¶m);
5360*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5361*61046927SAndroid Build Coastguard Worker *err = result;
5362*61046927SAndroid Build Coastguard Worker }
5363*61046927SAndroid Build Coastguard Worker return param;
5364*61046927SAndroid Build Coastguard Worker }
5365*61046927SAndroid Build Coastguard Worker
createKernels(VECTOR_CLASS<Kernel> * kernels)5366*61046927SAndroid Build Coastguard Worker cl_int createKernels(VECTOR_CLASS<Kernel>* kernels)
5367*61046927SAndroid Build Coastguard Worker {
5368*61046927SAndroid Build Coastguard Worker cl_uint numKernels;
5369*61046927SAndroid Build Coastguard Worker cl_int err = ::clCreateKernelsInProgram(object_, 0, NULL, &numKernels);
5370*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
5371*61046927SAndroid Build Coastguard Worker return detail::errHandler(err, __CREATE_KERNELS_IN_PROGRAM_ERR);
5372*61046927SAndroid Build Coastguard Worker }
5373*61046927SAndroid Build Coastguard Worker
5374*61046927SAndroid Build Coastguard Worker Kernel* value = (Kernel*) alloca(numKernels * sizeof(Kernel));
5375*61046927SAndroid Build Coastguard Worker err = ::clCreateKernelsInProgram(
5376*61046927SAndroid Build Coastguard Worker object_, numKernels, (cl_kernel*) value, NULL);
5377*61046927SAndroid Build Coastguard Worker if (err != CL_SUCCESS) {
5378*61046927SAndroid Build Coastguard Worker return detail::errHandler(err, __CREATE_KERNELS_IN_PROGRAM_ERR);
5379*61046927SAndroid Build Coastguard Worker }
5380*61046927SAndroid Build Coastguard Worker
5381*61046927SAndroid Build Coastguard Worker kernels->assign(&value[0], &value[numKernels]);
5382*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
5383*61046927SAndroid Build Coastguard Worker }
5384*61046927SAndroid Build Coastguard Worker };
5385*61046927SAndroid Build Coastguard Worker
5386*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
linkProgram(Program input1,Program input2,const char * options=NULL,void (CL_CALLBACK * notifyFptr)(cl_program,void *)=NULL,void * data=NULL,cl_int * err=NULL)5387*61046927SAndroid Build Coastguard Worker inline Program linkProgram(
5388*61046927SAndroid Build Coastguard Worker Program input1,
5389*61046927SAndroid Build Coastguard Worker Program input2,
5390*61046927SAndroid Build Coastguard Worker const char* options = NULL,
5391*61046927SAndroid Build Coastguard Worker void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL,
5392*61046927SAndroid Build Coastguard Worker void* data = NULL,
5393*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
5394*61046927SAndroid Build Coastguard Worker {
5395*61046927SAndroid Build Coastguard Worker cl_int error_local = CL_SUCCESS;
5396*61046927SAndroid Build Coastguard Worker
5397*61046927SAndroid Build Coastguard Worker cl_program programs[2] = { input1(), input2() };
5398*61046927SAndroid Build Coastguard Worker
5399*61046927SAndroid Build Coastguard Worker Context ctx = input1.getInfo<CL_PROGRAM_CONTEXT>(&error_local);
5400*61046927SAndroid Build Coastguard Worker if(error_local!=CL_SUCCESS) {
5401*61046927SAndroid Build Coastguard Worker detail::errHandler(error_local, __LINK_PROGRAM_ERR);
5402*61046927SAndroid Build Coastguard Worker }
5403*61046927SAndroid Build Coastguard Worker
5404*61046927SAndroid Build Coastguard Worker cl_program prog = ::clLinkProgram(
5405*61046927SAndroid Build Coastguard Worker ctx(),
5406*61046927SAndroid Build Coastguard Worker 0,
5407*61046927SAndroid Build Coastguard Worker NULL,
5408*61046927SAndroid Build Coastguard Worker options,
5409*61046927SAndroid Build Coastguard Worker 2,
5410*61046927SAndroid Build Coastguard Worker programs,
5411*61046927SAndroid Build Coastguard Worker notifyFptr,
5412*61046927SAndroid Build Coastguard Worker data,
5413*61046927SAndroid Build Coastguard Worker &error_local);
5414*61046927SAndroid Build Coastguard Worker
5415*61046927SAndroid Build Coastguard Worker detail::errHandler(error_local,__COMPILE_PROGRAM_ERR);
5416*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5417*61046927SAndroid Build Coastguard Worker *err = error_local;
5418*61046927SAndroid Build Coastguard Worker }
5419*61046927SAndroid Build Coastguard Worker
5420*61046927SAndroid Build Coastguard Worker return Program(prog);
5421*61046927SAndroid Build Coastguard Worker }
5422*61046927SAndroid Build Coastguard Worker
linkProgram(VECTOR_CLASS<Program> inputPrograms,const char * options=NULL,void (CL_CALLBACK * notifyFptr)(cl_program,void *)=NULL,void * data=NULL,cl_int * err=NULL)5423*61046927SAndroid Build Coastguard Worker inline Program linkProgram(
5424*61046927SAndroid Build Coastguard Worker VECTOR_CLASS<Program> inputPrograms,
5425*61046927SAndroid Build Coastguard Worker const char* options = NULL,
5426*61046927SAndroid Build Coastguard Worker void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL,
5427*61046927SAndroid Build Coastguard Worker void* data = NULL,
5428*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
5429*61046927SAndroid Build Coastguard Worker {
5430*61046927SAndroid Build Coastguard Worker cl_int error_local = CL_SUCCESS;
5431*61046927SAndroid Build Coastguard Worker
5432*61046927SAndroid Build Coastguard Worker cl_program * programs = (cl_program*) alloca(inputPrograms.size() * sizeof(cl_program));
5433*61046927SAndroid Build Coastguard Worker
5434*61046927SAndroid Build Coastguard Worker if (programs != NULL) {
5435*61046927SAndroid Build Coastguard Worker for (unsigned int i = 0; i < inputPrograms.size(); i++) {
5436*61046927SAndroid Build Coastguard Worker programs[i] = inputPrograms[i]();
5437*61046927SAndroid Build Coastguard Worker }
5438*61046927SAndroid Build Coastguard Worker }
5439*61046927SAndroid Build Coastguard Worker
5440*61046927SAndroid Build Coastguard Worker Context ctx;
5441*61046927SAndroid Build Coastguard Worker if(inputPrograms.size() > 0) {
5442*61046927SAndroid Build Coastguard Worker ctx = inputPrograms[0].getInfo<CL_PROGRAM_CONTEXT>(&error_local);
5443*61046927SAndroid Build Coastguard Worker if(error_local!=CL_SUCCESS) {
5444*61046927SAndroid Build Coastguard Worker detail::errHandler(error_local, __LINK_PROGRAM_ERR);
5445*61046927SAndroid Build Coastguard Worker }
5446*61046927SAndroid Build Coastguard Worker }
5447*61046927SAndroid Build Coastguard Worker cl_program prog = ::clLinkProgram(
5448*61046927SAndroid Build Coastguard Worker ctx(),
5449*61046927SAndroid Build Coastguard Worker 0,
5450*61046927SAndroid Build Coastguard Worker NULL,
5451*61046927SAndroid Build Coastguard Worker options,
5452*61046927SAndroid Build Coastguard Worker (cl_uint)inputPrograms.size(),
5453*61046927SAndroid Build Coastguard Worker programs,
5454*61046927SAndroid Build Coastguard Worker notifyFptr,
5455*61046927SAndroid Build Coastguard Worker data,
5456*61046927SAndroid Build Coastguard Worker &error_local);
5457*61046927SAndroid Build Coastguard Worker
5458*61046927SAndroid Build Coastguard Worker detail::errHandler(error_local,__COMPILE_PROGRAM_ERR);
5459*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5460*61046927SAndroid Build Coastguard Worker *err = error_local;
5461*61046927SAndroid Build Coastguard Worker }
5462*61046927SAndroid Build Coastguard Worker
5463*61046927SAndroid Build Coastguard Worker return Program(prog);
5464*61046927SAndroid Build Coastguard Worker }
5465*61046927SAndroid Build Coastguard Worker #endif
5466*61046927SAndroid Build Coastguard Worker
5467*61046927SAndroid Build Coastguard Worker template<>
getInfo(cl_int * err) const5468*61046927SAndroid Build Coastguard Worker inline VECTOR_CLASS<char *> cl::Program::getInfo<CL_PROGRAM_BINARIES>(cl_int* err) const
5469*61046927SAndroid Build Coastguard Worker {
5470*61046927SAndroid Build Coastguard Worker VECTOR_CLASS< ::size_t> sizes = getInfo<CL_PROGRAM_BINARY_SIZES>();
5471*61046927SAndroid Build Coastguard Worker VECTOR_CLASS<char *> binaries;
5472*61046927SAndroid Build Coastguard Worker for (VECTOR_CLASS< ::size_t>::iterator s = sizes.begin(); s != sizes.end(); ++s)
5473*61046927SAndroid Build Coastguard Worker {
5474*61046927SAndroid Build Coastguard Worker char *ptr = NULL;
5475*61046927SAndroid Build Coastguard Worker if (*s != 0)
5476*61046927SAndroid Build Coastguard Worker ptr = new char[*s];
5477*61046927SAndroid Build Coastguard Worker binaries.push_back(ptr);
5478*61046927SAndroid Build Coastguard Worker }
5479*61046927SAndroid Build Coastguard Worker
5480*61046927SAndroid Build Coastguard Worker cl_int result = getInfo(CL_PROGRAM_BINARIES, &binaries);
5481*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5482*61046927SAndroid Build Coastguard Worker *err = result;
5483*61046927SAndroid Build Coastguard Worker }
5484*61046927SAndroid Build Coastguard Worker return binaries;
5485*61046927SAndroid Build Coastguard Worker }
5486*61046927SAndroid Build Coastguard Worker
Kernel(const Program & program,const char * name,cl_int * err)5487*61046927SAndroid Build Coastguard Worker inline Kernel::Kernel(const Program& program, const char* name, cl_int* err)
5488*61046927SAndroid Build Coastguard Worker {
5489*61046927SAndroid Build Coastguard Worker cl_int error;
5490*61046927SAndroid Build Coastguard Worker
5491*61046927SAndroid Build Coastguard Worker object_ = ::clCreateKernel(program(), name, &error);
5492*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_KERNEL_ERR);
5493*61046927SAndroid Build Coastguard Worker
5494*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5495*61046927SAndroid Build Coastguard Worker *err = error;
5496*61046927SAndroid Build Coastguard Worker }
5497*61046927SAndroid Build Coastguard Worker
5498*61046927SAndroid Build Coastguard Worker }
5499*61046927SAndroid Build Coastguard Worker
5500*61046927SAndroid Build Coastguard Worker /*! \class CommandQueue
5501*61046927SAndroid Build Coastguard Worker * \brief CommandQueue interface for cl_command_queue.
5502*61046927SAndroid Build Coastguard Worker */
5503*61046927SAndroid Build Coastguard Worker class CommandQueue : public detail::Wrapper<cl_command_queue>
5504*61046927SAndroid Build Coastguard Worker {
5505*61046927SAndroid Build Coastguard Worker private:
5506*61046927SAndroid Build Coastguard Worker #ifdef CL_HPP_CPP11_ATOMICS_SUPPORTED
5507*61046927SAndroid Build Coastguard Worker static std::atomic<int> default_initialized_;
5508*61046927SAndroid Build Coastguard Worker #else // !CL_HPP_CPP11_ATOMICS_SUPPORTED
5509*61046927SAndroid Build Coastguard Worker static volatile int default_initialized_;
5510*61046927SAndroid Build Coastguard Worker #endif // !CL_HPP_CPP11_ATOMICS_SUPPORTED
5511*61046927SAndroid Build Coastguard Worker static CommandQueue default_;
5512*61046927SAndroid Build Coastguard Worker static volatile cl_int default_error_;
5513*61046927SAndroid Build Coastguard Worker public:
CommandQueue(cl_command_queue_properties properties,cl_int * err=NULL)5514*61046927SAndroid Build Coastguard Worker CommandQueue(
5515*61046927SAndroid Build Coastguard Worker cl_command_queue_properties properties,
5516*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
5517*61046927SAndroid Build Coastguard Worker {
5518*61046927SAndroid Build Coastguard Worker cl_int error;
5519*61046927SAndroid Build Coastguard Worker
5520*61046927SAndroid Build Coastguard Worker Context context = Context::getDefault(&error);
5521*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_CONTEXT_ERR);
5522*61046927SAndroid Build Coastguard Worker
5523*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
5524*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5525*61046927SAndroid Build Coastguard Worker *err = error;
5526*61046927SAndroid Build Coastguard Worker }
5527*61046927SAndroid Build Coastguard Worker }
5528*61046927SAndroid Build Coastguard Worker else {
5529*61046927SAndroid Build Coastguard Worker Device device = context.getInfo<CL_CONTEXT_DEVICES>()[0];
5530*61046927SAndroid Build Coastguard Worker
5531*61046927SAndroid Build Coastguard Worker object_ = ::clCreateCommandQueue(
5532*61046927SAndroid Build Coastguard Worker context(), device(), properties, &error);
5533*61046927SAndroid Build Coastguard Worker
5534*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
5535*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5536*61046927SAndroid Build Coastguard Worker *err = error;
5537*61046927SAndroid Build Coastguard Worker }
5538*61046927SAndroid Build Coastguard Worker }
5539*61046927SAndroid Build Coastguard Worker }
5540*61046927SAndroid Build Coastguard Worker /*!
5541*61046927SAndroid Build Coastguard Worker * \brief Constructs a CommandQueue for an implementation defined device in the given context
5542*61046927SAndroid Build Coastguard Worker */
CommandQueue(const Context & context,cl_command_queue_properties properties=0,cl_int * err=NULL)5543*61046927SAndroid Build Coastguard Worker explicit CommandQueue(
5544*61046927SAndroid Build Coastguard Worker const Context& context,
5545*61046927SAndroid Build Coastguard Worker cl_command_queue_properties properties = 0,
5546*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
5547*61046927SAndroid Build Coastguard Worker {
5548*61046927SAndroid Build Coastguard Worker cl_int error;
5549*61046927SAndroid Build Coastguard Worker VECTOR_CLASS<cl::Device> devices;
5550*61046927SAndroid Build Coastguard Worker error = context.getInfo(CL_CONTEXT_DEVICES, &devices);
5551*61046927SAndroid Build Coastguard Worker
5552*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_CONTEXT_ERR);
5553*61046927SAndroid Build Coastguard Worker
5554*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS)
5555*61046927SAndroid Build Coastguard Worker {
5556*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5557*61046927SAndroid Build Coastguard Worker *err = error;
5558*61046927SAndroid Build Coastguard Worker }
5559*61046927SAndroid Build Coastguard Worker return;
5560*61046927SAndroid Build Coastguard Worker }
5561*61046927SAndroid Build Coastguard Worker
5562*61046927SAndroid Build Coastguard Worker object_ = ::clCreateCommandQueue(context(), devices[0](), properties, &error);
5563*61046927SAndroid Build Coastguard Worker
5564*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
5565*61046927SAndroid Build Coastguard Worker
5566*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5567*61046927SAndroid Build Coastguard Worker *err = error;
5568*61046927SAndroid Build Coastguard Worker }
5569*61046927SAndroid Build Coastguard Worker
5570*61046927SAndroid Build Coastguard Worker }
5571*61046927SAndroid Build Coastguard Worker
CommandQueue(const Context & context,const Device & device,cl_command_queue_properties properties=0,cl_int * err=NULL)5572*61046927SAndroid Build Coastguard Worker CommandQueue(
5573*61046927SAndroid Build Coastguard Worker const Context& context,
5574*61046927SAndroid Build Coastguard Worker const Device& device,
5575*61046927SAndroid Build Coastguard Worker cl_command_queue_properties properties = 0,
5576*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
5577*61046927SAndroid Build Coastguard Worker {
5578*61046927SAndroid Build Coastguard Worker cl_int error;
5579*61046927SAndroid Build Coastguard Worker object_ = ::clCreateCommandQueue(
5580*61046927SAndroid Build Coastguard Worker context(), device(), properties, &error);
5581*61046927SAndroid Build Coastguard Worker
5582*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
5583*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5584*61046927SAndroid Build Coastguard Worker *err = error;
5585*61046927SAndroid Build Coastguard Worker }
5586*61046927SAndroid Build Coastguard Worker }
5587*61046927SAndroid Build Coastguard Worker
5588*61046927SAndroid Build Coastguard Worker /*! \brief Copy constructor to forward copy to the superclass correctly.
5589*61046927SAndroid Build Coastguard Worker * Required for MSVC.
5590*61046927SAndroid Build Coastguard Worker */
CommandQueue(const CommandQueue & queue)5591*61046927SAndroid Build Coastguard Worker CommandQueue(const CommandQueue& queue) : detail::Wrapper<cl_type>(queue) {}
5592*61046927SAndroid Build Coastguard Worker
5593*61046927SAndroid Build Coastguard Worker /*! \brief Copy assignment to forward copy to the superclass correctly.
5594*61046927SAndroid Build Coastguard Worker * Required for MSVC.
5595*61046927SAndroid Build Coastguard Worker */
operator =(const CommandQueue & queue)5596*61046927SAndroid Build Coastguard Worker CommandQueue& operator = (const CommandQueue &queue)
5597*61046927SAndroid Build Coastguard Worker {
5598*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(queue);
5599*61046927SAndroid Build Coastguard Worker return *this;
5600*61046927SAndroid Build Coastguard Worker }
5601*61046927SAndroid Build Coastguard Worker
5602*61046927SAndroid Build Coastguard Worker #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
5603*61046927SAndroid Build Coastguard Worker /*! \brief Move constructor to forward move to the superclass correctly.
5604*61046927SAndroid Build Coastguard Worker * Required for MSVC.
5605*61046927SAndroid Build Coastguard Worker */
CommandQueue(CommandQueue && queue)5606*61046927SAndroid Build Coastguard Worker CommandQueue(CommandQueue&& queue) CL_HPP_NOEXCEPT : detail::Wrapper<cl_type>(std::move(queue)) {}
5607*61046927SAndroid Build Coastguard Worker
5608*61046927SAndroid Build Coastguard Worker /*! \brief Move assignment to forward move to the superclass correctly.
5609*61046927SAndroid Build Coastguard Worker * Required for MSVC.
5610*61046927SAndroid Build Coastguard Worker */
operator =(CommandQueue && queue)5611*61046927SAndroid Build Coastguard Worker CommandQueue& operator = (CommandQueue &&queue)
5612*61046927SAndroid Build Coastguard Worker {
5613*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(std::move(queue));
5614*61046927SAndroid Build Coastguard Worker return *this;
5615*61046927SAndroid Build Coastguard Worker }
5616*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_HPP_RVALUE_REFERENCES_SUPPORTED)
5617*61046927SAndroid Build Coastguard Worker
getDefault(cl_int * err=NULL)5618*61046927SAndroid Build Coastguard Worker static CommandQueue getDefault(cl_int * err = NULL)
5619*61046927SAndroid Build Coastguard Worker {
5620*61046927SAndroid Build Coastguard Worker int state = detail::compare_exchange(
5621*61046927SAndroid Build Coastguard Worker &default_initialized_,
5622*61046927SAndroid Build Coastguard Worker __DEFAULT_BEING_INITIALIZED, __DEFAULT_NOT_INITIALIZED);
5623*61046927SAndroid Build Coastguard Worker
5624*61046927SAndroid Build Coastguard Worker if (state & __DEFAULT_INITIALIZED) {
5625*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5626*61046927SAndroid Build Coastguard Worker *err = default_error_;
5627*61046927SAndroid Build Coastguard Worker }
5628*61046927SAndroid Build Coastguard Worker return default_;
5629*61046927SAndroid Build Coastguard Worker }
5630*61046927SAndroid Build Coastguard Worker
5631*61046927SAndroid Build Coastguard Worker if (state & __DEFAULT_BEING_INITIALIZED) {
5632*61046927SAndroid Build Coastguard Worker // Assume writes will propagate eventually...
5633*61046927SAndroid Build Coastguard Worker while(default_initialized_ != __DEFAULT_INITIALIZED) {
5634*61046927SAndroid Build Coastguard Worker detail::fence();
5635*61046927SAndroid Build Coastguard Worker }
5636*61046927SAndroid Build Coastguard Worker
5637*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5638*61046927SAndroid Build Coastguard Worker *err = default_error_;
5639*61046927SAndroid Build Coastguard Worker }
5640*61046927SAndroid Build Coastguard Worker return default_;
5641*61046927SAndroid Build Coastguard Worker }
5642*61046927SAndroid Build Coastguard Worker
5643*61046927SAndroid Build Coastguard Worker cl_int error;
5644*61046927SAndroid Build Coastguard Worker
5645*61046927SAndroid Build Coastguard Worker Context context = Context::getDefault(&error);
5646*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
5647*61046927SAndroid Build Coastguard Worker
5648*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
5649*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5650*61046927SAndroid Build Coastguard Worker *err = error;
5651*61046927SAndroid Build Coastguard Worker }
5652*61046927SAndroid Build Coastguard Worker }
5653*61046927SAndroid Build Coastguard Worker else {
5654*61046927SAndroid Build Coastguard Worker Device device = context.getInfo<CL_CONTEXT_DEVICES>()[0];
5655*61046927SAndroid Build Coastguard Worker
5656*61046927SAndroid Build Coastguard Worker default_ = CommandQueue(context, device, 0, &error);
5657*61046927SAndroid Build Coastguard Worker
5658*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
5659*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5660*61046927SAndroid Build Coastguard Worker *err = error;
5661*61046927SAndroid Build Coastguard Worker }
5662*61046927SAndroid Build Coastguard Worker }
5663*61046927SAndroid Build Coastguard Worker
5664*61046927SAndroid Build Coastguard Worker detail::fence();
5665*61046927SAndroid Build Coastguard Worker
5666*61046927SAndroid Build Coastguard Worker default_error_ = error;
5667*61046927SAndroid Build Coastguard Worker // Assume writes will propagate eventually...
5668*61046927SAndroid Build Coastguard Worker default_initialized_ = __DEFAULT_INITIALIZED;
5669*61046927SAndroid Build Coastguard Worker
5670*61046927SAndroid Build Coastguard Worker detail::fence();
5671*61046927SAndroid Build Coastguard Worker
5672*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5673*61046927SAndroid Build Coastguard Worker *err = default_error_;
5674*61046927SAndroid Build Coastguard Worker }
5675*61046927SAndroid Build Coastguard Worker return default_;
5676*61046927SAndroid Build Coastguard Worker
5677*61046927SAndroid Build Coastguard Worker }
5678*61046927SAndroid Build Coastguard Worker
CommandQueue()5679*61046927SAndroid Build Coastguard Worker CommandQueue() { }
5680*61046927SAndroid Build Coastguard Worker
CommandQueue(const cl_command_queue & commandQueue)5681*61046927SAndroid Build Coastguard Worker __CL_EXPLICIT_CONSTRUCTORS CommandQueue(const cl_command_queue& commandQueue) : detail::Wrapper<cl_type>(commandQueue) { }
5682*61046927SAndroid Build Coastguard Worker
operator =(const cl_command_queue & rhs)5683*61046927SAndroid Build Coastguard Worker CommandQueue& operator = (const cl_command_queue& rhs)
5684*61046927SAndroid Build Coastguard Worker {
5685*61046927SAndroid Build Coastguard Worker detail::Wrapper<cl_type>::operator=(rhs);
5686*61046927SAndroid Build Coastguard Worker return *this;
5687*61046927SAndroid Build Coastguard Worker }
5688*61046927SAndroid Build Coastguard Worker
5689*61046927SAndroid Build Coastguard Worker template <typename T>
getInfo(cl_command_queue_info name,T * param) const5690*61046927SAndroid Build Coastguard Worker cl_int getInfo(cl_command_queue_info name, T* param) const
5691*61046927SAndroid Build Coastguard Worker {
5692*61046927SAndroid Build Coastguard Worker return detail::errHandler(
5693*61046927SAndroid Build Coastguard Worker detail::getInfo(
5694*61046927SAndroid Build Coastguard Worker &::clGetCommandQueueInfo, object_, name, param),
5695*61046927SAndroid Build Coastguard Worker __GET_COMMAND_QUEUE_INFO_ERR);
5696*61046927SAndroid Build Coastguard Worker }
5697*61046927SAndroid Build Coastguard Worker
5698*61046927SAndroid Build Coastguard Worker template <cl_command_queue_info name> typename
5699*61046927SAndroid Build Coastguard Worker detail::param_traits<detail::cl_command_queue_info, name>::param_type
getInfo(cl_int * err=NULL) const5700*61046927SAndroid Build Coastguard Worker getInfo(cl_int* err = NULL) const
5701*61046927SAndroid Build Coastguard Worker {
5702*61046927SAndroid Build Coastguard Worker typename detail::param_traits<
5703*61046927SAndroid Build Coastguard Worker detail::cl_command_queue_info, name>::param_type param;
5704*61046927SAndroid Build Coastguard Worker cl_int result = getInfo(name, ¶m);
5705*61046927SAndroid Build Coastguard Worker if (err != NULL) {
5706*61046927SAndroid Build Coastguard Worker *err = result;
5707*61046927SAndroid Build Coastguard Worker }
5708*61046927SAndroid Build Coastguard Worker return param;
5709*61046927SAndroid Build Coastguard Worker }
5710*61046927SAndroid Build Coastguard Worker
enqueueReadBuffer(const Buffer & buffer,cl_bool blocking,::size_t offset,::size_t size,void * ptr,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const5711*61046927SAndroid Build Coastguard Worker cl_int enqueueReadBuffer(
5712*61046927SAndroid Build Coastguard Worker const Buffer& buffer,
5713*61046927SAndroid Build Coastguard Worker cl_bool blocking,
5714*61046927SAndroid Build Coastguard Worker ::size_t offset,
5715*61046927SAndroid Build Coastguard Worker ::size_t size,
5716*61046927SAndroid Build Coastguard Worker void* ptr,
5717*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
5718*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
5719*61046927SAndroid Build Coastguard Worker {
5720*61046927SAndroid Build Coastguard Worker cl_event tmp;
5721*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
5722*61046927SAndroid Build Coastguard Worker ::clEnqueueReadBuffer(
5723*61046927SAndroid Build Coastguard Worker object_, buffer(), blocking, offset, size,
5724*61046927SAndroid Build Coastguard Worker ptr,
5725*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
5726*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
5727*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
5728*61046927SAndroid Build Coastguard Worker __ENQUEUE_READ_BUFFER_ERR);
5729*61046927SAndroid Build Coastguard Worker
5730*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
5731*61046927SAndroid Build Coastguard Worker *event = tmp;
5732*61046927SAndroid Build Coastguard Worker
5733*61046927SAndroid Build Coastguard Worker return err;
5734*61046927SAndroid Build Coastguard Worker }
5735*61046927SAndroid Build Coastguard Worker
enqueueWriteBuffer(const Buffer & buffer,cl_bool blocking,::size_t offset,::size_t size,const void * ptr,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const5736*61046927SAndroid Build Coastguard Worker cl_int enqueueWriteBuffer(
5737*61046927SAndroid Build Coastguard Worker const Buffer& buffer,
5738*61046927SAndroid Build Coastguard Worker cl_bool blocking,
5739*61046927SAndroid Build Coastguard Worker ::size_t offset,
5740*61046927SAndroid Build Coastguard Worker ::size_t size,
5741*61046927SAndroid Build Coastguard Worker const void* ptr,
5742*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
5743*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
5744*61046927SAndroid Build Coastguard Worker {
5745*61046927SAndroid Build Coastguard Worker cl_event tmp;
5746*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
5747*61046927SAndroid Build Coastguard Worker ::clEnqueueWriteBuffer(
5748*61046927SAndroid Build Coastguard Worker object_, buffer(), blocking, offset, size,
5749*61046927SAndroid Build Coastguard Worker ptr,
5750*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
5751*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
5752*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
5753*61046927SAndroid Build Coastguard Worker __ENQUEUE_WRITE_BUFFER_ERR);
5754*61046927SAndroid Build Coastguard Worker
5755*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
5756*61046927SAndroid Build Coastguard Worker *event = tmp;
5757*61046927SAndroid Build Coastguard Worker
5758*61046927SAndroid Build Coastguard Worker return err;
5759*61046927SAndroid Build Coastguard Worker }
5760*61046927SAndroid Build Coastguard Worker
enqueueCopyBuffer(const Buffer & src,const Buffer & dst,::size_t src_offset,::size_t dst_offset,::size_t size,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const5761*61046927SAndroid Build Coastguard Worker cl_int enqueueCopyBuffer(
5762*61046927SAndroid Build Coastguard Worker const Buffer& src,
5763*61046927SAndroid Build Coastguard Worker const Buffer& dst,
5764*61046927SAndroid Build Coastguard Worker ::size_t src_offset,
5765*61046927SAndroid Build Coastguard Worker ::size_t dst_offset,
5766*61046927SAndroid Build Coastguard Worker ::size_t size,
5767*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
5768*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
5769*61046927SAndroid Build Coastguard Worker {
5770*61046927SAndroid Build Coastguard Worker cl_event tmp;
5771*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
5772*61046927SAndroid Build Coastguard Worker ::clEnqueueCopyBuffer(
5773*61046927SAndroid Build Coastguard Worker object_, src(), dst(), src_offset, dst_offset, size,
5774*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
5775*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
5776*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
5777*61046927SAndroid Build Coastguard Worker __ENQEUE_COPY_BUFFER_ERR);
5778*61046927SAndroid Build Coastguard Worker
5779*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
5780*61046927SAndroid Build Coastguard Worker *event = tmp;
5781*61046927SAndroid Build Coastguard Worker
5782*61046927SAndroid Build Coastguard Worker return err;
5783*61046927SAndroid Build Coastguard Worker }
5784*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_1)
5785*61046927SAndroid Build Coastguard Worker
enqueueReadBufferRect(const Buffer & buffer,cl_bool blocking,const size_t<3> & buffer_offset,const size_t<3> & host_offset,const size_t<3> & region,::size_t buffer_row_pitch,::size_t buffer_slice_pitch,::size_t host_row_pitch,::size_t host_slice_pitch,void * ptr,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const5786*61046927SAndroid Build Coastguard Worker cl_int enqueueReadBufferRect(
5787*61046927SAndroid Build Coastguard Worker const Buffer& buffer,
5788*61046927SAndroid Build Coastguard Worker cl_bool blocking,
5789*61046927SAndroid Build Coastguard Worker const size_t<3>& buffer_offset,
5790*61046927SAndroid Build Coastguard Worker const size_t<3>& host_offset,
5791*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
5792*61046927SAndroid Build Coastguard Worker ::size_t buffer_row_pitch,
5793*61046927SAndroid Build Coastguard Worker ::size_t buffer_slice_pitch,
5794*61046927SAndroid Build Coastguard Worker ::size_t host_row_pitch,
5795*61046927SAndroid Build Coastguard Worker ::size_t host_slice_pitch,
5796*61046927SAndroid Build Coastguard Worker void *ptr,
5797*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
5798*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
5799*61046927SAndroid Build Coastguard Worker {
5800*61046927SAndroid Build Coastguard Worker cl_event tmp;
5801*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
5802*61046927SAndroid Build Coastguard Worker ::clEnqueueReadBufferRect(
5803*61046927SAndroid Build Coastguard Worker object_,
5804*61046927SAndroid Build Coastguard Worker buffer(),
5805*61046927SAndroid Build Coastguard Worker blocking,
5806*61046927SAndroid Build Coastguard Worker (const ::size_t *)buffer_offset,
5807*61046927SAndroid Build Coastguard Worker (const ::size_t *)host_offset,
5808*61046927SAndroid Build Coastguard Worker (const ::size_t *)region,
5809*61046927SAndroid Build Coastguard Worker buffer_row_pitch,
5810*61046927SAndroid Build Coastguard Worker buffer_slice_pitch,
5811*61046927SAndroid Build Coastguard Worker host_row_pitch,
5812*61046927SAndroid Build Coastguard Worker host_slice_pitch,
5813*61046927SAndroid Build Coastguard Worker ptr,
5814*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
5815*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
5816*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
5817*61046927SAndroid Build Coastguard Worker __ENQUEUE_READ_BUFFER_RECT_ERR);
5818*61046927SAndroid Build Coastguard Worker
5819*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
5820*61046927SAndroid Build Coastguard Worker *event = tmp;
5821*61046927SAndroid Build Coastguard Worker
5822*61046927SAndroid Build Coastguard Worker return err;
5823*61046927SAndroid Build Coastguard Worker }
5824*61046927SAndroid Build Coastguard Worker
enqueueWriteBufferRect(const Buffer & buffer,cl_bool blocking,const size_t<3> & buffer_offset,const size_t<3> & host_offset,const size_t<3> & region,::size_t buffer_row_pitch,::size_t buffer_slice_pitch,::size_t host_row_pitch,::size_t host_slice_pitch,const void * ptr,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const5825*61046927SAndroid Build Coastguard Worker cl_int enqueueWriteBufferRect(
5826*61046927SAndroid Build Coastguard Worker const Buffer& buffer,
5827*61046927SAndroid Build Coastguard Worker cl_bool blocking,
5828*61046927SAndroid Build Coastguard Worker const size_t<3>& buffer_offset,
5829*61046927SAndroid Build Coastguard Worker const size_t<3>& host_offset,
5830*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
5831*61046927SAndroid Build Coastguard Worker ::size_t buffer_row_pitch,
5832*61046927SAndroid Build Coastguard Worker ::size_t buffer_slice_pitch,
5833*61046927SAndroid Build Coastguard Worker ::size_t host_row_pitch,
5834*61046927SAndroid Build Coastguard Worker ::size_t host_slice_pitch,
5835*61046927SAndroid Build Coastguard Worker const void *ptr,
5836*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
5837*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
5838*61046927SAndroid Build Coastguard Worker {
5839*61046927SAndroid Build Coastguard Worker cl_event tmp;
5840*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
5841*61046927SAndroid Build Coastguard Worker ::clEnqueueWriteBufferRect(
5842*61046927SAndroid Build Coastguard Worker object_,
5843*61046927SAndroid Build Coastguard Worker buffer(),
5844*61046927SAndroid Build Coastguard Worker blocking,
5845*61046927SAndroid Build Coastguard Worker (const ::size_t *)buffer_offset,
5846*61046927SAndroid Build Coastguard Worker (const ::size_t *)host_offset,
5847*61046927SAndroid Build Coastguard Worker (const ::size_t *)region,
5848*61046927SAndroid Build Coastguard Worker buffer_row_pitch,
5849*61046927SAndroid Build Coastguard Worker buffer_slice_pitch,
5850*61046927SAndroid Build Coastguard Worker host_row_pitch,
5851*61046927SAndroid Build Coastguard Worker host_slice_pitch,
5852*61046927SAndroid Build Coastguard Worker ptr,
5853*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
5854*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
5855*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
5856*61046927SAndroid Build Coastguard Worker __ENQUEUE_WRITE_BUFFER_RECT_ERR);
5857*61046927SAndroid Build Coastguard Worker
5858*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
5859*61046927SAndroid Build Coastguard Worker *event = tmp;
5860*61046927SAndroid Build Coastguard Worker
5861*61046927SAndroid Build Coastguard Worker return err;
5862*61046927SAndroid Build Coastguard Worker }
5863*61046927SAndroid Build Coastguard Worker
enqueueCopyBufferRect(const Buffer & src,const Buffer & dst,const size_t<3> & src_origin,const size_t<3> & dst_origin,const size_t<3> & region,::size_t src_row_pitch,::size_t src_slice_pitch,::size_t dst_row_pitch,::size_t dst_slice_pitch,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const5864*61046927SAndroid Build Coastguard Worker cl_int enqueueCopyBufferRect(
5865*61046927SAndroid Build Coastguard Worker const Buffer& src,
5866*61046927SAndroid Build Coastguard Worker const Buffer& dst,
5867*61046927SAndroid Build Coastguard Worker const size_t<3>& src_origin,
5868*61046927SAndroid Build Coastguard Worker const size_t<3>& dst_origin,
5869*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
5870*61046927SAndroid Build Coastguard Worker ::size_t src_row_pitch,
5871*61046927SAndroid Build Coastguard Worker ::size_t src_slice_pitch,
5872*61046927SAndroid Build Coastguard Worker ::size_t dst_row_pitch,
5873*61046927SAndroid Build Coastguard Worker ::size_t dst_slice_pitch,
5874*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
5875*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
5876*61046927SAndroid Build Coastguard Worker {
5877*61046927SAndroid Build Coastguard Worker cl_event tmp;
5878*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
5879*61046927SAndroid Build Coastguard Worker ::clEnqueueCopyBufferRect(
5880*61046927SAndroid Build Coastguard Worker object_,
5881*61046927SAndroid Build Coastguard Worker src(),
5882*61046927SAndroid Build Coastguard Worker dst(),
5883*61046927SAndroid Build Coastguard Worker (const ::size_t *)src_origin,
5884*61046927SAndroid Build Coastguard Worker (const ::size_t *)dst_origin,
5885*61046927SAndroid Build Coastguard Worker (const ::size_t *)region,
5886*61046927SAndroid Build Coastguard Worker src_row_pitch,
5887*61046927SAndroid Build Coastguard Worker src_slice_pitch,
5888*61046927SAndroid Build Coastguard Worker dst_row_pitch,
5889*61046927SAndroid Build Coastguard Worker dst_slice_pitch,
5890*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
5891*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
5892*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
5893*61046927SAndroid Build Coastguard Worker __ENQEUE_COPY_BUFFER_RECT_ERR);
5894*61046927SAndroid Build Coastguard Worker
5895*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
5896*61046927SAndroid Build Coastguard Worker *event = tmp;
5897*61046927SAndroid Build Coastguard Worker
5898*61046927SAndroid Build Coastguard Worker return err;
5899*61046927SAndroid Build Coastguard Worker }
5900*61046927SAndroid Build Coastguard Worker #endif //if defined(CL_VERSION_1_1)
5901*61046927SAndroid Build Coastguard Worker
5902*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
5903*61046927SAndroid Build Coastguard Worker /**
5904*61046927SAndroid Build Coastguard Worker * Enqueue a command to fill a buffer object with a pattern
5905*61046927SAndroid Build Coastguard Worker * of a given size. The pattern is specified a as vector.
5906*61046927SAndroid Build Coastguard Worker * \tparam PatternType The datatype of the pattern field.
5907*61046927SAndroid Build Coastguard Worker * The pattern type must be an accepted OpenCL data type.
5908*61046927SAndroid Build Coastguard Worker */
5909*61046927SAndroid Build Coastguard Worker template<typename PatternType>
enqueueFillBuffer(const Buffer & buffer,PatternType pattern,::size_t offset,::size_t size,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const5910*61046927SAndroid Build Coastguard Worker cl_int enqueueFillBuffer(
5911*61046927SAndroid Build Coastguard Worker const Buffer& buffer,
5912*61046927SAndroid Build Coastguard Worker PatternType pattern,
5913*61046927SAndroid Build Coastguard Worker ::size_t offset,
5914*61046927SAndroid Build Coastguard Worker ::size_t size,
5915*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
5916*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
5917*61046927SAndroid Build Coastguard Worker {
5918*61046927SAndroid Build Coastguard Worker cl_event tmp;
5919*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
5920*61046927SAndroid Build Coastguard Worker ::clEnqueueFillBuffer(
5921*61046927SAndroid Build Coastguard Worker object_,
5922*61046927SAndroid Build Coastguard Worker buffer(),
5923*61046927SAndroid Build Coastguard Worker static_cast<void*>(&pattern),
5924*61046927SAndroid Build Coastguard Worker sizeof(PatternType),
5925*61046927SAndroid Build Coastguard Worker offset,
5926*61046927SAndroid Build Coastguard Worker size,
5927*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
5928*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
5929*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
5930*61046927SAndroid Build Coastguard Worker __ENQUEUE_FILL_BUFFER_ERR);
5931*61046927SAndroid Build Coastguard Worker
5932*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
5933*61046927SAndroid Build Coastguard Worker *event = tmp;
5934*61046927SAndroid Build Coastguard Worker
5935*61046927SAndroid Build Coastguard Worker return err;
5936*61046927SAndroid Build Coastguard Worker }
5937*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
5938*61046927SAndroid Build Coastguard Worker
enqueueReadImage(const Image & image,cl_bool blocking,const size_t<3> & origin,const size_t<3> & region,::size_t row_pitch,::size_t slice_pitch,void * ptr,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const5939*61046927SAndroid Build Coastguard Worker cl_int enqueueReadImage(
5940*61046927SAndroid Build Coastguard Worker const Image& image,
5941*61046927SAndroid Build Coastguard Worker cl_bool blocking,
5942*61046927SAndroid Build Coastguard Worker const size_t<3>& origin,
5943*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
5944*61046927SAndroid Build Coastguard Worker ::size_t row_pitch,
5945*61046927SAndroid Build Coastguard Worker ::size_t slice_pitch,
5946*61046927SAndroid Build Coastguard Worker void* ptr,
5947*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
5948*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
5949*61046927SAndroid Build Coastguard Worker {
5950*61046927SAndroid Build Coastguard Worker cl_event tmp;
5951*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
5952*61046927SAndroid Build Coastguard Worker ::clEnqueueReadImage(
5953*61046927SAndroid Build Coastguard Worker object_, image(), blocking, (const ::size_t *) origin,
5954*61046927SAndroid Build Coastguard Worker (const ::size_t *) region, row_pitch, slice_pitch, ptr,
5955*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
5956*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
5957*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
5958*61046927SAndroid Build Coastguard Worker __ENQUEUE_READ_IMAGE_ERR);
5959*61046927SAndroid Build Coastguard Worker
5960*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
5961*61046927SAndroid Build Coastguard Worker *event = tmp;
5962*61046927SAndroid Build Coastguard Worker
5963*61046927SAndroid Build Coastguard Worker return err;
5964*61046927SAndroid Build Coastguard Worker }
5965*61046927SAndroid Build Coastguard Worker
enqueueWriteImage(const Image & image,cl_bool blocking,const size_t<3> & origin,const size_t<3> & region,::size_t row_pitch,::size_t slice_pitch,const void * ptr,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const5966*61046927SAndroid Build Coastguard Worker cl_int enqueueWriteImage(
5967*61046927SAndroid Build Coastguard Worker const Image& image,
5968*61046927SAndroid Build Coastguard Worker cl_bool blocking,
5969*61046927SAndroid Build Coastguard Worker const size_t<3>& origin,
5970*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
5971*61046927SAndroid Build Coastguard Worker ::size_t row_pitch,
5972*61046927SAndroid Build Coastguard Worker ::size_t slice_pitch,
5973*61046927SAndroid Build Coastguard Worker const void* ptr,
5974*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
5975*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
5976*61046927SAndroid Build Coastguard Worker {
5977*61046927SAndroid Build Coastguard Worker cl_event tmp;
5978*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
5979*61046927SAndroid Build Coastguard Worker ::clEnqueueWriteImage(
5980*61046927SAndroid Build Coastguard Worker object_, image(), blocking, (const ::size_t *) origin,
5981*61046927SAndroid Build Coastguard Worker (const ::size_t *) region, row_pitch, slice_pitch, ptr,
5982*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
5983*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
5984*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
5985*61046927SAndroid Build Coastguard Worker __ENQUEUE_WRITE_IMAGE_ERR);
5986*61046927SAndroid Build Coastguard Worker
5987*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
5988*61046927SAndroid Build Coastguard Worker *event = tmp;
5989*61046927SAndroid Build Coastguard Worker
5990*61046927SAndroid Build Coastguard Worker return err;
5991*61046927SAndroid Build Coastguard Worker }
5992*61046927SAndroid Build Coastguard Worker
enqueueCopyImage(const Image & src,const Image & dst,const size_t<3> & src_origin,const size_t<3> & dst_origin,const size_t<3> & region,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const5993*61046927SAndroid Build Coastguard Worker cl_int enqueueCopyImage(
5994*61046927SAndroid Build Coastguard Worker const Image& src,
5995*61046927SAndroid Build Coastguard Worker const Image& dst,
5996*61046927SAndroid Build Coastguard Worker const size_t<3>& src_origin,
5997*61046927SAndroid Build Coastguard Worker const size_t<3>& dst_origin,
5998*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
5999*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6000*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
6001*61046927SAndroid Build Coastguard Worker {
6002*61046927SAndroid Build Coastguard Worker cl_event tmp;
6003*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6004*61046927SAndroid Build Coastguard Worker ::clEnqueueCopyImage(
6005*61046927SAndroid Build Coastguard Worker object_, src(), dst(), (const ::size_t *) src_origin,
6006*61046927SAndroid Build Coastguard Worker (const ::size_t *)dst_origin, (const ::size_t *) region,
6007*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6008*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6009*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6010*61046927SAndroid Build Coastguard Worker __ENQUEUE_COPY_IMAGE_ERR);
6011*61046927SAndroid Build Coastguard Worker
6012*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6013*61046927SAndroid Build Coastguard Worker *event = tmp;
6014*61046927SAndroid Build Coastguard Worker
6015*61046927SAndroid Build Coastguard Worker return err;
6016*61046927SAndroid Build Coastguard Worker }
6017*61046927SAndroid Build Coastguard Worker
6018*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
6019*61046927SAndroid Build Coastguard Worker /**
6020*61046927SAndroid Build Coastguard Worker * Enqueue a command to fill an image object with a specified color.
6021*61046927SAndroid Build Coastguard Worker * \param fillColor is the color to use to fill the image.
6022*61046927SAndroid Build Coastguard Worker * This is a four component RGBA floating-point color value if
6023*61046927SAndroid Build Coastguard Worker * the image channel data type is not an unnormalized signed or
6024*61046927SAndroid Build Coastguard Worker * unsigned data type.
6025*61046927SAndroid Build Coastguard Worker */
enqueueFillImage(const Image & image,cl_float4 fillColor,const size_t<3> & origin,const size_t<3> & region,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const6026*61046927SAndroid Build Coastguard Worker cl_int enqueueFillImage(
6027*61046927SAndroid Build Coastguard Worker const Image& image,
6028*61046927SAndroid Build Coastguard Worker cl_float4 fillColor,
6029*61046927SAndroid Build Coastguard Worker const size_t<3>& origin,
6030*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
6031*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6032*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
6033*61046927SAndroid Build Coastguard Worker {
6034*61046927SAndroid Build Coastguard Worker cl_event tmp;
6035*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6036*61046927SAndroid Build Coastguard Worker ::clEnqueueFillImage(
6037*61046927SAndroid Build Coastguard Worker object_,
6038*61046927SAndroid Build Coastguard Worker image(),
6039*61046927SAndroid Build Coastguard Worker static_cast<void*>(&fillColor),
6040*61046927SAndroid Build Coastguard Worker (const ::size_t *) origin,
6041*61046927SAndroid Build Coastguard Worker (const ::size_t *) region,
6042*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6043*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6044*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6045*61046927SAndroid Build Coastguard Worker __ENQUEUE_FILL_IMAGE_ERR);
6046*61046927SAndroid Build Coastguard Worker
6047*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6048*61046927SAndroid Build Coastguard Worker *event = tmp;
6049*61046927SAndroid Build Coastguard Worker
6050*61046927SAndroid Build Coastguard Worker return err;
6051*61046927SAndroid Build Coastguard Worker }
6052*61046927SAndroid Build Coastguard Worker
6053*61046927SAndroid Build Coastguard Worker /**
6054*61046927SAndroid Build Coastguard Worker * Enqueue a command to fill an image object with a specified color.
6055*61046927SAndroid Build Coastguard Worker * \param fillColor is the color to use to fill the image.
6056*61046927SAndroid Build Coastguard Worker * This is a four component RGBA signed integer color value if
6057*61046927SAndroid Build Coastguard Worker * the image channel data type is an unnormalized signed integer
6058*61046927SAndroid Build Coastguard Worker * type.
6059*61046927SAndroid Build Coastguard Worker */
enqueueFillImage(const Image & image,cl_int4 fillColor,const size_t<3> & origin,const size_t<3> & region,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const6060*61046927SAndroid Build Coastguard Worker cl_int enqueueFillImage(
6061*61046927SAndroid Build Coastguard Worker const Image& image,
6062*61046927SAndroid Build Coastguard Worker cl_int4 fillColor,
6063*61046927SAndroid Build Coastguard Worker const size_t<3>& origin,
6064*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
6065*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6066*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
6067*61046927SAndroid Build Coastguard Worker {
6068*61046927SAndroid Build Coastguard Worker cl_event tmp;
6069*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6070*61046927SAndroid Build Coastguard Worker ::clEnqueueFillImage(
6071*61046927SAndroid Build Coastguard Worker object_,
6072*61046927SAndroid Build Coastguard Worker image(),
6073*61046927SAndroid Build Coastguard Worker static_cast<void*>(&fillColor),
6074*61046927SAndroid Build Coastguard Worker (const ::size_t *) origin,
6075*61046927SAndroid Build Coastguard Worker (const ::size_t *) region,
6076*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6077*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6078*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6079*61046927SAndroid Build Coastguard Worker __ENQUEUE_FILL_IMAGE_ERR);
6080*61046927SAndroid Build Coastguard Worker
6081*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6082*61046927SAndroid Build Coastguard Worker *event = tmp;
6083*61046927SAndroid Build Coastguard Worker
6084*61046927SAndroid Build Coastguard Worker return err;
6085*61046927SAndroid Build Coastguard Worker }
6086*61046927SAndroid Build Coastguard Worker
6087*61046927SAndroid Build Coastguard Worker /**
6088*61046927SAndroid Build Coastguard Worker * Enqueue a command to fill an image object with a specified color.
6089*61046927SAndroid Build Coastguard Worker * \param fillColor is the color to use to fill the image.
6090*61046927SAndroid Build Coastguard Worker * This is a four component RGBA unsigned integer color value if
6091*61046927SAndroid Build Coastguard Worker * the image channel data type is an unnormalized unsigned integer
6092*61046927SAndroid Build Coastguard Worker * type.
6093*61046927SAndroid Build Coastguard Worker */
enqueueFillImage(const Image & image,cl_uint4 fillColor,const size_t<3> & origin,const size_t<3> & region,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const6094*61046927SAndroid Build Coastguard Worker cl_int enqueueFillImage(
6095*61046927SAndroid Build Coastguard Worker const Image& image,
6096*61046927SAndroid Build Coastguard Worker cl_uint4 fillColor,
6097*61046927SAndroid Build Coastguard Worker const size_t<3>& origin,
6098*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
6099*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6100*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
6101*61046927SAndroid Build Coastguard Worker {
6102*61046927SAndroid Build Coastguard Worker cl_event tmp;
6103*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6104*61046927SAndroid Build Coastguard Worker ::clEnqueueFillImage(
6105*61046927SAndroid Build Coastguard Worker object_,
6106*61046927SAndroid Build Coastguard Worker image(),
6107*61046927SAndroid Build Coastguard Worker static_cast<void*>(&fillColor),
6108*61046927SAndroid Build Coastguard Worker (const ::size_t *) origin,
6109*61046927SAndroid Build Coastguard Worker (const ::size_t *) region,
6110*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6111*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6112*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6113*61046927SAndroid Build Coastguard Worker __ENQUEUE_FILL_IMAGE_ERR);
6114*61046927SAndroid Build Coastguard Worker
6115*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6116*61046927SAndroid Build Coastguard Worker *event = tmp;
6117*61046927SAndroid Build Coastguard Worker
6118*61046927SAndroid Build Coastguard Worker return err;
6119*61046927SAndroid Build Coastguard Worker }
6120*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
6121*61046927SAndroid Build Coastguard Worker
enqueueCopyImageToBuffer(const Image & src,const Buffer & dst,const size_t<3> & src_origin,const size_t<3> & region,::size_t dst_offset,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const6122*61046927SAndroid Build Coastguard Worker cl_int enqueueCopyImageToBuffer(
6123*61046927SAndroid Build Coastguard Worker const Image& src,
6124*61046927SAndroid Build Coastguard Worker const Buffer& dst,
6125*61046927SAndroid Build Coastguard Worker const size_t<3>& src_origin,
6126*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
6127*61046927SAndroid Build Coastguard Worker ::size_t dst_offset,
6128*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6129*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
6130*61046927SAndroid Build Coastguard Worker {
6131*61046927SAndroid Build Coastguard Worker cl_event tmp;
6132*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6133*61046927SAndroid Build Coastguard Worker ::clEnqueueCopyImageToBuffer(
6134*61046927SAndroid Build Coastguard Worker object_, src(), dst(), (const ::size_t *) src_origin,
6135*61046927SAndroid Build Coastguard Worker (const ::size_t *) region, dst_offset,
6136*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6137*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6138*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6139*61046927SAndroid Build Coastguard Worker __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR);
6140*61046927SAndroid Build Coastguard Worker
6141*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6142*61046927SAndroid Build Coastguard Worker *event = tmp;
6143*61046927SAndroid Build Coastguard Worker
6144*61046927SAndroid Build Coastguard Worker return err;
6145*61046927SAndroid Build Coastguard Worker }
6146*61046927SAndroid Build Coastguard Worker
enqueueCopyBufferToImage(const Buffer & src,const Image & dst,::size_t src_offset,const size_t<3> & dst_origin,const size_t<3> & region,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const6147*61046927SAndroid Build Coastguard Worker cl_int enqueueCopyBufferToImage(
6148*61046927SAndroid Build Coastguard Worker const Buffer& src,
6149*61046927SAndroid Build Coastguard Worker const Image& dst,
6150*61046927SAndroid Build Coastguard Worker ::size_t src_offset,
6151*61046927SAndroid Build Coastguard Worker const size_t<3>& dst_origin,
6152*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
6153*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6154*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
6155*61046927SAndroid Build Coastguard Worker {
6156*61046927SAndroid Build Coastguard Worker cl_event tmp;
6157*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6158*61046927SAndroid Build Coastguard Worker ::clEnqueueCopyBufferToImage(
6159*61046927SAndroid Build Coastguard Worker object_, src(), dst(), src_offset,
6160*61046927SAndroid Build Coastguard Worker (const ::size_t *) dst_origin, (const ::size_t *) region,
6161*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6162*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6163*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6164*61046927SAndroid Build Coastguard Worker __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR);
6165*61046927SAndroid Build Coastguard Worker
6166*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6167*61046927SAndroid Build Coastguard Worker *event = tmp;
6168*61046927SAndroid Build Coastguard Worker
6169*61046927SAndroid Build Coastguard Worker return err;
6170*61046927SAndroid Build Coastguard Worker }
6171*61046927SAndroid Build Coastguard Worker
enqueueMapBuffer(const Buffer & buffer,cl_bool blocking,cl_map_flags flags,::size_t offset,::size_t size,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL,cl_int * err=NULL) const6172*61046927SAndroid Build Coastguard Worker void* enqueueMapBuffer(
6173*61046927SAndroid Build Coastguard Worker const Buffer& buffer,
6174*61046927SAndroid Build Coastguard Worker cl_bool blocking,
6175*61046927SAndroid Build Coastguard Worker cl_map_flags flags,
6176*61046927SAndroid Build Coastguard Worker ::size_t offset,
6177*61046927SAndroid Build Coastguard Worker ::size_t size,
6178*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6179*61046927SAndroid Build Coastguard Worker Event* event = NULL,
6180*61046927SAndroid Build Coastguard Worker cl_int* err = NULL) const
6181*61046927SAndroid Build Coastguard Worker {
6182*61046927SAndroid Build Coastguard Worker cl_event tmp;
6183*61046927SAndroid Build Coastguard Worker cl_int error;
6184*61046927SAndroid Build Coastguard Worker void * result = ::clEnqueueMapBuffer(
6185*61046927SAndroid Build Coastguard Worker object_, buffer(), blocking, flags, offset, size,
6186*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6187*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6188*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL,
6189*61046927SAndroid Build Coastguard Worker &error);
6190*61046927SAndroid Build Coastguard Worker
6191*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR);
6192*61046927SAndroid Build Coastguard Worker if (err != NULL) {
6193*61046927SAndroid Build Coastguard Worker *err = error;
6194*61046927SAndroid Build Coastguard Worker }
6195*61046927SAndroid Build Coastguard Worker if (event != NULL && error == CL_SUCCESS)
6196*61046927SAndroid Build Coastguard Worker *event = tmp;
6197*61046927SAndroid Build Coastguard Worker
6198*61046927SAndroid Build Coastguard Worker return result;
6199*61046927SAndroid Build Coastguard Worker }
6200*61046927SAndroid Build Coastguard Worker
enqueueMapImage(const Image & buffer,cl_bool blocking,cl_map_flags flags,const size_t<3> & origin,const size_t<3> & region,::size_t * row_pitch,::size_t * slice_pitch,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL,cl_int * err=NULL) const6201*61046927SAndroid Build Coastguard Worker void* enqueueMapImage(
6202*61046927SAndroid Build Coastguard Worker const Image& buffer,
6203*61046927SAndroid Build Coastguard Worker cl_bool blocking,
6204*61046927SAndroid Build Coastguard Worker cl_map_flags flags,
6205*61046927SAndroid Build Coastguard Worker const size_t<3>& origin,
6206*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
6207*61046927SAndroid Build Coastguard Worker ::size_t * row_pitch,
6208*61046927SAndroid Build Coastguard Worker ::size_t * slice_pitch,
6209*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6210*61046927SAndroid Build Coastguard Worker Event* event = NULL,
6211*61046927SAndroid Build Coastguard Worker cl_int* err = NULL) const
6212*61046927SAndroid Build Coastguard Worker {
6213*61046927SAndroid Build Coastguard Worker cl_event tmp;
6214*61046927SAndroid Build Coastguard Worker cl_int error;
6215*61046927SAndroid Build Coastguard Worker void * result = ::clEnqueueMapImage(
6216*61046927SAndroid Build Coastguard Worker object_, buffer(), blocking, flags,
6217*61046927SAndroid Build Coastguard Worker (const ::size_t *) origin, (const ::size_t *) region,
6218*61046927SAndroid Build Coastguard Worker row_pitch, slice_pitch,
6219*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6220*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6221*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL,
6222*61046927SAndroid Build Coastguard Worker &error);
6223*61046927SAndroid Build Coastguard Worker
6224*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __ENQUEUE_MAP_IMAGE_ERR);
6225*61046927SAndroid Build Coastguard Worker if (err != NULL) {
6226*61046927SAndroid Build Coastguard Worker *err = error;
6227*61046927SAndroid Build Coastguard Worker }
6228*61046927SAndroid Build Coastguard Worker if (event != NULL && error == CL_SUCCESS)
6229*61046927SAndroid Build Coastguard Worker *event = tmp;
6230*61046927SAndroid Build Coastguard Worker return result;
6231*61046927SAndroid Build Coastguard Worker }
6232*61046927SAndroid Build Coastguard Worker
enqueueUnmapMemObject(const Memory & memory,void * mapped_ptr,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const6233*61046927SAndroid Build Coastguard Worker cl_int enqueueUnmapMemObject(
6234*61046927SAndroid Build Coastguard Worker const Memory& memory,
6235*61046927SAndroid Build Coastguard Worker void* mapped_ptr,
6236*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6237*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
6238*61046927SAndroid Build Coastguard Worker {
6239*61046927SAndroid Build Coastguard Worker cl_event tmp;
6240*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6241*61046927SAndroid Build Coastguard Worker ::clEnqueueUnmapMemObject(
6242*61046927SAndroid Build Coastguard Worker object_, memory(), mapped_ptr,
6243*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6244*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6245*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6246*61046927SAndroid Build Coastguard Worker __ENQUEUE_UNMAP_MEM_OBJECT_ERR);
6247*61046927SAndroid Build Coastguard Worker
6248*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6249*61046927SAndroid Build Coastguard Worker *event = tmp;
6250*61046927SAndroid Build Coastguard Worker
6251*61046927SAndroid Build Coastguard Worker return err;
6252*61046927SAndroid Build Coastguard Worker }
6253*61046927SAndroid Build Coastguard Worker
6254*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
6255*61046927SAndroid Build Coastguard Worker /**
6256*61046927SAndroid Build Coastguard Worker * Enqueues a marker command which waits for either a list of events to complete,
6257*61046927SAndroid Build Coastguard Worker * or all previously enqueued commands to complete.
6258*61046927SAndroid Build Coastguard Worker *
6259*61046927SAndroid Build Coastguard Worker * Enqueues a marker command which waits for either a list of events to complete,
6260*61046927SAndroid Build Coastguard Worker * or if the list is empty it waits for all commands previously enqueued in command_queue
6261*61046927SAndroid Build Coastguard Worker * to complete before it completes. This command returns an event which can be waited on,
6262*61046927SAndroid Build Coastguard Worker * i.e. this event can be waited on to insure that all events either in the event_wait_list
6263*61046927SAndroid Build Coastguard Worker * or all previously enqueued commands, queued before this command to command_queue,
6264*61046927SAndroid Build Coastguard Worker * have completed.
6265*61046927SAndroid Build Coastguard Worker */
enqueueMarkerWithWaitList(const VECTOR_CLASS<Event> * events=0,Event * event=0) const6266*61046927SAndroid Build Coastguard Worker cl_int enqueueMarkerWithWaitList(
6267*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event> *events = 0,
6268*61046927SAndroid Build Coastguard Worker Event *event = 0) const
6269*61046927SAndroid Build Coastguard Worker {
6270*61046927SAndroid Build Coastguard Worker cl_event tmp;
6271*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6272*61046927SAndroid Build Coastguard Worker ::clEnqueueMarkerWithWaitList(
6273*61046927SAndroid Build Coastguard Worker object_,
6274*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6275*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6276*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6277*61046927SAndroid Build Coastguard Worker __ENQUEUE_MARKER_WAIT_LIST_ERR);
6278*61046927SAndroid Build Coastguard Worker
6279*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6280*61046927SAndroid Build Coastguard Worker *event = tmp;
6281*61046927SAndroid Build Coastguard Worker
6282*61046927SAndroid Build Coastguard Worker return err;
6283*61046927SAndroid Build Coastguard Worker }
6284*61046927SAndroid Build Coastguard Worker
6285*61046927SAndroid Build Coastguard Worker /**
6286*61046927SAndroid Build Coastguard Worker * A synchronization point that enqueues a barrier operation.
6287*61046927SAndroid Build Coastguard Worker *
6288*61046927SAndroid Build Coastguard Worker * Enqueues a barrier command which waits for either a list of events to complete,
6289*61046927SAndroid Build Coastguard Worker * or if the list is empty it waits for all commands previously enqueued in command_queue
6290*61046927SAndroid Build Coastguard Worker * to complete before it completes. This command blocks command execution, that is, any
6291*61046927SAndroid Build Coastguard Worker * following commands enqueued after it do not execute until it completes. This command
6292*61046927SAndroid Build Coastguard Worker * returns an event which can be waited on, i.e. this event can be waited on to insure that
6293*61046927SAndroid Build Coastguard Worker * all events either in the event_wait_list or all previously enqueued commands, queued
6294*61046927SAndroid Build Coastguard Worker * before this command to command_queue, have completed.
6295*61046927SAndroid Build Coastguard Worker */
enqueueBarrierWithWaitList(const VECTOR_CLASS<Event> * events=0,Event * event=0) const6296*61046927SAndroid Build Coastguard Worker cl_int enqueueBarrierWithWaitList(
6297*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event> *events = 0,
6298*61046927SAndroid Build Coastguard Worker Event *event = 0) const
6299*61046927SAndroid Build Coastguard Worker {
6300*61046927SAndroid Build Coastguard Worker cl_event tmp;
6301*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6302*61046927SAndroid Build Coastguard Worker ::clEnqueueBarrierWithWaitList(
6303*61046927SAndroid Build Coastguard Worker object_,
6304*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6305*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6306*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6307*61046927SAndroid Build Coastguard Worker __ENQUEUE_BARRIER_WAIT_LIST_ERR);
6308*61046927SAndroid Build Coastguard Worker
6309*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6310*61046927SAndroid Build Coastguard Worker *event = tmp;
6311*61046927SAndroid Build Coastguard Worker
6312*61046927SAndroid Build Coastguard Worker return err;
6313*61046927SAndroid Build Coastguard Worker }
6314*61046927SAndroid Build Coastguard Worker
6315*61046927SAndroid Build Coastguard Worker /**
6316*61046927SAndroid Build Coastguard Worker * Enqueues a command to indicate with which device a set of memory objects
6317*61046927SAndroid Build Coastguard Worker * should be associated.
6318*61046927SAndroid Build Coastguard Worker */
enqueueMigrateMemObjects(const VECTOR_CLASS<Memory> & memObjects,cl_mem_migration_flags flags,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const6319*61046927SAndroid Build Coastguard Worker cl_int enqueueMigrateMemObjects(
6320*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Memory> &memObjects,
6321*61046927SAndroid Build Coastguard Worker cl_mem_migration_flags flags,
6322*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6323*61046927SAndroid Build Coastguard Worker Event* event = NULL
6324*61046927SAndroid Build Coastguard Worker ) const
6325*61046927SAndroid Build Coastguard Worker {
6326*61046927SAndroid Build Coastguard Worker cl_event tmp;
6327*61046927SAndroid Build Coastguard Worker
6328*61046927SAndroid Build Coastguard Worker cl_mem* localMemObjects = static_cast<cl_mem*>(alloca(memObjects.size() * sizeof(cl_mem)));
6329*61046927SAndroid Build Coastguard Worker for( int i = 0; i < (int)memObjects.size(); ++i ) {
6330*61046927SAndroid Build Coastguard Worker localMemObjects[i] = memObjects[i]();
6331*61046927SAndroid Build Coastguard Worker }
6332*61046927SAndroid Build Coastguard Worker
6333*61046927SAndroid Build Coastguard Worker
6334*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6335*61046927SAndroid Build Coastguard Worker ::clEnqueueMigrateMemObjects(
6336*61046927SAndroid Build Coastguard Worker object_,
6337*61046927SAndroid Build Coastguard Worker (cl_uint)memObjects.size(),
6338*61046927SAndroid Build Coastguard Worker static_cast<const cl_mem*>(localMemObjects),
6339*61046927SAndroid Build Coastguard Worker flags,
6340*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6341*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6342*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6343*61046927SAndroid Build Coastguard Worker __ENQUEUE_UNMAP_MEM_OBJECT_ERR);
6344*61046927SAndroid Build Coastguard Worker
6345*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6346*61046927SAndroid Build Coastguard Worker *event = tmp;
6347*61046927SAndroid Build Coastguard Worker
6348*61046927SAndroid Build Coastguard Worker return err;
6349*61046927SAndroid Build Coastguard Worker }
6350*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
6351*61046927SAndroid Build Coastguard Worker
enqueueNDRangeKernel(const Kernel & kernel,const NDRange & offset,const NDRange & global,const NDRange & local=NullRange,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const6352*61046927SAndroid Build Coastguard Worker cl_int enqueueNDRangeKernel(
6353*61046927SAndroid Build Coastguard Worker const Kernel& kernel,
6354*61046927SAndroid Build Coastguard Worker const NDRange& offset,
6355*61046927SAndroid Build Coastguard Worker const NDRange& global,
6356*61046927SAndroid Build Coastguard Worker const NDRange& local = NullRange,
6357*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6358*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
6359*61046927SAndroid Build Coastguard Worker {
6360*61046927SAndroid Build Coastguard Worker cl_event tmp;
6361*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6362*61046927SAndroid Build Coastguard Worker ::clEnqueueNDRangeKernel(
6363*61046927SAndroid Build Coastguard Worker object_, kernel(), (cl_uint) global.dimensions(),
6364*61046927SAndroid Build Coastguard Worker offset.dimensions() != 0 ? (const ::size_t*) offset : NULL,
6365*61046927SAndroid Build Coastguard Worker (const ::size_t*) global,
6366*61046927SAndroid Build Coastguard Worker local.dimensions() != 0 ? (const ::size_t*) local : NULL,
6367*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6368*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6369*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6370*61046927SAndroid Build Coastguard Worker __ENQUEUE_NDRANGE_KERNEL_ERR);
6371*61046927SAndroid Build Coastguard Worker
6372*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6373*61046927SAndroid Build Coastguard Worker *event = tmp;
6374*61046927SAndroid Build Coastguard Worker
6375*61046927SAndroid Build Coastguard Worker return err;
6376*61046927SAndroid Build Coastguard Worker }
6377*61046927SAndroid Build Coastguard Worker
enqueueTask(const Kernel & kernel,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const6378*61046927SAndroid Build Coastguard Worker cl_int enqueueTask(
6379*61046927SAndroid Build Coastguard Worker const Kernel& kernel,
6380*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6381*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
6382*61046927SAndroid Build Coastguard Worker {
6383*61046927SAndroid Build Coastguard Worker cl_event tmp;
6384*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6385*61046927SAndroid Build Coastguard Worker ::clEnqueueTask(
6386*61046927SAndroid Build Coastguard Worker object_, kernel(),
6387*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6388*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6389*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6390*61046927SAndroid Build Coastguard Worker __ENQUEUE_TASK_ERR);
6391*61046927SAndroid Build Coastguard Worker
6392*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6393*61046927SAndroid Build Coastguard Worker *event = tmp;
6394*61046927SAndroid Build Coastguard Worker
6395*61046927SAndroid Build Coastguard Worker return err;
6396*61046927SAndroid Build Coastguard Worker }
6397*61046927SAndroid Build Coastguard Worker
enqueueNativeKernel(void (CL_CALLBACK * userFptr)(void *),std::pair<void *,::size_t> args,const VECTOR_CLASS<Memory> * mem_objects=NULL,const VECTOR_CLASS<const void * > * mem_locs=NULL,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const6398*61046927SAndroid Build Coastguard Worker cl_int enqueueNativeKernel(
6399*61046927SAndroid Build Coastguard Worker void (CL_CALLBACK *userFptr)(void *),
6400*61046927SAndroid Build Coastguard Worker std::pair<void*, ::size_t> args,
6401*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Memory>* mem_objects = NULL,
6402*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<const void*>* mem_locs = NULL,
6403*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6404*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
6405*61046927SAndroid Build Coastguard Worker {
6406*61046927SAndroid Build Coastguard Worker cl_mem * mems = (mem_objects != NULL && mem_objects->size() > 0)
6407*61046927SAndroid Build Coastguard Worker ? (cl_mem*) alloca(mem_objects->size() * sizeof(cl_mem))
6408*61046927SAndroid Build Coastguard Worker : NULL;
6409*61046927SAndroid Build Coastguard Worker
6410*61046927SAndroid Build Coastguard Worker if (mems != NULL) {
6411*61046927SAndroid Build Coastguard Worker for (unsigned int i = 0; i < mem_objects->size(); i++) {
6412*61046927SAndroid Build Coastguard Worker mems[i] = ((*mem_objects)[i])();
6413*61046927SAndroid Build Coastguard Worker }
6414*61046927SAndroid Build Coastguard Worker }
6415*61046927SAndroid Build Coastguard Worker
6416*61046927SAndroid Build Coastguard Worker cl_event tmp;
6417*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6418*61046927SAndroid Build Coastguard Worker ::clEnqueueNativeKernel(
6419*61046927SAndroid Build Coastguard Worker object_, userFptr, args.first, args.second,
6420*61046927SAndroid Build Coastguard Worker (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
6421*61046927SAndroid Build Coastguard Worker mems,
6422*61046927SAndroid Build Coastguard Worker (mem_locs != NULL && mem_locs->size() > 0) ? (const void **) &mem_locs->front() : NULL,
6423*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6424*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6425*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6426*61046927SAndroid Build Coastguard Worker __ENQUEUE_NATIVE_KERNEL);
6427*61046927SAndroid Build Coastguard Worker
6428*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6429*61046927SAndroid Build Coastguard Worker *event = tmp;
6430*61046927SAndroid Build Coastguard Worker
6431*61046927SAndroid Build Coastguard Worker return err;
6432*61046927SAndroid Build Coastguard Worker }
6433*61046927SAndroid Build Coastguard Worker
6434*61046927SAndroid Build Coastguard Worker /**
6435*61046927SAndroid Build Coastguard Worker * Deprecated APIs for 1.2
6436*61046927SAndroid Build Coastguard Worker */
6437*61046927SAndroid Build Coastguard Worker #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) || (defined(CL_VERSION_1_1) && !defined(CL_VERSION_1_2))
6438*61046927SAndroid Build Coastguard Worker CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
enqueueMarker(Event * event=NULL) const6439*61046927SAndroid Build Coastguard Worker cl_int enqueueMarker(Event* event = NULL) const CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
6440*61046927SAndroid Build Coastguard Worker {
6441*61046927SAndroid Build Coastguard Worker cl_event tmp;
6442*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6443*61046927SAndroid Build Coastguard Worker ::clEnqueueMarker(
6444*61046927SAndroid Build Coastguard Worker object_,
6445*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6446*61046927SAndroid Build Coastguard Worker __ENQUEUE_MARKER_ERR);
6447*61046927SAndroid Build Coastguard Worker
6448*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6449*61046927SAndroid Build Coastguard Worker *event = tmp;
6450*61046927SAndroid Build Coastguard Worker
6451*61046927SAndroid Build Coastguard Worker return err;
6452*61046927SAndroid Build Coastguard Worker }
6453*61046927SAndroid Build Coastguard Worker
6454*61046927SAndroid Build Coastguard Worker CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
enqueueWaitForEvents(const VECTOR_CLASS<Event> & events) const6455*61046927SAndroid Build Coastguard Worker cl_int enqueueWaitForEvents(const VECTOR_CLASS<Event>& events) const CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
6456*61046927SAndroid Build Coastguard Worker {
6457*61046927SAndroid Build Coastguard Worker return detail::errHandler(
6458*61046927SAndroid Build Coastguard Worker ::clEnqueueWaitForEvents(
6459*61046927SAndroid Build Coastguard Worker object_,
6460*61046927SAndroid Build Coastguard Worker (cl_uint) events.size(),
6461*61046927SAndroid Build Coastguard Worker events.size() > 0 ? (const cl_event*) &events.front() : NULL),
6462*61046927SAndroid Build Coastguard Worker __ENQUEUE_WAIT_FOR_EVENTS_ERR);
6463*61046927SAndroid Build Coastguard Worker }
6464*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_1)
6465*61046927SAndroid Build Coastguard Worker
enqueueAcquireGLObjects(const VECTOR_CLASS<Memory> * mem_objects=NULL,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const6466*61046927SAndroid Build Coastguard Worker cl_int enqueueAcquireGLObjects(
6467*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Memory>* mem_objects = NULL,
6468*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6469*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
6470*61046927SAndroid Build Coastguard Worker {
6471*61046927SAndroid Build Coastguard Worker cl_event tmp;
6472*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6473*61046927SAndroid Build Coastguard Worker ::clEnqueueAcquireGLObjects(
6474*61046927SAndroid Build Coastguard Worker object_,
6475*61046927SAndroid Build Coastguard Worker (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
6476*61046927SAndroid Build Coastguard Worker (mem_objects != NULL && mem_objects->size() > 0) ? (const cl_mem *) &mem_objects->front(): NULL,
6477*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6478*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6479*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6480*61046927SAndroid Build Coastguard Worker __ENQUEUE_ACQUIRE_GL_ERR);
6481*61046927SAndroid Build Coastguard Worker
6482*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6483*61046927SAndroid Build Coastguard Worker *event = tmp;
6484*61046927SAndroid Build Coastguard Worker
6485*61046927SAndroid Build Coastguard Worker return err;
6486*61046927SAndroid Build Coastguard Worker }
6487*61046927SAndroid Build Coastguard Worker
enqueueReleaseGLObjects(const VECTOR_CLASS<Memory> * mem_objects=NULL,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const6488*61046927SAndroid Build Coastguard Worker cl_int enqueueReleaseGLObjects(
6489*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Memory>* mem_objects = NULL,
6490*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6491*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
6492*61046927SAndroid Build Coastguard Worker {
6493*61046927SAndroid Build Coastguard Worker cl_event tmp;
6494*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6495*61046927SAndroid Build Coastguard Worker ::clEnqueueReleaseGLObjects(
6496*61046927SAndroid Build Coastguard Worker object_,
6497*61046927SAndroid Build Coastguard Worker (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
6498*61046927SAndroid Build Coastguard Worker (mem_objects != NULL && mem_objects->size() > 0) ? (const cl_mem *) &mem_objects->front(): NULL,
6499*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6500*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6501*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6502*61046927SAndroid Build Coastguard Worker __ENQUEUE_RELEASE_GL_ERR);
6503*61046927SAndroid Build Coastguard Worker
6504*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6505*61046927SAndroid Build Coastguard Worker *event = tmp;
6506*61046927SAndroid Build Coastguard Worker
6507*61046927SAndroid Build Coastguard Worker return err;
6508*61046927SAndroid Build Coastguard Worker }
6509*61046927SAndroid Build Coastguard Worker
6510*61046927SAndroid Build Coastguard Worker #if defined (USE_DX_INTEROP)
6511*61046927SAndroid Build Coastguard Worker typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueAcquireD3D10ObjectsKHR)(
6512*61046927SAndroid Build Coastguard Worker cl_command_queue command_queue, cl_uint num_objects,
6513*61046927SAndroid Build Coastguard Worker const cl_mem* mem_objects, cl_uint num_events_in_wait_list,
6514*61046927SAndroid Build Coastguard Worker const cl_event* event_wait_list, cl_event* event);
6515*61046927SAndroid Build Coastguard Worker typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueReleaseD3D10ObjectsKHR)(
6516*61046927SAndroid Build Coastguard Worker cl_command_queue command_queue, cl_uint num_objects,
6517*61046927SAndroid Build Coastguard Worker const cl_mem* mem_objects, cl_uint num_events_in_wait_list,
6518*61046927SAndroid Build Coastguard Worker const cl_event* event_wait_list, cl_event* event);
6519*61046927SAndroid Build Coastguard Worker
enqueueAcquireD3D10Objects(const VECTOR_CLASS<Memory> * mem_objects=NULL,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const6520*61046927SAndroid Build Coastguard Worker cl_int enqueueAcquireD3D10Objects(
6521*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Memory>* mem_objects = NULL,
6522*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6523*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
6524*61046927SAndroid Build Coastguard Worker {
6525*61046927SAndroid Build Coastguard Worker static PFN_clEnqueueAcquireD3D10ObjectsKHR pfn_clEnqueueAcquireD3D10ObjectsKHR = NULL;
6526*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
6527*61046927SAndroid Build Coastguard Worker cl_context context = getInfo<CL_QUEUE_CONTEXT>();
6528*61046927SAndroid Build Coastguard Worker cl::Device device(getInfo<CL_QUEUE_DEVICE>());
6529*61046927SAndroid Build Coastguard Worker cl_platform_id platform = device.getInfo<CL_DEVICE_PLATFORM>();
6530*61046927SAndroid Build Coastguard Worker __INIT_CL_EXT_FCN_PTR_PLATFORM(platform, clEnqueueAcquireD3D10ObjectsKHR);
6531*61046927SAndroid Build Coastguard Worker #endif
6532*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_1)
6533*61046927SAndroid Build Coastguard Worker __INIT_CL_EXT_FCN_PTR(clEnqueueAcquireD3D10ObjectsKHR);
6534*61046927SAndroid Build Coastguard Worker #endif
6535*61046927SAndroid Build Coastguard Worker
6536*61046927SAndroid Build Coastguard Worker cl_event tmp;
6537*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6538*61046927SAndroid Build Coastguard Worker pfn_clEnqueueAcquireD3D10ObjectsKHR(
6539*61046927SAndroid Build Coastguard Worker object_,
6540*61046927SAndroid Build Coastguard Worker (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
6541*61046927SAndroid Build Coastguard Worker (mem_objects != NULL && mem_objects->size() > 0) ? (const cl_mem *) &mem_objects->front(): NULL,
6542*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6543*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_event*) &events->front() : NULL,
6544*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6545*61046927SAndroid Build Coastguard Worker __ENQUEUE_ACQUIRE_GL_ERR);
6546*61046927SAndroid Build Coastguard Worker
6547*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6548*61046927SAndroid Build Coastguard Worker *event = tmp;
6549*61046927SAndroid Build Coastguard Worker
6550*61046927SAndroid Build Coastguard Worker return err;
6551*61046927SAndroid Build Coastguard Worker }
6552*61046927SAndroid Build Coastguard Worker
enqueueReleaseD3D10Objects(const VECTOR_CLASS<Memory> * mem_objects=NULL,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL) const6553*61046927SAndroid Build Coastguard Worker cl_int enqueueReleaseD3D10Objects(
6554*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Memory>* mem_objects = NULL,
6555*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6556*61046927SAndroid Build Coastguard Worker Event* event = NULL) const
6557*61046927SAndroid Build Coastguard Worker {
6558*61046927SAndroid Build Coastguard Worker static PFN_clEnqueueReleaseD3D10ObjectsKHR pfn_clEnqueueReleaseD3D10ObjectsKHR = NULL;
6559*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_2)
6560*61046927SAndroid Build Coastguard Worker cl_context context = getInfo<CL_QUEUE_CONTEXT>();
6561*61046927SAndroid Build Coastguard Worker cl::Device device(getInfo<CL_QUEUE_DEVICE>());
6562*61046927SAndroid Build Coastguard Worker cl_platform_id platform = device.getInfo<CL_DEVICE_PLATFORM>();
6563*61046927SAndroid Build Coastguard Worker __INIT_CL_EXT_FCN_PTR_PLATFORM(platform, clEnqueueReleaseD3D10ObjectsKHR);
6564*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_2)
6565*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_1)
6566*61046927SAndroid Build Coastguard Worker __INIT_CL_EXT_FCN_PTR(clEnqueueReleaseD3D10ObjectsKHR);
6567*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_1)
6568*61046927SAndroid Build Coastguard Worker
6569*61046927SAndroid Build Coastguard Worker cl_event tmp;
6570*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6571*61046927SAndroid Build Coastguard Worker pfn_clEnqueueReleaseD3D10ObjectsKHR(
6572*61046927SAndroid Build Coastguard Worker object_,
6573*61046927SAndroid Build Coastguard Worker (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
6574*61046927SAndroid Build Coastguard Worker (mem_objects != NULL && mem_objects->size() > 0) ? (const cl_mem *) &mem_objects->front(): NULL,
6575*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6576*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6577*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6578*61046927SAndroid Build Coastguard Worker __ENQUEUE_RELEASE_GL_ERR);
6579*61046927SAndroid Build Coastguard Worker
6580*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6581*61046927SAndroid Build Coastguard Worker *event = tmp;
6582*61046927SAndroid Build Coastguard Worker
6583*61046927SAndroid Build Coastguard Worker return err;
6584*61046927SAndroid Build Coastguard Worker }
6585*61046927SAndroid Build Coastguard Worker #endif
6586*61046927SAndroid Build Coastguard Worker
6587*61046927SAndroid Build Coastguard Worker /**
6588*61046927SAndroid Build Coastguard Worker * Deprecated APIs for 1.2
6589*61046927SAndroid Build Coastguard Worker */
6590*61046927SAndroid Build Coastguard Worker #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) || (defined(CL_VERSION_1_1) && !defined(CL_VERSION_1_2))
6591*61046927SAndroid Build Coastguard Worker CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
enqueueBarrier() const6592*61046927SAndroid Build Coastguard Worker cl_int enqueueBarrier() const CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
6593*61046927SAndroid Build Coastguard Worker {
6594*61046927SAndroid Build Coastguard Worker return detail::errHandler(
6595*61046927SAndroid Build Coastguard Worker ::clEnqueueBarrier(object_),
6596*61046927SAndroid Build Coastguard Worker __ENQUEUE_BARRIER_ERR);
6597*61046927SAndroid Build Coastguard Worker }
6598*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_1)
6599*61046927SAndroid Build Coastguard Worker
flush() const6600*61046927SAndroid Build Coastguard Worker cl_int flush() const
6601*61046927SAndroid Build Coastguard Worker {
6602*61046927SAndroid Build Coastguard Worker return detail::errHandler(::clFlush(object_), __FLUSH_ERR);
6603*61046927SAndroid Build Coastguard Worker }
6604*61046927SAndroid Build Coastguard Worker
finish() const6605*61046927SAndroid Build Coastguard Worker cl_int finish() const
6606*61046927SAndroid Build Coastguard Worker {
6607*61046927SAndroid Build Coastguard Worker return detail::errHandler(::clFinish(object_), __FINISH_ERR);
6608*61046927SAndroid Build Coastguard Worker }
6609*61046927SAndroid Build Coastguard Worker };
6610*61046927SAndroid Build Coastguard Worker
6611*61046927SAndroid Build Coastguard Worker #ifdef CL_HPP_CPP11_ATOMICS_SUPPORTED
6612*61046927SAndroid Build Coastguard Worker CL_WEAK_ATTRIB_PREFIX std::atomic<int> CL_WEAK_ATTRIB_SUFFIX CommandQueue::default_initialized_;
6613*61046927SAndroid Build Coastguard Worker #else // !CL_HPP_CPP11_ATOMICS_SUPPORTED
6614*61046927SAndroid Build Coastguard Worker CL_WEAK_ATTRIB_PREFIX volatile int CL_WEAK_ATTRIB_SUFFIX CommandQueue::default_initialized_ = __DEFAULT_NOT_INITIALIZED;
6615*61046927SAndroid Build Coastguard Worker #endif // !CL_HPP_CPP11_ATOMICS_SUPPORTED
6616*61046927SAndroid Build Coastguard Worker
6617*61046927SAndroid Build Coastguard Worker CL_WEAK_ATTRIB_PREFIX CommandQueue CL_WEAK_ATTRIB_SUFFIX CommandQueue::default_;
6618*61046927SAndroid Build Coastguard Worker CL_WEAK_ATTRIB_PREFIX volatile cl_int CL_WEAK_ATTRIB_SUFFIX CommandQueue::default_error_ = CL_SUCCESS;
6619*61046927SAndroid Build Coastguard Worker
6620*61046927SAndroid Build Coastguard Worker template< typename IteratorType >
Buffer(const Context & context,IteratorType startIterator,IteratorType endIterator,bool readOnly,bool useHostPtr,cl_int * err)6621*61046927SAndroid Build Coastguard Worker Buffer::Buffer(
6622*61046927SAndroid Build Coastguard Worker const Context &context,
6623*61046927SAndroid Build Coastguard Worker IteratorType startIterator,
6624*61046927SAndroid Build Coastguard Worker IteratorType endIterator,
6625*61046927SAndroid Build Coastguard Worker bool readOnly,
6626*61046927SAndroid Build Coastguard Worker bool useHostPtr,
6627*61046927SAndroid Build Coastguard Worker cl_int* err)
6628*61046927SAndroid Build Coastguard Worker {
6629*61046927SAndroid Build Coastguard Worker typedef typename std::iterator_traits<IteratorType>::value_type DataType;
6630*61046927SAndroid Build Coastguard Worker cl_int error;
6631*61046927SAndroid Build Coastguard Worker
6632*61046927SAndroid Build Coastguard Worker cl_mem_flags flags = 0;
6633*61046927SAndroid Build Coastguard Worker if( readOnly ) {
6634*61046927SAndroid Build Coastguard Worker flags |= CL_MEM_READ_ONLY;
6635*61046927SAndroid Build Coastguard Worker }
6636*61046927SAndroid Build Coastguard Worker else {
6637*61046927SAndroid Build Coastguard Worker flags |= CL_MEM_READ_WRITE;
6638*61046927SAndroid Build Coastguard Worker }
6639*61046927SAndroid Build Coastguard Worker if( useHostPtr ) {
6640*61046927SAndroid Build Coastguard Worker flags |= CL_MEM_USE_HOST_PTR;
6641*61046927SAndroid Build Coastguard Worker }
6642*61046927SAndroid Build Coastguard Worker
6643*61046927SAndroid Build Coastguard Worker ::size_t size = sizeof(DataType)*(endIterator - startIterator);
6644*61046927SAndroid Build Coastguard Worker
6645*61046927SAndroid Build Coastguard Worker if( useHostPtr ) {
6646*61046927SAndroid Build Coastguard Worker object_ = ::clCreateBuffer(context(), flags, size, static_cast<DataType*>(&*startIterator), &error);
6647*61046927SAndroid Build Coastguard Worker } else {
6648*61046927SAndroid Build Coastguard Worker object_ = ::clCreateBuffer(context(), flags, size, 0, &error);
6649*61046927SAndroid Build Coastguard Worker }
6650*61046927SAndroid Build Coastguard Worker
6651*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_BUFFER_ERR);
6652*61046927SAndroid Build Coastguard Worker if (err != NULL) {
6653*61046927SAndroid Build Coastguard Worker *err = error;
6654*61046927SAndroid Build Coastguard Worker }
6655*61046927SAndroid Build Coastguard Worker
6656*61046927SAndroid Build Coastguard Worker if( !useHostPtr ) {
6657*61046927SAndroid Build Coastguard Worker CommandQueue queue(context, 0, &error);
6658*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_BUFFER_ERR);
6659*61046927SAndroid Build Coastguard Worker if (err != NULL) {
6660*61046927SAndroid Build Coastguard Worker *err = error;
6661*61046927SAndroid Build Coastguard Worker }
6662*61046927SAndroid Build Coastguard Worker
6663*61046927SAndroid Build Coastguard Worker error = cl::copy(queue, startIterator, endIterator, *this);
6664*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_BUFFER_ERR);
6665*61046927SAndroid Build Coastguard Worker if (err != NULL) {
6666*61046927SAndroid Build Coastguard Worker *err = error;
6667*61046927SAndroid Build Coastguard Worker }
6668*61046927SAndroid Build Coastguard Worker }
6669*61046927SAndroid Build Coastguard Worker }
6670*61046927SAndroid Build Coastguard Worker
6671*61046927SAndroid Build Coastguard Worker template< typename IteratorType >
Buffer(const CommandQueue & queue,IteratorType startIterator,IteratorType endIterator,bool readOnly,bool useHostPtr,cl_int * err)6672*61046927SAndroid Build Coastguard Worker Buffer::Buffer(
6673*61046927SAndroid Build Coastguard Worker const CommandQueue &queue,
6674*61046927SAndroid Build Coastguard Worker IteratorType startIterator,
6675*61046927SAndroid Build Coastguard Worker IteratorType endIterator,
6676*61046927SAndroid Build Coastguard Worker bool readOnly,
6677*61046927SAndroid Build Coastguard Worker bool useHostPtr,
6678*61046927SAndroid Build Coastguard Worker cl_int* err)
6679*61046927SAndroid Build Coastguard Worker {
6680*61046927SAndroid Build Coastguard Worker typedef typename std::iterator_traits<IteratorType>::value_type DataType;
6681*61046927SAndroid Build Coastguard Worker cl_int error;
6682*61046927SAndroid Build Coastguard Worker
6683*61046927SAndroid Build Coastguard Worker cl_mem_flags flags = 0;
6684*61046927SAndroid Build Coastguard Worker if (readOnly) {
6685*61046927SAndroid Build Coastguard Worker flags |= CL_MEM_READ_ONLY;
6686*61046927SAndroid Build Coastguard Worker }
6687*61046927SAndroid Build Coastguard Worker else {
6688*61046927SAndroid Build Coastguard Worker flags |= CL_MEM_READ_WRITE;
6689*61046927SAndroid Build Coastguard Worker }
6690*61046927SAndroid Build Coastguard Worker if (useHostPtr) {
6691*61046927SAndroid Build Coastguard Worker flags |= CL_MEM_USE_HOST_PTR;
6692*61046927SAndroid Build Coastguard Worker }
6693*61046927SAndroid Build Coastguard Worker
6694*61046927SAndroid Build Coastguard Worker ::size_t size = sizeof(DataType)*(endIterator - startIterator);
6695*61046927SAndroid Build Coastguard Worker
6696*61046927SAndroid Build Coastguard Worker Context context = queue.getInfo<CL_QUEUE_CONTEXT>();
6697*61046927SAndroid Build Coastguard Worker
6698*61046927SAndroid Build Coastguard Worker if (useHostPtr) {
6699*61046927SAndroid Build Coastguard Worker object_ = ::clCreateBuffer(context(), flags, size, static_cast<DataType*>(&*startIterator), &error);
6700*61046927SAndroid Build Coastguard Worker }
6701*61046927SAndroid Build Coastguard Worker else {
6702*61046927SAndroid Build Coastguard Worker object_ = ::clCreateBuffer(context(), flags, size, 0, &error);
6703*61046927SAndroid Build Coastguard Worker }
6704*61046927SAndroid Build Coastguard Worker
6705*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_BUFFER_ERR);
6706*61046927SAndroid Build Coastguard Worker if (err != NULL) {
6707*61046927SAndroid Build Coastguard Worker *err = error;
6708*61046927SAndroid Build Coastguard Worker }
6709*61046927SAndroid Build Coastguard Worker
6710*61046927SAndroid Build Coastguard Worker if (!useHostPtr) {
6711*61046927SAndroid Build Coastguard Worker error = cl::copy(queue, startIterator, endIterator, *this);
6712*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __CREATE_BUFFER_ERR);
6713*61046927SAndroid Build Coastguard Worker if (err != NULL) {
6714*61046927SAndroid Build Coastguard Worker *err = error;
6715*61046927SAndroid Build Coastguard Worker }
6716*61046927SAndroid Build Coastguard Worker }
6717*61046927SAndroid Build Coastguard Worker }
6718*61046927SAndroid Build Coastguard Worker
enqueueReadBuffer(const Buffer & buffer,cl_bool blocking,::size_t offset,::size_t size,void * ptr,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL)6719*61046927SAndroid Build Coastguard Worker inline cl_int enqueueReadBuffer(
6720*61046927SAndroid Build Coastguard Worker const Buffer& buffer,
6721*61046927SAndroid Build Coastguard Worker cl_bool blocking,
6722*61046927SAndroid Build Coastguard Worker ::size_t offset,
6723*61046927SAndroid Build Coastguard Worker ::size_t size,
6724*61046927SAndroid Build Coastguard Worker void* ptr,
6725*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6726*61046927SAndroid Build Coastguard Worker Event* event = NULL)
6727*61046927SAndroid Build Coastguard Worker {
6728*61046927SAndroid Build Coastguard Worker cl_int error;
6729*61046927SAndroid Build Coastguard Worker CommandQueue queue = CommandQueue::getDefault(&error);
6730*61046927SAndroid Build Coastguard Worker
6731*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
6732*61046927SAndroid Build Coastguard Worker return error;
6733*61046927SAndroid Build Coastguard Worker }
6734*61046927SAndroid Build Coastguard Worker
6735*61046927SAndroid Build Coastguard Worker return queue.enqueueReadBuffer(buffer, blocking, offset, size, ptr, events, event);
6736*61046927SAndroid Build Coastguard Worker }
6737*61046927SAndroid Build Coastguard Worker
enqueueWriteBuffer(const Buffer & buffer,cl_bool blocking,::size_t offset,::size_t size,const void * ptr,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL)6738*61046927SAndroid Build Coastguard Worker inline cl_int enqueueWriteBuffer(
6739*61046927SAndroid Build Coastguard Worker const Buffer& buffer,
6740*61046927SAndroid Build Coastguard Worker cl_bool blocking,
6741*61046927SAndroid Build Coastguard Worker ::size_t offset,
6742*61046927SAndroid Build Coastguard Worker ::size_t size,
6743*61046927SAndroid Build Coastguard Worker const void* ptr,
6744*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6745*61046927SAndroid Build Coastguard Worker Event* event = NULL)
6746*61046927SAndroid Build Coastguard Worker {
6747*61046927SAndroid Build Coastguard Worker cl_int error;
6748*61046927SAndroid Build Coastguard Worker CommandQueue queue = CommandQueue::getDefault(&error);
6749*61046927SAndroid Build Coastguard Worker
6750*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
6751*61046927SAndroid Build Coastguard Worker return error;
6752*61046927SAndroid Build Coastguard Worker }
6753*61046927SAndroid Build Coastguard Worker
6754*61046927SAndroid Build Coastguard Worker return queue.enqueueWriteBuffer(buffer, blocking, offset, size, ptr, events, event);
6755*61046927SAndroid Build Coastguard Worker }
6756*61046927SAndroid Build Coastguard Worker
enqueueMapBuffer(const Buffer & buffer,cl_bool blocking,cl_map_flags flags,::size_t offset,::size_t size,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL,cl_int * err=NULL)6757*61046927SAndroid Build Coastguard Worker inline void* enqueueMapBuffer(
6758*61046927SAndroid Build Coastguard Worker const Buffer& buffer,
6759*61046927SAndroid Build Coastguard Worker cl_bool blocking,
6760*61046927SAndroid Build Coastguard Worker cl_map_flags flags,
6761*61046927SAndroid Build Coastguard Worker ::size_t offset,
6762*61046927SAndroid Build Coastguard Worker ::size_t size,
6763*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6764*61046927SAndroid Build Coastguard Worker Event* event = NULL,
6765*61046927SAndroid Build Coastguard Worker cl_int* err = NULL)
6766*61046927SAndroid Build Coastguard Worker {
6767*61046927SAndroid Build Coastguard Worker cl_int error;
6768*61046927SAndroid Build Coastguard Worker CommandQueue queue = CommandQueue::getDefault(&error);
6769*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR);
6770*61046927SAndroid Build Coastguard Worker if (err != NULL) {
6771*61046927SAndroid Build Coastguard Worker *err = error;
6772*61046927SAndroid Build Coastguard Worker }
6773*61046927SAndroid Build Coastguard Worker
6774*61046927SAndroid Build Coastguard Worker void * result = ::clEnqueueMapBuffer(
6775*61046927SAndroid Build Coastguard Worker queue(), buffer(), blocking, flags, offset, size,
6776*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6777*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6778*61046927SAndroid Build Coastguard Worker (cl_event*) event,
6779*61046927SAndroid Build Coastguard Worker &error);
6780*61046927SAndroid Build Coastguard Worker
6781*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR);
6782*61046927SAndroid Build Coastguard Worker if (err != NULL) {
6783*61046927SAndroid Build Coastguard Worker *err = error;
6784*61046927SAndroid Build Coastguard Worker }
6785*61046927SAndroid Build Coastguard Worker return result;
6786*61046927SAndroid Build Coastguard Worker }
6787*61046927SAndroid Build Coastguard Worker
enqueueUnmapMemObject(const Memory & memory,void * mapped_ptr,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL)6788*61046927SAndroid Build Coastguard Worker inline cl_int enqueueUnmapMemObject(
6789*61046927SAndroid Build Coastguard Worker const Memory& memory,
6790*61046927SAndroid Build Coastguard Worker void* mapped_ptr,
6791*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6792*61046927SAndroid Build Coastguard Worker Event* event = NULL)
6793*61046927SAndroid Build Coastguard Worker {
6794*61046927SAndroid Build Coastguard Worker cl_int error;
6795*61046927SAndroid Build Coastguard Worker CommandQueue queue = CommandQueue::getDefault(&error);
6796*61046927SAndroid Build Coastguard Worker detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR);
6797*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
6798*61046927SAndroid Build Coastguard Worker return error;
6799*61046927SAndroid Build Coastguard Worker }
6800*61046927SAndroid Build Coastguard Worker
6801*61046927SAndroid Build Coastguard Worker cl_event tmp;
6802*61046927SAndroid Build Coastguard Worker cl_int err = detail::errHandler(
6803*61046927SAndroid Build Coastguard Worker ::clEnqueueUnmapMemObject(
6804*61046927SAndroid Build Coastguard Worker queue(), memory(), mapped_ptr,
6805*61046927SAndroid Build Coastguard Worker (events != NULL) ? (cl_uint) events->size() : 0,
6806*61046927SAndroid Build Coastguard Worker (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
6807*61046927SAndroid Build Coastguard Worker (event != NULL) ? &tmp : NULL),
6808*61046927SAndroid Build Coastguard Worker __ENQUEUE_UNMAP_MEM_OBJECT_ERR);
6809*61046927SAndroid Build Coastguard Worker
6810*61046927SAndroid Build Coastguard Worker if (event != NULL && err == CL_SUCCESS)
6811*61046927SAndroid Build Coastguard Worker *event = tmp;
6812*61046927SAndroid Build Coastguard Worker
6813*61046927SAndroid Build Coastguard Worker return err;
6814*61046927SAndroid Build Coastguard Worker }
6815*61046927SAndroid Build Coastguard Worker
enqueueCopyBuffer(const Buffer & src,const Buffer & dst,::size_t src_offset,::size_t dst_offset,::size_t size,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL)6816*61046927SAndroid Build Coastguard Worker inline cl_int enqueueCopyBuffer(
6817*61046927SAndroid Build Coastguard Worker const Buffer& src,
6818*61046927SAndroid Build Coastguard Worker const Buffer& dst,
6819*61046927SAndroid Build Coastguard Worker ::size_t src_offset,
6820*61046927SAndroid Build Coastguard Worker ::size_t dst_offset,
6821*61046927SAndroid Build Coastguard Worker ::size_t size,
6822*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6823*61046927SAndroid Build Coastguard Worker Event* event = NULL)
6824*61046927SAndroid Build Coastguard Worker {
6825*61046927SAndroid Build Coastguard Worker cl_int error;
6826*61046927SAndroid Build Coastguard Worker CommandQueue queue = CommandQueue::getDefault(&error);
6827*61046927SAndroid Build Coastguard Worker
6828*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
6829*61046927SAndroid Build Coastguard Worker return error;
6830*61046927SAndroid Build Coastguard Worker }
6831*61046927SAndroid Build Coastguard Worker
6832*61046927SAndroid Build Coastguard Worker return queue.enqueueCopyBuffer(src, dst, src_offset, dst_offset, size, events, event);
6833*61046927SAndroid Build Coastguard Worker }
6834*61046927SAndroid Build Coastguard Worker
6835*61046927SAndroid Build Coastguard Worker /**
6836*61046927SAndroid Build Coastguard Worker * Blocking copy operation between iterators and a buffer.
6837*61046927SAndroid Build Coastguard Worker * Host to Device.
6838*61046927SAndroid Build Coastguard Worker * Uses default command queue.
6839*61046927SAndroid Build Coastguard Worker */
6840*61046927SAndroid Build Coastguard Worker template< typename IteratorType >
copy(IteratorType startIterator,IteratorType endIterator,cl::Buffer & buffer)6841*61046927SAndroid Build Coastguard Worker inline cl_int copy( IteratorType startIterator, IteratorType endIterator, cl::Buffer &buffer )
6842*61046927SAndroid Build Coastguard Worker {
6843*61046927SAndroid Build Coastguard Worker cl_int error;
6844*61046927SAndroid Build Coastguard Worker CommandQueue queue = CommandQueue::getDefault(&error);
6845*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS)
6846*61046927SAndroid Build Coastguard Worker return error;
6847*61046927SAndroid Build Coastguard Worker
6848*61046927SAndroid Build Coastguard Worker return cl::copy(queue, startIterator, endIterator, buffer);
6849*61046927SAndroid Build Coastguard Worker }
6850*61046927SAndroid Build Coastguard Worker
6851*61046927SAndroid Build Coastguard Worker /**
6852*61046927SAndroid Build Coastguard Worker * Blocking copy operation between iterators and a buffer.
6853*61046927SAndroid Build Coastguard Worker * Device to Host.
6854*61046927SAndroid Build Coastguard Worker * Uses default command queue.
6855*61046927SAndroid Build Coastguard Worker */
6856*61046927SAndroid Build Coastguard Worker template< typename IteratorType >
copy(const cl::Buffer & buffer,IteratorType startIterator,IteratorType endIterator)6857*61046927SAndroid Build Coastguard Worker inline cl_int copy( const cl::Buffer &buffer, IteratorType startIterator, IteratorType endIterator )
6858*61046927SAndroid Build Coastguard Worker {
6859*61046927SAndroid Build Coastguard Worker cl_int error;
6860*61046927SAndroid Build Coastguard Worker CommandQueue queue = CommandQueue::getDefault(&error);
6861*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS)
6862*61046927SAndroid Build Coastguard Worker return error;
6863*61046927SAndroid Build Coastguard Worker
6864*61046927SAndroid Build Coastguard Worker return cl::copy(queue, buffer, startIterator, endIterator);
6865*61046927SAndroid Build Coastguard Worker }
6866*61046927SAndroid Build Coastguard Worker
6867*61046927SAndroid Build Coastguard Worker /**
6868*61046927SAndroid Build Coastguard Worker * Blocking copy operation between iterators and a buffer.
6869*61046927SAndroid Build Coastguard Worker * Host to Device.
6870*61046927SAndroid Build Coastguard Worker * Uses specified queue.
6871*61046927SAndroid Build Coastguard Worker */
6872*61046927SAndroid Build Coastguard Worker template< typename IteratorType >
copy(const CommandQueue & queue,IteratorType startIterator,IteratorType endIterator,cl::Buffer & buffer)6873*61046927SAndroid Build Coastguard Worker inline cl_int copy( const CommandQueue &queue, IteratorType startIterator, IteratorType endIterator, cl::Buffer &buffer )
6874*61046927SAndroid Build Coastguard Worker {
6875*61046927SAndroid Build Coastguard Worker typedef typename std::iterator_traits<IteratorType>::value_type DataType;
6876*61046927SAndroid Build Coastguard Worker cl_int error;
6877*61046927SAndroid Build Coastguard Worker
6878*61046927SAndroid Build Coastguard Worker ::size_t length = endIterator-startIterator;
6879*61046927SAndroid Build Coastguard Worker ::size_t byteLength = length*sizeof(DataType);
6880*61046927SAndroid Build Coastguard Worker
6881*61046927SAndroid Build Coastguard Worker DataType *pointer =
6882*61046927SAndroid Build Coastguard Worker static_cast<DataType*>(queue.enqueueMapBuffer(buffer, CL_TRUE, CL_MAP_WRITE, 0, byteLength, 0, 0, &error));
6883*61046927SAndroid Build Coastguard Worker // if exceptions enabled, enqueueMapBuffer will throw
6884*61046927SAndroid Build Coastguard Worker if( error != CL_SUCCESS ) {
6885*61046927SAndroid Build Coastguard Worker return error;
6886*61046927SAndroid Build Coastguard Worker }
6887*61046927SAndroid Build Coastguard Worker #if defined(_MSC_VER)
6888*61046927SAndroid Build Coastguard Worker std::copy(
6889*61046927SAndroid Build Coastguard Worker startIterator,
6890*61046927SAndroid Build Coastguard Worker endIterator,
6891*61046927SAndroid Build Coastguard Worker stdext::checked_array_iterator<DataType*>(
6892*61046927SAndroid Build Coastguard Worker pointer, length));
6893*61046927SAndroid Build Coastguard Worker #else
6894*61046927SAndroid Build Coastguard Worker std::copy(startIterator, endIterator, pointer);
6895*61046927SAndroid Build Coastguard Worker #endif
6896*61046927SAndroid Build Coastguard Worker Event endEvent;
6897*61046927SAndroid Build Coastguard Worker error = queue.enqueueUnmapMemObject(buffer, pointer, 0, &endEvent);
6898*61046927SAndroid Build Coastguard Worker // if exceptions enabled, enqueueUnmapMemObject will throw
6899*61046927SAndroid Build Coastguard Worker if( error != CL_SUCCESS ) {
6900*61046927SAndroid Build Coastguard Worker return error;
6901*61046927SAndroid Build Coastguard Worker }
6902*61046927SAndroid Build Coastguard Worker endEvent.wait();
6903*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
6904*61046927SAndroid Build Coastguard Worker }
6905*61046927SAndroid Build Coastguard Worker
6906*61046927SAndroid Build Coastguard Worker /**
6907*61046927SAndroid Build Coastguard Worker * Blocking copy operation between iterators and a buffer.
6908*61046927SAndroid Build Coastguard Worker * Device to Host.
6909*61046927SAndroid Build Coastguard Worker * Uses specified queue.
6910*61046927SAndroid Build Coastguard Worker */
6911*61046927SAndroid Build Coastguard Worker template< typename IteratorType >
copy(const CommandQueue & queue,const cl::Buffer & buffer,IteratorType startIterator,IteratorType endIterator)6912*61046927SAndroid Build Coastguard Worker inline cl_int copy( const CommandQueue &queue, const cl::Buffer &buffer, IteratorType startIterator, IteratorType endIterator )
6913*61046927SAndroid Build Coastguard Worker {
6914*61046927SAndroid Build Coastguard Worker typedef typename std::iterator_traits<IteratorType>::value_type DataType;
6915*61046927SAndroid Build Coastguard Worker cl_int error;
6916*61046927SAndroid Build Coastguard Worker
6917*61046927SAndroid Build Coastguard Worker ::size_t length = endIterator-startIterator;
6918*61046927SAndroid Build Coastguard Worker ::size_t byteLength = length*sizeof(DataType);
6919*61046927SAndroid Build Coastguard Worker
6920*61046927SAndroid Build Coastguard Worker DataType *pointer =
6921*61046927SAndroid Build Coastguard Worker static_cast<DataType*>(queue.enqueueMapBuffer(buffer, CL_TRUE, CL_MAP_READ, 0, byteLength, 0, 0, &error));
6922*61046927SAndroid Build Coastguard Worker // if exceptions enabled, enqueueMapBuffer will throw
6923*61046927SAndroid Build Coastguard Worker if( error != CL_SUCCESS ) {
6924*61046927SAndroid Build Coastguard Worker return error;
6925*61046927SAndroid Build Coastguard Worker }
6926*61046927SAndroid Build Coastguard Worker std::copy(pointer, pointer + length, startIterator);
6927*61046927SAndroid Build Coastguard Worker Event endEvent;
6928*61046927SAndroid Build Coastguard Worker error = queue.enqueueUnmapMemObject(buffer, pointer, 0, &endEvent);
6929*61046927SAndroid Build Coastguard Worker // if exceptions enabled, enqueueUnmapMemObject will throw
6930*61046927SAndroid Build Coastguard Worker if( error != CL_SUCCESS ) {
6931*61046927SAndroid Build Coastguard Worker return error;
6932*61046927SAndroid Build Coastguard Worker }
6933*61046927SAndroid Build Coastguard Worker endEvent.wait();
6934*61046927SAndroid Build Coastguard Worker return CL_SUCCESS;
6935*61046927SAndroid Build Coastguard Worker }
6936*61046927SAndroid Build Coastguard Worker
6937*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_1)
enqueueReadBufferRect(const Buffer & buffer,cl_bool blocking,const size_t<3> & buffer_offset,const size_t<3> & host_offset,const size_t<3> & region,::size_t buffer_row_pitch,::size_t buffer_slice_pitch,::size_t host_row_pitch,::size_t host_slice_pitch,void * ptr,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL)6938*61046927SAndroid Build Coastguard Worker inline cl_int enqueueReadBufferRect(
6939*61046927SAndroid Build Coastguard Worker const Buffer& buffer,
6940*61046927SAndroid Build Coastguard Worker cl_bool blocking,
6941*61046927SAndroid Build Coastguard Worker const size_t<3>& buffer_offset,
6942*61046927SAndroid Build Coastguard Worker const size_t<3>& host_offset,
6943*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
6944*61046927SAndroid Build Coastguard Worker ::size_t buffer_row_pitch,
6945*61046927SAndroid Build Coastguard Worker ::size_t buffer_slice_pitch,
6946*61046927SAndroid Build Coastguard Worker ::size_t host_row_pitch,
6947*61046927SAndroid Build Coastguard Worker ::size_t host_slice_pitch,
6948*61046927SAndroid Build Coastguard Worker void *ptr,
6949*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6950*61046927SAndroid Build Coastguard Worker Event* event = NULL)
6951*61046927SAndroid Build Coastguard Worker {
6952*61046927SAndroid Build Coastguard Worker cl_int error;
6953*61046927SAndroid Build Coastguard Worker CommandQueue queue = CommandQueue::getDefault(&error);
6954*61046927SAndroid Build Coastguard Worker
6955*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
6956*61046927SAndroid Build Coastguard Worker return error;
6957*61046927SAndroid Build Coastguard Worker }
6958*61046927SAndroid Build Coastguard Worker
6959*61046927SAndroid Build Coastguard Worker return queue.enqueueReadBufferRect(
6960*61046927SAndroid Build Coastguard Worker buffer,
6961*61046927SAndroid Build Coastguard Worker blocking,
6962*61046927SAndroid Build Coastguard Worker buffer_offset,
6963*61046927SAndroid Build Coastguard Worker host_offset,
6964*61046927SAndroid Build Coastguard Worker region,
6965*61046927SAndroid Build Coastguard Worker buffer_row_pitch,
6966*61046927SAndroid Build Coastguard Worker buffer_slice_pitch,
6967*61046927SAndroid Build Coastguard Worker host_row_pitch,
6968*61046927SAndroid Build Coastguard Worker host_slice_pitch,
6969*61046927SAndroid Build Coastguard Worker ptr,
6970*61046927SAndroid Build Coastguard Worker events,
6971*61046927SAndroid Build Coastguard Worker event);
6972*61046927SAndroid Build Coastguard Worker }
6973*61046927SAndroid Build Coastguard Worker
enqueueWriteBufferRect(const Buffer & buffer,cl_bool blocking,const size_t<3> & buffer_offset,const size_t<3> & host_offset,const size_t<3> & region,::size_t buffer_row_pitch,::size_t buffer_slice_pitch,::size_t host_row_pitch,::size_t host_slice_pitch,const void * ptr,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL)6974*61046927SAndroid Build Coastguard Worker inline cl_int enqueueWriteBufferRect(
6975*61046927SAndroid Build Coastguard Worker const Buffer& buffer,
6976*61046927SAndroid Build Coastguard Worker cl_bool blocking,
6977*61046927SAndroid Build Coastguard Worker const size_t<3>& buffer_offset,
6978*61046927SAndroid Build Coastguard Worker const size_t<3>& host_offset,
6979*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
6980*61046927SAndroid Build Coastguard Worker ::size_t buffer_row_pitch,
6981*61046927SAndroid Build Coastguard Worker ::size_t buffer_slice_pitch,
6982*61046927SAndroid Build Coastguard Worker ::size_t host_row_pitch,
6983*61046927SAndroid Build Coastguard Worker ::size_t host_slice_pitch,
6984*61046927SAndroid Build Coastguard Worker const void *ptr,
6985*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
6986*61046927SAndroid Build Coastguard Worker Event* event = NULL)
6987*61046927SAndroid Build Coastguard Worker {
6988*61046927SAndroid Build Coastguard Worker cl_int error;
6989*61046927SAndroid Build Coastguard Worker CommandQueue queue = CommandQueue::getDefault(&error);
6990*61046927SAndroid Build Coastguard Worker
6991*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
6992*61046927SAndroid Build Coastguard Worker return error;
6993*61046927SAndroid Build Coastguard Worker }
6994*61046927SAndroid Build Coastguard Worker
6995*61046927SAndroid Build Coastguard Worker return queue.enqueueWriteBufferRect(
6996*61046927SAndroid Build Coastguard Worker buffer,
6997*61046927SAndroid Build Coastguard Worker blocking,
6998*61046927SAndroid Build Coastguard Worker buffer_offset,
6999*61046927SAndroid Build Coastguard Worker host_offset,
7000*61046927SAndroid Build Coastguard Worker region,
7001*61046927SAndroid Build Coastguard Worker buffer_row_pitch,
7002*61046927SAndroid Build Coastguard Worker buffer_slice_pitch,
7003*61046927SAndroid Build Coastguard Worker host_row_pitch,
7004*61046927SAndroid Build Coastguard Worker host_slice_pitch,
7005*61046927SAndroid Build Coastguard Worker ptr,
7006*61046927SAndroid Build Coastguard Worker events,
7007*61046927SAndroid Build Coastguard Worker event);
7008*61046927SAndroid Build Coastguard Worker }
7009*61046927SAndroid Build Coastguard Worker
enqueueCopyBufferRect(const Buffer & src,const Buffer & dst,const size_t<3> & src_origin,const size_t<3> & dst_origin,const size_t<3> & region,::size_t src_row_pitch,::size_t src_slice_pitch,::size_t dst_row_pitch,::size_t dst_slice_pitch,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL)7010*61046927SAndroid Build Coastguard Worker inline cl_int enqueueCopyBufferRect(
7011*61046927SAndroid Build Coastguard Worker const Buffer& src,
7012*61046927SAndroid Build Coastguard Worker const Buffer& dst,
7013*61046927SAndroid Build Coastguard Worker const size_t<3>& src_origin,
7014*61046927SAndroid Build Coastguard Worker const size_t<3>& dst_origin,
7015*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
7016*61046927SAndroid Build Coastguard Worker ::size_t src_row_pitch,
7017*61046927SAndroid Build Coastguard Worker ::size_t src_slice_pitch,
7018*61046927SAndroid Build Coastguard Worker ::size_t dst_row_pitch,
7019*61046927SAndroid Build Coastguard Worker ::size_t dst_slice_pitch,
7020*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
7021*61046927SAndroid Build Coastguard Worker Event* event = NULL)
7022*61046927SAndroid Build Coastguard Worker {
7023*61046927SAndroid Build Coastguard Worker cl_int error;
7024*61046927SAndroid Build Coastguard Worker CommandQueue queue = CommandQueue::getDefault(&error);
7025*61046927SAndroid Build Coastguard Worker
7026*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
7027*61046927SAndroid Build Coastguard Worker return error;
7028*61046927SAndroid Build Coastguard Worker }
7029*61046927SAndroid Build Coastguard Worker
7030*61046927SAndroid Build Coastguard Worker return queue.enqueueCopyBufferRect(
7031*61046927SAndroid Build Coastguard Worker src,
7032*61046927SAndroid Build Coastguard Worker dst,
7033*61046927SAndroid Build Coastguard Worker src_origin,
7034*61046927SAndroid Build Coastguard Worker dst_origin,
7035*61046927SAndroid Build Coastguard Worker region,
7036*61046927SAndroid Build Coastguard Worker src_row_pitch,
7037*61046927SAndroid Build Coastguard Worker src_slice_pitch,
7038*61046927SAndroid Build Coastguard Worker dst_row_pitch,
7039*61046927SAndroid Build Coastguard Worker dst_slice_pitch,
7040*61046927SAndroid Build Coastguard Worker events,
7041*61046927SAndroid Build Coastguard Worker event);
7042*61046927SAndroid Build Coastguard Worker }
7043*61046927SAndroid Build Coastguard Worker #endif
7044*61046927SAndroid Build Coastguard Worker
enqueueReadImage(const Image & image,cl_bool blocking,const size_t<3> & origin,const size_t<3> & region,::size_t row_pitch,::size_t slice_pitch,void * ptr,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL)7045*61046927SAndroid Build Coastguard Worker inline cl_int enqueueReadImage(
7046*61046927SAndroid Build Coastguard Worker const Image& image,
7047*61046927SAndroid Build Coastguard Worker cl_bool blocking,
7048*61046927SAndroid Build Coastguard Worker const size_t<3>& origin,
7049*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
7050*61046927SAndroid Build Coastguard Worker ::size_t row_pitch,
7051*61046927SAndroid Build Coastguard Worker ::size_t slice_pitch,
7052*61046927SAndroid Build Coastguard Worker void* ptr,
7053*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
7054*61046927SAndroid Build Coastguard Worker Event* event = NULL)
7055*61046927SAndroid Build Coastguard Worker {
7056*61046927SAndroid Build Coastguard Worker cl_int error;
7057*61046927SAndroid Build Coastguard Worker CommandQueue queue = CommandQueue::getDefault(&error);
7058*61046927SAndroid Build Coastguard Worker
7059*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
7060*61046927SAndroid Build Coastguard Worker return error;
7061*61046927SAndroid Build Coastguard Worker }
7062*61046927SAndroid Build Coastguard Worker
7063*61046927SAndroid Build Coastguard Worker return queue.enqueueReadImage(
7064*61046927SAndroid Build Coastguard Worker image,
7065*61046927SAndroid Build Coastguard Worker blocking,
7066*61046927SAndroid Build Coastguard Worker origin,
7067*61046927SAndroid Build Coastguard Worker region,
7068*61046927SAndroid Build Coastguard Worker row_pitch,
7069*61046927SAndroid Build Coastguard Worker slice_pitch,
7070*61046927SAndroid Build Coastguard Worker ptr,
7071*61046927SAndroid Build Coastguard Worker events,
7072*61046927SAndroid Build Coastguard Worker event);
7073*61046927SAndroid Build Coastguard Worker }
7074*61046927SAndroid Build Coastguard Worker
enqueueWriteImage(const Image & image,cl_bool blocking,const size_t<3> & origin,const size_t<3> & region,::size_t row_pitch,::size_t slice_pitch,const void * ptr,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL)7075*61046927SAndroid Build Coastguard Worker inline cl_int enqueueWriteImage(
7076*61046927SAndroid Build Coastguard Worker const Image& image,
7077*61046927SAndroid Build Coastguard Worker cl_bool blocking,
7078*61046927SAndroid Build Coastguard Worker const size_t<3>& origin,
7079*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
7080*61046927SAndroid Build Coastguard Worker ::size_t row_pitch,
7081*61046927SAndroid Build Coastguard Worker ::size_t slice_pitch,
7082*61046927SAndroid Build Coastguard Worker const void* ptr,
7083*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
7084*61046927SAndroid Build Coastguard Worker Event* event = NULL)
7085*61046927SAndroid Build Coastguard Worker {
7086*61046927SAndroid Build Coastguard Worker cl_int error;
7087*61046927SAndroid Build Coastguard Worker CommandQueue queue = CommandQueue::getDefault(&error);
7088*61046927SAndroid Build Coastguard Worker
7089*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
7090*61046927SAndroid Build Coastguard Worker return error;
7091*61046927SAndroid Build Coastguard Worker }
7092*61046927SAndroid Build Coastguard Worker
7093*61046927SAndroid Build Coastguard Worker return queue.enqueueWriteImage(
7094*61046927SAndroid Build Coastguard Worker image,
7095*61046927SAndroid Build Coastguard Worker blocking,
7096*61046927SAndroid Build Coastguard Worker origin,
7097*61046927SAndroid Build Coastguard Worker region,
7098*61046927SAndroid Build Coastguard Worker row_pitch,
7099*61046927SAndroid Build Coastguard Worker slice_pitch,
7100*61046927SAndroid Build Coastguard Worker ptr,
7101*61046927SAndroid Build Coastguard Worker events,
7102*61046927SAndroid Build Coastguard Worker event);
7103*61046927SAndroid Build Coastguard Worker }
7104*61046927SAndroid Build Coastguard Worker
enqueueCopyImage(const Image & src,const Image & dst,const size_t<3> & src_origin,const size_t<3> & dst_origin,const size_t<3> & region,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL)7105*61046927SAndroid Build Coastguard Worker inline cl_int enqueueCopyImage(
7106*61046927SAndroid Build Coastguard Worker const Image& src,
7107*61046927SAndroid Build Coastguard Worker const Image& dst,
7108*61046927SAndroid Build Coastguard Worker const size_t<3>& src_origin,
7109*61046927SAndroid Build Coastguard Worker const size_t<3>& dst_origin,
7110*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
7111*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
7112*61046927SAndroid Build Coastguard Worker Event* event = NULL)
7113*61046927SAndroid Build Coastguard Worker {
7114*61046927SAndroid Build Coastguard Worker cl_int error;
7115*61046927SAndroid Build Coastguard Worker CommandQueue queue = CommandQueue::getDefault(&error);
7116*61046927SAndroid Build Coastguard Worker
7117*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
7118*61046927SAndroid Build Coastguard Worker return error;
7119*61046927SAndroid Build Coastguard Worker }
7120*61046927SAndroid Build Coastguard Worker
7121*61046927SAndroid Build Coastguard Worker return queue.enqueueCopyImage(
7122*61046927SAndroid Build Coastguard Worker src,
7123*61046927SAndroid Build Coastguard Worker dst,
7124*61046927SAndroid Build Coastguard Worker src_origin,
7125*61046927SAndroid Build Coastguard Worker dst_origin,
7126*61046927SAndroid Build Coastguard Worker region,
7127*61046927SAndroid Build Coastguard Worker events,
7128*61046927SAndroid Build Coastguard Worker event);
7129*61046927SAndroid Build Coastguard Worker }
7130*61046927SAndroid Build Coastguard Worker
enqueueCopyImageToBuffer(const Image & src,const Buffer & dst,const size_t<3> & src_origin,const size_t<3> & region,::size_t dst_offset,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL)7131*61046927SAndroid Build Coastguard Worker inline cl_int enqueueCopyImageToBuffer(
7132*61046927SAndroid Build Coastguard Worker const Image& src,
7133*61046927SAndroid Build Coastguard Worker const Buffer& dst,
7134*61046927SAndroid Build Coastguard Worker const size_t<3>& src_origin,
7135*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
7136*61046927SAndroid Build Coastguard Worker ::size_t dst_offset,
7137*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
7138*61046927SAndroid Build Coastguard Worker Event* event = NULL)
7139*61046927SAndroid Build Coastguard Worker {
7140*61046927SAndroid Build Coastguard Worker cl_int error;
7141*61046927SAndroid Build Coastguard Worker CommandQueue queue = CommandQueue::getDefault(&error);
7142*61046927SAndroid Build Coastguard Worker
7143*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
7144*61046927SAndroid Build Coastguard Worker return error;
7145*61046927SAndroid Build Coastguard Worker }
7146*61046927SAndroid Build Coastguard Worker
7147*61046927SAndroid Build Coastguard Worker return queue.enqueueCopyImageToBuffer(
7148*61046927SAndroid Build Coastguard Worker src,
7149*61046927SAndroid Build Coastguard Worker dst,
7150*61046927SAndroid Build Coastguard Worker src_origin,
7151*61046927SAndroid Build Coastguard Worker region,
7152*61046927SAndroid Build Coastguard Worker dst_offset,
7153*61046927SAndroid Build Coastguard Worker events,
7154*61046927SAndroid Build Coastguard Worker event);
7155*61046927SAndroid Build Coastguard Worker }
7156*61046927SAndroid Build Coastguard Worker
enqueueCopyBufferToImage(const Buffer & src,const Image & dst,::size_t src_offset,const size_t<3> & dst_origin,const size_t<3> & region,const VECTOR_CLASS<Event> * events=NULL,Event * event=NULL)7157*61046927SAndroid Build Coastguard Worker inline cl_int enqueueCopyBufferToImage(
7158*61046927SAndroid Build Coastguard Worker const Buffer& src,
7159*61046927SAndroid Build Coastguard Worker const Image& dst,
7160*61046927SAndroid Build Coastguard Worker ::size_t src_offset,
7161*61046927SAndroid Build Coastguard Worker const size_t<3>& dst_origin,
7162*61046927SAndroid Build Coastguard Worker const size_t<3>& region,
7163*61046927SAndroid Build Coastguard Worker const VECTOR_CLASS<Event>* events = NULL,
7164*61046927SAndroid Build Coastguard Worker Event* event = NULL)
7165*61046927SAndroid Build Coastguard Worker {
7166*61046927SAndroid Build Coastguard Worker cl_int error;
7167*61046927SAndroid Build Coastguard Worker CommandQueue queue = CommandQueue::getDefault(&error);
7168*61046927SAndroid Build Coastguard Worker
7169*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
7170*61046927SAndroid Build Coastguard Worker return error;
7171*61046927SAndroid Build Coastguard Worker }
7172*61046927SAndroid Build Coastguard Worker
7173*61046927SAndroid Build Coastguard Worker return queue.enqueueCopyBufferToImage(
7174*61046927SAndroid Build Coastguard Worker src,
7175*61046927SAndroid Build Coastguard Worker dst,
7176*61046927SAndroid Build Coastguard Worker src_offset,
7177*61046927SAndroid Build Coastguard Worker dst_origin,
7178*61046927SAndroid Build Coastguard Worker region,
7179*61046927SAndroid Build Coastguard Worker events,
7180*61046927SAndroid Build Coastguard Worker event);
7181*61046927SAndroid Build Coastguard Worker }
7182*61046927SAndroid Build Coastguard Worker
7183*61046927SAndroid Build Coastguard Worker
flush(void)7184*61046927SAndroid Build Coastguard Worker inline cl_int flush(void)
7185*61046927SAndroid Build Coastguard Worker {
7186*61046927SAndroid Build Coastguard Worker cl_int error;
7187*61046927SAndroid Build Coastguard Worker CommandQueue queue = CommandQueue::getDefault(&error);
7188*61046927SAndroid Build Coastguard Worker
7189*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
7190*61046927SAndroid Build Coastguard Worker return error;
7191*61046927SAndroid Build Coastguard Worker }
7192*61046927SAndroid Build Coastguard Worker
7193*61046927SAndroid Build Coastguard Worker return queue.flush();
7194*61046927SAndroid Build Coastguard Worker }
7195*61046927SAndroid Build Coastguard Worker
finish(void)7196*61046927SAndroid Build Coastguard Worker inline cl_int finish(void)
7197*61046927SAndroid Build Coastguard Worker {
7198*61046927SAndroid Build Coastguard Worker cl_int error;
7199*61046927SAndroid Build Coastguard Worker CommandQueue queue = CommandQueue::getDefault(&error);
7200*61046927SAndroid Build Coastguard Worker
7201*61046927SAndroid Build Coastguard Worker if (error != CL_SUCCESS) {
7202*61046927SAndroid Build Coastguard Worker return error;
7203*61046927SAndroid Build Coastguard Worker }
7204*61046927SAndroid Build Coastguard Worker
7205*61046927SAndroid Build Coastguard Worker
7206*61046927SAndroid Build Coastguard Worker return queue.finish();
7207*61046927SAndroid Build Coastguard Worker }
7208*61046927SAndroid Build Coastguard Worker
7209*61046927SAndroid Build Coastguard Worker // Kernel Functor support
7210*61046927SAndroid Build Coastguard Worker // New interface as of September 2011
7211*61046927SAndroid Build Coastguard Worker // Requires the C++11 std::tr1::function (note do not support TR1)
7212*61046927SAndroid Build Coastguard Worker // Visual Studio 2010 and GCC 4.2
7213*61046927SAndroid Build Coastguard Worker
7214*61046927SAndroid Build Coastguard Worker struct EnqueueArgs
7215*61046927SAndroid Build Coastguard Worker {
7216*61046927SAndroid Build Coastguard Worker CommandQueue queue_;
7217*61046927SAndroid Build Coastguard Worker const NDRange offset_;
7218*61046927SAndroid Build Coastguard Worker const NDRange global_;
7219*61046927SAndroid Build Coastguard Worker const NDRange local_;
7220*61046927SAndroid Build Coastguard Worker VECTOR_CLASS<Event> events_;
7221*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7222*61046927SAndroid Build Coastguard Worker EnqueueArgs(NDRange global) :
7223*61046927SAndroid Build Coastguard Worker queue_(CommandQueue::getDefault()),
7224*61046927SAndroid Build Coastguard Worker offset_(NullRange),
7225*61046927SAndroid Build Coastguard Worker global_(global),
7226*61046927SAndroid Build Coastguard Worker local_(NullRange)
7227*61046927SAndroid Build Coastguard Worker {
7228*61046927SAndroid Build Coastguard Worker
7229*61046927SAndroid Build Coastguard Worker }
7230*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7231*61046927SAndroid Build Coastguard Worker EnqueueArgs(NDRange global, NDRange local) :
7232*61046927SAndroid Build Coastguard Worker queue_(CommandQueue::getDefault()),
7233*61046927SAndroid Build Coastguard Worker offset_(NullRange),
7234*61046927SAndroid Build Coastguard Worker global_(global),
7235*61046927SAndroid Build Coastguard Worker local_(local)
7236*61046927SAndroid Build Coastguard Worker {
7237*61046927SAndroid Build Coastguard Worker
7238*61046927SAndroid Build Coastguard Worker }
7239*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7240*61046927SAndroid Build Coastguard Worker EnqueueArgs(NDRange offset, NDRange global, NDRange local) :
7241*61046927SAndroid Build Coastguard Worker queue_(CommandQueue::getDefault()),
7242*61046927SAndroid Build Coastguard Worker offset_(offset),
7243*61046927SAndroid Build Coastguard Worker global_(global),
7244*61046927SAndroid Build Coastguard Worker local_(local)
7245*61046927SAndroid Build Coastguard Worker {
7246*61046927SAndroid Build Coastguard Worker
7247*61046927SAndroid Build Coastguard Worker }
7248*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7249*61046927SAndroid Build Coastguard Worker EnqueueArgs(Event e, NDRange global) :
7250*61046927SAndroid Build Coastguard Worker queue_(CommandQueue::getDefault()),
7251*61046927SAndroid Build Coastguard Worker offset_(NullRange),
7252*61046927SAndroid Build Coastguard Worker global_(global),
7253*61046927SAndroid Build Coastguard Worker local_(NullRange)
7254*61046927SAndroid Build Coastguard Worker {
7255*61046927SAndroid Build Coastguard Worker events_.push_back(e);
7256*61046927SAndroid Build Coastguard Worker }
7257*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7258*61046927SAndroid Build Coastguard Worker EnqueueArgs(Event e, NDRange global, NDRange local) :
7259*61046927SAndroid Build Coastguard Worker queue_(CommandQueue::getDefault()),
7260*61046927SAndroid Build Coastguard Worker offset_(NullRange),
7261*61046927SAndroid Build Coastguard Worker global_(global),
7262*61046927SAndroid Build Coastguard Worker local_(local)
7263*61046927SAndroid Build Coastguard Worker {
7264*61046927SAndroid Build Coastguard Worker events_.push_back(e);
7265*61046927SAndroid Build Coastguard Worker }
7266*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7267*61046927SAndroid Build Coastguard Worker EnqueueArgs(Event e, NDRange offset, NDRange global, NDRange local) :
7268*61046927SAndroid Build Coastguard Worker queue_(CommandQueue::getDefault()),
7269*61046927SAndroid Build Coastguard Worker offset_(offset),
7270*61046927SAndroid Build Coastguard Worker global_(global),
7271*61046927SAndroid Build Coastguard Worker local_(local)
7272*61046927SAndroid Build Coastguard Worker {
7273*61046927SAndroid Build Coastguard Worker events_.push_back(e);
7274*61046927SAndroid Build Coastguard Worker }
7275*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7276*61046927SAndroid Build Coastguard Worker EnqueueArgs(const VECTOR_CLASS<Event> &events, NDRange global) :
7277*61046927SAndroid Build Coastguard Worker queue_(CommandQueue::getDefault()),
7278*61046927SAndroid Build Coastguard Worker offset_(NullRange),
7279*61046927SAndroid Build Coastguard Worker global_(global),
7280*61046927SAndroid Build Coastguard Worker local_(NullRange),
7281*61046927SAndroid Build Coastguard Worker events_(events)
7282*61046927SAndroid Build Coastguard Worker {
7283*61046927SAndroid Build Coastguard Worker
7284*61046927SAndroid Build Coastguard Worker }
7285*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7286*61046927SAndroid Build Coastguard Worker EnqueueArgs(const VECTOR_CLASS<Event> &events, NDRange global, NDRange local) :
7287*61046927SAndroid Build Coastguard Worker queue_(CommandQueue::getDefault()),
7288*61046927SAndroid Build Coastguard Worker offset_(NullRange),
7289*61046927SAndroid Build Coastguard Worker global_(global),
7290*61046927SAndroid Build Coastguard Worker local_(local),
7291*61046927SAndroid Build Coastguard Worker events_(events)
7292*61046927SAndroid Build Coastguard Worker {
7293*61046927SAndroid Build Coastguard Worker
7294*61046927SAndroid Build Coastguard Worker }
7295*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7296*61046927SAndroid Build Coastguard Worker EnqueueArgs(const VECTOR_CLASS<Event> &events, NDRange offset, NDRange global, NDRange local) :
7297*61046927SAndroid Build Coastguard Worker queue_(CommandQueue::getDefault()),
7298*61046927SAndroid Build Coastguard Worker offset_(offset),
7299*61046927SAndroid Build Coastguard Worker global_(global),
7300*61046927SAndroid Build Coastguard Worker local_(local),
7301*61046927SAndroid Build Coastguard Worker events_(events)
7302*61046927SAndroid Build Coastguard Worker {
7303*61046927SAndroid Build Coastguard Worker
7304*61046927SAndroid Build Coastguard Worker }
7305*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7306*61046927SAndroid Build Coastguard Worker EnqueueArgs(CommandQueue &queue, NDRange global) :
7307*61046927SAndroid Build Coastguard Worker queue_(queue),
7308*61046927SAndroid Build Coastguard Worker offset_(NullRange),
7309*61046927SAndroid Build Coastguard Worker global_(global),
7310*61046927SAndroid Build Coastguard Worker local_(NullRange)
7311*61046927SAndroid Build Coastguard Worker {
7312*61046927SAndroid Build Coastguard Worker
7313*61046927SAndroid Build Coastguard Worker }
7314*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7315*61046927SAndroid Build Coastguard Worker EnqueueArgs(CommandQueue &queue, NDRange global, NDRange local) :
7316*61046927SAndroid Build Coastguard Worker queue_(queue),
7317*61046927SAndroid Build Coastguard Worker offset_(NullRange),
7318*61046927SAndroid Build Coastguard Worker global_(global),
7319*61046927SAndroid Build Coastguard Worker local_(local)
7320*61046927SAndroid Build Coastguard Worker {
7321*61046927SAndroid Build Coastguard Worker
7322*61046927SAndroid Build Coastguard Worker }
7323*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7324*61046927SAndroid Build Coastguard Worker EnqueueArgs(CommandQueue &queue, NDRange offset, NDRange global, NDRange local) :
7325*61046927SAndroid Build Coastguard Worker queue_(queue),
7326*61046927SAndroid Build Coastguard Worker offset_(offset),
7327*61046927SAndroid Build Coastguard Worker global_(global),
7328*61046927SAndroid Build Coastguard Worker local_(local)
7329*61046927SAndroid Build Coastguard Worker {
7330*61046927SAndroid Build Coastguard Worker
7331*61046927SAndroid Build Coastguard Worker }
7332*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7333*61046927SAndroid Build Coastguard Worker EnqueueArgs(CommandQueue &queue, Event e, NDRange global) :
7334*61046927SAndroid Build Coastguard Worker queue_(queue),
7335*61046927SAndroid Build Coastguard Worker offset_(NullRange),
7336*61046927SAndroid Build Coastguard Worker global_(global),
7337*61046927SAndroid Build Coastguard Worker local_(NullRange)
7338*61046927SAndroid Build Coastguard Worker {
7339*61046927SAndroid Build Coastguard Worker events_.push_back(e);
7340*61046927SAndroid Build Coastguard Worker }
7341*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7342*61046927SAndroid Build Coastguard Worker EnqueueArgs(CommandQueue &queue, Event e, NDRange global, NDRange local) :
7343*61046927SAndroid Build Coastguard Worker queue_(queue),
7344*61046927SAndroid Build Coastguard Worker offset_(NullRange),
7345*61046927SAndroid Build Coastguard Worker global_(global),
7346*61046927SAndroid Build Coastguard Worker local_(local)
7347*61046927SAndroid Build Coastguard Worker {
7348*61046927SAndroid Build Coastguard Worker events_.push_back(e);
7349*61046927SAndroid Build Coastguard Worker }
7350*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7351*61046927SAndroid Build Coastguard Worker EnqueueArgs(CommandQueue &queue, Event e, NDRange offset, NDRange global, NDRange local) :
7352*61046927SAndroid Build Coastguard Worker queue_(queue),
7353*61046927SAndroid Build Coastguard Worker offset_(offset),
7354*61046927SAndroid Build Coastguard Worker global_(global),
7355*61046927SAndroid Build Coastguard Worker local_(local)
7356*61046927SAndroid Build Coastguard Worker {
7357*61046927SAndroid Build Coastguard Worker events_.push_back(e);
7358*61046927SAndroid Build Coastguard Worker }
7359*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7360*61046927SAndroid Build Coastguard Worker EnqueueArgs(CommandQueue &queue, const VECTOR_CLASS<Event> &events, NDRange global) :
7361*61046927SAndroid Build Coastguard Worker queue_(queue),
7362*61046927SAndroid Build Coastguard Worker offset_(NullRange),
7363*61046927SAndroid Build Coastguard Worker global_(global),
7364*61046927SAndroid Build Coastguard Worker local_(NullRange),
7365*61046927SAndroid Build Coastguard Worker events_(events)
7366*61046927SAndroid Build Coastguard Worker {
7367*61046927SAndroid Build Coastguard Worker
7368*61046927SAndroid Build Coastguard Worker }
7369*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7370*61046927SAndroid Build Coastguard Worker EnqueueArgs(CommandQueue &queue, const VECTOR_CLASS<Event> &events, NDRange global, NDRange local) :
7371*61046927SAndroid Build Coastguard Worker queue_(queue),
7372*61046927SAndroid Build Coastguard Worker offset_(NullRange),
7373*61046927SAndroid Build Coastguard Worker global_(global),
7374*61046927SAndroid Build Coastguard Worker local_(local),
7375*61046927SAndroid Build Coastguard Worker events_(events)
7376*61046927SAndroid Build Coastguard Worker {
7377*61046927SAndroid Build Coastguard Worker
7378*61046927SAndroid Build Coastguard Worker }
7379*61046927SAndroid Build Coastguard Worker
EnqueueArgscl::EnqueueArgs7380*61046927SAndroid Build Coastguard Worker EnqueueArgs(CommandQueue &queue, const VECTOR_CLASS<Event> &events, NDRange offset, NDRange global, NDRange local) :
7381*61046927SAndroid Build Coastguard Worker queue_(queue),
7382*61046927SAndroid Build Coastguard Worker offset_(offset),
7383*61046927SAndroid Build Coastguard Worker global_(global),
7384*61046927SAndroid Build Coastguard Worker local_(local),
7385*61046927SAndroid Build Coastguard Worker events_(events)
7386*61046927SAndroid Build Coastguard Worker {
7387*61046927SAndroid Build Coastguard Worker
7388*61046927SAndroid Build Coastguard Worker }
7389*61046927SAndroid Build Coastguard Worker };
7390*61046927SAndroid Build Coastguard Worker
7391*61046927SAndroid Build Coastguard Worker namespace detail {
7392*61046927SAndroid Build Coastguard Worker
7393*61046927SAndroid Build Coastguard Worker class NullType {};
7394*61046927SAndroid Build Coastguard Worker
7395*61046927SAndroid Build Coastguard Worker template<int index, typename T0>
7396*61046927SAndroid Build Coastguard Worker struct SetArg
7397*61046927SAndroid Build Coastguard Worker {
setcl::detail::SetArg7398*61046927SAndroid Build Coastguard Worker static void set (Kernel kernel, T0 arg)
7399*61046927SAndroid Build Coastguard Worker {
7400*61046927SAndroid Build Coastguard Worker kernel.setArg(index, arg);
7401*61046927SAndroid Build Coastguard Worker }
7402*61046927SAndroid Build Coastguard Worker };
7403*61046927SAndroid Build Coastguard Worker
7404*61046927SAndroid Build Coastguard Worker template<int index>
7405*61046927SAndroid Build Coastguard Worker struct SetArg<index, NullType>
7406*61046927SAndroid Build Coastguard Worker {
setcl::detail::SetArg7407*61046927SAndroid Build Coastguard Worker static void set (Kernel, NullType)
7408*61046927SAndroid Build Coastguard Worker {
7409*61046927SAndroid Build Coastguard Worker }
7410*61046927SAndroid Build Coastguard Worker };
7411*61046927SAndroid Build Coastguard Worker
7412*61046927SAndroid Build Coastguard Worker template <
7413*61046927SAndroid Build Coastguard Worker typename T0, typename T1, typename T2, typename T3,
7414*61046927SAndroid Build Coastguard Worker typename T4, typename T5, typename T6, typename T7,
7415*61046927SAndroid Build Coastguard Worker typename T8, typename T9, typename T10, typename T11,
7416*61046927SAndroid Build Coastguard Worker typename T12, typename T13, typename T14, typename T15,
7417*61046927SAndroid Build Coastguard Worker typename T16, typename T17, typename T18, typename T19,
7418*61046927SAndroid Build Coastguard Worker typename T20, typename T21, typename T22, typename T23,
7419*61046927SAndroid Build Coastguard Worker typename T24, typename T25, typename T26, typename T27,
7420*61046927SAndroid Build Coastguard Worker typename T28, typename T29, typename T30, typename T31
7421*61046927SAndroid Build Coastguard Worker >
7422*61046927SAndroid Build Coastguard Worker class KernelFunctorGlobal
7423*61046927SAndroid Build Coastguard Worker {
7424*61046927SAndroid Build Coastguard Worker private:
7425*61046927SAndroid Build Coastguard Worker Kernel kernel_;
7426*61046927SAndroid Build Coastguard Worker
7427*61046927SAndroid Build Coastguard Worker public:
KernelFunctorGlobal(Kernel kernel)7428*61046927SAndroid Build Coastguard Worker KernelFunctorGlobal(
7429*61046927SAndroid Build Coastguard Worker Kernel kernel) :
7430*61046927SAndroid Build Coastguard Worker kernel_(kernel)
7431*61046927SAndroid Build Coastguard Worker {}
7432*61046927SAndroid Build Coastguard Worker
KernelFunctorGlobal(const Program & program,const STRING_CLASS name,cl_int * err=NULL)7433*61046927SAndroid Build Coastguard Worker KernelFunctorGlobal(
7434*61046927SAndroid Build Coastguard Worker const Program& program,
7435*61046927SAndroid Build Coastguard Worker const STRING_CLASS name,
7436*61046927SAndroid Build Coastguard Worker cl_int * err = NULL) :
7437*61046927SAndroid Build Coastguard Worker kernel_(program, name.c_str(), err)
7438*61046927SAndroid Build Coastguard Worker {}
7439*61046927SAndroid Build Coastguard Worker
operator ()(const EnqueueArgs & args,T0 t0,T1 t1=NullType (),T2 t2=NullType (),T3 t3=NullType (),T4 t4=NullType (),T5 t5=NullType (),T6 t6=NullType (),T7 t7=NullType (),T8 t8=NullType (),T9 t9=NullType (),T10 t10=NullType (),T11 t11=NullType (),T12 t12=NullType (),T13 t13=NullType (),T14 t14=NullType (),T15 t15=NullType (),T16 t16=NullType (),T17 t17=NullType (),T18 t18=NullType (),T19 t19=NullType (),T20 t20=NullType (),T21 t21=NullType (),T22 t22=NullType (),T23 t23=NullType (),T24 t24=NullType (),T25 t25=NullType (),T26 t26=NullType (),T27 t27=NullType (),T28 t28=NullType (),T29 t29=NullType (),T30 t30=NullType (),T31 t31=NullType ())7440*61046927SAndroid Build Coastguard Worker Event operator() (
7441*61046927SAndroid Build Coastguard Worker const EnqueueArgs& args,
7442*61046927SAndroid Build Coastguard Worker T0 t0,
7443*61046927SAndroid Build Coastguard Worker T1 t1 = NullType(),
7444*61046927SAndroid Build Coastguard Worker T2 t2 = NullType(),
7445*61046927SAndroid Build Coastguard Worker T3 t3 = NullType(),
7446*61046927SAndroid Build Coastguard Worker T4 t4 = NullType(),
7447*61046927SAndroid Build Coastguard Worker T5 t5 = NullType(),
7448*61046927SAndroid Build Coastguard Worker T6 t6 = NullType(),
7449*61046927SAndroid Build Coastguard Worker T7 t7 = NullType(),
7450*61046927SAndroid Build Coastguard Worker T8 t8 = NullType(),
7451*61046927SAndroid Build Coastguard Worker T9 t9 = NullType(),
7452*61046927SAndroid Build Coastguard Worker T10 t10 = NullType(),
7453*61046927SAndroid Build Coastguard Worker T11 t11 = NullType(),
7454*61046927SAndroid Build Coastguard Worker T12 t12 = NullType(),
7455*61046927SAndroid Build Coastguard Worker T13 t13 = NullType(),
7456*61046927SAndroid Build Coastguard Worker T14 t14 = NullType(),
7457*61046927SAndroid Build Coastguard Worker T15 t15 = NullType(),
7458*61046927SAndroid Build Coastguard Worker T16 t16 = NullType(),
7459*61046927SAndroid Build Coastguard Worker T17 t17 = NullType(),
7460*61046927SAndroid Build Coastguard Worker T18 t18 = NullType(),
7461*61046927SAndroid Build Coastguard Worker T19 t19 = NullType(),
7462*61046927SAndroid Build Coastguard Worker T20 t20 = NullType(),
7463*61046927SAndroid Build Coastguard Worker T21 t21 = NullType(),
7464*61046927SAndroid Build Coastguard Worker T22 t22 = NullType(),
7465*61046927SAndroid Build Coastguard Worker T23 t23 = NullType(),
7466*61046927SAndroid Build Coastguard Worker T24 t24 = NullType(),
7467*61046927SAndroid Build Coastguard Worker T25 t25 = NullType(),
7468*61046927SAndroid Build Coastguard Worker T26 t26 = NullType(),
7469*61046927SAndroid Build Coastguard Worker T27 t27 = NullType(),
7470*61046927SAndroid Build Coastguard Worker T28 t28 = NullType(),
7471*61046927SAndroid Build Coastguard Worker T29 t29 = NullType(),
7472*61046927SAndroid Build Coastguard Worker T30 t30 = NullType(),
7473*61046927SAndroid Build Coastguard Worker T31 t31 = NullType()
7474*61046927SAndroid Build Coastguard Worker )
7475*61046927SAndroid Build Coastguard Worker {
7476*61046927SAndroid Build Coastguard Worker Event event;
7477*61046927SAndroid Build Coastguard Worker SetArg<0, T0>::set(kernel_, t0);
7478*61046927SAndroid Build Coastguard Worker SetArg<1, T1>::set(kernel_, t1);
7479*61046927SAndroid Build Coastguard Worker SetArg<2, T2>::set(kernel_, t2);
7480*61046927SAndroid Build Coastguard Worker SetArg<3, T3>::set(kernel_, t3);
7481*61046927SAndroid Build Coastguard Worker SetArg<4, T4>::set(kernel_, t4);
7482*61046927SAndroid Build Coastguard Worker SetArg<5, T5>::set(kernel_, t5);
7483*61046927SAndroid Build Coastguard Worker SetArg<6, T6>::set(kernel_, t6);
7484*61046927SAndroid Build Coastguard Worker SetArg<7, T7>::set(kernel_, t7);
7485*61046927SAndroid Build Coastguard Worker SetArg<8, T8>::set(kernel_, t8);
7486*61046927SAndroid Build Coastguard Worker SetArg<9, T9>::set(kernel_, t9);
7487*61046927SAndroid Build Coastguard Worker SetArg<10, T10>::set(kernel_, t10);
7488*61046927SAndroid Build Coastguard Worker SetArg<11, T11>::set(kernel_, t11);
7489*61046927SAndroid Build Coastguard Worker SetArg<12, T12>::set(kernel_, t12);
7490*61046927SAndroid Build Coastguard Worker SetArg<13, T13>::set(kernel_, t13);
7491*61046927SAndroid Build Coastguard Worker SetArg<14, T14>::set(kernel_, t14);
7492*61046927SAndroid Build Coastguard Worker SetArg<15, T15>::set(kernel_, t15);
7493*61046927SAndroid Build Coastguard Worker SetArg<16, T16>::set(kernel_, t16);
7494*61046927SAndroid Build Coastguard Worker SetArg<17, T17>::set(kernel_, t17);
7495*61046927SAndroid Build Coastguard Worker SetArg<18, T18>::set(kernel_, t18);
7496*61046927SAndroid Build Coastguard Worker SetArg<19, T19>::set(kernel_, t19);
7497*61046927SAndroid Build Coastguard Worker SetArg<20, T20>::set(kernel_, t20);
7498*61046927SAndroid Build Coastguard Worker SetArg<21, T21>::set(kernel_, t21);
7499*61046927SAndroid Build Coastguard Worker SetArg<22, T22>::set(kernel_, t22);
7500*61046927SAndroid Build Coastguard Worker SetArg<23, T23>::set(kernel_, t23);
7501*61046927SAndroid Build Coastguard Worker SetArg<24, T24>::set(kernel_, t24);
7502*61046927SAndroid Build Coastguard Worker SetArg<25, T25>::set(kernel_, t25);
7503*61046927SAndroid Build Coastguard Worker SetArg<26, T26>::set(kernel_, t26);
7504*61046927SAndroid Build Coastguard Worker SetArg<27, T27>::set(kernel_, t27);
7505*61046927SAndroid Build Coastguard Worker SetArg<28, T28>::set(kernel_, t28);
7506*61046927SAndroid Build Coastguard Worker SetArg<29, T29>::set(kernel_, t29);
7507*61046927SAndroid Build Coastguard Worker SetArg<30, T30>::set(kernel_, t30);
7508*61046927SAndroid Build Coastguard Worker SetArg<31, T31>::set(kernel_, t31);
7509*61046927SAndroid Build Coastguard Worker
7510*61046927SAndroid Build Coastguard Worker args.queue_.enqueueNDRangeKernel(
7511*61046927SAndroid Build Coastguard Worker kernel_,
7512*61046927SAndroid Build Coastguard Worker args.offset_,
7513*61046927SAndroid Build Coastguard Worker args.global_,
7514*61046927SAndroid Build Coastguard Worker args.local_,
7515*61046927SAndroid Build Coastguard Worker &args.events_,
7516*61046927SAndroid Build Coastguard Worker &event);
7517*61046927SAndroid Build Coastguard Worker
7518*61046927SAndroid Build Coastguard Worker return event;
7519*61046927SAndroid Build Coastguard Worker }
7520*61046927SAndroid Build Coastguard Worker
7521*61046927SAndroid Build Coastguard Worker };
7522*61046927SAndroid Build Coastguard Worker
7523*61046927SAndroid Build Coastguard Worker //------------------------------------------------------------------------------------------------------
7524*61046927SAndroid Build Coastguard Worker
7525*61046927SAndroid Build Coastguard Worker
7526*61046927SAndroid Build Coastguard Worker template<
7527*61046927SAndroid Build Coastguard Worker typename T0,
7528*61046927SAndroid Build Coastguard Worker typename T1,
7529*61046927SAndroid Build Coastguard Worker typename T2,
7530*61046927SAndroid Build Coastguard Worker typename T3,
7531*61046927SAndroid Build Coastguard Worker typename T4,
7532*61046927SAndroid Build Coastguard Worker typename T5,
7533*61046927SAndroid Build Coastguard Worker typename T6,
7534*61046927SAndroid Build Coastguard Worker typename T7,
7535*61046927SAndroid Build Coastguard Worker typename T8,
7536*61046927SAndroid Build Coastguard Worker typename T9,
7537*61046927SAndroid Build Coastguard Worker typename T10,
7538*61046927SAndroid Build Coastguard Worker typename T11,
7539*61046927SAndroid Build Coastguard Worker typename T12,
7540*61046927SAndroid Build Coastguard Worker typename T13,
7541*61046927SAndroid Build Coastguard Worker typename T14,
7542*61046927SAndroid Build Coastguard Worker typename T15,
7543*61046927SAndroid Build Coastguard Worker typename T16,
7544*61046927SAndroid Build Coastguard Worker typename T17,
7545*61046927SAndroid Build Coastguard Worker typename T18,
7546*61046927SAndroid Build Coastguard Worker typename T19,
7547*61046927SAndroid Build Coastguard Worker typename T20,
7548*61046927SAndroid Build Coastguard Worker typename T21,
7549*61046927SAndroid Build Coastguard Worker typename T22,
7550*61046927SAndroid Build Coastguard Worker typename T23,
7551*61046927SAndroid Build Coastguard Worker typename T24,
7552*61046927SAndroid Build Coastguard Worker typename T25,
7553*61046927SAndroid Build Coastguard Worker typename T26,
7554*61046927SAndroid Build Coastguard Worker typename T27,
7555*61046927SAndroid Build Coastguard Worker typename T28,
7556*61046927SAndroid Build Coastguard Worker typename T29,
7557*61046927SAndroid Build Coastguard Worker typename T30,
7558*61046927SAndroid Build Coastguard Worker typename T31>
7559*61046927SAndroid Build Coastguard Worker struct functionImplementation_
7560*61046927SAndroid Build Coastguard Worker {
7561*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
7562*61046927SAndroid Build Coastguard Worker T0,
7563*61046927SAndroid Build Coastguard Worker T1,
7564*61046927SAndroid Build Coastguard Worker T2,
7565*61046927SAndroid Build Coastguard Worker T3,
7566*61046927SAndroid Build Coastguard Worker T4,
7567*61046927SAndroid Build Coastguard Worker T5,
7568*61046927SAndroid Build Coastguard Worker T6,
7569*61046927SAndroid Build Coastguard Worker T7,
7570*61046927SAndroid Build Coastguard Worker T8,
7571*61046927SAndroid Build Coastguard Worker T9,
7572*61046927SAndroid Build Coastguard Worker T10,
7573*61046927SAndroid Build Coastguard Worker T11,
7574*61046927SAndroid Build Coastguard Worker T12,
7575*61046927SAndroid Build Coastguard Worker T13,
7576*61046927SAndroid Build Coastguard Worker T14,
7577*61046927SAndroid Build Coastguard Worker T15,
7578*61046927SAndroid Build Coastguard Worker T16,
7579*61046927SAndroid Build Coastguard Worker T17,
7580*61046927SAndroid Build Coastguard Worker T18,
7581*61046927SAndroid Build Coastguard Worker T19,
7582*61046927SAndroid Build Coastguard Worker T20,
7583*61046927SAndroid Build Coastguard Worker T21,
7584*61046927SAndroid Build Coastguard Worker T22,
7585*61046927SAndroid Build Coastguard Worker T23,
7586*61046927SAndroid Build Coastguard Worker T24,
7587*61046927SAndroid Build Coastguard Worker T25,
7588*61046927SAndroid Build Coastguard Worker T26,
7589*61046927SAndroid Build Coastguard Worker T27,
7590*61046927SAndroid Build Coastguard Worker T28,
7591*61046927SAndroid Build Coastguard Worker T29,
7592*61046927SAndroid Build Coastguard Worker T30,
7593*61046927SAndroid Build Coastguard Worker T31> FunctorType;
7594*61046927SAndroid Build Coastguard Worker
7595*61046927SAndroid Build Coastguard Worker FunctorType functor_;
7596*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_7597*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
7598*61046927SAndroid Build Coastguard Worker functor_(functor)
7599*61046927SAndroid Build Coastguard Worker {
7600*61046927SAndroid Build Coastguard Worker
7601*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 32))
7602*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
7603*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
7604*61046927SAndroid Build Coastguard Worker #endif
7605*61046927SAndroid Build Coastguard Worker
7606*61046927SAndroid Build Coastguard Worker }
7607*61046927SAndroid Build Coastguard Worker
7608*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
7609*61046927SAndroid Build Coastguard Worker typedef Event result_type;
7610*61046927SAndroid Build Coastguard Worker
7611*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
7612*61046927SAndroid Build Coastguard Worker typedef Event type_(
7613*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
7614*61046927SAndroid Build Coastguard Worker T0,
7615*61046927SAndroid Build Coastguard Worker T1,
7616*61046927SAndroid Build Coastguard Worker T2,
7617*61046927SAndroid Build Coastguard Worker T3,
7618*61046927SAndroid Build Coastguard Worker T4,
7619*61046927SAndroid Build Coastguard Worker T5,
7620*61046927SAndroid Build Coastguard Worker T6,
7621*61046927SAndroid Build Coastguard Worker T7,
7622*61046927SAndroid Build Coastguard Worker T8,
7623*61046927SAndroid Build Coastguard Worker T9,
7624*61046927SAndroid Build Coastguard Worker T10,
7625*61046927SAndroid Build Coastguard Worker T11,
7626*61046927SAndroid Build Coastguard Worker T12,
7627*61046927SAndroid Build Coastguard Worker T13,
7628*61046927SAndroid Build Coastguard Worker T14,
7629*61046927SAndroid Build Coastguard Worker T15,
7630*61046927SAndroid Build Coastguard Worker T16,
7631*61046927SAndroid Build Coastguard Worker T17,
7632*61046927SAndroid Build Coastguard Worker T18,
7633*61046927SAndroid Build Coastguard Worker T19,
7634*61046927SAndroid Build Coastguard Worker T20,
7635*61046927SAndroid Build Coastguard Worker T21,
7636*61046927SAndroid Build Coastguard Worker T22,
7637*61046927SAndroid Build Coastguard Worker T23,
7638*61046927SAndroid Build Coastguard Worker T24,
7639*61046927SAndroid Build Coastguard Worker T25,
7640*61046927SAndroid Build Coastguard Worker T26,
7641*61046927SAndroid Build Coastguard Worker T27,
7642*61046927SAndroid Build Coastguard Worker T28,
7643*61046927SAndroid Build Coastguard Worker T29,
7644*61046927SAndroid Build Coastguard Worker T30,
7645*61046927SAndroid Build Coastguard Worker T31);
7646*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_7647*61046927SAndroid Build Coastguard Worker Event operator()(
7648*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
7649*61046927SAndroid Build Coastguard Worker T0 arg0,
7650*61046927SAndroid Build Coastguard Worker T1 arg1,
7651*61046927SAndroid Build Coastguard Worker T2 arg2,
7652*61046927SAndroid Build Coastguard Worker T3 arg3,
7653*61046927SAndroid Build Coastguard Worker T4 arg4,
7654*61046927SAndroid Build Coastguard Worker T5 arg5,
7655*61046927SAndroid Build Coastguard Worker T6 arg6,
7656*61046927SAndroid Build Coastguard Worker T7 arg7,
7657*61046927SAndroid Build Coastguard Worker T8 arg8,
7658*61046927SAndroid Build Coastguard Worker T9 arg9,
7659*61046927SAndroid Build Coastguard Worker T10 arg10,
7660*61046927SAndroid Build Coastguard Worker T11 arg11,
7661*61046927SAndroid Build Coastguard Worker T12 arg12,
7662*61046927SAndroid Build Coastguard Worker T13 arg13,
7663*61046927SAndroid Build Coastguard Worker T14 arg14,
7664*61046927SAndroid Build Coastguard Worker T15 arg15,
7665*61046927SAndroid Build Coastguard Worker T16 arg16,
7666*61046927SAndroid Build Coastguard Worker T17 arg17,
7667*61046927SAndroid Build Coastguard Worker T18 arg18,
7668*61046927SAndroid Build Coastguard Worker T19 arg19,
7669*61046927SAndroid Build Coastguard Worker T20 arg20,
7670*61046927SAndroid Build Coastguard Worker T21 arg21,
7671*61046927SAndroid Build Coastguard Worker T22 arg22,
7672*61046927SAndroid Build Coastguard Worker T23 arg23,
7673*61046927SAndroid Build Coastguard Worker T24 arg24,
7674*61046927SAndroid Build Coastguard Worker T25 arg25,
7675*61046927SAndroid Build Coastguard Worker T26 arg26,
7676*61046927SAndroid Build Coastguard Worker T27 arg27,
7677*61046927SAndroid Build Coastguard Worker T28 arg28,
7678*61046927SAndroid Build Coastguard Worker T29 arg29,
7679*61046927SAndroid Build Coastguard Worker T30 arg30,
7680*61046927SAndroid Build Coastguard Worker T31 arg31)
7681*61046927SAndroid Build Coastguard Worker {
7682*61046927SAndroid Build Coastguard Worker return functor_(
7683*61046927SAndroid Build Coastguard Worker enqueueArgs,
7684*61046927SAndroid Build Coastguard Worker arg0,
7685*61046927SAndroid Build Coastguard Worker arg1,
7686*61046927SAndroid Build Coastguard Worker arg2,
7687*61046927SAndroid Build Coastguard Worker arg3,
7688*61046927SAndroid Build Coastguard Worker arg4,
7689*61046927SAndroid Build Coastguard Worker arg5,
7690*61046927SAndroid Build Coastguard Worker arg6,
7691*61046927SAndroid Build Coastguard Worker arg7,
7692*61046927SAndroid Build Coastguard Worker arg8,
7693*61046927SAndroid Build Coastguard Worker arg9,
7694*61046927SAndroid Build Coastguard Worker arg10,
7695*61046927SAndroid Build Coastguard Worker arg11,
7696*61046927SAndroid Build Coastguard Worker arg12,
7697*61046927SAndroid Build Coastguard Worker arg13,
7698*61046927SAndroid Build Coastguard Worker arg14,
7699*61046927SAndroid Build Coastguard Worker arg15,
7700*61046927SAndroid Build Coastguard Worker arg16,
7701*61046927SAndroid Build Coastguard Worker arg17,
7702*61046927SAndroid Build Coastguard Worker arg18,
7703*61046927SAndroid Build Coastguard Worker arg19,
7704*61046927SAndroid Build Coastguard Worker arg20,
7705*61046927SAndroid Build Coastguard Worker arg21,
7706*61046927SAndroid Build Coastguard Worker arg22,
7707*61046927SAndroid Build Coastguard Worker arg23,
7708*61046927SAndroid Build Coastguard Worker arg24,
7709*61046927SAndroid Build Coastguard Worker arg25,
7710*61046927SAndroid Build Coastguard Worker arg26,
7711*61046927SAndroid Build Coastguard Worker arg27,
7712*61046927SAndroid Build Coastguard Worker arg28,
7713*61046927SAndroid Build Coastguard Worker arg29,
7714*61046927SAndroid Build Coastguard Worker arg30,
7715*61046927SAndroid Build Coastguard Worker arg31);
7716*61046927SAndroid Build Coastguard Worker }
7717*61046927SAndroid Build Coastguard Worker
7718*61046927SAndroid Build Coastguard Worker
7719*61046927SAndroid Build Coastguard Worker };
7720*61046927SAndroid Build Coastguard Worker
7721*61046927SAndroid Build Coastguard Worker template<
7722*61046927SAndroid Build Coastguard Worker typename T0,
7723*61046927SAndroid Build Coastguard Worker typename T1,
7724*61046927SAndroid Build Coastguard Worker typename T2,
7725*61046927SAndroid Build Coastguard Worker typename T3,
7726*61046927SAndroid Build Coastguard Worker typename T4,
7727*61046927SAndroid Build Coastguard Worker typename T5,
7728*61046927SAndroid Build Coastguard Worker typename T6,
7729*61046927SAndroid Build Coastguard Worker typename T7,
7730*61046927SAndroid Build Coastguard Worker typename T8,
7731*61046927SAndroid Build Coastguard Worker typename T9,
7732*61046927SAndroid Build Coastguard Worker typename T10,
7733*61046927SAndroid Build Coastguard Worker typename T11,
7734*61046927SAndroid Build Coastguard Worker typename T12,
7735*61046927SAndroid Build Coastguard Worker typename T13,
7736*61046927SAndroid Build Coastguard Worker typename T14,
7737*61046927SAndroid Build Coastguard Worker typename T15,
7738*61046927SAndroid Build Coastguard Worker typename T16,
7739*61046927SAndroid Build Coastguard Worker typename T17,
7740*61046927SAndroid Build Coastguard Worker typename T18,
7741*61046927SAndroid Build Coastguard Worker typename T19,
7742*61046927SAndroid Build Coastguard Worker typename T20,
7743*61046927SAndroid Build Coastguard Worker typename T21,
7744*61046927SAndroid Build Coastguard Worker typename T22,
7745*61046927SAndroid Build Coastguard Worker typename T23,
7746*61046927SAndroid Build Coastguard Worker typename T24,
7747*61046927SAndroid Build Coastguard Worker typename T25,
7748*61046927SAndroid Build Coastguard Worker typename T26,
7749*61046927SAndroid Build Coastguard Worker typename T27,
7750*61046927SAndroid Build Coastguard Worker typename T28,
7751*61046927SAndroid Build Coastguard Worker typename T29,
7752*61046927SAndroid Build Coastguard Worker typename T30>
7753*61046927SAndroid Build Coastguard Worker struct functionImplementation_
7754*61046927SAndroid Build Coastguard Worker < T0,
7755*61046927SAndroid Build Coastguard Worker T1,
7756*61046927SAndroid Build Coastguard Worker T2,
7757*61046927SAndroid Build Coastguard Worker T3,
7758*61046927SAndroid Build Coastguard Worker T4,
7759*61046927SAndroid Build Coastguard Worker T5,
7760*61046927SAndroid Build Coastguard Worker T6,
7761*61046927SAndroid Build Coastguard Worker T7,
7762*61046927SAndroid Build Coastguard Worker T8,
7763*61046927SAndroid Build Coastguard Worker T9,
7764*61046927SAndroid Build Coastguard Worker T10,
7765*61046927SAndroid Build Coastguard Worker T11,
7766*61046927SAndroid Build Coastguard Worker T12,
7767*61046927SAndroid Build Coastguard Worker T13,
7768*61046927SAndroid Build Coastguard Worker T14,
7769*61046927SAndroid Build Coastguard Worker T15,
7770*61046927SAndroid Build Coastguard Worker T16,
7771*61046927SAndroid Build Coastguard Worker T17,
7772*61046927SAndroid Build Coastguard Worker T18,
7773*61046927SAndroid Build Coastguard Worker T19,
7774*61046927SAndroid Build Coastguard Worker T20,
7775*61046927SAndroid Build Coastguard Worker T21,
7776*61046927SAndroid Build Coastguard Worker T22,
7777*61046927SAndroid Build Coastguard Worker T23,
7778*61046927SAndroid Build Coastguard Worker T24,
7779*61046927SAndroid Build Coastguard Worker T25,
7780*61046927SAndroid Build Coastguard Worker T26,
7781*61046927SAndroid Build Coastguard Worker T27,
7782*61046927SAndroid Build Coastguard Worker T28,
7783*61046927SAndroid Build Coastguard Worker T29,
7784*61046927SAndroid Build Coastguard Worker T30,
7785*61046927SAndroid Build Coastguard Worker NullType>
7786*61046927SAndroid Build Coastguard Worker {
7787*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
7788*61046927SAndroid Build Coastguard Worker T0,
7789*61046927SAndroid Build Coastguard Worker T1,
7790*61046927SAndroid Build Coastguard Worker T2,
7791*61046927SAndroid Build Coastguard Worker T3,
7792*61046927SAndroid Build Coastguard Worker T4,
7793*61046927SAndroid Build Coastguard Worker T5,
7794*61046927SAndroid Build Coastguard Worker T6,
7795*61046927SAndroid Build Coastguard Worker T7,
7796*61046927SAndroid Build Coastguard Worker T8,
7797*61046927SAndroid Build Coastguard Worker T9,
7798*61046927SAndroid Build Coastguard Worker T10,
7799*61046927SAndroid Build Coastguard Worker T11,
7800*61046927SAndroid Build Coastguard Worker T12,
7801*61046927SAndroid Build Coastguard Worker T13,
7802*61046927SAndroid Build Coastguard Worker T14,
7803*61046927SAndroid Build Coastguard Worker T15,
7804*61046927SAndroid Build Coastguard Worker T16,
7805*61046927SAndroid Build Coastguard Worker T17,
7806*61046927SAndroid Build Coastguard Worker T18,
7807*61046927SAndroid Build Coastguard Worker T19,
7808*61046927SAndroid Build Coastguard Worker T20,
7809*61046927SAndroid Build Coastguard Worker T21,
7810*61046927SAndroid Build Coastguard Worker T22,
7811*61046927SAndroid Build Coastguard Worker T23,
7812*61046927SAndroid Build Coastguard Worker T24,
7813*61046927SAndroid Build Coastguard Worker T25,
7814*61046927SAndroid Build Coastguard Worker T26,
7815*61046927SAndroid Build Coastguard Worker T27,
7816*61046927SAndroid Build Coastguard Worker T28,
7817*61046927SAndroid Build Coastguard Worker T29,
7818*61046927SAndroid Build Coastguard Worker T30,
7819*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
7820*61046927SAndroid Build Coastguard Worker
7821*61046927SAndroid Build Coastguard Worker FunctorType functor_;
7822*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_7823*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
7824*61046927SAndroid Build Coastguard Worker functor_(functor)
7825*61046927SAndroid Build Coastguard Worker {
7826*61046927SAndroid Build Coastguard Worker
7827*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 31))
7828*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
7829*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
7830*61046927SAndroid Build Coastguard Worker #endif
7831*61046927SAndroid Build Coastguard Worker
7832*61046927SAndroid Build Coastguard Worker }
7833*61046927SAndroid Build Coastguard Worker
7834*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
7835*61046927SAndroid Build Coastguard Worker typedef Event result_type;
7836*61046927SAndroid Build Coastguard Worker
7837*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
7838*61046927SAndroid Build Coastguard Worker typedef Event type_(
7839*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
7840*61046927SAndroid Build Coastguard Worker T0,
7841*61046927SAndroid Build Coastguard Worker T1,
7842*61046927SAndroid Build Coastguard Worker T2,
7843*61046927SAndroid Build Coastguard Worker T3,
7844*61046927SAndroid Build Coastguard Worker T4,
7845*61046927SAndroid Build Coastguard Worker T5,
7846*61046927SAndroid Build Coastguard Worker T6,
7847*61046927SAndroid Build Coastguard Worker T7,
7848*61046927SAndroid Build Coastguard Worker T8,
7849*61046927SAndroid Build Coastguard Worker T9,
7850*61046927SAndroid Build Coastguard Worker T10,
7851*61046927SAndroid Build Coastguard Worker T11,
7852*61046927SAndroid Build Coastguard Worker T12,
7853*61046927SAndroid Build Coastguard Worker T13,
7854*61046927SAndroid Build Coastguard Worker T14,
7855*61046927SAndroid Build Coastguard Worker T15,
7856*61046927SAndroid Build Coastguard Worker T16,
7857*61046927SAndroid Build Coastguard Worker T17,
7858*61046927SAndroid Build Coastguard Worker T18,
7859*61046927SAndroid Build Coastguard Worker T19,
7860*61046927SAndroid Build Coastguard Worker T20,
7861*61046927SAndroid Build Coastguard Worker T21,
7862*61046927SAndroid Build Coastguard Worker T22,
7863*61046927SAndroid Build Coastguard Worker T23,
7864*61046927SAndroid Build Coastguard Worker T24,
7865*61046927SAndroid Build Coastguard Worker T25,
7866*61046927SAndroid Build Coastguard Worker T26,
7867*61046927SAndroid Build Coastguard Worker T27,
7868*61046927SAndroid Build Coastguard Worker T28,
7869*61046927SAndroid Build Coastguard Worker T29,
7870*61046927SAndroid Build Coastguard Worker T30);
7871*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_7872*61046927SAndroid Build Coastguard Worker Event operator()(
7873*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
7874*61046927SAndroid Build Coastguard Worker T0 arg0,
7875*61046927SAndroid Build Coastguard Worker T1 arg1,
7876*61046927SAndroid Build Coastguard Worker T2 arg2,
7877*61046927SAndroid Build Coastguard Worker T3 arg3,
7878*61046927SAndroid Build Coastguard Worker T4 arg4,
7879*61046927SAndroid Build Coastguard Worker T5 arg5,
7880*61046927SAndroid Build Coastguard Worker T6 arg6,
7881*61046927SAndroid Build Coastguard Worker T7 arg7,
7882*61046927SAndroid Build Coastguard Worker T8 arg8,
7883*61046927SAndroid Build Coastguard Worker T9 arg9,
7884*61046927SAndroid Build Coastguard Worker T10 arg10,
7885*61046927SAndroid Build Coastguard Worker T11 arg11,
7886*61046927SAndroid Build Coastguard Worker T12 arg12,
7887*61046927SAndroid Build Coastguard Worker T13 arg13,
7888*61046927SAndroid Build Coastguard Worker T14 arg14,
7889*61046927SAndroid Build Coastguard Worker T15 arg15,
7890*61046927SAndroid Build Coastguard Worker T16 arg16,
7891*61046927SAndroid Build Coastguard Worker T17 arg17,
7892*61046927SAndroid Build Coastguard Worker T18 arg18,
7893*61046927SAndroid Build Coastguard Worker T19 arg19,
7894*61046927SAndroid Build Coastguard Worker T20 arg20,
7895*61046927SAndroid Build Coastguard Worker T21 arg21,
7896*61046927SAndroid Build Coastguard Worker T22 arg22,
7897*61046927SAndroid Build Coastguard Worker T23 arg23,
7898*61046927SAndroid Build Coastguard Worker T24 arg24,
7899*61046927SAndroid Build Coastguard Worker T25 arg25,
7900*61046927SAndroid Build Coastguard Worker T26 arg26,
7901*61046927SAndroid Build Coastguard Worker T27 arg27,
7902*61046927SAndroid Build Coastguard Worker T28 arg28,
7903*61046927SAndroid Build Coastguard Worker T29 arg29,
7904*61046927SAndroid Build Coastguard Worker T30 arg30)
7905*61046927SAndroid Build Coastguard Worker {
7906*61046927SAndroid Build Coastguard Worker return functor_(
7907*61046927SAndroid Build Coastguard Worker enqueueArgs,
7908*61046927SAndroid Build Coastguard Worker arg0,
7909*61046927SAndroid Build Coastguard Worker arg1,
7910*61046927SAndroid Build Coastguard Worker arg2,
7911*61046927SAndroid Build Coastguard Worker arg3,
7912*61046927SAndroid Build Coastguard Worker arg4,
7913*61046927SAndroid Build Coastguard Worker arg5,
7914*61046927SAndroid Build Coastguard Worker arg6,
7915*61046927SAndroid Build Coastguard Worker arg7,
7916*61046927SAndroid Build Coastguard Worker arg8,
7917*61046927SAndroid Build Coastguard Worker arg9,
7918*61046927SAndroid Build Coastguard Worker arg10,
7919*61046927SAndroid Build Coastguard Worker arg11,
7920*61046927SAndroid Build Coastguard Worker arg12,
7921*61046927SAndroid Build Coastguard Worker arg13,
7922*61046927SAndroid Build Coastguard Worker arg14,
7923*61046927SAndroid Build Coastguard Worker arg15,
7924*61046927SAndroid Build Coastguard Worker arg16,
7925*61046927SAndroid Build Coastguard Worker arg17,
7926*61046927SAndroid Build Coastguard Worker arg18,
7927*61046927SAndroid Build Coastguard Worker arg19,
7928*61046927SAndroid Build Coastguard Worker arg20,
7929*61046927SAndroid Build Coastguard Worker arg21,
7930*61046927SAndroid Build Coastguard Worker arg22,
7931*61046927SAndroid Build Coastguard Worker arg23,
7932*61046927SAndroid Build Coastguard Worker arg24,
7933*61046927SAndroid Build Coastguard Worker arg25,
7934*61046927SAndroid Build Coastguard Worker arg26,
7935*61046927SAndroid Build Coastguard Worker arg27,
7936*61046927SAndroid Build Coastguard Worker arg28,
7937*61046927SAndroid Build Coastguard Worker arg29,
7938*61046927SAndroid Build Coastguard Worker arg30);
7939*61046927SAndroid Build Coastguard Worker }
7940*61046927SAndroid Build Coastguard Worker
7941*61046927SAndroid Build Coastguard Worker
7942*61046927SAndroid Build Coastguard Worker };
7943*61046927SAndroid Build Coastguard Worker
7944*61046927SAndroid Build Coastguard Worker template<
7945*61046927SAndroid Build Coastguard Worker typename T0,
7946*61046927SAndroid Build Coastguard Worker typename T1,
7947*61046927SAndroid Build Coastguard Worker typename T2,
7948*61046927SAndroid Build Coastguard Worker typename T3,
7949*61046927SAndroid Build Coastguard Worker typename T4,
7950*61046927SAndroid Build Coastguard Worker typename T5,
7951*61046927SAndroid Build Coastguard Worker typename T6,
7952*61046927SAndroid Build Coastguard Worker typename T7,
7953*61046927SAndroid Build Coastguard Worker typename T8,
7954*61046927SAndroid Build Coastguard Worker typename T9,
7955*61046927SAndroid Build Coastguard Worker typename T10,
7956*61046927SAndroid Build Coastguard Worker typename T11,
7957*61046927SAndroid Build Coastguard Worker typename T12,
7958*61046927SAndroid Build Coastguard Worker typename T13,
7959*61046927SAndroid Build Coastguard Worker typename T14,
7960*61046927SAndroid Build Coastguard Worker typename T15,
7961*61046927SAndroid Build Coastguard Worker typename T16,
7962*61046927SAndroid Build Coastguard Worker typename T17,
7963*61046927SAndroid Build Coastguard Worker typename T18,
7964*61046927SAndroid Build Coastguard Worker typename T19,
7965*61046927SAndroid Build Coastguard Worker typename T20,
7966*61046927SAndroid Build Coastguard Worker typename T21,
7967*61046927SAndroid Build Coastguard Worker typename T22,
7968*61046927SAndroid Build Coastguard Worker typename T23,
7969*61046927SAndroid Build Coastguard Worker typename T24,
7970*61046927SAndroid Build Coastguard Worker typename T25,
7971*61046927SAndroid Build Coastguard Worker typename T26,
7972*61046927SAndroid Build Coastguard Worker typename T27,
7973*61046927SAndroid Build Coastguard Worker typename T28,
7974*61046927SAndroid Build Coastguard Worker typename T29>
7975*61046927SAndroid Build Coastguard Worker struct functionImplementation_
7976*61046927SAndroid Build Coastguard Worker < T0,
7977*61046927SAndroid Build Coastguard Worker T1,
7978*61046927SAndroid Build Coastguard Worker T2,
7979*61046927SAndroid Build Coastguard Worker T3,
7980*61046927SAndroid Build Coastguard Worker T4,
7981*61046927SAndroid Build Coastguard Worker T5,
7982*61046927SAndroid Build Coastguard Worker T6,
7983*61046927SAndroid Build Coastguard Worker T7,
7984*61046927SAndroid Build Coastguard Worker T8,
7985*61046927SAndroid Build Coastguard Worker T9,
7986*61046927SAndroid Build Coastguard Worker T10,
7987*61046927SAndroid Build Coastguard Worker T11,
7988*61046927SAndroid Build Coastguard Worker T12,
7989*61046927SAndroid Build Coastguard Worker T13,
7990*61046927SAndroid Build Coastguard Worker T14,
7991*61046927SAndroid Build Coastguard Worker T15,
7992*61046927SAndroid Build Coastguard Worker T16,
7993*61046927SAndroid Build Coastguard Worker T17,
7994*61046927SAndroid Build Coastguard Worker T18,
7995*61046927SAndroid Build Coastguard Worker T19,
7996*61046927SAndroid Build Coastguard Worker T20,
7997*61046927SAndroid Build Coastguard Worker T21,
7998*61046927SAndroid Build Coastguard Worker T22,
7999*61046927SAndroid Build Coastguard Worker T23,
8000*61046927SAndroid Build Coastguard Worker T24,
8001*61046927SAndroid Build Coastguard Worker T25,
8002*61046927SAndroid Build Coastguard Worker T26,
8003*61046927SAndroid Build Coastguard Worker T27,
8004*61046927SAndroid Build Coastguard Worker T28,
8005*61046927SAndroid Build Coastguard Worker T29,
8006*61046927SAndroid Build Coastguard Worker NullType,
8007*61046927SAndroid Build Coastguard Worker NullType>
8008*61046927SAndroid Build Coastguard Worker {
8009*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
8010*61046927SAndroid Build Coastguard Worker T0,
8011*61046927SAndroid Build Coastguard Worker T1,
8012*61046927SAndroid Build Coastguard Worker T2,
8013*61046927SAndroid Build Coastguard Worker T3,
8014*61046927SAndroid Build Coastguard Worker T4,
8015*61046927SAndroid Build Coastguard Worker T5,
8016*61046927SAndroid Build Coastguard Worker T6,
8017*61046927SAndroid Build Coastguard Worker T7,
8018*61046927SAndroid Build Coastguard Worker T8,
8019*61046927SAndroid Build Coastguard Worker T9,
8020*61046927SAndroid Build Coastguard Worker T10,
8021*61046927SAndroid Build Coastguard Worker T11,
8022*61046927SAndroid Build Coastguard Worker T12,
8023*61046927SAndroid Build Coastguard Worker T13,
8024*61046927SAndroid Build Coastguard Worker T14,
8025*61046927SAndroid Build Coastguard Worker T15,
8026*61046927SAndroid Build Coastguard Worker T16,
8027*61046927SAndroid Build Coastguard Worker T17,
8028*61046927SAndroid Build Coastguard Worker T18,
8029*61046927SAndroid Build Coastguard Worker T19,
8030*61046927SAndroid Build Coastguard Worker T20,
8031*61046927SAndroid Build Coastguard Worker T21,
8032*61046927SAndroid Build Coastguard Worker T22,
8033*61046927SAndroid Build Coastguard Worker T23,
8034*61046927SAndroid Build Coastguard Worker T24,
8035*61046927SAndroid Build Coastguard Worker T25,
8036*61046927SAndroid Build Coastguard Worker T26,
8037*61046927SAndroid Build Coastguard Worker T27,
8038*61046927SAndroid Build Coastguard Worker T28,
8039*61046927SAndroid Build Coastguard Worker T29,
8040*61046927SAndroid Build Coastguard Worker NullType,
8041*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
8042*61046927SAndroid Build Coastguard Worker
8043*61046927SAndroid Build Coastguard Worker FunctorType functor_;
8044*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_8045*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
8046*61046927SAndroid Build Coastguard Worker functor_(functor)
8047*61046927SAndroid Build Coastguard Worker {
8048*61046927SAndroid Build Coastguard Worker
8049*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 30))
8050*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
8051*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
8052*61046927SAndroid Build Coastguard Worker #endif
8053*61046927SAndroid Build Coastguard Worker
8054*61046927SAndroid Build Coastguard Worker }
8055*61046927SAndroid Build Coastguard Worker
8056*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
8057*61046927SAndroid Build Coastguard Worker typedef Event result_type;
8058*61046927SAndroid Build Coastguard Worker
8059*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
8060*61046927SAndroid Build Coastguard Worker typedef Event type_(
8061*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
8062*61046927SAndroid Build Coastguard Worker T0,
8063*61046927SAndroid Build Coastguard Worker T1,
8064*61046927SAndroid Build Coastguard Worker T2,
8065*61046927SAndroid Build Coastguard Worker T3,
8066*61046927SAndroid Build Coastguard Worker T4,
8067*61046927SAndroid Build Coastguard Worker T5,
8068*61046927SAndroid Build Coastguard Worker T6,
8069*61046927SAndroid Build Coastguard Worker T7,
8070*61046927SAndroid Build Coastguard Worker T8,
8071*61046927SAndroid Build Coastguard Worker T9,
8072*61046927SAndroid Build Coastguard Worker T10,
8073*61046927SAndroid Build Coastguard Worker T11,
8074*61046927SAndroid Build Coastguard Worker T12,
8075*61046927SAndroid Build Coastguard Worker T13,
8076*61046927SAndroid Build Coastguard Worker T14,
8077*61046927SAndroid Build Coastguard Worker T15,
8078*61046927SAndroid Build Coastguard Worker T16,
8079*61046927SAndroid Build Coastguard Worker T17,
8080*61046927SAndroid Build Coastguard Worker T18,
8081*61046927SAndroid Build Coastguard Worker T19,
8082*61046927SAndroid Build Coastguard Worker T20,
8083*61046927SAndroid Build Coastguard Worker T21,
8084*61046927SAndroid Build Coastguard Worker T22,
8085*61046927SAndroid Build Coastguard Worker T23,
8086*61046927SAndroid Build Coastguard Worker T24,
8087*61046927SAndroid Build Coastguard Worker T25,
8088*61046927SAndroid Build Coastguard Worker T26,
8089*61046927SAndroid Build Coastguard Worker T27,
8090*61046927SAndroid Build Coastguard Worker T28,
8091*61046927SAndroid Build Coastguard Worker T29);
8092*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_8093*61046927SAndroid Build Coastguard Worker Event operator()(
8094*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
8095*61046927SAndroid Build Coastguard Worker T0 arg0,
8096*61046927SAndroid Build Coastguard Worker T1 arg1,
8097*61046927SAndroid Build Coastguard Worker T2 arg2,
8098*61046927SAndroid Build Coastguard Worker T3 arg3,
8099*61046927SAndroid Build Coastguard Worker T4 arg4,
8100*61046927SAndroid Build Coastguard Worker T5 arg5,
8101*61046927SAndroid Build Coastguard Worker T6 arg6,
8102*61046927SAndroid Build Coastguard Worker T7 arg7,
8103*61046927SAndroid Build Coastguard Worker T8 arg8,
8104*61046927SAndroid Build Coastguard Worker T9 arg9,
8105*61046927SAndroid Build Coastguard Worker T10 arg10,
8106*61046927SAndroid Build Coastguard Worker T11 arg11,
8107*61046927SAndroid Build Coastguard Worker T12 arg12,
8108*61046927SAndroid Build Coastguard Worker T13 arg13,
8109*61046927SAndroid Build Coastguard Worker T14 arg14,
8110*61046927SAndroid Build Coastguard Worker T15 arg15,
8111*61046927SAndroid Build Coastguard Worker T16 arg16,
8112*61046927SAndroid Build Coastguard Worker T17 arg17,
8113*61046927SAndroid Build Coastguard Worker T18 arg18,
8114*61046927SAndroid Build Coastguard Worker T19 arg19,
8115*61046927SAndroid Build Coastguard Worker T20 arg20,
8116*61046927SAndroid Build Coastguard Worker T21 arg21,
8117*61046927SAndroid Build Coastguard Worker T22 arg22,
8118*61046927SAndroid Build Coastguard Worker T23 arg23,
8119*61046927SAndroid Build Coastguard Worker T24 arg24,
8120*61046927SAndroid Build Coastguard Worker T25 arg25,
8121*61046927SAndroid Build Coastguard Worker T26 arg26,
8122*61046927SAndroid Build Coastguard Worker T27 arg27,
8123*61046927SAndroid Build Coastguard Worker T28 arg28,
8124*61046927SAndroid Build Coastguard Worker T29 arg29)
8125*61046927SAndroid Build Coastguard Worker {
8126*61046927SAndroid Build Coastguard Worker return functor_(
8127*61046927SAndroid Build Coastguard Worker enqueueArgs,
8128*61046927SAndroid Build Coastguard Worker arg0,
8129*61046927SAndroid Build Coastguard Worker arg1,
8130*61046927SAndroid Build Coastguard Worker arg2,
8131*61046927SAndroid Build Coastguard Worker arg3,
8132*61046927SAndroid Build Coastguard Worker arg4,
8133*61046927SAndroid Build Coastguard Worker arg5,
8134*61046927SAndroid Build Coastguard Worker arg6,
8135*61046927SAndroid Build Coastguard Worker arg7,
8136*61046927SAndroid Build Coastguard Worker arg8,
8137*61046927SAndroid Build Coastguard Worker arg9,
8138*61046927SAndroid Build Coastguard Worker arg10,
8139*61046927SAndroid Build Coastguard Worker arg11,
8140*61046927SAndroid Build Coastguard Worker arg12,
8141*61046927SAndroid Build Coastguard Worker arg13,
8142*61046927SAndroid Build Coastguard Worker arg14,
8143*61046927SAndroid Build Coastguard Worker arg15,
8144*61046927SAndroid Build Coastguard Worker arg16,
8145*61046927SAndroid Build Coastguard Worker arg17,
8146*61046927SAndroid Build Coastguard Worker arg18,
8147*61046927SAndroid Build Coastguard Worker arg19,
8148*61046927SAndroid Build Coastguard Worker arg20,
8149*61046927SAndroid Build Coastguard Worker arg21,
8150*61046927SAndroid Build Coastguard Worker arg22,
8151*61046927SAndroid Build Coastguard Worker arg23,
8152*61046927SAndroid Build Coastguard Worker arg24,
8153*61046927SAndroid Build Coastguard Worker arg25,
8154*61046927SAndroid Build Coastguard Worker arg26,
8155*61046927SAndroid Build Coastguard Worker arg27,
8156*61046927SAndroid Build Coastguard Worker arg28,
8157*61046927SAndroid Build Coastguard Worker arg29);
8158*61046927SAndroid Build Coastguard Worker }
8159*61046927SAndroid Build Coastguard Worker
8160*61046927SAndroid Build Coastguard Worker
8161*61046927SAndroid Build Coastguard Worker };
8162*61046927SAndroid Build Coastguard Worker
8163*61046927SAndroid Build Coastguard Worker template<
8164*61046927SAndroid Build Coastguard Worker typename T0,
8165*61046927SAndroid Build Coastguard Worker typename T1,
8166*61046927SAndroid Build Coastguard Worker typename T2,
8167*61046927SAndroid Build Coastguard Worker typename T3,
8168*61046927SAndroid Build Coastguard Worker typename T4,
8169*61046927SAndroid Build Coastguard Worker typename T5,
8170*61046927SAndroid Build Coastguard Worker typename T6,
8171*61046927SAndroid Build Coastguard Worker typename T7,
8172*61046927SAndroid Build Coastguard Worker typename T8,
8173*61046927SAndroid Build Coastguard Worker typename T9,
8174*61046927SAndroid Build Coastguard Worker typename T10,
8175*61046927SAndroid Build Coastguard Worker typename T11,
8176*61046927SAndroid Build Coastguard Worker typename T12,
8177*61046927SAndroid Build Coastguard Worker typename T13,
8178*61046927SAndroid Build Coastguard Worker typename T14,
8179*61046927SAndroid Build Coastguard Worker typename T15,
8180*61046927SAndroid Build Coastguard Worker typename T16,
8181*61046927SAndroid Build Coastguard Worker typename T17,
8182*61046927SAndroid Build Coastguard Worker typename T18,
8183*61046927SAndroid Build Coastguard Worker typename T19,
8184*61046927SAndroid Build Coastguard Worker typename T20,
8185*61046927SAndroid Build Coastguard Worker typename T21,
8186*61046927SAndroid Build Coastguard Worker typename T22,
8187*61046927SAndroid Build Coastguard Worker typename T23,
8188*61046927SAndroid Build Coastguard Worker typename T24,
8189*61046927SAndroid Build Coastguard Worker typename T25,
8190*61046927SAndroid Build Coastguard Worker typename T26,
8191*61046927SAndroid Build Coastguard Worker typename T27,
8192*61046927SAndroid Build Coastguard Worker typename T28>
8193*61046927SAndroid Build Coastguard Worker struct functionImplementation_
8194*61046927SAndroid Build Coastguard Worker < T0,
8195*61046927SAndroid Build Coastguard Worker T1,
8196*61046927SAndroid Build Coastguard Worker T2,
8197*61046927SAndroid Build Coastguard Worker T3,
8198*61046927SAndroid Build Coastguard Worker T4,
8199*61046927SAndroid Build Coastguard Worker T5,
8200*61046927SAndroid Build Coastguard Worker T6,
8201*61046927SAndroid Build Coastguard Worker T7,
8202*61046927SAndroid Build Coastguard Worker T8,
8203*61046927SAndroid Build Coastguard Worker T9,
8204*61046927SAndroid Build Coastguard Worker T10,
8205*61046927SAndroid Build Coastguard Worker T11,
8206*61046927SAndroid Build Coastguard Worker T12,
8207*61046927SAndroid Build Coastguard Worker T13,
8208*61046927SAndroid Build Coastguard Worker T14,
8209*61046927SAndroid Build Coastguard Worker T15,
8210*61046927SAndroid Build Coastguard Worker T16,
8211*61046927SAndroid Build Coastguard Worker T17,
8212*61046927SAndroid Build Coastguard Worker T18,
8213*61046927SAndroid Build Coastguard Worker T19,
8214*61046927SAndroid Build Coastguard Worker T20,
8215*61046927SAndroid Build Coastguard Worker T21,
8216*61046927SAndroid Build Coastguard Worker T22,
8217*61046927SAndroid Build Coastguard Worker T23,
8218*61046927SAndroid Build Coastguard Worker T24,
8219*61046927SAndroid Build Coastguard Worker T25,
8220*61046927SAndroid Build Coastguard Worker T26,
8221*61046927SAndroid Build Coastguard Worker T27,
8222*61046927SAndroid Build Coastguard Worker T28,
8223*61046927SAndroid Build Coastguard Worker NullType,
8224*61046927SAndroid Build Coastguard Worker NullType,
8225*61046927SAndroid Build Coastguard Worker NullType>
8226*61046927SAndroid Build Coastguard Worker {
8227*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
8228*61046927SAndroid Build Coastguard Worker T0,
8229*61046927SAndroid Build Coastguard Worker T1,
8230*61046927SAndroid Build Coastguard Worker T2,
8231*61046927SAndroid Build Coastguard Worker T3,
8232*61046927SAndroid Build Coastguard Worker T4,
8233*61046927SAndroid Build Coastguard Worker T5,
8234*61046927SAndroid Build Coastguard Worker T6,
8235*61046927SAndroid Build Coastguard Worker T7,
8236*61046927SAndroid Build Coastguard Worker T8,
8237*61046927SAndroid Build Coastguard Worker T9,
8238*61046927SAndroid Build Coastguard Worker T10,
8239*61046927SAndroid Build Coastguard Worker T11,
8240*61046927SAndroid Build Coastguard Worker T12,
8241*61046927SAndroid Build Coastguard Worker T13,
8242*61046927SAndroid Build Coastguard Worker T14,
8243*61046927SAndroid Build Coastguard Worker T15,
8244*61046927SAndroid Build Coastguard Worker T16,
8245*61046927SAndroid Build Coastguard Worker T17,
8246*61046927SAndroid Build Coastguard Worker T18,
8247*61046927SAndroid Build Coastguard Worker T19,
8248*61046927SAndroid Build Coastguard Worker T20,
8249*61046927SAndroid Build Coastguard Worker T21,
8250*61046927SAndroid Build Coastguard Worker T22,
8251*61046927SAndroid Build Coastguard Worker T23,
8252*61046927SAndroid Build Coastguard Worker T24,
8253*61046927SAndroid Build Coastguard Worker T25,
8254*61046927SAndroid Build Coastguard Worker T26,
8255*61046927SAndroid Build Coastguard Worker T27,
8256*61046927SAndroid Build Coastguard Worker T28,
8257*61046927SAndroid Build Coastguard Worker NullType,
8258*61046927SAndroid Build Coastguard Worker NullType,
8259*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
8260*61046927SAndroid Build Coastguard Worker
8261*61046927SAndroid Build Coastguard Worker FunctorType functor_;
8262*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_8263*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
8264*61046927SAndroid Build Coastguard Worker functor_(functor)
8265*61046927SAndroid Build Coastguard Worker {
8266*61046927SAndroid Build Coastguard Worker
8267*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 29))
8268*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
8269*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
8270*61046927SAndroid Build Coastguard Worker #endif
8271*61046927SAndroid Build Coastguard Worker
8272*61046927SAndroid Build Coastguard Worker }
8273*61046927SAndroid Build Coastguard Worker
8274*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
8275*61046927SAndroid Build Coastguard Worker typedef Event result_type;
8276*61046927SAndroid Build Coastguard Worker
8277*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
8278*61046927SAndroid Build Coastguard Worker typedef Event type_(
8279*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
8280*61046927SAndroid Build Coastguard Worker T0,
8281*61046927SAndroid Build Coastguard Worker T1,
8282*61046927SAndroid Build Coastguard Worker T2,
8283*61046927SAndroid Build Coastguard Worker T3,
8284*61046927SAndroid Build Coastguard Worker T4,
8285*61046927SAndroid Build Coastguard Worker T5,
8286*61046927SAndroid Build Coastguard Worker T6,
8287*61046927SAndroid Build Coastguard Worker T7,
8288*61046927SAndroid Build Coastguard Worker T8,
8289*61046927SAndroid Build Coastguard Worker T9,
8290*61046927SAndroid Build Coastguard Worker T10,
8291*61046927SAndroid Build Coastguard Worker T11,
8292*61046927SAndroid Build Coastguard Worker T12,
8293*61046927SAndroid Build Coastguard Worker T13,
8294*61046927SAndroid Build Coastguard Worker T14,
8295*61046927SAndroid Build Coastguard Worker T15,
8296*61046927SAndroid Build Coastguard Worker T16,
8297*61046927SAndroid Build Coastguard Worker T17,
8298*61046927SAndroid Build Coastguard Worker T18,
8299*61046927SAndroid Build Coastguard Worker T19,
8300*61046927SAndroid Build Coastguard Worker T20,
8301*61046927SAndroid Build Coastguard Worker T21,
8302*61046927SAndroid Build Coastguard Worker T22,
8303*61046927SAndroid Build Coastguard Worker T23,
8304*61046927SAndroid Build Coastguard Worker T24,
8305*61046927SAndroid Build Coastguard Worker T25,
8306*61046927SAndroid Build Coastguard Worker T26,
8307*61046927SAndroid Build Coastguard Worker T27,
8308*61046927SAndroid Build Coastguard Worker T28);
8309*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_8310*61046927SAndroid Build Coastguard Worker Event operator()(
8311*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
8312*61046927SAndroid Build Coastguard Worker T0 arg0,
8313*61046927SAndroid Build Coastguard Worker T1 arg1,
8314*61046927SAndroid Build Coastguard Worker T2 arg2,
8315*61046927SAndroid Build Coastguard Worker T3 arg3,
8316*61046927SAndroid Build Coastguard Worker T4 arg4,
8317*61046927SAndroid Build Coastguard Worker T5 arg5,
8318*61046927SAndroid Build Coastguard Worker T6 arg6,
8319*61046927SAndroid Build Coastguard Worker T7 arg7,
8320*61046927SAndroid Build Coastguard Worker T8 arg8,
8321*61046927SAndroid Build Coastguard Worker T9 arg9,
8322*61046927SAndroid Build Coastguard Worker T10 arg10,
8323*61046927SAndroid Build Coastguard Worker T11 arg11,
8324*61046927SAndroid Build Coastguard Worker T12 arg12,
8325*61046927SAndroid Build Coastguard Worker T13 arg13,
8326*61046927SAndroid Build Coastguard Worker T14 arg14,
8327*61046927SAndroid Build Coastguard Worker T15 arg15,
8328*61046927SAndroid Build Coastguard Worker T16 arg16,
8329*61046927SAndroid Build Coastguard Worker T17 arg17,
8330*61046927SAndroid Build Coastguard Worker T18 arg18,
8331*61046927SAndroid Build Coastguard Worker T19 arg19,
8332*61046927SAndroid Build Coastguard Worker T20 arg20,
8333*61046927SAndroid Build Coastguard Worker T21 arg21,
8334*61046927SAndroid Build Coastguard Worker T22 arg22,
8335*61046927SAndroid Build Coastguard Worker T23 arg23,
8336*61046927SAndroid Build Coastguard Worker T24 arg24,
8337*61046927SAndroid Build Coastguard Worker T25 arg25,
8338*61046927SAndroid Build Coastguard Worker T26 arg26,
8339*61046927SAndroid Build Coastguard Worker T27 arg27,
8340*61046927SAndroid Build Coastguard Worker T28 arg28)
8341*61046927SAndroid Build Coastguard Worker {
8342*61046927SAndroid Build Coastguard Worker return functor_(
8343*61046927SAndroid Build Coastguard Worker enqueueArgs,
8344*61046927SAndroid Build Coastguard Worker arg0,
8345*61046927SAndroid Build Coastguard Worker arg1,
8346*61046927SAndroid Build Coastguard Worker arg2,
8347*61046927SAndroid Build Coastguard Worker arg3,
8348*61046927SAndroid Build Coastguard Worker arg4,
8349*61046927SAndroid Build Coastguard Worker arg5,
8350*61046927SAndroid Build Coastguard Worker arg6,
8351*61046927SAndroid Build Coastguard Worker arg7,
8352*61046927SAndroid Build Coastguard Worker arg8,
8353*61046927SAndroid Build Coastguard Worker arg9,
8354*61046927SAndroid Build Coastguard Worker arg10,
8355*61046927SAndroid Build Coastguard Worker arg11,
8356*61046927SAndroid Build Coastguard Worker arg12,
8357*61046927SAndroid Build Coastguard Worker arg13,
8358*61046927SAndroid Build Coastguard Worker arg14,
8359*61046927SAndroid Build Coastguard Worker arg15,
8360*61046927SAndroid Build Coastguard Worker arg16,
8361*61046927SAndroid Build Coastguard Worker arg17,
8362*61046927SAndroid Build Coastguard Worker arg18,
8363*61046927SAndroid Build Coastguard Worker arg19,
8364*61046927SAndroid Build Coastguard Worker arg20,
8365*61046927SAndroid Build Coastguard Worker arg21,
8366*61046927SAndroid Build Coastguard Worker arg22,
8367*61046927SAndroid Build Coastguard Worker arg23,
8368*61046927SAndroid Build Coastguard Worker arg24,
8369*61046927SAndroid Build Coastguard Worker arg25,
8370*61046927SAndroid Build Coastguard Worker arg26,
8371*61046927SAndroid Build Coastguard Worker arg27,
8372*61046927SAndroid Build Coastguard Worker arg28);
8373*61046927SAndroid Build Coastguard Worker }
8374*61046927SAndroid Build Coastguard Worker
8375*61046927SAndroid Build Coastguard Worker
8376*61046927SAndroid Build Coastguard Worker };
8377*61046927SAndroid Build Coastguard Worker
8378*61046927SAndroid Build Coastguard Worker template<
8379*61046927SAndroid Build Coastguard Worker typename T0,
8380*61046927SAndroid Build Coastguard Worker typename T1,
8381*61046927SAndroid Build Coastguard Worker typename T2,
8382*61046927SAndroid Build Coastguard Worker typename T3,
8383*61046927SAndroid Build Coastguard Worker typename T4,
8384*61046927SAndroid Build Coastguard Worker typename T5,
8385*61046927SAndroid Build Coastguard Worker typename T6,
8386*61046927SAndroid Build Coastguard Worker typename T7,
8387*61046927SAndroid Build Coastguard Worker typename T8,
8388*61046927SAndroid Build Coastguard Worker typename T9,
8389*61046927SAndroid Build Coastguard Worker typename T10,
8390*61046927SAndroid Build Coastguard Worker typename T11,
8391*61046927SAndroid Build Coastguard Worker typename T12,
8392*61046927SAndroid Build Coastguard Worker typename T13,
8393*61046927SAndroid Build Coastguard Worker typename T14,
8394*61046927SAndroid Build Coastguard Worker typename T15,
8395*61046927SAndroid Build Coastguard Worker typename T16,
8396*61046927SAndroid Build Coastguard Worker typename T17,
8397*61046927SAndroid Build Coastguard Worker typename T18,
8398*61046927SAndroid Build Coastguard Worker typename T19,
8399*61046927SAndroid Build Coastguard Worker typename T20,
8400*61046927SAndroid Build Coastguard Worker typename T21,
8401*61046927SAndroid Build Coastguard Worker typename T22,
8402*61046927SAndroid Build Coastguard Worker typename T23,
8403*61046927SAndroid Build Coastguard Worker typename T24,
8404*61046927SAndroid Build Coastguard Worker typename T25,
8405*61046927SAndroid Build Coastguard Worker typename T26,
8406*61046927SAndroid Build Coastguard Worker typename T27>
8407*61046927SAndroid Build Coastguard Worker struct functionImplementation_
8408*61046927SAndroid Build Coastguard Worker < T0,
8409*61046927SAndroid Build Coastguard Worker T1,
8410*61046927SAndroid Build Coastguard Worker T2,
8411*61046927SAndroid Build Coastguard Worker T3,
8412*61046927SAndroid Build Coastguard Worker T4,
8413*61046927SAndroid Build Coastguard Worker T5,
8414*61046927SAndroid Build Coastguard Worker T6,
8415*61046927SAndroid Build Coastguard Worker T7,
8416*61046927SAndroid Build Coastguard Worker T8,
8417*61046927SAndroid Build Coastguard Worker T9,
8418*61046927SAndroid Build Coastguard Worker T10,
8419*61046927SAndroid Build Coastguard Worker T11,
8420*61046927SAndroid Build Coastguard Worker T12,
8421*61046927SAndroid Build Coastguard Worker T13,
8422*61046927SAndroid Build Coastguard Worker T14,
8423*61046927SAndroid Build Coastguard Worker T15,
8424*61046927SAndroid Build Coastguard Worker T16,
8425*61046927SAndroid Build Coastguard Worker T17,
8426*61046927SAndroid Build Coastguard Worker T18,
8427*61046927SAndroid Build Coastguard Worker T19,
8428*61046927SAndroid Build Coastguard Worker T20,
8429*61046927SAndroid Build Coastguard Worker T21,
8430*61046927SAndroid Build Coastguard Worker T22,
8431*61046927SAndroid Build Coastguard Worker T23,
8432*61046927SAndroid Build Coastguard Worker T24,
8433*61046927SAndroid Build Coastguard Worker T25,
8434*61046927SAndroid Build Coastguard Worker T26,
8435*61046927SAndroid Build Coastguard Worker T27,
8436*61046927SAndroid Build Coastguard Worker NullType,
8437*61046927SAndroid Build Coastguard Worker NullType,
8438*61046927SAndroid Build Coastguard Worker NullType,
8439*61046927SAndroid Build Coastguard Worker NullType>
8440*61046927SAndroid Build Coastguard Worker {
8441*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
8442*61046927SAndroid Build Coastguard Worker T0,
8443*61046927SAndroid Build Coastguard Worker T1,
8444*61046927SAndroid Build Coastguard Worker T2,
8445*61046927SAndroid Build Coastguard Worker T3,
8446*61046927SAndroid Build Coastguard Worker T4,
8447*61046927SAndroid Build Coastguard Worker T5,
8448*61046927SAndroid Build Coastguard Worker T6,
8449*61046927SAndroid Build Coastguard Worker T7,
8450*61046927SAndroid Build Coastguard Worker T8,
8451*61046927SAndroid Build Coastguard Worker T9,
8452*61046927SAndroid Build Coastguard Worker T10,
8453*61046927SAndroid Build Coastguard Worker T11,
8454*61046927SAndroid Build Coastguard Worker T12,
8455*61046927SAndroid Build Coastguard Worker T13,
8456*61046927SAndroid Build Coastguard Worker T14,
8457*61046927SAndroid Build Coastguard Worker T15,
8458*61046927SAndroid Build Coastguard Worker T16,
8459*61046927SAndroid Build Coastguard Worker T17,
8460*61046927SAndroid Build Coastguard Worker T18,
8461*61046927SAndroid Build Coastguard Worker T19,
8462*61046927SAndroid Build Coastguard Worker T20,
8463*61046927SAndroid Build Coastguard Worker T21,
8464*61046927SAndroid Build Coastguard Worker T22,
8465*61046927SAndroid Build Coastguard Worker T23,
8466*61046927SAndroid Build Coastguard Worker T24,
8467*61046927SAndroid Build Coastguard Worker T25,
8468*61046927SAndroid Build Coastguard Worker T26,
8469*61046927SAndroid Build Coastguard Worker T27,
8470*61046927SAndroid Build Coastguard Worker NullType,
8471*61046927SAndroid Build Coastguard Worker NullType,
8472*61046927SAndroid Build Coastguard Worker NullType,
8473*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
8474*61046927SAndroid Build Coastguard Worker
8475*61046927SAndroid Build Coastguard Worker FunctorType functor_;
8476*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_8477*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
8478*61046927SAndroid Build Coastguard Worker functor_(functor)
8479*61046927SAndroid Build Coastguard Worker {
8480*61046927SAndroid Build Coastguard Worker
8481*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 28))
8482*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
8483*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
8484*61046927SAndroid Build Coastguard Worker #endif
8485*61046927SAndroid Build Coastguard Worker
8486*61046927SAndroid Build Coastguard Worker }
8487*61046927SAndroid Build Coastguard Worker
8488*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
8489*61046927SAndroid Build Coastguard Worker typedef Event result_type;
8490*61046927SAndroid Build Coastguard Worker
8491*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
8492*61046927SAndroid Build Coastguard Worker typedef Event type_(
8493*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
8494*61046927SAndroid Build Coastguard Worker T0,
8495*61046927SAndroid Build Coastguard Worker T1,
8496*61046927SAndroid Build Coastguard Worker T2,
8497*61046927SAndroid Build Coastguard Worker T3,
8498*61046927SAndroid Build Coastguard Worker T4,
8499*61046927SAndroid Build Coastguard Worker T5,
8500*61046927SAndroid Build Coastguard Worker T6,
8501*61046927SAndroid Build Coastguard Worker T7,
8502*61046927SAndroid Build Coastguard Worker T8,
8503*61046927SAndroid Build Coastguard Worker T9,
8504*61046927SAndroid Build Coastguard Worker T10,
8505*61046927SAndroid Build Coastguard Worker T11,
8506*61046927SAndroid Build Coastguard Worker T12,
8507*61046927SAndroid Build Coastguard Worker T13,
8508*61046927SAndroid Build Coastguard Worker T14,
8509*61046927SAndroid Build Coastguard Worker T15,
8510*61046927SAndroid Build Coastguard Worker T16,
8511*61046927SAndroid Build Coastguard Worker T17,
8512*61046927SAndroid Build Coastguard Worker T18,
8513*61046927SAndroid Build Coastguard Worker T19,
8514*61046927SAndroid Build Coastguard Worker T20,
8515*61046927SAndroid Build Coastguard Worker T21,
8516*61046927SAndroid Build Coastguard Worker T22,
8517*61046927SAndroid Build Coastguard Worker T23,
8518*61046927SAndroid Build Coastguard Worker T24,
8519*61046927SAndroid Build Coastguard Worker T25,
8520*61046927SAndroid Build Coastguard Worker T26,
8521*61046927SAndroid Build Coastguard Worker T27);
8522*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_8523*61046927SAndroid Build Coastguard Worker Event operator()(
8524*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
8525*61046927SAndroid Build Coastguard Worker T0 arg0,
8526*61046927SAndroid Build Coastguard Worker T1 arg1,
8527*61046927SAndroid Build Coastguard Worker T2 arg2,
8528*61046927SAndroid Build Coastguard Worker T3 arg3,
8529*61046927SAndroid Build Coastguard Worker T4 arg4,
8530*61046927SAndroid Build Coastguard Worker T5 arg5,
8531*61046927SAndroid Build Coastguard Worker T6 arg6,
8532*61046927SAndroid Build Coastguard Worker T7 arg7,
8533*61046927SAndroid Build Coastguard Worker T8 arg8,
8534*61046927SAndroid Build Coastguard Worker T9 arg9,
8535*61046927SAndroid Build Coastguard Worker T10 arg10,
8536*61046927SAndroid Build Coastguard Worker T11 arg11,
8537*61046927SAndroid Build Coastguard Worker T12 arg12,
8538*61046927SAndroid Build Coastguard Worker T13 arg13,
8539*61046927SAndroid Build Coastguard Worker T14 arg14,
8540*61046927SAndroid Build Coastguard Worker T15 arg15,
8541*61046927SAndroid Build Coastguard Worker T16 arg16,
8542*61046927SAndroid Build Coastguard Worker T17 arg17,
8543*61046927SAndroid Build Coastguard Worker T18 arg18,
8544*61046927SAndroid Build Coastguard Worker T19 arg19,
8545*61046927SAndroid Build Coastguard Worker T20 arg20,
8546*61046927SAndroid Build Coastguard Worker T21 arg21,
8547*61046927SAndroid Build Coastguard Worker T22 arg22,
8548*61046927SAndroid Build Coastguard Worker T23 arg23,
8549*61046927SAndroid Build Coastguard Worker T24 arg24,
8550*61046927SAndroid Build Coastguard Worker T25 arg25,
8551*61046927SAndroid Build Coastguard Worker T26 arg26,
8552*61046927SAndroid Build Coastguard Worker T27 arg27)
8553*61046927SAndroid Build Coastguard Worker {
8554*61046927SAndroid Build Coastguard Worker return functor_(
8555*61046927SAndroid Build Coastguard Worker enqueueArgs,
8556*61046927SAndroid Build Coastguard Worker arg0,
8557*61046927SAndroid Build Coastguard Worker arg1,
8558*61046927SAndroid Build Coastguard Worker arg2,
8559*61046927SAndroid Build Coastguard Worker arg3,
8560*61046927SAndroid Build Coastguard Worker arg4,
8561*61046927SAndroid Build Coastguard Worker arg5,
8562*61046927SAndroid Build Coastguard Worker arg6,
8563*61046927SAndroid Build Coastguard Worker arg7,
8564*61046927SAndroid Build Coastguard Worker arg8,
8565*61046927SAndroid Build Coastguard Worker arg9,
8566*61046927SAndroid Build Coastguard Worker arg10,
8567*61046927SAndroid Build Coastguard Worker arg11,
8568*61046927SAndroid Build Coastguard Worker arg12,
8569*61046927SAndroid Build Coastguard Worker arg13,
8570*61046927SAndroid Build Coastguard Worker arg14,
8571*61046927SAndroid Build Coastguard Worker arg15,
8572*61046927SAndroid Build Coastguard Worker arg16,
8573*61046927SAndroid Build Coastguard Worker arg17,
8574*61046927SAndroid Build Coastguard Worker arg18,
8575*61046927SAndroid Build Coastguard Worker arg19,
8576*61046927SAndroid Build Coastguard Worker arg20,
8577*61046927SAndroid Build Coastguard Worker arg21,
8578*61046927SAndroid Build Coastguard Worker arg22,
8579*61046927SAndroid Build Coastguard Worker arg23,
8580*61046927SAndroid Build Coastguard Worker arg24,
8581*61046927SAndroid Build Coastguard Worker arg25,
8582*61046927SAndroid Build Coastguard Worker arg26,
8583*61046927SAndroid Build Coastguard Worker arg27);
8584*61046927SAndroid Build Coastguard Worker }
8585*61046927SAndroid Build Coastguard Worker
8586*61046927SAndroid Build Coastguard Worker
8587*61046927SAndroid Build Coastguard Worker };
8588*61046927SAndroid Build Coastguard Worker
8589*61046927SAndroid Build Coastguard Worker template<
8590*61046927SAndroid Build Coastguard Worker typename T0,
8591*61046927SAndroid Build Coastguard Worker typename T1,
8592*61046927SAndroid Build Coastguard Worker typename T2,
8593*61046927SAndroid Build Coastguard Worker typename T3,
8594*61046927SAndroid Build Coastguard Worker typename T4,
8595*61046927SAndroid Build Coastguard Worker typename T5,
8596*61046927SAndroid Build Coastguard Worker typename T6,
8597*61046927SAndroid Build Coastguard Worker typename T7,
8598*61046927SAndroid Build Coastguard Worker typename T8,
8599*61046927SAndroid Build Coastguard Worker typename T9,
8600*61046927SAndroid Build Coastguard Worker typename T10,
8601*61046927SAndroid Build Coastguard Worker typename T11,
8602*61046927SAndroid Build Coastguard Worker typename T12,
8603*61046927SAndroid Build Coastguard Worker typename T13,
8604*61046927SAndroid Build Coastguard Worker typename T14,
8605*61046927SAndroid Build Coastguard Worker typename T15,
8606*61046927SAndroid Build Coastguard Worker typename T16,
8607*61046927SAndroid Build Coastguard Worker typename T17,
8608*61046927SAndroid Build Coastguard Worker typename T18,
8609*61046927SAndroid Build Coastguard Worker typename T19,
8610*61046927SAndroid Build Coastguard Worker typename T20,
8611*61046927SAndroid Build Coastguard Worker typename T21,
8612*61046927SAndroid Build Coastguard Worker typename T22,
8613*61046927SAndroid Build Coastguard Worker typename T23,
8614*61046927SAndroid Build Coastguard Worker typename T24,
8615*61046927SAndroid Build Coastguard Worker typename T25,
8616*61046927SAndroid Build Coastguard Worker typename T26>
8617*61046927SAndroid Build Coastguard Worker struct functionImplementation_
8618*61046927SAndroid Build Coastguard Worker < T0,
8619*61046927SAndroid Build Coastguard Worker T1,
8620*61046927SAndroid Build Coastguard Worker T2,
8621*61046927SAndroid Build Coastguard Worker T3,
8622*61046927SAndroid Build Coastguard Worker T4,
8623*61046927SAndroid Build Coastguard Worker T5,
8624*61046927SAndroid Build Coastguard Worker T6,
8625*61046927SAndroid Build Coastguard Worker T7,
8626*61046927SAndroid Build Coastguard Worker T8,
8627*61046927SAndroid Build Coastguard Worker T9,
8628*61046927SAndroid Build Coastguard Worker T10,
8629*61046927SAndroid Build Coastguard Worker T11,
8630*61046927SAndroid Build Coastguard Worker T12,
8631*61046927SAndroid Build Coastguard Worker T13,
8632*61046927SAndroid Build Coastguard Worker T14,
8633*61046927SAndroid Build Coastguard Worker T15,
8634*61046927SAndroid Build Coastguard Worker T16,
8635*61046927SAndroid Build Coastguard Worker T17,
8636*61046927SAndroid Build Coastguard Worker T18,
8637*61046927SAndroid Build Coastguard Worker T19,
8638*61046927SAndroid Build Coastguard Worker T20,
8639*61046927SAndroid Build Coastguard Worker T21,
8640*61046927SAndroid Build Coastguard Worker T22,
8641*61046927SAndroid Build Coastguard Worker T23,
8642*61046927SAndroid Build Coastguard Worker T24,
8643*61046927SAndroid Build Coastguard Worker T25,
8644*61046927SAndroid Build Coastguard Worker T26,
8645*61046927SAndroid Build Coastguard Worker NullType,
8646*61046927SAndroid Build Coastguard Worker NullType,
8647*61046927SAndroid Build Coastguard Worker NullType,
8648*61046927SAndroid Build Coastguard Worker NullType,
8649*61046927SAndroid Build Coastguard Worker NullType>
8650*61046927SAndroid Build Coastguard Worker {
8651*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
8652*61046927SAndroid Build Coastguard Worker T0,
8653*61046927SAndroid Build Coastguard Worker T1,
8654*61046927SAndroid Build Coastguard Worker T2,
8655*61046927SAndroid Build Coastguard Worker T3,
8656*61046927SAndroid Build Coastguard Worker T4,
8657*61046927SAndroid Build Coastguard Worker T5,
8658*61046927SAndroid Build Coastguard Worker T6,
8659*61046927SAndroid Build Coastguard Worker T7,
8660*61046927SAndroid Build Coastguard Worker T8,
8661*61046927SAndroid Build Coastguard Worker T9,
8662*61046927SAndroid Build Coastguard Worker T10,
8663*61046927SAndroid Build Coastguard Worker T11,
8664*61046927SAndroid Build Coastguard Worker T12,
8665*61046927SAndroid Build Coastguard Worker T13,
8666*61046927SAndroid Build Coastguard Worker T14,
8667*61046927SAndroid Build Coastguard Worker T15,
8668*61046927SAndroid Build Coastguard Worker T16,
8669*61046927SAndroid Build Coastguard Worker T17,
8670*61046927SAndroid Build Coastguard Worker T18,
8671*61046927SAndroid Build Coastguard Worker T19,
8672*61046927SAndroid Build Coastguard Worker T20,
8673*61046927SAndroid Build Coastguard Worker T21,
8674*61046927SAndroid Build Coastguard Worker T22,
8675*61046927SAndroid Build Coastguard Worker T23,
8676*61046927SAndroid Build Coastguard Worker T24,
8677*61046927SAndroid Build Coastguard Worker T25,
8678*61046927SAndroid Build Coastguard Worker T26,
8679*61046927SAndroid Build Coastguard Worker NullType,
8680*61046927SAndroid Build Coastguard Worker NullType,
8681*61046927SAndroid Build Coastguard Worker NullType,
8682*61046927SAndroid Build Coastguard Worker NullType,
8683*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
8684*61046927SAndroid Build Coastguard Worker
8685*61046927SAndroid Build Coastguard Worker FunctorType functor_;
8686*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_8687*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
8688*61046927SAndroid Build Coastguard Worker functor_(functor)
8689*61046927SAndroid Build Coastguard Worker {
8690*61046927SAndroid Build Coastguard Worker
8691*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 27))
8692*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
8693*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
8694*61046927SAndroid Build Coastguard Worker #endif
8695*61046927SAndroid Build Coastguard Worker
8696*61046927SAndroid Build Coastguard Worker }
8697*61046927SAndroid Build Coastguard Worker
8698*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
8699*61046927SAndroid Build Coastguard Worker typedef Event result_type;
8700*61046927SAndroid Build Coastguard Worker
8701*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
8702*61046927SAndroid Build Coastguard Worker typedef Event type_(
8703*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
8704*61046927SAndroid Build Coastguard Worker T0,
8705*61046927SAndroid Build Coastguard Worker T1,
8706*61046927SAndroid Build Coastguard Worker T2,
8707*61046927SAndroid Build Coastguard Worker T3,
8708*61046927SAndroid Build Coastguard Worker T4,
8709*61046927SAndroid Build Coastguard Worker T5,
8710*61046927SAndroid Build Coastguard Worker T6,
8711*61046927SAndroid Build Coastguard Worker T7,
8712*61046927SAndroid Build Coastguard Worker T8,
8713*61046927SAndroid Build Coastguard Worker T9,
8714*61046927SAndroid Build Coastguard Worker T10,
8715*61046927SAndroid Build Coastguard Worker T11,
8716*61046927SAndroid Build Coastguard Worker T12,
8717*61046927SAndroid Build Coastguard Worker T13,
8718*61046927SAndroid Build Coastguard Worker T14,
8719*61046927SAndroid Build Coastguard Worker T15,
8720*61046927SAndroid Build Coastguard Worker T16,
8721*61046927SAndroid Build Coastguard Worker T17,
8722*61046927SAndroid Build Coastguard Worker T18,
8723*61046927SAndroid Build Coastguard Worker T19,
8724*61046927SAndroid Build Coastguard Worker T20,
8725*61046927SAndroid Build Coastguard Worker T21,
8726*61046927SAndroid Build Coastguard Worker T22,
8727*61046927SAndroid Build Coastguard Worker T23,
8728*61046927SAndroid Build Coastguard Worker T24,
8729*61046927SAndroid Build Coastguard Worker T25,
8730*61046927SAndroid Build Coastguard Worker T26);
8731*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_8732*61046927SAndroid Build Coastguard Worker Event operator()(
8733*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
8734*61046927SAndroid Build Coastguard Worker T0 arg0,
8735*61046927SAndroid Build Coastguard Worker T1 arg1,
8736*61046927SAndroid Build Coastguard Worker T2 arg2,
8737*61046927SAndroid Build Coastguard Worker T3 arg3,
8738*61046927SAndroid Build Coastguard Worker T4 arg4,
8739*61046927SAndroid Build Coastguard Worker T5 arg5,
8740*61046927SAndroid Build Coastguard Worker T6 arg6,
8741*61046927SAndroid Build Coastguard Worker T7 arg7,
8742*61046927SAndroid Build Coastguard Worker T8 arg8,
8743*61046927SAndroid Build Coastguard Worker T9 arg9,
8744*61046927SAndroid Build Coastguard Worker T10 arg10,
8745*61046927SAndroid Build Coastguard Worker T11 arg11,
8746*61046927SAndroid Build Coastguard Worker T12 arg12,
8747*61046927SAndroid Build Coastguard Worker T13 arg13,
8748*61046927SAndroid Build Coastguard Worker T14 arg14,
8749*61046927SAndroid Build Coastguard Worker T15 arg15,
8750*61046927SAndroid Build Coastguard Worker T16 arg16,
8751*61046927SAndroid Build Coastguard Worker T17 arg17,
8752*61046927SAndroid Build Coastguard Worker T18 arg18,
8753*61046927SAndroid Build Coastguard Worker T19 arg19,
8754*61046927SAndroid Build Coastguard Worker T20 arg20,
8755*61046927SAndroid Build Coastguard Worker T21 arg21,
8756*61046927SAndroid Build Coastguard Worker T22 arg22,
8757*61046927SAndroid Build Coastguard Worker T23 arg23,
8758*61046927SAndroid Build Coastguard Worker T24 arg24,
8759*61046927SAndroid Build Coastguard Worker T25 arg25,
8760*61046927SAndroid Build Coastguard Worker T26 arg26)
8761*61046927SAndroid Build Coastguard Worker {
8762*61046927SAndroid Build Coastguard Worker return functor_(
8763*61046927SAndroid Build Coastguard Worker enqueueArgs,
8764*61046927SAndroid Build Coastguard Worker arg0,
8765*61046927SAndroid Build Coastguard Worker arg1,
8766*61046927SAndroid Build Coastguard Worker arg2,
8767*61046927SAndroid Build Coastguard Worker arg3,
8768*61046927SAndroid Build Coastguard Worker arg4,
8769*61046927SAndroid Build Coastguard Worker arg5,
8770*61046927SAndroid Build Coastguard Worker arg6,
8771*61046927SAndroid Build Coastguard Worker arg7,
8772*61046927SAndroid Build Coastguard Worker arg8,
8773*61046927SAndroid Build Coastguard Worker arg9,
8774*61046927SAndroid Build Coastguard Worker arg10,
8775*61046927SAndroid Build Coastguard Worker arg11,
8776*61046927SAndroid Build Coastguard Worker arg12,
8777*61046927SAndroid Build Coastguard Worker arg13,
8778*61046927SAndroid Build Coastguard Worker arg14,
8779*61046927SAndroid Build Coastguard Worker arg15,
8780*61046927SAndroid Build Coastguard Worker arg16,
8781*61046927SAndroid Build Coastguard Worker arg17,
8782*61046927SAndroid Build Coastguard Worker arg18,
8783*61046927SAndroid Build Coastguard Worker arg19,
8784*61046927SAndroid Build Coastguard Worker arg20,
8785*61046927SAndroid Build Coastguard Worker arg21,
8786*61046927SAndroid Build Coastguard Worker arg22,
8787*61046927SAndroid Build Coastguard Worker arg23,
8788*61046927SAndroid Build Coastguard Worker arg24,
8789*61046927SAndroid Build Coastguard Worker arg25,
8790*61046927SAndroid Build Coastguard Worker arg26);
8791*61046927SAndroid Build Coastguard Worker }
8792*61046927SAndroid Build Coastguard Worker
8793*61046927SAndroid Build Coastguard Worker
8794*61046927SAndroid Build Coastguard Worker };
8795*61046927SAndroid Build Coastguard Worker
8796*61046927SAndroid Build Coastguard Worker template<
8797*61046927SAndroid Build Coastguard Worker typename T0,
8798*61046927SAndroid Build Coastguard Worker typename T1,
8799*61046927SAndroid Build Coastguard Worker typename T2,
8800*61046927SAndroid Build Coastguard Worker typename T3,
8801*61046927SAndroid Build Coastguard Worker typename T4,
8802*61046927SAndroid Build Coastguard Worker typename T5,
8803*61046927SAndroid Build Coastguard Worker typename T6,
8804*61046927SAndroid Build Coastguard Worker typename T7,
8805*61046927SAndroid Build Coastguard Worker typename T8,
8806*61046927SAndroid Build Coastguard Worker typename T9,
8807*61046927SAndroid Build Coastguard Worker typename T10,
8808*61046927SAndroid Build Coastguard Worker typename T11,
8809*61046927SAndroid Build Coastguard Worker typename T12,
8810*61046927SAndroid Build Coastguard Worker typename T13,
8811*61046927SAndroid Build Coastguard Worker typename T14,
8812*61046927SAndroid Build Coastguard Worker typename T15,
8813*61046927SAndroid Build Coastguard Worker typename T16,
8814*61046927SAndroid Build Coastguard Worker typename T17,
8815*61046927SAndroid Build Coastguard Worker typename T18,
8816*61046927SAndroid Build Coastguard Worker typename T19,
8817*61046927SAndroid Build Coastguard Worker typename T20,
8818*61046927SAndroid Build Coastguard Worker typename T21,
8819*61046927SAndroid Build Coastguard Worker typename T22,
8820*61046927SAndroid Build Coastguard Worker typename T23,
8821*61046927SAndroid Build Coastguard Worker typename T24,
8822*61046927SAndroid Build Coastguard Worker typename T25>
8823*61046927SAndroid Build Coastguard Worker struct functionImplementation_
8824*61046927SAndroid Build Coastguard Worker < T0,
8825*61046927SAndroid Build Coastguard Worker T1,
8826*61046927SAndroid Build Coastguard Worker T2,
8827*61046927SAndroid Build Coastguard Worker T3,
8828*61046927SAndroid Build Coastguard Worker T4,
8829*61046927SAndroid Build Coastguard Worker T5,
8830*61046927SAndroid Build Coastguard Worker T6,
8831*61046927SAndroid Build Coastguard Worker T7,
8832*61046927SAndroid Build Coastguard Worker T8,
8833*61046927SAndroid Build Coastguard Worker T9,
8834*61046927SAndroid Build Coastguard Worker T10,
8835*61046927SAndroid Build Coastguard Worker T11,
8836*61046927SAndroid Build Coastguard Worker T12,
8837*61046927SAndroid Build Coastguard Worker T13,
8838*61046927SAndroid Build Coastguard Worker T14,
8839*61046927SAndroid Build Coastguard Worker T15,
8840*61046927SAndroid Build Coastguard Worker T16,
8841*61046927SAndroid Build Coastguard Worker T17,
8842*61046927SAndroid Build Coastguard Worker T18,
8843*61046927SAndroid Build Coastguard Worker T19,
8844*61046927SAndroid Build Coastguard Worker T20,
8845*61046927SAndroid Build Coastguard Worker T21,
8846*61046927SAndroid Build Coastguard Worker T22,
8847*61046927SAndroid Build Coastguard Worker T23,
8848*61046927SAndroid Build Coastguard Worker T24,
8849*61046927SAndroid Build Coastguard Worker T25,
8850*61046927SAndroid Build Coastguard Worker NullType,
8851*61046927SAndroid Build Coastguard Worker NullType,
8852*61046927SAndroid Build Coastguard Worker NullType,
8853*61046927SAndroid Build Coastguard Worker NullType,
8854*61046927SAndroid Build Coastguard Worker NullType,
8855*61046927SAndroid Build Coastguard Worker NullType>
8856*61046927SAndroid Build Coastguard Worker {
8857*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
8858*61046927SAndroid Build Coastguard Worker T0,
8859*61046927SAndroid Build Coastguard Worker T1,
8860*61046927SAndroid Build Coastguard Worker T2,
8861*61046927SAndroid Build Coastguard Worker T3,
8862*61046927SAndroid Build Coastguard Worker T4,
8863*61046927SAndroid Build Coastguard Worker T5,
8864*61046927SAndroid Build Coastguard Worker T6,
8865*61046927SAndroid Build Coastguard Worker T7,
8866*61046927SAndroid Build Coastguard Worker T8,
8867*61046927SAndroid Build Coastguard Worker T9,
8868*61046927SAndroid Build Coastguard Worker T10,
8869*61046927SAndroid Build Coastguard Worker T11,
8870*61046927SAndroid Build Coastguard Worker T12,
8871*61046927SAndroid Build Coastguard Worker T13,
8872*61046927SAndroid Build Coastguard Worker T14,
8873*61046927SAndroid Build Coastguard Worker T15,
8874*61046927SAndroid Build Coastguard Worker T16,
8875*61046927SAndroid Build Coastguard Worker T17,
8876*61046927SAndroid Build Coastguard Worker T18,
8877*61046927SAndroid Build Coastguard Worker T19,
8878*61046927SAndroid Build Coastguard Worker T20,
8879*61046927SAndroid Build Coastguard Worker T21,
8880*61046927SAndroid Build Coastguard Worker T22,
8881*61046927SAndroid Build Coastguard Worker T23,
8882*61046927SAndroid Build Coastguard Worker T24,
8883*61046927SAndroid Build Coastguard Worker T25,
8884*61046927SAndroid Build Coastguard Worker NullType,
8885*61046927SAndroid Build Coastguard Worker NullType,
8886*61046927SAndroid Build Coastguard Worker NullType,
8887*61046927SAndroid Build Coastguard Worker NullType,
8888*61046927SAndroid Build Coastguard Worker NullType,
8889*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
8890*61046927SAndroid Build Coastguard Worker
8891*61046927SAndroid Build Coastguard Worker FunctorType functor_;
8892*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_8893*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
8894*61046927SAndroid Build Coastguard Worker functor_(functor)
8895*61046927SAndroid Build Coastguard Worker {
8896*61046927SAndroid Build Coastguard Worker
8897*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 26))
8898*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
8899*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
8900*61046927SAndroid Build Coastguard Worker #endif
8901*61046927SAndroid Build Coastguard Worker
8902*61046927SAndroid Build Coastguard Worker }
8903*61046927SAndroid Build Coastguard Worker
8904*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
8905*61046927SAndroid Build Coastguard Worker typedef Event result_type;
8906*61046927SAndroid Build Coastguard Worker
8907*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
8908*61046927SAndroid Build Coastguard Worker typedef Event type_(
8909*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
8910*61046927SAndroid Build Coastguard Worker T0,
8911*61046927SAndroid Build Coastguard Worker T1,
8912*61046927SAndroid Build Coastguard Worker T2,
8913*61046927SAndroid Build Coastguard Worker T3,
8914*61046927SAndroid Build Coastguard Worker T4,
8915*61046927SAndroid Build Coastguard Worker T5,
8916*61046927SAndroid Build Coastguard Worker T6,
8917*61046927SAndroid Build Coastguard Worker T7,
8918*61046927SAndroid Build Coastguard Worker T8,
8919*61046927SAndroid Build Coastguard Worker T9,
8920*61046927SAndroid Build Coastguard Worker T10,
8921*61046927SAndroid Build Coastguard Worker T11,
8922*61046927SAndroid Build Coastguard Worker T12,
8923*61046927SAndroid Build Coastguard Worker T13,
8924*61046927SAndroid Build Coastguard Worker T14,
8925*61046927SAndroid Build Coastguard Worker T15,
8926*61046927SAndroid Build Coastguard Worker T16,
8927*61046927SAndroid Build Coastguard Worker T17,
8928*61046927SAndroid Build Coastguard Worker T18,
8929*61046927SAndroid Build Coastguard Worker T19,
8930*61046927SAndroid Build Coastguard Worker T20,
8931*61046927SAndroid Build Coastguard Worker T21,
8932*61046927SAndroid Build Coastguard Worker T22,
8933*61046927SAndroid Build Coastguard Worker T23,
8934*61046927SAndroid Build Coastguard Worker T24,
8935*61046927SAndroid Build Coastguard Worker T25);
8936*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_8937*61046927SAndroid Build Coastguard Worker Event operator()(
8938*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
8939*61046927SAndroid Build Coastguard Worker T0 arg0,
8940*61046927SAndroid Build Coastguard Worker T1 arg1,
8941*61046927SAndroid Build Coastguard Worker T2 arg2,
8942*61046927SAndroid Build Coastguard Worker T3 arg3,
8943*61046927SAndroid Build Coastguard Worker T4 arg4,
8944*61046927SAndroid Build Coastguard Worker T5 arg5,
8945*61046927SAndroid Build Coastguard Worker T6 arg6,
8946*61046927SAndroid Build Coastguard Worker T7 arg7,
8947*61046927SAndroid Build Coastguard Worker T8 arg8,
8948*61046927SAndroid Build Coastguard Worker T9 arg9,
8949*61046927SAndroid Build Coastguard Worker T10 arg10,
8950*61046927SAndroid Build Coastguard Worker T11 arg11,
8951*61046927SAndroid Build Coastguard Worker T12 arg12,
8952*61046927SAndroid Build Coastguard Worker T13 arg13,
8953*61046927SAndroid Build Coastguard Worker T14 arg14,
8954*61046927SAndroid Build Coastguard Worker T15 arg15,
8955*61046927SAndroid Build Coastguard Worker T16 arg16,
8956*61046927SAndroid Build Coastguard Worker T17 arg17,
8957*61046927SAndroid Build Coastguard Worker T18 arg18,
8958*61046927SAndroid Build Coastguard Worker T19 arg19,
8959*61046927SAndroid Build Coastguard Worker T20 arg20,
8960*61046927SAndroid Build Coastguard Worker T21 arg21,
8961*61046927SAndroid Build Coastguard Worker T22 arg22,
8962*61046927SAndroid Build Coastguard Worker T23 arg23,
8963*61046927SAndroid Build Coastguard Worker T24 arg24,
8964*61046927SAndroid Build Coastguard Worker T25 arg25)
8965*61046927SAndroid Build Coastguard Worker {
8966*61046927SAndroid Build Coastguard Worker return functor_(
8967*61046927SAndroid Build Coastguard Worker enqueueArgs,
8968*61046927SAndroid Build Coastguard Worker arg0,
8969*61046927SAndroid Build Coastguard Worker arg1,
8970*61046927SAndroid Build Coastguard Worker arg2,
8971*61046927SAndroid Build Coastguard Worker arg3,
8972*61046927SAndroid Build Coastguard Worker arg4,
8973*61046927SAndroid Build Coastguard Worker arg5,
8974*61046927SAndroid Build Coastguard Worker arg6,
8975*61046927SAndroid Build Coastguard Worker arg7,
8976*61046927SAndroid Build Coastguard Worker arg8,
8977*61046927SAndroid Build Coastguard Worker arg9,
8978*61046927SAndroid Build Coastguard Worker arg10,
8979*61046927SAndroid Build Coastguard Worker arg11,
8980*61046927SAndroid Build Coastguard Worker arg12,
8981*61046927SAndroid Build Coastguard Worker arg13,
8982*61046927SAndroid Build Coastguard Worker arg14,
8983*61046927SAndroid Build Coastguard Worker arg15,
8984*61046927SAndroid Build Coastguard Worker arg16,
8985*61046927SAndroid Build Coastguard Worker arg17,
8986*61046927SAndroid Build Coastguard Worker arg18,
8987*61046927SAndroid Build Coastguard Worker arg19,
8988*61046927SAndroid Build Coastguard Worker arg20,
8989*61046927SAndroid Build Coastguard Worker arg21,
8990*61046927SAndroid Build Coastguard Worker arg22,
8991*61046927SAndroid Build Coastguard Worker arg23,
8992*61046927SAndroid Build Coastguard Worker arg24,
8993*61046927SAndroid Build Coastguard Worker arg25);
8994*61046927SAndroid Build Coastguard Worker }
8995*61046927SAndroid Build Coastguard Worker
8996*61046927SAndroid Build Coastguard Worker
8997*61046927SAndroid Build Coastguard Worker };
8998*61046927SAndroid Build Coastguard Worker
8999*61046927SAndroid Build Coastguard Worker template<
9000*61046927SAndroid Build Coastguard Worker typename T0,
9001*61046927SAndroid Build Coastguard Worker typename T1,
9002*61046927SAndroid Build Coastguard Worker typename T2,
9003*61046927SAndroid Build Coastguard Worker typename T3,
9004*61046927SAndroid Build Coastguard Worker typename T4,
9005*61046927SAndroid Build Coastguard Worker typename T5,
9006*61046927SAndroid Build Coastguard Worker typename T6,
9007*61046927SAndroid Build Coastguard Worker typename T7,
9008*61046927SAndroid Build Coastguard Worker typename T8,
9009*61046927SAndroid Build Coastguard Worker typename T9,
9010*61046927SAndroid Build Coastguard Worker typename T10,
9011*61046927SAndroid Build Coastguard Worker typename T11,
9012*61046927SAndroid Build Coastguard Worker typename T12,
9013*61046927SAndroid Build Coastguard Worker typename T13,
9014*61046927SAndroid Build Coastguard Worker typename T14,
9015*61046927SAndroid Build Coastguard Worker typename T15,
9016*61046927SAndroid Build Coastguard Worker typename T16,
9017*61046927SAndroid Build Coastguard Worker typename T17,
9018*61046927SAndroid Build Coastguard Worker typename T18,
9019*61046927SAndroid Build Coastguard Worker typename T19,
9020*61046927SAndroid Build Coastguard Worker typename T20,
9021*61046927SAndroid Build Coastguard Worker typename T21,
9022*61046927SAndroid Build Coastguard Worker typename T22,
9023*61046927SAndroid Build Coastguard Worker typename T23,
9024*61046927SAndroid Build Coastguard Worker typename T24>
9025*61046927SAndroid Build Coastguard Worker struct functionImplementation_
9026*61046927SAndroid Build Coastguard Worker < T0,
9027*61046927SAndroid Build Coastguard Worker T1,
9028*61046927SAndroid Build Coastguard Worker T2,
9029*61046927SAndroid Build Coastguard Worker T3,
9030*61046927SAndroid Build Coastguard Worker T4,
9031*61046927SAndroid Build Coastguard Worker T5,
9032*61046927SAndroid Build Coastguard Worker T6,
9033*61046927SAndroid Build Coastguard Worker T7,
9034*61046927SAndroid Build Coastguard Worker T8,
9035*61046927SAndroid Build Coastguard Worker T9,
9036*61046927SAndroid Build Coastguard Worker T10,
9037*61046927SAndroid Build Coastguard Worker T11,
9038*61046927SAndroid Build Coastguard Worker T12,
9039*61046927SAndroid Build Coastguard Worker T13,
9040*61046927SAndroid Build Coastguard Worker T14,
9041*61046927SAndroid Build Coastguard Worker T15,
9042*61046927SAndroid Build Coastguard Worker T16,
9043*61046927SAndroid Build Coastguard Worker T17,
9044*61046927SAndroid Build Coastguard Worker T18,
9045*61046927SAndroid Build Coastguard Worker T19,
9046*61046927SAndroid Build Coastguard Worker T20,
9047*61046927SAndroid Build Coastguard Worker T21,
9048*61046927SAndroid Build Coastguard Worker T22,
9049*61046927SAndroid Build Coastguard Worker T23,
9050*61046927SAndroid Build Coastguard Worker T24,
9051*61046927SAndroid Build Coastguard Worker NullType,
9052*61046927SAndroid Build Coastguard Worker NullType,
9053*61046927SAndroid Build Coastguard Worker NullType,
9054*61046927SAndroid Build Coastguard Worker NullType,
9055*61046927SAndroid Build Coastguard Worker NullType,
9056*61046927SAndroid Build Coastguard Worker NullType,
9057*61046927SAndroid Build Coastguard Worker NullType>
9058*61046927SAndroid Build Coastguard Worker {
9059*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
9060*61046927SAndroid Build Coastguard Worker T0,
9061*61046927SAndroid Build Coastguard Worker T1,
9062*61046927SAndroid Build Coastguard Worker T2,
9063*61046927SAndroid Build Coastguard Worker T3,
9064*61046927SAndroid Build Coastguard Worker T4,
9065*61046927SAndroid Build Coastguard Worker T5,
9066*61046927SAndroid Build Coastguard Worker T6,
9067*61046927SAndroid Build Coastguard Worker T7,
9068*61046927SAndroid Build Coastguard Worker T8,
9069*61046927SAndroid Build Coastguard Worker T9,
9070*61046927SAndroid Build Coastguard Worker T10,
9071*61046927SAndroid Build Coastguard Worker T11,
9072*61046927SAndroid Build Coastguard Worker T12,
9073*61046927SAndroid Build Coastguard Worker T13,
9074*61046927SAndroid Build Coastguard Worker T14,
9075*61046927SAndroid Build Coastguard Worker T15,
9076*61046927SAndroid Build Coastguard Worker T16,
9077*61046927SAndroid Build Coastguard Worker T17,
9078*61046927SAndroid Build Coastguard Worker T18,
9079*61046927SAndroid Build Coastguard Worker T19,
9080*61046927SAndroid Build Coastguard Worker T20,
9081*61046927SAndroid Build Coastguard Worker T21,
9082*61046927SAndroid Build Coastguard Worker T22,
9083*61046927SAndroid Build Coastguard Worker T23,
9084*61046927SAndroid Build Coastguard Worker T24,
9085*61046927SAndroid Build Coastguard Worker NullType,
9086*61046927SAndroid Build Coastguard Worker NullType,
9087*61046927SAndroid Build Coastguard Worker NullType,
9088*61046927SAndroid Build Coastguard Worker NullType,
9089*61046927SAndroid Build Coastguard Worker NullType,
9090*61046927SAndroid Build Coastguard Worker NullType,
9091*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
9092*61046927SAndroid Build Coastguard Worker
9093*61046927SAndroid Build Coastguard Worker FunctorType functor_;
9094*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_9095*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
9096*61046927SAndroid Build Coastguard Worker functor_(functor)
9097*61046927SAndroid Build Coastguard Worker {
9098*61046927SAndroid Build Coastguard Worker
9099*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 25))
9100*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
9101*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
9102*61046927SAndroid Build Coastguard Worker #endif
9103*61046927SAndroid Build Coastguard Worker
9104*61046927SAndroid Build Coastguard Worker }
9105*61046927SAndroid Build Coastguard Worker
9106*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
9107*61046927SAndroid Build Coastguard Worker typedef Event result_type;
9108*61046927SAndroid Build Coastguard Worker
9109*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
9110*61046927SAndroid Build Coastguard Worker typedef Event type_(
9111*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
9112*61046927SAndroid Build Coastguard Worker T0,
9113*61046927SAndroid Build Coastguard Worker T1,
9114*61046927SAndroid Build Coastguard Worker T2,
9115*61046927SAndroid Build Coastguard Worker T3,
9116*61046927SAndroid Build Coastguard Worker T4,
9117*61046927SAndroid Build Coastguard Worker T5,
9118*61046927SAndroid Build Coastguard Worker T6,
9119*61046927SAndroid Build Coastguard Worker T7,
9120*61046927SAndroid Build Coastguard Worker T8,
9121*61046927SAndroid Build Coastguard Worker T9,
9122*61046927SAndroid Build Coastguard Worker T10,
9123*61046927SAndroid Build Coastguard Worker T11,
9124*61046927SAndroid Build Coastguard Worker T12,
9125*61046927SAndroid Build Coastguard Worker T13,
9126*61046927SAndroid Build Coastguard Worker T14,
9127*61046927SAndroid Build Coastguard Worker T15,
9128*61046927SAndroid Build Coastguard Worker T16,
9129*61046927SAndroid Build Coastguard Worker T17,
9130*61046927SAndroid Build Coastguard Worker T18,
9131*61046927SAndroid Build Coastguard Worker T19,
9132*61046927SAndroid Build Coastguard Worker T20,
9133*61046927SAndroid Build Coastguard Worker T21,
9134*61046927SAndroid Build Coastguard Worker T22,
9135*61046927SAndroid Build Coastguard Worker T23,
9136*61046927SAndroid Build Coastguard Worker T24);
9137*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_9138*61046927SAndroid Build Coastguard Worker Event operator()(
9139*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
9140*61046927SAndroid Build Coastguard Worker T0 arg0,
9141*61046927SAndroid Build Coastguard Worker T1 arg1,
9142*61046927SAndroid Build Coastguard Worker T2 arg2,
9143*61046927SAndroid Build Coastguard Worker T3 arg3,
9144*61046927SAndroid Build Coastguard Worker T4 arg4,
9145*61046927SAndroid Build Coastguard Worker T5 arg5,
9146*61046927SAndroid Build Coastguard Worker T6 arg6,
9147*61046927SAndroid Build Coastguard Worker T7 arg7,
9148*61046927SAndroid Build Coastguard Worker T8 arg8,
9149*61046927SAndroid Build Coastguard Worker T9 arg9,
9150*61046927SAndroid Build Coastguard Worker T10 arg10,
9151*61046927SAndroid Build Coastguard Worker T11 arg11,
9152*61046927SAndroid Build Coastguard Worker T12 arg12,
9153*61046927SAndroid Build Coastguard Worker T13 arg13,
9154*61046927SAndroid Build Coastguard Worker T14 arg14,
9155*61046927SAndroid Build Coastguard Worker T15 arg15,
9156*61046927SAndroid Build Coastguard Worker T16 arg16,
9157*61046927SAndroid Build Coastguard Worker T17 arg17,
9158*61046927SAndroid Build Coastguard Worker T18 arg18,
9159*61046927SAndroid Build Coastguard Worker T19 arg19,
9160*61046927SAndroid Build Coastguard Worker T20 arg20,
9161*61046927SAndroid Build Coastguard Worker T21 arg21,
9162*61046927SAndroid Build Coastguard Worker T22 arg22,
9163*61046927SAndroid Build Coastguard Worker T23 arg23,
9164*61046927SAndroid Build Coastguard Worker T24 arg24)
9165*61046927SAndroid Build Coastguard Worker {
9166*61046927SAndroid Build Coastguard Worker return functor_(
9167*61046927SAndroid Build Coastguard Worker enqueueArgs,
9168*61046927SAndroid Build Coastguard Worker arg0,
9169*61046927SAndroid Build Coastguard Worker arg1,
9170*61046927SAndroid Build Coastguard Worker arg2,
9171*61046927SAndroid Build Coastguard Worker arg3,
9172*61046927SAndroid Build Coastguard Worker arg4,
9173*61046927SAndroid Build Coastguard Worker arg5,
9174*61046927SAndroid Build Coastguard Worker arg6,
9175*61046927SAndroid Build Coastguard Worker arg7,
9176*61046927SAndroid Build Coastguard Worker arg8,
9177*61046927SAndroid Build Coastguard Worker arg9,
9178*61046927SAndroid Build Coastguard Worker arg10,
9179*61046927SAndroid Build Coastguard Worker arg11,
9180*61046927SAndroid Build Coastguard Worker arg12,
9181*61046927SAndroid Build Coastguard Worker arg13,
9182*61046927SAndroid Build Coastguard Worker arg14,
9183*61046927SAndroid Build Coastguard Worker arg15,
9184*61046927SAndroid Build Coastguard Worker arg16,
9185*61046927SAndroid Build Coastguard Worker arg17,
9186*61046927SAndroid Build Coastguard Worker arg18,
9187*61046927SAndroid Build Coastguard Worker arg19,
9188*61046927SAndroid Build Coastguard Worker arg20,
9189*61046927SAndroid Build Coastguard Worker arg21,
9190*61046927SAndroid Build Coastguard Worker arg22,
9191*61046927SAndroid Build Coastguard Worker arg23,
9192*61046927SAndroid Build Coastguard Worker arg24);
9193*61046927SAndroid Build Coastguard Worker }
9194*61046927SAndroid Build Coastguard Worker
9195*61046927SAndroid Build Coastguard Worker
9196*61046927SAndroid Build Coastguard Worker };
9197*61046927SAndroid Build Coastguard Worker
9198*61046927SAndroid Build Coastguard Worker template<
9199*61046927SAndroid Build Coastguard Worker typename T0,
9200*61046927SAndroid Build Coastguard Worker typename T1,
9201*61046927SAndroid Build Coastguard Worker typename T2,
9202*61046927SAndroid Build Coastguard Worker typename T3,
9203*61046927SAndroid Build Coastguard Worker typename T4,
9204*61046927SAndroid Build Coastguard Worker typename T5,
9205*61046927SAndroid Build Coastguard Worker typename T6,
9206*61046927SAndroid Build Coastguard Worker typename T7,
9207*61046927SAndroid Build Coastguard Worker typename T8,
9208*61046927SAndroid Build Coastguard Worker typename T9,
9209*61046927SAndroid Build Coastguard Worker typename T10,
9210*61046927SAndroid Build Coastguard Worker typename T11,
9211*61046927SAndroid Build Coastguard Worker typename T12,
9212*61046927SAndroid Build Coastguard Worker typename T13,
9213*61046927SAndroid Build Coastguard Worker typename T14,
9214*61046927SAndroid Build Coastguard Worker typename T15,
9215*61046927SAndroid Build Coastguard Worker typename T16,
9216*61046927SAndroid Build Coastguard Worker typename T17,
9217*61046927SAndroid Build Coastguard Worker typename T18,
9218*61046927SAndroid Build Coastguard Worker typename T19,
9219*61046927SAndroid Build Coastguard Worker typename T20,
9220*61046927SAndroid Build Coastguard Worker typename T21,
9221*61046927SAndroid Build Coastguard Worker typename T22,
9222*61046927SAndroid Build Coastguard Worker typename T23>
9223*61046927SAndroid Build Coastguard Worker struct functionImplementation_
9224*61046927SAndroid Build Coastguard Worker < T0,
9225*61046927SAndroid Build Coastguard Worker T1,
9226*61046927SAndroid Build Coastguard Worker T2,
9227*61046927SAndroid Build Coastguard Worker T3,
9228*61046927SAndroid Build Coastguard Worker T4,
9229*61046927SAndroid Build Coastguard Worker T5,
9230*61046927SAndroid Build Coastguard Worker T6,
9231*61046927SAndroid Build Coastguard Worker T7,
9232*61046927SAndroid Build Coastguard Worker T8,
9233*61046927SAndroid Build Coastguard Worker T9,
9234*61046927SAndroid Build Coastguard Worker T10,
9235*61046927SAndroid Build Coastguard Worker T11,
9236*61046927SAndroid Build Coastguard Worker T12,
9237*61046927SAndroid Build Coastguard Worker T13,
9238*61046927SAndroid Build Coastguard Worker T14,
9239*61046927SAndroid Build Coastguard Worker T15,
9240*61046927SAndroid Build Coastguard Worker T16,
9241*61046927SAndroid Build Coastguard Worker T17,
9242*61046927SAndroid Build Coastguard Worker T18,
9243*61046927SAndroid Build Coastguard Worker T19,
9244*61046927SAndroid Build Coastguard Worker T20,
9245*61046927SAndroid Build Coastguard Worker T21,
9246*61046927SAndroid Build Coastguard Worker T22,
9247*61046927SAndroid Build Coastguard Worker T23,
9248*61046927SAndroid Build Coastguard Worker NullType,
9249*61046927SAndroid Build Coastguard Worker NullType,
9250*61046927SAndroid Build Coastguard Worker NullType,
9251*61046927SAndroid Build Coastguard Worker NullType,
9252*61046927SAndroid Build Coastguard Worker NullType,
9253*61046927SAndroid Build Coastguard Worker NullType,
9254*61046927SAndroid Build Coastguard Worker NullType,
9255*61046927SAndroid Build Coastguard Worker NullType>
9256*61046927SAndroid Build Coastguard Worker {
9257*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
9258*61046927SAndroid Build Coastguard Worker T0,
9259*61046927SAndroid Build Coastguard Worker T1,
9260*61046927SAndroid Build Coastguard Worker T2,
9261*61046927SAndroid Build Coastguard Worker T3,
9262*61046927SAndroid Build Coastguard Worker T4,
9263*61046927SAndroid Build Coastguard Worker T5,
9264*61046927SAndroid Build Coastguard Worker T6,
9265*61046927SAndroid Build Coastguard Worker T7,
9266*61046927SAndroid Build Coastguard Worker T8,
9267*61046927SAndroid Build Coastguard Worker T9,
9268*61046927SAndroid Build Coastguard Worker T10,
9269*61046927SAndroid Build Coastguard Worker T11,
9270*61046927SAndroid Build Coastguard Worker T12,
9271*61046927SAndroid Build Coastguard Worker T13,
9272*61046927SAndroid Build Coastguard Worker T14,
9273*61046927SAndroid Build Coastguard Worker T15,
9274*61046927SAndroid Build Coastguard Worker T16,
9275*61046927SAndroid Build Coastguard Worker T17,
9276*61046927SAndroid Build Coastguard Worker T18,
9277*61046927SAndroid Build Coastguard Worker T19,
9278*61046927SAndroid Build Coastguard Worker T20,
9279*61046927SAndroid Build Coastguard Worker T21,
9280*61046927SAndroid Build Coastguard Worker T22,
9281*61046927SAndroid Build Coastguard Worker T23,
9282*61046927SAndroid Build Coastguard Worker NullType,
9283*61046927SAndroid Build Coastguard Worker NullType,
9284*61046927SAndroid Build Coastguard Worker NullType,
9285*61046927SAndroid Build Coastguard Worker NullType,
9286*61046927SAndroid Build Coastguard Worker NullType,
9287*61046927SAndroid Build Coastguard Worker NullType,
9288*61046927SAndroid Build Coastguard Worker NullType,
9289*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
9290*61046927SAndroid Build Coastguard Worker
9291*61046927SAndroid Build Coastguard Worker FunctorType functor_;
9292*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_9293*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
9294*61046927SAndroid Build Coastguard Worker functor_(functor)
9295*61046927SAndroid Build Coastguard Worker {
9296*61046927SAndroid Build Coastguard Worker
9297*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 24))
9298*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
9299*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
9300*61046927SAndroid Build Coastguard Worker #endif
9301*61046927SAndroid Build Coastguard Worker
9302*61046927SAndroid Build Coastguard Worker }
9303*61046927SAndroid Build Coastguard Worker
9304*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
9305*61046927SAndroid Build Coastguard Worker typedef Event result_type;
9306*61046927SAndroid Build Coastguard Worker
9307*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
9308*61046927SAndroid Build Coastguard Worker typedef Event type_(
9309*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
9310*61046927SAndroid Build Coastguard Worker T0,
9311*61046927SAndroid Build Coastguard Worker T1,
9312*61046927SAndroid Build Coastguard Worker T2,
9313*61046927SAndroid Build Coastguard Worker T3,
9314*61046927SAndroid Build Coastguard Worker T4,
9315*61046927SAndroid Build Coastguard Worker T5,
9316*61046927SAndroid Build Coastguard Worker T6,
9317*61046927SAndroid Build Coastguard Worker T7,
9318*61046927SAndroid Build Coastguard Worker T8,
9319*61046927SAndroid Build Coastguard Worker T9,
9320*61046927SAndroid Build Coastguard Worker T10,
9321*61046927SAndroid Build Coastguard Worker T11,
9322*61046927SAndroid Build Coastguard Worker T12,
9323*61046927SAndroid Build Coastguard Worker T13,
9324*61046927SAndroid Build Coastguard Worker T14,
9325*61046927SAndroid Build Coastguard Worker T15,
9326*61046927SAndroid Build Coastguard Worker T16,
9327*61046927SAndroid Build Coastguard Worker T17,
9328*61046927SAndroid Build Coastguard Worker T18,
9329*61046927SAndroid Build Coastguard Worker T19,
9330*61046927SAndroid Build Coastguard Worker T20,
9331*61046927SAndroid Build Coastguard Worker T21,
9332*61046927SAndroid Build Coastguard Worker T22,
9333*61046927SAndroid Build Coastguard Worker T23);
9334*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_9335*61046927SAndroid Build Coastguard Worker Event operator()(
9336*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
9337*61046927SAndroid Build Coastguard Worker T0 arg0,
9338*61046927SAndroid Build Coastguard Worker T1 arg1,
9339*61046927SAndroid Build Coastguard Worker T2 arg2,
9340*61046927SAndroid Build Coastguard Worker T3 arg3,
9341*61046927SAndroid Build Coastguard Worker T4 arg4,
9342*61046927SAndroid Build Coastguard Worker T5 arg5,
9343*61046927SAndroid Build Coastguard Worker T6 arg6,
9344*61046927SAndroid Build Coastguard Worker T7 arg7,
9345*61046927SAndroid Build Coastguard Worker T8 arg8,
9346*61046927SAndroid Build Coastguard Worker T9 arg9,
9347*61046927SAndroid Build Coastguard Worker T10 arg10,
9348*61046927SAndroid Build Coastguard Worker T11 arg11,
9349*61046927SAndroid Build Coastguard Worker T12 arg12,
9350*61046927SAndroid Build Coastguard Worker T13 arg13,
9351*61046927SAndroid Build Coastguard Worker T14 arg14,
9352*61046927SAndroid Build Coastguard Worker T15 arg15,
9353*61046927SAndroid Build Coastguard Worker T16 arg16,
9354*61046927SAndroid Build Coastguard Worker T17 arg17,
9355*61046927SAndroid Build Coastguard Worker T18 arg18,
9356*61046927SAndroid Build Coastguard Worker T19 arg19,
9357*61046927SAndroid Build Coastguard Worker T20 arg20,
9358*61046927SAndroid Build Coastguard Worker T21 arg21,
9359*61046927SAndroid Build Coastguard Worker T22 arg22,
9360*61046927SAndroid Build Coastguard Worker T23 arg23)
9361*61046927SAndroid Build Coastguard Worker {
9362*61046927SAndroid Build Coastguard Worker return functor_(
9363*61046927SAndroid Build Coastguard Worker enqueueArgs,
9364*61046927SAndroid Build Coastguard Worker arg0,
9365*61046927SAndroid Build Coastguard Worker arg1,
9366*61046927SAndroid Build Coastguard Worker arg2,
9367*61046927SAndroid Build Coastguard Worker arg3,
9368*61046927SAndroid Build Coastguard Worker arg4,
9369*61046927SAndroid Build Coastguard Worker arg5,
9370*61046927SAndroid Build Coastguard Worker arg6,
9371*61046927SAndroid Build Coastguard Worker arg7,
9372*61046927SAndroid Build Coastguard Worker arg8,
9373*61046927SAndroid Build Coastguard Worker arg9,
9374*61046927SAndroid Build Coastguard Worker arg10,
9375*61046927SAndroid Build Coastguard Worker arg11,
9376*61046927SAndroid Build Coastguard Worker arg12,
9377*61046927SAndroid Build Coastguard Worker arg13,
9378*61046927SAndroid Build Coastguard Worker arg14,
9379*61046927SAndroid Build Coastguard Worker arg15,
9380*61046927SAndroid Build Coastguard Worker arg16,
9381*61046927SAndroid Build Coastguard Worker arg17,
9382*61046927SAndroid Build Coastguard Worker arg18,
9383*61046927SAndroid Build Coastguard Worker arg19,
9384*61046927SAndroid Build Coastguard Worker arg20,
9385*61046927SAndroid Build Coastguard Worker arg21,
9386*61046927SAndroid Build Coastguard Worker arg22,
9387*61046927SAndroid Build Coastguard Worker arg23);
9388*61046927SAndroid Build Coastguard Worker }
9389*61046927SAndroid Build Coastguard Worker
9390*61046927SAndroid Build Coastguard Worker
9391*61046927SAndroid Build Coastguard Worker };
9392*61046927SAndroid Build Coastguard Worker
9393*61046927SAndroid Build Coastguard Worker template<
9394*61046927SAndroid Build Coastguard Worker typename T0,
9395*61046927SAndroid Build Coastguard Worker typename T1,
9396*61046927SAndroid Build Coastguard Worker typename T2,
9397*61046927SAndroid Build Coastguard Worker typename T3,
9398*61046927SAndroid Build Coastguard Worker typename T4,
9399*61046927SAndroid Build Coastguard Worker typename T5,
9400*61046927SAndroid Build Coastguard Worker typename T6,
9401*61046927SAndroid Build Coastguard Worker typename T7,
9402*61046927SAndroid Build Coastguard Worker typename T8,
9403*61046927SAndroid Build Coastguard Worker typename T9,
9404*61046927SAndroid Build Coastguard Worker typename T10,
9405*61046927SAndroid Build Coastguard Worker typename T11,
9406*61046927SAndroid Build Coastguard Worker typename T12,
9407*61046927SAndroid Build Coastguard Worker typename T13,
9408*61046927SAndroid Build Coastguard Worker typename T14,
9409*61046927SAndroid Build Coastguard Worker typename T15,
9410*61046927SAndroid Build Coastguard Worker typename T16,
9411*61046927SAndroid Build Coastguard Worker typename T17,
9412*61046927SAndroid Build Coastguard Worker typename T18,
9413*61046927SAndroid Build Coastguard Worker typename T19,
9414*61046927SAndroid Build Coastguard Worker typename T20,
9415*61046927SAndroid Build Coastguard Worker typename T21,
9416*61046927SAndroid Build Coastguard Worker typename T22>
9417*61046927SAndroid Build Coastguard Worker struct functionImplementation_
9418*61046927SAndroid Build Coastguard Worker < T0,
9419*61046927SAndroid Build Coastguard Worker T1,
9420*61046927SAndroid Build Coastguard Worker T2,
9421*61046927SAndroid Build Coastguard Worker T3,
9422*61046927SAndroid Build Coastguard Worker T4,
9423*61046927SAndroid Build Coastguard Worker T5,
9424*61046927SAndroid Build Coastguard Worker T6,
9425*61046927SAndroid Build Coastguard Worker T7,
9426*61046927SAndroid Build Coastguard Worker T8,
9427*61046927SAndroid Build Coastguard Worker T9,
9428*61046927SAndroid Build Coastguard Worker T10,
9429*61046927SAndroid Build Coastguard Worker T11,
9430*61046927SAndroid Build Coastguard Worker T12,
9431*61046927SAndroid Build Coastguard Worker T13,
9432*61046927SAndroid Build Coastguard Worker T14,
9433*61046927SAndroid Build Coastguard Worker T15,
9434*61046927SAndroid Build Coastguard Worker T16,
9435*61046927SAndroid Build Coastguard Worker T17,
9436*61046927SAndroid Build Coastguard Worker T18,
9437*61046927SAndroid Build Coastguard Worker T19,
9438*61046927SAndroid Build Coastguard Worker T20,
9439*61046927SAndroid Build Coastguard Worker T21,
9440*61046927SAndroid Build Coastguard Worker T22,
9441*61046927SAndroid Build Coastguard Worker NullType,
9442*61046927SAndroid Build Coastguard Worker NullType,
9443*61046927SAndroid Build Coastguard Worker NullType,
9444*61046927SAndroid Build Coastguard Worker NullType,
9445*61046927SAndroid Build Coastguard Worker NullType,
9446*61046927SAndroid Build Coastguard Worker NullType,
9447*61046927SAndroid Build Coastguard Worker NullType,
9448*61046927SAndroid Build Coastguard Worker NullType,
9449*61046927SAndroid Build Coastguard Worker NullType>
9450*61046927SAndroid Build Coastguard Worker {
9451*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
9452*61046927SAndroid Build Coastguard Worker T0,
9453*61046927SAndroid Build Coastguard Worker T1,
9454*61046927SAndroid Build Coastguard Worker T2,
9455*61046927SAndroid Build Coastguard Worker T3,
9456*61046927SAndroid Build Coastguard Worker T4,
9457*61046927SAndroid Build Coastguard Worker T5,
9458*61046927SAndroid Build Coastguard Worker T6,
9459*61046927SAndroid Build Coastguard Worker T7,
9460*61046927SAndroid Build Coastguard Worker T8,
9461*61046927SAndroid Build Coastguard Worker T9,
9462*61046927SAndroid Build Coastguard Worker T10,
9463*61046927SAndroid Build Coastguard Worker T11,
9464*61046927SAndroid Build Coastguard Worker T12,
9465*61046927SAndroid Build Coastguard Worker T13,
9466*61046927SAndroid Build Coastguard Worker T14,
9467*61046927SAndroid Build Coastguard Worker T15,
9468*61046927SAndroid Build Coastguard Worker T16,
9469*61046927SAndroid Build Coastguard Worker T17,
9470*61046927SAndroid Build Coastguard Worker T18,
9471*61046927SAndroid Build Coastguard Worker T19,
9472*61046927SAndroid Build Coastguard Worker T20,
9473*61046927SAndroid Build Coastguard Worker T21,
9474*61046927SAndroid Build Coastguard Worker T22,
9475*61046927SAndroid Build Coastguard Worker NullType,
9476*61046927SAndroid Build Coastguard Worker NullType,
9477*61046927SAndroid Build Coastguard Worker NullType,
9478*61046927SAndroid Build Coastguard Worker NullType,
9479*61046927SAndroid Build Coastguard Worker NullType,
9480*61046927SAndroid Build Coastguard Worker NullType,
9481*61046927SAndroid Build Coastguard Worker NullType,
9482*61046927SAndroid Build Coastguard Worker NullType,
9483*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
9484*61046927SAndroid Build Coastguard Worker
9485*61046927SAndroid Build Coastguard Worker FunctorType functor_;
9486*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_9487*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
9488*61046927SAndroid Build Coastguard Worker functor_(functor)
9489*61046927SAndroid Build Coastguard Worker {
9490*61046927SAndroid Build Coastguard Worker
9491*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 23))
9492*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
9493*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
9494*61046927SAndroid Build Coastguard Worker #endif
9495*61046927SAndroid Build Coastguard Worker
9496*61046927SAndroid Build Coastguard Worker }
9497*61046927SAndroid Build Coastguard Worker
9498*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
9499*61046927SAndroid Build Coastguard Worker typedef Event result_type;
9500*61046927SAndroid Build Coastguard Worker
9501*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
9502*61046927SAndroid Build Coastguard Worker typedef Event type_(
9503*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
9504*61046927SAndroid Build Coastguard Worker T0,
9505*61046927SAndroid Build Coastguard Worker T1,
9506*61046927SAndroid Build Coastguard Worker T2,
9507*61046927SAndroid Build Coastguard Worker T3,
9508*61046927SAndroid Build Coastguard Worker T4,
9509*61046927SAndroid Build Coastguard Worker T5,
9510*61046927SAndroid Build Coastguard Worker T6,
9511*61046927SAndroid Build Coastguard Worker T7,
9512*61046927SAndroid Build Coastguard Worker T8,
9513*61046927SAndroid Build Coastguard Worker T9,
9514*61046927SAndroid Build Coastguard Worker T10,
9515*61046927SAndroid Build Coastguard Worker T11,
9516*61046927SAndroid Build Coastguard Worker T12,
9517*61046927SAndroid Build Coastguard Worker T13,
9518*61046927SAndroid Build Coastguard Worker T14,
9519*61046927SAndroid Build Coastguard Worker T15,
9520*61046927SAndroid Build Coastguard Worker T16,
9521*61046927SAndroid Build Coastguard Worker T17,
9522*61046927SAndroid Build Coastguard Worker T18,
9523*61046927SAndroid Build Coastguard Worker T19,
9524*61046927SAndroid Build Coastguard Worker T20,
9525*61046927SAndroid Build Coastguard Worker T21,
9526*61046927SAndroid Build Coastguard Worker T22);
9527*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_9528*61046927SAndroid Build Coastguard Worker Event operator()(
9529*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
9530*61046927SAndroid Build Coastguard Worker T0 arg0,
9531*61046927SAndroid Build Coastguard Worker T1 arg1,
9532*61046927SAndroid Build Coastguard Worker T2 arg2,
9533*61046927SAndroid Build Coastguard Worker T3 arg3,
9534*61046927SAndroid Build Coastguard Worker T4 arg4,
9535*61046927SAndroid Build Coastguard Worker T5 arg5,
9536*61046927SAndroid Build Coastguard Worker T6 arg6,
9537*61046927SAndroid Build Coastguard Worker T7 arg7,
9538*61046927SAndroid Build Coastguard Worker T8 arg8,
9539*61046927SAndroid Build Coastguard Worker T9 arg9,
9540*61046927SAndroid Build Coastguard Worker T10 arg10,
9541*61046927SAndroid Build Coastguard Worker T11 arg11,
9542*61046927SAndroid Build Coastguard Worker T12 arg12,
9543*61046927SAndroid Build Coastguard Worker T13 arg13,
9544*61046927SAndroid Build Coastguard Worker T14 arg14,
9545*61046927SAndroid Build Coastguard Worker T15 arg15,
9546*61046927SAndroid Build Coastguard Worker T16 arg16,
9547*61046927SAndroid Build Coastguard Worker T17 arg17,
9548*61046927SAndroid Build Coastguard Worker T18 arg18,
9549*61046927SAndroid Build Coastguard Worker T19 arg19,
9550*61046927SAndroid Build Coastguard Worker T20 arg20,
9551*61046927SAndroid Build Coastguard Worker T21 arg21,
9552*61046927SAndroid Build Coastguard Worker T22 arg22)
9553*61046927SAndroid Build Coastguard Worker {
9554*61046927SAndroid Build Coastguard Worker return functor_(
9555*61046927SAndroid Build Coastguard Worker enqueueArgs,
9556*61046927SAndroid Build Coastguard Worker arg0,
9557*61046927SAndroid Build Coastguard Worker arg1,
9558*61046927SAndroid Build Coastguard Worker arg2,
9559*61046927SAndroid Build Coastguard Worker arg3,
9560*61046927SAndroid Build Coastguard Worker arg4,
9561*61046927SAndroid Build Coastguard Worker arg5,
9562*61046927SAndroid Build Coastguard Worker arg6,
9563*61046927SAndroid Build Coastguard Worker arg7,
9564*61046927SAndroid Build Coastguard Worker arg8,
9565*61046927SAndroid Build Coastguard Worker arg9,
9566*61046927SAndroid Build Coastguard Worker arg10,
9567*61046927SAndroid Build Coastguard Worker arg11,
9568*61046927SAndroid Build Coastguard Worker arg12,
9569*61046927SAndroid Build Coastguard Worker arg13,
9570*61046927SAndroid Build Coastguard Worker arg14,
9571*61046927SAndroid Build Coastguard Worker arg15,
9572*61046927SAndroid Build Coastguard Worker arg16,
9573*61046927SAndroid Build Coastguard Worker arg17,
9574*61046927SAndroid Build Coastguard Worker arg18,
9575*61046927SAndroid Build Coastguard Worker arg19,
9576*61046927SAndroid Build Coastguard Worker arg20,
9577*61046927SAndroid Build Coastguard Worker arg21,
9578*61046927SAndroid Build Coastguard Worker arg22);
9579*61046927SAndroid Build Coastguard Worker }
9580*61046927SAndroid Build Coastguard Worker
9581*61046927SAndroid Build Coastguard Worker
9582*61046927SAndroid Build Coastguard Worker };
9583*61046927SAndroid Build Coastguard Worker
9584*61046927SAndroid Build Coastguard Worker template<
9585*61046927SAndroid Build Coastguard Worker typename T0,
9586*61046927SAndroid Build Coastguard Worker typename T1,
9587*61046927SAndroid Build Coastguard Worker typename T2,
9588*61046927SAndroid Build Coastguard Worker typename T3,
9589*61046927SAndroid Build Coastguard Worker typename T4,
9590*61046927SAndroid Build Coastguard Worker typename T5,
9591*61046927SAndroid Build Coastguard Worker typename T6,
9592*61046927SAndroid Build Coastguard Worker typename T7,
9593*61046927SAndroid Build Coastguard Worker typename T8,
9594*61046927SAndroid Build Coastguard Worker typename T9,
9595*61046927SAndroid Build Coastguard Worker typename T10,
9596*61046927SAndroid Build Coastguard Worker typename T11,
9597*61046927SAndroid Build Coastguard Worker typename T12,
9598*61046927SAndroid Build Coastguard Worker typename T13,
9599*61046927SAndroid Build Coastguard Worker typename T14,
9600*61046927SAndroid Build Coastguard Worker typename T15,
9601*61046927SAndroid Build Coastguard Worker typename T16,
9602*61046927SAndroid Build Coastguard Worker typename T17,
9603*61046927SAndroid Build Coastguard Worker typename T18,
9604*61046927SAndroid Build Coastguard Worker typename T19,
9605*61046927SAndroid Build Coastguard Worker typename T20,
9606*61046927SAndroid Build Coastguard Worker typename T21>
9607*61046927SAndroid Build Coastguard Worker struct functionImplementation_
9608*61046927SAndroid Build Coastguard Worker < T0,
9609*61046927SAndroid Build Coastguard Worker T1,
9610*61046927SAndroid Build Coastguard Worker T2,
9611*61046927SAndroid Build Coastguard Worker T3,
9612*61046927SAndroid Build Coastguard Worker T4,
9613*61046927SAndroid Build Coastguard Worker T5,
9614*61046927SAndroid Build Coastguard Worker T6,
9615*61046927SAndroid Build Coastguard Worker T7,
9616*61046927SAndroid Build Coastguard Worker T8,
9617*61046927SAndroid Build Coastguard Worker T9,
9618*61046927SAndroid Build Coastguard Worker T10,
9619*61046927SAndroid Build Coastguard Worker T11,
9620*61046927SAndroid Build Coastguard Worker T12,
9621*61046927SAndroid Build Coastguard Worker T13,
9622*61046927SAndroid Build Coastguard Worker T14,
9623*61046927SAndroid Build Coastguard Worker T15,
9624*61046927SAndroid Build Coastguard Worker T16,
9625*61046927SAndroid Build Coastguard Worker T17,
9626*61046927SAndroid Build Coastguard Worker T18,
9627*61046927SAndroid Build Coastguard Worker T19,
9628*61046927SAndroid Build Coastguard Worker T20,
9629*61046927SAndroid Build Coastguard Worker T21,
9630*61046927SAndroid Build Coastguard Worker NullType,
9631*61046927SAndroid Build Coastguard Worker NullType,
9632*61046927SAndroid Build Coastguard Worker NullType,
9633*61046927SAndroid Build Coastguard Worker NullType,
9634*61046927SAndroid Build Coastguard Worker NullType,
9635*61046927SAndroid Build Coastguard Worker NullType,
9636*61046927SAndroid Build Coastguard Worker NullType,
9637*61046927SAndroid Build Coastguard Worker NullType,
9638*61046927SAndroid Build Coastguard Worker NullType,
9639*61046927SAndroid Build Coastguard Worker NullType>
9640*61046927SAndroid Build Coastguard Worker {
9641*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
9642*61046927SAndroid Build Coastguard Worker T0,
9643*61046927SAndroid Build Coastguard Worker T1,
9644*61046927SAndroid Build Coastguard Worker T2,
9645*61046927SAndroid Build Coastguard Worker T3,
9646*61046927SAndroid Build Coastguard Worker T4,
9647*61046927SAndroid Build Coastguard Worker T5,
9648*61046927SAndroid Build Coastguard Worker T6,
9649*61046927SAndroid Build Coastguard Worker T7,
9650*61046927SAndroid Build Coastguard Worker T8,
9651*61046927SAndroid Build Coastguard Worker T9,
9652*61046927SAndroid Build Coastguard Worker T10,
9653*61046927SAndroid Build Coastguard Worker T11,
9654*61046927SAndroid Build Coastguard Worker T12,
9655*61046927SAndroid Build Coastguard Worker T13,
9656*61046927SAndroid Build Coastguard Worker T14,
9657*61046927SAndroid Build Coastguard Worker T15,
9658*61046927SAndroid Build Coastguard Worker T16,
9659*61046927SAndroid Build Coastguard Worker T17,
9660*61046927SAndroid Build Coastguard Worker T18,
9661*61046927SAndroid Build Coastguard Worker T19,
9662*61046927SAndroid Build Coastguard Worker T20,
9663*61046927SAndroid Build Coastguard Worker T21,
9664*61046927SAndroid Build Coastguard Worker NullType,
9665*61046927SAndroid Build Coastguard Worker NullType,
9666*61046927SAndroid Build Coastguard Worker NullType,
9667*61046927SAndroid Build Coastguard Worker NullType,
9668*61046927SAndroid Build Coastguard Worker NullType,
9669*61046927SAndroid Build Coastguard Worker NullType,
9670*61046927SAndroid Build Coastguard Worker NullType,
9671*61046927SAndroid Build Coastguard Worker NullType,
9672*61046927SAndroid Build Coastguard Worker NullType,
9673*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
9674*61046927SAndroid Build Coastguard Worker
9675*61046927SAndroid Build Coastguard Worker FunctorType functor_;
9676*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_9677*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
9678*61046927SAndroid Build Coastguard Worker functor_(functor)
9679*61046927SAndroid Build Coastguard Worker {
9680*61046927SAndroid Build Coastguard Worker
9681*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 22))
9682*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
9683*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
9684*61046927SAndroid Build Coastguard Worker #endif
9685*61046927SAndroid Build Coastguard Worker
9686*61046927SAndroid Build Coastguard Worker }
9687*61046927SAndroid Build Coastguard Worker
9688*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
9689*61046927SAndroid Build Coastguard Worker typedef Event result_type;
9690*61046927SAndroid Build Coastguard Worker
9691*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
9692*61046927SAndroid Build Coastguard Worker typedef Event type_(
9693*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
9694*61046927SAndroid Build Coastguard Worker T0,
9695*61046927SAndroid Build Coastguard Worker T1,
9696*61046927SAndroid Build Coastguard Worker T2,
9697*61046927SAndroid Build Coastguard Worker T3,
9698*61046927SAndroid Build Coastguard Worker T4,
9699*61046927SAndroid Build Coastguard Worker T5,
9700*61046927SAndroid Build Coastguard Worker T6,
9701*61046927SAndroid Build Coastguard Worker T7,
9702*61046927SAndroid Build Coastguard Worker T8,
9703*61046927SAndroid Build Coastguard Worker T9,
9704*61046927SAndroid Build Coastguard Worker T10,
9705*61046927SAndroid Build Coastguard Worker T11,
9706*61046927SAndroid Build Coastguard Worker T12,
9707*61046927SAndroid Build Coastguard Worker T13,
9708*61046927SAndroid Build Coastguard Worker T14,
9709*61046927SAndroid Build Coastguard Worker T15,
9710*61046927SAndroid Build Coastguard Worker T16,
9711*61046927SAndroid Build Coastguard Worker T17,
9712*61046927SAndroid Build Coastguard Worker T18,
9713*61046927SAndroid Build Coastguard Worker T19,
9714*61046927SAndroid Build Coastguard Worker T20,
9715*61046927SAndroid Build Coastguard Worker T21);
9716*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_9717*61046927SAndroid Build Coastguard Worker Event operator()(
9718*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
9719*61046927SAndroid Build Coastguard Worker T0 arg0,
9720*61046927SAndroid Build Coastguard Worker T1 arg1,
9721*61046927SAndroid Build Coastguard Worker T2 arg2,
9722*61046927SAndroid Build Coastguard Worker T3 arg3,
9723*61046927SAndroid Build Coastguard Worker T4 arg4,
9724*61046927SAndroid Build Coastguard Worker T5 arg5,
9725*61046927SAndroid Build Coastguard Worker T6 arg6,
9726*61046927SAndroid Build Coastguard Worker T7 arg7,
9727*61046927SAndroid Build Coastguard Worker T8 arg8,
9728*61046927SAndroid Build Coastguard Worker T9 arg9,
9729*61046927SAndroid Build Coastguard Worker T10 arg10,
9730*61046927SAndroid Build Coastguard Worker T11 arg11,
9731*61046927SAndroid Build Coastguard Worker T12 arg12,
9732*61046927SAndroid Build Coastguard Worker T13 arg13,
9733*61046927SAndroid Build Coastguard Worker T14 arg14,
9734*61046927SAndroid Build Coastguard Worker T15 arg15,
9735*61046927SAndroid Build Coastguard Worker T16 arg16,
9736*61046927SAndroid Build Coastguard Worker T17 arg17,
9737*61046927SAndroid Build Coastguard Worker T18 arg18,
9738*61046927SAndroid Build Coastguard Worker T19 arg19,
9739*61046927SAndroid Build Coastguard Worker T20 arg20,
9740*61046927SAndroid Build Coastguard Worker T21 arg21)
9741*61046927SAndroid Build Coastguard Worker {
9742*61046927SAndroid Build Coastguard Worker return functor_(
9743*61046927SAndroid Build Coastguard Worker enqueueArgs,
9744*61046927SAndroid Build Coastguard Worker arg0,
9745*61046927SAndroid Build Coastguard Worker arg1,
9746*61046927SAndroid Build Coastguard Worker arg2,
9747*61046927SAndroid Build Coastguard Worker arg3,
9748*61046927SAndroid Build Coastguard Worker arg4,
9749*61046927SAndroid Build Coastguard Worker arg5,
9750*61046927SAndroid Build Coastguard Worker arg6,
9751*61046927SAndroid Build Coastguard Worker arg7,
9752*61046927SAndroid Build Coastguard Worker arg8,
9753*61046927SAndroid Build Coastguard Worker arg9,
9754*61046927SAndroid Build Coastguard Worker arg10,
9755*61046927SAndroid Build Coastguard Worker arg11,
9756*61046927SAndroid Build Coastguard Worker arg12,
9757*61046927SAndroid Build Coastguard Worker arg13,
9758*61046927SAndroid Build Coastguard Worker arg14,
9759*61046927SAndroid Build Coastguard Worker arg15,
9760*61046927SAndroid Build Coastguard Worker arg16,
9761*61046927SAndroid Build Coastguard Worker arg17,
9762*61046927SAndroid Build Coastguard Worker arg18,
9763*61046927SAndroid Build Coastguard Worker arg19,
9764*61046927SAndroid Build Coastguard Worker arg20,
9765*61046927SAndroid Build Coastguard Worker arg21);
9766*61046927SAndroid Build Coastguard Worker }
9767*61046927SAndroid Build Coastguard Worker
9768*61046927SAndroid Build Coastguard Worker
9769*61046927SAndroid Build Coastguard Worker };
9770*61046927SAndroid Build Coastguard Worker
9771*61046927SAndroid Build Coastguard Worker template<
9772*61046927SAndroid Build Coastguard Worker typename T0,
9773*61046927SAndroid Build Coastguard Worker typename T1,
9774*61046927SAndroid Build Coastguard Worker typename T2,
9775*61046927SAndroid Build Coastguard Worker typename T3,
9776*61046927SAndroid Build Coastguard Worker typename T4,
9777*61046927SAndroid Build Coastguard Worker typename T5,
9778*61046927SAndroid Build Coastguard Worker typename T6,
9779*61046927SAndroid Build Coastguard Worker typename T7,
9780*61046927SAndroid Build Coastguard Worker typename T8,
9781*61046927SAndroid Build Coastguard Worker typename T9,
9782*61046927SAndroid Build Coastguard Worker typename T10,
9783*61046927SAndroid Build Coastguard Worker typename T11,
9784*61046927SAndroid Build Coastguard Worker typename T12,
9785*61046927SAndroid Build Coastguard Worker typename T13,
9786*61046927SAndroid Build Coastguard Worker typename T14,
9787*61046927SAndroid Build Coastguard Worker typename T15,
9788*61046927SAndroid Build Coastguard Worker typename T16,
9789*61046927SAndroid Build Coastguard Worker typename T17,
9790*61046927SAndroid Build Coastguard Worker typename T18,
9791*61046927SAndroid Build Coastguard Worker typename T19,
9792*61046927SAndroid Build Coastguard Worker typename T20>
9793*61046927SAndroid Build Coastguard Worker struct functionImplementation_
9794*61046927SAndroid Build Coastguard Worker < T0,
9795*61046927SAndroid Build Coastguard Worker T1,
9796*61046927SAndroid Build Coastguard Worker T2,
9797*61046927SAndroid Build Coastguard Worker T3,
9798*61046927SAndroid Build Coastguard Worker T4,
9799*61046927SAndroid Build Coastguard Worker T5,
9800*61046927SAndroid Build Coastguard Worker T6,
9801*61046927SAndroid Build Coastguard Worker T7,
9802*61046927SAndroid Build Coastguard Worker T8,
9803*61046927SAndroid Build Coastguard Worker T9,
9804*61046927SAndroid Build Coastguard Worker T10,
9805*61046927SAndroid Build Coastguard Worker T11,
9806*61046927SAndroid Build Coastguard Worker T12,
9807*61046927SAndroid Build Coastguard Worker T13,
9808*61046927SAndroid Build Coastguard Worker T14,
9809*61046927SAndroid Build Coastguard Worker T15,
9810*61046927SAndroid Build Coastguard Worker T16,
9811*61046927SAndroid Build Coastguard Worker T17,
9812*61046927SAndroid Build Coastguard Worker T18,
9813*61046927SAndroid Build Coastguard Worker T19,
9814*61046927SAndroid Build Coastguard Worker T20,
9815*61046927SAndroid Build Coastguard Worker NullType,
9816*61046927SAndroid Build Coastguard Worker NullType,
9817*61046927SAndroid Build Coastguard Worker NullType,
9818*61046927SAndroid Build Coastguard Worker NullType,
9819*61046927SAndroid Build Coastguard Worker NullType,
9820*61046927SAndroid Build Coastguard Worker NullType,
9821*61046927SAndroid Build Coastguard Worker NullType,
9822*61046927SAndroid Build Coastguard Worker NullType,
9823*61046927SAndroid Build Coastguard Worker NullType,
9824*61046927SAndroid Build Coastguard Worker NullType,
9825*61046927SAndroid Build Coastguard Worker NullType>
9826*61046927SAndroid Build Coastguard Worker {
9827*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
9828*61046927SAndroid Build Coastguard Worker T0,
9829*61046927SAndroid Build Coastguard Worker T1,
9830*61046927SAndroid Build Coastguard Worker T2,
9831*61046927SAndroid Build Coastguard Worker T3,
9832*61046927SAndroid Build Coastguard Worker T4,
9833*61046927SAndroid Build Coastguard Worker T5,
9834*61046927SAndroid Build Coastguard Worker T6,
9835*61046927SAndroid Build Coastguard Worker T7,
9836*61046927SAndroid Build Coastguard Worker T8,
9837*61046927SAndroid Build Coastguard Worker T9,
9838*61046927SAndroid Build Coastguard Worker T10,
9839*61046927SAndroid Build Coastguard Worker T11,
9840*61046927SAndroid Build Coastguard Worker T12,
9841*61046927SAndroid Build Coastguard Worker T13,
9842*61046927SAndroid Build Coastguard Worker T14,
9843*61046927SAndroid Build Coastguard Worker T15,
9844*61046927SAndroid Build Coastguard Worker T16,
9845*61046927SAndroid Build Coastguard Worker T17,
9846*61046927SAndroid Build Coastguard Worker T18,
9847*61046927SAndroid Build Coastguard Worker T19,
9848*61046927SAndroid Build Coastguard Worker T20,
9849*61046927SAndroid Build Coastguard Worker NullType,
9850*61046927SAndroid Build Coastguard Worker NullType,
9851*61046927SAndroid Build Coastguard Worker NullType,
9852*61046927SAndroid Build Coastguard Worker NullType,
9853*61046927SAndroid Build Coastguard Worker NullType,
9854*61046927SAndroid Build Coastguard Worker NullType,
9855*61046927SAndroid Build Coastguard Worker NullType,
9856*61046927SAndroid Build Coastguard Worker NullType,
9857*61046927SAndroid Build Coastguard Worker NullType,
9858*61046927SAndroid Build Coastguard Worker NullType,
9859*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
9860*61046927SAndroid Build Coastguard Worker
9861*61046927SAndroid Build Coastguard Worker FunctorType functor_;
9862*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_9863*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
9864*61046927SAndroid Build Coastguard Worker functor_(functor)
9865*61046927SAndroid Build Coastguard Worker {
9866*61046927SAndroid Build Coastguard Worker
9867*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 21))
9868*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
9869*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
9870*61046927SAndroid Build Coastguard Worker #endif
9871*61046927SAndroid Build Coastguard Worker
9872*61046927SAndroid Build Coastguard Worker }
9873*61046927SAndroid Build Coastguard Worker
9874*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
9875*61046927SAndroid Build Coastguard Worker typedef Event result_type;
9876*61046927SAndroid Build Coastguard Worker
9877*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
9878*61046927SAndroid Build Coastguard Worker typedef Event type_(
9879*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
9880*61046927SAndroid Build Coastguard Worker T0,
9881*61046927SAndroid Build Coastguard Worker T1,
9882*61046927SAndroid Build Coastguard Worker T2,
9883*61046927SAndroid Build Coastguard Worker T3,
9884*61046927SAndroid Build Coastguard Worker T4,
9885*61046927SAndroid Build Coastguard Worker T5,
9886*61046927SAndroid Build Coastguard Worker T6,
9887*61046927SAndroid Build Coastguard Worker T7,
9888*61046927SAndroid Build Coastguard Worker T8,
9889*61046927SAndroid Build Coastguard Worker T9,
9890*61046927SAndroid Build Coastguard Worker T10,
9891*61046927SAndroid Build Coastguard Worker T11,
9892*61046927SAndroid Build Coastguard Worker T12,
9893*61046927SAndroid Build Coastguard Worker T13,
9894*61046927SAndroid Build Coastguard Worker T14,
9895*61046927SAndroid Build Coastguard Worker T15,
9896*61046927SAndroid Build Coastguard Worker T16,
9897*61046927SAndroid Build Coastguard Worker T17,
9898*61046927SAndroid Build Coastguard Worker T18,
9899*61046927SAndroid Build Coastguard Worker T19,
9900*61046927SAndroid Build Coastguard Worker T20);
9901*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_9902*61046927SAndroid Build Coastguard Worker Event operator()(
9903*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
9904*61046927SAndroid Build Coastguard Worker T0 arg0,
9905*61046927SAndroid Build Coastguard Worker T1 arg1,
9906*61046927SAndroid Build Coastguard Worker T2 arg2,
9907*61046927SAndroid Build Coastguard Worker T3 arg3,
9908*61046927SAndroid Build Coastguard Worker T4 arg4,
9909*61046927SAndroid Build Coastguard Worker T5 arg5,
9910*61046927SAndroid Build Coastguard Worker T6 arg6,
9911*61046927SAndroid Build Coastguard Worker T7 arg7,
9912*61046927SAndroid Build Coastguard Worker T8 arg8,
9913*61046927SAndroid Build Coastguard Worker T9 arg9,
9914*61046927SAndroid Build Coastguard Worker T10 arg10,
9915*61046927SAndroid Build Coastguard Worker T11 arg11,
9916*61046927SAndroid Build Coastguard Worker T12 arg12,
9917*61046927SAndroid Build Coastguard Worker T13 arg13,
9918*61046927SAndroid Build Coastguard Worker T14 arg14,
9919*61046927SAndroid Build Coastguard Worker T15 arg15,
9920*61046927SAndroid Build Coastguard Worker T16 arg16,
9921*61046927SAndroid Build Coastguard Worker T17 arg17,
9922*61046927SAndroid Build Coastguard Worker T18 arg18,
9923*61046927SAndroid Build Coastguard Worker T19 arg19,
9924*61046927SAndroid Build Coastguard Worker T20 arg20)
9925*61046927SAndroid Build Coastguard Worker {
9926*61046927SAndroid Build Coastguard Worker return functor_(
9927*61046927SAndroid Build Coastguard Worker enqueueArgs,
9928*61046927SAndroid Build Coastguard Worker arg0,
9929*61046927SAndroid Build Coastguard Worker arg1,
9930*61046927SAndroid Build Coastguard Worker arg2,
9931*61046927SAndroid Build Coastguard Worker arg3,
9932*61046927SAndroid Build Coastguard Worker arg4,
9933*61046927SAndroid Build Coastguard Worker arg5,
9934*61046927SAndroid Build Coastguard Worker arg6,
9935*61046927SAndroid Build Coastguard Worker arg7,
9936*61046927SAndroid Build Coastguard Worker arg8,
9937*61046927SAndroid Build Coastguard Worker arg9,
9938*61046927SAndroid Build Coastguard Worker arg10,
9939*61046927SAndroid Build Coastguard Worker arg11,
9940*61046927SAndroid Build Coastguard Worker arg12,
9941*61046927SAndroid Build Coastguard Worker arg13,
9942*61046927SAndroid Build Coastguard Worker arg14,
9943*61046927SAndroid Build Coastguard Worker arg15,
9944*61046927SAndroid Build Coastguard Worker arg16,
9945*61046927SAndroid Build Coastguard Worker arg17,
9946*61046927SAndroid Build Coastguard Worker arg18,
9947*61046927SAndroid Build Coastguard Worker arg19,
9948*61046927SAndroid Build Coastguard Worker arg20);
9949*61046927SAndroid Build Coastguard Worker }
9950*61046927SAndroid Build Coastguard Worker
9951*61046927SAndroid Build Coastguard Worker
9952*61046927SAndroid Build Coastguard Worker };
9953*61046927SAndroid Build Coastguard Worker
9954*61046927SAndroid Build Coastguard Worker template<
9955*61046927SAndroid Build Coastguard Worker typename T0,
9956*61046927SAndroid Build Coastguard Worker typename T1,
9957*61046927SAndroid Build Coastguard Worker typename T2,
9958*61046927SAndroid Build Coastguard Worker typename T3,
9959*61046927SAndroid Build Coastguard Worker typename T4,
9960*61046927SAndroid Build Coastguard Worker typename T5,
9961*61046927SAndroid Build Coastguard Worker typename T6,
9962*61046927SAndroid Build Coastguard Worker typename T7,
9963*61046927SAndroid Build Coastguard Worker typename T8,
9964*61046927SAndroid Build Coastguard Worker typename T9,
9965*61046927SAndroid Build Coastguard Worker typename T10,
9966*61046927SAndroid Build Coastguard Worker typename T11,
9967*61046927SAndroid Build Coastguard Worker typename T12,
9968*61046927SAndroid Build Coastguard Worker typename T13,
9969*61046927SAndroid Build Coastguard Worker typename T14,
9970*61046927SAndroid Build Coastguard Worker typename T15,
9971*61046927SAndroid Build Coastguard Worker typename T16,
9972*61046927SAndroid Build Coastguard Worker typename T17,
9973*61046927SAndroid Build Coastguard Worker typename T18,
9974*61046927SAndroid Build Coastguard Worker typename T19>
9975*61046927SAndroid Build Coastguard Worker struct functionImplementation_
9976*61046927SAndroid Build Coastguard Worker < T0,
9977*61046927SAndroid Build Coastguard Worker T1,
9978*61046927SAndroid Build Coastguard Worker T2,
9979*61046927SAndroid Build Coastguard Worker T3,
9980*61046927SAndroid Build Coastguard Worker T4,
9981*61046927SAndroid Build Coastguard Worker T5,
9982*61046927SAndroid Build Coastguard Worker T6,
9983*61046927SAndroid Build Coastguard Worker T7,
9984*61046927SAndroid Build Coastguard Worker T8,
9985*61046927SAndroid Build Coastguard Worker T9,
9986*61046927SAndroid Build Coastguard Worker T10,
9987*61046927SAndroid Build Coastguard Worker T11,
9988*61046927SAndroid Build Coastguard Worker T12,
9989*61046927SAndroid Build Coastguard Worker T13,
9990*61046927SAndroid Build Coastguard Worker T14,
9991*61046927SAndroid Build Coastguard Worker T15,
9992*61046927SAndroid Build Coastguard Worker T16,
9993*61046927SAndroid Build Coastguard Worker T17,
9994*61046927SAndroid Build Coastguard Worker T18,
9995*61046927SAndroid Build Coastguard Worker T19,
9996*61046927SAndroid Build Coastguard Worker NullType,
9997*61046927SAndroid Build Coastguard Worker NullType,
9998*61046927SAndroid Build Coastguard Worker NullType,
9999*61046927SAndroid Build Coastguard Worker NullType,
10000*61046927SAndroid Build Coastguard Worker NullType,
10001*61046927SAndroid Build Coastguard Worker NullType,
10002*61046927SAndroid Build Coastguard Worker NullType,
10003*61046927SAndroid Build Coastguard Worker NullType,
10004*61046927SAndroid Build Coastguard Worker NullType,
10005*61046927SAndroid Build Coastguard Worker NullType,
10006*61046927SAndroid Build Coastguard Worker NullType,
10007*61046927SAndroid Build Coastguard Worker NullType>
10008*61046927SAndroid Build Coastguard Worker {
10009*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
10010*61046927SAndroid Build Coastguard Worker T0,
10011*61046927SAndroid Build Coastguard Worker T1,
10012*61046927SAndroid Build Coastguard Worker T2,
10013*61046927SAndroid Build Coastguard Worker T3,
10014*61046927SAndroid Build Coastguard Worker T4,
10015*61046927SAndroid Build Coastguard Worker T5,
10016*61046927SAndroid Build Coastguard Worker T6,
10017*61046927SAndroid Build Coastguard Worker T7,
10018*61046927SAndroid Build Coastguard Worker T8,
10019*61046927SAndroid Build Coastguard Worker T9,
10020*61046927SAndroid Build Coastguard Worker T10,
10021*61046927SAndroid Build Coastguard Worker T11,
10022*61046927SAndroid Build Coastguard Worker T12,
10023*61046927SAndroid Build Coastguard Worker T13,
10024*61046927SAndroid Build Coastguard Worker T14,
10025*61046927SAndroid Build Coastguard Worker T15,
10026*61046927SAndroid Build Coastguard Worker T16,
10027*61046927SAndroid Build Coastguard Worker T17,
10028*61046927SAndroid Build Coastguard Worker T18,
10029*61046927SAndroid Build Coastguard Worker T19,
10030*61046927SAndroid Build Coastguard Worker NullType,
10031*61046927SAndroid Build Coastguard Worker NullType,
10032*61046927SAndroid Build Coastguard Worker NullType,
10033*61046927SAndroid Build Coastguard Worker NullType,
10034*61046927SAndroid Build Coastguard Worker NullType,
10035*61046927SAndroid Build Coastguard Worker NullType,
10036*61046927SAndroid Build Coastguard Worker NullType,
10037*61046927SAndroid Build Coastguard Worker NullType,
10038*61046927SAndroid Build Coastguard Worker NullType,
10039*61046927SAndroid Build Coastguard Worker NullType,
10040*61046927SAndroid Build Coastguard Worker NullType,
10041*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
10042*61046927SAndroid Build Coastguard Worker
10043*61046927SAndroid Build Coastguard Worker FunctorType functor_;
10044*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_10045*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
10046*61046927SAndroid Build Coastguard Worker functor_(functor)
10047*61046927SAndroid Build Coastguard Worker {
10048*61046927SAndroid Build Coastguard Worker
10049*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 20))
10050*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
10051*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
10052*61046927SAndroid Build Coastguard Worker #endif
10053*61046927SAndroid Build Coastguard Worker
10054*61046927SAndroid Build Coastguard Worker }
10055*61046927SAndroid Build Coastguard Worker
10056*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
10057*61046927SAndroid Build Coastguard Worker typedef Event result_type;
10058*61046927SAndroid Build Coastguard Worker
10059*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
10060*61046927SAndroid Build Coastguard Worker typedef Event type_(
10061*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
10062*61046927SAndroid Build Coastguard Worker T0,
10063*61046927SAndroid Build Coastguard Worker T1,
10064*61046927SAndroid Build Coastguard Worker T2,
10065*61046927SAndroid Build Coastguard Worker T3,
10066*61046927SAndroid Build Coastguard Worker T4,
10067*61046927SAndroid Build Coastguard Worker T5,
10068*61046927SAndroid Build Coastguard Worker T6,
10069*61046927SAndroid Build Coastguard Worker T7,
10070*61046927SAndroid Build Coastguard Worker T8,
10071*61046927SAndroid Build Coastguard Worker T9,
10072*61046927SAndroid Build Coastguard Worker T10,
10073*61046927SAndroid Build Coastguard Worker T11,
10074*61046927SAndroid Build Coastguard Worker T12,
10075*61046927SAndroid Build Coastguard Worker T13,
10076*61046927SAndroid Build Coastguard Worker T14,
10077*61046927SAndroid Build Coastguard Worker T15,
10078*61046927SAndroid Build Coastguard Worker T16,
10079*61046927SAndroid Build Coastguard Worker T17,
10080*61046927SAndroid Build Coastguard Worker T18,
10081*61046927SAndroid Build Coastguard Worker T19);
10082*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_10083*61046927SAndroid Build Coastguard Worker Event operator()(
10084*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
10085*61046927SAndroid Build Coastguard Worker T0 arg0,
10086*61046927SAndroid Build Coastguard Worker T1 arg1,
10087*61046927SAndroid Build Coastguard Worker T2 arg2,
10088*61046927SAndroid Build Coastguard Worker T3 arg3,
10089*61046927SAndroid Build Coastguard Worker T4 arg4,
10090*61046927SAndroid Build Coastguard Worker T5 arg5,
10091*61046927SAndroid Build Coastguard Worker T6 arg6,
10092*61046927SAndroid Build Coastguard Worker T7 arg7,
10093*61046927SAndroid Build Coastguard Worker T8 arg8,
10094*61046927SAndroid Build Coastguard Worker T9 arg9,
10095*61046927SAndroid Build Coastguard Worker T10 arg10,
10096*61046927SAndroid Build Coastguard Worker T11 arg11,
10097*61046927SAndroid Build Coastguard Worker T12 arg12,
10098*61046927SAndroid Build Coastguard Worker T13 arg13,
10099*61046927SAndroid Build Coastguard Worker T14 arg14,
10100*61046927SAndroid Build Coastguard Worker T15 arg15,
10101*61046927SAndroid Build Coastguard Worker T16 arg16,
10102*61046927SAndroid Build Coastguard Worker T17 arg17,
10103*61046927SAndroid Build Coastguard Worker T18 arg18,
10104*61046927SAndroid Build Coastguard Worker T19 arg19)
10105*61046927SAndroid Build Coastguard Worker {
10106*61046927SAndroid Build Coastguard Worker return functor_(
10107*61046927SAndroid Build Coastguard Worker enqueueArgs,
10108*61046927SAndroid Build Coastguard Worker arg0,
10109*61046927SAndroid Build Coastguard Worker arg1,
10110*61046927SAndroid Build Coastguard Worker arg2,
10111*61046927SAndroid Build Coastguard Worker arg3,
10112*61046927SAndroid Build Coastguard Worker arg4,
10113*61046927SAndroid Build Coastguard Worker arg5,
10114*61046927SAndroid Build Coastguard Worker arg6,
10115*61046927SAndroid Build Coastguard Worker arg7,
10116*61046927SAndroid Build Coastguard Worker arg8,
10117*61046927SAndroid Build Coastguard Worker arg9,
10118*61046927SAndroid Build Coastguard Worker arg10,
10119*61046927SAndroid Build Coastguard Worker arg11,
10120*61046927SAndroid Build Coastguard Worker arg12,
10121*61046927SAndroid Build Coastguard Worker arg13,
10122*61046927SAndroid Build Coastguard Worker arg14,
10123*61046927SAndroid Build Coastguard Worker arg15,
10124*61046927SAndroid Build Coastguard Worker arg16,
10125*61046927SAndroid Build Coastguard Worker arg17,
10126*61046927SAndroid Build Coastguard Worker arg18,
10127*61046927SAndroid Build Coastguard Worker arg19);
10128*61046927SAndroid Build Coastguard Worker }
10129*61046927SAndroid Build Coastguard Worker
10130*61046927SAndroid Build Coastguard Worker
10131*61046927SAndroid Build Coastguard Worker };
10132*61046927SAndroid Build Coastguard Worker
10133*61046927SAndroid Build Coastguard Worker template<
10134*61046927SAndroid Build Coastguard Worker typename T0,
10135*61046927SAndroid Build Coastguard Worker typename T1,
10136*61046927SAndroid Build Coastguard Worker typename T2,
10137*61046927SAndroid Build Coastguard Worker typename T3,
10138*61046927SAndroid Build Coastguard Worker typename T4,
10139*61046927SAndroid Build Coastguard Worker typename T5,
10140*61046927SAndroid Build Coastguard Worker typename T6,
10141*61046927SAndroid Build Coastguard Worker typename T7,
10142*61046927SAndroid Build Coastguard Worker typename T8,
10143*61046927SAndroid Build Coastguard Worker typename T9,
10144*61046927SAndroid Build Coastguard Worker typename T10,
10145*61046927SAndroid Build Coastguard Worker typename T11,
10146*61046927SAndroid Build Coastguard Worker typename T12,
10147*61046927SAndroid Build Coastguard Worker typename T13,
10148*61046927SAndroid Build Coastguard Worker typename T14,
10149*61046927SAndroid Build Coastguard Worker typename T15,
10150*61046927SAndroid Build Coastguard Worker typename T16,
10151*61046927SAndroid Build Coastguard Worker typename T17,
10152*61046927SAndroid Build Coastguard Worker typename T18>
10153*61046927SAndroid Build Coastguard Worker struct functionImplementation_
10154*61046927SAndroid Build Coastguard Worker < T0,
10155*61046927SAndroid Build Coastguard Worker T1,
10156*61046927SAndroid Build Coastguard Worker T2,
10157*61046927SAndroid Build Coastguard Worker T3,
10158*61046927SAndroid Build Coastguard Worker T4,
10159*61046927SAndroid Build Coastguard Worker T5,
10160*61046927SAndroid Build Coastguard Worker T6,
10161*61046927SAndroid Build Coastguard Worker T7,
10162*61046927SAndroid Build Coastguard Worker T8,
10163*61046927SAndroid Build Coastguard Worker T9,
10164*61046927SAndroid Build Coastguard Worker T10,
10165*61046927SAndroid Build Coastguard Worker T11,
10166*61046927SAndroid Build Coastguard Worker T12,
10167*61046927SAndroid Build Coastguard Worker T13,
10168*61046927SAndroid Build Coastguard Worker T14,
10169*61046927SAndroid Build Coastguard Worker T15,
10170*61046927SAndroid Build Coastguard Worker T16,
10171*61046927SAndroid Build Coastguard Worker T17,
10172*61046927SAndroid Build Coastguard Worker T18,
10173*61046927SAndroid Build Coastguard Worker NullType,
10174*61046927SAndroid Build Coastguard Worker NullType,
10175*61046927SAndroid Build Coastguard Worker NullType,
10176*61046927SAndroid Build Coastguard Worker NullType,
10177*61046927SAndroid Build Coastguard Worker NullType,
10178*61046927SAndroid Build Coastguard Worker NullType,
10179*61046927SAndroid Build Coastguard Worker NullType,
10180*61046927SAndroid Build Coastguard Worker NullType,
10181*61046927SAndroid Build Coastguard Worker NullType,
10182*61046927SAndroid Build Coastguard Worker NullType,
10183*61046927SAndroid Build Coastguard Worker NullType,
10184*61046927SAndroid Build Coastguard Worker NullType,
10185*61046927SAndroid Build Coastguard Worker NullType>
10186*61046927SAndroid Build Coastguard Worker {
10187*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
10188*61046927SAndroid Build Coastguard Worker T0,
10189*61046927SAndroid Build Coastguard Worker T1,
10190*61046927SAndroid Build Coastguard Worker T2,
10191*61046927SAndroid Build Coastguard Worker T3,
10192*61046927SAndroid Build Coastguard Worker T4,
10193*61046927SAndroid Build Coastguard Worker T5,
10194*61046927SAndroid Build Coastguard Worker T6,
10195*61046927SAndroid Build Coastguard Worker T7,
10196*61046927SAndroid Build Coastguard Worker T8,
10197*61046927SAndroid Build Coastguard Worker T9,
10198*61046927SAndroid Build Coastguard Worker T10,
10199*61046927SAndroid Build Coastguard Worker T11,
10200*61046927SAndroid Build Coastguard Worker T12,
10201*61046927SAndroid Build Coastguard Worker T13,
10202*61046927SAndroid Build Coastguard Worker T14,
10203*61046927SAndroid Build Coastguard Worker T15,
10204*61046927SAndroid Build Coastguard Worker T16,
10205*61046927SAndroid Build Coastguard Worker T17,
10206*61046927SAndroid Build Coastguard Worker T18,
10207*61046927SAndroid Build Coastguard Worker NullType,
10208*61046927SAndroid Build Coastguard Worker NullType,
10209*61046927SAndroid Build Coastguard Worker NullType,
10210*61046927SAndroid Build Coastguard Worker NullType,
10211*61046927SAndroid Build Coastguard Worker NullType,
10212*61046927SAndroid Build Coastguard Worker NullType,
10213*61046927SAndroid Build Coastguard Worker NullType,
10214*61046927SAndroid Build Coastguard Worker NullType,
10215*61046927SAndroid Build Coastguard Worker NullType,
10216*61046927SAndroid Build Coastguard Worker NullType,
10217*61046927SAndroid Build Coastguard Worker NullType,
10218*61046927SAndroid Build Coastguard Worker NullType,
10219*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
10220*61046927SAndroid Build Coastguard Worker
10221*61046927SAndroid Build Coastguard Worker FunctorType functor_;
10222*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_10223*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
10224*61046927SAndroid Build Coastguard Worker functor_(functor)
10225*61046927SAndroid Build Coastguard Worker {
10226*61046927SAndroid Build Coastguard Worker
10227*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 19))
10228*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
10229*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
10230*61046927SAndroid Build Coastguard Worker #endif
10231*61046927SAndroid Build Coastguard Worker
10232*61046927SAndroid Build Coastguard Worker }
10233*61046927SAndroid Build Coastguard Worker
10234*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
10235*61046927SAndroid Build Coastguard Worker typedef Event result_type;
10236*61046927SAndroid Build Coastguard Worker
10237*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
10238*61046927SAndroid Build Coastguard Worker typedef Event type_(
10239*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
10240*61046927SAndroid Build Coastguard Worker T0,
10241*61046927SAndroid Build Coastguard Worker T1,
10242*61046927SAndroid Build Coastguard Worker T2,
10243*61046927SAndroid Build Coastguard Worker T3,
10244*61046927SAndroid Build Coastguard Worker T4,
10245*61046927SAndroid Build Coastguard Worker T5,
10246*61046927SAndroid Build Coastguard Worker T6,
10247*61046927SAndroid Build Coastguard Worker T7,
10248*61046927SAndroid Build Coastguard Worker T8,
10249*61046927SAndroid Build Coastguard Worker T9,
10250*61046927SAndroid Build Coastguard Worker T10,
10251*61046927SAndroid Build Coastguard Worker T11,
10252*61046927SAndroid Build Coastguard Worker T12,
10253*61046927SAndroid Build Coastguard Worker T13,
10254*61046927SAndroid Build Coastguard Worker T14,
10255*61046927SAndroid Build Coastguard Worker T15,
10256*61046927SAndroid Build Coastguard Worker T16,
10257*61046927SAndroid Build Coastguard Worker T17,
10258*61046927SAndroid Build Coastguard Worker T18);
10259*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_10260*61046927SAndroid Build Coastguard Worker Event operator()(
10261*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
10262*61046927SAndroid Build Coastguard Worker T0 arg0,
10263*61046927SAndroid Build Coastguard Worker T1 arg1,
10264*61046927SAndroid Build Coastguard Worker T2 arg2,
10265*61046927SAndroid Build Coastguard Worker T3 arg3,
10266*61046927SAndroid Build Coastguard Worker T4 arg4,
10267*61046927SAndroid Build Coastguard Worker T5 arg5,
10268*61046927SAndroid Build Coastguard Worker T6 arg6,
10269*61046927SAndroid Build Coastguard Worker T7 arg7,
10270*61046927SAndroid Build Coastguard Worker T8 arg8,
10271*61046927SAndroid Build Coastguard Worker T9 arg9,
10272*61046927SAndroid Build Coastguard Worker T10 arg10,
10273*61046927SAndroid Build Coastguard Worker T11 arg11,
10274*61046927SAndroid Build Coastguard Worker T12 arg12,
10275*61046927SAndroid Build Coastguard Worker T13 arg13,
10276*61046927SAndroid Build Coastguard Worker T14 arg14,
10277*61046927SAndroid Build Coastguard Worker T15 arg15,
10278*61046927SAndroid Build Coastguard Worker T16 arg16,
10279*61046927SAndroid Build Coastguard Worker T17 arg17,
10280*61046927SAndroid Build Coastguard Worker T18 arg18)
10281*61046927SAndroid Build Coastguard Worker {
10282*61046927SAndroid Build Coastguard Worker return functor_(
10283*61046927SAndroid Build Coastguard Worker enqueueArgs,
10284*61046927SAndroid Build Coastguard Worker arg0,
10285*61046927SAndroid Build Coastguard Worker arg1,
10286*61046927SAndroid Build Coastguard Worker arg2,
10287*61046927SAndroid Build Coastguard Worker arg3,
10288*61046927SAndroid Build Coastguard Worker arg4,
10289*61046927SAndroid Build Coastguard Worker arg5,
10290*61046927SAndroid Build Coastguard Worker arg6,
10291*61046927SAndroid Build Coastguard Worker arg7,
10292*61046927SAndroid Build Coastguard Worker arg8,
10293*61046927SAndroid Build Coastguard Worker arg9,
10294*61046927SAndroid Build Coastguard Worker arg10,
10295*61046927SAndroid Build Coastguard Worker arg11,
10296*61046927SAndroid Build Coastguard Worker arg12,
10297*61046927SAndroid Build Coastguard Worker arg13,
10298*61046927SAndroid Build Coastguard Worker arg14,
10299*61046927SAndroid Build Coastguard Worker arg15,
10300*61046927SAndroid Build Coastguard Worker arg16,
10301*61046927SAndroid Build Coastguard Worker arg17,
10302*61046927SAndroid Build Coastguard Worker arg18);
10303*61046927SAndroid Build Coastguard Worker }
10304*61046927SAndroid Build Coastguard Worker
10305*61046927SAndroid Build Coastguard Worker
10306*61046927SAndroid Build Coastguard Worker };
10307*61046927SAndroid Build Coastguard Worker
10308*61046927SAndroid Build Coastguard Worker template<
10309*61046927SAndroid Build Coastguard Worker typename T0,
10310*61046927SAndroid Build Coastguard Worker typename T1,
10311*61046927SAndroid Build Coastguard Worker typename T2,
10312*61046927SAndroid Build Coastguard Worker typename T3,
10313*61046927SAndroid Build Coastguard Worker typename T4,
10314*61046927SAndroid Build Coastguard Worker typename T5,
10315*61046927SAndroid Build Coastguard Worker typename T6,
10316*61046927SAndroid Build Coastguard Worker typename T7,
10317*61046927SAndroid Build Coastguard Worker typename T8,
10318*61046927SAndroid Build Coastguard Worker typename T9,
10319*61046927SAndroid Build Coastguard Worker typename T10,
10320*61046927SAndroid Build Coastguard Worker typename T11,
10321*61046927SAndroid Build Coastguard Worker typename T12,
10322*61046927SAndroid Build Coastguard Worker typename T13,
10323*61046927SAndroid Build Coastguard Worker typename T14,
10324*61046927SAndroid Build Coastguard Worker typename T15,
10325*61046927SAndroid Build Coastguard Worker typename T16,
10326*61046927SAndroid Build Coastguard Worker typename T17>
10327*61046927SAndroid Build Coastguard Worker struct functionImplementation_
10328*61046927SAndroid Build Coastguard Worker < T0,
10329*61046927SAndroid Build Coastguard Worker T1,
10330*61046927SAndroid Build Coastguard Worker T2,
10331*61046927SAndroid Build Coastguard Worker T3,
10332*61046927SAndroid Build Coastguard Worker T4,
10333*61046927SAndroid Build Coastguard Worker T5,
10334*61046927SAndroid Build Coastguard Worker T6,
10335*61046927SAndroid Build Coastguard Worker T7,
10336*61046927SAndroid Build Coastguard Worker T8,
10337*61046927SAndroid Build Coastguard Worker T9,
10338*61046927SAndroid Build Coastguard Worker T10,
10339*61046927SAndroid Build Coastguard Worker T11,
10340*61046927SAndroid Build Coastguard Worker T12,
10341*61046927SAndroid Build Coastguard Worker T13,
10342*61046927SAndroid Build Coastguard Worker T14,
10343*61046927SAndroid Build Coastguard Worker T15,
10344*61046927SAndroid Build Coastguard Worker T16,
10345*61046927SAndroid Build Coastguard Worker T17,
10346*61046927SAndroid Build Coastguard Worker NullType,
10347*61046927SAndroid Build Coastguard Worker NullType,
10348*61046927SAndroid Build Coastguard Worker NullType,
10349*61046927SAndroid Build Coastguard Worker NullType,
10350*61046927SAndroid Build Coastguard Worker NullType,
10351*61046927SAndroid Build Coastguard Worker NullType,
10352*61046927SAndroid Build Coastguard Worker NullType,
10353*61046927SAndroid Build Coastguard Worker NullType,
10354*61046927SAndroid Build Coastguard Worker NullType,
10355*61046927SAndroid Build Coastguard Worker NullType,
10356*61046927SAndroid Build Coastguard Worker NullType,
10357*61046927SAndroid Build Coastguard Worker NullType,
10358*61046927SAndroid Build Coastguard Worker NullType,
10359*61046927SAndroid Build Coastguard Worker NullType>
10360*61046927SAndroid Build Coastguard Worker {
10361*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
10362*61046927SAndroid Build Coastguard Worker T0,
10363*61046927SAndroid Build Coastguard Worker T1,
10364*61046927SAndroid Build Coastguard Worker T2,
10365*61046927SAndroid Build Coastguard Worker T3,
10366*61046927SAndroid Build Coastguard Worker T4,
10367*61046927SAndroid Build Coastguard Worker T5,
10368*61046927SAndroid Build Coastguard Worker T6,
10369*61046927SAndroid Build Coastguard Worker T7,
10370*61046927SAndroid Build Coastguard Worker T8,
10371*61046927SAndroid Build Coastguard Worker T9,
10372*61046927SAndroid Build Coastguard Worker T10,
10373*61046927SAndroid Build Coastguard Worker T11,
10374*61046927SAndroid Build Coastguard Worker T12,
10375*61046927SAndroid Build Coastguard Worker T13,
10376*61046927SAndroid Build Coastguard Worker T14,
10377*61046927SAndroid Build Coastguard Worker T15,
10378*61046927SAndroid Build Coastguard Worker T16,
10379*61046927SAndroid Build Coastguard Worker T17,
10380*61046927SAndroid Build Coastguard Worker NullType,
10381*61046927SAndroid Build Coastguard Worker NullType,
10382*61046927SAndroid Build Coastguard Worker NullType,
10383*61046927SAndroid Build Coastguard Worker NullType,
10384*61046927SAndroid Build Coastguard Worker NullType,
10385*61046927SAndroid Build Coastguard Worker NullType,
10386*61046927SAndroid Build Coastguard Worker NullType,
10387*61046927SAndroid Build Coastguard Worker NullType,
10388*61046927SAndroid Build Coastguard Worker NullType,
10389*61046927SAndroid Build Coastguard Worker NullType,
10390*61046927SAndroid Build Coastguard Worker NullType,
10391*61046927SAndroid Build Coastguard Worker NullType,
10392*61046927SAndroid Build Coastguard Worker NullType,
10393*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
10394*61046927SAndroid Build Coastguard Worker
10395*61046927SAndroid Build Coastguard Worker FunctorType functor_;
10396*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_10397*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
10398*61046927SAndroid Build Coastguard Worker functor_(functor)
10399*61046927SAndroid Build Coastguard Worker {
10400*61046927SAndroid Build Coastguard Worker
10401*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 18))
10402*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
10403*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
10404*61046927SAndroid Build Coastguard Worker #endif
10405*61046927SAndroid Build Coastguard Worker
10406*61046927SAndroid Build Coastguard Worker }
10407*61046927SAndroid Build Coastguard Worker
10408*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
10409*61046927SAndroid Build Coastguard Worker typedef Event result_type;
10410*61046927SAndroid Build Coastguard Worker
10411*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
10412*61046927SAndroid Build Coastguard Worker typedef Event type_(
10413*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
10414*61046927SAndroid Build Coastguard Worker T0,
10415*61046927SAndroid Build Coastguard Worker T1,
10416*61046927SAndroid Build Coastguard Worker T2,
10417*61046927SAndroid Build Coastguard Worker T3,
10418*61046927SAndroid Build Coastguard Worker T4,
10419*61046927SAndroid Build Coastguard Worker T5,
10420*61046927SAndroid Build Coastguard Worker T6,
10421*61046927SAndroid Build Coastguard Worker T7,
10422*61046927SAndroid Build Coastguard Worker T8,
10423*61046927SAndroid Build Coastguard Worker T9,
10424*61046927SAndroid Build Coastguard Worker T10,
10425*61046927SAndroid Build Coastguard Worker T11,
10426*61046927SAndroid Build Coastguard Worker T12,
10427*61046927SAndroid Build Coastguard Worker T13,
10428*61046927SAndroid Build Coastguard Worker T14,
10429*61046927SAndroid Build Coastguard Worker T15,
10430*61046927SAndroid Build Coastguard Worker T16,
10431*61046927SAndroid Build Coastguard Worker T17);
10432*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_10433*61046927SAndroid Build Coastguard Worker Event operator()(
10434*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
10435*61046927SAndroid Build Coastguard Worker T0 arg0,
10436*61046927SAndroid Build Coastguard Worker T1 arg1,
10437*61046927SAndroid Build Coastguard Worker T2 arg2,
10438*61046927SAndroid Build Coastguard Worker T3 arg3,
10439*61046927SAndroid Build Coastguard Worker T4 arg4,
10440*61046927SAndroid Build Coastguard Worker T5 arg5,
10441*61046927SAndroid Build Coastguard Worker T6 arg6,
10442*61046927SAndroid Build Coastguard Worker T7 arg7,
10443*61046927SAndroid Build Coastguard Worker T8 arg8,
10444*61046927SAndroid Build Coastguard Worker T9 arg9,
10445*61046927SAndroid Build Coastguard Worker T10 arg10,
10446*61046927SAndroid Build Coastguard Worker T11 arg11,
10447*61046927SAndroid Build Coastguard Worker T12 arg12,
10448*61046927SAndroid Build Coastguard Worker T13 arg13,
10449*61046927SAndroid Build Coastguard Worker T14 arg14,
10450*61046927SAndroid Build Coastguard Worker T15 arg15,
10451*61046927SAndroid Build Coastguard Worker T16 arg16,
10452*61046927SAndroid Build Coastguard Worker T17 arg17)
10453*61046927SAndroid Build Coastguard Worker {
10454*61046927SAndroid Build Coastguard Worker return functor_(
10455*61046927SAndroid Build Coastguard Worker enqueueArgs,
10456*61046927SAndroid Build Coastguard Worker arg0,
10457*61046927SAndroid Build Coastguard Worker arg1,
10458*61046927SAndroid Build Coastguard Worker arg2,
10459*61046927SAndroid Build Coastguard Worker arg3,
10460*61046927SAndroid Build Coastguard Worker arg4,
10461*61046927SAndroid Build Coastguard Worker arg5,
10462*61046927SAndroid Build Coastguard Worker arg6,
10463*61046927SAndroid Build Coastguard Worker arg7,
10464*61046927SAndroid Build Coastguard Worker arg8,
10465*61046927SAndroid Build Coastguard Worker arg9,
10466*61046927SAndroid Build Coastguard Worker arg10,
10467*61046927SAndroid Build Coastguard Worker arg11,
10468*61046927SAndroid Build Coastguard Worker arg12,
10469*61046927SAndroid Build Coastguard Worker arg13,
10470*61046927SAndroid Build Coastguard Worker arg14,
10471*61046927SAndroid Build Coastguard Worker arg15,
10472*61046927SAndroid Build Coastguard Worker arg16,
10473*61046927SAndroid Build Coastguard Worker arg17);
10474*61046927SAndroid Build Coastguard Worker }
10475*61046927SAndroid Build Coastguard Worker
10476*61046927SAndroid Build Coastguard Worker
10477*61046927SAndroid Build Coastguard Worker };
10478*61046927SAndroid Build Coastguard Worker
10479*61046927SAndroid Build Coastguard Worker template<
10480*61046927SAndroid Build Coastguard Worker typename T0,
10481*61046927SAndroid Build Coastguard Worker typename T1,
10482*61046927SAndroid Build Coastguard Worker typename T2,
10483*61046927SAndroid Build Coastguard Worker typename T3,
10484*61046927SAndroid Build Coastguard Worker typename T4,
10485*61046927SAndroid Build Coastguard Worker typename T5,
10486*61046927SAndroid Build Coastguard Worker typename T6,
10487*61046927SAndroid Build Coastguard Worker typename T7,
10488*61046927SAndroid Build Coastguard Worker typename T8,
10489*61046927SAndroid Build Coastguard Worker typename T9,
10490*61046927SAndroid Build Coastguard Worker typename T10,
10491*61046927SAndroid Build Coastguard Worker typename T11,
10492*61046927SAndroid Build Coastguard Worker typename T12,
10493*61046927SAndroid Build Coastguard Worker typename T13,
10494*61046927SAndroid Build Coastguard Worker typename T14,
10495*61046927SAndroid Build Coastguard Worker typename T15,
10496*61046927SAndroid Build Coastguard Worker typename T16>
10497*61046927SAndroid Build Coastguard Worker struct functionImplementation_
10498*61046927SAndroid Build Coastguard Worker < T0,
10499*61046927SAndroid Build Coastguard Worker T1,
10500*61046927SAndroid Build Coastguard Worker T2,
10501*61046927SAndroid Build Coastguard Worker T3,
10502*61046927SAndroid Build Coastguard Worker T4,
10503*61046927SAndroid Build Coastguard Worker T5,
10504*61046927SAndroid Build Coastguard Worker T6,
10505*61046927SAndroid Build Coastguard Worker T7,
10506*61046927SAndroid Build Coastguard Worker T8,
10507*61046927SAndroid Build Coastguard Worker T9,
10508*61046927SAndroid Build Coastguard Worker T10,
10509*61046927SAndroid Build Coastguard Worker T11,
10510*61046927SAndroid Build Coastguard Worker T12,
10511*61046927SAndroid Build Coastguard Worker T13,
10512*61046927SAndroid Build Coastguard Worker T14,
10513*61046927SAndroid Build Coastguard Worker T15,
10514*61046927SAndroid Build Coastguard Worker T16,
10515*61046927SAndroid Build Coastguard Worker NullType,
10516*61046927SAndroid Build Coastguard Worker NullType,
10517*61046927SAndroid Build Coastguard Worker NullType,
10518*61046927SAndroid Build Coastguard Worker NullType,
10519*61046927SAndroid Build Coastguard Worker NullType,
10520*61046927SAndroid Build Coastguard Worker NullType,
10521*61046927SAndroid Build Coastguard Worker NullType,
10522*61046927SAndroid Build Coastguard Worker NullType,
10523*61046927SAndroid Build Coastguard Worker NullType,
10524*61046927SAndroid Build Coastguard Worker NullType,
10525*61046927SAndroid Build Coastguard Worker NullType,
10526*61046927SAndroid Build Coastguard Worker NullType,
10527*61046927SAndroid Build Coastguard Worker NullType,
10528*61046927SAndroid Build Coastguard Worker NullType,
10529*61046927SAndroid Build Coastguard Worker NullType>
10530*61046927SAndroid Build Coastguard Worker {
10531*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
10532*61046927SAndroid Build Coastguard Worker T0,
10533*61046927SAndroid Build Coastguard Worker T1,
10534*61046927SAndroid Build Coastguard Worker T2,
10535*61046927SAndroid Build Coastguard Worker T3,
10536*61046927SAndroid Build Coastguard Worker T4,
10537*61046927SAndroid Build Coastguard Worker T5,
10538*61046927SAndroid Build Coastguard Worker T6,
10539*61046927SAndroid Build Coastguard Worker T7,
10540*61046927SAndroid Build Coastguard Worker T8,
10541*61046927SAndroid Build Coastguard Worker T9,
10542*61046927SAndroid Build Coastguard Worker T10,
10543*61046927SAndroid Build Coastguard Worker T11,
10544*61046927SAndroid Build Coastguard Worker T12,
10545*61046927SAndroid Build Coastguard Worker T13,
10546*61046927SAndroid Build Coastguard Worker T14,
10547*61046927SAndroid Build Coastguard Worker T15,
10548*61046927SAndroid Build Coastguard Worker T16,
10549*61046927SAndroid Build Coastguard Worker NullType,
10550*61046927SAndroid Build Coastguard Worker NullType,
10551*61046927SAndroid Build Coastguard Worker NullType,
10552*61046927SAndroid Build Coastguard Worker NullType,
10553*61046927SAndroid Build Coastguard Worker NullType,
10554*61046927SAndroid Build Coastguard Worker NullType,
10555*61046927SAndroid Build Coastguard Worker NullType,
10556*61046927SAndroid Build Coastguard Worker NullType,
10557*61046927SAndroid Build Coastguard Worker NullType,
10558*61046927SAndroid Build Coastguard Worker NullType,
10559*61046927SAndroid Build Coastguard Worker NullType,
10560*61046927SAndroid Build Coastguard Worker NullType,
10561*61046927SAndroid Build Coastguard Worker NullType,
10562*61046927SAndroid Build Coastguard Worker NullType,
10563*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
10564*61046927SAndroid Build Coastguard Worker
10565*61046927SAndroid Build Coastguard Worker FunctorType functor_;
10566*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_10567*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
10568*61046927SAndroid Build Coastguard Worker functor_(functor)
10569*61046927SAndroid Build Coastguard Worker {
10570*61046927SAndroid Build Coastguard Worker
10571*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 17))
10572*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
10573*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
10574*61046927SAndroid Build Coastguard Worker #endif
10575*61046927SAndroid Build Coastguard Worker
10576*61046927SAndroid Build Coastguard Worker }
10577*61046927SAndroid Build Coastguard Worker
10578*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
10579*61046927SAndroid Build Coastguard Worker typedef Event result_type;
10580*61046927SAndroid Build Coastguard Worker
10581*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
10582*61046927SAndroid Build Coastguard Worker typedef Event type_(
10583*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
10584*61046927SAndroid Build Coastguard Worker T0,
10585*61046927SAndroid Build Coastguard Worker T1,
10586*61046927SAndroid Build Coastguard Worker T2,
10587*61046927SAndroid Build Coastguard Worker T3,
10588*61046927SAndroid Build Coastguard Worker T4,
10589*61046927SAndroid Build Coastguard Worker T5,
10590*61046927SAndroid Build Coastguard Worker T6,
10591*61046927SAndroid Build Coastguard Worker T7,
10592*61046927SAndroid Build Coastguard Worker T8,
10593*61046927SAndroid Build Coastguard Worker T9,
10594*61046927SAndroid Build Coastguard Worker T10,
10595*61046927SAndroid Build Coastguard Worker T11,
10596*61046927SAndroid Build Coastguard Worker T12,
10597*61046927SAndroid Build Coastguard Worker T13,
10598*61046927SAndroid Build Coastguard Worker T14,
10599*61046927SAndroid Build Coastguard Worker T15,
10600*61046927SAndroid Build Coastguard Worker T16);
10601*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_10602*61046927SAndroid Build Coastguard Worker Event operator()(
10603*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
10604*61046927SAndroid Build Coastguard Worker T0 arg0,
10605*61046927SAndroid Build Coastguard Worker T1 arg1,
10606*61046927SAndroid Build Coastguard Worker T2 arg2,
10607*61046927SAndroid Build Coastguard Worker T3 arg3,
10608*61046927SAndroid Build Coastguard Worker T4 arg4,
10609*61046927SAndroid Build Coastguard Worker T5 arg5,
10610*61046927SAndroid Build Coastguard Worker T6 arg6,
10611*61046927SAndroid Build Coastguard Worker T7 arg7,
10612*61046927SAndroid Build Coastguard Worker T8 arg8,
10613*61046927SAndroid Build Coastguard Worker T9 arg9,
10614*61046927SAndroid Build Coastguard Worker T10 arg10,
10615*61046927SAndroid Build Coastguard Worker T11 arg11,
10616*61046927SAndroid Build Coastguard Worker T12 arg12,
10617*61046927SAndroid Build Coastguard Worker T13 arg13,
10618*61046927SAndroid Build Coastguard Worker T14 arg14,
10619*61046927SAndroid Build Coastguard Worker T15 arg15,
10620*61046927SAndroid Build Coastguard Worker T16 arg16)
10621*61046927SAndroid Build Coastguard Worker {
10622*61046927SAndroid Build Coastguard Worker return functor_(
10623*61046927SAndroid Build Coastguard Worker enqueueArgs,
10624*61046927SAndroid Build Coastguard Worker arg0,
10625*61046927SAndroid Build Coastguard Worker arg1,
10626*61046927SAndroid Build Coastguard Worker arg2,
10627*61046927SAndroid Build Coastguard Worker arg3,
10628*61046927SAndroid Build Coastguard Worker arg4,
10629*61046927SAndroid Build Coastguard Worker arg5,
10630*61046927SAndroid Build Coastguard Worker arg6,
10631*61046927SAndroid Build Coastguard Worker arg7,
10632*61046927SAndroid Build Coastguard Worker arg8,
10633*61046927SAndroid Build Coastguard Worker arg9,
10634*61046927SAndroid Build Coastguard Worker arg10,
10635*61046927SAndroid Build Coastguard Worker arg11,
10636*61046927SAndroid Build Coastguard Worker arg12,
10637*61046927SAndroid Build Coastguard Worker arg13,
10638*61046927SAndroid Build Coastguard Worker arg14,
10639*61046927SAndroid Build Coastguard Worker arg15,
10640*61046927SAndroid Build Coastguard Worker arg16);
10641*61046927SAndroid Build Coastguard Worker }
10642*61046927SAndroid Build Coastguard Worker
10643*61046927SAndroid Build Coastguard Worker
10644*61046927SAndroid Build Coastguard Worker };
10645*61046927SAndroid Build Coastguard Worker
10646*61046927SAndroid Build Coastguard Worker template<
10647*61046927SAndroid Build Coastguard Worker typename T0,
10648*61046927SAndroid Build Coastguard Worker typename T1,
10649*61046927SAndroid Build Coastguard Worker typename T2,
10650*61046927SAndroid Build Coastguard Worker typename T3,
10651*61046927SAndroid Build Coastguard Worker typename T4,
10652*61046927SAndroid Build Coastguard Worker typename T5,
10653*61046927SAndroid Build Coastguard Worker typename T6,
10654*61046927SAndroid Build Coastguard Worker typename T7,
10655*61046927SAndroid Build Coastguard Worker typename T8,
10656*61046927SAndroid Build Coastguard Worker typename T9,
10657*61046927SAndroid Build Coastguard Worker typename T10,
10658*61046927SAndroid Build Coastguard Worker typename T11,
10659*61046927SAndroid Build Coastguard Worker typename T12,
10660*61046927SAndroid Build Coastguard Worker typename T13,
10661*61046927SAndroid Build Coastguard Worker typename T14,
10662*61046927SAndroid Build Coastguard Worker typename T15>
10663*61046927SAndroid Build Coastguard Worker struct functionImplementation_
10664*61046927SAndroid Build Coastguard Worker < T0,
10665*61046927SAndroid Build Coastguard Worker T1,
10666*61046927SAndroid Build Coastguard Worker T2,
10667*61046927SAndroid Build Coastguard Worker T3,
10668*61046927SAndroid Build Coastguard Worker T4,
10669*61046927SAndroid Build Coastguard Worker T5,
10670*61046927SAndroid Build Coastguard Worker T6,
10671*61046927SAndroid Build Coastguard Worker T7,
10672*61046927SAndroid Build Coastguard Worker T8,
10673*61046927SAndroid Build Coastguard Worker T9,
10674*61046927SAndroid Build Coastguard Worker T10,
10675*61046927SAndroid Build Coastguard Worker T11,
10676*61046927SAndroid Build Coastguard Worker T12,
10677*61046927SAndroid Build Coastguard Worker T13,
10678*61046927SAndroid Build Coastguard Worker T14,
10679*61046927SAndroid Build Coastguard Worker T15,
10680*61046927SAndroid Build Coastguard Worker NullType,
10681*61046927SAndroid Build Coastguard Worker NullType,
10682*61046927SAndroid Build Coastguard Worker NullType,
10683*61046927SAndroid Build Coastguard Worker NullType,
10684*61046927SAndroid Build Coastguard Worker NullType,
10685*61046927SAndroid Build Coastguard Worker NullType,
10686*61046927SAndroid Build Coastguard Worker NullType,
10687*61046927SAndroid Build Coastguard Worker NullType,
10688*61046927SAndroid Build Coastguard Worker NullType,
10689*61046927SAndroid Build Coastguard Worker NullType,
10690*61046927SAndroid Build Coastguard Worker NullType,
10691*61046927SAndroid Build Coastguard Worker NullType,
10692*61046927SAndroid Build Coastguard Worker NullType,
10693*61046927SAndroid Build Coastguard Worker NullType,
10694*61046927SAndroid Build Coastguard Worker NullType,
10695*61046927SAndroid Build Coastguard Worker NullType>
10696*61046927SAndroid Build Coastguard Worker {
10697*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
10698*61046927SAndroid Build Coastguard Worker T0,
10699*61046927SAndroid Build Coastguard Worker T1,
10700*61046927SAndroid Build Coastguard Worker T2,
10701*61046927SAndroid Build Coastguard Worker T3,
10702*61046927SAndroid Build Coastguard Worker T4,
10703*61046927SAndroid Build Coastguard Worker T5,
10704*61046927SAndroid Build Coastguard Worker T6,
10705*61046927SAndroid Build Coastguard Worker T7,
10706*61046927SAndroid Build Coastguard Worker T8,
10707*61046927SAndroid Build Coastguard Worker T9,
10708*61046927SAndroid Build Coastguard Worker T10,
10709*61046927SAndroid Build Coastguard Worker T11,
10710*61046927SAndroid Build Coastguard Worker T12,
10711*61046927SAndroid Build Coastguard Worker T13,
10712*61046927SAndroid Build Coastguard Worker T14,
10713*61046927SAndroid Build Coastguard Worker T15,
10714*61046927SAndroid Build Coastguard Worker NullType,
10715*61046927SAndroid Build Coastguard Worker NullType,
10716*61046927SAndroid Build Coastguard Worker NullType,
10717*61046927SAndroid Build Coastguard Worker NullType,
10718*61046927SAndroid Build Coastguard Worker NullType,
10719*61046927SAndroid Build Coastguard Worker NullType,
10720*61046927SAndroid Build Coastguard Worker NullType,
10721*61046927SAndroid Build Coastguard Worker NullType,
10722*61046927SAndroid Build Coastguard Worker NullType,
10723*61046927SAndroid Build Coastguard Worker NullType,
10724*61046927SAndroid Build Coastguard Worker NullType,
10725*61046927SAndroid Build Coastguard Worker NullType,
10726*61046927SAndroid Build Coastguard Worker NullType,
10727*61046927SAndroid Build Coastguard Worker NullType,
10728*61046927SAndroid Build Coastguard Worker NullType,
10729*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
10730*61046927SAndroid Build Coastguard Worker
10731*61046927SAndroid Build Coastguard Worker FunctorType functor_;
10732*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_10733*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
10734*61046927SAndroid Build Coastguard Worker functor_(functor)
10735*61046927SAndroid Build Coastguard Worker {
10736*61046927SAndroid Build Coastguard Worker
10737*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 16))
10738*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
10739*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
10740*61046927SAndroid Build Coastguard Worker #endif
10741*61046927SAndroid Build Coastguard Worker
10742*61046927SAndroid Build Coastguard Worker }
10743*61046927SAndroid Build Coastguard Worker
10744*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
10745*61046927SAndroid Build Coastguard Worker typedef Event result_type;
10746*61046927SAndroid Build Coastguard Worker
10747*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
10748*61046927SAndroid Build Coastguard Worker typedef Event type_(
10749*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
10750*61046927SAndroid Build Coastguard Worker T0,
10751*61046927SAndroid Build Coastguard Worker T1,
10752*61046927SAndroid Build Coastguard Worker T2,
10753*61046927SAndroid Build Coastguard Worker T3,
10754*61046927SAndroid Build Coastguard Worker T4,
10755*61046927SAndroid Build Coastguard Worker T5,
10756*61046927SAndroid Build Coastguard Worker T6,
10757*61046927SAndroid Build Coastguard Worker T7,
10758*61046927SAndroid Build Coastguard Worker T8,
10759*61046927SAndroid Build Coastguard Worker T9,
10760*61046927SAndroid Build Coastguard Worker T10,
10761*61046927SAndroid Build Coastguard Worker T11,
10762*61046927SAndroid Build Coastguard Worker T12,
10763*61046927SAndroid Build Coastguard Worker T13,
10764*61046927SAndroid Build Coastguard Worker T14,
10765*61046927SAndroid Build Coastguard Worker T15);
10766*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_10767*61046927SAndroid Build Coastguard Worker Event operator()(
10768*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
10769*61046927SAndroid Build Coastguard Worker T0 arg0,
10770*61046927SAndroid Build Coastguard Worker T1 arg1,
10771*61046927SAndroid Build Coastguard Worker T2 arg2,
10772*61046927SAndroid Build Coastguard Worker T3 arg3,
10773*61046927SAndroid Build Coastguard Worker T4 arg4,
10774*61046927SAndroid Build Coastguard Worker T5 arg5,
10775*61046927SAndroid Build Coastguard Worker T6 arg6,
10776*61046927SAndroid Build Coastguard Worker T7 arg7,
10777*61046927SAndroid Build Coastguard Worker T8 arg8,
10778*61046927SAndroid Build Coastguard Worker T9 arg9,
10779*61046927SAndroid Build Coastguard Worker T10 arg10,
10780*61046927SAndroid Build Coastguard Worker T11 arg11,
10781*61046927SAndroid Build Coastguard Worker T12 arg12,
10782*61046927SAndroid Build Coastguard Worker T13 arg13,
10783*61046927SAndroid Build Coastguard Worker T14 arg14,
10784*61046927SAndroid Build Coastguard Worker T15 arg15)
10785*61046927SAndroid Build Coastguard Worker {
10786*61046927SAndroid Build Coastguard Worker return functor_(
10787*61046927SAndroid Build Coastguard Worker enqueueArgs,
10788*61046927SAndroid Build Coastguard Worker arg0,
10789*61046927SAndroid Build Coastguard Worker arg1,
10790*61046927SAndroid Build Coastguard Worker arg2,
10791*61046927SAndroid Build Coastguard Worker arg3,
10792*61046927SAndroid Build Coastguard Worker arg4,
10793*61046927SAndroid Build Coastguard Worker arg5,
10794*61046927SAndroid Build Coastguard Worker arg6,
10795*61046927SAndroid Build Coastguard Worker arg7,
10796*61046927SAndroid Build Coastguard Worker arg8,
10797*61046927SAndroid Build Coastguard Worker arg9,
10798*61046927SAndroid Build Coastguard Worker arg10,
10799*61046927SAndroid Build Coastguard Worker arg11,
10800*61046927SAndroid Build Coastguard Worker arg12,
10801*61046927SAndroid Build Coastguard Worker arg13,
10802*61046927SAndroid Build Coastguard Worker arg14,
10803*61046927SAndroid Build Coastguard Worker arg15);
10804*61046927SAndroid Build Coastguard Worker }
10805*61046927SAndroid Build Coastguard Worker
10806*61046927SAndroid Build Coastguard Worker
10807*61046927SAndroid Build Coastguard Worker };
10808*61046927SAndroid Build Coastguard Worker
10809*61046927SAndroid Build Coastguard Worker template<
10810*61046927SAndroid Build Coastguard Worker typename T0,
10811*61046927SAndroid Build Coastguard Worker typename T1,
10812*61046927SAndroid Build Coastguard Worker typename T2,
10813*61046927SAndroid Build Coastguard Worker typename T3,
10814*61046927SAndroid Build Coastguard Worker typename T4,
10815*61046927SAndroid Build Coastguard Worker typename T5,
10816*61046927SAndroid Build Coastguard Worker typename T6,
10817*61046927SAndroid Build Coastguard Worker typename T7,
10818*61046927SAndroid Build Coastguard Worker typename T8,
10819*61046927SAndroid Build Coastguard Worker typename T9,
10820*61046927SAndroid Build Coastguard Worker typename T10,
10821*61046927SAndroid Build Coastguard Worker typename T11,
10822*61046927SAndroid Build Coastguard Worker typename T12,
10823*61046927SAndroid Build Coastguard Worker typename T13,
10824*61046927SAndroid Build Coastguard Worker typename T14>
10825*61046927SAndroid Build Coastguard Worker struct functionImplementation_
10826*61046927SAndroid Build Coastguard Worker < T0,
10827*61046927SAndroid Build Coastguard Worker T1,
10828*61046927SAndroid Build Coastguard Worker T2,
10829*61046927SAndroid Build Coastguard Worker T3,
10830*61046927SAndroid Build Coastguard Worker T4,
10831*61046927SAndroid Build Coastguard Worker T5,
10832*61046927SAndroid Build Coastguard Worker T6,
10833*61046927SAndroid Build Coastguard Worker T7,
10834*61046927SAndroid Build Coastguard Worker T8,
10835*61046927SAndroid Build Coastguard Worker T9,
10836*61046927SAndroid Build Coastguard Worker T10,
10837*61046927SAndroid Build Coastguard Worker T11,
10838*61046927SAndroid Build Coastguard Worker T12,
10839*61046927SAndroid Build Coastguard Worker T13,
10840*61046927SAndroid Build Coastguard Worker T14,
10841*61046927SAndroid Build Coastguard Worker NullType,
10842*61046927SAndroid Build Coastguard Worker NullType,
10843*61046927SAndroid Build Coastguard Worker NullType,
10844*61046927SAndroid Build Coastguard Worker NullType,
10845*61046927SAndroid Build Coastguard Worker NullType,
10846*61046927SAndroid Build Coastguard Worker NullType,
10847*61046927SAndroid Build Coastguard Worker NullType,
10848*61046927SAndroid Build Coastguard Worker NullType,
10849*61046927SAndroid Build Coastguard Worker NullType,
10850*61046927SAndroid Build Coastguard Worker NullType,
10851*61046927SAndroid Build Coastguard Worker NullType,
10852*61046927SAndroid Build Coastguard Worker NullType,
10853*61046927SAndroid Build Coastguard Worker NullType,
10854*61046927SAndroid Build Coastguard Worker NullType,
10855*61046927SAndroid Build Coastguard Worker NullType,
10856*61046927SAndroid Build Coastguard Worker NullType,
10857*61046927SAndroid Build Coastguard Worker NullType>
10858*61046927SAndroid Build Coastguard Worker {
10859*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
10860*61046927SAndroid Build Coastguard Worker T0,
10861*61046927SAndroid Build Coastguard Worker T1,
10862*61046927SAndroid Build Coastguard Worker T2,
10863*61046927SAndroid Build Coastguard Worker T3,
10864*61046927SAndroid Build Coastguard Worker T4,
10865*61046927SAndroid Build Coastguard Worker T5,
10866*61046927SAndroid Build Coastguard Worker T6,
10867*61046927SAndroid Build Coastguard Worker T7,
10868*61046927SAndroid Build Coastguard Worker T8,
10869*61046927SAndroid Build Coastguard Worker T9,
10870*61046927SAndroid Build Coastguard Worker T10,
10871*61046927SAndroid Build Coastguard Worker T11,
10872*61046927SAndroid Build Coastguard Worker T12,
10873*61046927SAndroid Build Coastguard Worker T13,
10874*61046927SAndroid Build Coastguard Worker T14,
10875*61046927SAndroid Build Coastguard Worker NullType,
10876*61046927SAndroid Build Coastguard Worker NullType,
10877*61046927SAndroid Build Coastguard Worker NullType,
10878*61046927SAndroid Build Coastguard Worker NullType,
10879*61046927SAndroid Build Coastguard Worker NullType,
10880*61046927SAndroid Build Coastguard Worker NullType,
10881*61046927SAndroid Build Coastguard Worker NullType,
10882*61046927SAndroid Build Coastguard Worker NullType,
10883*61046927SAndroid Build Coastguard Worker NullType,
10884*61046927SAndroid Build Coastguard Worker NullType,
10885*61046927SAndroid Build Coastguard Worker NullType,
10886*61046927SAndroid Build Coastguard Worker NullType,
10887*61046927SAndroid Build Coastguard Worker NullType,
10888*61046927SAndroid Build Coastguard Worker NullType,
10889*61046927SAndroid Build Coastguard Worker NullType,
10890*61046927SAndroid Build Coastguard Worker NullType,
10891*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
10892*61046927SAndroid Build Coastguard Worker
10893*61046927SAndroid Build Coastguard Worker FunctorType functor_;
10894*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_10895*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
10896*61046927SAndroid Build Coastguard Worker functor_(functor)
10897*61046927SAndroid Build Coastguard Worker {
10898*61046927SAndroid Build Coastguard Worker
10899*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 15))
10900*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
10901*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
10902*61046927SAndroid Build Coastguard Worker #endif
10903*61046927SAndroid Build Coastguard Worker
10904*61046927SAndroid Build Coastguard Worker }
10905*61046927SAndroid Build Coastguard Worker
10906*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
10907*61046927SAndroid Build Coastguard Worker typedef Event result_type;
10908*61046927SAndroid Build Coastguard Worker
10909*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
10910*61046927SAndroid Build Coastguard Worker typedef Event type_(
10911*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
10912*61046927SAndroid Build Coastguard Worker T0,
10913*61046927SAndroid Build Coastguard Worker T1,
10914*61046927SAndroid Build Coastguard Worker T2,
10915*61046927SAndroid Build Coastguard Worker T3,
10916*61046927SAndroid Build Coastguard Worker T4,
10917*61046927SAndroid Build Coastguard Worker T5,
10918*61046927SAndroid Build Coastguard Worker T6,
10919*61046927SAndroid Build Coastguard Worker T7,
10920*61046927SAndroid Build Coastguard Worker T8,
10921*61046927SAndroid Build Coastguard Worker T9,
10922*61046927SAndroid Build Coastguard Worker T10,
10923*61046927SAndroid Build Coastguard Worker T11,
10924*61046927SAndroid Build Coastguard Worker T12,
10925*61046927SAndroid Build Coastguard Worker T13,
10926*61046927SAndroid Build Coastguard Worker T14);
10927*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_10928*61046927SAndroid Build Coastguard Worker Event operator()(
10929*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
10930*61046927SAndroid Build Coastguard Worker T0 arg0,
10931*61046927SAndroid Build Coastguard Worker T1 arg1,
10932*61046927SAndroid Build Coastguard Worker T2 arg2,
10933*61046927SAndroid Build Coastguard Worker T3 arg3,
10934*61046927SAndroid Build Coastguard Worker T4 arg4,
10935*61046927SAndroid Build Coastguard Worker T5 arg5,
10936*61046927SAndroid Build Coastguard Worker T6 arg6,
10937*61046927SAndroid Build Coastguard Worker T7 arg7,
10938*61046927SAndroid Build Coastguard Worker T8 arg8,
10939*61046927SAndroid Build Coastguard Worker T9 arg9,
10940*61046927SAndroid Build Coastguard Worker T10 arg10,
10941*61046927SAndroid Build Coastguard Worker T11 arg11,
10942*61046927SAndroid Build Coastguard Worker T12 arg12,
10943*61046927SAndroid Build Coastguard Worker T13 arg13,
10944*61046927SAndroid Build Coastguard Worker T14 arg14)
10945*61046927SAndroid Build Coastguard Worker {
10946*61046927SAndroid Build Coastguard Worker return functor_(
10947*61046927SAndroid Build Coastguard Worker enqueueArgs,
10948*61046927SAndroid Build Coastguard Worker arg0,
10949*61046927SAndroid Build Coastguard Worker arg1,
10950*61046927SAndroid Build Coastguard Worker arg2,
10951*61046927SAndroid Build Coastguard Worker arg3,
10952*61046927SAndroid Build Coastguard Worker arg4,
10953*61046927SAndroid Build Coastguard Worker arg5,
10954*61046927SAndroid Build Coastguard Worker arg6,
10955*61046927SAndroid Build Coastguard Worker arg7,
10956*61046927SAndroid Build Coastguard Worker arg8,
10957*61046927SAndroid Build Coastguard Worker arg9,
10958*61046927SAndroid Build Coastguard Worker arg10,
10959*61046927SAndroid Build Coastguard Worker arg11,
10960*61046927SAndroid Build Coastguard Worker arg12,
10961*61046927SAndroid Build Coastguard Worker arg13,
10962*61046927SAndroid Build Coastguard Worker arg14);
10963*61046927SAndroid Build Coastguard Worker }
10964*61046927SAndroid Build Coastguard Worker
10965*61046927SAndroid Build Coastguard Worker
10966*61046927SAndroid Build Coastguard Worker };
10967*61046927SAndroid Build Coastguard Worker
10968*61046927SAndroid Build Coastguard Worker template<
10969*61046927SAndroid Build Coastguard Worker typename T0,
10970*61046927SAndroid Build Coastguard Worker typename T1,
10971*61046927SAndroid Build Coastguard Worker typename T2,
10972*61046927SAndroid Build Coastguard Worker typename T3,
10973*61046927SAndroid Build Coastguard Worker typename T4,
10974*61046927SAndroid Build Coastguard Worker typename T5,
10975*61046927SAndroid Build Coastguard Worker typename T6,
10976*61046927SAndroid Build Coastguard Worker typename T7,
10977*61046927SAndroid Build Coastguard Worker typename T8,
10978*61046927SAndroid Build Coastguard Worker typename T9,
10979*61046927SAndroid Build Coastguard Worker typename T10,
10980*61046927SAndroid Build Coastguard Worker typename T11,
10981*61046927SAndroid Build Coastguard Worker typename T12,
10982*61046927SAndroid Build Coastguard Worker typename T13>
10983*61046927SAndroid Build Coastguard Worker struct functionImplementation_
10984*61046927SAndroid Build Coastguard Worker < T0,
10985*61046927SAndroid Build Coastguard Worker T1,
10986*61046927SAndroid Build Coastguard Worker T2,
10987*61046927SAndroid Build Coastguard Worker T3,
10988*61046927SAndroid Build Coastguard Worker T4,
10989*61046927SAndroid Build Coastguard Worker T5,
10990*61046927SAndroid Build Coastguard Worker T6,
10991*61046927SAndroid Build Coastguard Worker T7,
10992*61046927SAndroid Build Coastguard Worker T8,
10993*61046927SAndroid Build Coastguard Worker T9,
10994*61046927SAndroid Build Coastguard Worker T10,
10995*61046927SAndroid Build Coastguard Worker T11,
10996*61046927SAndroid Build Coastguard Worker T12,
10997*61046927SAndroid Build Coastguard Worker T13,
10998*61046927SAndroid Build Coastguard Worker NullType,
10999*61046927SAndroid Build Coastguard Worker NullType,
11000*61046927SAndroid Build Coastguard Worker NullType,
11001*61046927SAndroid Build Coastguard Worker NullType,
11002*61046927SAndroid Build Coastguard Worker NullType,
11003*61046927SAndroid Build Coastguard Worker NullType,
11004*61046927SAndroid Build Coastguard Worker NullType,
11005*61046927SAndroid Build Coastguard Worker NullType,
11006*61046927SAndroid Build Coastguard Worker NullType,
11007*61046927SAndroid Build Coastguard Worker NullType,
11008*61046927SAndroid Build Coastguard Worker NullType,
11009*61046927SAndroid Build Coastguard Worker NullType,
11010*61046927SAndroid Build Coastguard Worker NullType,
11011*61046927SAndroid Build Coastguard Worker NullType,
11012*61046927SAndroid Build Coastguard Worker NullType,
11013*61046927SAndroid Build Coastguard Worker NullType,
11014*61046927SAndroid Build Coastguard Worker NullType,
11015*61046927SAndroid Build Coastguard Worker NullType>
11016*61046927SAndroid Build Coastguard Worker {
11017*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
11018*61046927SAndroid Build Coastguard Worker T0,
11019*61046927SAndroid Build Coastguard Worker T1,
11020*61046927SAndroid Build Coastguard Worker T2,
11021*61046927SAndroid Build Coastguard Worker T3,
11022*61046927SAndroid Build Coastguard Worker T4,
11023*61046927SAndroid Build Coastguard Worker T5,
11024*61046927SAndroid Build Coastguard Worker T6,
11025*61046927SAndroid Build Coastguard Worker T7,
11026*61046927SAndroid Build Coastguard Worker T8,
11027*61046927SAndroid Build Coastguard Worker T9,
11028*61046927SAndroid Build Coastguard Worker T10,
11029*61046927SAndroid Build Coastguard Worker T11,
11030*61046927SAndroid Build Coastguard Worker T12,
11031*61046927SAndroid Build Coastguard Worker T13,
11032*61046927SAndroid Build Coastguard Worker NullType,
11033*61046927SAndroid Build Coastguard Worker NullType,
11034*61046927SAndroid Build Coastguard Worker NullType,
11035*61046927SAndroid Build Coastguard Worker NullType,
11036*61046927SAndroid Build Coastguard Worker NullType,
11037*61046927SAndroid Build Coastguard Worker NullType,
11038*61046927SAndroid Build Coastguard Worker NullType,
11039*61046927SAndroid Build Coastguard Worker NullType,
11040*61046927SAndroid Build Coastguard Worker NullType,
11041*61046927SAndroid Build Coastguard Worker NullType,
11042*61046927SAndroid Build Coastguard Worker NullType,
11043*61046927SAndroid Build Coastguard Worker NullType,
11044*61046927SAndroid Build Coastguard Worker NullType,
11045*61046927SAndroid Build Coastguard Worker NullType,
11046*61046927SAndroid Build Coastguard Worker NullType,
11047*61046927SAndroid Build Coastguard Worker NullType,
11048*61046927SAndroid Build Coastguard Worker NullType,
11049*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
11050*61046927SAndroid Build Coastguard Worker
11051*61046927SAndroid Build Coastguard Worker FunctorType functor_;
11052*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_11053*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
11054*61046927SAndroid Build Coastguard Worker functor_(functor)
11055*61046927SAndroid Build Coastguard Worker {
11056*61046927SAndroid Build Coastguard Worker
11057*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 14))
11058*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
11059*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
11060*61046927SAndroid Build Coastguard Worker #endif
11061*61046927SAndroid Build Coastguard Worker
11062*61046927SAndroid Build Coastguard Worker }
11063*61046927SAndroid Build Coastguard Worker
11064*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
11065*61046927SAndroid Build Coastguard Worker typedef Event result_type;
11066*61046927SAndroid Build Coastguard Worker
11067*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
11068*61046927SAndroid Build Coastguard Worker typedef Event type_(
11069*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
11070*61046927SAndroid Build Coastguard Worker T0,
11071*61046927SAndroid Build Coastguard Worker T1,
11072*61046927SAndroid Build Coastguard Worker T2,
11073*61046927SAndroid Build Coastguard Worker T3,
11074*61046927SAndroid Build Coastguard Worker T4,
11075*61046927SAndroid Build Coastguard Worker T5,
11076*61046927SAndroid Build Coastguard Worker T6,
11077*61046927SAndroid Build Coastguard Worker T7,
11078*61046927SAndroid Build Coastguard Worker T8,
11079*61046927SAndroid Build Coastguard Worker T9,
11080*61046927SAndroid Build Coastguard Worker T10,
11081*61046927SAndroid Build Coastguard Worker T11,
11082*61046927SAndroid Build Coastguard Worker T12,
11083*61046927SAndroid Build Coastguard Worker T13);
11084*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_11085*61046927SAndroid Build Coastguard Worker Event operator()(
11086*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
11087*61046927SAndroid Build Coastguard Worker T0 arg0,
11088*61046927SAndroid Build Coastguard Worker T1 arg1,
11089*61046927SAndroid Build Coastguard Worker T2 arg2,
11090*61046927SAndroid Build Coastguard Worker T3 arg3,
11091*61046927SAndroid Build Coastguard Worker T4 arg4,
11092*61046927SAndroid Build Coastguard Worker T5 arg5,
11093*61046927SAndroid Build Coastguard Worker T6 arg6,
11094*61046927SAndroid Build Coastguard Worker T7 arg7,
11095*61046927SAndroid Build Coastguard Worker T8 arg8,
11096*61046927SAndroid Build Coastguard Worker T9 arg9,
11097*61046927SAndroid Build Coastguard Worker T10 arg10,
11098*61046927SAndroid Build Coastguard Worker T11 arg11,
11099*61046927SAndroid Build Coastguard Worker T12 arg12,
11100*61046927SAndroid Build Coastguard Worker T13 arg13)
11101*61046927SAndroid Build Coastguard Worker {
11102*61046927SAndroid Build Coastguard Worker return functor_(
11103*61046927SAndroid Build Coastguard Worker enqueueArgs,
11104*61046927SAndroid Build Coastguard Worker arg0,
11105*61046927SAndroid Build Coastguard Worker arg1,
11106*61046927SAndroid Build Coastguard Worker arg2,
11107*61046927SAndroid Build Coastguard Worker arg3,
11108*61046927SAndroid Build Coastguard Worker arg4,
11109*61046927SAndroid Build Coastguard Worker arg5,
11110*61046927SAndroid Build Coastguard Worker arg6,
11111*61046927SAndroid Build Coastguard Worker arg7,
11112*61046927SAndroid Build Coastguard Worker arg8,
11113*61046927SAndroid Build Coastguard Worker arg9,
11114*61046927SAndroid Build Coastguard Worker arg10,
11115*61046927SAndroid Build Coastguard Worker arg11,
11116*61046927SAndroid Build Coastguard Worker arg12,
11117*61046927SAndroid Build Coastguard Worker arg13);
11118*61046927SAndroid Build Coastguard Worker }
11119*61046927SAndroid Build Coastguard Worker
11120*61046927SAndroid Build Coastguard Worker
11121*61046927SAndroid Build Coastguard Worker };
11122*61046927SAndroid Build Coastguard Worker
11123*61046927SAndroid Build Coastguard Worker template<
11124*61046927SAndroid Build Coastguard Worker typename T0,
11125*61046927SAndroid Build Coastguard Worker typename T1,
11126*61046927SAndroid Build Coastguard Worker typename T2,
11127*61046927SAndroid Build Coastguard Worker typename T3,
11128*61046927SAndroid Build Coastguard Worker typename T4,
11129*61046927SAndroid Build Coastguard Worker typename T5,
11130*61046927SAndroid Build Coastguard Worker typename T6,
11131*61046927SAndroid Build Coastguard Worker typename T7,
11132*61046927SAndroid Build Coastguard Worker typename T8,
11133*61046927SAndroid Build Coastguard Worker typename T9,
11134*61046927SAndroid Build Coastguard Worker typename T10,
11135*61046927SAndroid Build Coastguard Worker typename T11,
11136*61046927SAndroid Build Coastguard Worker typename T12>
11137*61046927SAndroid Build Coastguard Worker struct functionImplementation_
11138*61046927SAndroid Build Coastguard Worker < T0,
11139*61046927SAndroid Build Coastguard Worker T1,
11140*61046927SAndroid Build Coastguard Worker T2,
11141*61046927SAndroid Build Coastguard Worker T3,
11142*61046927SAndroid Build Coastguard Worker T4,
11143*61046927SAndroid Build Coastguard Worker T5,
11144*61046927SAndroid Build Coastguard Worker T6,
11145*61046927SAndroid Build Coastguard Worker T7,
11146*61046927SAndroid Build Coastguard Worker T8,
11147*61046927SAndroid Build Coastguard Worker T9,
11148*61046927SAndroid Build Coastguard Worker T10,
11149*61046927SAndroid Build Coastguard Worker T11,
11150*61046927SAndroid Build Coastguard Worker T12,
11151*61046927SAndroid Build Coastguard Worker NullType,
11152*61046927SAndroid Build Coastguard Worker NullType,
11153*61046927SAndroid Build Coastguard Worker NullType,
11154*61046927SAndroid Build Coastguard Worker NullType,
11155*61046927SAndroid Build Coastguard Worker NullType,
11156*61046927SAndroid Build Coastguard Worker NullType,
11157*61046927SAndroid Build Coastguard Worker NullType,
11158*61046927SAndroid Build Coastguard Worker NullType,
11159*61046927SAndroid Build Coastguard Worker NullType,
11160*61046927SAndroid Build Coastguard Worker NullType,
11161*61046927SAndroid Build Coastguard Worker NullType,
11162*61046927SAndroid Build Coastguard Worker NullType,
11163*61046927SAndroid Build Coastguard Worker NullType,
11164*61046927SAndroid Build Coastguard Worker NullType,
11165*61046927SAndroid Build Coastguard Worker NullType,
11166*61046927SAndroid Build Coastguard Worker NullType,
11167*61046927SAndroid Build Coastguard Worker NullType,
11168*61046927SAndroid Build Coastguard Worker NullType,
11169*61046927SAndroid Build Coastguard Worker NullType>
11170*61046927SAndroid Build Coastguard Worker {
11171*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
11172*61046927SAndroid Build Coastguard Worker T0,
11173*61046927SAndroid Build Coastguard Worker T1,
11174*61046927SAndroid Build Coastguard Worker T2,
11175*61046927SAndroid Build Coastguard Worker T3,
11176*61046927SAndroid Build Coastguard Worker T4,
11177*61046927SAndroid Build Coastguard Worker T5,
11178*61046927SAndroid Build Coastguard Worker T6,
11179*61046927SAndroid Build Coastguard Worker T7,
11180*61046927SAndroid Build Coastguard Worker T8,
11181*61046927SAndroid Build Coastguard Worker T9,
11182*61046927SAndroid Build Coastguard Worker T10,
11183*61046927SAndroid Build Coastguard Worker T11,
11184*61046927SAndroid Build Coastguard Worker T12,
11185*61046927SAndroid Build Coastguard Worker NullType,
11186*61046927SAndroid Build Coastguard Worker NullType,
11187*61046927SAndroid Build Coastguard Worker NullType,
11188*61046927SAndroid Build Coastguard Worker NullType,
11189*61046927SAndroid Build Coastguard Worker NullType,
11190*61046927SAndroid Build Coastguard Worker NullType,
11191*61046927SAndroid Build Coastguard Worker NullType,
11192*61046927SAndroid Build Coastguard Worker NullType,
11193*61046927SAndroid Build Coastguard Worker NullType,
11194*61046927SAndroid Build Coastguard Worker NullType,
11195*61046927SAndroid Build Coastguard Worker NullType,
11196*61046927SAndroid Build Coastguard Worker NullType,
11197*61046927SAndroid Build Coastguard Worker NullType,
11198*61046927SAndroid Build Coastguard Worker NullType,
11199*61046927SAndroid Build Coastguard Worker NullType,
11200*61046927SAndroid Build Coastguard Worker NullType,
11201*61046927SAndroid Build Coastguard Worker NullType,
11202*61046927SAndroid Build Coastguard Worker NullType,
11203*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
11204*61046927SAndroid Build Coastguard Worker
11205*61046927SAndroid Build Coastguard Worker FunctorType functor_;
11206*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_11207*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
11208*61046927SAndroid Build Coastguard Worker functor_(functor)
11209*61046927SAndroid Build Coastguard Worker {
11210*61046927SAndroid Build Coastguard Worker
11211*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 13))
11212*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
11213*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
11214*61046927SAndroid Build Coastguard Worker #endif
11215*61046927SAndroid Build Coastguard Worker
11216*61046927SAndroid Build Coastguard Worker }
11217*61046927SAndroid Build Coastguard Worker
11218*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
11219*61046927SAndroid Build Coastguard Worker typedef Event result_type;
11220*61046927SAndroid Build Coastguard Worker
11221*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
11222*61046927SAndroid Build Coastguard Worker typedef Event type_(
11223*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
11224*61046927SAndroid Build Coastguard Worker T0,
11225*61046927SAndroid Build Coastguard Worker T1,
11226*61046927SAndroid Build Coastguard Worker T2,
11227*61046927SAndroid Build Coastguard Worker T3,
11228*61046927SAndroid Build Coastguard Worker T4,
11229*61046927SAndroid Build Coastguard Worker T5,
11230*61046927SAndroid Build Coastguard Worker T6,
11231*61046927SAndroid Build Coastguard Worker T7,
11232*61046927SAndroid Build Coastguard Worker T8,
11233*61046927SAndroid Build Coastguard Worker T9,
11234*61046927SAndroid Build Coastguard Worker T10,
11235*61046927SAndroid Build Coastguard Worker T11,
11236*61046927SAndroid Build Coastguard Worker T12);
11237*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_11238*61046927SAndroid Build Coastguard Worker Event operator()(
11239*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
11240*61046927SAndroid Build Coastguard Worker T0 arg0,
11241*61046927SAndroid Build Coastguard Worker T1 arg1,
11242*61046927SAndroid Build Coastguard Worker T2 arg2,
11243*61046927SAndroid Build Coastguard Worker T3 arg3,
11244*61046927SAndroid Build Coastguard Worker T4 arg4,
11245*61046927SAndroid Build Coastguard Worker T5 arg5,
11246*61046927SAndroid Build Coastguard Worker T6 arg6,
11247*61046927SAndroid Build Coastguard Worker T7 arg7,
11248*61046927SAndroid Build Coastguard Worker T8 arg8,
11249*61046927SAndroid Build Coastguard Worker T9 arg9,
11250*61046927SAndroid Build Coastguard Worker T10 arg10,
11251*61046927SAndroid Build Coastguard Worker T11 arg11,
11252*61046927SAndroid Build Coastguard Worker T12 arg12)
11253*61046927SAndroid Build Coastguard Worker {
11254*61046927SAndroid Build Coastguard Worker return functor_(
11255*61046927SAndroid Build Coastguard Worker enqueueArgs,
11256*61046927SAndroid Build Coastguard Worker arg0,
11257*61046927SAndroid Build Coastguard Worker arg1,
11258*61046927SAndroid Build Coastguard Worker arg2,
11259*61046927SAndroid Build Coastguard Worker arg3,
11260*61046927SAndroid Build Coastguard Worker arg4,
11261*61046927SAndroid Build Coastguard Worker arg5,
11262*61046927SAndroid Build Coastguard Worker arg6,
11263*61046927SAndroid Build Coastguard Worker arg7,
11264*61046927SAndroid Build Coastguard Worker arg8,
11265*61046927SAndroid Build Coastguard Worker arg9,
11266*61046927SAndroid Build Coastguard Worker arg10,
11267*61046927SAndroid Build Coastguard Worker arg11,
11268*61046927SAndroid Build Coastguard Worker arg12);
11269*61046927SAndroid Build Coastguard Worker }
11270*61046927SAndroid Build Coastguard Worker
11271*61046927SAndroid Build Coastguard Worker
11272*61046927SAndroid Build Coastguard Worker };
11273*61046927SAndroid Build Coastguard Worker
11274*61046927SAndroid Build Coastguard Worker template<
11275*61046927SAndroid Build Coastguard Worker typename T0,
11276*61046927SAndroid Build Coastguard Worker typename T1,
11277*61046927SAndroid Build Coastguard Worker typename T2,
11278*61046927SAndroid Build Coastguard Worker typename T3,
11279*61046927SAndroid Build Coastguard Worker typename T4,
11280*61046927SAndroid Build Coastguard Worker typename T5,
11281*61046927SAndroid Build Coastguard Worker typename T6,
11282*61046927SAndroid Build Coastguard Worker typename T7,
11283*61046927SAndroid Build Coastguard Worker typename T8,
11284*61046927SAndroid Build Coastguard Worker typename T9,
11285*61046927SAndroid Build Coastguard Worker typename T10,
11286*61046927SAndroid Build Coastguard Worker typename T11>
11287*61046927SAndroid Build Coastguard Worker struct functionImplementation_
11288*61046927SAndroid Build Coastguard Worker < T0,
11289*61046927SAndroid Build Coastguard Worker T1,
11290*61046927SAndroid Build Coastguard Worker T2,
11291*61046927SAndroid Build Coastguard Worker T3,
11292*61046927SAndroid Build Coastguard Worker T4,
11293*61046927SAndroid Build Coastguard Worker T5,
11294*61046927SAndroid Build Coastguard Worker T6,
11295*61046927SAndroid Build Coastguard Worker T7,
11296*61046927SAndroid Build Coastguard Worker T8,
11297*61046927SAndroid Build Coastguard Worker T9,
11298*61046927SAndroid Build Coastguard Worker T10,
11299*61046927SAndroid Build Coastguard Worker T11,
11300*61046927SAndroid Build Coastguard Worker NullType,
11301*61046927SAndroid Build Coastguard Worker NullType,
11302*61046927SAndroid Build Coastguard Worker NullType,
11303*61046927SAndroid Build Coastguard Worker NullType,
11304*61046927SAndroid Build Coastguard Worker NullType,
11305*61046927SAndroid Build Coastguard Worker NullType,
11306*61046927SAndroid Build Coastguard Worker NullType,
11307*61046927SAndroid Build Coastguard Worker NullType,
11308*61046927SAndroid Build Coastguard Worker NullType,
11309*61046927SAndroid Build Coastguard Worker NullType,
11310*61046927SAndroid Build Coastguard Worker NullType,
11311*61046927SAndroid Build Coastguard Worker NullType,
11312*61046927SAndroid Build Coastguard Worker NullType,
11313*61046927SAndroid Build Coastguard Worker NullType,
11314*61046927SAndroid Build Coastguard Worker NullType,
11315*61046927SAndroid Build Coastguard Worker NullType,
11316*61046927SAndroid Build Coastguard Worker NullType,
11317*61046927SAndroid Build Coastguard Worker NullType,
11318*61046927SAndroid Build Coastguard Worker NullType,
11319*61046927SAndroid Build Coastguard Worker NullType>
11320*61046927SAndroid Build Coastguard Worker {
11321*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
11322*61046927SAndroid Build Coastguard Worker T0,
11323*61046927SAndroid Build Coastguard Worker T1,
11324*61046927SAndroid Build Coastguard Worker T2,
11325*61046927SAndroid Build Coastguard Worker T3,
11326*61046927SAndroid Build Coastguard Worker T4,
11327*61046927SAndroid Build Coastguard Worker T5,
11328*61046927SAndroid Build Coastguard Worker T6,
11329*61046927SAndroid Build Coastguard Worker T7,
11330*61046927SAndroid Build Coastguard Worker T8,
11331*61046927SAndroid Build Coastguard Worker T9,
11332*61046927SAndroid Build Coastguard Worker T10,
11333*61046927SAndroid Build Coastguard Worker T11,
11334*61046927SAndroid Build Coastguard Worker NullType,
11335*61046927SAndroid Build Coastguard Worker NullType,
11336*61046927SAndroid Build Coastguard Worker NullType,
11337*61046927SAndroid Build Coastguard Worker NullType,
11338*61046927SAndroid Build Coastguard Worker NullType,
11339*61046927SAndroid Build Coastguard Worker NullType,
11340*61046927SAndroid Build Coastguard Worker NullType,
11341*61046927SAndroid Build Coastguard Worker NullType,
11342*61046927SAndroid Build Coastguard Worker NullType,
11343*61046927SAndroid Build Coastguard Worker NullType,
11344*61046927SAndroid Build Coastguard Worker NullType,
11345*61046927SAndroid Build Coastguard Worker NullType,
11346*61046927SAndroid Build Coastguard Worker NullType,
11347*61046927SAndroid Build Coastguard Worker NullType,
11348*61046927SAndroid Build Coastguard Worker NullType,
11349*61046927SAndroid Build Coastguard Worker NullType,
11350*61046927SAndroid Build Coastguard Worker NullType,
11351*61046927SAndroid Build Coastguard Worker NullType,
11352*61046927SAndroid Build Coastguard Worker NullType,
11353*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
11354*61046927SAndroid Build Coastguard Worker
11355*61046927SAndroid Build Coastguard Worker FunctorType functor_;
11356*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_11357*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
11358*61046927SAndroid Build Coastguard Worker functor_(functor)
11359*61046927SAndroid Build Coastguard Worker {
11360*61046927SAndroid Build Coastguard Worker
11361*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 12))
11362*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
11363*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
11364*61046927SAndroid Build Coastguard Worker #endif
11365*61046927SAndroid Build Coastguard Worker
11366*61046927SAndroid Build Coastguard Worker }
11367*61046927SAndroid Build Coastguard Worker
11368*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
11369*61046927SAndroid Build Coastguard Worker typedef Event result_type;
11370*61046927SAndroid Build Coastguard Worker
11371*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
11372*61046927SAndroid Build Coastguard Worker typedef Event type_(
11373*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
11374*61046927SAndroid Build Coastguard Worker T0,
11375*61046927SAndroid Build Coastguard Worker T1,
11376*61046927SAndroid Build Coastguard Worker T2,
11377*61046927SAndroid Build Coastguard Worker T3,
11378*61046927SAndroid Build Coastguard Worker T4,
11379*61046927SAndroid Build Coastguard Worker T5,
11380*61046927SAndroid Build Coastguard Worker T6,
11381*61046927SAndroid Build Coastguard Worker T7,
11382*61046927SAndroid Build Coastguard Worker T8,
11383*61046927SAndroid Build Coastguard Worker T9,
11384*61046927SAndroid Build Coastguard Worker T10,
11385*61046927SAndroid Build Coastguard Worker T11);
11386*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_11387*61046927SAndroid Build Coastguard Worker Event operator()(
11388*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
11389*61046927SAndroid Build Coastguard Worker T0 arg0,
11390*61046927SAndroid Build Coastguard Worker T1 arg1,
11391*61046927SAndroid Build Coastguard Worker T2 arg2,
11392*61046927SAndroid Build Coastguard Worker T3 arg3,
11393*61046927SAndroid Build Coastguard Worker T4 arg4,
11394*61046927SAndroid Build Coastguard Worker T5 arg5,
11395*61046927SAndroid Build Coastguard Worker T6 arg6,
11396*61046927SAndroid Build Coastguard Worker T7 arg7,
11397*61046927SAndroid Build Coastguard Worker T8 arg8,
11398*61046927SAndroid Build Coastguard Worker T9 arg9,
11399*61046927SAndroid Build Coastguard Worker T10 arg10,
11400*61046927SAndroid Build Coastguard Worker T11 arg11)
11401*61046927SAndroid Build Coastguard Worker {
11402*61046927SAndroid Build Coastguard Worker return functor_(
11403*61046927SAndroid Build Coastguard Worker enqueueArgs,
11404*61046927SAndroid Build Coastguard Worker arg0,
11405*61046927SAndroid Build Coastguard Worker arg1,
11406*61046927SAndroid Build Coastguard Worker arg2,
11407*61046927SAndroid Build Coastguard Worker arg3,
11408*61046927SAndroid Build Coastguard Worker arg4,
11409*61046927SAndroid Build Coastguard Worker arg5,
11410*61046927SAndroid Build Coastguard Worker arg6,
11411*61046927SAndroid Build Coastguard Worker arg7,
11412*61046927SAndroid Build Coastguard Worker arg8,
11413*61046927SAndroid Build Coastguard Worker arg9,
11414*61046927SAndroid Build Coastguard Worker arg10,
11415*61046927SAndroid Build Coastguard Worker arg11);
11416*61046927SAndroid Build Coastguard Worker }
11417*61046927SAndroid Build Coastguard Worker
11418*61046927SAndroid Build Coastguard Worker
11419*61046927SAndroid Build Coastguard Worker };
11420*61046927SAndroid Build Coastguard Worker
11421*61046927SAndroid Build Coastguard Worker template<
11422*61046927SAndroid Build Coastguard Worker typename T0,
11423*61046927SAndroid Build Coastguard Worker typename T1,
11424*61046927SAndroid Build Coastguard Worker typename T2,
11425*61046927SAndroid Build Coastguard Worker typename T3,
11426*61046927SAndroid Build Coastguard Worker typename T4,
11427*61046927SAndroid Build Coastguard Worker typename T5,
11428*61046927SAndroid Build Coastguard Worker typename T6,
11429*61046927SAndroid Build Coastguard Worker typename T7,
11430*61046927SAndroid Build Coastguard Worker typename T8,
11431*61046927SAndroid Build Coastguard Worker typename T9,
11432*61046927SAndroid Build Coastguard Worker typename T10>
11433*61046927SAndroid Build Coastguard Worker struct functionImplementation_
11434*61046927SAndroid Build Coastguard Worker < T0,
11435*61046927SAndroid Build Coastguard Worker T1,
11436*61046927SAndroid Build Coastguard Worker T2,
11437*61046927SAndroid Build Coastguard Worker T3,
11438*61046927SAndroid Build Coastguard Worker T4,
11439*61046927SAndroid Build Coastguard Worker T5,
11440*61046927SAndroid Build Coastguard Worker T6,
11441*61046927SAndroid Build Coastguard Worker T7,
11442*61046927SAndroid Build Coastguard Worker T8,
11443*61046927SAndroid Build Coastguard Worker T9,
11444*61046927SAndroid Build Coastguard Worker T10,
11445*61046927SAndroid Build Coastguard Worker NullType,
11446*61046927SAndroid Build Coastguard Worker NullType,
11447*61046927SAndroid Build Coastguard Worker NullType,
11448*61046927SAndroid Build Coastguard Worker NullType,
11449*61046927SAndroid Build Coastguard Worker NullType,
11450*61046927SAndroid Build Coastguard Worker NullType,
11451*61046927SAndroid Build Coastguard Worker NullType,
11452*61046927SAndroid Build Coastguard Worker NullType,
11453*61046927SAndroid Build Coastguard Worker NullType,
11454*61046927SAndroid Build Coastguard Worker NullType,
11455*61046927SAndroid Build Coastguard Worker NullType,
11456*61046927SAndroid Build Coastguard Worker NullType,
11457*61046927SAndroid Build Coastguard Worker NullType,
11458*61046927SAndroid Build Coastguard Worker NullType,
11459*61046927SAndroid Build Coastguard Worker NullType,
11460*61046927SAndroid Build Coastguard Worker NullType,
11461*61046927SAndroid Build Coastguard Worker NullType,
11462*61046927SAndroid Build Coastguard Worker NullType,
11463*61046927SAndroid Build Coastguard Worker NullType,
11464*61046927SAndroid Build Coastguard Worker NullType,
11465*61046927SAndroid Build Coastguard Worker NullType>
11466*61046927SAndroid Build Coastguard Worker {
11467*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
11468*61046927SAndroid Build Coastguard Worker T0,
11469*61046927SAndroid Build Coastguard Worker T1,
11470*61046927SAndroid Build Coastguard Worker T2,
11471*61046927SAndroid Build Coastguard Worker T3,
11472*61046927SAndroid Build Coastguard Worker T4,
11473*61046927SAndroid Build Coastguard Worker T5,
11474*61046927SAndroid Build Coastguard Worker T6,
11475*61046927SAndroid Build Coastguard Worker T7,
11476*61046927SAndroid Build Coastguard Worker T8,
11477*61046927SAndroid Build Coastguard Worker T9,
11478*61046927SAndroid Build Coastguard Worker T10,
11479*61046927SAndroid Build Coastguard Worker NullType,
11480*61046927SAndroid Build Coastguard Worker NullType,
11481*61046927SAndroid Build Coastguard Worker NullType,
11482*61046927SAndroid Build Coastguard Worker NullType,
11483*61046927SAndroid Build Coastguard Worker NullType,
11484*61046927SAndroid Build Coastguard Worker NullType,
11485*61046927SAndroid Build Coastguard Worker NullType,
11486*61046927SAndroid Build Coastguard Worker NullType,
11487*61046927SAndroid Build Coastguard Worker NullType,
11488*61046927SAndroid Build Coastguard Worker NullType,
11489*61046927SAndroid Build Coastguard Worker NullType,
11490*61046927SAndroid Build Coastguard Worker NullType,
11491*61046927SAndroid Build Coastguard Worker NullType,
11492*61046927SAndroid Build Coastguard Worker NullType,
11493*61046927SAndroid Build Coastguard Worker NullType,
11494*61046927SAndroid Build Coastguard Worker NullType,
11495*61046927SAndroid Build Coastguard Worker NullType,
11496*61046927SAndroid Build Coastguard Worker NullType,
11497*61046927SAndroid Build Coastguard Worker NullType,
11498*61046927SAndroid Build Coastguard Worker NullType,
11499*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
11500*61046927SAndroid Build Coastguard Worker
11501*61046927SAndroid Build Coastguard Worker FunctorType functor_;
11502*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_11503*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
11504*61046927SAndroid Build Coastguard Worker functor_(functor)
11505*61046927SAndroid Build Coastguard Worker {
11506*61046927SAndroid Build Coastguard Worker
11507*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 11))
11508*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
11509*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
11510*61046927SAndroid Build Coastguard Worker #endif
11511*61046927SAndroid Build Coastguard Worker
11512*61046927SAndroid Build Coastguard Worker }
11513*61046927SAndroid Build Coastguard Worker
11514*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
11515*61046927SAndroid Build Coastguard Worker typedef Event result_type;
11516*61046927SAndroid Build Coastguard Worker
11517*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
11518*61046927SAndroid Build Coastguard Worker typedef Event type_(
11519*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
11520*61046927SAndroid Build Coastguard Worker T0,
11521*61046927SAndroid Build Coastguard Worker T1,
11522*61046927SAndroid Build Coastguard Worker T2,
11523*61046927SAndroid Build Coastguard Worker T3,
11524*61046927SAndroid Build Coastguard Worker T4,
11525*61046927SAndroid Build Coastguard Worker T5,
11526*61046927SAndroid Build Coastguard Worker T6,
11527*61046927SAndroid Build Coastguard Worker T7,
11528*61046927SAndroid Build Coastguard Worker T8,
11529*61046927SAndroid Build Coastguard Worker T9,
11530*61046927SAndroid Build Coastguard Worker T10);
11531*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_11532*61046927SAndroid Build Coastguard Worker Event operator()(
11533*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
11534*61046927SAndroid Build Coastguard Worker T0 arg0,
11535*61046927SAndroid Build Coastguard Worker T1 arg1,
11536*61046927SAndroid Build Coastguard Worker T2 arg2,
11537*61046927SAndroid Build Coastguard Worker T3 arg3,
11538*61046927SAndroid Build Coastguard Worker T4 arg4,
11539*61046927SAndroid Build Coastguard Worker T5 arg5,
11540*61046927SAndroid Build Coastguard Worker T6 arg6,
11541*61046927SAndroid Build Coastguard Worker T7 arg7,
11542*61046927SAndroid Build Coastguard Worker T8 arg8,
11543*61046927SAndroid Build Coastguard Worker T9 arg9,
11544*61046927SAndroid Build Coastguard Worker T10 arg10)
11545*61046927SAndroid Build Coastguard Worker {
11546*61046927SAndroid Build Coastguard Worker return functor_(
11547*61046927SAndroid Build Coastguard Worker enqueueArgs,
11548*61046927SAndroid Build Coastguard Worker arg0,
11549*61046927SAndroid Build Coastguard Worker arg1,
11550*61046927SAndroid Build Coastguard Worker arg2,
11551*61046927SAndroid Build Coastguard Worker arg3,
11552*61046927SAndroid Build Coastguard Worker arg4,
11553*61046927SAndroid Build Coastguard Worker arg5,
11554*61046927SAndroid Build Coastguard Worker arg6,
11555*61046927SAndroid Build Coastguard Worker arg7,
11556*61046927SAndroid Build Coastguard Worker arg8,
11557*61046927SAndroid Build Coastguard Worker arg9,
11558*61046927SAndroid Build Coastguard Worker arg10);
11559*61046927SAndroid Build Coastguard Worker }
11560*61046927SAndroid Build Coastguard Worker
11561*61046927SAndroid Build Coastguard Worker
11562*61046927SAndroid Build Coastguard Worker };
11563*61046927SAndroid Build Coastguard Worker
11564*61046927SAndroid Build Coastguard Worker template<
11565*61046927SAndroid Build Coastguard Worker typename T0,
11566*61046927SAndroid Build Coastguard Worker typename T1,
11567*61046927SAndroid Build Coastguard Worker typename T2,
11568*61046927SAndroid Build Coastguard Worker typename T3,
11569*61046927SAndroid Build Coastguard Worker typename T4,
11570*61046927SAndroid Build Coastguard Worker typename T5,
11571*61046927SAndroid Build Coastguard Worker typename T6,
11572*61046927SAndroid Build Coastguard Worker typename T7,
11573*61046927SAndroid Build Coastguard Worker typename T8,
11574*61046927SAndroid Build Coastguard Worker typename T9>
11575*61046927SAndroid Build Coastguard Worker struct functionImplementation_
11576*61046927SAndroid Build Coastguard Worker < T0,
11577*61046927SAndroid Build Coastguard Worker T1,
11578*61046927SAndroid Build Coastguard Worker T2,
11579*61046927SAndroid Build Coastguard Worker T3,
11580*61046927SAndroid Build Coastguard Worker T4,
11581*61046927SAndroid Build Coastguard Worker T5,
11582*61046927SAndroid Build Coastguard Worker T6,
11583*61046927SAndroid Build Coastguard Worker T7,
11584*61046927SAndroid Build Coastguard Worker T8,
11585*61046927SAndroid Build Coastguard Worker T9,
11586*61046927SAndroid Build Coastguard Worker NullType,
11587*61046927SAndroid Build Coastguard Worker NullType,
11588*61046927SAndroid Build Coastguard Worker NullType,
11589*61046927SAndroid Build Coastguard Worker NullType,
11590*61046927SAndroid Build Coastguard Worker NullType,
11591*61046927SAndroid Build Coastguard Worker NullType,
11592*61046927SAndroid Build Coastguard Worker NullType,
11593*61046927SAndroid Build Coastguard Worker NullType,
11594*61046927SAndroid Build Coastguard Worker NullType,
11595*61046927SAndroid Build Coastguard Worker NullType,
11596*61046927SAndroid Build Coastguard Worker NullType,
11597*61046927SAndroid Build Coastguard Worker NullType,
11598*61046927SAndroid Build Coastguard Worker NullType,
11599*61046927SAndroid Build Coastguard Worker NullType,
11600*61046927SAndroid Build Coastguard Worker NullType,
11601*61046927SAndroid Build Coastguard Worker NullType,
11602*61046927SAndroid Build Coastguard Worker NullType,
11603*61046927SAndroid Build Coastguard Worker NullType,
11604*61046927SAndroid Build Coastguard Worker NullType,
11605*61046927SAndroid Build Coastguard Worker NullType,
11606*61046927SAndroid Build Coastguard Worker NullType,
11607*61046927SAndroid Build Coastguard Worker NullType>
11608*61046927SAndroid Build Coastguard Worker {
11609*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
11610*61046927SAndroid Build Coastguard Worker T0,
11611*61046927SAndroid Build Coastguard Worker T1,
11612*61046927SAndroid Build Coastguard Worker T2,
11613*61046927SAndroid Build Coastguard Worker T3,
11614*61046927SAndroid Build Coastguard Worker T4,
11615*61046927SAndroid Build Coastguard Worker T5,
11616*61046927SAndroid Build Coastguard Worker T6,
11617*61046927SAndroid Build Coastguard Worker T7,
11618*61046927SAndroid Build Coastguard Worker T8,
11619*61046927SAndroid Build Coastguard Worker T9,
11620*61046927SAndroid Build Coastguard Worker NullType,
11621*61046927SAndroid Build Coastguard Worker NullType,
11622*61046927SAndroid Build Coastguard Worker NullType,
11623*61046927SAndroid Build Coastguard Worker NullType,
11624*61046927SAndroid Build Coastguard Worker NullType,
11625*61046927SAndroid Build Coastguard Worker NullType,
11626*61046927SAndroid Build Coastguard Worker NullType,
11627*61046927SAndroid Build Coastguard Worker NullType,
11628*61046927SAndroid Build Coastguard Worker NullType,
11629*61046927SAndroid Build Coastguard Worker NullType,
11630*61046927SAndroid Build Coastguard Worker NullType,
11631*61046927SAndroid Build Coastguard Worker NullType,
11632*61046927SAndroid Build Coastguard Worker NullType,
11633*61046927SAndroid Build Coastguard Worker NullType,
11634*61046927SAndroid Build Coastguard Worker NullType,
11635*61046927SAndroid Build Coastguard Worker NullType,
11636*61046927SAndroid Build Coastguard Worker NullType,
11637*61046927SAndroid Build Coastguard Worker NullType,
11638*61046927SAndroid Build Coastguard Worker NullType,
11639*61046927SAndroid Build Coastguard Worker NullType,
11640*61046927SAndroid Build Coastguard Worker NullType,
11641*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
11642*61046927SAndroid Build Coastguard Worker
11643*61046927SAndroid Build Coastguard Worker FunctorType functor_;
11644*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_11645*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
11646*61046927SAndroid Build Coastguard Worker functor_(functor)
11647*61046927SAndroid Build Coastguard Worker {
11648*61046927SAndroid Build Coastguard Worker
11649*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 10))
11650*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
11651*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
11652*61046927SAndroid Build Coastguard Worker #endif
11653*61046927SAndroid Build Coastguard Worker
11654*61046927SAndroid Build Coastguard Worker }
11655*61046927SAndroid Build Coastguard Worker
11656*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
11657*61046927SAndroid Build Coastguard Worker typedef Event result_type;
11658*61046927SAndroid Build Coastguard Worker
11659*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
11660*61046927SAndroid Build Coastguard Worker typedef Event type_(
11661*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
11662*61046927SAndroid Build Coastguard Worker T0,
11663*61046927SAndroid Build Coastguard Worker T1,
11664*61046927SAndroid Build Coastguard Worker T2,
11665*61046927SAndroid Build Coastguard Worker T3,
11666*61046927SAndroid Build Coastguard Worker T4,
11667*61046927SAndroid Build Coastguard Worker T5,
11668*61046927SAndroid Build Coastguard Worker T6,
11669*61046927SAndroid Build Coastguard Worker T7,
11670*61046927SAndroid Build Coastguard Worker T8,
11671*61046927SAndroid Build Coastguard Worker T9);
11672*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_11673*61046927SAndroid Build Coastguard Worker Event operator()(
11674*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
11675*61046927SAndroid Build Coastguard Worker T0 arg0,
11676*61046927SAndroid Build Coastguard Worker T1 arg1,
11677*61046927SAndroid Build Coastguard Worker T2 arg2,
11678*61046927SAndroid Build Coastguard Worker T3 arg3,
11679*61046927SAndroid Build Coastguard Worker T4 arg4,
11680*61046927SAndroid Build Coastguard Worker T5 arg5,
11681*61046927SAndroid Build Coastguard Worker T6 arg6,
11682*61046927SAndroid Build Coastguard Worker T7 arg7,
11683*61046927SAndroid Build Coastguard Worker T8 arg8,
11684*61046927SAndroid Build Coastguard Worker T9 arg9)
11685*61046927SAndroid Build Coastguard Worker {
11686*61046927SAndroid Build Coastguard Worker return functor_(
11687*61046927SAndroid Build Coastguard Worker enqueueArgs,
11688*61046927SAndroid Build Coastguard Worker arg0,
11689*61046927SAndroid Build Coastguard Worker arg1,
11690*61046927SAndroid Build Coastguard Worker arg2,
11691*61046927SAndroid Build Coastguard Worker arg3,
11692*61046927SAndroid Build Coastguard Worker arg4,
11693*61046927SAndroid Build Coastguard Worker arg5,
11694*61046927SAndroid Build Coastguard Worker arg6,
11695*61046927SAndroid Build Coastguard Worker arg7,
11696*61046927SAndroid Build Coastguard Worker arg8,
11697*61046927SAndroid Build Coastguard Worker arg9);
11698*61046927SAndroid Build Coastguard Worker }
11699*61046927SAndroid Build Coastguard Worker
11700*61046927SAndroid Build Coastguard Worker
11701*61046927SAndroid Build Coastguard Worker };
11702*61046927SAndroid Build Coastguard Worker
11703*61046927SAndroid Build Coastguard Worker template<
11704*61046927SAndroid Build Coastguard Worker typename T0,
11705*61046927SAndroid Build Coastguard Worker typename T1,
11706*61046927SAndroid Build Coastguard Worker typename T2,
11707*61046927SAndroid Build Coastguard Worker typename T3,
11708*61046927SAndroid Build Coastguard Worker typename T4,
11709*61046927SAndroid Build Coastguard Worker typename T5,
11710*61046927SAndroid Build Coastguard Worker typename T6,
11711*61046927SAndroid Build Coastguard Worker typename T7,
11712*61046927SAndroid Build Coastguard Worker typename T8>
11713*61046927SAndroid Build Coastguard Worker struct functionImplementation_
11714*61046927SAndroid Build Coastguard Worker < T0,
11715*61046927SAndroid Build Coastguard Worker T1,
11716*61046927SAndroid Build Coastguard Worker T2,
11717*61046927SAndroid Build Coastguard Worker T3,
11718*61046927SAndroid Build Coastguard Worker T4,
11719*61046927SAndroid Build Coastguard Worker T5,
11720*61046927SAndroid Build Coastguard Worker T6,
11721*61046927SAndroid Build Coastguard Worker T7,
11722*61046927SAndroid Build Coastguard Worker T8,
11723*61046927SAndroid Build Coastguard Worker NullType,
11724*61046927SAndroid Build Coastguard Worker NullType,
11725*61046927SAndroid Build Coastguard Worker NullType,
11726*61046927SAndroid Build Coastguard Worker NullType,
11727*61046927SAndroid Build Coastguard Worker NullType,
11728*61046927SAndroid Build Coastguard Worker NullType,
11729*61046927SAndroid Build Coastguard Worker NullType,
11730*61046927SAndroid Build Coastguard Worker NullType,
11731*61046927SAndroid Build Coastguard Worker NullType,
11732*61046927SAndroid Build Coastguard Worker NullType,
11733*61046927SAndroid Build Coastguard Worker NullType,
11734*61046927SAndroid Build Coastguard Worker NullType,
11735*61046927SAndroid Build Coastguard Worker NullType,
11736*61046927SAndroid Build Coastguard Worker NullType,
11737*61046927SAndroid Build Coastguard Worker NullType,
11738*61046927SAndroid Build Coastguard Worker NullType,
11739*61046927SAndroid Build Coastguard Worker NullType,
11740*61046927SAndroid Build Coastguard Worker NullType,
11741*61046927SAndroid Build Coastguard Worker NullType,
11742*61046927SAndroid Build Coastguard Worker NullType,
11743*61046927SAndroid Build Coastguard Worker NullType,
11744*61046927SAndroid Build Coastguard Worker NullType,
11745*61046927SAndroid Build Coastguard Worker NullType>
11746*61046927SAndroid Build Coastguard Worker {
11747*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
11748*61046927SAndroid Build Coastguard Worker T0,
11749*61046927SAndroid Build Coastguard Worker T1,
11750*61046927SAndroid Build Coastguard Worker T2,
11751*61046927SAndroid Build Coastguard Worker T3,
11752*61046927SAndroid Build Coastguard Worker T4,
11753*61046927SAndroid Build Coastguard Worker T5,
11754*61046927SAndroid Build Coastguard Worker T6,
11755*61046927SAndroid Build Coastguard Worker T7,
11756*61046927SAndroid Build Coastguard Worker T8,
11757*61046927SAndroid Build Coastguard Worker NullType,
11758*61046927SAndroid Build Coastguard Worker NullType,
11759*61046927SAndroid Build Coastguard Worker NullType,
11760*61046927SAndroid Build Coastguard Worker NullType,
11761*61046927SAndroid Build Coastguard Worker NullType,
11762*61046927SAndroid Build Coastguard Worker NullType,
11763*61046927SAndroid Build Coastguard Worker NullType,
11764*61046927SAndroid Build Coastguard Worker NullType,
11765*61046927SAndroid Build Coastguard Worker NullType,
11766*61046927SAndroid Build Coastguard Worker NullType,
11767*61046927SAndroid Build Coastguard Worker NullType,
11768*61046927SAndroid Build Coastguard Worker NullType,
11769*61046927SAndroid Build Coastguard Worker NullType,
11770*61046927SAndroid Build Coastguard Worker NullType,
11771*61046927SAndroid Build Coastguard Worker NullType,
11772*61046927SAndroid Build Coastguard Worker NullType,
11773*61046927SAndroid Build Coastguard Worker NullType,
11774*61046927SAndroid Build Coastguard Worker NullType,
11775*61046927SAndroid Build Coastguard Worker NullType,
11776*61046927SAndroid Build Coastguard Worker NullType,
11777*61046927SAndroid Build Coastguard Worker NullType,
11778*61046927SAndroid Build Coastguard Worker NullType,
11779*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
11780*61046927SAndroid Build Coastguard Worker
11781*61046927SAndroid Build Coastguard Worker FunctorType functor_;
11782*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_11783*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
11784*61046927SAndroid Build Coastguard Worker functor_(functor)
11785*61046927SAndroid Build Coastguard Worker {
11786*61046927SAndroid Build Coastguard Worker
11787*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 9))
11788*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
11789*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
11790*61046927SAndroid Build Coastguard Worker #endif
11791*61046927SAndroid Build Coastguard Worker
11792*61046927SAndroid Build Coastguard Worker }
11793*61046927SAndroid Build Coastguard Worker
11794*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
11795*61046927SAndroid Build Coastguard Worker typedef Event result_type;
11796*61046927SAndroid Build Coastguard Worker
11797*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
11798*61046927SAndroid Build Coastguard Worker typedef Event type_(
11799*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
11800*61046927SAndroid Build Coastguard Worker T0,
11801*61046927SAndroid Build Coastguard Worker T1,
11802*61046927SAndroid Build Coastguard Worker T2,
11803*61046927SAndroid Build Coastguard Worker T3,
11804*61046927SAndroid Build Coastguard Worker T4,
11805*61046927SAndroid Build Coastguard Worker T5,
11806*61046927SAndroid Build Coastguard Worker T6,
11807*61046927SAndroid Build Coastguard Worker T7,
11808*61046927SAndroid Build Coastguard Worker T8);
11809*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_11810*61046927SAndroid Build Coastguard Worker Event operator()(
11811*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
11812*61046927SAndroid Build Coastguard Worker T0 arg0,
11813*61046927SAndroid Build Coastguard Worker T1 arg1,
11814*61046927SAndroid Build Coastguard Worker T2 arg2,
11815*61046927SAndroid Build Coastguard Worker T3 arg3,
11816*61046927SAndroid Build Coastguard Worker T4 arg4,
11817*61046927SAndroid Build Coastguard Worker T5 arg5,
11818*61046927SAndroid Build Coastguard Worker T6 arg6,
11819*61046927SAndroid Build Coastguard Worker T7 arg7,
11820*61046927SAndroid Build Coastguard Worker T8 arg8)
11821*61046927SAndroid Build Coastguard Worker {
11822*61046927SAndroid Build Coastguard Worker return functor_(
11823*61046927SAndroid Build Coastguard Worker enqueueArgs,
11824*61046927SAndroid Build Coastguard Worker arg0,
11825*61046927SAndroid Build Coastguard Worker arg1,
11826*61046927SAndroid Build Coastguard Worker arg2,
11827*61046927SAndroid Build Coastguard Worker arg3,
11828*61046927SAndroid Build Coastguard Worker arg4,
11829*61046927SAndroid Build Coastguard Worker arg5,
11830*61046927SAndroid Build Coastguard Worker arg6,
11831*61046927SAndroid Build Coastguard Worker arg7,
11832*61046927SAndroid Build Coastguard Worker arg8);
11833*61046927SAndroid Build Coastguard Worker }
11834*61046927SAndroid Build Coastguard Worker
11835*61046927SAndroid Build Coastguard Worker
11836*61046927SAndroid Build Coastguard Worker };
11837*61046927SAndroid Build Coastguard Worker
11838*61046927SAndroid Build Coastguard Worker template<
11839*61046927SAndroid Build Coastguard Worker typename T0,
11840*61046927SAndroid Build Coastguard Worker typename T1,
11841*61046927SAndroid Build Coastguard Worker typename T2,
11842*61046927SAndroid Build Coastguard Worker typename T3,
11843*61046927SAndroid Build Coastguard Worker typename T4,
11844*61046927SAndroid Build Coastguard Worker typename T5,
11845*61046927SAndroid Build Coastguard Worker typename T6,
11846*61046927SAndroid Build Coastguard Worker typename T7>
11847*61046927SAndroid Build Coastguard Worker struct functionImplementation_
11848*61046927SAndroid Build Coastguard Worker < T0,
11849*61046927SAndroid Build Coastguard Worker T1,
11850*61046927SAndroid Build Coastguard Worker T2,
11851*61046927SAndroid Build Coastguard Worker T3,
11852*61046927SAndroid Build Coastguard Worker T4,
11853*61046927SAndroid Build Coastguard Worker T5,
11854*61046927SAndroid Build Coastguard Worker T6,
11855*61046927SAndroid Build Coastguard Worker T7,
11856*61046927SAndroid Build Coastguard Worker NullType,
11857*61046927SAndroid Build Coastguard Worker NullType,
11858*61046927SAndroid Build Coastguard Worker NullType,
11859*61046927SAndroid Build Coastguard Worker NullType,
11860*61046927SAndroid Build Coastguard Worker NullType,
11861*61046927SAndroid Build Coastguard Worker NullType,
11862*61046927SAndroid Build Coastguard Worker NullType,
11863*61046927SAndroid Build Coastguard Worker NullType,
11864*61046927SAndroid Build Coastguard Worker NullType,
11865*61046927SAndroid Build Coastguard Worker NullType,
11866*61046927SAndroid Build Coastguard Worker NullType,
11867*61046927SAndroid Build Coastguard Worker NullType,
11868*61046927SAndroid Build Coastguard Worker NullType,
11869*61046927SAndroid Build Coastguard Worker NullType,
11870*61046927SAndroid Build Coastguard Worker NullType,
11871*61046927SAndroid Build Coastguard Worker NullType,
11872*61046927SAndroid Build Coastguard Worker NullType,
11873*61046927SAndroid Build Coastguard Worker NullType,
11874*61046927SAndroid Build Coastguard Worker NullType,
11875*61046927SAndroid Build Coastguard Worker NullType,
11876*61046927SAndroid Build Coastguard Worker NullType,
11877*61046927SAndroid Build Coastguard Worker NullType,
11878*61046927SAndroid Build Coastguard Worker NullType,
11879*61046927SAndroid Build Coastguard Worker NullType>
11880*61046927SAndroid Build Coastguard Worker {
11881*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
11882*61046927SAndroid Build Coastguard Worker T0,
11883*61046927SAndroid Build Coastguard Worker T1,
11884*61046927SAndroid Build Coastguard Worker T2,
11885*61046927SAndroid Build Coastguard Worker T3,
11886*61046927SAndroid Build Coastguard Worker T4,
11887*61046927SAndroid Build Coastguard Worker T5,
11888*61046927SAndroid Build Coastguard Worker T6,
11889*61046927SAndroid Build Coastguard Worker T7,
11890*61046927SAndroid Build Coastguard Worker NullType,
11891*61046927SAndroid Build Coastguard Worker NullType,
11892*61046927SAndroid Build Coastguard Worker NullType,
11893*61046927SAndroid Build Coastguard Worker NullType,
11894*61046927SAndroid Build Coastguard Worker NullType,
11895*61046927SAndroid Build Coastguard Worker NullType,
11896*61046927SAndroid Build Coastguard Worker NullType,
11897*61046927SAndroid Build Coastguard Worker NullType,
11898*61046927SAndroid Build Coastguard Worker NullType,
11899*61046927SAndroid Build Coastguard Worker NullType,
11900*61046927SAndroid Build Coastguard Worker NullType,
11901*61046927SAndroid Build Coastguard Worker NullType,
11902*61046927SAndroid Build Coastguard Worker NullType,
11903*61046927SAndroid Build Coastguard Worker NullType,
11904*61046927SAndroid Build Coastguard Worker NullType,
11905*61046927SAndroid Build Coastguard Worker NullType,
11906*61046927SAndroid Build Coastguard Worker NullType,
11907*61046927SAndroid Build Coastguard Worker NullType,
11908*61046927SAndroid Build Coastguard Worker NullType,
11909*61046927SAndroid Build Coastguard Worker NullType,
11910*61046927SAndroid Build Coastguard Worker NullType,
11911*61046927SAndroid Build Coastguard Worker NullType,
11912*61046927SAndroid Build Coastguard Worker NullType,
11913*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
11914*61046927SAndroid Build Coastguard Worker
11915*61046927SAndroid Build Coastguard Worker FunctorType functor_;
11916*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_11917*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
11918*61046927SAndroid Build Coastguard Worker functor_(functor)
11919*61046927SAndroid Build Coastguard Worker {
11920*61046927SAndroid Build Coastguard Worker
11921*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 8))
11922*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
11923*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
11924*61046927SAndroid Build Coastguard Worker #endif
11925*61046927SAndroid Build Coastguard Worker
11926*61046927SAndroid Build Coastguard Worker }
11927*61046927SAndroid Build Coastguard Worker
11928*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
11929*61046927SAndroid Build Coastguard Worker typedef Event result_type;
11930*61046927SAndroid Build Coastguard Worker
11931*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
11932*61046927SAndroid Build Coastguard Worker typedef Event type_(
11933*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
11934*61046927SAndroid Build Coastguard Worker T0,
11935*61046927SAndroid Build Coastguard Worker T1,
11936*61046927SAndroid Build Coastguard Worker T2,
11937*61046927SAndroid Build Coastguard Worker T3,
11938*61046927SAndroid Build Coastguard Worker T4,
11939*61046927SAndroid Build Coastguard Worker T5,
11940*61046927SAndroid Build Coastguard Worker T6,
11941*61046927SAndroid Build Coastguard Worker T7);
11942*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_11943*61046927SAndroid Build Coastguard Worker Event operator()(
11944*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
11945*61046927SAndroid Build Coastguard Worker T0 arg0,
11946*61046927SAndroid Build Coastguard Worker T1 arg1,
11947*61046927SAndroid Build Coastguard Worker T2 arg2,
11948*61046927SAndroid Build Coastguard Worker T3 arg3,
11949*61046927SAndroid Build Coastguard Worker T4 arg4,
11950*61046927SAndroid Build Coastguard Worker T5 arg5,
11951*61046927SAndroid Build Coastguard Worker T6 arg6,
11952*61046927SAndroid Build Coastguard Worker T7 arg7)
11953*61046927SAndroid Build Coastguard Worker {
11954*61046927SAndroid Build Coastguard Worker return functor_(
11955*61046927SAndroid Build Coastguard Worker enqueueArgs,
11956*61046927SAndroid Build Coastguard Worker arg0,
11957*61046927SAndroid Build Coastguard Worker arg1,
11958*61046927SAndroid Build Coastguard Worker arg2,
11959*61046927SAndroid Build Coastguard Worker arg3,
11960*61046927SAndroid Build Coastguard Worker arg4,
11961*61046927SAndroid Build Coastguard Worker arg5,
11962*61046927SAndroid Build Coastguard Worker arg6,
11963*61046927SAndroid Build Coastguard Worker arg7);
11964*61046927SAndroid Build Coastguard Worker }
11965*61046927SAndroid Build Coastguard Worker
11966*61046927SAndroid Build Coastguard Worker
11967*61046927SAndroid Build Coastguard Worker };
11968*61046927SAndroid Build Coastguard Worker
11969*61046927SAndroid Build Coastguard Worker template<
11970*61046927SAndroid Build Coastguard Worker typename T0,
11971*61046927SAndroid Build Coastguard Worker typename T1,
11972*61046927SAndroid Build Coastguard Worker typename T2,
11973*61046927SAndroid Build Coastguard Worker typename T3,
11974*61046927SAndroid Build Coastguard Worker typename T4,
11975*61046927SAndroid Build Coastguard Worker typename T5,
11976*61046927SAndroid Build Coastguard Worker typename T6>
11977*61046927SAndroid Build Coastguard Worker struct functionImplementation_
11978*61046927SAndroid Build Coastguard Worker < T0,
11979*61046927SAndroid Build Coastguard Worker T1,
11980*61046927SAndroid Build Coastguard Worker T2,
11981*61046927SAndroid Build Coastguard Worker T3,
11982*61046927SAndroid Build Coastguard Worker T4,
11983*61046927SAndroid Build Coastguard Worker T5,
11984*61046927SAndroid Build Coastguard Worker T6,
11985*61046927SAndroid Build Coastguard Worker NullType,
11986*61046927SAndroid Build Coastguard Worker NullType,
11987*61046927SAndroid Build Coastguard Worker NullType,
11988*61046927SAndroid Build Coastguard Worker NullType,
11989*61046927SAndroid Build Coastguard Worker NullType,
11990*61046927SAndroid Build Coastguard Worker NullType,
11991*61046927SAndroid Build Coastguard Worker NullType,
11992*61046927SAndroid Build Coastguard Worker NullType,
11993*61046927SAndroid Build Coastguard Worker NullType,
11994*61046927SAndroid Build Coastguard Worker NullType,
11995*61046927SAndroid Build Coastguard Worker NullType,
11996*61046927SAndroid Build Coastguard Worker NullType,
11997*61046927SAndroid Build Coastguard Worker NullType,
11998*61046927SAndroid Build Coastguard Worker NullType,
11999*61046927SAndroid Build Coastguard Worker NullType,
12000*61046927SAndroid Build Coastguard Worker NullType,
12001*61046927SAndroid Build Coastguard Worker NullType,
12002*61046927SAndroid Build Coastguard Worker NullType,
12003*61046927SAndroid Build Coastguard Worker NullType,
12004*61046927SAndroid Build Coastguard Worker NullType,
12005*61046927SAndroid Build Coastguard Worker NullType,
12006*61046927SAndroid Build Coastguard Worker NullType,
12007*61046927SAndroid Build Coastguard Worker NullType,
12008*61046927SAndroid Build Coastguard Worker NullType,
12009*61046927SAndroid Build Coastguard Worker NullType>
12010*61046927SAndroid Build Coastguard Worker {
12011*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
12012*61046927SAndroid Build Coastguard Worker T0,
12013*61046927SAndroid Build Coastguard Worker T1,
12014*61046927SAndroid Build Coastguard Worker T2,
12015*61046927SAndroid Build Coastguard Worker T3,
12016*61046927SAndroid Build Coastguard Worker T4,
12017*61046927SAndroid Build Coastguard Worker T5,
12018*61046927SAndroid Build Coastguard Worker T6,
12019*61046927SAndroid Build Coastguard Worker NullType,
12020*61046927SAndroid Build Coastguard Worker NullType,
12021*61046927SAndroid Build Coastguard Worker NullType,
12022*61046927SAndroid Build Coastguard Worker NullType,
12023*61046927SAndroid Build Coastguard Worker NullType,
12024*61046927SAndroid Build Coastguard Worker NullType,
12025*61046927SAndroid Build Coastguard Worker NullType,
12026*61046927SAndroid Build Coastguard Worker NullType,
12027*61046927SAndroid Build Coastguard Worker NullType,
12028*61046927SAndroid Build Coastguard Worker NullType,
12029*61046927SAndroid Build Coastguard Worker NullType,
12030*61046927SAndroid Build Coastguard Worker NullType,
12031*61046927SAndroid Build Coastguard Worker NullType,
12032*61046927SAndroid Build Coastguard Worker NullType,
12033*61046927SAndroid Build Coastguard Worker NullType,
12034*61046927SAndroid Build Coastguard Worker NullType,
12035*61046927SAndroid Build Coastguard Worker NullType,
12036*61046927SAndroid Build Coastguard Worker NullType,
12037*61046927SAndroid Build Coastguard Worker NullType,
12038*61046927SAndroid Build Coastguard Worker NullType,
12039*61046927SAndroid Build Coastguard Worker NullType,
12040*61046927SAndroid Build Coastguard Worker NullType,
12041*61046927SAndroid Build Coastguard Worker NullType,
12042*61046927SAndroid Build Coastguard Worker NullType,
12043*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
12044*61046927SAndroid Build Coastguard Worker
12045*61046927SAndroid Build Coastguard Worker FunctorType functor_;
12046*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_12047*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
12048*61046927SAndroid Build Coastguard Worker functor_(functor)
12049*61046927SAndroid Build Coastguard Worker {
12050*61046927SAndroid Build Coastguard Worker
12051*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 7))
12052*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
12053*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
12054*61046927SAndroid Build Coastguard Worker #endif
12055*61046927SAndroid Build Coastguard Worker
12056*61046927SAndroid Build Coastguard Worker }
12057*61046927SAndroid Build Coastguard Worker
12058*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
12059*61046927SAndroid Build Coastguard Worker typedef Event result_type;
12060*61046927SAndroid Build Coastguard Worker
12061*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
12062*61046927SAndroid Build Coastguard Worker typedef Event type_(
12063*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
12064*61046927SAndroid Build Coastguard Worker T0,
12065*61046927SAndroid Build Coastguard Worker T1,
12066*61046927SAndroid Build Coastguard Worker T2,
12067*61046927SAndroid Build Coastguard Worker T3,
12068*61046927SAndroid Build Coastguard Worker T4,
12069*61046927SAndroid Build Coastguard Worker T5,
12070*61046927SAndroid Build Coastguard Worker T6);
12071*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_12072*61046927SAndroid Build Coastguard Worker Event operator()(
12073*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
12074*61046927SAndroid Build Coastguard Worker T0 arg0,
12075*61046927SAndroid Build Coastguard Worker T1 arg1,
12076*61046927SAndroid Build Coastguard Worker T2 arg2,
12077*61046927SAndroid Build Coastguard Worker T3 arg3,
12078*61046927SAndroid Build Coastguard Worker T4 arg4,
12079*61046927SAndroid Build Coastguard Worker T5 arg5,
12080*61046927SAndroid Build Coastguard Worker T6 arg6)
12081*61046927SAndroid Build Coastguard Worker {
12082*61046927SAndroid Build Coastguard Worker return functor_(
12083*61046927SAndroid Build Coastguard Worker enqueueArgs,
12084*61046927SAndroid Build Coastguard Worker arg0,
12085*61046927SAndroid Build Coastguard Worker arg1,
12086*61046927SAndroid Build Coastguard Worker arg2,
12087*61046927SAndroid Build Coastguard Worker arg3,
12088*61046927SAndroid Build Coastguard Worker arg4,
12089*61046927SAndroid Build Coastguard Worker arg5,
12090*61046927SAndroid Build Coastguard Worker arg6);
12091*61046927SAndroid Build Coastguard Worker }
12092*61046927SAndroid Build Coastguard Worker
12093*61046927SAndroid Build Coastguard Worker
12094*61046927SAndroid Build Coastguard Worker };
12095*61046927SAndroid Build Coastguard Worker
12096*61046927SAndroid Build Coastguard Worker template<
12097*61046927SAndroid Build Coastguard Worker typename T0,
12098*61046927SAndroid Build Coastguard Worker typename T1,
12099*61046927SAndroid Build Coastguard Worker typename T2,
12100*61046927SAndroid Build Coastguard Worker typename T3,
12101*61046927SAndroid Build Coastguard Worker typename T4,
12102*61046927SAndroid Build Coastguard Worker typename T5>
12103*61046927SAndroid Build Coastguard Worker struct functionImplementation_
12104*61046927SAndroid Build Coastguard Worker < T0,
12105*61046927SAndroid Build Coastguard Worker T1,
12106*61046927SAndroid Build Coastguard Worker T2,
12107*61046927SAndroid Build Coastguard Worker T3,
12108*61046927SAndroid Build Coastguard Worker T4,
12109*61046927SAndroid Build Coastguard Worker T5,
12110*61046927SAndroid Build Coastguard Worker NullType,
12111*61046927SAndroid Build Coastguard Worker NullType,
12112*61046927SAndroid Build Coastguard Worker NullType,
12113*61046927SAndroid Build Coastguard Worker NullType,
12114*61046927SAndroid Build Coastguard Worker NullType,
12115*61046927SAndroid Build Coastguard Worker NullType,
12116*61046927SAndroid Build Coastguard Worker NullType,
12117*61046927SAndroid Build Coastguard Worker NullType,
12118*61046927SAndroid Build Coastguard Worker NullType,
12119*61046927SAndroid Build Coastguard Worker NullType,
12120*61046927SAndroid Build Coastguard Worker NullType,
12121*61046927SAndroid Build Coastguard Worker NullType,
12122*61046927SAndroid Build Coastguard Worker NullType,
12123*61046927SAndroid Build Coastguard Worker NullType,
12124*61046927SAndroid Build Coastguard Worker NullType,
12125*61046927SAndroid Build Coastguard Worker NullType,
12126*61046927SAndroid Build Coastguard Worker NullType,
12127*61046927SAndroid Build Coastguard Worker NullType,
12128*61046927SAndroid Build Coastguard Worker NullType,
12129*61046927SAndroid Build Coastguard Worker NullType,
12130*61046927SAndroid Build Coastguard Worker NullType,
12131*61046927SAndroid Build Coastguard Worker NullType,
12132*61046927SAndroid Build Coastguard Worker NullType,
12133*61046927SAndroid Build Coastguard Worker NullType,
12134*61046927SAndroid Build Coastguard Worker NullType,
12135*61046927SAndroid Build Coastguard Worker NullType>
12136*61046927SAndroid Build Coastguard Worker {
12137*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
12138*61046927SAndroid Build Coastguard Worker T0,
12139*61046927SAndroid Build Coastguard Worker T1,
12140*61046927SAndroid Build Coastguard Worker T2,
12141*61046927SAndroid Build Coastguard Worker T3,
12142*61046927SAndroid Build Coastguard Worker T4,
12143*61046927SAndroid Build Coastguard Worker T5,
12144*61046927SAndroid Build Coastguard Worker NullType,
12145*61046927SAndroid Build Coastguard Worker NullType,
12146*61046927SAndroid Build Coastguard Worker NullType,
12147*61046927SAndroid Build Coastguard Worker NullType,
12148*61046927SAndroid Build Coastguard Worker NullType,
12149*61046927SAndroid Build Coastguard Worker NullType,
12150*61046927SAndroid Build Coastguard Worker NullType,
12151*61046927SAndroid Build Coastguard Worker NullType,
12152*61046927SAndroid Build Coastguard Worker NullType,
12153*61046927SAndroid Build Coastguard Worker NullType,
12154*61046927SAndroid Build Coastguard Worker NullType,
12155*61046927SAndroid Build Coastguard Worker NullType,
12156*61046927SAndroid Build Coastguard Worker NullType,
12157*61046927SAndroid Build Coastguard Worker NullType,
12158*61046927SAndroid Build Coastguard Worker NullType,
12159*61046927SAndroid Build Coastguard Worker NullType,
12160*61046927SAndroid Build Coastguard Worker NullType,
12161*61046927SAndroid Build Coastguard Worker NullType,
12162*61046927SAndroid Build Coastguard Worker NullType,
12163*61046927SAndroid Build Coastguard Worker NullType,
12164*61046927SAndroid Build Coastguard Worker NullType,
12165*61046927SAndroid Build Coastguard Worker NullType,
12166*61046927SAndroid Build Coastguard Worker NullType,
12167*61046927SAndroid Build Coastguard Worker NullType,
12168*61046927SAndroid Build Coastguard Worker NullType,
12169*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
12170*61046927SAndroid Build Coastguard Worker
12171*61046927SAndroid Build Coastguard Worker FunctorType functor_;
12172*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_12173*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
12174*61046927SAndroid Build Coastguard Worker functor_(functor)
12175*61046927SAndroid Build Coastguard Worker {
12176*61046927SAndroid Build Coastguard Worker
12177*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 6))
12178*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
12179*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
12180*61046927SAndroid Build Coastguard Worker #endif
12181*61046927SAndroid Build Coastguard Worker
12182*61046927SAndroid Build Coastguard Worker }
12183*61046927SAndroid Build Coastguard Worker
12184*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
12185*61046927SAndroid Build Coastguard Worker typedef Event result_type;
12186*61046927SAndroid Build Coastguard Worker
12187*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
12188*61046927SAndroid Build Coastguard Worker typedef Event type_(
12189*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
12190*61046927SAndroid Build Coastguard Worker T0,
12191*61046927SAndroid Build Coastguard Worker T1,
12192*61046927SAndroid Build Coastguard Worker T2,
12193*61046927SAndroid Build Coastguard Worker T3,
12194*61046927SAndroid Build Coastguard Worker T4,
12195*61046927SAndroid Build Coastguard Worker T5);
12196*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_12197*61046927SAndroid Build Coastguard Worker Event operator()(
12198*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
12199*61046927SAndroid Build Coastguard Worker T0 arg0,
12200*61046927SAndroid Build Coastguard Worker T1 arg1,
12201*61046927SAndroid Build Coastguard Worker T2 arg2,
12202*61046927SAndroid Build Coastguard Worker T3 arg3,
12203*61046927SAndroid Build Coastguard Worker T4 arg4,
12204*61046927SAndroid Build Coastguard Worker T5 arg5)
12205*61046927SAndroid Build Coastguard Worker {
12206*61046927SAndroid Build Coastguard Worker return functor_(
12207*61046927SAndroid Build Coastguard Worker enqueueArgs,
12208*61046927SAndroid Build Coastguard Worker arg0,
12209*61046927SAndroid Build Coastguard Worker arg1,
12210*61046927SAndroid Build Coastguard Worker arg2,
12211*61046927SAndroid Build Coastguard Worker arg3,
12212*61046927SAndroid Build Coastguard Worker arg4,
12213*61046927SAndroid Build Coastguard Worker arg5);
12214*61046927SAndroid Build Coastguard Worker }
12215*61046927SAndroid Build Coastguard Worker
12216*61046927SAndroid Build Coastguard Worker
12217*61046927SAndroid Build Coastguard Worker };
12218*61046927SAndroid Build Coastguard Worker
12219*61046927SAndroid Build Coastguard Worker template<
12220*61046927SAndroid Build Coastguard Worker typename T0,
12221*61046927SAndroid Build Coastguard Worker typename T1,
12222*61046927SAndroid Build Coastguard Worker typename T2,
12223*61046927SAndroid Build Coastguard Worker typename T3,
12224*61046927SAndroid Build Coastguard Worker typename T4>
12225*61046927SAndroid Build Coastguard Worker struct functionImplementation_
12226*61046927SAndroid Build Coastguard Worker < T0,
12227*61046927SAndroid Build Coastguard Worker T1,
12228*61046927SAndroid Build Coastguard Worker T2,
12229*61046927SAndroid Build Coastguard Worker T3,
12230*61046927SAndroid Build Coastguard Worker T4,
12231*61046927SAndroid Build Coastguard Worker NullType,
12232*61046927SAndroid Build Coastguard Worker NullType,
12233*61046927SAndroid Build Coastguard Worker NullType,
12234*61046927SAndroid Build Coastguard Worker NullType,
12235*61046927SAndroid Build Coastguard Worker NullType,
12236*61046927SAndroid Build Coastguard Worker NullType,
12237*61046927SAndroid Build Coastguard Worker NullType,
12238*61046927SAndroid Build Coastguard Worker NullType,
12239*61046927SAndroid Build Coastguard Worker NullType,
12240*61046927SAndroid Build Coastguard Worker NullType,
12241*61046927SAndroid Build Coastguard Worker NullType,
12242*61046927SAndroid Build Coastguard Worker NullType,
12243*61046927SAndroid Build Coastguard Worker NullType,
12244*61046927SAndroid Build Coastguard Worker NullType,
12245*61046927SAndroid Build Coastguard Worker NullType,
12246*61046927SAndroid Build Coastguard Worker NullType,
12247*61046927SAndroid Build Coastguard Worker NullType,
12248*61046927SAndroid Build Coastguard Worker NullType,
12249*61046927SAndroid Build Coastguard Worker NullType,
12250*61046927SAndroid Build Coastguard Worker NullType,
12251*61046927SAndroid Build Coastguard Worker NullType,
12252*61046927SAndroid Build Coastguard Worker NullType,
12253*61046927SAndroid Build Coastguard Worker NullType,
12254*61046927SAndroid Build Coastguard Worker NullType,
12255*61046927SAndroid Build Coastguard Worker NullType,
12256*61046927SAndroid Build Coastguard Worker NullType,
12257*61046927SAndroid Build Coastguard Worker NullType>
12258*61046927SAndroid Build Coastguard Worker {
12259*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
12260*61046927SAndroid Build Coastguard Worker T0,
12261*61046927SAndroid Build Coastguard Worker T1,
12262*61046927SAndroid Build Coastguard Worker T2,
12263*61046927SAndroid Build Coastguard Worker T3,
12264*61046927SAndroid Build Coastguard Worker T4,
12265*61046927SAndroid Build Coastguard Worker NullType,
12266*61046927SAndroid Build Coastguard Worker NullType,
12267*61046927SAndroid Build Coastguard Worker NullType,
12268*61046927SAndroid Build Coastguard Worker NullType,
12269*61046927SAndroid Build Coastguard Worker NullType,
12270*61046927SAndroid Build Coastguard Worker NullType,
12271*61046927SAndroid Build Coastguard Worker NullType,
12272*61046927SAndroid Build Coastguard Worker NullType,
12273*61046927SAndroid Build Coastguard Worker NullType,
12274*61046927SAndroid Build Coastguard Worker NullType,
12275*61046927SAndroid Build Coastguard Worker NullType,
12276*61046927SAndroid Build Coastguard Worker NullType,
12277*61046927SAndroid Build Coastguard Worker NullType,
12278*61046927SAndroid Build Coastguard Worker NullType,
12279*61046927SAndroid Build Coastguard Worker NullType,
12280*61046927SAndroid Build Coastguard Worker NullType,
12281*61046927SAndroid Build Coastguard Worker NullType,
12282*61046927SAndroid Build Coastguard Worker NullType,
12283*61046927SAndroid Build Coastguard Worker NullType,
12284*61046927SAndroid Build Coastguard Worker NullType,
12285*61046927SAndroid Build Coastguard Worker NullType,
12286*61046927SAndroid Build Coastguard Worker NullType,
12287*61046927SAndroid Build Coastguard Worker NullType,
12288*61046927SAndroid Build Coastguard Worker NullType,
12289*61046927SAndroid Build Coastguard Worker NullType,
12290*61046927SAndroid Build Coastguard Worker NullType,
12291*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
12292*61046927SAndroid Build Coastguard Worker
12293*61046927SAndroid Build Coastguard Worker FunctorType functor_;
12294*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_12295*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
12296*61046927SAndroid Build Coastguard Worker functor_(functor)
12297*61046927SAndroid Build Coastguard Worker {
12298*61046927SAndroid Build Coastguard Worker
12299*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 5))
12300*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
12301*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
12302*61046927SAndroid Build Coastguard Worker #endif
12303*61046927SAndroid Build Coastguard Worker
12304*61046927SAndroid Build Coastguard Worker }
12305*61046927SAndroid Build Coastguard Worker
12306*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
12307*61046927SAndroid Build Coastguard Worker typedef Event result_type;
12308*61046927SAndroid Build Coastguard Worker
12309*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
12310*61046927SAndroid Build Coastguard Worker typedef Event type_(
12311*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
12312*61046927SAndroid Build Coastguard Worker T0,
12313*61046927SAndroid Build Coastguard Worker T1,
12314*61046927SAndroid Build Coastguard Worker T2,
12315*61046927SAndroid Build Coastguard Worker T3,
12316*61046927SAndroid Build Coastguard Worker T4);
12317*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_12318*61046927SAndroid Build Coastguard Worker Event operator()(
12319*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
12320*61046927SAndroid Build Coastguard Worker T0 arg0,
12321*61046927SAndroid Build Coastguard Worker T1 arg1,
12322*61046927SAndroid Build Coastguard Worker T2 arg2,
12323*61046927SAndroid Build Coastguard Worker T3 arg3,
12324*61046927SAndroid Build Coastguard Worker T4 arg4)
12325*61046927SAndroid Build Coastguard Worker {
12326*61046927SAndroid Build Coastguard Worker return functor_(
12327*61046927SAndroid Build Coastguard Worker enqueueArgs,
12328*61046927SAndroid Build Coastguard Worker arg0,
12329*61046927SAndroid Build Coastguard Worker arg1,
12330*61046927SAndroid Build Coastguard Worker arg2,
12331*61046927SAndroid Build Coastguard Worker arg3,
12332*61046927SAndroid Build Coastguard Worker arg4);
12333*61046927SAndroid Build Coastguard Worker }
12334*61046927SAndroid Build Coastguard Worker
12335*61046927SAndroid Build Coastguard Worker
12336*61046927SAndroid Build Coastguard Worker };
12337*61046927SAndroid Build Coastguard Worker
12338*61046927SAndroid Build Coastguard Worker template<
12339*61046927SAndroid Build Coastguard Worker typename T0,
12340*61046927SAndroid Build Coastguard Worker typename T1,
12341*61046927SAndroid Build Coastguard Worker typename T2,
12342*61046927SAndroid Build Coastguard Worker typename T3>
12343*61046927SAndroid Build Coastguard Worker struct functionImplementation_
12344*61046927SAndroid Build Coastguard Worker < T0,
12345*61046927SAndroid Build Coastguard Worker T1,
12346*61046927SAndroid Build Coastguard Worker T2,
12347*61046927SAndroid Build Coastguard Worker T3,
12348*61046927SAndroid Build Coastguard Worker NullType,
12349*61046927SAndroid Build Coastguard Worker NullType,
12350*61046927SAndroid Build Coastguard Worker NullType,
12351*61046927SAndroid Build Coastguard Worker NullType,
12352*61046927SAndroid Build Coastguard Worker NullType,
12353*61046927SAndroid Build Coastguard Worker NullType,
12354*61046927SAndroid Build Coastguard Worker NullType,
12355*61046927SAndroid Build Coastguard Worker NullType,
12356*61046927SAndroid Build Coastguard Worker NullType,
12357*61046927SAndroid Build Coastguard Worker NullType,
12358*61046927SAndroid Build Coastguard Worker NullType,
12359*61046927SAndroid Build Coastguard Worker NullType,
12360*61046927SAndroid Build Coastguard Worker NullType,
12361*61046927SAndroid Build Coastguard Worker NullType,
12362*61046927SAndroid Build Coastguard Worker NullType,
12363*61046927SAndroid Build Coastguard Worker NullType,
12364*61046927SAndroid Build Coastguard Worker NullType,
12365*61046927SAndroid Build Coastguard Worker NullType,
12366*61046927SAndroid Build Coastguard Worker NullType,
12367*61046927SAndroid Build Coastguard Worker NullType,
12368*61046927SAndroid Build Coastguard Worker NullType,
12369*61046927SAndroid Build Coastguard Worker NullType,
12370*61046927SAndroid Build Coastguard Worker NullType,
12371*61046927SAndroid Build Coastguard Worker NullType,
12372*61046927SAndroid Build Coastguard Worker NullType,
12373*61046927SAndroid Build Coastguard Worker NullType,
12374*61046927SAndroid Build Coastguard Worker NullType,
12375*61046927SAndroid Build Coastguard Worker NullType>
12376*61046927SAndroid Build Coastguard Worker {
12377*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
12378*61046927SAndroid Build Coastguard Worker T0,
12379*61046927SAndroid Build Coastguard Worker T1,
12380*61046927SAndroid Build Coastguard Worker T2,
12381*61046927SAndroid Build Coastguard Worker T3,
12382*61046927SAndroid Build Coastguard Worker NullType,
12383*61046927SAndroid Build Coastguard Worker NullType,
12384*61046927SAndroid Build Coastguard Worker NullType,
12385*61046927SAndroid Build Coastguard Worker NullType,
12386*61046927SAndroid Build Coastguard Worker NullType,
12387*61046927SAndroid Build Coastguard Worker NullType,
12388*61046927SAndroid Build Coastguard Worker NullType,
12389*61046927SAndroid Build Coastguard Worker NullType,
12390*61046927SAndroid Build Coastguard Worker NullType,
12391*61046927SAndroid Build Coastguard Worker NullType,
12392*61046927SAndroid Build Coastguard Worker NullType,
12393*61046927SAndroid Build Coastguard Worker NullType,
12394*61046927SAndroid Build Coastguard Worker NullType,
12395*61046927SAndroid Build Coastguard Worker NullType,
12396*61046927SAndroid Build Coastguard Worker NullType,
12397*61046927SAndroid Build Coastguard Worker NullType,
12398*61046927SAndroid Build Coastguard Worker NullType,
12399*61046927SAndroid Build Coastguard Worker NullType,
12400*61046927SAndroid Build Coastguard Worker NullType,
12401*61046927SAndroid Build Coastguard Worker NullType,
12402*61046927SAndroid Build Coastguard Worker NullType,
12403*61046927SAndroid Build Coastguard Worker NullType,
12404*61046927SAndroid Build Coastguard Worker NullType,
12405*61046927SAndroid Build Coastguard Worker NullType,
12406*61046927SAndroid Build Coastguard Worker NullType,
12407*61046927SAndroid Build Coastguard Worker NullType,
12408*61046927SAndroid Build Coastguard Worker NullType,
12409*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
12410*61046927SAndroid Build Coastguard Worker
12411*61046927SAndroid Build Coastguard Worker FunctorType functor_;
12412*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_12413*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
12414*61046927SAndroid Build Coastguard Worker functor_(functor)
12415*61046927SAndroid Build Coastguard Worker {
12416*61046927SAndroid Build Coastguard Worker
12417*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 4))
12418*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
12419*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
12420*61046927SAndroid Build Coastguard Worker #endif
12421*61046927SAndroid Build Coastguard Worker
12422*61046927SAndroid Build Coastguard Worker }
12423*61046927SAndroid Build Coastguard Worker
12424*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
12425*61046927SAndroid Build Coastguard Worker typedef Event result_type;
12426*61046927SAndroid Build Coastguard Worker
12427*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
12428*61046927SAndroid Build Coastguard Worker typedef Event type_(
12429*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
12430*61046927SAndroid Build Coastguard Worker T0,
12431*61046927SAndroid Build Coastguard Worker T1,
12432*61046927SAndroid Build Coastguard Worker T2,
12433*61046927SAndroid Build Coastguard Worker T3);
12434*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_12435*61046927SAndroid Build Coastguard Worker Event operator()(
12436*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
12437*61046927SAndroid Build Coastguard Worker T0 arg0,
12438*61046927SAndroid Build Coastguard Worker T1 arg1,
12439*61046927SAndroid Build Coastguard Worker T2 arg2,
12440*61046927SAndroid Build Coastguard Worker T3 arg3)
12441*61046927SAndroid Build Coastguard Worker {
12442*61046927SAndroid Build Coastguard Worker return functor_(
12443*61046927SAndroid Build Coastguard Worker enqueueArgs,
12444*61046927SAndroid Build Coastguard Worker arg0,
12445*61046927SAndroid Build Coastguard Worker arg1,
12446*61046927SAndroid Build Coastguard Worker arg2,
12447*61046927SAndroid Build Coastguard Worker arg3);
12448*61046927SAndroid Build Coastguard Worker }
12449*61046927SAndroid Build Coastguard Worker
12450*61046927SAndroid Build Coastguard Worker
12451*61046927SAndroid Build Coastguard Worker };
12452*61046927SAndroid Build Coastguard Worker
12453*61046927SAndroid Build Coastguard Worker template<
12454*61046927SAndroid Build Coastguard Worker typename T0,
12455*61046927SAndroid Build Coastguard Worker typename T1,
12456*61046927SAndroid Build Coastguard Worker typename T2>
12457*61046927SAndroid Build Coastguard Worker struct functionImplementation_
12458*61046927SAndroid Build Coastguard Worker < T0,
12459*61046927SAndroid Build Coastguard Worker T1,
12460*61046927SAndroid Build Coastguard Worker T2,
12461*61046927SAndroid Build Coastguard Worker NullType,
12462*61046927SAndroid Build Coastguard Worker NullType,
12463*61046927SAndroid Build Coastguard Worker NullType,
12464*61046927SAndroid Build Coastguard Worker NullType,
12465*61046927SAndroid Build Coastguard Worker NullType,
12466*61046927SAndroid Build Coastguard Worker NullType,
12467*61046927SAndroid Build Coastguard Worker NullType,
12468*61046927SAndroid Build Coastguard Worker NullType,
12469*61046927SAndroid Build Coastguard Worker NullType,
12470*61046927SAndroid Build Coastguard Worker NullType,
12471*61046927SAndroid Build Coastguard Worker NullType,
12472*61046927SAndroid Build Coastguard Worker NullType,
12473*61046927SAndroid Build Coastguard Worker NullType,
12474*61046927SAndroid Build Coastguard Worker NullType,
12475*61046927SAndroid Build Coastguard Worker NullType,
12476*61046927SAndroid Build Coastguard Worker NullType,
12477*61046927SAndroid Build Coastguard Worker NullType,
12478*61046927SAndroid Build Coastguard Worker NullType,
12479*61046927SAndroid Build Coastguard Worker NullType,
12480*61046927SAndroid Build Coastguard Worker NullType,
12481*61046927SAndroid Build Coastguard Worker NullType,
12482*61046927SAndroid Build Coastguard Worker NullType,
12483*61046927SAndroid Build Coastguard Worker NullType,
12484*61046927SAndroid Build Coastguard Worker NullType,
12485*61046927SAndroid Build Coastguard Worker NullType,
12486*61046927SAndroid Build Coastguard Worker NullType,
12487*61046927SAndroid Build Coastguard Worker NullType,
12488*61046927SAndroid Build Coastguard Worker NullType,
12489*61046927SAndroid Build Coastguard Worker NullType>
12490*61046927SAndroid Build Coastguard Worker {
12491*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
12492*61046927SAndroid Build Coastguard Worker T0,
12493*61046927SAndroid Build Coastguard Worker T1,
12494*61046927SAndroid Build Coastguard Worker T2,
12495*61046927SAndroid Build Coastguard Worker NullType,
12496*61046927SAndroid Build Coastguard Worker NullType,
12497*61046927SAndroid Build Coastguard Worker NullType,
12498*61046927SAndroid Build Coastguard Worker NullType,
12499*61046927SAndroid Build Coastguard Worker NullType,
12500*61046927SAndroid Build Coastguard Worker NullType,
12501*61046927SAndroid Build Coastguard Worker NullType,
12502*61046927SAndroid Build Coastguard Worker NullType,
12503*61046927SAndroid Build Coastguard Worker NullType,
12504*61046927SAndroid Build Coastguard Worker NullType,
12505*61046927SAndroid Build Coastguard Worker NullType,
12506*61046927SAndroid Build Coastguard Worker NullType,
12507*61046927SAndroid Build Coastguard Worker NullType,
12508*61046927SAndroid Build Coastguard Worker NullType,
12509*61046927SAndroid Build Coastguard Worker NullType,
12510*61046927SAndroid Build Coastguard Worker NullType,
12511*61046927SAndroid Build Coastguard Worker NullType,
12512*61046927SAndroid Build Coastguard Worker NullType,
12513*61046927SAndroid Build Coastguard Worker NullType,
12514*61046927SAndroid Build Coastguard Worker NullType,
12515*61046927SAndroid Build Coastguard Worker NullType,
12516*61046927SAndroid Build Coastguard Worker NullType,
12517*61046927SAndroid Build Coastguard Worker NullType,
12518*61046927SAndroid Build Coastguard Worker NullType,
12519*61046927SAndroid Build Coastguard Worker NullType,
12520*61046927SAndroid Build Coastguard Worker NullType,
12521*61046927SAndroid Build Coastguard Worker NullType,
12522*61046927SAndroid Build Coastguard Worker NullType,
12523*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
12524*61046927SAndroid Build Coastguard Worker
12525*61046927SAndroid Build Coastguard Worker FunctorType functor_;
12526*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_12527*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
12528*61046927SAndroid Build Coastguard Worker functor_(functor)
12529*61046927SAndroid Build Coastguard Worker {
12530*61046927SAndroid Build Coastguard Worker
12531*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 3))
12532*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
12533*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
12534*61046927SAndroid Build Coastguard Worker #endif
12535*61046927SAndroid Build Coastguard Worker
12536*61046927SAndroid Build Coastguard Worker }
12537*61046927SAndroid Build Coastguard Worker
12538*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
12539*61046927SAndroid Build Coastguard Worker typedef Event result_type;
12540*61046927SAndroid Build Coastguard Worker
12541*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
12542*61046927SAndroid Build Coastguard Worker typedef Event type_(
12543*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
12544*61046927SAndroid Build Coastguard Worker T0,
12545*61046927SAndroid Build Coastguard Worker T1,
12546*61046927SAndroid Build Coastguard Worker T2);
12547*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_12548*61046927SAndroid Build Coastguard Worker Event operator()(
12549*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
12550*61046927SAndroid Build Coastguard Worker T0 arg0,
12551*61046927SAndroid Build Coastguard Worker T1 arg1,
12552*61046927SAndroid Build Coastguard Worker T2 arg2)
12553*61046927SAndroid Build Coastguard Worker {
12554*61046927SAndroid Build Coastguard Worker return functor_(
12555*61046927SAndroid Build Coastguard Worker enqueueArgs,
12556*61046927SAndroid Build Coastguard Worker arg0,
12557*61046927SAndroid Build Coastguard Worker arg1,
12558*61046927SAndroid Build Coastguard Worker arg2);
12559*61046927SAndroid Build Coastguard Worker }
12560*61046927SAndroid Build Coastguard Worker
12561*61046927SAndroid Build Coastguard Worker
12562*61046927SAndroid Build Coastguard Worker };
12563*61046927SAndroid Build Coastguard Worker
12564*61046927SAndroid Build Coastguard Worker template<
12565*61046927SAndroid Build Coastguard Worker typename T0,
12566*61046927SAndroid Build Coastguard Worker typename T1>
12567*61046927SAndroid Build Coastguard Worker struct functionImplementation_
12568*61046927SAndroid Build Coastguard Worker < T0,
12569*61046927SAndroid Build Coastguard Worker T1,
12570*61046927SAndroid Build Coastguard Worker NullType,
12571*61046927SAndroid Build Coastguard Worker NullType,
12572*61046927SAndroid Build Coastguard Worker NullType,
12573*61046927SAndroid Build Coastguard Worker NullType,
12574*61046927SAndroid Build Coastguard Worker NullType,
12575*61046927SAndroid Build Coastguard Worker NullType,
12576*61046927SAndroid Build Coastguard Worker NullType,
12577*61046927SAndroid Build Coastguard Worker NullType,
12578*61046927SAndroid Build Coastguard Worker NullType,
12579*61046927SAndroid Build Coastguard Worker NullType,
12580*61046927SAndroid Build Coastguard Worker NullType,
12581*61046927SAndroid Build Coastguard Worker NullType,
12582*61046927SAndroid Build Coastguard Worker NullType,
12583*61046927SAndroid Build Coastguard Worker NullType,
12584*61046927SAndroid Build Coastguard Worker NullType,
12585*61046927SAndroid Build Coastguard Worker NullType,
12586*61046927SAndroid Build Coastguard Worker NullType,
12587*61046927SAndroid Build Coastguard Worker NullType,
12588*61046927SAndroid Build Coastguard Worker NullType,
12589*61046927SAndroid Build Coastguard Worker NullType,
12590*61046927SAndroid Build Coastguard Worker NullType,
12591*61046927SAndroid Build Coastguard Worker NullType,
12592*61046927SAndroid Build Coastguard Worker NullType,
12593*61046927SAndroid Build Coastguard Worker NullType,
12594*61046927SAndroid Build Coastguard Worker NullType,
12595*61046927SAndroid Build Coastguard Worker NullType,
12596*61046927SAndroid Build Coastguard Worker NullType,
12597*61046927SAndroid Build Coastguard Worker NullType,
12598*61046927SAndroid Build Coastguard Worker NullType,
12599*61046927SAndroid Build Coastguard Worker NullType>
12600*61046927SAndroid Build Coastguard Worker {
12601*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
12602*61046927SAndroid Build Coastguard Worker T0,
12603*61046927SAndroid Build Coastguard Worker T1,
12604*61046927SAndroid Build Coastguard Worker NullType,
12605*61046927SAndroid Build Coastguard Worker NullType,
12606*61046927SAndroid Build Coastguard Worker NullType,
12607*61046927SAndroid Build Coastguard Worker NullType,
12608*61046927SAndroid Build Coastguard Worker NullType,
12609*61046927SAndroid Build Coastguard Worker NullType,
12610*61046927SAndroid Build Coastguard Worker NullType,
12611*61046927SAndroid Build Coastguard Worker NullType,
12612*61046927SAndroid Build Coastguard Worker NullType,
12613*61046927SAndroid Build Coastguard Worker NullType,
12614*61046927SAndroid Build Coastguard Worker NullType,
12615*61046927SAndroid Build Coastguard Worker NullType,
12616*61046927SAndroid Build Coastguard Worker NullType,
12617*61046927SAndroid Build Coastguard Worker NullType,
12618*61046927SAndroid Build Coastguard Worker NullType,
12619*61046927SAndroid Build Coastguard Worker NullType,
12620*61046927SAndroid Build Coastguard Worker NullType,
12621*61046927SAndroid Build Coastguard Worker NullType,
12622*61046927SAndroid Build Coastguard Worker NullType,
12623*61046927SAndroid Build Coastguard Worker NullType,
12624*61046927SAndroid Build Coastguard Worker NullType,
12625*61046927SAndroid Build Coastguard Worker NullType,
12626*61046927SAndroid Build Coastguard Worker NullType,
12627*61046927SAndroid Build Coastguard Worker NullType,
12628*61046927SAndroid Build Coastguard Worker NullType,
12629*61046927SAndroid Build Coastguard Worker NullType,
12630*61046927SAndroid Build Coastguard Worker NullType,
12631*61046927SAndroid Build Coastguard Worker NullType,
12632*61046927SAndroid Build Coastguard Worker NullType,
12633*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
12634*61046927SAndroid Build Coastguard Worker
12635*61046927SAndroid Build Coastguard Worker FunctorType functor_;
12636*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_12637*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
12638*61046927SAndroid Build Coastguard Worker functor_(functor)
12639*61046927SAndroid Build Coastguard Worker {
12640*61046927SAndroid Build Coastguard Worker
12641*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 2))
12642*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
12643*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
12644*61046927SAndroid Build Coastguard Worker #endif
12645*61046927SAndroid Build Coastguard Worker
12646*61046927SAndroid Build Coastguard Worker }
12647*61046927SAndroid Build Coastguard Worker
12648*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
12649*61046927SAndroid Build Coastguard Worker typedef Event result_type;
12650*61046927SAndroid Build Coastguard Worker
12651*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
12652*61046927SAndroid Build Coastguard Worker typedef Event type_(
12653*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
12654*61046927SAndroid Build Coastguard Worker T0,
12655*61046927SAndroid Build Coastguard Worker T1);
12656*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_12657*61046927SAndroid Build Coastguard Worker Event operator()(
12658*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
12659*61046927SAndroid Build Coastguard Worker T0 arg0,
12660*61046927SAndroid Build Coastguard Worker T1 arg1)
12661*61046927SAndroid Build Coastguard Worker {
12662*61046927SAndroid Build Coastguard Worker return functor_(
12663*61046927SAndroid Build Coastguard Worker enqueueArgs,
12664*61046927SAndroid Build Coastguard Worker arg0,
12665*61046927SAndroid Build Coastguard Worker arg1);
12666*61046927SAndroid Build Coastguard Worker }
12667*61046927SAndroid Build Coastguard Worker
12668*61046927SAndroid Build Coastguard Worker
12669*61046927SAndroid Build Coastguard Worker };
12670*61046927SAndroid Build Coastguard Worker
12671*61046927SAndroid Build Coastguard Worker template<
12672*61046927SAndroid Build Coastguard Worker typename T0>
12673*61046927SAndroid Build Coastguard Worker struct functionImplementation_
12674*61046927SAndroid Build Coastguard Worker < T0,
12675*61046927SAndroid Build Coastguard Worker NullType,
12676*61046927SAndroid Build Coastguard Worker NullType,
12677*61046927SAndroid Build Coastguard Worker NullType,
12678*61046927SAndroid Build Coastguard Worker NullType,
12679*61046927SAndroid Build Coastguard Worker NullType,
12680*61046927SAndroid Build Coastguard Worker NullType,
12681*61046927SAndroid Build Coastguard Worker NullType,
12682*61046927SAndroid Build Coastguard Worker NullType,
12683*61046927SAndroid Build Coastguard Worker NullType,
12684*61046927SAndroid Build Coastguard Worker NullType,
12685*61046927SAndroid Build Coastguard Worker NullType,
12686*61046927SAndroid Build Coastguard Worker NullType,
12687*61046927SAndroid Build Coastguard Worker NullType,
12688*61046927SAndroid Build Coastguard Worker NullType,
12689*61046927SAndroid Build Coastguard Worker NullType,
12690*61046927SAndroid Build Coastguard Worker NullType,
12691*61046927SAndroid Build Coastguard Worker NullType,
12692*61046927SAndroid Build Coastguard Worker NullType,
12693*61046927SAndroid Build Coastguard Worker NullType,
12694*61046927SAndroid Build Coastguard Worker NullType,
12695*61046927SAndroid Build Coastguard Worker NullType,
12696*61046927SAndroid Build Coastguard Worker NullType,
12697*61046927SAndroid Build Coastguard Worker NullType,
12698*61046927SAndroid Build Coastguard Worker NullType,
12699*61046927SAndroid Build Coastguard Worker NullType,
12700*61046927SAndroid Build Coastguard Worker NullType,
12701*61046927SAndroid Build Coastguard Worker NullType,
12702*61046927SAndroid Build Coastguard Worker NullType,
12703*61046927SAndroid Build Coastguard Worker NullType,
12704*61046927SAndroid Build Coastguard Worker NullType,
12705*61046927SAndroid Build Coastguard Worker NullType>
12706*61046927SAndroid Build Coastguard Worker {
12707*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
12708*61046927SAndroid Build Coastguard Worker T0,
12709*61046927SAndroid Build Coastguard Worker NullType,
12710*61046927SAndroid Build Coastguard Worker NullType,
12711*61046927SAndroid Build Coastguard Worker NullType,
12712*61046927SAndroid Build Coastguard Worker NullType,
12713*61046927SAndroid Build Coastguard Worker NullType,
12714*61046927SAndroid Build Coastguard Worker NullType,
12715*61046927SAndroid Build Coastguard Worker NullType,
12716*61046927SAndroid Build Coastguard Worker NullType,
12717*61046927SAndroid Build Coastguard Worker NullType,
12718*61046927SAndroid Build Coastguard Worker NullType,
12719*61046927SAndroid Build Coastguard Worker NullType,
12720*61046927SAndroid Build Coastguard Worker NullType,
12721*61046927SAndroid Build Coastguard Worker NullType,
12722*61046927SAndroid Build Coastguard Worker NullType,
12723*61046927SAndroid Build Coastguard Worker NullType,
12724*61046927SAndroid Build Coastguard Worker NullType,
12725*61046927SAndroid Build Coastguard Worker NullType,
12726*61046927SAndroid Build Coastguard Worker NullType,
12727*61046927SAndroid Build Coastguard Worker NullType,
12728*61046927SAndroid Build Coastguard Worker NullType,
12729*61046927SAndroid Build Coastguard Worker NullType,
12730*61046927SAndroid Build Coastguard Worker NullType,
12731*61046927SAndroid Build Coastguard Worker NullType,
12732*61046927SAndroid Build Coastguard Worker NullType,
12733*61046927SAndroid Build Coastguard Worker NullType,
12734*61046927SAndroid Build Coastguard Worker NullType,
12735*61046927SAndroid Build Coastguard Worker NullType,
12736*61046927SAndroid Build Coastguard Worker NullType,
12737*61046927SAndroid Build Coastguard Worker NullType,
12738*61046927SAndroid Build Coastguard Worker NullType,
12739*61046927SAndroid Build Coastguard Worker NullType> FunctorType;
12740*61046927SAndroid Build Coastguard Worker
12741*61046927SAndroid Build Coastguard Worker FunctorType functor_;
12742*61046927SAndroid Build Coastguard Worker
functionImplementation_cl::detail::functionImplementation_12743*61046927SAndroid Build Coastguard Worker functionImplementation_(const FunctorType &functor) :
12744*61046927SAndroid Build Coastguard Worker functor_(functor)
12745*61046927SAndroid Build Coastguard Worker {
12746*61046927SAndroid Build Coastguard Worker
12747*61046927SAndroid Build Coastguard Worker #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 1))
12748*61046927SAndroid Build Coastguard Worker // Fail variadic expansion for dev11
12749*61046927SAndroid Build Coastguard Worker static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
12750*61046927SAndroid Build Coastguard Worker #endif
12751*61046927SAndroid Build Coastguard Worker
12752*61046927SAndroid Build Coastguard Worker }
12753*61046927SAndroid Build Coastguard Worker
12754*61046927SAndroid Build Coastguard Worker //! \brief Return type of the functor
12755*61046927SAndroid Build Coastguard Worker typedef Event result_type;
12756*61046927SAndroid Build Coastguard Worker
12757*61046927SAndroid Build Coastguard Worker //! \brief Function signature of kernel functor with no event dependency.
12758*61046927SAndroid Build Coastguard Worker typedef Event type_(
12759*61046927SAndroid Build Coastguard Worker const EnqueueArgs&,
12760*61046927SAndroid Build Coastguard Worker T0);
12761*61046927SAndroid Build Coastguard Worker
operator ()cl::detail::functionImplementation_12762*61046927SAndroid Build Coastguard Worker Event operator()(
12763*61046927SAndroid Build Coastguard Worker const EnqueueArgs& enqueueArgs,
12764*61046927SAndroid Build Coastguard Worker T0 arg0)
12765*61046927SAndroid Build Coastguard Worker {
12766*61046927SAndroid Build Coastguard Worker return functor_(
12767*61046927SAndroid Build Coastguard Worker enqueueArgs,
12768*61046927SAndroid Build Coastguard Worker arg0);
12769*61046927SAndroid Build Coastguard Worker }
12770*61046927SAndroid Build Coastguard Worker
12771*61046927SAndroid Build Coastguard Worker
12772*61046927SAndroid Build Coastguard Worker };
12773*61046927SAndroid Build Coastguard Worker
12774*61046927SAndroid Build Coastguard Worker
12775*61046927SAndroid Build Coastguard Worker
12776*61046927SAndroid Build Coastguard Worker
12777*61046927SAndroid Build Coastguard Worker
12778*61046927SAndroid Build Coastguard Worker } // namespace detail
12779*61046927SAndroid Build Coastguard Worker
12780*61046927SAndroid Build Coastguard Worker //----------------------------------------------------------------------------------------------
12781*61046927SAndroid Build Coastguard Worker
12782*61046927SAndroid Build Coastguard Worker template <
12783*61046927SAndroid Build Coastguard Worker typename T0, typename T1 = detail::NullType, typename T2 = detail::NullType,
12784*61046927SAndroid Build Coastguard Worker typename T3 = detail::NullType, typename T4 = detail::NullType,
12785*61046927SAndroid Build Coastguard Worker typename T5 = detail::NullType, typename T6 = detail::NullType,
12786*61046927SAndroid Build Coastguard Worker typename T7 = detail::NullType, typename T8 = detail::NullType,
12787*61046927SAndroid Build Coastguard Worker typename T9 = detail::NullType, typename T10 = detail::NullType,
12788*61046927SAndroid Build Coastguard Worker typename T11 = detail::NullType, typename T12 = detail::NullType,
12789*61046927SAndroid Build Coastguard Worker typename T13 = detail::NullType, typename T14 = detail::NullType,
12790*61046927SAndroid Build Coastguard Worker typename T15 = detail::NullType, typename T16 = detail::NullType,
12791*61046927SAndroid Build Coastguard Worker typename T17 = detail::NullType, typename T18 = detail::NullType,
12792*61046927SAndroid Build Coastguard Worker typename T19 = detail::NullType, typename T20 = detail::NullType,
12793*61046927SAndroid Build Coastguard Worker typename T21 = detail::NullType, typename T22 = detail::NullType,
12794*61046927SAndroid Build Coastguard Worker typename T23 = detail::NullType, typename T24 = detail::NullType,
12795*61046927SAndroid Build Coastguard Worker typename T25 = detail::NullType, typename T26 = detail::NullType,
12796*61046927SAndroid Build Coastguard Worker typename T27 = detail::NullType, typename T28 = detail::NullType,
12797*61046927SAndroid Build Coastguard Worker typename T29 = detail::NullType, typename T30 = detail::NullType,
12798*61046927SAndroid Build Coastguard Worker typename T31 = detail::NullType
12799*61046927SAndroid Build Coastguard Worker >
12800*61046927SAndroid Build Coastguard Worker struct make_kernel :
12801*61046927SAndroid Build Coastguard Worker public detail::functionImplementation_<
12802*61046927SAndroid Build Coastguard Worker T0, T1, T2, T3,
12803*61046927SAndroid Build Coastguard Worker T4, T5, T6, T7,
12804*61046927SAndroid Build Coastguard Worker T8, T9, T10, T11,
12805*61046927SAndroid Build Coastguard Worker T12, T13, T14, T15,
12806*61046927SAndroid Build Coastguard Worker T16, T17, T18, T19,
12807*61046927SAndroid Build Coastguard Worker T20, T21, T22, T23,
12808*61046927SAndroid Build Coastguard Worker T24, T25, T26, T27,
12809*61046927SAndroid Build Coastguard Worker T28, T29, T30, T31
12810*61046927SAndroid Build Coastguard Worker >
12811*61046927SAndroid Build Coastguard Worker {
12812*61046927SAndroid Build Coastguard Worker public:
12813*61046927SAndroid Build Coastguard Worker typedef detail::KernelFunctorGlobal<
12814*61046927SAndroid Build Coastguard Worker T0, T1, T2, T3,
12815*61046927SAndroid Build Coastguard Worker T4, T5, T6, T7,
12816*61046927SAndroid Build Coastguard Worker T8, T9, T10, T11,
12817*61046927SAndroid Build Coastguard Worker T12, T13, T14, T15,
12818*61046927SAndroid Build Coastguard Worker T16, T17, T18, T19,
12819*61046927SAndroid Build Coastguard Worker T20, T21, T22, T23,
12820*61046927SAndroid Build Coastguard Worker T24, T25, T26, T27,
12821*61046927SAndroid Build Coastguard Worker T28, T29, T30, T31
12822*61046927SAndroid Build Coastguard Worker > FunctorType;
12823*61046927SAndroid Build Coastguard Worker
make_kernelcl::make_kernel12824*61046927SAndroid Build Coastguard Worker make_kernel(
12825*61046927SAndroid Build Coastguard Worker const Program& program,
12826*61046927SAndroid Build Coastguard Worker const STRING_CLASS name,
12827*61046927SAndroid Build Coastguard Worker cl_int * err = NULL) :
12828*61046927SAndroid Build Coastguard Worker detail::functionImplementation_<
12829*61046927SAndroid Build Coastguard Worker T0, T1, T2, T3,
12830*61046927SAndroid Build Coastguard Worker T4, T5, T6, T7,
12831*61046927SAndroid Build Coastguard Worker T8, T9, T10, T11,
12832*61046927SAndroid Build Coastguard Worker T12, T13, T14, T15,
12833*61046927SAndroid Build Coastguard Worker T16, T17, T18, T19,
12834*61046927SAndroid Build Coastguard Worker T20, T21, T22, T23,
12835*61046927SAndroid Build Coastguard Worker T24, T25, T26, T27,
12836*61046927SAndroid Build Coastguard Worker T28, T29, T30, T31
12837*61046927SAndroid Build Coastguard Worker >(
12838*61046927SAndroid Build Coastguard Worker FunctorType(program, name, err))
12839*61046927SAndroid Build Coastguard Worker {}
12840*61046927SAndroid Build Coastguard Worker
make_kernelcl::make_kernel12841*61046927SAndroid Build Coastguard Worker make_kernel(
12842*61046927SAndroid Build Coastguard Worker const Kernel kernel) :
12843*61046927SAndroid Build Coastguard Worker detail::functionImplementation_<
12844*61046927SAndroid Build Coastguard Worker T0, T1, T2, T3,
12845*61046927SAndroid Build Coastguard Worker T4, T5, T6, T7,
12846*61046927SAndroid Build Coastguard Worker T8, T9, T10, T11,
12847*61046927SAndroid Build Coastguard Worker T12, T13, T14, T15,
12848*61046927SAndroid Build Coastguard Worker T16, T17, T18, T19,
12849*61046927SAndroid Build Coastguard Worker T20, T21, T22, T23,
12850*61046927SAndroid Build Coastguard Worker T24, T25, T26, T27,
12851*61046927SAndroid Build Coastguard Worker T28, T29, T30, T31
12852*61046927SAndroid Build Coastguard Worker >(
12853*61046927SAndroid Build Coastguard Worker FunctorType(kernel))
12854*61046927SAndroid Build Coastguard Worker {}
12855*61046927SAndroid Build Coastguard Worker };
12856*61046927SAndroid Build Coastguard Worker
12857*61046927SAndroid Build Coastguard Worker
12858*61046927SAndroid Build Coastguard Worker //----------------------------------------------------------------------------------------------------------------------
12859*61046927SAndroid Build Coastguard Worker
12860*61046927SAndroid Build Coastguard Worker #undef __ERR_STR
12861*61046927SAndroid Build Coastguard Worker #if !defined(__CL_USER_OVERRIDE_ERROR_STRINGS)
12862*61046927SAndroid Build Coastguard Worker #undef __GET_DEVICE_INFO_ERR
12863*61046927SAndroid Build Coastguard Worker #undef __GET_PLATFORM_INFO_ERR
12864*61046927SAndroid Build Coastguard Worker #undef __GET_DEVICE_IDS_ERR
12865*61046927SAndroid Build Coastguard Worker #undef __GET_CONTEXT_INFO_ERR
12866*61046927SAndroid Build Coastguard Worker #undef __GET_EVENT_INFO_ERR
12867*61046927SAndroid Build Coastguard Worker #undef __GET_EVENT_PROFILE_INFO_ERR
12868*61046927SAndroid Build Coastguard Worker #undef __GET_MEM_OBJECT_INFO_ERR
12869*61046927SAndroid Build Coastguard Worker #undef __GET_IMAGE_INFO_ERR
12870*61046927SAndroid Build Coastguard Worker #undef __GET_SAMPLER_INFO_ERR
12871*61046927SAndroid Build Coastguard Worker #undef __GET_KERNEL_INFO_ERR
12872*61046927SAndroid Build Coastguard Worker #undef __GET_KERNEL_ARG_INFO_ERR
12873*61046927SAndroid Build Coastguard Worker #undef __GET_KERNEL_WORK_GROUP_INFO_ERR
12874*61046927SAndroid Build Coastguard Worker #undef __GET_PROGRAM_INFO_ERR
12875*61046927SAndroid Build Coastguard Worker #undef __GET_PROGRAM_BUILD_INFO_ERR
12876*61046927SAndroid Build Coastguard Worker #undef __GET_COMMAND_QUEUE_INFO_ERR
12877*61046927SAndroid Build Coastguard Worker
12878*61046927SAndroid Build Coastguard Worker #undef __CREATE_CONTEXT_ERR
12879*61046927SAndroid Build Coastguard Worker #undef __CREATE_CONTEXT_FROM_TYPE_ERR
12880*61046927SAndroid Build Coastguard Worker #undef __GET_SUPPORTED_IMAGE_FORMATS_ERR
12881*61046927SAndroid Build Coastguard Worker
12882*61046927SAndroid Build Coastguard Worker #undef __CREATE_BUFFER_ERR
12883*61046927SAndroid Build Coastguard Worker #undef __CREATE_SUBBUFFER_ERR
12884*61046927SAndroid Build Coastguard Worker #undef __CREATE_IMAGE2D_ERR
12885*61046927SAndroid Build Coastguard Worker #undef __CREATE_IMAGE3D_ERR
12886*61046927SAndroid Build Coastguard Worker #undef __CREATE_SAMPLER_ERR
12887*61046927SAndroid Build Coastguard Worker #undef __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR
12888*61046927SAndroid Build Coastguard Worker
12889*61046927SAndroid Build Coastguard Worker #undef __CREATE_USER_EVENT_ERR
12890*61046927SAndroid Build Coastguard Worker #undef __SET_USER_EVENT_STATUS_ERR
12891*61046927SAndroid Build Coastguard Worker #undef __SET_EVENT_CALLBACK_ERR
12892*61046927SAndroid Build Coastguard Worker #undef __SET_PRINTF_CALLBACK_ERR
12893*61046927SAndroid Build Coastguard Worker
12894*61046927SAndroid Build Coastguard Worker #undef __WAIT_FOR_EVENTS_ERR
12895*61046927SAndroid Build Coastguard Worker
12896*61046927SAndroid Build Coastguard Worker #undef __CREATE_KERNEL_ERR
12897*61046927SAndroid Build Coastguard Worker #undef __SET_KERNEL_ARGS_ERR
12898*61046927SAndroid Build Coastguard Worker #undef __CREATE_PROGRAM_WITH_SOURCE_ERR
12899*61046927SAndroid Build Coastguard Worker #undef __CREATE_PROGRAM_WITH_BINARY_ERR
12900*61046927SAndroid Build Coastguard Worker #undef __CREATE_PROGRAM_WITH_BUILT_IN_KERNELS_ERR
12901*61046927SAndroid Build Coastguard Worker #undef __BUILD_PROGRAM_ERR
12902*61046927SAndroid Build Coastguard Worker #undef __CREATE_KERNELS_IN_PROGRAM_ERR
12903*61046927SAndroid Build Coastguard Worker
12904*61046927SAndroid Build Coastguard Worker #undef __CREATE_COMMAND_QUEUE_ERR
12905*61046927SAndroid Build Coastguard Worker #undef __SET_COMMAND_QUEUE_PROPERTY_ERR
12906*61046927SAndroid Build Coastguard Worker #undef __ENQUEUE_READ_BUFFER_ERR
12907*61046927SAndroid Build Coastguard Worker #undef __ENQUEUE_WRITE_BUFFER_ERR
12908*61046927SAndroid Build Coastguard Worker #undef __ENQUEUE_READ_BUFFER_RECT_ERR
12909*61046927SAndroid Build Coastguard Worker #undef __ENQUEUE_WRITE_BUFFER_RECT_ERR
12910*61046927SAndroid Build Coastguard Worker #undef __ENQEUE_COPY_BUFFER_ERR
12911*61046927SAndroid Build Coastguard Worker #undef __ENQEUE_COPY_BUFFER_RECT_ERR
12912*61046927SAndroid Build Coastguard Worker #undef __ENQUEUE_READ_IMAGE_ERR
12913*61046927SAndroid Build Coastguard Worker #undef __ENQUEUE_WRITE_IMAGE_ERR
12914*61046927SAndroid Build Coastguard Worker #undef __ENQUEUE_COPY_IMAGE_ERR
12915*61046927SAndroid Build Coastguard Worker #undef __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR
12916*61046927SAndroid Build Coastguard Worker #undef __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR
12917*61046927SAndroid Build Coastguard Worker #undef __ENQUEUE_MAP_BUFFER_ERR
12918*61046927SAndroid Build Coastguard Worker #undef __ENQUEUE_MAP_IMAGE_ERR
12919*61046927SAndroid Build Coastguard Worker #undef __ENQUEUE_UNMAP_MEM_OBJECT_ERR
12920*61046927SAndroid Build Coastguard Worker #undef __ENQUEUE_NDRANGE_KERNEL_ERR
12921*61046927SAndroid Build Coastguard Worker #undef __ENQUEUE_TASK_ERR
12922*61046927SAndroid Build Coastguard Worker #undef __ENQUEUE_NATIVE_KERNEL
12923*61046927SAndroid Build Coastguard Worker
12924*61046927SAndroid Build Coastguard Worker #undef __CL_EXPLICIT_CONSTRUCTORS
12925*61046927SAndroid Build Coastguard Worker
12926*61046927SAndroid Build Coastguard Worker #undef __UNLOAD_COMPILER_ERR
12927*61046927SAndroid Build Coastguard Worker #endif //__CL_USER_OVERRIDE_ERROR_STRINGS
12928*61046927SAndroid Build Coastguard Worker
12929*61046927SAndroid Build Coastguard Worker #undef __CL_FUNCTION_TYPE
12930*61046927SAndroid Build Coastguard Worker
12931*61046927SAndroid Build Coastguard Worker // Extensions
12932*61046927SAndroid Build Coastguard Worker /**
12933*61046927SAndroid Build Coastguard Worker * Deprecated APIs for 1.2
12934*61046927SAndroid Build Coastguard Worker */
12935*61046927SAndroid Build Coastguard Worker #if defined(CL_VERSION_1_1)
12936*61046927SAndroid Build Coastguard Worker #undef __INIT_CL_EXT_FCN_PTR
12937*61046927SAndroid Build Coastguard Worker #endif // #if defined(CL_VERSION_1_1)
12938*61046927SAndroid Build Coastguard Worker #undef __CREATE_SUB_DEVICES
12939*61046927SAndroid Build Coastguard Worker
12940*61046927SAndroid Build Coastguard Worker #if defined(USE_CL_DEVICE_FISSION)
12941*61046927SAndroid Build Coastguard Worker #undef __PARAM_NAME_DEVICE_FISSION
12942*61046927SAndroid Build Coastguard Worker #endif // USE_CL_DEVICE_FISSION
12943*61046927SAndroid Build Coastguard Worker
12944*61046927SAndroid Build Coastguard Worker #undef __DEFAULT_NOT_INITIALIZED
12945*61046927SAndroid Build Coastguard Worker #undef __DEFAULT_BEING_INITIALIZED
12946*61046927SAndroid Build Coastguard Worker #undef __DEFAULT_INITIALIZED
12947*61046927SAndroid Build Coastguard Worker
12948*61046927SAndroid Build Coastguard Worker #undef CL_HPP_RVALUE_REFERENCES_SUPPORTED
12949*61046927SAndroid Build Coastguard Worker #undef CL_HPP_NOEXCEPT
12950*61046927SAndroid Build Coastguard Worker
12951*61046927SAndroid Build Coastguard Worker } // namespace cl
12952*61046927SAndroid Build Coastguard Worker
12953*61046927SAndroid Build Coastguard Worker #endif // CL_HPP_
12954