@@ -14193,16 +14193,34 @@ of 0 or 1.
1419314193The simultaneous use capability removes this restriction and allows
1419414194command-buffers to have a <<pending_count, Pending Count>> greater than 1.
1419514195
14196- [[compatible]]
1419714196Command-buffers are created using an ordered list of command-queues that
14198- commands are recorded to and execute on by default.
14199- These command-queues can be replaced on command-buffer enqueue with
14200- different command-queues, provided for each element in the replacement list
14201- the substitute command-queue is compatible with the command-queue used on
14202- command-buffer creation.
14203- A _compatible_ command-queue is defined as a command-queue with
14204- identical properties targeting the same device and in the same OpenCL
14205- context.
14197+ commands are recorded to and execute on by default. All these queue objects
14198+ must share the same context, but may be associated with different devices when
14199+ the {cl_khr_command_buffer_multi_device_EXT} extension is supported.
14200+
14201+ When constructing a command-buffer by appending commands, the queue parameter
14202+ passed for the command being created is used to set the device with which the
14203+ command will be associated with, and also inform the scheduling of the command.
14204+ If the queue is an in-order queue, then an additional dependency is created on the
14205+ last command appended to the command-buffer using the same queue parameter. If
14206+ the queue is an out-of-order queue, then no extra dependencies on previous
14207+ commands using the same queue are created. All queue properties other than
14208+ {CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE} are ignored for the purposes of command
14209+ creation, with the exception of any vendor extension defined queue properties
14210+ that explicitly define semantics for this purpose.
14211+
14212+ When enqueuing a command-buffer, a list of command-queues to execute the
14213+ command-buffer on can be passed by the user, otherwise the command-queues set
14214+ on command-buffer creation are used by default for execution. A user passed
14215+ list may contain different command-queues, provided for each element the
14216+ substitute command-queue matches the device and context of the command-queue
14217+ used on command-buffer creation. Each command-queue in the enqueue list must
14218+ also have the minimum properties defined by
14219+ {CL_DEVICE_COMMAND_BUFFER_REQUIRED_QUEUE_PROPERTIES_KHR} and no properties
14220+ which are not reported by
14221+ {CL_DEVICE_COMMAND_BUFFER_SUPPORTED_QUEUE_PROPERTIES_KHR}. These queue
14222+ properties have the same execution semantics for {clEnqueueCommandBufferKHR}
14223+ as other operations enqueued to the queue.
1420614224
1420714225While constructing a command-buffer it is valid for the user to interleave
1420814226calls to the same queue which create commands, such as
@@ -14266,7 +14284,7 @@ target the same device.
1426614284
1426714285Commands recorded to different command-queues in the same command-buffer may
1426814286be executed concurrently to each other unless synchronized explicitly with
14269- sync-points.
14287+ sync-points, barrier commands, or in-order queue implicit dependencies .
1427014288Ordering of other commands submitted to the same command-queues as used to
1427114289enqueue a command-buffer is the responsibility of the programmer.
1427214290A command-buffer enqueue spanning multiple queues can return an event to use
@@ -14467,12 +14485,6 @@ returned in _errcode_ret_:
1446714485
1446814486 * {CL_INVALID_COMMAND_QUEUE} if any command-queue in _queues_ is not a
1446914487 valid command-queue.
14470- * {CL_INCOMPATIBLE_COMMAND_QUEUE_KHR} if the properties of any command-queue
14471- in _queues_ contains a property not specified by
14472- {CL_DEVICE_COMMAND_BUFFER_SUPPORTED_QUEUE_PROPERTIES_KHR}.
14473- * {CL_INCOMPATIBLE_COMMAND_QUEUE_KHR} if the properties of any
14474- command-queue in _queues_ does not contain the minimum properties
14475- specified by {CL_DEVICE_COMMAND_BUFFER_REQUIRED_QUEUE_PROPERTIES_KHR}.
1447614488 * {CL_INVALID_CONTEXT} if all the command-queues in _queues_ do not have
1447714489 the same OpenCL context.
1447814490 * {CL_INVALID_VALUE} if the {cl_khr_command_buffer_multi_device_EXT}
@@ -14605,10 +14617,10 @@ include::{generated}/api/protos/clEnqueueCommandBufferKHR.txt[]
1460514617include::{generated}/api/version-notes/clEnqueueCommandBufferKHR.asciidoc[]
1460614618
1460714619 * _num_queues_ is the number of command-queues listed in _queues_.
14608- * _queues_ is a pointer to an ordered list of command-queues <<compatible,
14609- compatible>> with the command-queues used on recording.
14610- _queues_ can be `NULL`, in which case the default command-queues used on
14611- command-buffer creation are used and _num_queues_ must be 0.
14620+ * _queues_ is a pointer to an ordered list of command-queues to execute the
14621+ command-buffer on. _queues_ can be `NULL`, in which case the default
14622+ command-queues used on command-buffer creation are used and _num_queues_
14623+ must be 0.
1461214624 * _command_buffer_ refers to a valid command-buffer object.
1461314625 * _event_wait_list_, _num_events_in_wait_list_ specify events that need to
1461414626 complete before this particular command can be executed.
@@ -14653,9 +14665,15 @@ execution was successfully queued, or one of the errors below:
1465314665 _num_queues_ set on _command_buffer_ creation.
1465414666 * {CL_INVALID_COMMAND_QUEUE} if any element of _queues_ is not a valid
1465514667 command-queue.
14656- * {CL_INCOMPATIBLE_COMMAND_QUEUE_KHR} if any element of _queues_ is not
14657- <<compatible, compatible>> with the command-queue set on
14658- _command_buffer_ creation at the same list index.
14668+ * {CL_INCOMPATIBLE_COMMAND_QUEUE_KHR} if the properties of any command-queue
14669+ in _queues_ contains a property not specified by
14670+ {CL_DEVICE_COMMAND_BUFFER_SUPPORTED_QUEUE_PROPERTIES_KHR}.
14671+ * {CL_INCOMPATIBLE_COMMAND_QUEUE_KHR} if the properties of any
14672+ command-queue in _queues_ does not contain the minimum properties
14673+ specified by {CL_DEVICE_COMMAND_BUFFER_REQUIRED_QUEUE_PROPERTIES_KHR}.
14674+ * {CL_INVALID_DEVICE} if any element of _queues_ does not have the same
14675+ device as the command-queue set on _command_buffer_ creation at the
14676+ same list index.
1465914677 * {CL_INVALID_CONTEXT} if any element of _queues_ does not have the same
1466014678 context as the command-queue set on _command_buffer_ creation at the
1466114679 same list index.
@@ -16039,22 +16057,18 @@ ifdef::cl_khr_command_buffer_multi_device[]
1603916057If the {cl_khr_command_buffer_multi_device_EXT} extension is supported,
1604016058platforms reporting the {CL_COMMAND_BUFFER_PLATFORM_REMAP_QUEUES_KHR}
1604116059capability support generating a deep copy of a command-buffer with its
16042- commands remapped to a list of command-queues that are potentially
16043- <<compatible, incompatible>> with the queues used to create the
16044- command-buffer.
16045- That is, the remapped command-buffer can execute on queues that differ in
16046- terms of properties and/or associated device from the original
16060+ commands remapped to different devices than the devices used to create the
16061+ commands. That is, the remapped command-buffer can execute on queues that
16062+ differ in terms of properties and/or associated device from the original
1604716063command-buffer queues.
1604816064
1604916065This functionality is invoked through a new synchronous entry-point
1605016066{clRemapCommandBufferKHR} which takes a list of queues to which the commands
16051- should now target.
16052- It then returns a command-buffer containing the same commands as the
16053- original, with the same command dependencies, but targeting different
16054- queues.
16055- A list of command handles may also be passed to the entry-point, which
16056- allows handles to the equivalent commands in the remapped command-buffer to
16057- be returned by an output parameter.
16067+ should now target the associated devices of. It then returns a command-buffer
16068+ containing the same commands as the original, with the same command
16069+ dependencies, but targeting different devices. A list of command handles may
16070+ also be passed to the entry-point, which allows handles to the equivalent
16071+ commands in the remapped command-buffer to be returned by an output parameter.
1605816072
1605916073Device properties restrict remapping possibilities, as existing commands can
1606016074have a configuration which is not supported by another device, and so
@@ -16077,7 +16091,7 @@ appear and disappear during runtime.
1607716091[open,refpage='clRemapCommandBufferKHR',desc='Create copy of a command-buffer remapped to specified command-queues',type='protos']
1607816092--
1607916093To create a deep copy of the input command-buffer with the copied commands
16080- remapped to target the passed command-queues, call the function
16094+ remapped to target devices of the passed command-queues, call the function
1608116095
1608216096include::{generated}/api/protos/clRemapCommandBufferKHR.txt[]
1608316097include::{generated}/api/version-notes/clRemapCommandBufferKHR.asciidoc[]
@@ -16136,8 +16150,6 @@ one of the following error values returned in _errcode_ret_:
1613616150 * {CL_INVALID_OPERATION} if the platform does not support the
1613716151 {CL_COMMAND_BUFFER_PLATFORM_AUTOMATIC_REMAP_KHR} flag and _automatic_ is
1613816152 {CL_TRUE}.
16139- * {CL_INCOMPATIBLE_COMMAND_QUEUE_KHR} if such an error would be returned
16140- by passing _queues_ to {clCreateCommandBufferKHR}.
1614116153 * Any error relating to device support that can be returned by a command
1614216154 recording entry-point may also be returned.
1614316155 As a command in _command_buffer_ can have a configuration that is not
0 commit comments