Skip to content

Commit 2e33e33

Browse files
author
Ewan Crawford
authored
Redefine command-buffer simultaneous-use (KhronosGroup#1411)
* Redefine command-buffer simultaneous-use As discussed in KhronosGroup#891 the current definition of [simultaneous use](https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#_command_buffers) is hard for users to reason about. Instead a better model is one simultaneous-use isn't a contraint of the command-buffer submission, but it's execution. That is simultaneous-use occurs when a command-buffer is enqueued for execution while any previous submission of the command-buffer is still in-flight, and there any no scheduling dependencies expressed to serialize execution. This means that pipelined submissions of a command-buffer, where there is an in-order queue, barrier, or cl_events to serialize execution, is always valid usage without this optional simultaneous-use device feature. To avoid the runtime having to incur overheads from monitoring when simultaneous-use occurs so it can throw an error, violating this valid usage for non simultaneous-use command-buffers is UB. Following from this related to KhronosGroup#1311 the pending state has also been removed from the command-buffer lifecycle, and there is only the binary states of recording and executable. This is because a user can use the existing OpenCL mechanisms of host waits and event queries to inspect the state of individual command-buffer enqueues to avoid simultaneous-use, and having this stored as a command-buffer state incurs the runtime overhead of tracking a previous submissions. The pending count concept also now makes less sense. The implications for updating a command-buffer is that the error behavior is removed from update, so simultaneous-use is a property of execution rather than enqueue. See CTS test ideas for how this could work. I think the CTS changes that are required for this as follows, but I could create a separate CTS issue to track work once/if this PR merge. Or we could try prototype the CTS changes to give confidence in the spec change. * Remove test for pending state query * Either rework existing simulataneous use tests so that it tests the new definition, or delete them and create new more suitable tests without tech-debt from old definition. * Add tests for pipelined submission of a command-buffer not created with simultaneous-use. Ideally stressing indriect dependencies as well as direct ones: ** in-order queue to express depdencies ** out-of-order queue with event dependencies to express depenencies ** barrier to express for dependencies * Add cl_khr_command_buffer_mutable_dispatch tests for updating and enqueueing pipelined submissions of a non-simultaneous use command-buffer with depdencies between each enqueue, and only do a blocking wait at the end. * Add cl_khr_command_buffer_mutable_dispatch tests for a simultaneous-use command-buffer, where two invocations are scheduled such that they can run concurrently, but the second invocation is updated such that it uses different inputs/outputs to avoid race conditions in the kernel. * Address editorial PR feedback * Address QC editoral feedback * Move simultaneous-use optional feature to mutable-dispatch * Don't use phrase "simultaneous use usage"
1 parent be29384 commit 2e33e33

6 files changed

Lines changed: 88 additions & 82 deletions

api/cl_khr_command_buffer.asciidoc

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,14 @@
33

44
include::{generated}/meta/{refprefix}cl_khr_command_buffer.txt[]
55

6-
// *Revision*::
7-
// 0.9.6
86
// *Extension and Version Dependencies*::
97
// This extension requires OpenCL 1.2 or later.
108
// Buffering of SVM commands requires OpenCL 2.0 or later.
119

1210
=== Other Extension Metadata
1311

1412
*Last Modified Date*::
15-
2024-12-13
13+
2025-07-10
1614
*IP Status*::
1715
No known IP claims.
1816
*Contributors*::
@@ -124,14 +122,6 @@ There are no gurantees made around the values of sync-points returned from
124122
adding commands to a command-buffer. Any semantics that a could be inferred
125123
from the sync-point values returned is implementation defined.
126124

127-
==== Simultaneous Use
128-
129-
The optional simultaneous use capability was added to the extension so that
130-
vendors can support pipelined workflows, where command-buffers are repeatedly
131-
enqueued without blocking in user code. However, simultaneous use may result in
132-
command-buffers being more expensive to enqueue than in a sequential model, so
133-
the capability is optional to enable optimizations on command-buffer recording.
134-
135125
=== Interactions With Other Extensions
136126

137127
The introduction of the command-buffer abstraction enables functionality
@@ -242,11 +232,8 @@ features:
242232
* {cl_device_command_buffer_capabilities_khr_TYPE}
243233
** {CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR}
244234
** {CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR}
245-
** {CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR}
246235
* {cl_command_buffer_properties_khr_TYPE}
247236
** {CL_COMMAND_BUFFER_FLAGS_KHR}
248-
* {cl_command_buffer_flags_khr_TYPE}
249-
** {CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR}
250237
* {cl_command_buffer_info_khr_TYPE}
251238
** {CL_COMMAND_BUFFER_QUEUES_KHR}
252239
** {CL_COMMAND_BUFFER_NUM_QUEUES_KHR}
@@ -257,7 +244,6 @@ features:
257244
* {cl_command_buffer_state_khr_TYPE}
258245
** {CL_COMMAND_BUFFER_STATE_RECORDING_KHR}
259246
** {CL_COMMAND_BUFFER_STATE_EXECUTABLE_KHR}
260-
** {CL_COMMAND_BUFFER_STATE_PENDING_KHR}
261247
* {cl_command_type_TYPE}
262248
** {CL_COMMAND_COMMAND_BUFFER_KHR}
263249
* New Error Codes
@@ -470,3 +456,6 @@ features:
470456
* 0.9.7, 2024-12-13
471457
** Refactor queue compatability between command-buffer creation and enqueue
472458
(experimental).
459+
* 0.9.8, 2025-07-10
460+
** Rework simultaneous use definition and remove pending state
461+
(experimental).

api/cl_khr_command_buffer_mutable_dispatch.asciidoc

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ include::{generated}/meta/{refprefix}cl_khr_command_buffer_mutable_dispatch.txt[
66
=== Other Extension Metadata
77

88
*Last Modified Date*::
9-
2024-09-05
9+
2025-08-08
1010
*IP Status*::
1111
No known IP claims.
1212
*Contributors*::
@@ -41,6 +41,15 @@ This allows inputs and outputs to the kernel, as well as work-item sizes and
4141
offsets, to change without having to re-record the entire command sequence
4242
in a new command-buffer.
4343

44+
==== Simultaneous Use
45+
46+
The optional <<simultaneous-use, simultaneous use>> capability was added to the
47+
extension so that vendors could support concurrent execution of the same
48+
command-buffer object which has been updated between submissions. However,
49+
simultaneous use may result in command-buffers having a larger overhead to
50+
implement, so the capability is optional to enable optimizations when this
51+
usage isn't required by a user.
52+
4453
=== Interactions With Other Extensions
4554

4655
The {clUpdateMutableCommandsKHR} entry-point has been designed for the purpose
@@ -72,6 +81,8 @@ void pointer using {cl_command_buffer_update_type_khr_TYPE}.
7281

7382
* {cl_device_info_TYPE}
7483
** {CL_DEVICE_MUTABLE_DISPATCH_CAPABILITIES_KHR}
84+
* {cl_device_command_buffer_capabilities_khr_TYPE}
85+
** {CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR}
7586
* {cl_command_properties_khr_TYPE}
7687
** {CL_MUTABLE_DISPATCH_ASSERTS_KHR}
7788
** {CL_MUTABLE_DISPATCH_UPDATABLE_FIELDS_KHR}
@@ -95,6 +106,7 @@ void pointer using {cl_command_buffer_update_type_khr_TYPE}.
95106
** {CL_MUTABLE_COMMAND_COMMAND_TYPE_KHR}
96107
* {cl_command_buffer_flags_khr_TYPE}
97108
** {CL_COMMAND_BUFFER_MUTABLE_KHR}
109+
** {CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR}
98110
* {cl_command_buffer_properties_khr_TYPE}
99111
** {CL_COMMAND_BUFFER_MUTABLE_DISPATCH_ASSERTS_KHR}
100112
* {cl_command_buffer_update_type_khr_TYPE}
@@ -363,3 +375,7 @@ may be a introduced as a stand alone extension.
363375
* Revision 0.9.3, 2024-09-05
364376
** Rename `CL_MUTABLE_DISPATCH_PROPERTIES_ARRAY_KHR` to
365377
`CL_MUTABLE_COMMAND_PROPERTIES_ARRAY_KHR` (experimental).
378+
* Revision 0.9.4, 2025-08-08
379+
** Move `CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR` and
380+
`CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR` in this
381+
extension from the base extension (experimental).

api/opencl_platform_layer.asciidoc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1790,11 +1790,13 @@ include::{generated}/api/version-notes/CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINT
17901790

17911791
include::{generated}/api/version-notes/CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR.asciidoc[]
17921792

1793+
ifdef::cl_khr_command_buffer_mutable_dispatch[]
17931794
{CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR_anchor} Device
1794-
supports the command-buffers having a <<pending_count, Pending
1795-
Count>> that exceeds 1.
1795+
supports enqueueing command-buffers with a <<simultaneous-use,
1796+
simultaneous use>> usage pattern.
17961797

17971798
include::{generated}/api/version-notes/CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR.asciidoc[]
1799+
endif::cl_khr_command_buffer_mutable_dispatch[]
17981800

17991801
ifdef::cl_khr_command_buffer_multi_device[]
18001802
{CL_COMMAND_BUFFER_CAPABILITY_MULTIPLE_QUEUE_KHR_anchor} Device

api/opencl_runtime_layer.asciidoc

Lines changed: 55 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -14618,13 +14618,14 @@ on one or more command-queues without any application code interaction.
1461814618
Grouping the operations together allows efficient enqueuing of repetitive
1461914619
operations, as well as enabling driver optimizations.
1462014620

14621-
Command-buffers are _sequential use_ by default, but may also be set to
14622-
_simultaneous use_ on creation if the device optionally supports this
14623-
capability.
14624-
A sequential use command-buffer must have a <<pending_count, Pending Count>>
14625-
of 0 or 1.
14626-
The simultaneous use capability removes this restriction and allows
14627-
command-buffers to have a <<pending_count, Pending Count>> greater than 1.
14621+
Upon creation a command-buffer is in the <<recording, Recording>> state. In
14622+
order for the command-buffer to be enqueued it must first be finalized using
14623+
{clFinalizeCommandBufferKHR}, after which no further commands can be recorded.
14624+
A command-buffer is enqueued for execution on command-queues with a call to
14625+
{clEnqueueCommandBufferKHR}. It is always valid to call
14626+
{clEnqueueCommandBufferKHR} with a command-buffer that has previously been
14627+
enqueued, provided the call doesn't violate the definition of
14628+
<<simultaneous-use, simultaneous use>>.
1462814629

1462914630
Command-buffers are created using an ordered list of command-queues that
1463014631
commands are recorded to and execute on by default. All these queue objects
@@ -14690,6 +14691,32 @@ If using layered extension {cl_khr_command_buffer_mutable_dispatch_EXT},
1469014691
usage>>.
1469114692
====
1469214693

14694+
Simultaneous use is defined using the _prerequisite_ terminology from the
14695+
<<_execution_model, execution model>>.
14696+
ifndef::cl_khr_command_buffer_multi_device[]
14697+
A command-buffer exhibits undefined behavior if a simultaneous use
14698+
pattern occurs.
14699+
endif::cl_khr_command_buffer_multi_device[]
14700+
ifdef::cl_khr_command_buffer_multi_device[]
14701+
Simultaneous use is an optional feature for devices to support concurrent
14702+
executions of a command-buffer which have been updated between submissions.
14703+
A command-buffer must be created with {CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR}
14704+
to avoid undefined behavior if a simultaneous use pattern occurs.
14705+
endif::cl_khr_command_buffer_multi_device[]
14706+
14707+
[[simultaneous-use]]
14708+
Simultaneous Use:: When a command-buffer is submitted for
14709+
execution without a prerequisite on all the previous submissions of the same
14710+
command-buffer which are not in the {CL_COMPLETE} state.
14711+
14712+
[NOTE]
14713+
====
14714+
An example of simultaneous use would be two submissions of the same
14715+
command-buffer to a single out-of-order queue, without any events or barriers
14716+
used to express a dependency between the two enqueue calls. Using a single
14717+
in-order queue, events, or barriers to express dependencies between submissions
14718+
of the same command-buffer would each be ways to avoid simultaneous use.
14719+
====
1469314720

1469414721
ifdef::cl_khr_command_buffer_multi_device[]
1469514722
=== Command-Buffers and Multiple Devices
@@ -14733,7 +14760,9 @@ endif::cl_khr_command_buffer_multi_device[]
1473314760

1473414761
=== Command-Buffer Lifecycle
1473514762

14736-
A command-buffer is always in one of the following states:
14763+
A command-buffer is created in the recording state and transitions to the
14764+
executable state when finalized, at which point it cannot move back to
14765+
the recording state.
1473714766

1473814767
[[recording]]
1473914768
Recording:: Initial state of a command-buffer on creation, where commands can be
@@ -14743,11 +14772,6 @@ recorded to the command-buffer.
1474314772
Executable:: State after command recording has finished with
1474414773
{clFinalizeCommandBufferKHR} and the command-buffer may be enqueued.
1474514774

14746-
[[pending]]
14747-
Pending:: Once a command-buffer has been enqueued to a command-queue it enters
14748-
the Pending state until completion, at which point it moves back to the
14749-
<<executable, Executable>> state.
14750-
1475114775
// Image generated from the following mermaid diagram description using https://mermaid.live
1475214776
// Ideally we'd use the asciidoctor-diagram extension to generate the rendered diagram, but
1475314777
// there are issues installing the gem with ruby 2.3.3
@@ -14757,21 +14781,10 @@ the Pending state until completion, at which point it moves back to the
1475714781
// stateDiagram-v2
1475814782
// [*] --> Recording: Create
1475914783
// Recording -->Executable: Finalize
14760-
// Executable --> Pending: Enqueue
14761-
// Pending --> Executable: Completion
1476214784
// ....
1476314785

1476414786
image::images/commandbuffer_lifecycle.png[align="center", title="Lifecycle of a command-buffer."]
1476514787

14766-
[[pending_count]]
14767-
The Pending Count is the number of copies of the command
14768-
buffer in the <<pending, Pending>> state.
14769-
By default a command-buffer's Pending Count must be 0 or 1.
14770-
If the command-buffer was created with
14771-
{CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR} then the command-buffer may have a
14772-
Pending Count greater than 1.
14773-
14774-
1477514788
=== Creating Command-Buffer Objects
1477614789

1477714790
[open,refpage='clCreateCommandBufferKHR',desc='Create a command-buffer',type='protos']
@@ -14812,13 +14825,15 @@ include::{generated}/api/version-notes/CL_COMMAND_BUFFER_FLAGS_KHR.asciidoc[]
1481214825
| {cl_command_buffer_flags_khr_TYPE}
1481314826
| This is a bitfield and can be set to a combination of the following values:
1481414827

14828+
ifdef::cl_khr_command_buffer_mutable_dispatch[]
1481514829
{CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR_anchor} - Allow multiple
14816-
instances of the command-buffer to be submitted to the device for
14817-
execution.
14818-
If set, devices must support
14830+
instances of the command-buffer to be scheduled for execution on the
14831+
device in a usage pattern that exhibits <<simultaneous-use,
14832+
simultaneous use>>. If set, devices must support
1481914833
{CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR}.
1482014834

1482114835
include::{generated}/api/version-notes/CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR.asciidoc[]
14836+
endif::cl_khr_command_buffer_mutable_dispatch[]
1482214837

1482314838
ifdef::cl_khr_command_buffer_multi_device[]
1482414839
{CL_COMMAND_BUFFER_DEVICE_SIDE_SYNC_KHR_anchor} - All commands in the
@@ -14898,16 +14913,6 @@ ifdef::cl_khr_command_buffer_multi_device[]
1489814913
|====
1489914914
endif::cl_khr_command_buffer_multi_device[]
1490014915

14901-
[NOTE]
14902-
====
14903-
Upon creation the command-buffer is defined as being in the
14904-
<<recording, Recording>> state, in order for the command-buffer to be enqueued
14905-
it must first be finalized using {clFinalizeCommandBufferKHR} after which no
14906-
further commands can be recorded.
14907-
A command-buffer is submitted for execution on command-queues with a call to
14908-
{clEnqueueCommandBufferKHR}.
14909-
====
14910-
1491114916
// refError
1491214917

1491314918
{clCreateCommandBufferKHR} returns a valid non-zero command-buffer and
@@ -15089,9 +15094,6 @@ execution was successfully queued, or one of the errors below:
1508915094
* {CL_INVALID_COMMAND_BUFFER_KHR} if _command_buffer_ is not a valid
1509015095
command-buffer.
1509115096
* {CL_INVALID_OPERATION} if _command_buffer_ has not been finalized.
15092-
* {CL_INVALID_OPERATION} if _command_buffer_ was not created with the
15093-
{CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR} flag and is in the <<pending,
15094-
Pending>> state.
1509515097
* {CL_INVALID_VALUE} if _queues_ is `NULL` and _num_queues_ is > 0, or
1509615098
_queues_ is not `NULL` and _num_queues_ is 0.
1509715099
* {CL_INVALID_VALUE} if _num_queues_ is > 0 and not the same value as
@@ -15125,6 +15127,17 @@ execution was successfully queued, or one of the errors below:
1512515127
required by the OpenCL implementation on the host.
1512615128
--
1512715129

15130+
ifndef::cl_khr_command_buffer_mutable_dispatch[]
15131+
Calling {clEnqueueCommandBufferKHR} in a usage pattern that exhbits
15132+
<<simultaneous-use, simultaneous use>> results in undefined behavior.
15133+
endif::cl_khr_command_buffer_mutable_dispatch[]
15134+
15135+
ifdef::cl_khr_command_buffer_mutable_dispatch[]
15136+
Calling {clEnqueueCommandBufferKHR} in a usage pattern that exhbits
15137+
<<simultaneous-use, simultaneous use>> when _command_buffer_ was not created
15138+
with the {CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR} flag results in undefined
15139+
behavior.
15140+
endif::cl_khr_command_buffer_mutable_dispatch[]
1512815141

1512915142
=== Recording Commands to a Command-Buffer
1513015143

@@ -16553,9 +16566,7 @@ include::{generated}/api/version-notes/clRemapCommandBufferKHR.asciidoc[]
1655316566
* _errcode_ret_ returns an appropriate error code.
1655416567
If _errcode_ret_ is `NULL`, no error code is returned.
1655516568

16556-
The returned command-buffer has the same state as the input command-buffer,
16557-
unless the input command-buffer is in the <<pending, Pending>> state, in
16558-
which case the returned command-buffer has state <<executable, Executable>>.
16569+
The returned command-buffer has the same state as the input command-buffer.
1655916570

1656016571
// refError
1656116572

@@ -16682,10 +16693,6 @@ one of the errors below is returned:
1668216693
* {CL_OUT_OF_HOST_MEMORY} if there is a failure to allocate resources
1668316694
required by the OpenCL implementation on the host.
1668416695

16685-
Using this function when _command_buffer_ is in the <<pending, pending>>
16686-
state and not created with the {CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR} flag
16687-
causes undefined behavior.
16688-
1668916696
[NOTE]
1669016697
====
1669116698
Performant usage is to call {clUpdateMutableCommandsKHR} only when the
@@ -16903,18 +16910,10 @@ include::{generated}/api/version-notes/CL_COMMAND_BUFFER_STATE_KHR.asciidoc[]
1690316910
include::{generated}/api/version-notes/CL_COMMAND_BUFFER_STATE_RECORDING_KHR.asciidoc[]
1690416911

1690516912
{CL_COMMAND_BUFFER_STATE_EXECUTABLE_KHR_anchor} is returned when
16906-
_command_buffer_ has been finalized and there is not a <<pending,
16907-
Pending>> instance of _command_buffer_ awaiting completion on a
16908-
command_queue.
16913+
_command_buffer_ has been finalized.
1690916914

1691016915
include::{generated}/api/version-notes/CL_COMMAND_BUFFER_STATE_EXECUTABLE_KHR.asciidoc[]
1691116916

16912-
{CL_COMMAND_BUFFER_STATE_PENDING_KHR_anchor} is returned when an
16913-
instance of _command_buffer_ has been enqueued for execution but not
16914-
yet completed.
16915-
16916-
include::{generated}/api/version-notes/CL_COMMAND_BUFFER_STATE_PENDING_KHR.asciidoc[]
16917-
1691816917
| {CL_COMMAND_BUFFER_PROPERTIES_ARRAY_KHR_anchor}
1691916918

1692016919
include::{generated}/api/version-notes/CL_COMMAND_BUFFER_PROPERTIES_ARRAY_KHR.asciidoc[]

images/commandbuffer_lifecycle.png

-17.4 KB
Loading

xml/cl.xml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1371,7 +1371,6 @@ server's OpenCL/api-docs repository.
13711371
<enums name="cl_command_buffer_state_khr" vendor="Khronos">
13721372
<enum value="0" name="CL_COMMAND_BUFFER_STATE_RECORDING_KHR"/>
13731373
<enum value="1" name="CL_COMMAND_BUFFER_STATE_EXECUTABLE_KHR"/>
1374-
<enum value="2" name="CL_COMMAND_BUFFER_STATE_PENDING_KHR"/>
13751374
</enums>
13761375
<enums name="cl_mutable_dispatch_fields_khr" vendor="Khronos" type="bitmask">
13771376
<enum bitpos="0" name="CL_MUTABLE_DISPATCH_GLOBAL_OFFSET_KHR"/>
@@ -7366,7 +7365,7 @@ server's OpenCL/api-docs repository.
73667365
<enum name="CL_KERNEL_EXEC_INFO_DEVICE_PTRS_EXT"/>
73677366
</require>
73687367
</extension>
7369-
<extension name="cl_khr_command_buffer" revision="0.9.7" supported="opencl" depends="CL_VERSION_1_2" ratified="opencl" experimental="true">
7368+
<extension name="cl_khr_command_buffer" revision="0.9.8" supported="opencl" depends="CL_VERSION_1_2" ratified="opencl" experimental="true">
73707369
<require>
73717370
<type name="CL/cl.h"/>
73727371
</require>
@@ -7389,14 +7388,10 @@ server's OpenCL/api-docs repository.
73897388
<require comment="cl_device_command_buffer_capabilities_khr - bitfield">
73907389
<enum name="CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR"/>
73917390
<enum name="CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR"/>
7392-
<enum name="CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR"/>
73937391
</require>
73947392
<require comment="cl_command_buffer_properties_khr">
73957393
<enum name="CL_COMMAND_BUFFER_FLAGS_KHR"/>
73967394
</require>
7397-
<require comment="cl_command_buffer_flags_khr - bitfield">
7398-
<enum name="CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR"/>
7399-
</require>
74007395
<require comment="Error codes">
74017396
<enum name="CL_INVALID_COMMAND_BUFFER_KHR"/>
74027397
<enum name="CL_INVALID_SYNC_POINT_WAIT_LIST_KHR"/>
@@ -7413,7 +7408,6 @@ server's OpenCL/api-docs repository.
74137408
<require comment="cl_command_buffer_state_khr">
74147409
<enum name="CL_COMMAND_BUFFER_STATE_RECORDING_KHR"/>
74157410
<enum name="CL_COMMAND_BUFFER_STATE_EXECUTABLE_KHR"/>
7416-
<enum name="CL_COMMAND_BUFFER_STATE_PENDING_KHR"/>
74177411
</require>
74187412
<require comment="cl_command_type">
74197413
<enum name="CL_COMMAND_COMMAND_BUFFER_KHR"/>
@@ -7513,7 +7507,7 @@ server's OpenCL/api-docs repository.
75137507
<enum name="CL_QUEUE_JOB_SLOT_ARM"/>
75147508
</require>
75157509
</extension>
7516-
<extension name="cl_khr_command_buffer_mutable_dispatch" revision="0.9.3" supported="opencl" depends="cl_khr_command_buffer" ratified="opencl" experimental="true" comment="requires cl_khr_command_buffer 0.9.5 or later">
7510+
<extension name="cl_khr_command_buffer_mutable_dispatch" revision="0.9.4" supported="opencl" depends="cl_khr_command_buffer" ratified="opencl" experimental="true" comment="requires cl_khr_command_buffer 0.9.8 or later">
75177511
<require>
75187512
<type name="CL/cl.h"/>
75197513
</require>
@@ -7527,8 +7521,14 @@ server's OpenCL/api-docs repository.
75277521
<type name="cl_mutable_dispatch_asserts_khr"/>
75287522
</require>
75297523
<require comment="cl_command_buffer_flags_khr - bitfield">
7524+
<enum name="CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR"/>
75307525
<enum name="CL_COMMAND_BUFFER_MUTABLE_KHR"/>
75317526
</require>
7527+
7528+
<require comment="cl_device_command_buffer_capabilities_khr - bitfield">
7529+
<enum name="CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR"/>
7530+
</require>
7531+
75327532
<require comment="Error codes">
75337533
<enum name="CL_INVALID_MUTABLE_COMMAND_KHR"/>
75347534
</require>

0 commit comments

Comments
 (0)