@@ -62,9 +62,16 @@ template <typename Acc> struct Wrapper3 {
62
62
Wrapper2<Acc> w2;
63
63
};
64
64
65
- void implicit_conversion (
66
- const sycl::accessor<const int , 1 , sycl::access::mode::read> &acc,
67
- const sycl::accessor<int , 1 , sycl::access::mode::read_write> &res_acc) {
65
+ using ResAccT = sycl::accessor<int , 1 , sycl::access::mode::read_write>;
66
+ using AccT = sycl::accessor<int , 1 , sycl::access::mode::read>;
67
+ using AccCT = sycl::accessor<const int , 1 , sycl::access::mode::read>;
68
+
69
+ void implicit_conversion (const AccCT &acc, const ResAccT &res_acc) {
70
+ auto v = acc[0 ];
71
+ res_acc[0 ] = v;
72
+ }
73
+
74
+ void implicit_conversion (const AccT &acc, const ResAccT &res_acc) {
68
75
auto v = acc[0 ];
69
76
res_acc[0 ] = v;
70
77
}
@@ -769,7 +776,6 @@ int main() {
769
776
{
770
777
sycl::queue q;
771
778
try {
772
- using AccT = sycl::accessor<int , 1 , sycl::access::mode::read_write>;
773
779
AccT acc;
774
780
775
781
q.submit ([&](sycl::handler &cgh) { cgh.require (acc); });
@@ -1313,9 +1319,6 @@ int main() {
1313
1319
1314
1320
// accessor<T> to accessor<const T> implicit conversion.
1315
1321
{
1316
- using ResAccT = sycl::accessor<int , 1 , sycl::access::mode::read_write>;
1317
- using AccT = sycl::accessor<int , 1 , sycl::access::mode::read>;
1318
-
1319
1322
int data = 123 ;
1320
1323
int result = 0 ;
1321
1324
{
@@ -1333,11 +1336,31 @@ int main() {
1333
1336
assert (result == 123 && " Expected value not seen." );
1334
1337
}
1335
1338
1336
- // accessor swap
1337
1339
{
1338
- using ResAccT = sycl::accessor<int , 1 , sycl::access::mode::read_write>;
1339
- using AccT = sycl::accessor<int , 1 , sycl::access::mode::read>;
1340
+ const int data = 123 ;
1341
+ int result = 0 ;
1342
+
1343
+ // accessor<const T, read_only> to accessor<T, read_only> implicit conversion.
1344
+ {
1345
+ sycl::buffer<const int , 1 > data_buf (&data, 1 );
1346
+ sycl::buffer<int , 1 > res_buf (&result, 1 );
1347
+
1348
+ sycl::queue queue;
1349
+ queue
1350
+ .submit ([&](sycl::handler &cgh) {
1351
+ ResAccT res_acc = res_buf.get_access (cgh);
1352
+ AccCT acc (data_buf, cgh);
1353
+ cgh.parallel_for_work_group (sycl::range (1 ), [=](sycl::group<1 >) {
1354
+ implicit_conversion (acc, res_acc);
1355
+ });
1356
+ })
1357
+ .wait_and_throw ();
1358
+ }
1359
+ assert (result == 123 && " Expected value not seen." );
1360
+ }
1340
1361
1362
+ // accessor swap
1363
+ {
1341
1364
int data[2 ] = {2 , 100 };
1342
1365
int data2[2 ] = {23 , 4 };
1343
1366
int results[2 ] = {0 , 0 };
0 commit comments