@@ -215,7 +215,7 @@ struct BarrierWithWaitList : Command
215
215
return g_pNextDispatch->clEnqueueBarrierWithWaitList (
216
216
queue,
217
217
static_cast <cl_uint>(wait_list.size ()),
218
- wait_list.data (),
218
+ wait_list.size () ? wait_list. data () : nullptr ,
219
219
signal);
220
220
}
221
221
@@ -271,7 +271,7 @@ struct CopyBuffer : Command
271
271
dst_offset,
272
272
size,
273
273
static_cast <cl_uint>(wait_list.size ()),
274
- wait_list.data (),
274
+ wait_list.size () ? wait_list. data () : nullptr ,
275
275
signal);
276
276
}
277
277
@@ -345,7 +345,7 @@ struct CopyBufferRect : Command
345
345
dst_row_pitch,
346
346
dst_slice_pitch,
347
347
static_cast <cl_uint>(wait_list.size ()),
348
- wait_list.data (),
348
+ wait_list.size () ? wait_list. data () : nullptr ,
349
349
signal);
350
350
}
351
351
@@ -411,7 +411,7 @@ struct CopyBufferToImage : Command
411
411
dst_origin.data (),
412
412
region.data (),
413
413
static_cast <cl_uint>(wait_list.size ()),
414
- wait_list.data (),
414
+ wait_list.size () ? wait_list. data () : nullptr ,
415
415
signal);
416
416
}
417
417
@@ -473,7 +473,7 @@ struct CopyImage : Command
473
473
dst_origin.data (),
474
474
region.data (),
475
475
static_cast <cl_uint>(wait_list.size ()),
476
- wait_list.data (),
476
+ wait_list.size () ? wait_list. data () : nullptr ,
477
477
signal);
478
478
}
479
479
@@ -535,7 +535,7 @@ struct CopyImageToBuffer : Command
535
535
region.data (),
536
536
dst_offset,
537
537
static_cast <cl_uint>(wait_list.size ()),
538
- wait_list.data (),
538
+ wait_list.size () ? wait_list. data () : nullptr ,
539
539
signal);
540
540
}
541
541
@@ -601,7 +601,7 @@ struct FillBuffer : Command
601
601
offset,
602
602
size,
603
603
static_cast <cl_uint>(wait_list.size ()),
604
- wait_list.data (),
604
+ wait_list.size () ? wait_list. data () : nullptr ,
605
605
signal);
606
606
}
607
607
@@ -678,7 +678,7 @@ struct FillImage : Command
678
678
origin.data (),
679
679
region.data (),
680
680
static_cast <cl_uint>(wait_list.size ()),
681
- wait_list.data (),
681
+ wait_list.size () ? wait_list. data () : nullptr ,
682
682
signal);
683
683
}
684
684
@@ -725,7 +725,7 @@ struct SVMMemcpy : Command
725
725
src_ptr,
726
726
size,
727
727
static_cast <cl_uint>(wait_list.size ()),
728
- wait_list.data (),
728
+ wait_list.size () ? wait_list. data () : nullptr ,
729
729
signal);
730
730
}
731
731
@@ -779,7 +779,7 @@ struct SVMMemFill : Command
779
779
pattern.size (),
780
780
size,
781
781
static_cast <cl_uint>(wait_list.size ()),
782
- wait_list.data (),
782
+ wait_list.size () ? wait_list. data () : nullptr ,
783
783
signal);
784
784
}
785
785
@@ -1073,7 +1073,7 @@ struct NDRangeKernel : Command
1073
1073
global_work_size.data (),
1074
1074
local_work_size.size () ? local_work_size.data () : nullptr ,
1075
1075
static_cast <cl_uint>(wait_list.size ()),
1076
- wait_list.data (),
1076
+ wait_list.size () ? wait_list. data () : nullptr ,
1077
1077
signal);
1078
1078
}
1079
1079
@@ -1510,10 +1510,13 @@ typedef struct _cl_command_buffer_khr
1510
1510
NextSyncPoint.fetch_add (1 , std::memory_order_relaxed) :
1511
1511
0 ;
1512
1512
1513
- command->addDependencies (
1514
- num_sync_points,
1515
- wait_list,
1516
- syncPoint);
1513
+ // We only need to add dependencies if there is more than one queue (so
1514
+ // we have possible cross-queue dependencies) or the queue is an
1515
+ // out-of-order queue (so we have possible intra-queue dependencies).
1516
+ if ( Queues.size () > 1 || !IsInOrder[0 ] )
1517
+ {
1518
+ command->addDependencies (num_sync_points, wait_list, syncPoint);
1519
+ }
1517
1520
1518
1521
if ( sync_point != nullptr )
1519
1522
{
0 commit comments