@@ -21,6 +21,27 @@ constexpr auto sycl_read_write = cl::sycl::access::mode::read_write;
21
21
constexpr auto sycl_global_buffer = cl::sycl::access::target::global_buffer;
22
22
23
23
// Case 1:
24
+ // - functor class is defined in an anonymous namespace
25
+ // - the '()' operator:
26
+ // * does not have parameters (to be used in 'single_task').
27
+ // * has the 'const' qualifier
28
+ namespace {
29
+ class Functor1 {
30
+ public:
31
+ Functor1 (
32
+ int X_,
33
+ cl::sycl::accessor<int , 1 , sycl_read_write, sycl_global_buffer> &Acc_)
34
+ : X(X_), Acc(Acc_) {}
35
+
36
+ void operator ()() const { Acc[0 ] += X; }
37
+
38
+ private:
39
+ int X;
40
+ cl::sycl::accessor<int , 1 , sycl_read_write, sycl_global_buffer> Acc;
41
+ };
42
+ } // namespace
43
+
44
+ // Case 2:
24
45
// - functor class is defined in a namespace
25
46
// - the '()' operator:
26
47
// * does not have parameters (to be used in 'single_task').
@@ -85,6 +106,13 @@ int foo(int X) {
85
106
cl::sycl::queue Q;
86
107
cl::sycl::buffer<int , 1 > Buf (A, 1 );
87
108
109
+ Q.submit ([&](cl::sycl::handler &cgh) {
110
+ auto Acc = Buf.get_access <sycl_read_write, sycl_global_buffer>(cgh);
111
+ Functor1 F (X, Acc);
112
+
113
+ cgh.single_task (F);
114
+ });
115
+
88
116
Q.submit ([&](cl::sycl::handler &cgh) {
89
117
auto Acc = Buf.get_access <sycl_read_write, sycl_global_buffer>(cgh);
90
118
ns::Functor2 F (X, Acc);
@@ -143,7 +171,7 @@ template <typename T> T bar(T X) {
143
171
int main () {
144
172
const int Res1 = foo (10 );
145
173
const int Res2 = bar (10 );
146
- const int Gold1 = 30 ;
174
+ const int Gold1 = 40 ;
147
175
const int Gold2 = 80 ;
148
176
149
177
assert (Res1 == Gold1);
0 commit comments