OpenCL 3.1 Specifications v3.1.0 (#180)
diff --git a/extensions/khrext.php b/extensions/khrext.php
index 0368889..546e973 100644
--- a/extensions/khrext.php
+++ b/extensions/khrext.php
@@ -71,7 +71,9 @@
</li>
<li><a href="specs/3.0-unified/html/OpenCL_API.html#cl_khr_int32_atomics">cl_khr_global_int32_extended_atomics</a>
</li>
-<li><a href="specs/3.0-unified/html/OpenCL_API.html#cl_khr_icd-opencl">cl_khr_icd</a>
+<li><a href="specs/3.0-unified/html/OpenCL_API.html#cl_khr_icd">cl_khr_icd</a>
+</li>
+<li><a href="specs/3.0-unified/html/OpenCL_API.html#cl_khr_icd_unloadable">cl_khr_icd_unloadable</a>
</li>
<li><a href="specs/3.0-unified/html/OpenCL_API.html#cl_khr_il_program">cl_khr_il_program</a>
</li>
@@ -135,6 +137,8 @@
</li>
<li><a href="specs/3.0-unified/html/OpenCL_API.html#cl_khr_throttle_hints">cl_khr_throttle_hints</a>
</li>
+<li><a href="specs/3.0-unified/html/OpenCL_API.html#cl_khr_unified_svm">cl_khr_unified_svm</a>
+</li>
<li><a href="specs/3.0-unified/html/OpenCL_API.html#cl_khr_work_group_uniform_arithmetic">cl_khr_work_group_uniform_arithmetic</a>
</li>
</ul>
diff --git a/extensions/registry.py b/extensions/registry.py
index c572eac..71eb6b0 100644
--- a/extensions/registry.py
+++ b/extensions/registry.py
@@ -559,7 +559,12 @@
'cl_khr_icd' : {
'khrnumber' : 24,
'flags' : { 'public' },
- 'url' : 'specs/3.0-unified/html/OpenCL_API.html#cl_khr_icd-opencl',
+ 'url' : 'specs/3.0-unified/html/OpenCL_API.html#cl_khr_icd',
+ },
+ 'cl_khr_icd_unloadable' : {
+ 'khrnumber' : 73,
+ 'flags' : { 'public' },
+ 'url' : 'specs/3.0-unified/html/OpenCL_API.html#cl_khr_icd_unloadable',
},
'cl_khr_il_program' : {
'khrnumber' : 25,
@@ -716,6 +721,11 @@
'flags' : { 'public' },
'url' : 'specs/3.0-unified/html/OpenCL_API.html#cl_khr_throttle_hints',
},
+ 'cl_khr_unified_svm' : {
+ 'khrnumber' : 74,
+ 'flags' : { 'public' },
+ 'url' : 'specs/3.0-unified/html/OpenCL_API.html#cl_khr_unified_svm',
+ },
'cl_khr_work_group_uniform_arithmetic' : {
'khrnumber' : 67,
'flags' : { 'public' },
diff --git a/index.php b/index.php
index c9261e7..2e174b1 100644
--- a/index.php
+++ b/index.php
@@ -20,33 +20,30 @@
</a> GitHub repository. </p>
-<h6> OpenCL 3.0 Unified Specifications </h6>
+<h6> OpenCL Unified Specifications </h6>
-<p> The latest version of OpenCL is OpenCL 3.0. </p>
+<p> The latest version of OpenCL is OpenCL 3.1. </p>
-<p> The OpenCL specifications are now unified so they describe OpenCL 3.0
- and all previous versions of OpenCL, and include <tt>khr</tt> extensions
- integrated into the core API and C specification language. </p>
+<p> The OpenCL specifications are now unified so they describe OpenCL 3.1
+ and all previous versions of OpenCL, and include <tt>khr</tt> and some
+ <tt>ext</tt> extensions integrated into the core API and C language
+ specifications. </p>
<ul>
<li> OpenCL API Specification
(<a href="specs/unified/html/OpenCL_API.html">HTML</a>)
(<a href="specs/unified/pdf/OpenCL_API.pdf">PDF</a>)
- (July 10, 2025). </li>
+ (May 5, 2026). </li>
<li> OpenCL C Language Specification
(<a href="specs/unified/html/OpenCL_C.html">HTML</a>)
(<a href="specs/unified/pdf/OpenCL_C.pdf">PDF</a>)
- (July 10, 2025). </li>
-<li> OpenCL Extension Specification
- (<a href="specs/unified/html/OpenCL_Ext.html">HTML</a>)
- (<a href="specs/unified/pdf/OpenCL_Ext.pdf">PDF</a>)
- (July 10, 2025). </li>
+ (May 5, 2026). </li>
<li> OpenCL SPIR-V Environment Specification
(<a href="specs/unified/html/OpenCL_Env.html">HTML</a>)
(<a href="specs/unified/pdf/OpenCL_Env.pdf">PDF</a>)
- (July 10, 2025). </li>
+ (May 5, 2026). </li>
<li> <a href="specs/unified/refpages/man/html/">
- OpenCL 3.0 Reference Pages.</a> </li>
+ OpenCL Reference Pages.</a> </li>
<li> <a href="https://www.khronos.org/files/opencl30-reference-guide.pdf" rel="external">
OpenCL 3.0 Reference Guide.</a> </li>
</ul>
diff --git a/specs/unified/html/OpenCL_API.html b/specs/unified/html/OpenCL_API.html
index ca5aaa5..3714b3f 100644
--- a/specs/unified/html/OpenCL_API.html
+++ b/specs/unified/html/OpenCL_API.html
@@ -926,9 +926,9 @@
<h1>The OpenCL<sup>™</sup> Specification</h1>
<div class="details">
<span id="author" class="author">Khronos<sup>®</sup> OpenCL Working Group</span><br>
-<span id="revnumber">version v3.0.19,</span>
-<span id="revdate">Thu, 10 Jul 2025 11:00:00 +0000</span>
-<br><span id="revremark">from git branch: main commit: 85da0d12c298ffa9eefd2adb1864f2c8193cbe3e</span>
+<span id="revnumber">version v3.1.0,</span>
+<span id="revdate">Tue, 05 May 2026 04:00:00 +0000</span>
+<br><span id="revremark">from git branch: main commit: 9fff1a87a975972517f5d878b50f6063dc1b731b</span>
</div>
<div id="toc" class="toc2">
<div id="toctitle">Table of Contents</div>
@@ -987,13 +987,15 @@
<li><a href="#_querying_platform_info">4.1. Querying Platform Info</a></li>
<li><a href="#platform-querying-devices">4.2. Querying Devices</a>
<ul class="sectlevel3">
-<li><a href="#_sharing_directx9_media_surfaces_with_opencl_images">4.2.1. Sharing DirectX9 Media Surfaces With OpenCL Images</a></li>
-<li><a href="#_sharing_direct3d_10_resources_with_opencl_memory_objects">4.2.2. Sharing Direct3D 10 Resources With OpenCL Memory Objects</a></li>
-<li><a href="#_sharing_direct3d_11_resources_with_opencl_memory_objects">4.2.3. Sharing Direct3D 11 Resources With OpenCL Memory Objects</a></li>
+<li><a href="#required-opencl-extensions">4.2.1. Required OpenCL Extensions</a></li>
+<li><a href="#_sharing_directx9_media_surfaces_with_opencl_images">4.2.2. Sharing DirectX9 Media Surfaces With OpenCL Images</a></li>
+<li><a href="#_sharing_direct3d_10_resources_with_opencl_memory_objects">4.2.3. Sharing Direct3D 10 Resources With OpenCL Memory Objects</a></li>
+<li><a href="#_sharing_direct3d_11_resources_with_opencl_memory_objects">4.2.4. Sharing Direct3D 11 Resources With OpenCL Memory Objects</a></li>
</ul>
</li>
<li><a href="#platform-device-partitioning">4.3. Partitioning a Device</a></li>
<li><a href="#_contexts">4.4. Contexts</a></li>
+<li><a href="#getting-opencl-api-extension-function-pointers">4.5. Extension Function Pointers</a></li>
</ul>
</li>
<li><a href="#opencl-runtime">5. The OpenCL Runtime</a>
@@ -1120,11 +1122,11 @@
<li><a href="#querying-devices-that-support-sharing-with-opengl">5.18. Querying Devices That Support Sharing With OpenGL</a></li>
</ul>
</li>
-<li><a href="#_associated_opencl_specification">6. Associated OpenCL specification</a>
+<li><a href="#_associated_opencl_specifications">6. Associated OpenCL Specifications</a>
<ul class="sectlevel2">
-<li><a href="#spirv-il">6.1. SPIR-V Intermediate Language</a></li>
-<li><a href="#opencl-extensions">6.2. Extensions to OpenCL</a></li>
-<li><a href="#opencl-c-kernel-language">6.3. The OpenCL C Kernel Language</a></li>
+<li><a href="#opencl-c-kernel-language">6.1. The OpenCL C Kernel Language</a></li>
+<li><a href="#spirv-il">6.2. SPIR-V Intermediate Language</a></li>
+<li><a href="#opencl-extensions">6.3. Extensions to OpenCL</a></li>
</ul>
</li>
<li><a href="#opencl-embedded-profile">7. OpenCL Embedded Profile</a></li>
@@ -1164,7 +1166,7 @@
<li><a href="#_summary_of_changes_from_opencl_2_0_to_opencl_2_1">Summary of Changes from OpenCL 2.0 to OpenCL 2.1</a></li>
<li><a href="#_summary_of_changes_from_opencl_2_1_to_opencl_2_2">Summary of Changes from OpenCL 2.1 to OpenCL 2.2</a></li>
<li><a href="#_summary_of_changes_from_opencl_2_2_to_opencl_3_0">Summary of Changes from OpenCL 2.2 to OpenCL 3.0</a></li>
-<li><a href="#_summary_of_changes_from_opencl_3_0">Summary of Changes from OpenCL 3.0</a></li>
+<li><a href="#_summary_of_changes_from_opencl_3_0_to_opencl_3_1">Summary of Changes from OpenCL 3.0 to OpenCL 3.1</a></li>
</ul>
</li>
<li><a href="#error_codes">Appendix F: Error Codes</a></li>
@@ -1193,6 +1195,8 @@
</li>
<li><a href="#extensions">Appendix I: OpenCL Extensions (Informative)</a>
<ul class="sectlevel2">
+<li><a href="#naming-convention-for-optional-extensions">Naming Convention for Optional Extensions</a></li>
+<li><a href="#header-conventions-for-optional-extensions">Header Conventions for Optional Extensions</a></li>
<li><a href="#boilerplate-experimental-header">Experimental Extensions</a></li>
<li><a href="#_extension_dependencies">Extension Dependencies</a></li>
<li><a href="#extension-appendices-list">List of Current Extensions</a>
@@ -1229,6 +1233,7 @@
<li><a href="#cl_khr_global_int32_base_atomics">cl_khr_global_int32_base_atomics</a></li>
<li><a href="#cl_khr_global_int32_extended_atomics">cl_khr_global_int32_extended_atomics</a></li>
<li><a href="#cl_khr_icd">cl_khr_icd</a></li>
+<li><a href="#cl_khr_icd_unloadable">cl_khr_icd_unloadable</a></li>
<li><a href="#cl_khr_il_program">cl_khr_il_program</a></li>
<li><a href="#cl_khr_image2d_from_buffer">cl_khr_image2d_from_buffer</a></li>
<li><a href="#cl_khr_initialize_memory">cl_khr_initialize_memory</a></li>
@@ -1284,6 +1289,7 @@
<li><a href="#cl_khr_external_memory_android_hardware_buffer">cl_khr_external_memory_android_hardware_buffer</a></li>
<li><a href="#cl_khr_external_semaphore_dx_fence">cl_khr_external_semaphore_dx_fence</a></li>
<li><a href="#cl_khr_external_semaphore_win32">cl_khr_external_semaphore_win32</a></li>
+<li><a href="#cl_khr_unified_svm">cl_khr_unified_svm</a></li>
</ul>
</li>
<li><a href="#deprecated-extension-appendices-list">List of Deprecated Extensions</a>
@@ -1302,7 +1308,7 @@
<div class="sectionbody">
<div style="page-break-after: always;"></div>
<div class="paragraph">
-<p>Copyright 2008-2025 The Khronos Group Inc.</p>
+<p>Copyright 2008-2026 The Khronos Group Inc.</p>
</div>
<div class="paragraph">
<p>This Specification is protected by copyright laws and contains material proprietary to Khronos.
@@ -1721,13 +1727,11 @@
</dd>
<dt class="hdlist1">Built-in Kernel </dt>
<dd>
-<p>A <em>built-in kernel</em> is a <em>kernel</em> that is executed on an OpenCL <em>device</em>
-or <em>custom device</em> by fixed-function hardware or in firmware.
-<em>Applications</em> can query the <em>built-in kernels</em> supported by a <em>device</em>
-or <em>custom device</em>.
-A <em>program object</em> can only contain <em>kernels</em> written in OpenCL C or
-<em>built-in kernels</em> but not both.
-See also <em>Kernel</em> and <em>Program</em>.</p>
+<p>A <em>built-in kernel</em> is a <em>kernel</em> that is provided by an OpenCL
+implementation.
+A <em>built-in kernel</em> is enqueued for execution like other <em>kernels</em>, but may
+execute on specialized hardware that is unavailable to non-built-in kernels.
+<em>Applications</em> can query the <em>built-in kernels</em> supported by a <em>device</em>.</p>
</dd>
<dt class="hdlist1">Child kernel </dt>
<dd>
@@ -1823,17 +1827,11 @@
</dd>
<dt class="hdlist1">Custom Device </dt>
<dd>
-<p>An OpenCL <em>device</em> that fully implements the OpenCL Runtime but does not
-support <em>programs</em> written in OpenCL C.
-A custom device may be specialized non-programmable hardware that is
-very power efficient and performant for directed tasks or hardware with
-limited programmable capabilities such as specialized DSPs.
-Custom devices are not OpenCL conformant.
-Custom devices may support an online compiler.
-Programs for custom devices can be created using the OpenCL runtime APIs
-that allow OpenCL programs to be created from source (if an online
-compiler is supported) and/or binary, or from <em>built-in kernels</em>
-supported by the <em>device</em>.
+<p>A <em>custom device</em> is a specialized <em>device</em> that supports a subset of the
+OpenCL runtime APIs for directed tasks but is not OpenCL conformant.
+A <em>custom device</em> must implement all of the OpenCL runtime APIs, but may not
+support all of the required minimum device capabilities and may return
+implementation-defined error codes for unsupported functionality.
See also <em>Device</em>.</p>
</dd>
<dt class="hdlist1">Data Parallel Programming Model </dt>
@@ -2063,7 +2061,8 @@
<dt class="hdlist1">Intermediate Language </dt>
<dd>
<p>A lower-level language that may be used to create programs.
-SPIR-V is a required intermediate language (IL) for OpenCL 2.1 and 2.2 devices.
+SPIR-V is a required intermediate language (IL) for OpenCL 2.1, OpenCL 2.2,
+and OpenCL 3.1 or newer devices.
Other OpenCL devices may optionally support SPIR-V or other ILs.</p>
</dd>
<dt class="hdlist1">Kernel </dt>
@@ -2077,7 +2076,7 @@
<dd>
<p>The work carried out by an OpenCL program occurs through the execution
of kernel-instances on devices.
-The kernel instance is the <em>kernel object</em>, the values associated with
+The kernel-instance is the <em>kernel object</em>, the values associated with
the arguments to the kernel, and the parameters that define the
<em>ND-range</em> index space.</p>
</dd>
@@ -2211,9 +2210,9 @@
items.
A pipe has two endpoints: a write endpoint into which data items are
inserted, and a read endpoint from which data items are removed.
-At any one time, only one kernel instance may write into a pipe, and
-only one kernel instance may read from a pipe.
-To support the producer consumer design pattern, one kernel instance
+At any one time, only one kernel-instance may write into a pipe, and
+only one kernel-instance may read from a pipe.
+To support the producer consumer design pattern, one kernel-instance
connects to the write endpoint (the producer) while another kernel
instance connects to the reading endpoint (the consumer).</p>
</dd>
@@ -2386,16 +2385,12 @@
</dd>
<dt class="hdlist1">Scope inclusion </dt>
<dd>
-<p>Two actions <strong>A</strong> and <strong>B</strong> are defined to have an inclusive scope if they
-have the same scope <strong>P</strong> such that: (1) if <strong>P</strong> is
-<strong>memory_scope_sub_group</strong>, and <strong>A</strong> and <strong>B</strong> are executed by work-items
-within the same sub-group, or (2) if <strong>P</strong> is <strong>memory_scope_work_group</strong>,
-and <strong>A</strong> and <strong>B</strong> are executed by work-items within the same work-group,
-or (3) if <strong>P</strong> is <strong>memory_scope_device</strong>, and <strong>A</strong> and <strong>B</strong> are executed by
-work-items on the same device, or (4) if <strong>P</strong> is
-<strong>memory_scope_all_svm_devices</strong> or <strong>memory_scope_all_devices</strong>, if <strong>A</strong> and <strong>B</strong>
-are executed by host threads or by work-items on one or more devices that
-can share SVM memory with each other and the host process.</p>
+<p>Two actions <strong>A</strong> and <strong>B</strong> have an inclusive scope if the work-item or host
+thread performing <strong>A</strong> is in the memory scope of <strong>B</strong> and the work-item or
+host thread performing <strong>B</strong> is in the memory scope of <strong>A</strong>.
+Prior to OpenCL 3.1, the memory scope of <strong>A</strong> and <strong>B</strong> additionally must be
+the same for the actions to have an inclusive scope.
+For OpenCL 3.1 and newer, the memory scope of <strong>A</strong> and <strong>B</strong> may be different.</p>
</dd>
<dt class="hdlist1">Sequenced before </dt>
<dd>
@@ -2727,12 +2722,12 @@
according to the models native to the host platform.
The OpenCL application host code submits the kernel code as commands from
the host to OpenCL devices.
-An OpenCL device executes the commands computation on the processing
-elements within the device.</p>
+An OpenCL device executes the commands on the processing elements within the
+device.</p>
</div>
<div class="paragraph">
<p>An OpenCL device has considerable latitude on how computations are mapped
-onto the devices processing elements.
+onto the device’s processing elements.
When processing elements within a compute unit execute the same sequence of
statements across the processing elements, the control flow is said to be
<em>converged</em>.
@@ -2758,7 +2753,7 @@
An OpenCL platform provides a compiler to translate programs of these
forms into executable program objects.
The device code compiler may be <em>online</em> or <em>offline</em>.
-An <em>online</em> <em>compiler</em> is available during host program execution using
+An <em>online compiler</em> is available during host program execution using
standard APIs.
An <em>offline compiler</em> is invoked outside of host program control, using
platform-specific methods.
@@ -2770,16 +2765,14 @@
<p>OpenCL defines two kinds of platform profiles: a <em>full profile</em> and a
reduced-functionality <em>embedded profile</em>.
A full profile platform must provide an online compiler for all its devices.
-An embedded platform may provide an online compiler, but is not required to
-do so.</p>
+An embedded profile platform may provide an online compiler, but is not required
+to do so.</p>
</div>
<div class="paragraph">
<p>A device may expose special purpose functionality as a <em>built-in kernel</em>.
The platform provides APIs for enumerating and invoking the built-in
kernels offered by a device, but otherwise does not define their
-construction or semantics.
-A <em>custom device</em> supports only built-in kernels, and cannot be programmed
-via a kernel language.</p>
+construction or semantics.</p>
</div>
<div class="admonitionblock note">
<table>
@@ -2788,8 +2781,7 @@
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
-Built-in kernels and custom devices are <a href="#unified-spec">missing before</a>
-version 1.2.
+Built-in kernels are <a href="#unified-spec">missing before</a> version 1.2.
</td>
</tr>
</table>
@@ -2900,7 +2892,7 @@
</li>
<li>
<p><strong>Ended</strong>: Execution of a command ends.
-When a Kernel-enqueue command ends, all of the work-groups associated
+When a kernel-enqueue command ends, all of the work-groups associated
with that command have finished their execution.
<em>Immediate side effects</em>, i.e. those associated with the kernel but not
necessarily with its child kernels, are visible to other units of
@@ -2932,7 +2924,7 @@
<div class="title">Figure 2. The states and transitions between states defined in the OpenCL execution model. A subset of these transitions is exposed through the <a href="#profiling-operations">profiling interface</a>.</div>
</div>
<div class="paragraph">
-<p>Commands communicate their status through <em>Event objects</em>.
+<p>Commands communicate their status through <em>event objects</em>.
Successful completion is indicated by setting the event status associated
with a command to <a href="#CL_COMPLETE"><code>CL_COMPLETE</code></a>.
Unsuccessful completion results in abnormal termination of the command which
@@ -2977,7 +2969,7 @@
<li>
<p>The third source of prerequisites can be the presence of non-trivial C
initializers or C++ constructors for program scope global variables.
-In this case, OpenCL C/C++ compiler shall generate program
+In this case, the OpenCL C/C++ compiler must generate program
initialization kernels that perform C initialization or C++
construction.
These kernels must be executed by OpenCL runtime on a device before any
@@ -3076,7 +3068,7 @@
Each of these executing kernel functions is called a <em>work-item</em>.
The work-items associated with a given kernel-instance are managed by the
device in groups called <em>work-groups</em>.
-These work-groups define a coarse grained decomposition of the Index space.
+These work-groups define a coarse-grained decomposition of the index space.
Work-groups are further divided into <em>sub-groups</em>, which provide an
additional level of control over execution.</p>
</div>
@@ -3093,7 +3085,7 @@
</table>
</div>
<div class="paragraph">
-<p>Work-items have a global ID based on their coordinates within the Index
+<p>Work-items have a global ID based on their coordinates within the index
space.
They can also be defined in terms of their work-group and the local ID
within a work-group.
@@ -3105,7 +3097,7 @@
<p>The index space supported by OpenCL is called an ND-range.
An ND-range is an N-dimensional index space, where N is one, two or three.
The ND-range is decomposed into work-groups forming blocks that cover the
-Index space.
+index space.
An ND-range is defined by three integer arrays of length N:</p>
</div>
<div class="ulist">
@@ -3123,7 +3115,7 @@
</ul>
</div>
<div class="paragraph">
-<p>Each work-items global ID is an N-dimensional tuple.
+<p>Each work-item’s global ID is an N-dimensional tuple.
The global ID components are values in the range from F, to F plus the
number of elements in that dimension minus one.</p>
</div>
@@ -3179,7 +3171,7 @@
shown below.
We input the index space for the work-items (G<sub>x</sub>, G<sub>y</sub>), the size of each
work-group (S<sub>x</sub>, S<sub>y</sub>) and the global ID offset (F<sub>x</sub>, F<sub>y</sub>).
-The global indices define an G<sub>x</sub>by G<sub>y</sub> index space where the total number
+The global indices define a G<sub>x</sub>by G<sub>y</sub> index space where the total number
of work-items is the product of G<sub>x</sub> and G<sub>y</sub>.
The local indices define an S<sub>x</sub> by S<sub>y</sub> index space where the number of
work-items in a single work-group is the product of S<sub>x</sub> and S<sub>y</sub>.
@@ -3227,7 +3219,7 @@
</div>
<div class="paragraph">
<p>Within a work-group work-items may be divided into sub-groups.
-The mapping of work-items to sub-groups is implementation-defined and may be
+The mapping of work-items to sub-groups is implementation-defined, and may be
queried at runtime.
While sub-groups may be used in multi-dimensional work-groups, each
sub-group is 1-dimensional and any given work-item may query which sub-group
@@ -3248,7 +3240,7 @@
<div class="paragraph">
<p>Work-items are mapped into sub-groups through a combination of compile-time
decisions and the parameters of the dispatch.
-The mapping to sub-groups is invariant for the duration of a kernels
+The mapping to sub-groups is invariant for the duration of a kernel’s
execution, across dispatches of a given kernel with the same work-group
dimensions, between dispatches and query operations consistent with the
dispatch parameterization, and from one work-group to another within the
@@ -3261,7 +3253,7 @@
<div class="paragraph">
<p>In the degenerate case, a single sub-group must be supported for each
work-group.
-In this situation all sub-group scope functions are equivalent to their
+In this degenerate case all sub-group scope functions are equivalent to their
work-group level equivalents.</p>
</div>
</div>
@@ -3289,7 +3281,7 @@
</div>
<div class="paragraph">
<p>A kernel-instance is submitted to a device.
-For an in-order command-queue, the kernel instances appear to launch and
+For an in-order command-queue, the kernel-instances appear to launch and
then execute in that same order; where we use the term appear to emphasize
that when there are no dependencies between commands and hence differences
in the order that commands execute cannot be observed in a program, an
@@ -3435,7 +3427,7 @@
These events, however, are only visible to the parent kernel running on the
device.
When these prerequisite events take on the value <a href="#CL_COMPLETE"><code>CL_COMPLETE</code></a>, the
-work-groups associated with the child kernel are launched into the devices
+work-groups associated with the child kernel are launched into the device’s
work pool.
The device then schedules them for execution on the compute units of the
device.
@@ -3446,10 +3438,10 @@
<a href="#CL_COMPLETE"><code>CL_COMPLETE</code></a>.
Should any child kernel complete with an event status set to a negative
value (i.e. abnormally terminate), the parent kernel will abnormally
-terminate and propagate the childs negative event value as the value of the
+terminate and propagate the child’s negative event value as the value of the
parents event.
If there are multiple children that have an event status set to a negative
-value, the selection of which childs negative event value is propagated is
+value, the selection of which child’s negative event value is propagated is
implementation-defined.</p>
</div>
</div>
@@ -3464,7 +3456,7 @@
<ul>
<li>
<p>Work-group synchronization: Constraints on the order of execution for
-work-items in a single work-group</p>
+work-items in a single work-group.</p>
</li>
<li>
<p>Sub-group synchronization: Constraints on the order of execution for
@@ -3473,17 +3465,17 @@
</li>
<li>
<p>Command synchronization: Constraints on the order of commands launched
-for execution</p>
+for execution.</p>
</li>
</ul>
</div>
<div class="paragraph">
-<p>Synchronization across all work-items within a single work-group is carried
-out using a <em>work-group function</em>.
-These functions carry out collective operations across all the work-items in
-a work-group.
-Available collective operations are: barrier, reduction, broadcast, prefix
-sum, and evaluation of a predicate.
+<p>Synchronization across work-items within a work-group is done by using a
+<em>work-group function</em>.
+These functions perform collective operations across the work-items in a
+work-group.
+Available collective operations include barriers, reductions, broadcast, prefix
+sums, and evaluation of a predicate.
A work-group function must occur within a converged control flow; i.e. all
work-items in the work-group must encounter precisely the same work-group
function.
@@ -3492,28 +3484,19 @@
All the work-items of a work-group must execute the work-group function and
complete reads and writes to memory before any are allowed to continue
execution beyond the work-group function.
-Work-group functions that apply between work-groups are not provided in
+Work-group functions that apply across work-groups are not provided in
OpenCL since OpenCL does not define forward-progress or ordering relations
between work-groups, hence collective synchronization operations are not
well defined.</p>
</div>
<div class="paragraph">
-<p>Synchronization across all work-items within a single sub-group is carried
-out using a <em>sub-group function</em>.
-These functions carry out collective operations across all the work-items in
-a sub-group.
-Available collective operations are: barrier, reduction, broadcast, prefix
-sum, and evaluation of a predicate.
-A sub-group function must occur within a converged control flow; i.e. all
-work-items in the sub-group must encounter precisely the same sub-group
-function.
-For example, if a work-group function occurs within a loop, the work-items
-must encounter the same sub-group function in the same loop iterations.
-All the work-items of a sub-group must execute the sub-group function and
-complete reads and writes to memory before any are allowed to continue
-execution beyond the sub-group function.
-Synchronization between sub-groups must either be performed using work-group
-functions, or through memory operations.
+<p>Synchronization across work-items within a sub-group is done by using a
+<em>sub-group function</em>.
+These functions perform collective operations across the work-items in a
+sub-group.
+Like work-group functions, sub-group functions must also occur within a
+converged control flow; i.e. all work-items in the sub-group must encounter
+precisely the same sub-group function.
Using memory operations for sub-group synchronization should be used
carefully as forward progress of sub-groups relative to each other is only
supported optionally by OpenCL implementations.</p>
@@ -3617,13 +3600,12 @@
to determine if this capability is supported.</p>
</li>
<li>
-<p><strong>Built-in kernels</strong> are tied to particular device and are not built at
+<p><strong>Built-in kernels</strong> are tied to a particular device and are not built at
runtime from source code in a program object.
-The common use of built in kernels is to expose fixed-function hardware
-or firmware associated with a particular OpenCL device or custom device.
-The semantics of a built-in kernel may be defined outside of OpenCL and
-hence are implementation-defined.
-Note: Built-in kernels are <a href="#unified-spec">missing before</a> version 1.2.</p>
+The common use of built-in kernels is to expose fixed-function hardware
+or firmware associated with a particular OpenCL device.
+The semantics of a built-in kernel are defined outside of OpenCL and
+hence are implementation-defined.</p>
</li>
</ul>
</div>
@@ -3799,7 +3781,7 @@
</div>
<div class="paragraph">
<p>The addresses of memory associated with memory objects in Global memory are
-not preserved between kernel instances, between a device and the host, and
+not preserved between kernel-instances, between a device and the host, and
between devices.
In this regard global memory acts as a global pool of memory objects rather
than an address space.
@@ -3857,7 +3839,7 @@
<li>
<p><strong>Buffer</strong>: A memory object stored as a block of contiguous memory and
used as a general purpose object to hold data used in an OpenCL program.
-The types of the values within a buffer may be any of the built in types
+The types of the values within a buffer may be any of the built-in types
(such as int, float), vector types, or user-defined structures.
The buffer can be manipulated through pointers much as one would with
any block of memory in C.</p>
@@ -3882,9 +3864,9 @@
data items.
A pipe has two endpoints: a write endpoint into which data items are
inserted, and a read endpoint from which data items are removed.
-At any one time, only one kernel instance may write into a pipe, and
-only one kernel instance may read from a pipe.
-To support the producer consumer design pattern, one kernel instance
+At any one time, only one kernel-instance may write into a pipe, and
+only one kernel-instance may read from a pipe.
+To support the producer consumer design pattern, one kernel-instance
connects to the write endpoint (the producer) while another kernel
instance connects to the reading endpoint (the consumer).
Note: The <em>pipe</em> memory object is <a href="#unified-spec">missing before</a>
@@ -4022,7 +4004,7 @@
The basic principle is that multiple read operations on memory objects from
multiple kernel-instances that overlap in time are allowed, but mixing
overlapping reads and writes into the same memory objects from different
-kernel instances is only allowed when fine grained synchronization is used
+kernel-instances is only allowed when fine grained synchronization is used
with <a href="#shared-virtual-memory">Shared Virtual Memory</a>.</p>
</div>
<div class="paragraph">
@@ -4031,7 +4013,7 @@
memory objects with a given device.
In most cases the OpenCL runtime will implicitly associate a memory object
with a device.
-A kernel instance is naturally associated with the command-queue to which
+A kernel-instance is naturally associated with the command-queue to which
the kernel was submitted.
Since a command-queue can only access a single device, the queue uniquely
defines which device is involved with any given kernel-instance; hence
@@ -4224,7 +4206,7 @@
devices and an optional feature for OpenCL 3.0 or newer devices.
Fine-Grained SVM is an optional feature for all OpenCL devices.
The various SVM mechanisms to access host memory from the work-items
-associated with a kernel instance are <a href="#svm-summary-table">summarized
+associated with a kernel-instance are <a href="#svm-summary-table">summarized
above</a>.</p>
</div>
</div>
@@ -4277,9 +4259,10 @@
</table>
</div>
<div class="paragraph">
-<p>The OpenCL 2.x memory model tells programmers what they can expect from an
-OpenCL 2.x implementation; which memory operations are guaranteed to happen in
-which order and which memory values each read operation will return.
+<p>The OpenCL 2.x memory consistency model tells programmers what they can expect
+from an OpenCL 2.x or newer implementation; which memory operations are
+guaranteed to happen in which order and which memory values each read operation
+will return.
The memory model tells compiler writers which restrictions they must follow
when implementing compiler optimizations; which variables they can cache in
registers and when they can move reads or writes around a barrier or atomic
@@ -4289,7 +4272,7 @@
caches.</p>
</div>
<div class="paragraph">
-<p>The memory consistency model in OpenCL 2.x is based on the memory model from
+<p>The OpenCL 2.x memory consistency model is based on the memory model from
the ISO C11 programming language.
To help make the presentation more precise and self-contained, we include
modified paragraphs taken verbatim from the ISO C11 international standard.
@@ -4306,13 +4289,13 @@
in that interleaving.
While sequential consistency is relatively straightforward for a programmer
to reason about, implementing sequential consistency is expensive.
-Therefore, OpenCL 2.x implements a relaxed memory consistency model; i.e. it is
-possible to write programs where the loads from memory violate sequential
-consistency.
+Therefore, the OpenCL 2.x memory consistency model is a relaxed memory
+consistency model; i.e. it is possible to write programs where the loads from
+memory violate sequential consistency.
Fortunately, if a program does not contain any races and if the program only
uses atomic operations that utilize the sequentially consistent memory order
-(the default memory ordering for OpenCL 2.x), OpenCL programs appear to execute
-with sequential consistency.</p>
+(the default memory ordering for OpenCL C 2.x), OpenCL programs appear to
+execute with sequential consistency.</p>
</div>
<div class="paragraph">
<p>Programmers can to some degree control how the memory model is relaxed by
@@ -4321,10 +4304,10 @@
defined in <a href="#memory-ordering-rules">Memory Ordering Rules</a>.
Here, we give a high level description of how these memory orders apply to
atomic operations on atomic objects shared between units of execution.
-OpenCL 2.x memory_order choices are based on those from the ISO C11 standard
+The OpenCL 2.x memory orders are based on those from the ISO C11 standard
memory model.
-They are specified in certain OpenCL functions through the following
-enumeration constants:</p>
+They are specified in certain OpenCL C functions through the following
+<strong>memory_order</strong> enumeration constants:</p>
</div>
<div class="ulist">
<ul>
@@ -4389,13 +4372,13 @@
</ul>
</div>
<div class="paragraph">
-<p>Regardless of which memory_order is specified, resolving constraints on
+<p>Regardless of which memory order is specified, resolving constraints on
memory operations across a heterogeneous platform adds considerable overhead
to the execution of a program.
An OpenCL platform may be able to optimize certain operations that depend on
the features of the memory consistency model by restricting the scope of the
memory operations.
-Distinct memory scopes are defined by the values of the memory_scope
+Distinct memory scopes are defined by the values of the <strong>memory_scope</strong>
enumeration constant:</p>
</div>
<div class="ulist">
@@ -4491,8 +4474,8 @@
<div class="sect3">
<h4 id="_overview_of_atomic_and_fence_operations"><a class="anchor" href="#_overview_of_atomic_and_fence_operations"></a>3.3.8. Overview of Atomic and Fence Operations</h4>
<div class="paragraph">
-<p>OpenCL 2.x has a number of <em>synchronization operations</em> that are used to define
-memory order constraints in a program.
+<p>OpenCL C 2.x has a number of <em>synchronization operations</em> that are used to
+define memory order constraints in a program.
They play a special role in controlling how memory operations in one unit of
execution (such as work-items or, when using SVM a host thread) are made
visible to another.
@@ -4503,18 +4486,14 @@
<p>Atomic operations are indivisible.
They either occur completely or not at all.
These operations are used to order memory operations between units of
-execution and hence they are parameterized with the memory_order and
-memory_scope parameters defined by the OpenCL memory consistency model.
+execution and hence they are parameterized with the memory order and
+memory scope parameters defined by the OpenCL memory consistency model.
The atomic operations for OpenCL kernel languages are similar to the
corresponding operations defined by the C11 standard.</p>
</div>
<div class="paragraph">
-<p>The OpenCL 2.x atomic operations apply to variables of an atomic type (a
-subset of those in the C11 standard) including atomic versions of the int,
-uint, long, ulong, float, double, half, intptr_t, uintptr_t, size_t, and
-ptrdiff_t types.
-However, support for some of these atomic types depends on support for the
-corresponding regular types.</p>
+<p>The OpenCL C 2.x atomic operations apply to variables of an atomic type (a
+subset of those in the C11 standard).</p>
</div>
<div class="paragraph">
<p>An atomic operation on one or more memory locations is either an acquire
@@ -4532,36 +4511,37 @@
(used for writes), and <strong>memory_order_acq_rel</strong> (used for read-modify-write
operations) are used for simple communication between units of execution
using shared variables.
-Informally, executing a <strong>memory_order_release</strong> on an atomic object A makes
+Informally, executing a <strong>memory_order_release</strong> on an atomic object <strong>A</strong> makes
all previous side effects visible to any unit of execution that later
-executes a <strong>memory_order_acquire</strong> on A.
+executes a <strong>memory_order_acquire</strong> on <strong>A</strong>.
The orders <strong>memory_order_acquire</strong>, <strong>memory_order_release</strong>, and
<strong>memory_order_acq_rel</strong> do not provide sequential consistency for race-free
programs because they will not ensure that atomic stores followed by atomic
loads become visible to other threads in that order.</p>
</div>
<div id="atomic-fence-orders" class="paragraph">
-<p>The fence operation is atomic_work_item_fence, which includes a memory_order
-argument as well as the memory_scope and cl_mem_fence_flags arguments.
-Depending on the memory_order argument, this operation:</p>
+<p>The fence operation is <strong>atomic_work_item_fence</strong>, which includes a memory order
+argument as well as memory scope and memory flag arguments.
+Depending on the memory order argument, this operation:</p>
</div>
<div class="ulist">
<ul>
<li>
-<p>has no effects, if <strong>memory_order_relaxed</strong>;</p>
+<p>has no effects, if the memory order is <strong>memory_order_relaxed</strong>;</p>
</li>
<li>
-<p>is an acquire fence, if <strong>memory_order_acquire</strong>;</p>
+<p>is an acquire fence, if the memory order is <strong>memory_order_acquire</strong>;</p>
</li>
<li>
-<p>is a release fence, if <strong>memory_order_release</strong>;</p>
+<p>is a release fence, if the memory order is <strong>memory_order_release</strong>;</p>
</li>
<li>
-<p>is both an acquire fence and a release fence, if <strong>memory_order_acq_rel</strong>;</p>
+<p>is both an acquire fence and a release fence, if the memory order is
+<strong>memory_order_acq_rel</strong>;</p>
</li>
<li>
<p>is a sequentially-consistent fence with both acquire and release
-semantics, if <strong>memory_order_seq_cst</strong>.</p>
+semantics, if the memory order is <strong>memory_order_seq_cst</strong>.</p>
</li>
</ul>
</div>
@@ -4571,17 +4551,17 @@
CLK_LOCAL_MEM_FENCE</code>.</p>
</div>
<div class="paragraph">
-<p>The <code>atomic_work_item_fence(CLK_IMAGE_MEM_FENCE, …​)</code> built-in function must be
-used to make sure that sampler-less writes are visible to later reads by the
-same work-item.
-Without use of the atomic_work_item_fence function, write-read coherence on
+<p>The <strong>atomic_work_item_fence</strong> built-in function must be used with
+<code>CLK_IMAGE_MEM_FENCE</code> to make sure that sampler-less writes are visible to later
+reads by the same work-item.
+Without use of the <strong>atomic_work_item_fence</strong> function, write-read coherence on
image objects is not guaranteed: if a work-item reads from an image to which
-it has previously written without an intervening atomic_work_item_fence, it
+it has previously written without an intervening <strong>atomic_work_item_fence</strong>, it
is not guaranteed that those previous writes are visible to the work-item.</p>
</div>
<div class="paragraph">
-<p>The synchronization operations in OpenCL 2.x can be parameterized by a
-memory_scope.
+<p>The synchronization operations in OpenCL C 2.x can be parameterized by a
+memory scope.
Memory scopes control the extent that an atomic operation or fence is
visible with respect to the memory model.
These memory scopes may be used when performing atomic operations and fences
@@ -4597,32 +4577,41 @@
will be reduced to <strong>memory_scope_work_group</strong>.</p>
</div>
<div class="paragraph">
-<p>Two actions <strong>A</strong> and <strong>B</strong> are defined to have an inclusive scope if they have
-the same scope <strong>P</strong> such that:</p>
+<p>Two actions <strong>A</strong> and <strong>B</strong> are defined to have an inclusive scope if:</p>
</div>
<div class="ulist">
<ul>
<li>
-<p><strong>P</strong> is <strong>memory_scope_sub_group</strong> and <strong>A</strong> and <strong>B</strong> are executed by
-work-items within the same sub-group.</p>
+<p><strong>A</strong> and <strong>B</strong> are executed by work-items within the same sub-group and the
+memory scope of <strong>A</strong> and <strong>B</strong> is <strong>memory_scope_sub_group</strong> or wider.</p>
</li>
<li>
-<p><strong>P</strong> is <strong>memory_scope_work_group</strong> and <strong>A</strong> and <strong>B</strong> are executed by
-work-items within the same work-group.</p>
+<p><strong>A</strong> and <strong>B</strong> are executed by work-items within the same work-group and the
+memory scope of <strong>A</strong> and <strong>B</strong> is <strong>memory_scope_work_group</strong> or wider.</p>
</li>
<li>
-<p><strong>P</strong> is <strong>memory_scope_device</strong> and <strong>A</strong> and <strong>B</strong> are executed by work-items
-on the same device when <strong>A</strong> and <strong>B</strong> apply to an SVM allocation or <strong>A</strong>
-and <strong>B</strong> are executed by work-items in the same kernel or one of its
-children when <strong>A</strong> and <strong>B</strong> apply to a <code>cl_mem</code> buffer.</p>
+<p><strong>A</strong> and <strong>B</strong> are executed by work-items in the same kernel-instance or a
+child-kernel of the kernel-instance, and the memory scope of <strong>A</strong> and <strong>B</strong> is
+<strong>memory_scope_device</strong> or wider.</p>
</li>
<li>
-<p><strong>P</strong> is <strong>memory_scope_all_svm_devices</strong> if <strong>A</strong> and <strong>B</strong> are executed by
-host threads or by work-items on one or more devices that can share SVM
-memory with each other and the host process.</p>
+<p><strong>A</strong> and <strong>B</strong> are executed by work-items on the same device, <strong>A</strong> and <strong>B</strong>
+operate on an SVM allocation, and the memory scope of <strong>A</strong> and <strong>B</strong> is
+<strong>memory_scope_device</strong> or wider.</p>
+</li>
+<li>
+<p><strong>A</strong> and <strong>B</strong> are executed by a host thread or by work-items on one or more
+devices that support SVM atomic operations, <strong>A</strong> and <strong>B</strong> operate on an SVM
+allocation, and the memory scope of <strong>A</strong> and <strong>B</strong> is
+<strong>memory_scope_all_svm_devices</strong> or <strong>memory_scope_all_devices</strong>.</p>
</li>
</ul>
</div>
+<div class="paragraph">
+<p>Prior to OpenCL 3.1, the memory scope of <strong>A</strong> and <strong>B</strong> must additionally be the
+same for the actions to have an inclusive scope.
+For OpenCL 3.1 and newer, the memory scope of <strong>A</strong> and <strong>B</strong> may be different.</p>
+</div>
</div>
<div class="sect3">
<h4 id="memory-ordering-rules"><a class="anchor" href="#memory-ordering-rules"></a>3.3.9. Memory Ordering Rules</h4>
@@ -4762,9 +4751,9 @@
</ul>
</div>
<div class="paragraph">
-<p>An OpenCL 2.x implementation shall ensure that no program execution
-demonstrates a cycle in either the local-happens-before relation or the
-global-happens-before relation.</p>
+<p>An implementation of the OpenCL 2.x memory consistency model shall ensure that
+no program execution demonstrates a cycle in either the local-happens-before
+relation or the global-happens-before relation.</p>
</div>
<div class="admonitionblock note">
<table>
@@ -4880,16 +4869,16 @@
<p>This and following sections describe how different program actions in kernel
C code and the host program contribute to the local- and
global-happens-before relations.
-This section discusses ordering rules for OpenCL 2.x atomic operations.</p>
+This section discusses ordering rules for OpenCL C 2.x atomic operations.</p>
</div>
<div class="paragraph">
-<p><a href="#device-side-enqueue">Device-side enqueue</a> defines the enumerated type
-memory_order.</p>
+<p>The <a href="#memory-consistency-model">Memory Consistency Model for OpenCL 2.x</a> section defines the enumerated type
+<strong>memory_order</strong>.</p>
</div>
<div class="ulist">
<ul>
<li>
-<p>For <strong>memory_order_relaxed</strong>, no operation orders memory.</p>
+<p>For <strong>memory_order_relaxed</strong>, there is no memory ordering.</p>
</li>
<li>
<p>For <strong>memory_order_release</strong>, <strong>memory_order_acq_rel</strong>, and
@@ -5070,9 +5059,9 @@
</div>
<div class="paragraph">
<p>As long as the following conditions are met, a host program sharing SVM memory
-with a kernel executing on one or more OpenCL 2.x devices may use atomic and
-synchronization operations to ensure that its assignments, and those of the
-kernel, are visible to each other:</p>
+with a kernel executing on one or more OpenCL 2.x or newer devices may use
+atomic and synchronization operations to ensure that its assignments, and those
+of the kernel, are visible to each other:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
@@ -5084,7 +5073,7 @@
map and unmap operations.</p>
</li>
<li>
-<p>The optional OpenCL 2.x SVM atomic-controlled visibility specified by
+<p>The optional OpenCL SVM atomic-controlled visibility specified by
provision of the <a href="#CL_MEM_SVM_ATOMICS"><code>CL_MEM_<wbr>SVM_<wbr>ATOMICS</code></a> flag must be supported by the device
and the flag provided to the SVM buffer on allocation.</p>
</li>
@@ -5105,12 +5094,12 @@
<div class="sect4">
<h5 id="memory-ordering-fence"><a class="anchor" href="#memory-ordering-fence"></a>3.3.9.2. Fence Operations</h5>
<div class="paragraph">
-<p>This section describes how the OpenCL 2.x fence operations contribute to the
+<p>This section describes how the OpenCL C 2.x fence operations contribute to the
local- and global-happens-before relations.</p>
</div>
<div class="paragraph">
<p>Earlier, we introduced synchronization primitives called fences.
-Fences can utilize the acquire memory_order, release memory_order, or both.
+Fences can utilize the acquire memory order, release memory order, or both.
A fence with acquire semantics is called an acquire fence; a fence with
release semantics is called a release fence. The <a href="#atomic-fence-orders">overview of atomic and fence operations</a> section describes the memory orders
that result in acquire and release fences.</p>
@@ -5399,7 +5388,7 @@
</li>
<li>
<p>If a command <strong>C</strong> has an event <strong>E</strong> that signals its completion, then <strong>C</strong>
-global- synchronizes-with <strong>E</strong>.</p>
+global-synchronizes-with <strong>E</strong>.</p>
</li>
<li>
<p>For a command <strong>C</strong> enqueued to a host-side command-queue, if <strong>C</strong> has an
@@ -5409,14 +5398,23 @@
wait-for-events function on <strong>E</strong> (e.g. the <a href="#clWaitForEvents"><strong>clWaitForEvents</strong></a> function
called from a host thread), then <strong>E</strong> global-synchronizes-with that
wait-for-events function call.</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Additionally, for OpenCL 3.1 and newer, <strong>E</strong> global-synchronizes-with an
+API call <strong>X</strong> that observes that the status of <strong>E</strong> is complete.
+For example, if a host thread queries the execution status of <strong>E</strong> using
+<a href="#clGetEventInfo"><strong>clGetEventInfo</strong></a>, and the execution status is <a href="#CL_COMPLETE"><code>CL_COMPLETE</code></a>, then <strong>E</strong>
+global-synchronizes-with that call to <a href="#clGetEventInfo"><strong>clGetEventInfo</strong></a>.</p>
+</li>
+</ul>
+</div>
</li>
<li>
<p>If commands <strong>C</strong> and <strong>C1</strong> are enqueued in that sequence onto an in-order
command-queue, then the event (including the event implied between <strong>C</strong>
and <strong>C1</strong> due to the in-order queue) signaling <strong>C</strong>'s completion
-global-synchronizes-with <strong>C1</strong>.
-Note that in OpenCL 2.x, only a host command-queue can be configured as
-an in-order queue.</p>
+global-synchronizes-with <strong>C1</strong>.</p>
</li>
<li>
<p>If an API call enqueues a marker command <strong>C</strong> with an empty list of
@@ -5457,14 +5455,14 @@
</li>
<li>
<p>If <strong>C</strong> is a command that waits for an event <strong>E</strong>'s completion, and API
-function call <strong>X</strong> sets the status of a user event <strong>E</strong>'s status to
+function call <strong>X</strong> sets user event <strong>E</strong>'s status to
<a href="#CL_COMPLETE"><code>CL_COMPLETE</code></a> (for example, from a host thread using a
<a href="#clSetUserEventStatus"><strong>clSetUserEventStatus</strong></a> function), then <strong>X</strong> global-synchronizes-with <strong>C</strong>.</p>
</li>
<li>
<p>If a device enqueues a command <strong>C</strong> with the
<code>CLK_ENQUEUE_FLAGS_WAIT_KERNEL</code> flag, then the end state of the parent
-kernel instance global-synchronizes with <strong>C</strong>.</p>
+kernel-instance global-synchronizes with <strong>C</strong>.</p>
</li>
<li>
<p>If a work-group enqueues a command <strong>C</strong> with the
@@ -5487,14 +5485,14 @@
<ul>
<li>
<p>access to shared locations or disjoint locations in a single <code>cl_mem</code>
-object when using atomic operations from different kernel instances
+object when using atomic operations from different kernel-instances
enqueued from the host such that one or more of the atomic operations is
a write is implementation-defined and correct behavior is not guaranteed
except at synchronization points.</p>
</li>
<li>
<p>access to shared locations or disjoint locations in a single <code>cl_mem</code>
-object when using atomic operations from different kernel instances
+object when using atomic operations from different kernel-instances
consisting of a parent kernel and any number of child kernels enqueued
by that kernel is guaranteed under the memory ordering rules described
earlier in this section.</p>
@@ -5502,14 +5500,14 @@
<li>
<p>access to shared locations or disjoint locations in a single program
scope global variable, coarse-grained SVM allocation or fine-grained SVM
-allocation when using atomic operations from different kernel instances
+allocation when using atomic operations from different kernel-instances
enqueued from the host to a single device is guaranteed under the memory
ordering rules described earlier in this section.</p>
</li>
</ul>
</div>
<div class="paragraph">
-<p>If fine-grain SVM is used but without support for the OpenCL 2.x atomic
+<p>If fine-grain SVM is used but without support for SVM atomic
operations, then the host and devices can concurrently read the same memory
locations and can concurrently update non-overlapping memory regions, but
attempts to update the same memory locations are undefined.
@@ -5557,7 +5555,7 @@
<p>Access to non-SVM <code>cl_mem</code> buffers and coarse-grained SVM allocations is
ordered at synchronization points between host commands.
In the presence of an out-of-order command-queue or a set of command-queues
-mapped to the same device, multiple kernel instances may execute
+mapped to the same device, multiple kernel-instances may execute
concurrently on the same device.</p>
</div>
</div>
@@ -5600,7 +5598,7 @@
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
-Mixed version support <a href="#unified-spec">missing before</a> version 1.1.
+Mixed version support is <a href="#unified-spec">missing before</a> version 1.1.
</td>
</tr>
</table>
@@ -5682,6 +5680,9 @@
If a feature macro is defined then the feature is supported by the OpenCL C compiler, otherwise the optional feature is not supported.</p>
</div>
</li>
+<li>
+<p>An OpenCL 3.1 device must support all the requirements of an OpenCL 3.0 device in addition to the OpenCL C 3.1 programming language and the SPIR-V 1.0, SPIR-V 1.1, SPIR-V 1.2, SPIR-V 1.3, and SPIR-V 1.4 intermediate languages (ILs).</p>
+</li>
</ul>
</div>
<div class="paragraph">
@@ -5702,10 +5703,10 @@
<h4 id="versioning"><a class="anchor" href="#versioning"></a>3.4.3. Versioning</h4>
<div class="paragraph">
<p>The OpenCL specification is regularly updated with bug fixes and clarifications.
-Occasionally new functionality is added to the core and extensions. In order to
+Occasionally, new functionality is added to the core and extensions. In order to
indicate to developers how and when these changes are made to the specification,
and to provide a way to identify each set of changes, the OpenCL API, C language,
-intermediate languages and extensions maintain a version number. Built-in kernels
+intermediate languages, and extensions maintain a version number. Built-in kernels
are also versioned.</p>
</div>
<div class="sect4">
@@ -5833,7 +5834,7 @@
version <code>0.0.0</code>.</p>
</div>
<div class="paragraph">
-<p>Applications can use these version macros along with the convience macros
+<p>Applications can use these version macros along with the convenience macros
defined in this section to guard their code against breaking changes to the API
of extensions, in particular experimental KHR extensions which have yet to
finalize an API.</p>
@@ -5975,16 +5976,39 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_PLATFORM_NOT_FOUND_KHR"><code>CL_PLATFORM_<wbr>NOT_<wbr>FOUND_<wbr>KHR</code></a> if the <a href="#cl_khr_icd"><code>cl_khr_<wbr>icd</code></a> extension is
-supported and zero platforms are available.</p>
+<p><a href="#CL_PLATFORM_NOT_FOUND_KHR"><code>CL_PLATFORM_<wbr>NOT_<wbr>FOUND_<wbr>KHR</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the <a href="#cl_khr_icd"><code>cl_khr_<wbr>icd</code></a> extension is supported and zero platforms are
+available</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>num_entries</em> is equal to zero and <em>platforms</em> is
-not <code>NULL</code> or if both <em>num_platforms</em> and <em>platforms</em> are <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>num_entries</em> is equal to zero and <em>platforms</em> is not <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p>if both <em>num_platforms</em> and <em>platforms</em> are <code>NULL</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -6042,17 +6066,44 @@
</div>
<div class="paragraph">
<p><a href="#clIcdGetPlatformIDsKHR"><strong>clIcdGetPlatformIDsKHR</strong></a> returns <a href="#CL_SUCCESS"><code>CL_SUCCESS</code></a> if the function is executed
-successfully and there are a non zero number of platforms available.
+successfully and there are a non-zero number of platforms available.
Otherwise, it returns one of the following errors:</p>
</div>
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_PLATFORM_NOT_FOUND_KHR"><code>CL_PLATFORM_<wbr>NOT_<wbr>FOUND_<wbr>KHR</code></a> if zero platforms are available.</p>
+<p><a href="#CL_PLATFORM_NOT_FOUND_KHR"><code>CL_PLATFORM_<wbr>NOT_<wbr>FOUND_<wbr>KHR</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if zero platforms are available</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>num_entries</em> is equal to zero and <em>platforms</em> is
-not <code>NULL</code> or if both <em>num_platforms</em> and <em>platforms</em> are <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>num_entries</em> is equal to zero and <em>platforms</em> is not <code>NULL</code></p>
+</li>
+<li>
+<p>if both <em>num_platforms</em> and <em>platforms</em> are <code>NULL</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -6145,7 +6196,32 @@
<div class="paragraph">
<p><a href="#clIcdSetPlatformDispatchDataKHR"><strong>clIcdSetPlatformDispatchDataKHR</strong></a> returns <a href="#CL_SUCCESS"><code>CL_SUCCESS</code></a> if the function is
executed successfully.
-It returns <a href="#CL_INVALID_PLATFORM"><code>CL_INVALID_<wbr>PLATFORM</code></a> if <em>platform</em> is not a valid platform.</p>
+Otherwise, it returns one of the following errors:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#CL_INVALID_PLATFORM"><code>CL_INVALID_<wbr>PLATFORM</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>platform</em> is not a valid platform</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
</div>
</div>
</div>
@@ -6243,7 +6319,7 @@
<p class="tableblock"> <em>OpenCL<space><major_version.minor_version><space><platform-specific
information></em></p>
<p class="tableblock"> The <em>major_version.minor_version</em> value returned will be one of 1.0,
- 1.1, 1.2, 2.0, 2.1, 2.2 or 3.0.</p></td>
+ 1.1, 1.2, 2.0, 2.1, 2.2, 3.0 or 3.1.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_PLATFORM_NUMERIC_VERSION"></a><a href="#CL_PLATFORM_NUMERIC_VERSION"><code>CL_PLATFORM_<wbr>NUMERIC_<wbr>VERSION</code></a></p>
@@ -6363,6 +6439,12 @@
<td class="tableblock halign-left valign-top"><p class="tableblock">The function name suffix used to identify extension functions to be
directed to this platform by the ICD Loader.</p></td>
</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_PLATFORM_UNLOADABLE_KHR"></a><a href="#CL_PLATFORM_UNLOADABLE_KHR"><code>CL_PLATFORM_<wbr>UNLOADABLE_<wbr>KHR</code></a></p>
+<p class="tableblock">provided by the <code>cl_khr_icd_unloadable</code> extension.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_bool</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The platform can be unloaded by the ICD Loader.</p></td>
+</tr>
</tbody>
</table>
<div class="paragraph">
@@ -6374,18 +6456,40 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_PLATFORM"><code>CL_INVALID_<wbr>PLATFORM</code></a> if <em>platform</em> is not a valid platform.</p>
+<p><a href="#CL_INVALID_PLATFORM"><code>CL_INVALID_<wbr>PLATFORM</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>platform</em> is not a valid platform</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>param_name</em> is not one of the supported values, or
-if the size in bytes specified by <em>param_value_size</em> is less than size of
-the return type specified in the
-<a href="#platform-queries-table">Platform Queries</a> table
-and <em>param_value</em> is not <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>param_name</em> is not one of the supported values</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p>if the size in bytes specified by <em>param_value_size</em> is less than the size of
+the return type specified in the <a href="#platform-queries-table">Platform
+Queries</a> table and <em>param_value</em> is not <code>NULL</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -6480,8 +6584,11 @@
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_TYPE_CUSTOM"></a><a href="#CL_DEVICE_TYPE_CUSTOM"><code>CL_DEVICE_<wbr>TYPE_<wbr>CUSTOM</code></a></p>
<p class="tableblock"><a href="#unified-spec">missing before</a> version 1.2.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Specialized devices that implement some of the OpenCL runtime APIs but
- do not support all of the required OpenCL functionality.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Specialized devices that support a subset of the OpenCL runtime APIs for
+ directed tasks but are not OpenCL conformant.
+ A custom device must implement all of the OpenCL runtime APIs, but may not
+ support all of the required minimum device capabilities and may return
+ implementation-defined error codes for unsupported functionality.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_TYPE_DEFAULT"></a><a href="#CL_DEVICE_TYPE_DEFAULT"><code>CL_DEVICE_<wbr>TYPE_<wbr>DEFAULT</code></a></p></td>
@@ -6513,26 +6620,69 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_PLATFORM"><code>CL_INVALID_<wbr>PLATFORM</code></a> if <em>platform</em> is not a valid platform.</p>
+<p><a href="#CL_INVALID_PLATFORM"><code>CL_INVALID_<wbr>PLATFORM</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>platform</em> is not a valid platform</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_DEVICE_TYPE"><code>CL_INVALID_<wbr>DEVICE_<wbr>TYPE</code></a> if <em>device_type</em> is not a valid value.</p>
+<p><a href="#CL_INVALID_DEVICE_TYPE"><code>CL_INVALID_<wbr>DEVICE_<wbr>TYPE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>device_type</em> is not a valid value</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>num_entries</em> is equal to zero and <em>devices</em> is not
-<code>NULL</code> or if both <em>num_devices</em> and <em>devices</em> are <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>num_entries</em> is equal to zero and <em>devices</em> is not <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_DEVICE_NOT_FOUND"><code>CL_DEVICE_<wbr>NOT_<wbr>FOUND</code></a> if no OpenCL devices that matched <em>device_type</em> were
-found.</p>
+<p>if both <em>num_devices</em> and <em>devices</em> are <code>NULL</code></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_DEVICE_NOT_FOUND"><code>CL_DEVICE_<wbr>NOT_<wbr>FOUND</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if no OpenCL devices that matched <em>device_type</em> were found</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -6671,26 +6821,32 @@
The minimum value is 3.</p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_MAX_WORK_ITEM_SIZES"></a><a href="#CL_DEVICE_MAX_WORK_ITEM_SIZES"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>ITEM_<wbr>SIZES</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_MAX_WORK_GROUP_SIZES"></a><a href="#CL_DEVICE_MAX_WORK_GROUP_SIZES"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>GROUP_<wbr>SIZES</code></a></p>
+<p class="tableblock"><a href="#unified-spec">missing before</a> version 3.1.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>size_t</code>[]</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Maximum number of work-items that can be specified in each dimension
- of the work-group to <a href="#clEnqueueNDRangeKernel"><strong>clEnqueueNDRangeKernel</strong></a>.</p>
-<p class="tableblock"> Returns <em>n</em> <code>size_t</code> entries, where <em>n</em> is the value returned by the
+<td class="tableblock halign-left valign-top"><p class="tableblock">The maximum number of work-items that can be specified in each dimension
+ of a work-group to <a href="#clEnqueueNDRangeKernel"><strong>clEnqueueNDRangeKernel</strong></a>.</p>
+<p class="tableblock"> Returns <em>n</em> <code>size_t</code> values, where <em>n</em> is the value returned by the
query for <a href="#CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>ITEM_<wbr>DIMENSIONS</code></a>.</p>
<p class="tableblock"> The minimum value is (1, 1, 1).</p></td>
</tr>
<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_MAX_WORK_ITEM_SIZES"></a><a href="#CL_DEVICE_MAX_WORK_ITEM_SIZES"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>ITEM_<wbr>SIZES</code></a></p>
+<p class="tableblock"><a href="#unified-spec">deprecated by</a> version 3.1.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>size_t</code>[]</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">See description of <a href="#CL_DEVICE_MAX_WORK_GROUP_SIZES"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>GROUP_<wbr>SIZES</code></a>.</p></td>
+</tr>
+<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_MAX_WORK_GROUP_SIZE"></a><a href="#CL_DEVICE_MAX_WORK_GROUP_SIZE"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>GROUP_<wbr>SIZE</code></a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>size_t</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Maximum number of work-items in a work-group that a device is
- capable of executing on a single compute unit, for any given
- kernel-instance running on the device. (Refer also to
- <a href="#clEnqueueNDRangeKernel"><strong>clEnqueueNDRangeKernel</strong></a> and <a href="#CL_KERNEL_WORK_GROUP_SIZE"><code>CL_KERNEL_<wbr>WORK_<wbr>GROUP_<wbr>SIZE</code></a> ).
- The minimum value is 1.
+<td class="tableblock halign-left valign-top"><p class="tableblock">The maximum total number of work-items that can be specified for a
+ work-group to <a href="#clEnqueueNDRangeKernel"><strong>clEnqueueNDRangeKernel</strong></a>.
The returned value is an upper limit and will not necessarily
maximize performance.
- This maximum may be larger than supported by a specific kernel
- (refer to the <a href="#CL_KERNEL_WORK_GROUP_SIZE"><code>CL_KERNEL_<wbr>WORK_<wbr>GROUP_<wbr>SIZE</code></a> query of <a href="#clGetKernelWorkGroupInfo"><strong>clGetKernelWorkGroupInfo</strong></a>).</p></td>
+ Additionally, this maximum for the device may be larger than the maximum
+ supported for a specific kernel, refer to the per-kernel query
+ <a href="#CL_KERNEL_WORK_GROUP_SIZE"><code>CL_KERNEL_<wbr>WORK_<wbr>GROUP_<wbr>SIZE</code></a>.</p>
+<p class="tableblock"> The minimum value is 1.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR"></a><a href="#CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR"><code>CL_DEVICE_<wbr>PREFERRED_<wbr>VECTOR_<wbr>WIDTH_<wbr>CHAR</code></a> <br>
@@ -6797,15 +6953,20 @@
<p class="tableblock"><a id="CL_DEVICE_IL_VERSION_KHR"></a><a href="#CL_DEVICE_IL_VERSION_KHR"><code>CL_DEVICE_<wbr>IL_<wbr>VERSION_<wbr>KHR</code></a></p>
<p class="tableblock">provided by the <code>cl_khr_il_program</code> extension.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>char</code>[]</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The intermediate languages that can be supported by
+<td class="tableblock halign-left valign-top"><p class="tableblock">The intermediate languages that are supported by
<a href="#clCreateProgramWithIL"><strong>clCreateProgramWithIL</strong></a> for this device.
- Returns a space-separated list of IL version strings of the form</p>
+ Returns a space-separated list of intermediate language version strings
+ of the form:</p>
<p class="tableblock"> <IL_Prefix>_<Major_Version>.<Minor_Version></p>
-<p class="tableblock"> For an OpenCL 2.1 or 2.2 device, SPIR-V is a required IL prefix.</p>
+<p class="tableblock"> An OpenCL 2.1 device
+ or a device that supports the <a href="#cl_khr_il_program"><code>cl_khr_<wbr>il_<wbr>program</code></a> extension
+ must support at least SPIR-V 1.0.</p>
+<p class="tableblock"> An OpenCL 2.2 device must support at least SPIR-V 1.0, SPIR-V 1.1, and
+ SPIR-V 1.2.</p>
+<p class="tableblock"> An OpenCL 3.1 device must support at least SPIR-V 1.0, SPIR-V 1.1,
+ SPIR-V 1.2, SPIR-V 1.3, and SPIR-V 1.4.</p>
<p class="tableblock"> If the device does not support intermediate language programs, the
- value must be <code>""</code> (an empty string).</p>
-<p class="tableblock"> A device that supports the <a href="#cl_khr_il_program"><code>cl_khr_<wbr>il_<wbr>program</code></a> extension must
- support the <code>"SPIR-V"</code> IL prefix.</p></td>
+ returned value must be <code>""</code> (an empty string).</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_ILS_WITH_VERSION"></a><a href="#CL_DEVICE_ILS_WITH_VERSION"><code>CL_DEVICE_<wbr>ILS_<wbr>WITH_<wbr>VERSION</code></a></p>
@@ -6821,30 +6982,7 @@
once but each name and major/minor version combination may only be
reported once.
The list of intermediate languages reported must match the list
- reported via <a href="#CL_DEVICE_IL_VERSION"><code>CL_DEVICE_<wbr>IL_<wbr>VERSION</code></a>.</p>
-<p class="tableblock"> For an OpenCL 2.1 or 2.2 device, at least one version of SPIR-V must
- be reported.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_SPIRV_EXTENDED_INSTRUCTION_SETS_KHR"></a><a href="#CL_DEVICE_SPIRV_EXTENDED_INSTRUCTION_SETS_KHR"><code>CL_DEVICE_<wbr>SPIRV_<wbr>EXTENDED_<wbr>INSTRUCTION_<wbr>SETS_<wbr>KHR</code></a></p>
-<p class="tableblock">provided by the <code>cl_khr_spirv_queries</code> extension.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">const <code>char</code>*[]</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns an array of null-terminated strings, where each string describes
- a SPIR-V extended instruction set that is supported by the device.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_SPIRV_EXTENSIONS_KHR"></a><a href="#CL_DEVICE_SPIRV_EXTENSIONS_KHR"><code>CL_DEVICE_<wbr>SPIRV_<wbr>EXTENSIONS_<wbr>KHR</code></a></p>
-<p class="tableblock">provided by the <code>cl_khr_spirv_queries</code> extension.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">const <code>char</code>*[]</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns an array of null-terminated strings, where each string describes
- a SPIR-V extension that is supported by the device.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_SPIRV_CAPABILITIES_KHR"></a><a href="#CL_DEVICE_SPIRV_CAPABILITIES_KHR"><code>CL_DEVICE_<wbr>SPIRV_<wbr>CAPABILITIES_<wbr>KHR</code></a></p>
-<p class="tableblock">provided by the <code>cl_khr_spirv_queries</code> extension.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uint</code>[]</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns an array of SPIR-V token values, where each value describes a
- SPIR-V capability that is supported by the device.</p></td>
+ reported via <a href="#CL_DEVICE_IL_VERSION"><code>CL_DEVICE_<wbr>IL_<wbr>VERSION</code></a>.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_IMAGE2D_MAX_WIDTH"></a><a href="#CL_DEVICE_IMAGE2D_MAX_WIDTH"><code>CL_DEVICE_<wbr>IMAGE2D_<wbr>MAX_<wbr>WIDTH</code></a></p></td>
@@ -7147,10 +7285,10 @@
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_HOST_UNIFIED_MEMORY"></a><a href="#CL_DEVICE_HOST_UNIFIED_MEMORY"><code>CL_DEVICE_<wbr>HOST_<wbr>UNIFIED_<wbr>MEMORY</code></a></p>
-<p class="tableblock"><a href="#unified-spec">missing before</a> version 1.1 and <a href="#unified-spec">deprecated by</a> version 2.0.</p></td>
+<p class="tableblock"><a href="#unified-spec">missing before</a> version 1.1.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_bool</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Is <a href="#CL_TRUE"><code>CL_TRUE</code></a> if the device and the host have a unified memory subsystem
- and is <a href="#CL_FALSE"><code>CL_FALSE</code></a> otherwise.</p></td>
+ and is <a href="#CL_FALSE"><code>CL_FALSE</code></a> otherwise. <sup class="footnote">[<a id="_footnoteref_9" class="footnote" href="#_footnotedef_9" title="View footnote.">9</a>]</sup></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_PROFILING_TIMER_RESOLUTION"></a><a href="#CL_DEVICE_PROFILING_TIMER_RESOLUTION"><code>CL_DEVICE_<wbr>PROFILING_<wbr>TIMER_<wbr>RESOLUTION</code></a></p></td>
@@ -7163,7 +7301,7 @@
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_ENDIAN_LITTLE"></a><a href="#CL_DEVICE_ENDIAN_LITTLE"><code>CL_DEVICE_<wbr>ENDIAN_<wbr>LITTLE</code></a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_bool</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Is <a href="#CL_TRUE"><code>CL_TRUE</code></a> if the OpenCL device is a little endian device and
- <a href="#CL_FALSE"><code>CL_FALSE</code></a> otherwise</p></td>
+ <a href="#CL_FALSE"><code>CL_FALSE</code></a> otherwise.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_AVAILABLE"></a><a href="#CL_DEVICE_AVAILABLE"><code>CL_DEVICE_<wbr>AVAILABLE</code></a></p></td>
@@ -7175,19 +7313,21 @@
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_COMPILER_AVAILABLE"></a><a href="#CL_DEVICE_COMPILER_AVAILABLE"><code>CL_DEVICE_<wbr>COMPILER_<wbr>AVAILABLE</code></a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_bool</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Is <a href="#CL_FALSE"><code>CL_FALSE</code></a> if the implementation does not have a compiler available
- to compile the program source.</p>
-<p class="tableblock"> Is <a href="#CL_TRUE"><code>CL_TRUE</code></a> if the compiler is available.
- This can be <a href="#CL_FALSE"><code>CL_FALSE</code></a> for the embedded platform profile only.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Is <a href="#CL_TRUE"><code>CL_TRUE</code></a> if a compiler is available to compile programs created from
+ source or IL, or <a href="#CL_FALSE"><code>CL_FALSE</code></a> if the implementation does not have a
+ compiler available.</p>
+<p class="tableblock"> This must be <a href="#CL_TRUE"><code>CL_TRUE</code></a> for devices supporting the full profile.</p>
+<p class="tableblock"> When an online compiler is not available, OpenCL programs may still be
+ created from binaries or built-in kernels supported by the device.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_LINKER_AVAILABLE"></a><a href="#CL_DEVICE_LINKER_AVAILABLE"><code>CL_DEVICE_<wbr>LINKER_<wbr>AVAILABLE</code></a></p>
<p class="tableblock"><a href="#unified-spec">missing before</a> version 1.2.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_bool</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Is <a href="#CL_FALSE"><code>CL_FALSE</code></a> if the implementation does not have a linker available.
- Is <a href="#CL_TRUE"><code>CL_TRUE</code></a> if the linker is available.</p>
-<p class="tableblock"> This can be <a href="#CL_FALSE"><code>CL_FALSE</code></a> for the embedded platform profile only.</p>
-<p class="tableblock"> This must be <a href="#CL_TRUE"><code>CL_TRUE</code></a> if <a href="#CL_DEVICE_COMPILER_AVAILABLE"><code>CL_DEVICE_<wbr>COMPILER_<wbr>AVAILABLE</code></a> is <a href="#CL_TRUE"><code>CL_TRUE</code></a>.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Is <a href="#CL_TRUE"><code>CL_TRUE</code></a> if a linker is available to link compiled programs, or
+ <a href="#CL_FALSE"><code>CL_FALSE</code></a> if the implementation does not have a linker available.</p>
+<p class="tableblock"> This must be <a href="#CL_TRUE"><code>CL_TRUE</code></a> for devices supporting the full profile or if
+ <a href="#CL_DEVICE_COMPILER_AVAILABLE"><code>CL_DEVICE_<wbr>COMPILER_<wbr>AVAILABLE</code></a> is <a href="#CL_TRUE"><code>CL_TRUE</code></a>.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_EXECUTION_CAPABILITIES"></a><a href="#CL_DEVICE_EXECUTION_CAPABILITIES"><code>CL_DEVICE_<wbr>EXECUTION_<wbr>CAPABILITIES</code></a></p></td>
@@ -7339,8 +7479,8 @@
string has the following format:</p>
<p class="tableblock"> <em>OpenCL<space><major_version.minor_version><space><vendor-specific
information></em></p>
-<p class="tableblock"> The major_version.minor_version value returned will be one of 1.0,
- 1.1, 1.2, 2.0, 2.1, 2.2, or 3.0.</p></td>
+<p class="tableblock"> The <em>major_version.minor_version</em> value returned will be one of 1.0,
+ 1.1, 1.2, 2.0, 2.1, 2.2, 3.0 or 3.1.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_NUMERIC_VERSION"></a><a href="#CL_DEVICE_NUMERIC_VERSION"><code>CL_DEVICE_<wbr>NUMERIC_<wbr>VERSION</code></a></p>
@@ -7366,9 +7506,9 @@
<p class="tableblock"> <em>OpenCL<space>C<space><major_version.minor_version><space><vendor-specific
information></em></p>
<p class="tableblock"> For devices that support compilation from OpenCL C source:</p>
-<p class="tableblock"> Because OpenCL 3.0 is backwards compatible with OpenCL C 1.2,
- an OpenCL 3.0 device must support at least OpenCL C 1.2.
- An OpenCL 3.0 device may return an OpenCL C version newer
+<p class="tableblock"> Because OpenCL 3.0 and newer is backwards compatible with OpenCL 1.2,
+ an OpenCL 3.0 or newer device must support at least OpenCL C 1.2.
+ An OpenCL 3.0 or newer device may return an OpenCL C version newer
than OpenCL C 1.2 if and only if all optional OpenCL C
features are supported by the device for the newer version.</p>
<p class="tableblock"> Support for OpenCL C 2.0 is required for an OpenCL 2.0, OpenCL 2.1,
@@ -7397,10 +7537,12 @@
The version returned by <a href="#CL_DEVICE_OPENCL_C_VERSION"><code>CL_DEVICE_<wbr>OPENCL_<wbr>C_<wbr>VERSION</code></a> is required to be
present in the list.</p>
<p class="tableblock"> For devices that support compilation from OpenCL C source:</p>
-<p class="tableblock"> Because OpenCL 3.0 is backwards compatible with OpenCL C 1.2,
- and OpenCL C 1.2 is backwards compatible with OpenCL C 1.1 and
- OpenCL C 1.0, support for at least OpenCL C 3.0, OpenCL C 1.2,
+<p class="tableblock"> Because OpenCL 3.0 is backwards compatible with OpenCL 1.2,
+ and OpenCL 1.2 is backwards compatible with OpenCL 1.1 and
+ OpenCL 1.0, support for at least OpenCL C 3.0, OpenCL C 1.2,
OpenCL C 1.1, and OpenCL C 1.0 is required for an OpenCL 3.0 device.</p>
+<p class="tableblock"> Support for at least OpenCL C 3.1, OpenCL C 3.0, OpenCL C 1.2, OpenCL C
+ 1.1, and OpenCL C 1.0 is required for an OpenCL 3.1 device.</p>
<p class="tableblock"> Support for OpenCL C 2.0, OpenCL C 1.2, OpenCL C 1.1, and OpenCL C
1.0 is required for an OpenCL 2.0, OpenCL 2.1, or OpenCL 2.2 device.</p>
<p class="tableblock"> Support for OpenCL C 1.2, OpenCL C 1.1, and OpenCL C 1.0 is required
@@ -7442,26 +7584,11 @@
names themselves do not contain any spaces) supported by the device.
The list of extension names may include Khronos approved extension
names and vendor specified extension names.</p>
-<p class="tableblock"> The following Khronos extension names must be returned by
- all devices that support OpenCL 1.1:</p>
-<p class="tableblock"> <a href="#cl_khr_byte_addressable_store"><code>cl_khr_<wbr>byte_<wbr>addressable_<wbr>store</code></a><br>
- <a href="#cl_khr_global_int32_base_atomics"><code>cl_khr_<wbr>global_<wbr>int32_<wbr>base_<wbr>atomics</code></a><br>
- <a href="#cl_khr_global_int32_extended_atomics"><code>cl_khr_<wbr>global_<wbr>int32_<wbr>extended_<wbr>atomics</code></a><br>
- <a href="#cl_khr_local_int32_base_atomics"><code>cl_khr_<wbr>local_<wbr>int32_<wbr>base_<wbr>atomics</code></a><br>
- <a href="#cl_khr_local_int32_extended_atomics"><code>cl_khr_<wbr>local_<wbr>int32_<wbr>extended_<wbr>atomics</code></a></p>
-<p class="tableblock"> Additionally, the following Khronos extension names must be returned
- by all devices that support OpenCL 1.2 when and only when the optional
- feature is supported:</p>
-<p class="tableblock"> <a href="#cl_khr_fp64"><code>cl_khr_<wbr>fp64</code></a></p>
-<p class="tableblock"> Additionally, the following Khronos extension names must be returned
- by all devices that support OpenCL 2.0, OpenCL 2.1, or OpenCL 2.2.
- For devices that support OpenCL 3.0, these extension names must
- be returned when and only when the optional feature is supported:</p>
-<p class="tableblock"> <a href="#cl_khr_3d_image_writes"><code>cl_khr_<wbr>3d_<wbr>image_<wbr>writes</code></a><br>
- <a href="#cl_khr_depth_images"><code>cl_khr_<wbr>depth_<wbr>images</code></a><br>
- <a href="#cl_khr_image2d_from_buffer"><code>cl_khr_<wbr>image2d_<wbr>from_<wbr>buffer</code></a></p>
-<p class="tableblock"> Please refer to the OpenCL Extension Specification or vendor
- provided documentation for a detailed description of these extensions.</p></td>
+<p class="tableblock"> Please refer to <a href="#required-opencl-extensions">Required OpenCL
+ Extensions</a> for a list of OpenCL extensions that must be supported for
+ each OpenCL version.</p>
+<p class="tableblock"> Please refer to the OpenCL Specification or vendor-provided
+ documentation for a detailed description of these extensions.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_EXTENSIONS_WITH_VERSION"></a><a href="#CL_DEVICE_EXTENSIONS_WITH_VERSION"><code>CL_DEVICE_<wbr>EXTENSIONS_<wbr>WITH_<wbr>VERSION</code></a></p>
@@ -7567,7 +7694,7 @@
<em>param_value</em> points to.</p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_REFERENCE_COUNT"></a><a href="#CL_DEVICE_REFERENCE_COUNT"><code>CL_DEVICE_<wbr>REFERENCE_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_9" class="footnote" href="#_footnotedef_9" title="View footnote.">9</a>]</sup></p>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_REFERENCE_COUNT"></a><a href="#CL_DEVICE_REFERENCE_COUNT"><code>CL_DEVICE_<wbr>REFERENCE_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_10" class="footnote" href="#_footnotedef_10" title="View footnote.">10</a>]</sup></p>
<p class="tableblock"><a href="#unified-spec">missing before</a> version 1.2.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uint</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the <em>device</em> reference count.
@@ -7637,8 +7764,8 @@
kernel-instance running on the device.</p>
<p class="tableblock"> The minimum value is 1 if the device supports sub-groups, and must be
0 for devices that do not support sub-groups.
- Support for sub-groups is required for an OpenCL 2.1 or 2.2 device.</p>
-<p class="tableblock"> (Refer also to <a href="#clGetKernelSubGroupInfo"><strong>clGetKernelSubGroupInfo</strong></a>.)</p></td>
+ Support for sub-groups is required for an OpenCL 2.1, OpenCL 2.2, or
+ OpenCL 3.1 device.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS"></a><a href="#CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS"><code>CL_DEVICE_<wbr>SUB_<wbr>GROUP_<wbr>INDEPENDENT_<wbr>FORWARD_<wbr>PROGRESS</code></a></p>
@@ -7661,7 +7788,7 @@
<a id="CL_DEVICE_ATOMIC_ORDER_ACQ_REL"></a><a href="#CL_DEVICE_ATOMIC_ORDER_ACQ_REL"><code>CL_DEVICE_<wbr>ATOMIC_<wbr>ORDER_<wbr>ACQ_<wbr>REL</code></a> - Support for the <strong>acquire</strong>, <strong>release</strong>, and <strong>acquire-release</strong> memory orders.<br>
<a id="CL_DEVICE_ATOMIC_ORDER_SEQ_CST"></a><a href="#CL_DEVICE_ATOMIC_ORDER_SEQ_CST"><code>CL_DEVICE_<wbr>ATOMIC_<wbr>ORDER_<wbr>SEQ_<wbr>CST</code></a> - Support for the <strong>sequentially consistent</strong> memory order.</p>
<p class="tableblock"> Because atomic memory orders are hierarchical, a device that supports a strong memory order must also support all weaker memory orders.</p>
-<p class="tableblock"> <a id="CL_DEVICE_ATOMIC_SCOPE_WORK_ITEM"></a><a href="#CL_DEVICE_ATOMIC_SCOPE_WORK_ITEM"><code>CL_DEVICE_<wbr>ATOMIC_<wbr>SCOPE_<wbr>WORK_<wbr>ITEM</code></a> <sup class="footnote">[<a id="_footnoteref_10" class="footnote" href="#_footnotedef_10" title="View footnote.">10</a>]</sup> - Support for memory ordering constraints that apply to a single work-item.<br>
+<p class="tableblock"> <a id="CL_DEVICE_ATOMIC_SCOPE_WORK_ITEM"></a><a href="#CL_DEVICE_ATOMIC_SCOPE_WORK_ITEM"><code>CL_DEVICE_<wbr>ATOMIC_<wbr>SCOPE_<wbr>WORK_<wbr>ITEM</code></a> <sup class="footnote">[<a id="_footnoteref_11" class="footnote" href="#_footnotedef_11" title="View footnote.">11</a>]</sup> - Support for memory ordering constraints that apply to a single work-item.<br>
<a id="CL_DEVICE_ATOMIC_SCOPE_WORK_GROUP"></a><a href="#CL_DEVICE_ATOMIC_SCOPE_WORK_GROUP"><code>CL_DEVICE_<wbr>ATOMIC_<wbr>SCOPE_<wbr>WORK_<wbr>GROUP</code></a> - Support for memory ordering constraints that apply to all work-items in a work-group.<br>
<a id="CL_DEVICE_ATOMIC_SCOPE_DEVICE"></a><a href="#CL_DEVICE_ATOMIC_SCOPE_DEVICE"><code>CL_DEVICE_<wbr>ATOMIC_<wbr>SCOPE_<wbr>DEVICE</code></a> - Support for memory ordering constraints that apply to all work-items executing on the device.<br>
<a id="CL_DEVICE_ATOMIC_SCOPE_ALL_DEVICES"></a><a href="#CL_DEVICE_ATOMIC_SCOPE_ALL_DEVICES"><code>CL_DEVICE_<wbr>ATOMIC_<wbr>SCOPE_<wbr>ALL_<wbr>DEVICES</code></a> - Support for memory ordering constraints that apply to all work-items executing across all devices that can share SVM memory with each other and the host process.</p>
@@ -7737,6 +7864,181 @@
has fully passed in accordance with the official conformance process.</p></td>
</tr>
<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_UUID"></a><a href="#CL_DEVICE_UUID"><code>CL_DEVICE_<wbr>UUID</code></a></p>
+<p class="tableblock"><a href="#unified-spec">missing before</a> version 3.1.</p>
+<p class="tableblock">or</p>
+<p class="tableblock"><a id="CL_DEVICE_UUID_KHR"></a><a href="#CL_DEVICE_UUID_KHR"><code>CL_DEVICE_<wbr>UUID_<wbr>KHR</code></a></p>
+<p class="tableblock">provided by the <code>cl_khr_device_uuid</code> extension.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uchar</code>[<a href="#CL_UUID_SIZE"><code>CL_UUID_<wbr>SIZE</code></a>]</p>
+<p class="tableblock">or <code>cl_uchar</code>[<a href="#CL_UUID_SIZE_KHR"><code>CL_UUID_<wbr>SIZE_<wbr>KHR</code></a>]</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns a universally unique identifier (UUID) for the device.</p>
+<p class="tableblock"> Device UUIDs must be immutable for a given device across processes,
+ driver APIs, driver versions, and system reboots.</p>
+<p class="tableblock"> <a id="CL_UUID_SIZE"></a><a href="#CL_UUID_SIZE"><code>CL_UUID_<wbr>SIZE</code></a>
+or <a id="CL_UUID_SIZE_KHR"></a><a href="#CL_UUID_SIZE_KHR"><code>CL_UUID_<wbr>SIZE_<wbr>KHR</code></a>
+ is the size of the UUID, in bytes.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DRIVER_UUID"></a><a href="#CL_DRIVER_UUID"><code>CL_DRIVER_<wbr>UUID</code></a></p>
+<p class="tableblock"><a href="#unified-spec">missing before</a> version 3.1.</p>
+<p class="tableblock">or</p>
+<p class="tableblock"><a id="CL_DRIVER_UUID_KHR"></a><a href="#CL_DRIVER_UUID_KHR"><code>CL_DRIVER_<wbr>UUID_<wbr>KHR</code></a></p>
+<p class="tableblock">provided by the <code>cl_khr_device_uuid</code> extension.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uchar</code>[<a href="#CL_UUID_SIZE"><code>CL_UUID_<wbr>SIZE</code></a>]</p>
+<p class="tableblock">or <code>cl_uchar</code>[<a href="#CL_UUID_SIZE_KHR"><code>CL_UUID_<wbr>SIZE_<wbr>KHR</code></a>]</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns a universally unique identifier (UUID) for the software driver
+ for the device.</p>
+<p class="tableblock"> <a id="CL_UUID_SIZE"></a><a href="#CL_UUID_SIZE"><code>CL_UUID_<wbr>SIZE</code></a>
+or <a id="CL_UUID_SIZE_KHR"></a><a href="#CL_UUID_SIZE_KHR"><code>CL_UUID_<wbr>SIZE_<wbr>KHR</code></a>
+ is the size of the UUID, in bytes.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_LUID_VALID"></a><a href="#CL_DEVICE_LUID_VALID"><code>CL_DEVICE_<wbr>LUID_<wbr>VALID</code></a></p>
+<p class="tableblock"><a href="#unified-spec">missing before</a> version 3.1.</p>
+<p class="tableblock">or</p>
+<p class="tableblock"><a id="CL_DEVICE_LUID_VALID_KHR"></a><a href="#CL_DEVICE_LUID_VALID_KHR"><code>CL_DEVICE_<wbr>LUID_<wbr>VALID_<wbr>KHR</code></a></p>
+<p class="tableblock">provided by the <code>cl_khr_device_uuid</code> extension.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_bool</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <a href="#CL_TRUE"><code>CL_TRUE</code></a> if the device has a valid LUID and <a href="#CL_FALSE"><code>CL_FALSE</code></a>
+ otherwise.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_LUID"></a><a href="#CL_DEVICE_LUID"><code>CL_DEVICE_<wbr>LUID</code></a></p>
+<p class="tableblock"><a href="#unified-spec">missing before</a> version 3.1.</p>
+<p class="tableblock">or</p>
+<p class="tableblock"><a id="CL_DEVICE_LUID_KHR"></a><a href="#CL_DEVICE_LUID_KHR"><code>CL_DEVICE_<wbr>LUID_<wbr>KHR</code></a></p>
+<p class="tableblock">provided by the <code>cl_khr_device_uuid</code> extension.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uchar</code>[<a href="#CL_LUID_SIZE"><code>CL_LUID_<wbr>SIZE</code></a>]</p>
+<p class="tableblock">or <code>cl_uchar</code>[<a href="#CL_LUID_SIZE_KHR"><code>CL_LUID_<wbr>SIZE_<wbr>KHR</code></a>]</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns a locally unique identifier (LUID) for the device.</p>
+<p class="tableblock"> It is not an error to query <a href="#CL_DEVICE_LUID"><code>CL_DEVICE_<wbr>LUID</code></a>
+or <a href="#CL_DEVICE_LUID_KHR"><code>CL_DEVICE_<wbr>LUID_<wbr>KHR</code></a>
+ when <a href="#CL_DEVICE_LUID_VALID"><code>CL_DEVICE_<wbr>LUID_<wbr>VALID</code></a>
+or <a href="#CL_DEVICE_LUID_VALID_KHR"><code>CL_DEVICE_<wbr>LUID_<wbr>VALID_<wbr>KHR</code></a>
+ returns <a href="#CL_FALSE"><code>CL_FALSE</code></a>, but in this case the returned LUID value is
+ undefined.</p>
+<p class="tableblock"> When <a href="#CL_DEVICE_LUID_VALID_KHR"><code>CL_DEVICE_<wbr>LUID_<wbr>VALID_<wbr>KHR</code></a>
+or <a href="#CL_DEVICE_LUID_VALID_KHR"><code>CL_DEVICE_<wbr>LUID_<wbr>VALID_<wbr>KHR</code></a>
+ returns <a href="#CL_TRUE"><code>CL_TRUE</code></a>, and the OpenCL device is running on the Windows
+ operating system, the returned LUID value can be cast to an <code>LUID</code>
+ object and must be equal to the locally unique identifier of an
+ <code>IDXGIAdapter1</code> object that corresponds to the OpenCL device.</p>
+<p class="tableblock"> <a id="CL_LUID_SIZE_KHR"></a><a href="#CL_LUID_SIZE_KHR"><code>CL_LUID_<wbr>SIZE_<wbr>KHR</code></a>
+or <a id="CL_LUID_SIZE_KHR"></a><a href="#CL_LUID_SIZE_KHR"><code>CL_LUID_<wbr>SIZE_<wbr>KHR</code></a>
+ is the size of the LUID, in bytes.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_NODE_MASK"></a><a href="#CL_DEVICE_NODE_MASK"><code>CL_DEVICE_<wbr>NODE_<wbr>MASK</code></a></p>
+<p class="tableblock"><a href="#unified-spec">missing before</a> version 3.1.</p>
+<p class="tableblock">or</p>
+<p class="tableblock"><a id="CL_DEVICE_NODE_MASK_KHR"></a><a href="#CL_DEVICE_NODE_MASK_KHR"><code>CL_DEVICE_<wbr>NODE_<wbr>MASK_<wbr>KHR</code></a></p>
+<p class="tableblock">provided by the <code>cl_khr_device_uuid</code> extension.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uint</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns a node mask for the device.</p>
+<p class="tableblock"> It is not an error to query <a href="#CL_DEVICE_NODE_MASK"><code>CL_DEVICE_<wbr>NODE_<wbr>MASK</code></a>
+or <a href="#CL_DEVICE_NODE_MASK_KHR"><code>CL_DEVICE_<wbr>NODE_<wbr>MASK_<wbr>KHR</code></a>
+ when <a href="#CL_DEVICE_LUID_VALID"><code>CL_DEVICE_<wbr>LUID_<wbr>VALID</code></a>
+or <a href="#CL_DEVICE_LUID_VALID_KHR"><code>CL_DEVICE_<wbr>LUID_<wbr>VALID_<wbr>KHR</code></a>
+ returns <a href="#CL_FALSE"><code>CL_FALSE</code></a>, but in this case the returned node mask is
+ undefined.</p>
+<p class="tableblock"> When <a href="#CL_DEVICE_LUID_VALID_KHR"><code>CL_DEVICE_<wbr>LUID_<wbr>VALID_<wbr>KHR</code></a>
+or <a href="#CL_DEVICE_LUID_VALID_KHR"><code>CL_DEVICE_<wbr>LUID_<wbr>VALID_<wbr>KHR</code></a>
+ returns <a href="#CL_TRUE"><code>CL_TRUE</code></a>, the returned node mask must contain exactly one bit.
+ If the OpenCL device is running on an operating system that supports
+ the Direct3D 12 API and the OpenCL device corresponds to an individual
+ device in a linked device adapter, the returned node mask identifies
+ the Direct3D 12 node corresponding to the OpenCL device.
+ Otherwise, the returned node mask must be <code>1</code>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_INTEGER_DOT_PRODUCT_CAPABILITIES"></a><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_CAPABILITIES"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>CAPABILITIES</code></a></p>
+<p class="tableblock"><a href="#unified-spec">missing before</a> version 3.1.</p>
+<p class="tableblock">or</p>
+<p class="tableblock"><a id="CL_DEVICE_INTEGER_DOT_PRODUCT_CAPABILITIES_KHR"></a><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_CAPABILITIES_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>CAPABILITIES_<wbr>KHR</code></a></p>
+<p class="tableblock">provided by the <code>cl_khr_integer_dot_product</code> extension.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_device_<wbr>integer_<wbr>dot_<wbr>product_<wbr>capabilities</code></p>
+<p class="tableblock">or <code>cl_device_<wbr>integer_<wbr>dot_<wbr>product_<wbr>capabilities_<wbr>khr</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the integer dot product capabilities supported by the
+ device.</p>
+<p class="tableblock"> All implementations that support OpenCL C 3.1
+or <a href="#cl_khr_integer_dot_product"><code>cl_khr_<wbr>integer_<wbr>dot_<wbr>product</code></a>
+ must support <a id="CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_PACKED"></a><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_PACKED"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>INPUT_<wbr>4x8BIT_<wbr>PACKED</code></a>
+or <a id="CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_PACKED_KHR"></a><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_PACKED_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>INPUT_<wbr>4x8BIT_<wbr>PACKED_<wbr>KHR</code></a>
+ to indicate support for dot product built-in functions and, when SPIR-V
+ is supported, SPIR-V instructions that take four-component vectors of
+ 8-bit integers packed into 32-bit integers as input.</p>
+<p class="tableblock"> <a id="CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT"></a><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>INPUT_<wbr>4x8BIT</code></a>
+or <a id="CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_KHR"></a><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>INPUT_<wbr>4x8BIT_<wbr>KHR</code></a>
+ may be set to indicate support for dot product built-in functions and,
+ when SPIR-V is supported, SPIR-V instructions that take four-component
+ of 8-bit elements as input are supported.
+ <a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>INPUT_<wbr>4x8BIT_<wbr>KHR</code></a> must be set when
+ version 2.0 or higher of the <a href="#cl_khr_integer_dot_product"><code>cl_khr_<wbr>integer_<wbr>dot_<wbr>product</code></a> extension
+ is supported.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_8BIT"></a><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_8BIT"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>ACCELERATION_<wbr>PROPERTIES_<wbr>8BIT</code></a></p>
+<p class="tableblock"><a href="#unified-spec">missing before</a> version 3.1.</p>
+<p class="tableblock">or</p>
+<p class="tableblock"><a id="CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_8BIT_KHR"></a><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_8BIT_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>ACCELERATION_<wbr>PROPERTIES_<wbr>8BIT_<wbr>KHR</code></a></p>
+<p class="tableblock">provided by the <code>cl_khr_integer_dot_product</code> extension.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#cl_device_integer_dot_product_acceleration_properties"><code>cl_device_<wbr>integer_<wbr>dot_<wbr>product_<wbr>acceleration_<wbr>properties</code></a></p>
+<p class="tableblock">or <a href="#cl_device_integer_dot_product_acceleration_properties_khr"><code>cl_device_<wbr>integer_<wbr>dot_<wbr>product_<wbr>acceleration_<wbr>properties_<wbr>khr</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns a structure describing the exact 8-bit dot product
+ combinations that are <a href="#integer-dot-product-acceleration-properties">accelerated</a> on the device.
+ Each member is <a href="#CL_TRUE"><code>CL_TRUE</code></a> if the combination it corresponds to is
+ accelerated, <a href="#CL_FALSE"><code>CL_FALSE</code></a> otherwise.</p>
+<p class="tableblock"> <a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_8BIT_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>ACCELERATION_<wbr>PROPERTIES_<wbr>8BIT_<wbr>KHR</code></a> is
+ missing before version 2.0 of the <a href="#cl_khr_integer_dot_product"><code>cl_khr_<wbr>integer_<wbr>dot_<wbr>product</code></a>
+ extension.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_4x8BIT_PACKED"></a><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_4x8BIT_PACKED"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>ACCELERATION_<wbr>PROPERTIES_<wbr>4x8BIT_<wbr>PACKED</code></a></p>
+<p class="tableblock"><a href="#unified-spec">missing before</a> version 3.1.</p>
+<p class="tableblock">or</p>
+<p class="tableblock"><a id="CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_4x8BIT_PACKED_KHR"></a><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_4x8BIT_PACKED_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>ACCELERATION_<wbr>PROPERTIES_<wbr>4x8BIT_<wbr>PACKED_<wbr>KHR</code></a></p>
+<p class="tableblock">provided by the <code>cl_khr_integer_dot_product</code> extension.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#cl_device_integer_dot_product_acceleration_properties"><code>cl_device_<wbr>integer_<wbr>dot_<wbr>product_<wbr>acceleration_<wbr>properties</code></a></p>
+<p class="tableblock">or <a href="#cl_device_integer_dot_product_acceleration_properties_khr"><code>cl_device_<wbr>integer_<wbr>dot_<wbr>product_<wbr>acceleration_<wbr>properties_<wbr>khr</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns a structure describing the exact 4x8-bit packed dot product
+ combinations that are <a href="#integer-dot-product-acceleration-properties">accelerated</a> on the device.
+ Each member is <a href="#CL_TRUE"><code>CL_TRUE</code></a> if the combination it corresponds to is
+ accelerated, <a href="#CL_FALSE"><code>CL_FALSE</code></a> otherwise.</p>
+<p class="tableblock"> <a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_4x8BIT_PACKED_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>ACCELERATION_<wbr>PROPERTIES_<wbr>4x8BIT_<wbr>PACKED_<wbr>KHR</code></a> is
+ missing before version 2.0 of the <a href="#cl_khr_integer_dot_product"><code>cl_khr_<wbr>integer_<wbr>dot_<wbr>product</code></a>
+ extension.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_SPIRV_EXTENDED_INSTRUCTION_SETS"></a><a href="#CL_DEVICE_SPIRV_EXTENDED_INSTRUCTION_SETS"><code>CL_DEVICE_<wbr>SPIRV_<wbr>EXTENDED_<wbr>INSTRUCTION_<wbr>SETS</code></a></p>
+<p class="tableblock"><a href="#unified-spec">missing before</a> version 3.1.</p>
+<p class="tableblock">or</p>
+<p class="tableblock"><a id="CL_DEVICE_SPIRV_EXTENDED_INSTRUCTION_SETS_KHR"></a><a href="#CL_DEVICE_SPIRV_EXTENDED_INSTRUCTION_SETS_KHR"><code>CL_DEVICE_<wbr>SPIRV_<wbr>EXTENDED_<wbr>INSTRUCTION_<wbr>SETS_<wbr>KHR</code></a></p>
+<p class="tableblock">provided by the <code>cl_khr_spirv_queries</code> extension.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">const <code>char</code>*[]</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns an array of null-terminated strings, where each string describes
+ a SPIR-V extended instruction set that is supported by the device.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_SPIRV_EXTENSIONS"></a><a href="#CL_DEVICE_SPIRV_EXTENSIONS"><code>CL_DEVICE_<wbr>SPIRV_<wbr>EXTENSIONS</code></a></p>
+<p class="tableblock"><a href="#unified-spec">missing before</a> version 3.1.</p>
+<p class="tableblock">or</p>
+<p class="tableblock"><a id="CL_DEVICE_SPIRV_EXTENSIONS_KHR"></a><a href="#CL_DEVICE_SPIRV_EXTENSIONS_KHR"><code>CL_DEVICE_<wbr>SPIRV_<wbr>EXTENSIONS_<wbr>KHR</code></a></p>
+<p class="tableblock">provided by the <code>cl_khr_spirv_queries</code> extension.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">const <code>char</code>*[]</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns an array of null-terminated strings, where each string describes
+ a SPIR-V extension that is supported by the device.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_SPIRV_CAPABILITIES"></a><a href="#CL_DEVICE_SPIRV_CAPABILITIES"><code>CL_DEVICE_<wbr>SPIRV_<wbr>CAPABILITIES</code></a></p>
+<p class="tableblock"><a href="#unified-spec">missing before</a> version 3.1.</p>
+<p class="tableblock">or</p>
+<p class="tableblock"><a id="CL_DEVICE_SPIRV_CAPABILITIES_KHR"></a><a href="#CL_DEVICE_SPIRV_CAPABILITIES_KHR"><code>CL_DEVICE_<wbr>SPIRV_<wbr>CAPABILITIES_<wbr>KHR</code></a></p>
+<p class="tableblock">provided by the <code>cl_khr_spirv_queries</code> extension.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uint</code>[]</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns an array of SPIR-V token values, where each value describes a
+ SPIR-V capability that is supported by the device.</p></td>
+</tr>
+<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_COMMAND_BUFFER_CAPABILITIES_KHR"></a><a href="#CL_DEVICE_COMMAND_BUFFER_CAPABILITIES_KHR"><code>CL_DEVICE_<wbr>COMMAND_<wbr>BUFFER_<wbr>CAPABILITIES_<wbr>KHR</code></a></p>
<p class="tableblock">provided by the <code>cl_khr_command_buffer</code> extension.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_device_<wbr>command_<wbr>buffer_<wbr>capabilities_<wbr>khr</code></p></td>
@@ -7751,9 +8053,8 @@
contain device-side kernel-enqueue calls.</p>
<p class="tableblock">provided by the <code>cl_khr_command_buffer</code> extension.</p>
<p class="tableblock"> <a id="CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR"></a><a href="#CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>CAPABILITY_<wbr>SIMULTANEOUS_<wbr>USE_<wbr>KHR</code></a> Device
- supports the command-buffers having a <a href="#pending_count">Pending
- Count</a> that exceeds 1.</p>
-<p class="tableblock">provided by the <code>cl_khr_command_buffer</code> extension.</p>
+ supports enqueueing command-buffers with a <a href="#simultaneous-use">simultaneous use</a> usage pattern.</p>
+<p class="tableblock">provided by the <code>cl_khr_command_buffer_mutable_dispatch</code> extension.</p>
<p class="tableblock"> <a id="CL_COMMAND_BUFFER_CAPABILITY_MULTIPLE_QUEUE_KHR"></a><a href="#CL_COMMAND_BUFFER_CAPABILITY_MULTIPLE_QUEUE_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>CAPABILITY_<wbr>MULTIPLE_<wbr>QUEUE_<wbr>KHR</code></a> Device
supports the ability to record commands to more than one
command-queue associated with <em>device</em> in a single command-buffer.</p>
@@ -7828,61 +8129,6 @@
<p class="tableblock">provided by the <code>cl_khr_command_buffer_mutable_dispatch</code> extension.</p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_UUID_KHR"></a><a href="#CL_DEVICE_UUID_KHR"><code>CL_DEVICE_<wbr>UUID_<wbr>KHR</code></a></p>
-<p class="tableblock">provided by the <code>cl_khr_device_uuid</code> extension.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uchar</code>[<a href="#CL_UUID_SIZE_KHR"><code>CL_UUID_<wbr>SIZE_<wbr>KHR</code></a>]</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns a universally unique identifier (UUID) for the device.</p>
-<p class="tableblock"> Device UUIDs must be immutable for a given device across processes,
- driver APIs, driver versions, and system reboots.</p>
-<p class="tableblock"> <a id="CL_UUID_SIZE_KHR"></a><a href="#CL_UUID_SIZE_KHR"><code>CL_UUID_<wbr>SIZE_<wbr>KHR</code></a> is the size of the UUID, in bytes.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DRIVER_UUID_KHR"></a><a href="#CL_DRIVER_UUID_KHR"><code>CL_DRIVER_<wbr>UUID_<wbr>KHR</code></a></p>
-<p class="tableblock">provided by the <code>cl_khr_device_uuid</code> extension.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uchar</code>[<a href="#CL_UUID_SIZE_KHR"><code>CL_UUID_<wbr>SIZE_<wbr>KHR</code></a>]</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns a universally unique identifier (UUID) for the software driver
- for the device.</p>
-<p class="tableblock"> <a href="#CL_UUID_SIZE_KHR"><code>CL_UUID_<wbr>SIZE_<wbr>KHR</code></a> is the size of the UUID, in bytes.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_LUID_VALID_KHR"></a><a href="#CL_DEVICE_LUID_VALID_KHR"><code>CL_DEVICE_<wbr>LUID_<wbr>VALID_<wbr>KHR</code></a></p>
-<p class="tableblock">provided by the <code>cl_khr_device_uuid</code> extension.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_bool</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <a href="#CL_TRUE"><code>CL_TRUE</code></a> if the device has a valid LUID and <a href="#CL_FALSE"><code>CL_FALSE</code></a>
- otherwise.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_LUID_KHR"></a><a href="#CL_DEVICE_LUID_KHR"><code>CL_DEVICE_<wbr>LUID_<wbr>KHR</code></a></p>
-<p class="tableblock">provided by the <code>cl_khr_device_uuid</code> extension.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uchar</code>[<a href="#CL_LUID_SIZE_KHR"><code>CL_LUID_<wbr>SIZE_<wbr>KHR</code></a>]</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns a locally unique identifier (LUID) for the device.</p>
-<p class="tableblock"> It is not an error to query <a href="#CL_DEVICE_LUID_KHR"><code>CL_DEVICE_<wbr>LUID_<wbr>KHR</code></a> when
- <a href="#CL_DEVICE_LUID_VALID_KHR"><code>CL_DEVICE_<wbr>LUID_<wbr>VALID_<wbr>KHR</code></a> returns <a href="#CL_FALSE"><code>CL_FALSE</code></a>, but in this case the
- returned LUID value is undefined.</p>
-<p class="tableblock"> When <a href="#CL_DEVICE_LUID_VALID_KHR"><code>CL_DEVICE_<wbr>LUID_<wbr>VALID_<wbr>KHR</code></a> returns <a href="#CL_TRUE"><code>CL_TRUE</code></a>, and the OpenCL
- device is running on the Windows operating system, the returned LUID
- value can be cast to an <code>LUID</code> object and must be equal to the locally
- unique identifier of an <code>IDXGIAdapter1</code> object that corresponds to the
- OpenCL device.</p>
-<p class="tableblock"> <a id="CL_LUID_SIZE_KHR"></a><a href="#CL_LUID_SIZE_KHR"><code>CL_LUID_<wbr>SIZE_<wbr>KHR</code></a> is the size of the LUID, in bytes.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_NODE_MASK_KHR"></a><a href="#CL_DEVICE_NODE_MASK_KHR"><code>CL_DEVICE_<wbr>NODE_<wbr>MASK_<wbr>KHR</code></a></p>
-<p class="tableblock">provided by the <code>cl_khr_device_uuid</code> extension.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uint</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns a node mask for the device.</p>
-<p class="tableblock"> It is not an error to query <a href="#CL_DEVICE_NODE_MASK_KHR"><code>CL_DEVICE_<wbr>NODE_<wbr>MASK_<wbr>KHR</code></a> when
- <a href="#CL_DEVICE_LUID_VALID_KHR"><code>CL_DEVICE_<wbr>LUID_<wbr>VALID_<wbr>KHR</code></a> returns <a href="#CL_FALSE"><code>CL_FALSE</code></a>, but in this case the
- returned node mask is undefined.</p>
-<p class="tableblock"> When <a href="#CL_DEVICE_LUID_VALID_KHR"><code>CL_DEVICE_<wbr>LUID_<wbr>VALID_<wbr>KHR</code></a> returns <a href="#CL_TRUE"><code>CL_TRUE</code></a>, the returned node
- mask must contain exactly one bit.
- If the OpenCL device is running on an operating system that supports
- the Direct3D 12 API and the OpenCL device corresponds to an individual
- device in a linked device adapter, the returned node mask identifies
- the Direct3D 12 node corresponding to the OpenCL device.
- Otherwise, the returned node mask must be <code>1</code>.</p></td>
-</tr>
-<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_EXTERNAL_MEMORY_IMPORT_HANDLE_TYPES_KHR"></a><a href="#CL_DEVICE_EXTERNAL_MEMORY_IMPORT_HANDLE_TYPES_KHR"><code>CL_DEVICE_<wbr>EXTERNAL_<wbr>MEMORY_<wbr>IMPORT_<wbr>HANDLE_<wbr>TYPES_<wbr>KHR</code></a></p>
<p class="tableblock">provided by the <code>cl_khr_external_memory</code> extension.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_external_<wbr>memory_<wbr>handle_<wbr>type_<wbr>khr</code>[]</p></td>
@@ -7934,49 +8180,6 @@
<a href="#CL_FP_INF_NAN"><code>CL_FP_<wbr>INF_<wbr>NAN</code></a>.</p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_INTEGER_DOT_PRODUCT_CAPABILITIES_KHR"></a><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_CAPABILITIES_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>CAPABILITIES_<wbr>KHR</code></a></p>
-<p class="tableblock">provided by the <code>cl_khr_integer_dot_product</code> extension.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_device_<wbr>integer_<wbr>dot_<wbr>product_<wbr>capabilities_<wbr>khr</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the integer dot product capabilities supported by the
- device.</p>
-<p class="tableblock"> <a id="CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_PACKED_KHR"></a><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_PACKED_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>INPUT_<wbr>4x8BIT_<wbr>PACKED_<wbr>KHR</code></a> is always
- set, indicating that all implementations that support
- <a href="#cl_khr_integer_dot_product"><code>cl_khr_<wbr>integer_<wbr>dot_<wbr>product</code></a> must support dot product built-in
- functions and, when SPIR-V is supported, SPIR-V instructions that
- take four-component vectors of 8-bit integers packed into 32-bit
- integers as input.</p>
-<p class="tableblock"> <a id="CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_KHR"></a><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>INPUT_<wbr>4x8BIT_<wbr>KHR</code></a> is set when dot
- product built-in functions and, when SPIR-V is supported, SPIR-V
- instructions that take four-component of 8-bit elements as input are
- supported.
- NOTE: <a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>INPUT_<wbr>4x8BIT_<wbr>KHR</code></a>
- must be set in version 2.x of the extension.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_8BIT_KHR"></a><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_8BIT_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>ACCELERATION_<wbr>PROPERTIES_<wbr>8BIT_<wbr>KHR</code></a></p>
-<p class="tableblock">provided by the <code>cl_khr_integer_dot_product</code> extension.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#cl_device_integer_dot_product_acceleration_properties_khr"><code>cl_device_<wbr>integer_<wbr>dot_<wbr>product_<wbr>acceleration_<wbr>properties_<wbr>khr</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns a structure describing the exact 8-bit dot product
- combinations that are <a href="#integer-dot-product-acceleration-properties">accelerated</a> on the device.
- Each member is <a href="#CL_TRUE"><code>CL_TRUE</code></a> if the combination it corresponds to is
- accelerated, <a href="#CL_FALSE"><code>CL_FALSE</code></a> otherwise.
- NOTE:
- <a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_8BIT_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>ACCELERATION_<wbr>PROPERTIES_<wbr>8BIT_<wbr>KHR</code></a> is
- missing before version 2.0 of the extension.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_4x8BIT_PACKED_KHR"></a><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_4x8BIT_PACKED_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>ACCELERATION_<wbr>PROPERTIES_<wbr>4x8BIT_<wbr>PACKED_<wbr>KHR</code></a></p>
-<p class="tableblock">provided by the <code>cl_khr_integer_dot_product</code> extension.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#cl_device_integer_dot_product_acceleration_properties_khr"><code>cl_device_<wbr>integer_<wbr>dot_<wbr>product_<wbr>acceleration_<wbr>properties_<wbr>khr</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns a structure describing the exact 4x8-bit packed dot product
- combinations that are <a href="#integer-dot-product-acceleration-properties">accelerated</a> on the device.
- Each member is <a href="#CL_TRUE"><code>CL_TRUE</code></a> if the combination it corresponds to is
- accelerated, <a href="#CL_FALSE"><code>CL_FALSE</code></a> otherwise.
- NOTE:
- <a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_4x8BIT_PACKED_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>ACCELERATION_<wbr>PROPERTIES_<wbr>4x8BIT_<wbr>PACKED_<wbr>KHR</code></a>
- is missing before version 2.0 of the extension.</p></td>
-</tr>
-<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_DEVICE_KERNEL_CLOCK_CAPABILITIES_KHR"></a><a href="#CL_DEVICE_KERNEL_CLOCK_CAPABILITIES_KHR"><code>CL_DEVICE_<wbr>KERNEL_<wbr>CLOCK_<wbr>CAPABILITIES_<wbr>KHR</code></a></p>
<p class="tableblock">provided by the <code>cl_khr_kernel_clock</code> extension.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_device_<wbr>kernel_<wbr>clock_<wbr>capabilities_<wbr>khr</code></p></td>
@@ -8063,9 +8266,10 @@
</tbody>
</table>
<div class="paragraph">
-<p>OpenCL 3 devices must report the following feature macros via
+<p>OpenCL 3.0 or newer devices must report the following feature macros via
<a href="#CL_DEVICE_OPENCL_C_FEATURES"><code>CL_DEVICE_<wbr>OPENCL_<wbr>C_<wbr>FEATURES</code></a> when the corresponding bit is set in the bitfield
-returned for <a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_CAPABILITIES_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>CAPABILITIES_<wbr>KHR</code></a>:</p>
+returned for <a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_CAPABILITIES"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>CAPABILITIES</code></a>
+or <a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_CAPABILITIES_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>CAPABILITIES_<wbr>KHR</code></a>:</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
@@ -8080,17 +8284,19 @@
</thead>
<tbody>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_PACKED_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>INPUT_<wbr>4x8BIT_<wbr>PACKED_<wbr>KHR</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_PACKED"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>INPUT_<wbr>4x8BIT_<wbr>PACKED</code></a></p>
+<p class="tableblock">or <a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_PACKED_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>INPUT_<wbr>4x8BIT_<wbr>PACKED_<wbr>KHR</code></a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>__opencl_c_<wbr>integer_<wbr>dot_<wbr>product_<wbr>input_<wbr>4x8bit_<wbr>packed</code></p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>INPUT_<wbr>4x8BIT_<wbr>KHR</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>INPUT_<wbr>4x8BIT</code></a></p>
+<p class="tableblock">or <a href="#CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_KHR"><code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>INPUT_<wbr>4x8BIT_<wbr>KHR</code></a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>__opencl_c_<wbr>integer_<wbr>dot_<wbr>product_<wbr>input_<wbr>4x8bit</code></p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
-<p>OpenCL 3 devices must report the following feature macros via
+<p>OpenCL 3.0 devices must report the following feature macros via
<a href="#CL_DEVICE_OPENCL_C_FEATURES"><code>CL_DEVICE_<wbr>OPENCL_<wbr>C_<wbr>FEATURES</code></a> when the corresponding bit is set in the bitfield
returned for <a href="#CL_DEVICE_KERNEL_CLOCK_CAPABILITIES_KHR"><code>CL_DEVICE_<wbr>KERNEL_<wbr>CLOCK_<wbr>CAPABILITIES_<wbr>KHR</code></a>:</p>
</div>
@@ -8160,22 +8366,51 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a> if <em>device</em> is not a valid device.</p>
+<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>device</em> is not a valid device</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>param_name</em> is not one of the supported values, or
-if the size in bytes specified by <em>param_value_size</em> is less than size of
-the return type specified in the
-<a href="#device-queries-table">Device Queries</a> table
-and <em>param_value</em> is not <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>param_name</em> is not one of the supported values</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if the size in bytes specified by <em>param_value_size</em> is less than the size of
+the return type specified in the <a href="#device-queries-table">Device Queries</a>
+table and <em>param_value</em> is not <code>NULL</code></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -8184,8 +8419,23 @@
<div class="openblock">
<div class="content">
<div id="integer-dot-product-acceleration-properties" class="paragraph">
-<p>The <a href="#cl_device_integer_dot_product_acceleration_properties_khr"><code>cl_device_<wbr>integer_<wbr>dot_<wbr>product_<wbr>acceleration_<wbr>properties_<wbr>khr</code></a> structure
-describes the exact dot product operations that are accelerated on the device:</p>
+<p>The <a href="#cl_device_integer_dot_product_acceleration_properties"><code>cl_device_<wbr>integer_<wbr>dot_<wbr>product_<wbr>acceleration_<wbr>properties</code></a> structure:</p>
+</div>
+<div id="cl_device_integer_dot_product_acceleration_properties" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="opencl"><span class="c1">// Provided by CL_VERSION_3_1</span>
+<span class="k">typedef</span> <span class="k">struct</span> <span class="nc">cl_device_integer_dot_product_acceleration_properties</span> <span class="p">{</span>
+ <span class="kt">cl_bool</span> <span class="n">signed_accelerated</span><span class="p">;</span>
+ <span class="kt">cl_bool</span> <span class="n">unsigned_accelerated</span><span class="p">;</span>
+ <span class="kt">cl_bool</span> <span class="n">mixed_signedness_accelerated</span><span class="p">;</span>
+ <span class="kt">cl_bool</span> <span class="n">accumulating_saturating_signed_accelerated</span><span class="p">;</span>
+ <span class="kt">cl_bool</span> <span class="n">accumulating_saturating_unsigned_accelerated</span><span class="p">;</span>
+ <span class="kt">cl_bool</span> <span class="n">accumulating_saturating_mixed_signedness_accelerated</span><span class="p">;</span>
+<span class="p">}</span> <span class="n">cl_device_integer_dot_product_acceleration_properties</span><span class="p">;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>or the equivalent <a href="#cl_device_integer_dot_product_acceleration_properties_khr"><code>cl_device_<wbr>integer_<wbr>dot_<wbr>product_<wbr>acceleration_<wbr>properties_<wbr>khr</code></a> structure:</p>
</div>
<div id="cl_device_integer_dot_product_acceleration_properties_khr" class="listingblock">
<div class="content">
@@ -8200,6 +8450,9 @@
<span class="p">}</span> <span class="kt">cl_device_integer_dot_product_acceleration_properties_khr</span><span class="p">;</span></code></pre>
</div>
</div>
+<div class="paragraph">
+<p>describes the exact dot product operations that are accelerated on the device.</p>
+</div>
<div class="ulist">
<ul>
<li>
@@ -8344,22 +8597,60 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a> if <em>device</em> is not a valid device.</p>
+<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>device</em> is not a valid device</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if the platform associated with <em>device</em> does not
-support device and host timer synchronization.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the platform associated with <em>device</em> does not support device and host
+timer synchronization</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>host_timestamp</em> or <em>device_timestamp</em> is <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>host_timestamp</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if <em>device_timestamp</em> is <code>NULL</code></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -8426,29 +8717,119 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a> if <em>device</em> is not a valid device.</p>
+<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>device</em> is not a valid device</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if the platform associated with <em>device</em> does not
-support device and host timer synchronization.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the platform associated with <em>device</em> does not support device and host
+timer synchronization</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>host_timestamp</em> is <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>host_timestamp</em> is <code>NULL</code></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
</div>
</div>
<div class="sect3">
-<h4 id="_sharing_directx9_media_surfaces_with_opencl_images"><a class="anchor" href="#_sharing_directx9_media_surfaces_with_opencl_images"></a>4.2.1. Sharing DirectX9 Media Surfaces With OpenCL Images</h4>
+<h4 id="required-opencl-extensions"><a class="anchor" href="#required-opencl-extensions"></a>4.2.1. Required OpenCL Extensions</h4>
+<div class="paragraph">
+<p>Some OpenCL features were originally OpenCL extensions before adoption into the
+core OpenCL standard.
+This section describes the OpenCL extensions that must be reported by a device
+through <a href="#CL_DEVICE_EXTENSIONS"><code>CL_DEVICE_<wbr>EXTENSIONS</code></a> or <a href="#CL_DEVICE_EXTENSIONS_WITH_VERSION"><code>CL_DEVICE_<wbr>EXTENSIONS_<wbr>WITH_<wbr>VERSION</code></a> for the
+OpenCL version reported by <a href="#CL_DEVICE_VERSION"><code>CL_DEVICE_<wbr>VERSION</code></a>.</p>
+</div>
+<div class="paragraph">
+<p>The following Khronos extension names must be returned by all devices that
+support OpenCL 1.1 or newer:</p>
+</div>
+<div class="paragraph">
+<p><a href="#cl_khr_byte_addressable_store"><code>cl_khr_<wbr>byte_<wbr>addressable_<wbr>store</code></a><br>
+<a href="#cl_khr_global_int32_base_atomics"><code>cl_khr_<wbr>global_<wbr>int32_<wbr>base_<wbr>atomics</code></a><br>
+<a href="#cl_khr_global_int32_extended_atomics"><code>cl_khr_<wbr>global_<wbr>int32_<wbr>extended_<wbr>atomics</code></a><br>
+<a href="#cl_khr_local_int32_base_atomics"><code>cl_khr_<wbr>local_<wbr>int32_<wbr>base_<wbr>atomics</code></a><br>
+<a href="#cl_khr_local_int32_extended_atomics"><code>cl_khr_<wbr>local_<wbr>int32_<wbr>extended_<wbr>atomics</code></a></p>
+</div>
+<div class="paragraph">
+<p>The following Khronos extension names must be returned by all devices that
+support OpenCL 1.2 or newer when and only when the optional feature is
+supported:</p>
+</div>
+<div class="paragraph">
+<p><a href="#cl_khr_fp64"><code>cl_khr_<wbr>fp64</code></a></p>
+</div>
+<div class="paragraph">
+<p>The following Khronos extension names must be returned by all devices that
+support OpenCL 2.0, OpenCL 2.1, or OpenCL 2.2.
+For devices that support OpenCL 3.0 or newer, these extension names must be
+returned when and only when the optional feature is supported:</p>
+</div>
+<div class="paragraph">
+<p><a href="#cl_khr_3d_image_writes"><code>cl_khr_<wbr>3d_<wbr>image_<wbr>writes</code></a><br>
+<a href="#cl_khr_depth_images"><code>cl_khr_<wbr>depth_<wbr>images</code></a><br>
+<a href="#cl_khr_image2d_from_buffer"><code>cl_khr_<wbr>image2d_<wbr>from_<wbr>buffer</code></a></p>
+</div>
+<div class="paragraph">
+<p>The following Khronos extension names must be returned by all devices that
+support OpenCL 3.1 or newer:</p>
+</div>
+<div class="paragraph">
+<p><a href="#cl_khr_device_uuid"><code>cl_khr_<wbr>device_<wbr>uuid</code></a><br>
+<a href="#cl_khr_extended_bit_ops"><code>cl_khr_<wbr>extended_<wbr>bit_<wbr>ops</code></a><br>
+<a href="#cl_khr_integer_dot_product"><code>cl_khr_<wbr>integer_<wbr>dot_<wbr>product</code></a><br>
+<a href="#cl_khr_spirv_queries"><code>cl_khr_<wbr>spirv_<wbr>queries</code></a><br>
+<a href="#cl_khr_subgroup_extended_types"><code>cl_khr_<wbr>subgroup_<wbr>extended_<wbr>types</code></a><br>
+<a href="#cl_khr_subgroup_rotate"><code>cl_khr_<wbr>subgroup_<wbr>rotate</code></a><br>
+<a href="#cl_khr_subgroup_shuffle"><code>cl_khr_<wbr>subgroup_<wbr>shuffle</code></a><br>
+<a href="#cl_khr_subgroup_shuffle_relative"><code>cl_khr_<wbr>subgroup_<wbr>shuffle_<wbr>relative</code></a><br>
+<a href="#cl_khr_suggested_local_work_size"><code>cl_khr_<wbr>suggested_<wbr>local_<wbr>work_<wbr>size</code></a></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_sharing_directx9_media_surfaces_with_opencl_images"><a class="anchor" href="#_sharing_directx9_media_surfaces_with_opencl_images"></a>4.2.2. Sharing DirectX9 Media Surfaces With OpenCL Images</h4>
<div class="paragraph">
<p>This section discusses OpenCL functions that allow applications to use media
surfaces as OpenCL memory objects.
@@ -8460,7 +8841,7 @@
OpenCL context has been created from a media adapter.</p>
</div>
<div class="sect4">
-<h5 id="_querying_opencl_devices_corresponding_to_media_adapters"><a class="anchor" href="#_querying_opencl_devices_corresponding_to_media_adapters"></a>4.2.1.1. Querying OpenCL Devices Corresponding to Media Adapters</h5>
+<h5 id="_querying_opencl_devices_corresponding_to_media_adapters"><a class="anchor" href="#_querying_opencl_devices_corresponding_to_media_adapters"></a>4.2.2.1. Querying OpenCL Devices Corresponding to Media Adapters</h5>
<div class="paragraph">
<p>Media adapters are an abstraction associated with devices that provide media
capabilities.
@@ -8609,34 +8990,78 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_PLATFORM"><code>CL_INVALID_<wbr>PLATFORM</code></a> if <em>platform</em> is not a valid platform.</p>
+<p><a href="#CL_INVALID_PLATFORM"><code>CL_INVALID_<wbr>PLATFORM</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>platform</em> is not a valid platform</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>num_media_adapters</em> is zero or if
-<em>media_adapters_type</em> is <code>NULL</code> or if <em>media_adapters</em> is <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>num_media_adapters</em> is zero</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if any of the entries in <em>media_adapters_type</em> or
-<em>media_adapters</em> is not a valid value.</p>
+<p>if <em>media_adapters_type</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>media_adapter_set</em> is not a valid value.</p>
+<p>if <em>media_adapters</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>num_entries</em> is equal to zero and <em>devices</em> is
-not <code>NULL</code> or if both <em>num_devices</em> and <em>devices</em> are <code>NULL</code>.</p>
+<p>if any of the entries in <em>media_adapters_type</em> is not a valid value</p>
</li>
<li>
-<p><a href="#CL_DEVICE_NOT_FOUND"><code>CL_DEVICE_<wbr>NOT_<wbr>FOUND</code></a> if no OpenCL devices that correspond to adapters
-specified in <em>media_adapters</em> and <em>media_adapters_type</em> were found.</p>
+<p>if any of the entries in <em>media_adapters</em> are not valid</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the device.</p>
+<p>if <em>media_adapter_set</em> is not a valid value</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p>if <em>num_entries</em> is equal to zero and <em>devices</em> is not <code>NULL</code></p>
+</li>
+<li>
+<p>if both <em>num_devices</em> and <em>devices</em> are <code>NULL</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_DEVICE_NOT_FOUND"><code>CL_DEVICE_<wbr>NOT_<wbr>FOUND</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if no OpenCL devices that correspond to adapters specified in
+<em>media_adapters</em> and <em>media_adapters_type</em> were found</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -8645,7 +9070,7 @@
</div>
</div>
<div class="sect3">
-<h4 id="_sharing_direct3d_10_resources_with_opencl_memory_objects"><a class="anchor" href="#_sharing_direct3d_10_resources_with_opencl_memory_objects"></a>4.2.2. Sharing Direct3D 10 Resources With OpenCL Memory Objects</h4>
+<h4 id="_sharing_direct3d_10_resources_with_opencl_memory_objects"><a class="anchor" href="#_sharing_direct3d_10_resources_with_opencl_memory_objects"></a>4.2.3. Sharing Direct3D 10 Resources With OpenCL Memory Objects</h4>
<div class="paragraph">
<p>This section discusses OpenCL functions that allow applications to use
Direct3D 10 resources as OpenCL memory objects.
@@ -8658,7 +9083,7 @@
the OpenCL context has been created from a Direct3D 10 device.</p>
</div>
<div class="sect4">
-<h5 id="_querying_opencl_devices_corresponding_to_direct3d_10_devices"><a class="anchor" href="#_querying_opencl_devices_corresponding_to_direct3d_10_devices"></a>4.2.2.1. Querying OpenCL Devices Corresponding to Direct3D 10 Devices</h5>
+<h5 id="_querying_opencl_devices_corresponding_to_direct3d_10_devices"><a class="anchor" href="#_querying_opencl_devices_corresponding_to_direct3d_10_devices"></a>4.2.3.1. Querying OpenCL Devices Corresponding to Direct3D 10 Devices</h5>
<div class="paragraph">
<p>The OpenCL devices corresponding to a Direct3D 10 device may be queried.
The OpenCL devices corresponding to a DXGI adapter may also be queried.
@@ -8801,17 +9226,65 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_PLATFORM"><code>CL_INVALID_<wbr>PLATFORM</code></a> if <em>platform</em> is not a valid platform.</p>
+<p><a href="#CL_INVALID_PLATFORM"><code>CL_INVALID_<wbr>PLATFORM</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>platform</em> is not a valid platform</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>d3d_device_source</em> is not a valid value,
-<em>d3d_device_set</em> is not a valid value, <em>num_entries</em> is equal to zero
-and <em>devices</em> is not <code>NULL</code>, or if both <em>num_devices</em> and <em>devices</em> are
-<code>NULL</code>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>d3d_device_source</em> is not a valid value</p>
</li>
<li>
-<p><a href="#CL_DEVICE_NOT_FOUND"><code>CL_DEVICE_<wbr>NOT_<wbr>FOUND</code></a> if no OpenCL devices that correspond to
-<em>d3d_object</em> were found.</p>
+<p>if <em>d3d_device_set</em> is not a valid value</p>
+</li>
+<li>
+<p>if <em>num_entries</em> is equal to zero and <em>devices</em> is not <code>NULL</code></p>
+</li>
+<li>
+<p>if both <em>num_devices</em> and <em>devices</em> are <code>NULL</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_DEVICE_NOT_FOUND"><code>CL_DEVICE_<wbr>NOT_<wbr>FOUND</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if no OpenCL devices that correspond to <em>d3d_object</em> were found.</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -8820,7 +9293,7 @@
</div>
</div>
<div class="sect3">
-<h4 id="_sharing_direct3d_11_resources_with_opencl_memory_objects"><a class="anchor" href="#_sharing_direct3d_11_resources_with_opencl_memory_objects"></a>4.2.3. Sharing Direct3D 11 Resources With OpenCL Memory Objects</h4>
+<h4 id="_sharing_direct3d_11_resources_with_opencl_memory_objects"><a class="anchor" href="#_sharing_direct3d_11_resources_with_opencl_memory_objects"></a>4.2.4. Sharing Direct3D 11 Resources With OpenCL Memory Objects</h4>
<div class="paragraph">
<p>This section discusses OpenCL functions that allow applications to use
Direct3D 11 resources as OpenCL memory objects.
@@ -8833,7 +9306,7 @@
the OpenCL context has been created from a Direct3D 11 device.</p>
</div>
<div class="sect4">
-<h5 id="_querying_opencl_devices_corresponding_to_direct3d_11_devices"><a class="anchor" href="#_querying_opencl_devices_corresponding_to_direct3d_11_devices"></a>4.2.3.1. Querying OpenCL Devices Corresponding to Direct3D 11 Devices</h5>
+<h5 id="_querying_opencl_devices_corresponding_to_direct3d_11_devices"><a class="anchor" href="#_querying_opencl_devices_corresponding_to_direct3d_11_devices"></a>4.2.4.1. Querying OpenCL Devices Corresponding to Direct3D 11 Devices</h5>
<div class="paragraph">
<p>The OpenCL devices corresponding to a Direct3D 11 device may be queried.
The OpenCL devices corresponding to a DXGI adapter may also be queried.
@@ -8976,17 +9449,65 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_PLATFORM"><code>CL_INVALID_<wbr>PLATFORM</code></a> if <em>platform</em> is not a valid platform.</p>
+<p><a href="#CL_INVALID_PLATFORM"><code>CL_INVALID_<wbr>PLATFORM</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>platform</em> is not a valid platform</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>d3d_device_source</em> is not a valid value,
-<em>d3d_device_set</em> is not a valid value, <em>num_entries</em> is equal to zero
-and <em>devices</em> is not <code>NULL</code>, or if both <em>num_devices</em> and <em>devices</em> are
-<code>NULL</code>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>d3d_device_source</em> is not a valid value</p>
</li>
<li>
-<p><a href="#CL_DEVICE_NOT_FOUND"><code>CL_DEVICE_<wbr>NOT_<wbr>FOUND</code></a> if no OpenCL devices that correspond to
-<em>d3d_object</em> were found.</p>
+<p>if <em>d3d_device_set</em> is not a valid value</p>
+</li>
+<li>
+<p>if <em>num_entries</em> is equal to zero and <em>devices</em> is not <code>NULL</code></p>
+</li>
+<li>
+<p>if both <em>num_devices</em> and <em>devices</em> are <code>NULL</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_DEVICE_NOT_FOUND"><code>CL_DEVICE_<wbr>NOT_<wbr>FOUND</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if no OpenCL devices that correspond to <em>d3d_object</em> were found.</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -9163,38 +9684,89 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a> if <em>in_device</em> is not a valid device.</p>
+<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>in_device</em> is not a valid device</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if values specified in <em>properties</em> are not valid or if
-values specified in <em>properties</em> are valid but not supported by the
-device.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if values specified in <em>properties</em> are not valid</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>out_devices</em> is not <code>NULL</code> and <em>num_devices</em> is
-less than the number of sub-devices created by the partition scheme.</p>
+<p>if values specified in <em>properties</em> are valid but not are supported by
+<em>in_device</em></p>
</li>
<li>
-<p><a href="#CL_DEVICE_PARTITION_FAILED"><code>CL_DEVICE_<wbr>PARTITION_<wbr>FAILED</code></a> if the partition name is supported by the
-implementation but in_device could not be further partitioned.</p>
+<p>if <em>out_devices</em> is not <code>NULL</code> and <em>num_devices</em> is less than the number
+of sub-devices created by the partition scheme</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_DEVICE_PARTITION_COUNT"><code>CL_INVALID_<wbr>DEVICE_<wbr>PARTITION_<wbr>COUNT</code></a> if the partition name specified in
-<em>properties</em> is <a href="#CL_DEVICE_PARTITION_BY_COUNTS"><code>CL_DEVICE_<wbr>PARTITION_<wbr>BY_<wbr>COUNTS</code></a> and the number of
-sub-devices requested exceeds <a href="#CL_DEVICE_PARTITION_MAX_SUB_DEVICES"><code>CL_DEVICE_<wbr>PARTITION_<wbr>MAX_<wbr>SUB_<wbr>DEVICES</code></a> or the
-total number of compute units requested exceeds
-<a href="#CL_DEVICE_MAX_COMPUTE_UNITS"><code>CL_DEVICE_<wbr>MAX_<wbr>COMPUTE_<wbr>UNITS</code></a> for <em>in_device</em>, or the number of
-compute units requested for one or more sub-devices is less than zero or
-the number of sub-devices requested exceeds
-<a href="#CL_DEVICE_MAX_COMPUTE_UNITS"><code>CL_DEVICE_<wbr>MAX_<wbr>COMPUTE_<wbr>UNITS</code></a> for <em>in_device</em>.</p>
+<p><a href="#CL_DEVICE_PARTITION_FAILED"><code>CL_DEVICE_<wbr>PARTITION_<wbr>FAILED</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the partition name is supported by the implementation but in_device
+could not be further partitioned</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_INVALID_DEVICE_PARTITION_COUNT"><code>CL_INVALID_<wbr>DEVICE_<wbr>PARTITION_<wbr>COUNT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the partition name specified in <em>properties</em> is
+<a href="#CL_DEVICE_PARTITION_BY_COUNTS"><code>CL_DEVICE_<wbr>PARTITION_<wbr>BY_<wbr>COUNTS</code></a> and the number of sub-devices requested
+exceeds <a href="#CL_DEVICE_PARTITION_MAX_SUB_DEVICES"><code>CL_DEVICE_<wbr>PARTITION_<wbr>MAX_<wbr>SUB_<wbr>DEVICES</code></a></p>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p>if the total number of compute units requested exceeds
+<a href="#CL_DEVICE_MAX_COMPUTE_UNITS"><code>CL_DEVICE_<wbr>MAX_<wbr>COMPUTE_<wbr>UNITS</code></a> for <em>in_device</em></p>
+</li>
+<li>
+<p>if the number of compute units requested for one or more sub-devices is
+less than zero</p>
+</li>
+<li>
+<p>if the number of sub-devices requested for one or more sub-devices
+exceeds <a href="#CL_DEVICE_MAX_COMPUTE_UNITS"><code>CL_DEVICE_<wbr>MAX_<wbr>COMPUTE_<wbr>UNITS</code></a> for <em>in_device</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -9282,15 +9854,36 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a> if <em>device</em> is not a valid device.</p>
+<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>device</em> is not a valid device</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -9341,15 +9934,36 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a> if <em>device</em> is not a valid device.</p>
+<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>device</em> is not a valid device</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -9401,7 +10015,7 @@
<li>
<p><em>devices</em> is a pointer to a list of unique devices returned by
<a href="#clGetDeviceIDs"><strong>clGetDeviceIDs</strong></a> or sub-devices created by <a href="#clCreateSubDevices"><strong>clCreateSubDevices</strong></a> for a
-platform. <sup class="footnote">[<a id="_footnoteref_11" class="footnote" href="#_footnotedef_11" title="View footnote.">11</a>]</sup></p>
+platform. <sup class="footnote">[<a id="_footnoteref_12" class="footnote" href="#_footnotedef_12" title="View footnote.">12</a>]</sup></p>
</li>
<li>
<p><em>pfn_notify</em> is a callback function that can be registered by the
@@ -9476,7 +10090,7 @@
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_bool</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Specifies whether the user is responsible for synchronization
between OpenCL and other APIs.
- Please refer to the specific sections in the OpenCL Extension
+ Please refer to the specific sections in the OpenCL
Specification that describe sharing with other APIs for restrictions
on using this flag.</p>
<p class="tableblock"> Defaults to <a href="#CL_FALSE"><code>CL_FALSE</code></a> if not specified.</p></td>
@@ -9649,41 +10263,92 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_PLATFORM"><code>CL_INVALID_<wbr>PLATFORM</code></a> if no platform is specified in <em>properties</em> and no
-platform could be selected, or if the platform specified in <em>properties</em> is
-not a valid platform.</p>
+<p><a href="#CL_INVALID_PLATFORM"><code>CL_INVALID_<wbr>PLATFORM</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if no platform is specified in <em>properties</em> and no platform could be
+selected</p>
</li>
<li>
-<p><a href="#CL_INVALID_PROPERTY"><code>CL_INVALID_<wbr>PROPERTY</code></a> if a context property name in <em>properties</em> is not a
-supported property name, if the value specified for a supported property
-name is not valid, or if the same property name is specified more than
-once.
-This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
+<p>if the platform specified in <em>properties</em> is not a valid platform</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>devices</em> is <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_PROPERTY"><code>CL_INVALID_<wbr>PROPERTY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if a context property name in <em>properties</em> is not a supported property name</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>num_devices</em> is equal to zero.</p>
+<p>if the value specified for a supported property name is not valid</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>pfn_notify</em> is <code>NULL</code> but <em>user_data</em> is not
-<code>NULL</code>.</p>
+<p>if the same property name is specified more than once</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a> if any device in <em>devices</em> is not a valid device.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>devices</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_DEVICE_NOT_AVAILABLE"><code>CL_DEVICE_<wbr>NOT_<wbr>AVAILABLE</code></a> if a device in <em>devices</em> is currently not
-available even though the device was returned by <a href="#clGetDeviceIDs"><strong>clGetDeviceIDs</strong></a>.</p>
+<p>if <em>num_devices</em> is equal to zero</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if <em>pfn_notify</em> is <code>NULL</code> and <em>user_data</em> is not <code>NULL</code></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if any device in <em>devices</em> is not a valid device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_DEVICE_NOT_AVAILABLE"><code>CL_DEVICE_<wbr>NOT_<wbr>AVAILABLE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if a device in <em>devices</em> is currently not available</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -9694,12 +10359,18 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_DX9_MEDIA_ADAPTER_KHR"><code>CL_INVALID_<wbr>DX9_<wbr>MEDIA_<wbr>ADAPTER_<wbr>KHR</code></a> if any of the values of the
-properties <a href="#CL_CONTEXT_ADAPTER_D3D9_KHR"><code>CL_CONTEXT_<wbr>ADAPTER_<wbr>D3D9_<wbr>KHR</code></a>,
+<p><a href="#CL_INVALID_DX9_MEDIA_ADAPTER_KHR"><code>CL_INVALID_<wbr>DX9_<wbr>MEDIA_<wbr>ADAPTER_<wbr>KHR</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if any of the values of the properties <a href="#CL_CONTEXT_ADAPTER_D3D9_KHR"><code>CL_CONTEXT_<wbr>ADAPTER_<wbr>D3D9_<wbr>KHR</code></a>,
<a href="#CL_CONTEXT_ADAPTER_D3D9EX_KHR"><code>CL_CONTEXT_<wbr>ADAPTER_<wbr>D3D9EX_<wbr>KHR</code></a> or <a href="#CL_CONTEXT_ADAPTER_DXVA_KHR"><code>CL_CONTEXT_<wbr>ADAPTER_<wbr>DXVA_<wbr>KHR</code></a> is
non-<code>NULL</code> and does not specify a valid media adapter with which the
<em>cl_device_ids</em> against which this context is to be created may
-interoperate.</p>
+interoperate</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -9710,15 +10381,29 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_D3D10_DEVICE_KHR"><code>CL_INVALID_<wbr>D3D10_<wbr>DEVICE_<wbr>KHR</code></a> if the value of the property
-<a href="#CL_CONTEXT_D3D10_DEVICE_KHR"><code>CL_CONTEXT_<wbr>D3D10_<wbr>DEVICE_<wbr>KHR</code></a> is non-<code>NULL</code> and does not specify a valid
-Direct3D 10 device with which the <em>cl_device_ids</em> against which this
-context is to be created may interoperate.</p>
+<p><a href="#CL_INVALID_D3D10_DEVICE_KHR"><code>CL_INVALID_<wbr>D3D10_<wbr>DEVICE_<wbr>KHR</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the value of the property <a href="#CL_CONTEXT_D3D10_DEVICE_KHR"><code>CL_CONTEXT_<wbr>D3D10_<wbr>DEVICE_<wbr>KHR</code></a> is non-<code>NULL</code>
+and does not specify a valid Direct3D 10 device with which the
+<em>cl_device_ids</em> against which this context is to be created may
+interoperate</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if Direct3D 10 interoperability is specified by
-setting <a href="#CL_INVALID_D3D10_DEVICE_KHR"><code>CL_INVALID_<wbr>D3D10_<wbr>DEVICE_<wbr>KHR</code></a> to a non-<code>NULL</code> value, and
-interoperability with another graphics API is also specified.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if Direct3D 10 interoperability is specified by setting
+<a href="#CL_INVALID_D3D10_DEVICE_KHR"><code>CL_INVALID_<wbr>D3D10_<wbr>DEVICE_<wbr>KHR</code></a> to a non-<code>NULL</code> value and interoperability
+with another graphics API is also specified</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -9729,15 +10414,29 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_D3D11_DEVICE_KHR"><code>CL_INVALID_<wbr>D3D11_<wbr>DEVICE_<wbr>KHR</code></a> if the value of the property
-<a href="#CL_CONTEXT_D3D11_DEVICE_KHR"><code>CL_CONTEXT_<wbr>D3D11_<wbr>DEVICE_<wbr>KHR</code></a> is non-<code>NULL</code> and does not specify a valid
-Direct3D 11 device with which the <em>cl_device_ids</em> against which this
-context is to be created may interoperate.</p>
+<p><a href="#CL_INVALID_D3D11_DEVICE_KHR"><code>CL_INVALID_<wbr>D3D11_<wbr>DEVICE_<wbr>KHR</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the value of the property <a href="#CL_CONTEXT_D3D11_DEVICE_KHR"><code>CL_CONTEXT_<wbr>D3D11_<wbr>DEVICE_<wbr>KHR</code></a> is non-<code>NULL</code>
+and does not specify a valid Direct3D 11 device with which the
+<em>cl_device_ids</em> against which this context is to be created may
+interoperate</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if Direct3D 11 interoperability is specified by
-setting <a href="#CL_INVALID_D3D11_DEVICE_KHR"><code>CL_INVALID_<wbr>D3D11_<wbr>DEVICE_<wbr>KHR</code></a> to a non-<code>NULL</code> value, and
-interoperability with another graphics API is also specified.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if Direct3D 11 interoperability is specified by setting
+<a href="#CL_INVALID_D3D11_DEVICE_KHR"><code>CL_INVALID_<wbr>D3D11_<wbr>DEVICE_<wbr>KHR</code></a> to a non-<code>NULL</code> value and interoperability
+with another graphics API is also specified</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -9748,10 +10447,12 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR"><code>CL_INVALID_<wbr>GL_<wbr>SHAREGROUP_<wbr>REFERENCE_<wbr>KHR</code></a> if a context was specified for
-an OpenGL or OpenGL ES implementation using the EGL, GLX, or WGL binding
-APIs, as <a href="#specifying-gl-context">described above</a>; and any of the
-following conditions hold:</p>
+<p><a href="#CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR"><code>CL_INVALID_<wbr>GL_<wbr>SHAREGROUP_<wbr>REFERENCE_<wbr>KHR</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if a context was specified for an OpenGL or OpenGL ES implementation
+using the EGL, GLX, or WGL binding APIs, as <a href="#specifying-gl-context">described above</a>; and any of the following conditions hold:</p>
<div class="ulist">
<ul>
<li>
@@ -9764,32 +10465,45 @@
<li>
<p>The specified context is not compatible with the OpenCL context being
created (for example, it exists in a physically distinct address space,
-such as another hardware device; or it does not support sharing data
-with OpenCL due to implementation restrictions).</p>
+such as another hardware device; or it does not support sharing data with
+OpenCL due to implementation restrictions).</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
</li>
<li>
-<p><a href="#CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR"><code>CL_INVALID_<wbr>GL_<wbr>SHAREGROUP_<wbr>REFERENCE_<wbr>KHR</code></a> if a share group was specified
-for a CGL-based OpenGL implementation by setting the property
-<a href="#CL_CGL_SHAREGROUP_KHR"><code>CL_CGL_<wbr>SHAREGROUP_<wbr>KHR</code></a>, and the specified share group does not identify
-a valid CGL share group object.</p>
+<p><a href="#CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR"><code>CL_INVALID_<wbr>GL_<wbr>SHAREGROUP_<wbr>REFERENCE_<wbr>KHR</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if a share group was specified for a CGL-based OpenGL implementation by
+setting the property <a href="#CL_CGL_SHAREGROUP_KHR"><code>CL_CGL_<wbr>SHAREGROUP_<wbr>KHR</code></a>, and the specified share group
+does not identify a valid CGL share group object</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if a context was specified as described above and
-any of the following conditions hold:</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if a context was specified as described above and any of the following
+conditions hold:</p>
<div class="ulist">
<ul>
<li>
<p>A context or share group object was specified for one of CGL, EGL, GLX,
-or WGL and the OpenGL implementation does not support that
-window-system binding API.</p>
+or WGL and the OpenGL implementation does not support that window-system
+binding API.</p>
</li>
<li>
<p>More than one of the properties <a href="#CL_CGL_SHAREGROUP_KHR"><code>CL_CGL_<wbr>SHAREGROUP_<wbr>KHR</code></a>,
-<a href="#CL_EGL_DISPLAY_KHR"><code>CL_EGL_<wbr>DISPLAY_<wbr>KHR</code></a>, <a href="#CL_GLX_DISPLAY_KHR"><code>CL_GLX_<wbr>DISPLAY_<wbr>KHR</code></a>, and <a href="#CL_WGL_HDC_KHR"><code>CL_WGL_<wbr>HDC_<wbr>KHR</code></a> is set
-to a non-default value.</p>
+<a href="#CL_EGL_DISPLAY_KHR"><code>CL_EGL_<wbr>DISPLAY_<wbr>KHR</code></a>, <a href="#CL_GLX_DISPLAY_KHR"><code>CL_GLX_<wbr>DISPLAY_<wbr>KHR</code></a>, and <a href="#CL_WGL_HDC_KHR"><code>CL_WGL_<wbr>HDC_<wbr>KHR</code></a> is set to
+a non-default value.</p>
</li>
<li>
<p>Both of the properties <a href="#CL_CGL_SHAREGROUP_KHR"><code>CL_CGL_<wbr>SHAREGROUP_<wbr>KHR</code></a> and <a href="#CL_GL_CONTEXT_KHR"><code>CL_GL_<wbr>CONTEXT_<wbr>KHR</code></a>
@@ -9802,10 +10516,19 @@
</ul>
</div>
</li>
+</ul>
+</div>
+</li>
<li>
-<p><a href="#CL_INVALID_PROPERTY"><code>CL_INVALID_<wbr>PROPERTY</code></a> if both <a href="#CL_CONTEXT_INTEROP_USER_SYNC"><code>CL_CONTEXT_<wbr>INTEROP_<wbr>USER_<wbr>SYNC</code></a>, and any of
-the properties defined by the <a href="#cl_khr_gl_sharing"><code>cl_khr_<wbr>gl_<wbr>sharing</code></a> extension are
-defined in <em>properties</em>.</p>
+<p><a href="#CL_INVALID_PROPERTY"><code>CL_INVALID_<wbr>PROPERTY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if both <a href="#CL_CONTEXT_INTEROP_USER_SYNC"><code>CL_CONTEXT_<wbr>INTEROP_<wbr>USER_<wbr>SYNC</code></a>, and any of the properties defined
+by the <a href="#cl_khr_gl_sharing"><code>cl_khr_<wbr>gl_<wbr>sharing</code></a> extension are defined in <em>properties</em></p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -9816,12 +10539,18 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_PROPERTY"><code>CL_INVALID_<wbr>PROPERTY</code></a> if the <a href="#cl_khr_terminate_context"><code>cl_khr_<wbr>terminate_<wbr>context</code></a> extension is
-supported and <a href="#CL_CONTEXT_TERMINATE_KHR"><code>CL_CONTEXT_<wbr>TERMINATE_<wbr>KHR</code></a> is set to <a href="#CL_TRUE"><code>CL_TRUE</code></a> in
-<em>properties</em>, but not all of the devices associated with the context
-support the ability to support context termination (i.e.
-<a href="#CL_DEVICE_TERMINATE_CAPABILITY_CONTEXT_KHR"><code>CL_DEVICE_<wbr>TERMINATE_<wbr>CAPABILITY_<wbr>CONTEXT_<wbr>KHR</code></a> is set for
-<a href="#CL_DEVICE_TERMINATE_CAPABILITY_KHR"><code>CL_DEVICE_<wbr>TERMINATE_<wbr>CAPABILITY_<wbr>KHR</code></a>).</p>
+<p><a href="#CL_INVALID_PROPERTY"><code>CL_INVALID_<wbr>PROPERTY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the <a href="#cl_khr_terminate_context"><code>cl_khr_<wbr>terminate_<wbr>context</code></a> extension is supported and
+<a href="#CL_CONTEXT_TERMINATE_KHR"><code>CL_CONTEXT_<wbr>TERMINATE_<wbr>KHR</code></a> is set to <a href="#CL_TRUE"><code>CL_TRUE</code></a> in <em>properties</em>, but not all
+of the devices associated with the context support the ability to support
+context termination (i.e. <a href="#CL_DEVICE_TERMINATE_CAPABILITY_CONTEXT_KHR"><code>CL_DEVICE_<wbr>TERMINATE_<wbr>CAPABILITY_<wbr>CONTEXT_<wbr>KHR</code></a> is
+set for <a href="#CL_DEVICE_TERMINATE_CAPABILITY_KHR"><code>CL_DEVICE_<wbr>TERMINATE_<wbr>CAPABILITY_<wbr>KHR</code></a>)</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -9838,8 +10567,8 @@
been queued to command-queues.
In this case the behavior of OpenCL API calls that use this context (and
command-queues) are considered to be implementation-defined.
-The user callback function, if specified, when the context is created can be
-used to record appropriate information in the <em>errinfo</em>, <em>private_info</em>
+The user callback function, if specified when the context is created, can be
+used to record appropriate information in the <em>errinfo</em> and <em>private_info</em>
arguments passed to the callback function when the device becomes
unavailable.</p>
</div>
@@ -9853,7 +10582,7 @@
<div class="content">
<div class="paragraph">
<p>To create an OpenCL context from a specific device
-type <sup class="footnote">[<a id="_footnoteref_12" class="footnote" href="#_footnotedef_12" title="View footnote.">12</a>]</sup>, call the function:</p>
+type <sup class="footnote">[<a id="_footnoteref_13" class="footnote" href="#_footnotedef_13" title="View footnote.">13</a>]</sup>, call the function:</p>
</div>
<div id="clCreateContextFromType" class="listingblock">
<div class="content">
@@ -9906,39 +10635,98 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_PLATFORM"><code>CL_INVALID_<wbr>PLATFORM</code></a> if no platform is specified in <em>properties</em> and no
-platform could be selected, or if the platform specified in <em>properties</em> is
-not a valid platform.</p>
+<p><a href="#CL_INVALID_PLATFORM"><code>CL_INVALID_<wbr>PLATFORM</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if no platform is specified in <em>properties</em> and no platform could be
+selected</p>
</li>
<li>
-<p><a href="#CL_INVALID_PROPERTY"><code>CL_INVALID_<wbr>PROPERTY</code></a> if a context property name in <em>properties</em> is not a
-supported property name, if the value specified for a supported property
-name is not valid, or if the same property name is specified more than
-once.
-This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
+<p>if the platform specified in <em>properties</em> is not a valid platform</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>pfn_notify</em> is <code>NULL</code> but <em>user_data</em> is not
-<code>NULL</code>.</p>
+<p><a href="#CL_INVALID_PROPERTY"><code>CL_INVALID_<wbr>PROPERTY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if a context property name in <em>properties</em> is not a supported property name</p>
</li>
<li>
-<p><a href="#CL_INVALID_DEVICE_TYPE"><code>CL_INVALID_<wbr>DEVICE_<wbr>TYPE</code></a> if <em>device_type</em> is not a valid value.</p>
+<p>if the value specified for a supported property name is not valid</p>
</li>
<li>
-<p><a href="#CL_DEVICE_NOT_AVAILABLE"><code>CL_DEVICE_<wbr>NOT_<wbr>AVAILABLE</code></a> if no devices that match <em>device_type</em> and
-property values specified in <em>properties</em> are currently available.</p>
+<p>if the same property name is specified more than once</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_DEVICE_NOT_FOUND"><code>CL_DEVICE_<wbr>NOT_<wbr>FOUND</code></a> if no devices that match <em>device_type</em> and property
-values specified in <em>properties</em> were found.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>pfn_notify</em> is <code>NULL</code> and <em>user_data</em> is not <code>NULL</code></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_INVALID_DEVICE_TYPE"><code>CL_INVALID_<wbr>DEVICE_<wbr>TYPE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>device_type</em> is not a valid value</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_DEVICE_NOT_AVAILABLE"><code>CL_DEVICE_<wbr>NOT_<wbr>AVAILABLE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if no devices that match <em>device_type</em> and property values specified in
+<em>properties</em> are currently available</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_DEVICE_NOT_FOUND"><code>CL_DEVICE_<wbr>NOT_<wbr>FOUND</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if no devices that match <em>device_type</em> and property values specified in
+<em>properties</em> were found</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -9949,12 +10737,18 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_DX9_MEDIA_ADAPTER_KHR"><code>CL_INVALID_<wbr>DX9_<wbr>MEDIA_<wbr>ADAPTER_<wbr>KHR</code></a> if any of the values of the
-properties <a href="#CL_CONTEXT_ADAPTER_D3D9_KHR"><code>CL_CONTEXT_<wbr>ADAPTER_<wbr>D3D9_<wbr>KHR</code></a>,
+<p><a href="#CL_INVALID_DX9_MEDIA_ADAPTER_KHR"><code>CL_INVALID_<wbr>DX9_<wbr>MEDIA_<wbr>ADAPTER_<wbr>KHR</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if any of the values of the properties <a href="#CL_CONTEXT_ADAPTER_D3D9_KHR"><code>CL_CONTEXT_<wbr>ADAPTER_<wbr>D3D9_<wbr>KHR</code></a>,
<a href="#CL_CONTEXT_ADAPTER_D3D9EX_KHR"><code>CL_CONTEXT_<wbr>ADAPTER_<wbr>D3D9EX_<wbr>KHR</code></a> or <a href="#CL_CONTEXT_ADAPTER_DXVA_KHR"><code>CL_CONTEXT_<wbr>ADAPTER_<wbr>DXVA_<wbr>KHR</code></a> is
non-<code>NULL</code> and does not specify a valid media adapter with which the
<em>cl_device_ids</em> against which this context is to be created may
-interoperate.</p>
+interoperate</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -9965,15 +10759,29 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_D3D10_DEVICE_KHR"><code>CL_INVALID_<wbr>D3D10_<wbr>DEVICE_<wbr>KHR</code></a> if the value of the property
-<a href="#CL_CONTEXT_D3D10_DEVICE_KHR"><code>CL_CONTEXT_<wbr>D3D10_<wbr>DEVICE_<wbr>KHR</code></a> is non-<code>NULL</code> and does not specify a valid
-Direct3D 10 device with which the <em>cl_device_ids</em> against which this
-context is to be created may interoperate.</p>
+<p><a href="#CL_INVALID_D3D10_DEVICE_KHR"><code>CL_INVALID_<wbr>D3D10_<wbr>DEVICE_<wbr>KHR</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the value of the property <a href="#CL_CONTEXT_D3D10_DEVICE_KHR"><code>CL_CONTEXT_<wbr>D3D10_<wbr>DEVICE_<wbr>KHR</code></a> is non-<code>NULL</code>
+and does not specify a valid Direct3D 10 device with which the
+<em>cl_device_ids</em> against which this context is to be created may
+interoperate</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if Direct3D 10 interoperability is specified by
-setting <a href="#CL_INVALID_D3D10_DEVICE_KHR"><code>CL_INVALID_<wbr>D3D10_<wbr>DEVICE_<wbr>KHR</code></a> to a non-<code>NULL</code> value, and
-interoperability with another graphics API is also specified.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if Direct3D 10 interoperability is specified by setting
+<a href="#CL_INVALID_D3D10_DEVICE_KHR"><code>CL_INVALID_<wbr>D3D10_<wbr>DEVICE_<wbr>KHR</code></a> to a non-<code>NULL</code> value and interoperability
+with another graphics API is also specified</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -9984,15 +10792,29 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_D3D11_DEVICE_KHR"><code>CL_INVALID_<wbr>D3D11_<wbr>DEVICE_<wbr>KHR</code></a> if the value of the property
-<a href="#CL_CONTEXT_D3D11_DEVICE_KHR"><code>CL_CONTEXT_<wbr>D3D11_<wbr>DEVICE_<wbr>KHR</code></a> is non-<code>NULL</code> and does not specify a valid
-Direct3D 11 device with which the <em>cl_device_ids</em> against which this
-context is to be created may interoperate.</p>
+<p><a href="#CL_INVALID_D3D11_DEVICE_KHR"><code>CL_INVALID_<wbr>D3D11_<wbr>DEVICE_<wbr>KHR</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the value of the property <a href="#CL_CONTEXT_D3D11_DEVICE_KHR"><code>CL_CONTEXT_<wbr>D3D11_<wbr>DEVICE_<wbr>KHR</code></a> is non-<code>NULL</code>
+and does not specify a valid Direct3D 11 device with which the
+<em>cl_device_ids</em> against which this context is to be created may
+interoperate</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if Direct3D 11 interoperability is specified by
-setting <a href="#CL_INVALID_D3D11_DEVICE_KHR"><code>CL_INVALID_<wbr>D3D11_<wbr>DEVICE_<wbr>KHR</code></a> to a non-<code>NULL</code> value, and
-interoperability with another graphics API is also specified.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if Direct3D 11 interoperability is specified by setting
+<a href="#CL_INVALID_D3D11_DEVICE_KHR"><code>CL_INVALID_<wbr>D3D11_<wbr>DEVICE_<wbr>KHR</code></a> to a non-<code>NULL</code> value and interoperability
+with another graphics API is also specified</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -10003,10 +10825,12 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR"><code>CL_INVALID_<wbr>GL_<wbr>SHAREGROUP_<wbr>REFERENCE_<wbr>KHR</code></a> if a context was specified for
-an OpenGL or OpenGL ES implementation using the EGL, GLX, or WGL binding
-APIs, as <a href="#specifying-gl-context">described for <code>clCreateContext</code></a>; and
-any of the following conditions hold:</p>
+<p><a href="#CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR"><code>CL_INVALID_<wbr>GL_<wbr>SHAREGROUP_<wbr>REFERENCE_<wbr>KHR</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if a context was specified for an OpenGL or OpenGL ES implementation
+using the EGL, GLX, or WGL binding APIs, as <a href="#specifying-gl-context">described for <code>clCreateContext</code></a>; and any of the following conditions hold:</p>
<div class="ulist">
<ul>
<li>
@@ -10019,32 +10843,45 @@
<li>
<p>The specified context is not compatible with the OpenCL context being
created (for example, it exists in a physically distinct address space,
-such as another hardware device; or it does not support sharing data
-with OpenCL due to implementation restrictions).</p>
+such as another hardware device; or it does not support sharing data with
+OpenCL due to implementation restrictions).</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
</li>
<li>
-<p><a href="#CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR"><code>CL_INVALID_<wbr>GL_<wbr>SHAREGROUP_<wbr>REFERENCE_<wbr>KHR</code></a> if a share group was specified
-for a CGL-based OpenGL implementation by setting the property
-<a href="#CL_CGL_SHAREGROUP_KHR"><code>CL_CGL_<wbr>SHAREGROUP_<wbr>KHR</code></a>, and the specified share group does not identify
-a valid CGL share group object.</p>
+<p><a href="#CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR"><code>CL_INVALID_<wbr>GL_<wbr>SHAREGROUP_<wbr>REFERENCE_<wbr>KHR</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if a share group was specified for a CGL-based OpenGL implementation by
+setting the property <a href="#CL_CGL_SHAREGROUP_KHR"><code>CL_CGL_<wbr>SHAREGROUP_<wbr>KHR</code></a>, and the specified share group
+does not identify a valid CGL share group object</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if a context was specified as described above and
-any of the following conditions hold:</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if a context was specified as described above and any of the following
+conditions hold:</p>
<div class="ulist">
<ul>
<li>
<p>A context or share group object was specified for one of CGL, EGL, GLX,
-or WGL and the OpenGL implementation does not support that
-window-system binding API.</p>
+or WGL and the OpenGL implementation does not support that window-system
+binding API.</p>
</li>
<li>
<p>More than one of the properties <a href="#CL_CGL_SHAREGROUP_KHR"><code>CL_CGL_<wbr>SHAREGROUP_<wbr>KHR</code></a>,
-<a href="#CL_EGL_DISPLAY_KHR"><code>CL_EGL_<wbr>DISPLAY_<wbr>KHR</code></a>, <a href="#CL_GLX_DISPLAY_KHR"><code>CL_GLX_<wbr>DISPLAY_<wbr>KHR</code></a>, and <a href="#CL_WGL_HDC_KHR"><code>CL_WGL_<wbr>HDC_<wbr>KHR</code></a> is set
-to a non-default value.</p>
+<a href="#CL_EGL_DISPLAY_KHR"><code>CL_EGL_<wbr>DISPLAY_<wbr>KHR</code></a>, <a href="#CL_GLX_DISPLAY_KHR"><code>CL_GLX_<wbr>DISPLAY_<wbr>KHR</code></a>, and <a href="#CL_WGL_HDC_KHR"><code>CL_WGL_<wbr>HDC_<wbr>KHR</code></a> is set to
+a non-default value.</p>
</li>
<li>
<p>Both of the properties <a href="#CL_CGL_SHAREGROUP_KHR"><code>CL_CGL_<wbr>SHAREGROUP_<wbr>KHR</code></a> and <a href="#CL_GL_CONTEXT_KHR"><code>CL_GL_<wbr>CONTEXT_<wbr>KHR</code></a>
@@ -10057,10 +10894,19 @@
</ul>
</div>
</li>
+</ul>
+</div>
+</li>
<li>
-<p><a href="#CL_INVALID_PROPERTY"><code>CL_INVALID_<wbr>PROPERTY</code></a> if both <a href="#CL_CONTEXT_INTEROP_USER_SYNC"><code>CL_CONTEXT_<wbr>INTEROP_<wbr>USER_<wbr>SYNC</code></a>, and any of
-the properties defined by the <a href="#cl_khr_gl_sharing"><code>cl_khr_<wbr>gl_<wbr>sharing</code></a> extension are
-defined in <em>properties</em>.</p>
+<p><a href="#CL_INVALID_PROPERTY"><code>CL_INVALID_<wbr>PROPERTY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if both <a href="#CL_CONTEXT_INTEROP_USER_SYNC"><code>CL_CONTEXT_<wbr>INTEROP_<wbr>USER_<wbr>SYNC</code></a>, and any of the properties defined
+by the <a href="#cl_khr_gl_sharing"><code>cl_khr_<wbr>gl_<wbr>sharing</code></a> extension are defined in <em>properties</em></p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -10105,15 +10951,36 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if <em>context</em> is not a valid OpenCL context.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>context</em> is not a valid OpenCL context</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -10156,15 +11023,36 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if <em>context</em> is not a valid OpenCL context.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>context</em> is not a valid OpenCL context</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -10259,22 +11147,57 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if <em>context</em> is not a valid OpenCL context.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>context</em> is not a valid OpenCL context</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_CONTEXT_TERMINATED_KHR"><code>CL_CONTEXT_<wbr>TERMINATED_<wbr>KHR</code></a> if <em>context</em> has already been terminated.</p>
+<p><a href="#CL_CONTEXT_TERMINATED_KHR"><code>CL_CONTEXT_<wbr>TERMINATED_<wbr>KHR</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>context</em> has already been terminated</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>context</em> was not created with
-<a href="#CL_CONTEXT_TERMINATE_KHR"><code>CL_CONTEXT_<wbr>TERMINATE_<wbr>KHR</code></a> set to <a href="#CL_TRUE"><code>CL_TRUE</code></a>.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>context</em> was not created with <a href="#CL_CONTEXT_TERMINATE_KHR"><code>CL_CONTEXT_<wbr>TERMINATE_<wbr>KHR</code></a> set to
+<a href="#CL_TRUE"><code>CL_TRUE</code></a></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the device.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -10353,7 +11276,7 @@
</thead>
<tbody>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_CONTEXT_REFERENCE_COUNT"></a><a href="#CL_CONTEXT_REFERENCE_COUNT"><code>CL_CONTEXT_<wbr>REFERENCE_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_13" class="footnote" href="#_footnotedef_13" title="View footnote.">13</a>]</sup></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_CONTEXT_REFERENCE_COUNT"></a><a href="#CL_CONTEXT_REFERENCE_COUNT"><code>CL_CONTEXT_<wbr>REFERENCE_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_14" class="footnote" href="#_footnotedef_14" title="View footnote.">14</a>]</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uint</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Return the <em>context</em> reference count.</p></td>
</tr>
@@ -10413,22 +11336,51 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if <em>context</em> is not a valid context.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>context</em> is not a valid context</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>param_name</em> is not one of the supported values, or
-if the size in bytes specified by <em>param_value_size</em> is less than size of
-the return type specified in the
-<a href="#context-info-table">Context Queries</a> table
-and <em>param_value</em> is not <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>param_name</em> is not one of the supported values</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if the size in bytes specified by <em>param_value_size</em> is less than the size of
+the return type specified in the <a href="#context-info-table">Context Queries</a>
+table and <em>param_value</em> is not <code>NULL</code></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -10513,21 +11465,133 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if <em>context</em> is not a valid context.</p>
-</li>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>pfn_notify</em> is <code>NULL</code>.</p>
-</li>
-<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
-</li>
-<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p>if <em>context</em> is not a valid context</p>
</li>
</ul>
</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>pfn_notify</em> is <code>NULL</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="getting-opencl-api-extension-function-pointers"><a class="anchor" href="#getting-opencl-api-extension-function-pointers"></a>4.5. Extension Function Pointers</h3>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Extension function pointers for a given platform can be obtained with the function:</p>
+</div>
+<div id="clGetExtensionFunctionAddressForPlatform" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="opencl"><span class="c1">// Provided by CL_VERSION_1_2</span>
+<span class="kt">void</span><span class="o">*</span> <span class="nf">clGetExtensionFunctionAddressForPlatform</span><span class="p">(</span>
+ <span class="kt">cl_platform_id</span> <span class="n">platform</span><span class="p">,</span>
+ <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">func_name</span><span class="p">);</span></code></pre>
+</div>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+<a href="#clGetExtensionFunctionAddressForPlatform"><strong>clGetExtensionFunctionAddressForPlatform</strong></a> is <a href="#unified-spec">missing before</a> version 1.2.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>Or, with the function:</p>
+</div>
+<div id="clGetExtensionFunctionAddress" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="opencl"><span class="c1">// Provided by CL_VERSION_1_0</span>
+<span class="kt">void</span><span class="o">*</span> <span class="nf">clGetExtensionFunctionAddress</span><span class="p">(</span>
+ <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">func_name</span><span class="p">);</span></code></pre>
+</div>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+<a href="#clGetExtensionFunctionAddress"><strong>clGetExtensionFunctionAddress</strong></a> is <a href="#unified-spec">deprecated by</a> version 1.2.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>The returned function pointer should be cast to a function pointer type matching
+the extension function’s definition defined in the appropriate extension
+specification and header file.</p>
+</div>
+<div class="paragraph">
+<p>A return value of <code>NULL</code> indicates that <em>platform</em> is not a valid platform or
+that the specified extension function does not exist for the platform.</p>
+</div>
+<div class="paragraph">
+<p>A non-<code>NULL</code> return value from <a href="#clGetExtensionFunctionAddressForPlatform"><strong>clGetExtensionFunctionAddressForPlatform</strong></a>
+does not guarantee that an extension function is actually supported by the
+platform.
+The application must also query <a href="#CL_PLATFORM_EXTENSIONS"><code>CL_PLATFORM_<wbr>EXTENSIONS</code></a> or
+<a href="#CL_DEVICE_EXTENSIONS"><code>CL_DEVICE_<wbr>EXTENSIONS</code></a> to determine if an extension is supported by an OpenCL
+platform or device.</p>
+</div>
+<div class="paragraph">
+<p>Since there is no way to qualify the <a href="#clGetExtensionFunctionAddressForPlatform"><strong>clGetExtensionFunctionAddressForPlatform</strong></a>
+query with a device, the function pointer returned must work for all
+implementations of and extension on different devices for a platform.
+The behavior of calling a device extension function on a device not
+supporting that extension is undefined.</p>
+</div>
+<div class="paragraph">
+<p><a href="#clGetExtensionFunctionAddressForPlatform"><strong>clGetExtensionFunctionAddressForPlatform</strong></a> may not be used to query for core
+(non-extension) functions in OpenCL.
+For extension functions queried using
+<a href="#clGetExtensionFunctionAddressForPlatform"><strong>clGetExtensionFunctionAddressForPlatform</strong></a>, implementations may also choose to
+export those functions statically from the object libraries implementing those
+functions, however, portable applications cannot rely on this behavior.</p>
+</div>
</div>
</div>
</div>
@@ -10674,11 +11738,11 @@
<p class="tableblock"> <a id="CL_QUEUE_ON_DEVICE"></a><a href="#CL_QUEUE_ON_DEVICE"><code>CL_QUEUE_<wbr>ON_<wbr>DEVICE</code></a> - Indicates that this is a device queue.
If <a href="#CL_QUEUE_ON_DEVICE"><code>CL_QUEUE_<wbr>ON_<wbr>DEVICE</code></a> is set,
<a href="#CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE"><code>CL_QUEUE_<wbr>OUT_<wbr>OF_<wbr>ORDER_<wbr>EXEC_<wbr>MODE_<wbr>ENABLE</code></a>
- <sup class="footnote">[<a id="_footnoteref_14" class="footnote" href="#_footnotedef_14" title="View footnote.">14</a>]</sup>
+ <sup class="footnote">[<a id="_footnoteref_15" class="footnote" href="#_footnotedef_15" title="View footnote.">15</a>]</sup>
must also be set.</p>
<p class="tableblock"><a href="#unified-spec">missing before</a> version 2.0.</p>
<p class="tableblock"> <a id="CL_QUEUE_ON_DEVICE_DEFAULT"></a><a href="#CL_QUEUE_ON_DEVICE_DEFAULT"><code>CL_QUEUE_<wbr>ON_<wbr>DEVICE_<wbr>DEFAULT</code></a>
- <sup class="footnote">[<a id="_footnoteref_15" class="footnote" href="#_footnotedef_15" title="View footnote.">15</a>]</sup> -
+ <sup class="footnote">[<a id="_footnoteref_16" class="footnote" href="#_footnotedef_16" title="View footnote.">16</a>]</sup> -
indicates that this is the default device queue.
This can only be used with <a href="#CL_QUEUE_ON_DEVICE"><code>CL_QUEUE_<wbr>ON_<wbr>DEVICE</code></a>.</p>
<p class="tableblock"><a href="#unified-spec">missing before</a> version 2.0.</p>
@@ -10745,36 +11809,80 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if <em>context</em> is not a valid context.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>context</em> is not a valid context</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a> if <em>device</em> is not a valid device or is not
-associated with <em>context</em>.</p>
+<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>device</em> is not a valid device</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if values specified in <em>properties</em> are not valid.</p>
+<p>if <em>device</em> is not associated with <em>context</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_QUEUE_PROPERTIES"><code>CL_INVALID_<wbr>QUEUE_<wbr>PROPERTIES</code></a> if values specified in <em>properties</em> are
-valid but are not supported by the device.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if values specified in <em>properties</em> are not valid</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_QUEUE_PROPERTIES"><code>CL_INVALID_<wbr>QUEUE_<wbr>PROPERTIES</code></a> if the <a href="#cl_khr_priority_hints"><code>cl_khr_<wbr>priority_<wbr>hints</code></a>
-extension is supported, the <a href="#CL_QUEUE_PRIORITY_KHR"><code>CL_QUEUE_<wbr>PRIORITY_<wbr>KHR</code></a> property is
-specified, and the queue is a <a href="#CL_QUEUE_ON_DEVICE"><code>CL_QUEUE_<wbr>ON_<wbr>DEVICE</code></a>.</p>
+<p><a href="#CL_INVALID_QUEUE_PROPERTIES"><code>CL_INVALID_<wbr>QUEUE_<wbr>PROPERTIES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if values specified in <em>properties</em> are valid but are not supported by
+<em>device</em></p>
</li>
<li>
-<p><a href="#CL_INVALID_QUEUE_PROPERTIES"><code>CL_INVALID_<wbr>QUEUE_<wbr>PROPERTIES</code></a> if the <a href="#cl_khr_throttle_hints"><code>cl_khr_<wbr>throttle_<wbr>hints</code></a>
-extension is supported, the <a href="#CL_QUEUE_THROTTLE_KHR"><code>CL_QUEUE_<wbr>THROTTLE_<wbr>KHR</code></a> property is
-specified, and the queue is a <a href="#CL_QUEUE_ON_DEVICE"><code>CL_QUEUE_<wbr>ON_<wbr>DEVICE</code></a>.</p>
+<p>if the <a href="#cl_khr_priority_hints"><code>cl_khr_<wbr>priority_<wbr>hints</code></a> extension is supported, the
+<a href="#CL_QUEUE_PRIORITY_KHR"><code>CL_QUEUE_<wbr>PRIORITY_<wbr>KHR</code></a> property is specified, and the queue is a
+<a href="#CL_QUEUE_ON_DEVICE"><code>CL_QUEUE_<wbr>ON_<wbr>DEVICE</code></a></p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the device.</p>
+<p>if the <a href="#cl_khr_throttle_hints"><code>cl_khr_<wbr>throttle_<wbr>hints</code></a> extension is supported, the
+<a href="#CL_QUEUE_THROTTLE_KHR"><code>CL_QUEUE_<wbr>THROTTLE_<wbr>KHR</code></a> property is specified, and the queue is a
+<a href="#CL_QUEUE_ON_DEVICE"><code>CL_QUEUE_<wbr>ON_<wbr>DEVICE</code></a></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -10876,26 +11984,70 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if <em>context</em> is not a valid context.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>context</em> is not a valid context</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a> if <em>device</em> is not a valid device or is not associated
-with <em>context</em>.</p>
+<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>device</em> is not a valid device</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if values specified in <em>properties</em> are not valid.</p>
+<p>if <em>device</em> is not associated with <em>context</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_QUEUE_PROPERTIES"><code>CL_INVALID_<wbr>QUEUE_<wbr>PROPERTIES</code></a> if values specified in <em>properties</em> are
-valid but are not supported by the device.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if values specified in <em>properties</em> are not valid</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_INVALID_QUEUE_PROPERTIES"><code>CL_INVALID_<wbr>QUEUE_<wbr>PROPERTIES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if values specified in <em>properties</em> are valid but are not supported by
+<em>device</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -10954,26 +12106,69 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if <em>context</em> is not a valid context.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>context</em> is not a valid context</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a> if <em>device</em> is not a valid device or is not associated
-with <em>context</em>.</p>
+<p><a href="#CL_INVALID_DEVICE"><code>CL_INVALID_<wbr>DEVICE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>device</em> is not a valid device</p>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>device</em> does not support a replaceable default on-device queue.</p>
+<p>if <em>device</em> is not associated with <em>context</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid command-queue
-for <em>device</em>.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>device</em> does not support a replaceable default on-device queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid command-queue for <em>device</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -11020,16 +12215,36 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -11076,16 +12291,36 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -11165,7 +12400,7 @@
<td class="tableblock halign-left valign-top"><p class="tableblock">Return the device specified when the command-queue is created.</p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_QUEUE_REFERENCE_COUNT"></a><a href="#CL_QUEUE_REFERENCE_COUNT"><code>CL_QUEUE_<wbr>REFERENCE_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_16" class="footnote" href="#_footnotedef_16" title="View footnote.">16</a>]</sup></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_QUEUE_REFERENCE_COUNT"></a><a href="#CL_QUEUE_REFERENCE_COUNT"><code>CL_QUEUE_<wbr>REFERENCE_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_17" class="footnote" href="#_footnotedef_17" title="View footnote.">17</a>]</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uint</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Return the command-queue reference count.</p></td>
</tr>
@@ -11218,24 +12453,55 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid
-command-queue, or if <em>command_queue</em> is not a valid command-queue
-for <em>param_name</em>.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid command-queue</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>param_name</em> is not one of the supported values, or
-if the size in bytes specified by <em>param_value_size</em> is less than size of
+<p>if <em>command_queue</em> is not a valid command-queue for <em>param_name</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>param_name</em> is not one of the supported values</p>
+</li>
+<li>
+<p>if the size in bytes specified by <em>param_value_size</em> is less than the size of
the return type specified in the
-<a href="#command-queue-info-table">Command-Queue Queries</a> table
-and <em>param_value</em> is not <code>NULL</code>.</p>
+<a href="#command-queue-info-table">Command-Queue Queries</a>
+table and <em>param_value</em> is not <code>NULL</code></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -11309,26 +12575,68 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if no devices in the context associated with
-<em>command_queue</em> support modifying the properties of a command-queue.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if no devices in the context associated with <em>command_queue</em> support
+modifying the properties of a command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if values specified in <em>properties</em> are not valid.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if values specified in <em>properties</em> are not valid</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_QUEUE_PROPERTIES"><code>CL_INVALID_<wbr>QUEUE_<wbr>PROPERTIES</code></a> if values specified in <em>properties</em> are
-valid but are not supported by the device.</p>
+<p><a href="#CL_INVALID_QUEUE_PROPERTIES"><code>CL_INVALID_<wbr>QUEUE_<wbr>PROPERTIES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if values specified in <em>properties</em> are valid but are not supported by
+the device associated with <em>command_queue</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -11396,13 +12704,13 @@
<p><em>properties</em> is an optional list of properties for the buffer object and their corresponding values.
The list is terminated with the special property <code>0</code>.
If no properties are required, <em>properties</em> may be <code>NULL</code>.
-OpenCL 3.0 does not define any optional properties for buffers,
+OpenCL does not define any optional properties for buffers,
but extensions may define properties as described in the
<a href="#external-buffer-memory-properties-table">List of supported buffer creation properties</a>.</p>
</li>
<li>
<p><em>flags</em> is a bit-field that is used to specify allocation and usage
-information about the image memory object being created and is described in
+information about the buffer memory object being created and is described in
the <a href="#memory-flags-table">supported memory flag values</a> table.</p>
</li>
<li>
@@ -11916,62 +13224,113 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a> if <em>buffer</em> is not a valid buffer object or is a
-sub-buffer object.</p>
+<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>buffer</em> is not a valid buffer object</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>buffer</em> was created with <a href="#CL_MEM_WRITE_ONLY"><code>CL_MEM_<wbr>WRITE_<wbr>ONLY</code></a> and
-<em>flags</em> specifies <a href="#CL_MEM_READ_WRITE"><code>CL_MEM_<wbr>READ_<wbr>WRITE</code></a> or <a href="#CL_MEM_READ_ONLY"><code>CL_MEM_<wbr>READ_<wbr>ONLY</code></a>, or if <em>buffer</em>
-was created with <a href="#CL_MEM_READ_ONLY"><code>CL_MEM_<wbr>READ_<wbr>ONLY</code></a> and <em>flags</em> specifies
-<a href="#CL_MEM_READ_WRITE"><code>CL_MEM_<wbr>READ_<wbr>WRITE</code></a> or <a href="#CL_MEM_WRITE_ONLY"><code>CL_MEM_<wbr>WRITE_<wbr>ONLY</code></a>, or if <em>flags</em> specifies
-<a href="#CL_MEM_USE_HOST_PTR"><code>CL_MEM_<wbr>USE_<wbr>HOST_<wbr>PTR</code></a> or <a href="#CL_MEM_ALLOC_HOST_PTR"><code>CL_MEM_<wbr>ALLOC_<wbr>HOST_<wbr>PTR</code></a> or <a href="#CL_MEM_COPY_HOST_PTR"><code>CL_MEM_<wbr>COPY_<wbr>HOST_<wbr>PTR</code></a>.</p>
+<p>if <em>buffer</em> is a sub-buffer object</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>buffer</em> was created with <a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a> and
-<em>flags</em> specify <a href="#CL_MEM_HOST_READ_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>READ_<wbr>ONLY</code></a>, or if <em>buffer</em> was created with
-<a href="#CL_MEM_HOST_READ_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>READ_<wbr>ONLY</code></a> and <em>flags</em> specify <a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a>, or if
-<em>buffer</em> was created with <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a> and <em>flags</em> specify
-<a href="#CL_MEM_HOST_READ_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>READ_<wbr>ONLY</code></a> or <a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>buffer</em> was created with <a href="#CL_MEM_WRITE_ONLY"><code>CL_MEM_<wbr>WRITE_<wbr>ONLY</code></a> and <em>flags</em> specifies <a href="#CL_MEM_READ_WRITE"><code>CL_MEM_<wbr>READ_<wbr>WRITE</code></a> or <a href="#CL_MEM_READ_ONLY"><code>CL_MEM_<wbr>READ_<wbr>ONLY</code></a></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if the value specified in <em>buffer_create_type</em> is not
-valid.</p>
+<p>if <em>buffer</em> was created with <a href="#CL_MEM_READ_ONLY"><code>CL_MEM_<wbr>READ_<wbr>ONLY</code></a> and <em>flags</em> specifies <a href="#CL_MEM_READ_WRITE"><code>CL_MEM_<wbr>READ_<wbr>WRITE</code></a> or <a href="#CL_MEM_WRITE_ONLY"><code>CL_MEM_<wbr>WRITE_<wbr>ONLY</code></a></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if value(s) specified in <em>buffer_create_info</em> (for a
-given <em>buffer_create_type</em>) is not valid or if <em>buffer_create_info</em> is
-<code>NULL</code>.</p>
+<p>if <em>buffer</em> was created with <a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a> and <em>flags</em> specify <a href="#CL_MEM_HOST_READ_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>READ_<wbr>ONLY</code></a></p>
</li>
<li>
-<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a> if there is a failure to allocate
-memory for sub-buffer object.</p>
+<p>if <em>buffer</em> was created with <a href="#CL_MEM_HOST_READ_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>READ_<wbr>ONLY</code></a> and <em>flags</em> specify <a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a></p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if <em>buffer</em> was created with <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a> and <em>flags</em> specify <a href="#CL_MEM_HOST_READ_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>READ_<wbr>ONLY</code></a> or <a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a></p>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p>if <em>buffer</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a> and <em>flags</em> specifies <a href="#CL_MEM_READ_WRITE"><code>CL_MEM_<wbr>READ_<wbr>WRITE</code></a>, <a href="#CL_MEM_WRITE_ONLY"><code>CL_MEM_<wbr>WRITE_<wbr>ONLY</code></a>, or <a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if the region specified by the <a href="#cl_buffer_region"><code>cl_buffer_<wbr>region</code></a>
-structure passed in <em>buffer_create_info</em> is out of bounds in <em>buffer</em>.</p>
+<p>if <em>flags</em> specifies <a href="#CL_MEM_USE_HOST_PTR"><code>CL_MEM_<wbr>USE_<wbr>HOST_<wbr>PTR</code></a> or <a href="#CL_MEM_ALLOC_HOST_PTR"><code>CL_MEM_<wbr>ALLOC_<wbr>HOST_<wbr>PTR</code></a> or <a href="#CL_MEM_COPY_HOST_PTR"><code>CL_MEM_<wbr>COPY_<wbr>HOST_<wbr>PTR</code></a></p>
</li>
<li>
-<p><a href="#CL_INVALID_BUFFER_SIZE"><code>CL_INVALID_<wbr>BUFFER_<wbr>SIZE</code></a> if the <em>size</em> field of the <a href="#cl_buffer_region"><code>cl_buffer_<wbr>region</code></a>
-structure passed in <em>buffer_create_info</em> is 0.</p>
+<p>if the value specified in <em>buffer_create_type</em> is not valid</p>
</li>
<li>
-<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a> if there are no devices in <em>context</em>
-associated with <em>buffer</em> for which the <em>origin</em> field of the
-<a href="#cl_buffer_region"><code>cl_buffer_<wbr>region</code></a> structure passed in <em>buffer_create_info</em> is
-aligned to the <a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value.</p>
+<p>if <em>buffer_create_info</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>buffer</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a>
-and <em>flags</em> specifies <a href="#CL_MEM_READ_WRITE"><code>CL_MEM_<wbr>READ_<wbr>WRITE</code></a>, <a href="#CL_MEM_WRITE_ONLY"><code>CL_MEM_<wbr>WRITE_<wbr>ONLY</code></a>, or
-<a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a>.</p>
+<p>if a value specified in <em>buffer_create_info</em> for a given <em>buffer_create_type</em> is not valid</p>
+</li>
+<li>
+<p>if the region specified by the <a href="#cl_buffer_region"><code>cl_buffer_<wbr>region</code></a> structure passed in <em>buffer_create_info</em> is out of bounds in <em>buffer</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_BUFFER_SIZE"><code>CL_INVALID_<wbr>BUFFER_<wbr>SIZE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the <em>size</em> field of the <a href="#cl_buffer_region"><code>cl_buffer_<wbr>region</code></a> structure passed in <em>buffer_create_info</em> is zero</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there are no devices in <em>context</em> associated with <em>buffer</em> for which
+the <em>origin</em> field of the <a href="#cl_buffer_region"><code>cl_buffer_<wbr>region</code></a> structure passed in
+<em>buffer_create_info</em> is aligned to the <a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a>
+value.
+This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate memory for the data store associated with the sub-buffer object</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -12160,65 +13519,140 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if the context associated with <em>command_queue</em> and
-<em>buffer</em> are not the same or if the context associated with
-<em>command_queue</em> and events in <em>event_wait_list</em> are not the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and <em>buffer</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a> if <em>buffer</em> is not a valid buffer object.</p>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if the region being read or written specified by
-(<em>offset</em>, <em>size</em>) is out of bounds or if <em>ptr</em> is a <code>NULL</code> value.</p>
+<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>buffer</em> is not a valid buffer object</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the region being read or written specified by <em>offset</em> and <em>size</em> is out of bounds</p>
</li>
<li>
-<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a> if <em>buffer</em> is a sub-buffer object and
-<em>offset</em> specified when the sub-buffer object is created is not aligned
-to <a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for device associated with
-<em>queue</em>.
+<p>if <em>ptr</em> is <code>NULL</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
+</li>
+<li>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
+</li>
+<li>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>buffer</em> is a sub-buffer object and the offset specified when the
+sub-buffer object was created is not aligned to the
+<a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for the device associated with
+<em>command_queue</em>.
This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
</li>
+</ul>
+</div>
+</li>
<li>
-<p><a href="#CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"><code>CL_EXEC_<wbr>STATUS_<wbr>ERROR_<wbr>FOR_<wbr>EVENTS_<wbr>IN_<wbr>WAIT_<wbr>LIST</code></a> if the read and write
-operations are blocking and the execution status of any of the events in
-<em>event_wait_list</em> is a negative integer value.
+<p><a href="#CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"><code>CL_EXEC_<wbr>STATUS_<wbr>ERROR_<wbr>FOR_<wbr>EVENTS_<wbr>IN_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the read or write operations are blocking and the execution status of
+any of the events in <em>event_wait_list</em> is a negative integer value indicating an error.
This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
</li>
-<li>
-<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a> if there is a failure to allocate
-memory for data store associated with <em>buffer</em>.</p>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <a href="#clEnqueueReadBuffer"><strong>clEnqueueReadBuffer</strong></a> is called on <em>buffer</em>
-which has been created with <a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a> or
-<a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a>.</p>
+<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate memory for the data store associated with <em>buffer</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <a href="#clEnqueueWriteBuffer"><strong>clEnqueueWriteBuffer</strong></a> is called on <em>buffer</em>
-which has been created with <a href="#CL_MEM_HOST_READ_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>READ_<wbr>ONLY</code></a> or
-<a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a>.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <a href="#clEnqueueReadBuffer"><strong>clEnqueueReadBuffer</strong></a> is called on <em>buffer</em> which has been created with <a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a> or <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a></p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if <a href="#clEnqueueWriteBuffer"><strong>clEnqueueWriteBuffer</strong></a> is called on <em>buffer</em> which has been created with <a href="#CL_MEM_HOST_READ_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>READ_<wbr>ONLY</code></a> or <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a></p>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p>if <a href="#clEnqueueWriteBuffer"><strong>clEnqueueWriteBuffer</strong></a> is called on <em>buffer</em> which has been created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <a href="#clEnqueueWriteBuffer"><strong>clEnqueueWriteBuffer</strong></a> is called on <em>buffer</em>
-which has been created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a>.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -12425,93 +13859,164 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if the context associated with <em>command_queue</em> and
-<em>buffer</em> are not the same or if the context associated with
-<em>command_queue</em> and events in <em>event_wait_list</em> are not the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and <em>buffer</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a> if <em>buffer</em> is not a valid buffer object.</p>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>buffer_origin</em>, <em>host_origin</em>, or <em>region</em> is <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>buffer</em> is not a valid buffer object</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if the region being read or written specified by
-(<em>buffer_origin</em>, <em>region</em>, <em>buffer_row_pitch</em>, <em>buffer_slice_pitch</em>) is
-out of bounds.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>buffer_origin</em>, <em>host_origin</em>, or <em>region</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if any <em>region</em> array element is 0.</p>
+<p>if the region being read or written specified by <em>buffer_origin</em>, <em>region</em>, <em>buffer_row_pitch</em>, and <em>buffer_slice_pitch</em> is out of bounds</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>buffer_row_pitch</em> is not 0 and is less than
-<em>region</em>[0].</p>
+<p>if any <em>region</em> array element is zero</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>host_row_pitch</em> is not 0 and is less than
-<em>region</em>[0].</p>
+<p>if <em>buffer_row_pitch</em> is not equal to zero and is less than <em>region</em>[0]</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>buffer_slice_pitch</em> is not 0 and is less than
-<em>region</em>[1] × <em>buffer_row_pitch</em> and not a multiple of
-<em>buffer_row_pitch</em>.</p>
+<p>if <em>buffer_slice_pitch</em> is not equal to zero and is less than <em>region</em>[1] times <em>buffer_row_pitch</em></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>host_slice_pitch</em> is not 0 and is less than
-<em>region</em>[1] × <em>host_row_pitch</em> and not a multiple of
-<em>host_row_pitch</em>.</p>
+<p>if <em>buffer_slice_pitch</em> is not equal to zero and is not a multiple of <em>buffer_row_pitch</em></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>ptr</em> is <code>NULL</code>.</p>
+<p>if <em>host_row_pitch</em> is not equal to zero and is less than <em>region</em>[0]</p>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p>if <em>host_slice_pitch</em> is not equal to zero and is less than <em>region</em>[1] times <em>host_row_pitch</em></p>
</li>
<li>
-<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a> if <em>buffer</em> is a sub-buffer object and
-<em>offset</em> specified when the sub-buffer object is created is not aligned
-to <a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for device associated with
-<em>queue</em>.
+<p>if <em>host_slice_pitch</em> is not equal to zero and is not a multiple of <em>host_row_pitch</em></p>
+</li>
+<li>
+<p>if <em>ptr</em> is <code>NULL</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
+</li>
+<li>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
+</li>
+<li>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>buffer</em> is a sub-buffer object and the offset specified when the
+sub-buffer object is created is not aligned to the
+<a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for the device associated with
+<em>command_queue</em>.
This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
</li>
+</ul>
+</div>
+</li>
<li>
-<p><a href="#CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"><code>CL_EXEC_<wbr>STATUS_<wbr>ERROR_<wbr>FOR_<wbr>EVENTS_<wbr>IN_<wbr>WAIT_<wbr>LIST</code></a> if the read and write
-operations are blocking and the execution status of any of the events in
-<em>event_wait_list</em> is a negative integer value.
+<p><a href="#CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"><code>CL_EXEC_<wbr>STATUS_<wbr>ERROR_<wbr>FOR_<wbr>EVENTS_<wbr>IN_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the read or write operations are blocking and the execution status of
+any of the events in <em>event_wait_list</em> is a negative integer value indicating an error.
This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
</li>
-<li>
-<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a> if there is a failure to allocate
-memory for data store associated with <em>buffer</em>.</p>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <a href="#clEnqueueReadBufferRect"><strong>clEnqueueReadBufferRect</strong></a> is called on <em>buffer</em>
-which has been created with <a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a> or
-<a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a>.</p>
+<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate memory for the data store associated with <em>buffer</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <a href="#clEnqueueWriteBufferRect"><strong>clEnqueueWriteBufferRect</strong></a> is called on <em>buffer</em>
-which has been created with <a href="#CL_MEM_HOST_READ_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>READ_<wbr>ONLY</code></a> or
-<a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a>.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <a href="#clEnqueueReadBufferRect"><strong>clEnqueueReadBufferRect</strong></a> is called on <em>buffer</em> which has been created with <a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a> or <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a></p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if <a href="#clEnqueueWriteBufferRect"><strong>clEnqueueWriteBufferRect</strong></a> is called on <em>buffer</em> which has been created with <a href="#CL_MEM_HOST_READ_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>READ_<wbr>ONLY</code></a> or <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a></p>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p>if <a href="#clEnqueueWriteBufferRect"><strong>clEnqueueWriteBufferRect</strong></a> is called on <em>buffer</em> which has been created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <a href="#clEnqueueWriteBufferRect"><strong>clEnqueueWriteBufferRect</strong></a> is called on <em>buffer</em>
-which has been created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a>.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -12690,68 +14195,152 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if the context associated with <em>command_queue</em>,
-<em>src_buffer</em> and <em>dst_buffer</em> are not the same or if the context
-associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not
-the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and <em>src_buffer</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a> if <em>src_buffer</em> and <em>dst_buffer</em> are not valid
-buffer objects.</p>
+<p>if the context associated with <em>command_queue</em> and <em>dst_buffer</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>src_offset</em>, <em>dst_offset</em>, <em>size</em>, <em>src_offset</em>
-+ <em>size</em> or <em>dst_offset</em> + <em>size</em> require accessing elements
-outside the <em>src_buffer</em> and <em>dst_buffer</em> buffer objects respectively.</p>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>src_buffer</em> is not a valid buffer object</p>
</li>
<li>
-<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a> if <em>src_buffer</em> is a sub-buffer object
-and <em>offset</em> specified when the sub-buffer object is created is not
-aligned to <a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for device associated
-with <em>queue</em>.
+<p>if <em>dst_buffer</em> is not a valid buffer object</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>src_buffer</em> is a sub-buffer object and the offset specified when the
+sub-buffer object was created is not aligned to the
+<a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for the device associated
+with <em>command_queue</em>.
This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
</li>
<li>
-<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a> if <em>dst_buffer</em> is a sub-buffer object
-and <em>offset</em> specified when the sub-buffer object is created is not
-aligned to <a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for device associated
-with <em>queue</em>.
+<p>if <em>dst_buffer</em> is a sub-buffer object and the offset specified when the
+sub-buffer object was created is not aligned to the
+<a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for the device associated
+with <em>command_queue</em>.
This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
</li>
-<li>
-<p><a href="#CL_MEM_COPY_OVERLAP"><code>CL_MEM_<wbr>COPY_<wbr>OVERLAP</code></a> if <em>src_buffer</em> and <em>dst_buffer</em> are the same buffer
-or sub-buffer object and the source and destination regions overlap or
-if <em>src_buffer</em> and <em>dst_buffer</em> are different sub-buffers of the same
-associated buffer object and they overlap.
-The regions overlap if <em>src_offset</em> ≤ <em>dst_offset</em> ≤
-<em>src_offset</em> + <em>size</em> - 1 or if <em>dst_offset</em> ≤ <em>src_offset</em> ≤
-<em>dst_offset</em> + <em>size</em> - 1.</p>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a> if there is a failure to allocate
-memory for data store associated with <em>src_buffer</em> or <em>dst_buffer</em>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the region specified by <em>src_offset</em> and <em>size</em> is out of bounds of <em>src_buffer</em></p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if the region specified by <em>dst_offset</em> and <em>size</em> is out of bounds of <em>dst_buffer</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>dst_buffer</em> was created with
-<a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a>.</p>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
+</li>
+<li>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_MEM_COPY_OVERLAP"><code>CL_MEM_<wbr>COPY_<wbr>OVERLAP</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>src_buffer</em> and <em>dst_buffer</em> are the same buffer or sub-buffer object and the source and destination regions overlap</p>
+</li>
+<li>
+<p>if <em>src_buffer</em> and <em>dst_buffer</em> are different sub-buffers of the same associated buffer object and they overlap</p>
+</li>
+<li>
+<p>Refer to <a href="#check-copy-overlap">Checking for Memory Copy Overlap</a> for
+details on how to determine if source and destination regions overlap.</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate memory for the data store associated with <em>src_buffer</em> or <em>dst_buffer</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>dst_buffer</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -12914,97 +14503,182 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if the context associated with <em>command_queue</em>,
-<em>src_buffer</em> and <em>dst_buffer</em> are not the same or if the context
-associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not
-the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and <em>src_buffer</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a> if <em>src_buffer</em> and <em>dst_buffer</em> are not valid
-buffer objects.</p>
+<p>if the context associated with <em>command_queue</em> and <em>dst_buffer</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>src_origin</em>, <em>dst_origin</em>, or <em>region</em> is <code>NULL</code>.</p>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if (<em>src_origin</em>, <em>region</em>, <em>src_row_pitch</em>,
-<em>src_slice_pitch</em>) or (<em>dst_origin</em>, <em>region</em>, <em>dst_row_pitch</em>,
-<em>dst_slice_pitch</em>) require accessing elements outside the <em>src_buffer</em>
-and <em>dst_buffer</em> buffer objects respectively.</p>
+<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>src_buffer</em> is not a valid buffer object</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if any <em>region</em> array element is 0.</p>
+<p>if <em>dst_buffer</em> is not a valid buffer object</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>src_row_pitch</em> is not 0 and is less than
-<em>region</em>[0].</p>
+<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>src_buffer</em> is a sub-buffer object and the offset specified when the
+sub-buffer object was created is not aligned to the
+<a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for the device associated
+with <em>command_queue</em>.
+This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>dst_row_pitch</em> is not 0 and is less than
-<em>region</em>[0].</p>
+<p>if <em>dst_buffer</em> is a sub-buffer object and the offset specified when the
+sub-buffer object was created is not aligned to the
+<a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for the device associated
+with <em>command_queue</em>.
+This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>src_slice_pitch</em> is not 0 and is less than
-<em>region</em>[1] × <em>src_row_pitch</em> or if <em>src_slice_pitch</em> is not 0 and
-is not a multiple of <em>src_row_pitch</em>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>src_origin</em>, <em>dst_origin</em>, or <em>region</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>dst_slice_pitch</em> is not 0 and is less than
-<em>region</em>[1] × <em>dst_row_pitch</em> or if <em>dst_slice_pitch</em> is not 0 and
-is not a multiple of <em>dst_row_pitch</em>.</p>
+<p>if the region specified by <em>src_origin</em>, <em>region</em>, <em>src_row_pitch</em>, and <em>src_slice_pitch</em> is out of bounds of <em>src_buffer</em></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>src_buffer</em> and <em>dst_buffer</em> are the same buffer
-object and <em>src_slice_pitch</em> is not equal to <em>dst_slice_pitch</em> and
-<em>src_row_pitch</em> is not equal to <em>dst_row_pitch</em>.</p>
+<p>if the region specified by <em>dst_origin</em>, <em>region</em>, <em>dst_row_pitch</em>, and <em>dst_slice_pitch</em> is out of bounds of <em>dst_buffer</em></p>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p>if any <em>region</em> array element is zero</p>
</li>
<li>
-<p><a href="#CL_MEM_COPY_OVERLAP"><code>CL_MEM_<wbr>COPY_<wbr>OVERLAP</code></a> if <em>src_buffer</em> and <em>dst_buffer</em> are the same buffer
-or sub-buffer object and the source and destination regions overlap or
-if <em>src_buffer</em> and <em>dst_buffer</em> are different sub-buffers of the same
-associated buffer object and they overlap.
-Refer to <a href="#check-copy-overlap">Checking for Memory Copy Overlap</a> for
+<p>if <em>src_row_pitch</em> is not equal to zero and is less than <em>region</em>[0]</p>
+</li>
+<li>
+<p>if <em>src_slice_pitch</em> is not equal to zero and is less than <em>region</em>[1] times <em>src_row_pitch</em></p>
+</li>
+<li>
+<p>if <em>src_slice_pitch</em> is not equal to zero and is not a multiple of <em>src_row_pitch</em></p>
+</li>
+<li>
+<p>if <em>dst_row_pitch</em> is not equal to zero and is less than <em>region</em>[0]</p>
+</li>
+<li>
+<p>if <em>dst_slice_pitch</em> is not equal to zero and is less than <em>region</em>[1] times <em>dst_row_pitch</em></p>
+</li>
+<li>
+<p>if <em>dst_slice_pitch</em> is not equal to zero and is not a multiple of <em>dst_row_pitch</em></p>
+</li>
+<li>
+<p>if <em>src_buffer</em> and <em>dst_buffer</em> are the same buffer object and <em>src_row_pitch</em> is not equal to <em>dst_row_pitch</em></p>
+</li>
+<li>
+<p>if <em>src_buffer</em> and <em>dst_buffer</em> are the same buffer object and <em>src_slice_pitch</em> is not equal to <em>dst_slice_pitch</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
+</li>
+<li>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
+</li>
+<li>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_MEM_COPY_OVERLAP"><code>CL_MEM_<wbr>COPY_<wbr>OVERLAP</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>src_buffer</em> and <em>dst_buffer</em> are the same buffer or sub-buffer object and the source and destination regions overlap</p>
+</li>
+<li>
+<p>if <em>src_buffer</em> and <em>dst_buffer</em> are different sub-buffers of the same associated buffer object and they overlap</p>
+</li>
+<li>
+<p>Refer to <a href="#check-copy-overlap">Checking for Memory Copy Overlap</a> for
details on how to determine if source and destination regions overlap.</p>
</li>
-<li>
-<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a> if <em>src_buffer</em> is a sub-buffer object
-and <em>offset</em> specified when the sub-buffer object is created is not
-aligned to <a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for device associated
-with <em>queue</em>.
-This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a> if <em>dst_buffer</em> is a sub-buffer object
-and <em>offset</em> specified when the sub-buffer object is created is not
-aligned to <a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for device associated
-with <em>queue</em>.
-This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
+<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate memory for the data store associated with <em>src_buffer</em> or <em>dst_buffer</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a> if there is a failure to allocate
-memory for data store associated with <em>src_buffer</em> or <em>dst_buffer</em>.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>dst_buffer</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
-</li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>dst_buffer</em> was created with
-<a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a>.</p>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -13133,55 +14807,137 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if the context associated with <em>command_queue</em> and
-<em>buffer</em> are not the same or if the context associated with
-<em>command_queue</em> and events in <em>event_wait_list</em> are not the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and <em>buffer</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a> if <em>buffer</em> is not a valid buffer object.</p>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>offset</em> or <em>offset</em> + <em>size</em> require accessing
-elements outside the <em>buffer</em> buffer object respectively.</p>
+<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>buffer</em> is not a valid buffer object</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>pattern</em> is <code>NULL</code> or if <em>pattern_size</em> is 0 or if
-<em>pattern_size</em> is not one of { 1, 2, 4, 8, 16, 32, 64, 128 }.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the region being filled specified by <em>offset</em> and <em>size</em> is out of bounds</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>offset</em> and <em>size</em> are not a multiple of
-<em>pattern_size</em>.</p>
+<p>if <em>pattern</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p>if <em>pattern_size</em> is zero</p>
</li>
<li>
-<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a> if <em>buffer</em> is a sub-buffer object and
-offset specified when the sub-buffer object is created is not aligned to
-<a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for device associated with <em>queue</em>.
+<p>if <em>pattern_size</em> is not a power of two</p>
+</li>
+<li>
+<p>if <em>pattern_size</em> is greater than 128</p>
+</li>
+<li>
+<p>if <em>offset</em> is not a multiple of <em>pattern_size</em></p>
+</li>
+<li>
+<p>if <em>size</em> is not a multiple of <em>pattern_size</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
+</li>
+<li>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
+</li>
+<li>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>buffer</em> is a sub-buffer object and the offset specified when the
+sub-buffer object was created is not aligned to the
+<a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for the device associated with
+<em>command_queue</em>.
This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
</li>
-<li>
-<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a> if there is a failure to allocate
-memory for data store associated with <em>buffer</em>.</p>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate memory for the data store associated with <em>buffer</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>buffer</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>buffer</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a>.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -13295,74 +15051,159 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if context associated with <em>command_queue</em> and
-<em>buffer</em> are not the same or if the context associated with
-<em>command_queue</em> and events in <em>event_wait_list</em> are not the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and <em>buffer</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a> if <em>buffer</em> is not a valid buffer object.</p>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if region being mapped given by (<em>offset</em>, <em>size</em>) is
-out of bounds or if <em>size</em> is 0 or if values specified in <em>map_flags</em>
-are not valid.</p>
+<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>buffer</em> is not a valid buffer object</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the region being mapped specified by <em>offset</em> and <em>size</em> is out of bounds</p>
</li>
<li>
-<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a> if <em>buffer</em> is a sub-buffer object and
-<em>offset</em> specified when the sub-buffer object is created is not aligned
-to <a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for the device associated with
-<em>queue</em>.
+<p>if <em>size</em> is zero</p>
+</li>
+<li>
+<p>if values specified in <em>map_flags</em> are not valid</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
+</li>
+<li>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
+</li>
+<li>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>buffer</em> is a sub-buffer object and the offset specified when the
+sub-buffer object was created is not aligned to the
+<a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for the device associated with
+<em>command_queue</em>.
This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
</li>
+</ul>
+</div>
+</li>
<li>
-<p><a href="#CL_MAP_FAILURE"><code>CL_MAP_<wbr>FAILURE</code></a> if there is a failure to map the requested region into
+<p><a href="#CL_MAP_FAILURE"><code>CL_MAP_<wbr>FAILURE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to map the requested region into
the host address space.
This error cannot occur for buffer objects created with
<a href="#CL_MEM_USE_HOST_PTR"><code>CL_MEM_<wbr>USE_<wbr>HOST_<wbr>PTR</code></a> or <a href="#CL_MEM_ALLOC_HOST_PTR"><code>CL_MEM_<wbr>ALLOC_<wbr>HOST_<wbr>PTR</code></a>.</p>
</li>
+</ul>
+</div>
+</li>
<li>
-<p><a href="#CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"><code>CL_EXEC_<wbr>STATUS_<wbr>ERROR_<wbr>FOR_<wbr>EVENTS_<wbr>IN_<wbr>WAIT_<wbr>LIST</code></a> if the map operation is
-blocking and the execution status of any of the events in
-<em>event_wait_list</em> is a negative integer value.
+<p><a href="#CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"><code>CL_EXEC_<wbr>STATUS_<wbr>ERROR_<wbr>FOR_<wbr>EVENTS_<wbr>IN_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the map operations is blocking and the execution status of
+any of the events in <em>event_wait_list</em> is a negative integer value indicating an error.
This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
</li>
-<li>
-<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a> if there is a failure to allocate
-memory for data store associated with <em>buffer</em>.</p>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>buffer</em> has been created with
-<a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a> or <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a> and <a href="#CL_MAP_READ"><code>CL_MAP_<wbr>READ</code></a> is set
-in <em>map_flags</em> or if <em>buffer</em> has been created with
-<a href="#CL_MEM_HOST_READ_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>READ_<wbr>ONLY</code></a> or <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a> and <a href="#CL_MAP_WRITE"><code>CL_MAP_<wbr>WRITE</code></a> or
-<a href="#CL_MAP_WRITE_INVALIDATE_REGION"><code>CL_MAP_<wbr>WRITE_<wbr>INVALIDATE_<wbr>REGION</code></a> is set in <em>map_flags</em>.</p>
+<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate memory for the data store associated with <em>buffer</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>buffer</em> was created with <a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a> or <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a> and <a href="#CL_MAP_READ"><code>CL_MAP_<wbr>READ</code></a> is set in <em>map_flags</em></p>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p>if <em>buffer</em> was created with <a href="#CL_MEM_HOST_READ_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>READ_<wbr>ONLY</code></a> or <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a> and <a href="#CL_MAP_WRITE"><code>CL_MAP_<wbr>WRITE</code></a> or <a href="#CL_MAP_WRITE_INVALIDATE_REGION"><code>CL_MAP_<wbr>WRITE_<wbr>INVALIDATE_<wbr>REGION</code></a> is set in <em>map_flags</em></p>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if mapping would lead to overlapping regions being
-mapped for writing.</p>
+<p>if <em>buffer</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a> and <a href="#CL_MAP_WRITE"><code>CL_MAP_<wbr>WRITE</code></a> or <a href="#CL_MAP_WRITE_INVALIDATE_REGION"><code>CL_MAP_<wbr>WRITE_<wbr>INVALIDATE_<wbr>REGION</code></a> is set in <em>map_flags</em></p>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>buffer</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a>
-in <em>flags</em> and <a href="#CL_MAP_WRITE"><code>CL_MAP_<wbr>WRITE</code></a> or <a href="#CL_MAP_WRITE_INVALIDATE_REGION"><code>CL_MAP_<wbr>WRITE_<wbr>INVALIDATE_<wbr>REGION</code></a> is set
-in <em>map_flags</em>.</p>
+<p>if mapping would lead to overlapping regions being mapped for writing</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -13853,7 +15694,7 @@
<p><em>properties</em> is an optional list of properties for the image object and their corresponding values.
The list is terminated with the special property <code>0</code>.
If no properties are required, <em>properties</em> may be <code>NULL</code>.
-OpenCL 3.0 does not define any optional properties for images,
+OpenCL does not define any optional properties for images,
but extensions may define properties as described in the
<a href="#external-image-memory-properties-table">List of supported image creation properties</a>.</p>
</li>
@@ -14266,7 +16107,7 @@
</li>
<li>
<p>if <em>properties</em> includes an AHardwareBuffer external memory handle and
-the AHardwareBuffer format is not supported</p>
+the AHardwareBuffer format is <code>AHARDWAREBUFFER_FORMAT_BLOB</code> or not supported</p>
</li>
</ul>
</div>
@@ -15116,7 +16957,7 @@
for all devices in the context.</p>
</li>
<li>
-<p><em>image_array_size</em> <sup class="footnote">[<a id="_footnoteref_17" class="footnote" href="#_footnotedef_17" title="View footnote.">17</a>]</sup> is the number of
+<p><em>image_array_size</em> <sup class="footnote">[<a id="_footnoteref_18" class="footnote" href="#_footnotedef_18" title="View footnote.">18</a>]</sup> is the number of
images in the image array.
It is only used if the image is a 1D image array or 2D image array.
For a 1D image array or 2D image array, the image array size must be
@@ -15176,7 +17017,7 @@
mipmap level, unless the <a href="#cl_khr_mipmap_image"><code>cl_khr_<wbr>mipmap_<wbr>image</code></a> extension is supported.
When the <a href="#cl_khr_mipmap_image"><code>cl_khr_<wbr>mipmap_<wbr>image</code></a> extension is supported, <em>num_mip_levels</em>
may additionally specify the total number of mipmap levels in the image,
-including the base level <sup class="footnote">[<a id="_footnoteref_18" class="footnote" href="#_footnotedef_18" title="View footnote.">18</a>]</sup>.</p>
+including the base level <sup class="footnote">[<a id="_footnoteref_19" class="footnote" href="#_footnotedef_19" title="View footnote.">19</a>]</sup>.</p>
</li>
<li>
<p><em>num_samples</em> must be <code>0</code>.</p>
@@ -15188,9 +17029,9 @@
<a href="#CL_MEM_OBJECT_IMAGE2D"><code>CL_MEM_<wbr>OBJECT_<wbr>IMAGE2D</code></a>
, or any other <code>image_type</code> if the <a href="#cl_ext_image_from_buffer"><code>cl_ext_<wbr>image_<wbr>from_<wbr>buffer</code></a> extension
is supported.
-<sup class="footnote">[<a id="_footnoteref_19" class="footnote" href="#_footnotedef_19" title="View footnote.">19</a>]</sup>
+<sup class="footnote">[<a id="_footnoteref_20" class="footnote" href="#_footnotedef_20" title="View footnote.">20</a>]</sup>
<code>mem_object</code> can be an image object if <code>image_type</code> is
-<a href="#CL_MEM_OBJECT_IMAGE2D"><code>CL_MEM_<wbr>OBJECT_<wbr>IMAGE2D</code></a> <sup class="footnote">[<a id="_footnoteref_20" class="footnote" href="#_footnotedef_20" title="View footnote.">20</a>]</sup>.
+<a href="#CL_MEM_OBJECT_IMAGE2D"><code>CL_MEM_<wbr>OBJECT_<wbr>IMAGE2D</code></a> <sup class="footnote">[<a id="_footnoteref_21" class="footnote" href="#_footnotedef_21" title="View footnote.">21</a>]</sup>.
Otherwise it must be <code>NULL</code>.
The image pixels are taken from the memory objects data store.
When the contents of the specified memory objects data store are modified,
@@ -15420,7 +17261,7 @@
information about the image formats being queried and is described in
the <a href="#memory-flags-table">Memory Flags</a> table.
<em>flags</em> may be <a href="#CL_MEM_READ_WRITE"><code>CL_MEM_<wbr>READ_<wbr>WRITE</code></a> to query image formats that may be read
-from and written to by different kernel instances when correctly ordered by
+from and written to by different kernel-instances when correctly ordered by
event dependencies, or <a href="#CL_MEM_READ_ONLY"><code>CL_MEM_<wbr>READ_<wbr>ONLY</code></a> to query image formats that may
be read from by a kernel, or <a href="#CL_MEM_WRITE_ONLY"><code>CL_MEM_<wbr>WRITE_<wbr>ONLY</code></a> to query image formats that
may be written to by a kernel, or <a href="#CL_MEM_KERNEL_READ_AND_WRITE"><code>CL_MEM_<wbr>KERNEL_<wbr>READ_<wbr>AND_<wbr>WRITE</code></a> to query
@@ -15466,19 +17307,52 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if <em>context</em> is not a valid context.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>context</em> is not a valid context</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>flags</em> or <em>image_type</em> are not valid, or if
-<em>num_entries</em> is 0 and <em>image_formats</em> is not <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>flags</em> is not valid</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if <em>image_type</em> is not valid</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p>if <em>num_entries</em> is zero and <em>image_formats</em> is not <code>NULL</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -15541,7 +17415,7 @@
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#CL_DEPTH"><code>CL_DEPTH</code></a> <sup class="footnote">[<a id="_footnoteref_21" class="footnote" href="#_footnotedef_21" title="View footnote.">21</a>]</sup></p>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#CL_DEPTH"><code>CL_DEPTH</code></a> <sup class="footnote">[<a id="_footnoteref_22" class="footnote" href="#_footnotedef_22" title="View footnote.">22</a>]</sup></p>
<p class="tableblock">Also supported if the <a href="#cl_khr_depth_images"><code>cl_khr_<wbr>depth_<wbr>images</code></a> extension is supported.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#CL_UNORM_INT16"><code>CL_UNORM_<wbr>INT16</code></a><br>
<a href="#CL_FLOAT"><code>CL_FLOAT</code></a></p></td>
@@ -15593,15 +17467,15 @@
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#CL_sRGBA"><code>CL_sRGBA</code></a> <sup class="footnote">[<a id="_footnoteref_22" class="footnote" href="#_footnotedef_22" title="View footnote.">22</a>]</sup></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#CL_sRGBA"><code>CL_sRGBA</code></a> <sup class="footnote">[<a id="_footnoteref_23" class="footnote" href="#_footnotedef_23" title="View footnote.">23</a>]</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#CL_UNORM_INT8"><code>CL_UNORM_<wbr>INT8</code></a></p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
-<p>For full profile devices supporting other OpenCL versions, such as OpenCL 1.2
-or OpenCL 3.0, the minimum list of supported image formats for either reading
-or writing in a kernel is:</p>
+<p>For full profile devices supporting other OpenCL versions, such as OpenCL 1.2,
+OpenCL 3.0, or OpenCL 3.1, the minimum list of supported image formats for
+either reading or writing in a kernel is:</p>
</div>
<table id="min-supported-image-formats" class="tableblock frame-all grid-all stretch">
<caption class="title">Table 28. Minimum list of required image formats for reading or writing</caption>
@@ -15641,9 +17515,9 @@
</table>
<div class="paragraph">
<p>For full profile devices that support reading from and writing to the same
-image object from the same kernel instance (see <a href="#CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS"><code>CL_DEVICE_<wbr>MAX_<wbr>READ_<wbr>WRITE_<wbr>IMAGE_<wbr>ARGS</code></a>),
+image object from the same kernel-instance (see <a href="#CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS"><code>CL_DEVICE_<wbr>MAX_<wbr>READ_<wbr>WRITE_<wbr>IMAGE_<wbr>ARGS</code></a>),
the minimum list of supported image formats for reading and writing in
-the same kernel instance is:</p>
+the same kernel-instance is:</p>
</div>
<table id="min-supported-image-formats-read-write" class="tableblock frame-all grid-all stretch">
<caption class="title">Table 29. Minimum list of required image formats for reading and writing</caption>
@@ -16532,90 +18406,174 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if the context associated with <em>command_queue</em> and
-<em>image</em> are not the same or if the context associated with
-<em>command_queue</em> and events in <em>event_wait_list</em> are not the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and <em>image</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a> if <em>image</em> is not a valid image object.</p>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>origin</em> or <em>region</em> is <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>image</em> is not a valid image object</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if the region being read or written specified by
-<em>origin</em> and <em>region</em> is out of bounds.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>origin</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if values in <em>origin</em> and <em>region</em> do not follow rules
-described in the argument description for <em>origin</em> and <em>region</em>.</p>
+<p>if <em>region</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>image</em> is a 1D or 2D image and <em>slice_pitch</em> or
-<em>input_slice_pitch</em> is not 0.</p>
+<p>if the region being read or written specified by <em>origin</em> and <em>region</em> is out of bounds</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>ptr</em> is <code>NULL</code>.</p>
+<p>if values in <em>origin</em> and <em>region</em> do not follow the rules described in the argument description for <em>origin</em> and <em>region</em></p>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p>if <em>image</em> is a 1D or 2D image and <em>slice_pitch</em> or <em>input_slice_pitch</em> is not zero</p>
</li>
<li>
-<p><a href="#CL_INVALID_IMAGE_SIZE"><code>CL_INVALID_<wbr>IMAGE_<wbr>SIZE</code></a> if image dimensions (image width, height,
-specified or compute row and/or slice pitch) for <em>image</em> are not
-supported by device associated with <em>queue</em>.</p>
+<p>if <em>ptr</em> is <code>NULL</code></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_IMAGE_FORMAT_NOT_SUPPORTED"><code>CL_IMAGE_<wbr>FORMAT_<wbr>NOT_<wbr>SUPPORTED</code></a> if image format (image channel order and
-data type) for <em>image</em> are not supported by device associated with
-<em>queue</em>.</p>
+<p><a href="#CL_INVALID_MIP_LEVEL"><code>CL_INVALID_<wbr>MIP_<wbr>LEVEL</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the <a href="#cl_khr_mipmap_image"><code>cl_khr_<wbr>mipmap_<wbr>image</code></a> extension is supported and the mip level specified in <em>origin</em> is not a valid level for <em>image</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a> if there is a failure to allocate
-memory for data store associated with <em>image</em>.</p>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if the device associated with <em>command_queue</em> does
-not support images (i.e. <a href="#CL_DEVICE_IMAGE_SUPPORT"><code>CL_DEVICE_<wbr>IMAGE_<wbr>SUPPORT</code></a> specified in the
-<a href="#device-queries-table">Device Queries</a> table is <a href="#CL_FALSE"><code>CL_FALSE</code></a>).</p>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <a href="#clEnqueueReadImage"><strong>clEnqueueReadImage</strong></a> is called on <em>image</em> which
-has been created with <a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a> or <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a>.</p>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <a href="#clEnqueueWriteImage"><strong>clEnqueueWriteImage</strong></a> is called on <em>image</em> which
-has been created with <a href="#CL_MEM_HOST_READ_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>READ_<wbr>ONLY</code></a> or <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a>.</p>
+<p><a href="#CL_INVALID_IMAGE_SIZE"><code>CL_INVALID_<wbr>IMAGE_<wbr>SIZE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the dimensions for <em>image</em>, such as the image width or image height,
+are not supported by the device associated with <em>command_queue</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"><code>CL_EXEC_<wbr>STATUS_<wbr>ERROR_<wbr>FOR_<wbr>EVENTS_<wbr>IN_<wbr>WAIT_<wbr>LIST</code></a> if the read and write
-operations are blocking and the execution status of any of the events in
-<em>event_wait_list</em> is a negative integer value.
+<p><a href="#CL_IMAGE_FORMAT_NOT_SUPPORTED"><code>CL_IMAGE_<wbr>FORMAT_<wbr>NOT_<wbr>SUPPORTED</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the format for <em>image</em>, such as the image channel order or image
+channel data type, are not supported by the device associated with
+<em>command_queue</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"><code>CL_EXEC_<wbr>STATUS_<wbr>ERROR_<wbr>FOR_<wbr>EVENTS_<wbr>IN_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the read or write operations are blocking and the execution status of
+any of the events in <em>event_wait_list</em> is a negative integer value indicating an error.
This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
</li>
-<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate memory for the data store associated with <em>image</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_MIP_LEVEL"><code>CL_INVALID_<wbr>MIP_<wbr>LEVEL</code></a> if the <a href="#cl_khr_mipmap_image"><code>cl_khr_<wbr>mipmap_<wbr>image</code></a> extension is
-supported, and the mip level specified in <em>origin</em> is not a valid level
-for <em>image</em>,</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the device associated with <em>command_queue</em> does not support images (the query for <a href="#CL_DEVICE_IMAGE_SUPPORT"><code>CL_DEVICE_<wbr>IMAGE_<wbr>SUPPORT</code></a> returns <a href="#CL_FALSE"><code>CL_FALSE</code></a>)</p>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <a href="#clEnqueueWriteImage"><strong>clEnqueueWriteImage</strong></a> is called on <em>image</em> which
-has been created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a>.</p>
+<p>if <a href="#clEnqueueReadImage"><strong>clEnqueueReadImage</strong></a> is called on <em>image</em> which has been created with <a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a> or <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a></p>
+</li>
+<li>
+<p>if <a href="#clEnqueueWriteImage"><strong>clEnqueueWriteImage</strong></a> is called on <em>image</em> which has been created with <a href="#CL_MEM_HOST_READ_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>READ_<wbr>ONLY</code></a> or <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a></p>
+</li>
+<li>
+<p>if <a href="#clEnqueueWriteImage"><strong>clEnqueueWriteImage</strong></a> is called on <em>image</em> which has been created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -16813,82 +18771,185 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if the context associated with <em>command_queue</em>,
-<em>src_image</em> and <em>dst_image</em> are not the same or if the context
-associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not
-the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and <em>src_image</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a> if <em>src_image</em> and <em>dst_image</em> are not valid image
-objects.</p>
+<p>if the context associated with <em>command_queue</em> and <em>dst_image</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_IMAGE_FORMAT_MISMATCH"><code>CL_IMAGE_<wbr>FORMAT_<wbr>MISMATCH</code></a> if <em>src_image</em> and <em>dst_image</em> do not use the
-same image format.</p>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>src_origin</em>, <em>dst_origin</em>, or <em>region</em> is <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>src_image</em> is not a valid image object</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if the 2D or 3D rectangular region specified by
-<em>src_origin</em> and <em>src_origin</em> + <em>region</em> refers to a region outside
-<em>src_image</em>, or if the 2D or 3D rectangular region specified by
-<em>dst_origin</em> and <em>dst_origin</em> + <em>region</em> refers to a region outside
-<em>dst_image</em>.</p>
+<p>if <em>dst_image</em> is not a valid image object</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if values in <em>src_origin</em>, <em>dst_origin</em> and <em>region</em> do
-not follow rules described in the argument description for <em>src_origin</em>,
-<em>dst_origin</em> and <em>region</em>.</p>
+<p><a href="#CL_IMAGE_FORMAT_MISMATCH"><code>CL_IMAGE_<wbr>FORMAT_<wbr>MISMATCH</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>src_image</em> and <em>dst_image</em> do not use the same image format</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>src_origin</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_IMAGE_SIZE"><code>CL_INVALID_<wbr>IMAGE_<wbr>SIZE</code></a> if image dimensions (image width, height,
-specified or compute row and/or slice pitch) for <em>src_image</em> or
-<em>dst_image</em> are not supported by device associated with <em>queue</em>.</p>
+<p>if <em>dst_origin</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_IMAGE_FORMAT_NOT_SUPPORTED"><code>CL_IMAGE_<wbr>FORMAT_<wbr>NOT_<wbr>SUPPORTED</code></a> if image format (image channel order and
-data type) for <em>src_image</em> or <em>dst_image</em> are not supported by device
-associated with <em>queue</em>.</p>
+<p>if <em>region</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a> if there is a failure to allocate
-memory for data store associated with <em>src_image</em> or <em>dst_image</em>.</p>
+<p>if the 2D or 3D rectangular region specified by <em>src_origin</em> and <em>region</em> refers to a region outside <em>src_image</em></p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if the 2D or 3D rectangular region specified by <em>dst_origin</em> and <em>region</em> refers to a region outside <em>dst_image</em></p>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p>if values in <em>src_origin</em>, <em>dst_origin</em>, and <em>region</em> do not follow the rules described in the argument descriptions for <em>src_origin</em>, <em>dst_origin</em> and <em>region</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if the device associated with <em>command_queue</em> does
-not support images (i.e. <a href="#CL_DEVICE_IMAGE_SUPPORT"><code>CL_DEVICE_<wbr>IMAGE_<wbr>SUPPORT</code></a> specified in the
-<a href="#device-queries-table">Device Queries</a> table is <a href="#CL_FALSE"><code>CL_FALSE</code></a>).</p>
+<p><a href="#CL_INVALID_MIP_LEVEL"><code>CL_INVALID_<wbr>MIP_<wbr>LEVEL</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the <a href="#cl_khr_mipmap_image"><code>cl_khr_<wbr>mipmap_<wbr>image</code></a> extension is supported and the mip level specified in <em>src_origin</em> is not a valid level for <em>src_image</em></p>
</li>
<li>
-<p><a href="#CL_MEM_COPY_OVERLAP"><code>CL_MEM_<wbr>COPY_<wbr>OVERLAP</code></a> if <em>src_image</em> and <em>dst_image</em> are the same image
-object and the source and destination regions overlap.</p>
+<p>if the <a href="#cl_khr_mipmap_image"><code>cl_khr_<wbr>mipmap_<wbr>image</code></a> extension is supported and the mip level specified in <em>dst_origin</em> is not a valid level for <em>dst_image</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_MIP_LEVEL"><code>CL_INVALID_<wbr>MIP_<wbr>LEVEL</code></a> if the <a href="#cl_khr_mipmap_image"><code>cl_khr_<wbr>mipmap_<wbr>image</code></a> extension is
-supported, and the mip level specified in <em>src_origin</em> or <em>dst_origin</em>
-is not a valid level for the corresponding <em>src_image</em> or <em>dst_image</em>,</p>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>dst_image</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a>.</p>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
+</li>
+<li>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_IMAGE_SIZE"><code>CL_INVALID_<wbr>IMAGE_<wbr>SIZE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the dimensions for <em>src_image</em> or <em>dst_image</em>, such as the image width or image height,
+are not supported by the device associated with <em>command_queue</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_IMAGE_FORMAT_NOT_SUPPORTED"><code>CL_IMAGE_<wbr>FORMAT_<wbr>NOT_<wbr>SUPPORTED</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the format for <em>src_image</em> or <em>dst_image</em>, such as the image channel order or image
+channel data type, are not supported by the device associated with
+<em>command_queue</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_MEM_COPY_OVERLAP"><code>CL_MEM_<wbr>COPY_<wbr>OVERLAP</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>src_image</em> and <em>dst_image</em> are the same image object and the source and destination regions overlap</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate memory for the data store associated with <em>src_image</em> or <em>dst_image</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the device associated with <em>command_queue</em> does not support images (the query for <a href="#CL_DEVICE_IMAGE_SUPPORT"><code>CL_DEVICE_<wbr>IMAGE_<wbr>SUPPORT</code></a> returns <a href="#CL_FALSE"><code>CL_FALSE</code></a>)</p>
+</li>
+<li>
+<p>if <em>dst_image</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -17032,66 +19093,153 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if the context associated with <em>command_queue</em> and
-<em>image</em> are not the same or if the context associated with
-<em>command_queue</em> and events in <em>event_wait_list</em> are not the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and <em>image</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a> if <em>image</em> is not a valid image object.</p>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>fill_color</em> is <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>image</em> is not a valid image object</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>origin</em> or <em>region</em> is <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>fill_color</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if the region being filled as specified by <em>origin</em> and
-<em>region</em> is out of bounds.</p>
+<p>if <em>origin</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if values in <em>origin</em> and <em>region</em> do not follow rules
-described in the argument description for <em>origin</em> and <em>region</em>.</p>
+<p>if <em>region</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p>if the region being filled specified by <em>origin</em> and <em>region</em> is out of bounds</p>
</li>
<li>
-<p><a href="#CL_INVALID_IMAGE_SIZE"><code>CL_INVALID_<wbr>IMAGE_<wbr>SIZE</code></a> if image dimensions (image width, height,
-specified or compute row and/or slice pitch) for <em>image</em> are not
-supported by device associated with <em>queue</em>.</p>
+<p>if values in <em>origin</em> and <em>region</em> do not follow the rules described in the argument description for <em>origin</em> and <em>region</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_IMAGE_FORMAT_NOT_SUPPORTED"><code>CL_IMAGE_<wbr>FORMAT_<wbr>NOT_<wbr>SUPPORTED</code></a> if image format (image channel order and
-data type) for <em>image</em> are not supported by device associated with
-<em>queue</em>.</p>
+<p><a href="#CL_INVALID_MIP_LEVEL"><code>CL_INVALID_<wbr>MIP_<wbr>LEVEL</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the <a href="#cl_khr_mipmap_image"><code>cl_khr_<wbr>mipmap_<wbr>image</code></a> extension is supported and the mip level specified in <em>origin</em> is not a valid level for <em>image</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a> if there is a failure to allocate
-memory for data store associated with <em>image</em>.</p>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_MIP_LEVEL"><code>CL_INVALID_<wbr>MIP_<wbr>LEVEL</code></a> if the <a href="#cl_khr_mipmap_image"><code>cl_khr_<wbr>mipmap_<wbr>image</code></a> extension is
-supported, and the mip level specified in <em>origin</em> is not a valid level
-for <em>image</em>,</p>
+<p><a href="#CL_INVALID_IMAGE_SIZE"><code>CL_INVALID_<wbr>IMAGE_<wbr>SIZE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the dimensions for <em>image</em>, such as the image width or image height,
+are not supported by the device associated with <em>command_queue</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>image</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a>.</p>
+<p><a href="#CL_IMAGE_FORMAT_NOT_SUPPORTED"><code>CL_IMAGE_<wbr>FORMAT_<wbr>NOT_<wbr>SUPPORTED</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the format for <em>image</em>, such as the image channel order or image
+channel data type, are not supported by the device associated with
+<em>command_queue</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate memory for the data store associated with <em>image</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the device associated with <em>command_queue</em> does not support images (the query for <a href="#CL_DEVICE_IMAGE_SUPPORT"><code>CL_DEVICE_<wbr>IMAGE_<wbr>SUPPORT</code></a> returns <a href="#CL_FALSE"><code>CL_FALSE</code></a>)</p>
+</li>
+<li>
+<p>if <em>image</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -17214,81 +19362,179 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if the context associated with <em>command_queue</em>,
-<em>src_image</em> and <em>dst_buffer</em> are not the same or if the context
-associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not
-the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and <em>src_image</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a> if <em>src_image</em> is not a valid image object or
-<em>dst_buffer</em> is not a valid buffer object or if <em>src_image</em> is a 1D
-image buffer object created from <em>dst_buffer</em>.</p>
+<p>if the context associated with <em>command_queue</em> and <em>dst_buffer</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>src_origin</em> or <em>region</em> is <code>NULL</code>.</p>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if the 1D, 2D or 3D rectangular region specified by
-<em>src_origin</em> and <em>src_origin</em> + <em>region</em> refers to a region outside
-<em>src_image</em>, or if the region specified by <em>dst_offset</em> and <em>dst_offset</em>
-+ <em>dst_cb</em> to a region outside <em>dst_buffer</em>.</p>
+<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>src_image</em> is not a valid image object</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if values in <em>src_origin</em> and <em>region</em> do not follow
-rules described in the argument description for <em>src_origin</em> and
-<em>region</em>.</p>
+<p>if <em>dst_buffer</em> is not a valid buffer object</p>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p>if <em>src_image</em> is a 1D image buffer object created from <em>dst_buffer</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a> if <em>dst_buffer</em> is a sub-buffer object
-and <em>offset</em> specified when the sub-buffer object is created is not
-aligned to <a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for device associated
-with <em>queue</em>.
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>src_origin</em> is <code>NULL</code></p>
+</li>
+<li>
+<p>if <em>region</em> is <code>NULL</code></p>
+</li>
+<li>
+<p>if the 1D, 2D or 3D rectangular region specified by <em>src_origin</em> and <em>region</em> is out of bounds of <em>src_image</em></p>
+</li>
+<li>
+<p>if the region specified by <em>dst_offset</em> and the computed <em>dst_cb</em> is out of bounds of <em>dst_buffer</em></p>
+</li>
+<li>
+<p>if values in <em>src_origin</em> and <em>region</em> do not follow the rules described in the argument description for <em>src_origin</em> and <em>region</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_MIP_LEVEL"><code>CL_INVALID_<wbr>MIP_<wbr>LEVEL</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the <a href="#cl_khr_mipmap_image"><code>cl_khr_<wbr>mipmap_<wbr>image</code></a> extension is supported and the mip level specified in <em>src_origin</em> is not a valid level for <em>src_image</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
+</li>
+<li>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
+</li>
+<li>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>dst_buffer</em> is a sub-buffer object and the offset specified when the
+sub-buffer object was created is not aligned to the
+<a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for the device associated
+with <em>command_queue</em>.
This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
</li>
-<li>
-<p><a href="#CL_INVALID_IMAGE_SIZE"><code>CL_INVALID_<wbr>IMAGE_<wbr>SIZE</code></a> if image dimensions (image width, height,
-specified or compute row and/or slice pitch) for <em>src_image</em> are not
-supported by device associated with <em>queue</em>.</p>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_IMAGE_FORMAT_NOT_SUPPORTED"><code>CL_IMAGE_<wbr>FORMAT_<wbr>NOT_<wbr>SUPPORTED</code></a> if image format (image channel order and
-data type) for <em>src_image</em> are not supported by device associated with
-<em>queue</em>.</p>
+<p><a href="#CL_INVALID_IMAGE_SIZE"><code>CL_INVALID_<wbr>IMAGE_<wbr>SIZE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the dimensions for <em>src_image</em>, such as the image width or image height,
+are not supported by the device associated with <em>command_queue</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a> if there is a failure to allocate
-memory for data store associated with <em>src_image</em> or <em>dst_buffer</em>.</p>
+<p><a href="#CL_IMAGE_FORMAT_NOT_SUPPORTED"><code>CL_IMAGE_<wbr>FORMAT_<wbr>NOT_<wbr>SUPPORTED</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the format for <em>src_image</em>, such as the image channel order or image
+channel data type, are not supported by the device associated with
+<em>command_queue</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if the device associated with <em>command_queue</em> does
-not support images (i.e. <a href="#CL_DEVICE_IMAGE_SUPPORT"><code>CL_DEVICE_<wbr>IMAGE_<wbr>SUPPORT</code></a> specified in the
-<a href="#device-queries-table">Device Queries</a> table is <a href="#CL_FALSE"><code>CL_FALSE</code></a>).</p>
+<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate memory for the data store associated with <em>src_image</em></p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if there is a failure to allocate memory for the data store associated with <em>dst_buffer</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the device associated with <em>command_queue</em> does not support images (the query for <a href="#CL_DEVICE_IMAGE_SUPPORT"><code>CL_DEVICE_<wbr>IMAGE_<wbr>SUPPORT</code></a> returns <a href="#CL_FALSE"><code>CL_FALSE</code></a>)</p>
</li>
<li>
-<p><a href="#CL_INVALID_MIP_LEVEL"><code>CL_INVALID_<wbr>MIP_<wbr>LEVEL</code></a> if the <a href="#cl_khr_mipmap_image"><code>cl_khr_<wbr>mipmap_<wbr>image</code></a> extension is
-supported, and the mip level specified in <em>src_origin</em> is not a valid
-level for <em>src_image</em>,</p>
+<p>if <em>dst_buffer</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>dst_buffer</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a>.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -17410,81 +19656,179 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if the context associated with <em>command_queue</em>,
-<em>src_buffer</em> and <em>dst_image</em> are not the same or if the context
-associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not
-the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and <em>src_buffer</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a> if <em>src_buffer</em> is not a valid buffer object or
-<em>dst_image</em> is not a valid image object or if <em>dst_image</em> is a 1D image
-buffer object created from <em>src_buffer</em>.</p>
+<p>if the context associated with <em>command_queue</em> and <em>dst_image</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>dst_origin</em> or <em>region</em> is <code>NULL</code>.</p>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if the 1D, 2D or 3D rectangular region specified by
-<em>dst_origin</em> and <em>dst_origin</em> + <em>region</em> refer to a region outside
-<em>dst_image</em>, or if the region specified by <em>src_offset</em> and <em>src_offset</em>
-+ <em>src_cb</em> refer to a region outside <em>src_buffer</em>.</p>
+<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>src_buffer</em> is not a valid buffer object</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if values in <em>dst_origin</em> and <em>region</em> do not follow
-rules described in the argument description for <em>dst_origin</em> and
-<em>region</em>.</p>
+<p>if <em>dst_image</em> is not a valid image object</p>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p>if <em>dst_image</em> is a 1D image buffer object created from <em>src_buffer</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a> if <em>src_buffer</em> is a sub-buffer object
-and <em>offset</em> specified when the sub-buffer object is created is not
-aligned to <a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for device associated
-with <em>queue</em>.
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>dst_origin</em> is <code>NULL</code></p>
+</li>
+<li>
+<p>if <em>region</em> is <code>NULL</code></p>
+</li>
+<li>
+<p>if the region specified by <em>src_offset</em> and the computed <em>src_cb</em> is out of bounds of <em>src_buffer</em></p>
+</li>
+<li>
+<p>if the 1D, 2D or 3D rectangular region specified by <em>dst_origin</em> and <em>region</em> is out of bounds of <em>dst_image</em></p>
+</li>
+<li>
+<p>if values in <em>dst_origin</em> and <em>region</em> do not follow rules described in the argument description for <em>dst_origin</em> and <em>region</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_MIP_LEVEL"><code>CL_INVALID_<wbr>MIP_<wbr>LEVEL</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the <a href="#cl_khr_mipmap_image"><code>cl_khr_<wbr>mipmap_<wbr>image</code></a> extension is supported and the mip level specified in <em>dst_origin</em> is not a valid level for <em>dst_image</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
+</li>
+<li>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
+</li>
+<li>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>src_buffer</em> is a sub-buffer object and the offset specified when the
+sub-buffer object was created is not aligned to the
+<a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for the device associated
+with <em>command_queue</em>.
This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
</li>
-<li>
-<p><a href="#CL_INVALID_IMAGE_SIZE"><code>CL_INVALID_<wbr>IMAGE_<wbr>SIZE</code></a> if image dimensions (image width, height,
-specified or compute row and/or slice pitch) for <em>dst_image</em> are not
-supported by device associated with <em>queue</em>.</p>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_IMAGE_FORMAT_NOT_SUPPORTED"><code>CL_IMAGE_<wbr>FORMAT_<wbr>NOT_<wbr>SUPPORTED</code></a> if image format (image channel order and
-data type) for <em>dst_image</em> are not supported by device associated with
-<em>queue</em>.</p>
+<p><a href="#CL_INVALID_IMAGE_SIZE"><code>CL_INVALID_<wbr>IMAGE_<wbr>SIZE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the dimensions for <em>dst_image</em>, such as the image width or image height,
+are not supported by the device associated with <em>command_queue</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a> if there is a failure to allocate
-memory for data store associated with <em>src_buffer</em> or <em>dst_image</em>.</p>
+<p><a href="#CL_IMAGE_FORMAT_NOT_SUPPORTED"><code>CL_IMAGE_<wbr>FORMAT_<wbr>NOT_<wbr>SUPPORTED</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the format for <em>dst_image</em>, such as the image channel order or image
+channel data type, are not supported by the device associated with
+<em>command_queue</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if the device associated with <em>command_queue</em> does
-not support images (i.e. <a href="#CL_DEVICE_IMAGE_SUPPORT"><code>CL_DEVICE_<wbr>IMAGE_<wbr>SUPPORT</code></a> specified in the
-<a href="#device-queries-table">Device Queries</a> table is <a href="#CL_FALSE"><code>CL_FALSE</code></a>).</p>
+<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate memory for the data store associated with <em>src_buffer</em></p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if there is a failure to allocate memory for the data store associated with <em>dst_image</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the device associated with <em>command_queue</em> does not support images (the query for <a href="#CL_DEVICE_IMAGE_SUPPORT"><code>CL_DEVICE_<wbr>IMAGE_<wbr>SUPPORT</code></a> returns <a href="#CL_FALSE"><code>CL_FALSE</code></a>)</p>
</li>
<li>
-<p><a href="#CL_INVALID_MIP_LEVEL"><code>CL_INVALID_<wbr>MIP_<wbr>LEVEL</code></a> if the <a href="#cl_khr_mipmap_image"><code>cl_khr_<wbr>mipmap_<wbr>image</code></a> extension is
-supported, and the mip level specified in <em>dst_origin</em> is not a valid
-level for <em>dst_image</em>,</p>
+<p>if <em>dst_image</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>dst_image</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a>.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -17629,96 +19973,196 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if context associated with <em>command_queue</em> and
-<em>image</em> are not the same or if context associated with <em>command_queue</em>
-and events in <em>event_wait_list</em> are not the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and <em>image</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a> if <em>image</em> is not a valid image object.</p>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>origin</em> or <em>region</em> is <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>image</em> is not a valid image object</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if region being mapped given by (<em>origin</em>,
-<em>origin</em> + <em>region</em>) is out of bounds or if values specified in <em>map_flags</em>
-are not valid.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>origin</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if values in <em>origin</em> and <em>region</em> do not follow rules
-described in the argument description for <em>origin</em> and <em>region</em>.</p>
+<p>if <em>region</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>image_row_pitch</em> is <code>NULL</code>.</p>
+<p>if the region being mapped specified by <em>origin</em> and <em>region</em> is out of bounds</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>image</em> is a 3D image, 1D or 2D image array object
-and <em>image_slice_pitch</em> is <code>NULL</code>.</p>
+<p>if values specified in <em>map_flags</em> are not valid</p>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p>if values in <em>origin</em> and <em>region</em> do not follow the rules described in the argument description for <em>origin</em> and <em>region</em></p>
</li>
<li>
-<p><a href="#CL_INVALID_IMAGE_SIZE"><code>CL_INVALID_<wbr>IMAGE_<wbr>SIZE</code></a> if image dimensions (image width, height,
-specified or compute row and/or slice pitch) for <em>image</em> are not
-supported by device associated with <em>queue</em>.</p>
+<p>if <em>image_row_pitch</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_IMAGE_FORMAT_NOT_SUPPORTED"><code>CL_IMAGE_<wbr>FORMAT_<wbr>NOT_<wbr>SUPPORTED</code></a> if image format (image channel order and
-data type) for <em>image</em> are not supported by device associated with
-<em>queue</em>.</p>
+<p>if <em>image</em> is a 1D or 2D image array object and <em>image_slice_pitch</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_MAP_FAILURE"><code>CL_MAP_<wbr>FAILURE</code></a> if there is a failure to map the requested region into
+<p>if <em>image</em> is a 3D and <em>image_slice_pitch</em> is <code>NULL</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_MIP_LEVEL"><code>CL_INVALID_<wbr>MIP_<wbr>LEVEL</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the <a href="#cl_khr_mipmap_image"><code>cl_khr_<wbr>mipmap_<wbr>image</code></a> extension is supported and the mip level specified in <em>origin</em> is not a valid level for <em>image</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
+</li>
+<li>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
+</li>
+<li>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_IMAGE_SIZE"><code>CL_INVALID_<wbr>IMAGE_<wbr>SIZE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the dimensions for <em>image</em>, such as the image width or image height,
+are not supported by the device associated with <em>command_queue</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_IMAGE_FORMAT_NOT_SUPPORTED"><code>CL_IMAGE_<wbr>FORMAT_<wbr>NOT_<wbr>SUPPORTED</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the format for <em>image</em>, such as the image channel order or image
+channel data type, are not supported by the device associated with
+<em>command_queue</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_MAP_FAILURE"><code>CL_MAP_<wbr>FAILURE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to map the requested region into
the host address space.
This error cannot occur for image objects created with
<a href="#CL_MEM_USE_HOST_PTR"><code>CL_MEM_<wbr>USE_<wbr>HOST_<wbr>PTR</code></a> or <a href="#CL_MEM_ALLOC_HOST_PTR"><code>CL_MEM_<wbr>ALLOC_<wbr>HOST_<wbr>PTR</code></a>.</p>
</li>
+</ul>
+</div>
+</li>
<li>
-<p><a href="#CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"><code>CL_EXEC_<wbr>STATUS_<wbr>ERROR_<wbr>FOR_<wbr>EVENTS_<wbr>IN_<wbr>WAIT_<wbr>LIST</code></a> if the map operation is
-blocking and the execution status of any of the events in
-<em>event_wait_list</em> is a negative integer value.
+<p><a href="#CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"><code>CL_EXEC_<wbr>STATUS_<wbr>ERROR_<wbr>FOR_<wbr>EVENTS_<wbr>IN_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the map operations is blocking and the execution status of
+any of the events in <em>event_wait_list</em> is a negative integer value indicating an error.
This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
</li>
-<li>
-<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a> if there is a failure to allocate
-memory for data store associated with <em>image</em>.</p>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if the device associated with <em>command_queue</em> does
-not support images (i.e. <a href="#CL_DEVICE_IMAGE_SUPPORT"><code>CL_DEVICE_<wbr>IMAGE_<wbr>SUPPORT</code></a> specified in the
-<a href="#device-queries-table">Device Queries</a> table is <a href="#CL_FALSE"><code>CL_FALSE</code></a>).</p>
+<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate memory for the data store associated with <em>image</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>image</em> has been created with
-<a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a> or <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a> and <a href="#CL_MAP_READ"><code>CL_MAP_<wbr>READ</code></a> is set
-in <em>map_flags</em> or if <em>image</em> has been created with <a href="#CL_MEM_HOST_READ_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>READ_<wbr>ONLY</code></a>
-or <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a> and <a href="#CL_MAP_WRITE"><code>CL_MAP_<wbr>WRITE</code></a> or
-<a href="#CL_MAP_WRITE_INVALIDATE_REGION"><code>CL_MAP_<wbr>WRITE_<wbr>INVALIDATE_<wbr>REGION</code></a> is set in <em>map_flags</em>.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the device associated with <em>command_queue</em> does not support images (the query for <a href="#CL_DEVICE_IMAGE_SUPPORT"><code>CL_DEVICE_<wbr>IMAGE_<wbr>SUPPORT</code></a> returns <a href="#CL_FALSE"><code>CL_FALSE</code></a>)</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if <em>image</em> has been created with <a href="#CL_MEM_HOST_WRITE_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>WRITE_<wbr>ONLY</code></a> or <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a> and <a href="#CL_MAP_READ"><code>CL_MAP_<wbr>READ</code></a> is set in <em>map_flags</em></p>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p>if <em>image</em> has been created with <a href="#CL_MEM_HOST_READ_ONLY"><code>CL_MEM_<wbr>HOST_<wbr>READ_<wbr>ONLY</code></a> or <a href="#CL_MEM_HOST_NO_ACCESS"><code>CL_MEM_<wbr>HOST_<wbr>NO_<wbr>ACCESS</code></a> and <a href="#CL_MAP_WRITE"><code>CL_MAP_<wbr>WRITE</code></a> or <a href="#CL_MAP_WRITE_INVALIDATE_REGION"><code>CL_MAP_<wbr>WRITE_<wbr>INVALIDATE_<wbr>REGION</code></a> is set in <em>map_flags</em></p>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if mapping would lead to overlapping regions being
-mapped for writing.</p>
+<p>if <em>image</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a> in <em>flags</em> and <a href="#CL_MAP_WRITE"><code>CL_MAP_<wbr>WRITE</code></a> or <a href="#CL_MAP_WRITE_INVALIDATE_REGION"><code>CL_MAP_<wbr>WRITE_<wbr>INVALIDATE_<wbr>REGION</code></a> is set in <em>map_flags</em></p>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>image</em> was created with <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a>
-in <em>flags</em> and <a href="#CL_MAP_WRITE"><code>CL_MAP_<wbr>WRITE</code></a> or <a href="#CL_MAP_WRITE_INVALIDATE_REGION"><code>CL_MAP_<wbr>WRITE_<wbr>INVALIDATE_<wbr>REGION</code></a> is set
-in <em>map_flags</em>.</p>
+<p>if mapping would lead to overlapping regions being mapped for writing</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -17977,63 +20421,88 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a> if <em>image</em> is a not a valid image object.</p>
+<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>image</em> is a not a valid image object</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>param_name</em> is not one of the supported values, or
-if the size in bytes specified by <em>param_value_size</em> is less than size of
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>param_name</em> is not one of the supported values</p>
+</li>
+<li>
+<p>if the size in bytes specified by <em>param_value_size</em> is less than the size of
the return type specified in the
-<a href="#image-info-table">Image Object Queries</a> table
-and <em>param_value</em> is not <code>NULL</code>.</p>
-</li>
-<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
-</li>
-<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<a href="#image-info-table">Image Object Queries</a>
+table and <em>param_value</em> is not <code>NULL</code></p>
</li>
</ul>
</div>
-<div class="paragraph">
-<p>The following errors may be returned if the <a href="#cl_khr_dx9_media_sharing"><code>cl_khr_<wbr>dx9_<wbr>media_<wbr>sharing</code></a>
-extension is supported:</p>
-</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_DX9_MEDIA_SURFACE_KHR"><code>CL_INVALID_<wbr>DX9_<wbr>MEDIA_<wbr>SURFACE_<wbr>KHR</code></a></p>
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_DX9_MEDIA_SURFACE_KHR"><code>CL_INVALID_<wbr>DX9_<wbr>MEDIA_<wbr>SURFACE_<wbr>KHR</code></a> if <em>param_name</em> is
-<a href="#CL_IMAGE_DX9_MEDIA_PLANE_KHR"><code>CL_IMAGE_<wbr>DX9_<wbr>MEDIA_<wbr>PLANE_<wbr>KHR</code></a> and <em>image</em> was not created by calling
-<a href="#clCreateFromDX9MediaSurfaceKHR"><strong>clCreateFromDX9MediaSurfaceKHR</strong></a>.</p>
+<p>if the <a href="#cl_khr_dx9_media_sharing"><code>cl_khr_<wbr>dx9_<wbr>media_<wbr>sharing</code></a> extension is supported,
+if <em>param_name</em> is <a href="#CL_IMAGE_DX9_MEDIA_PLANE_KHR"><code>CL_IMAGE_<wbr>DX9_<wbr>MEDIA_<wbr>PLANE_<wbr>KHR</code></a>,
+and if <em>image</em> was not created by calling <a href="#clCreateFromDX9MediaSurfaceKHR"><strong>clCreateFromDX9MediaSurfaceKHR</strong></a></p>
</li>
</ul>
</div>
-<div class="paragraph">
-<p>The following errors may be returned if the <a href="#cl_khr_d3d10_sharing"><code>cl_khr_<wbr>d3d10_<wbr>sharing</code></a>
-extension is supported:</p>
-</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_D3D10_RESOURCE_KHR"><code>CL_INVALID_<wbr>D3D10_<wbr>RESOURCE_<wbr>KHR</code></a></p>
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_D3D10_RESOURCE_KHR"><code>CL_INVALID_<wbr>D3D10_<wbr>RESOURCE_<wbr>KHR</code></a> if <em>param_name</em> is
-<a href="#CL_IMAGE_D3D10_SUBRESOURCE_KHR"><code>CL_IMAGE_<wbr>D3D10_<wbr>SUBRESOURCE_<wbr>KHR</code></a> and <em>image</em> was not created by the
-function <a href="#clCreateFromD3D10Texture2DKHR"><strong>clCreateFromD3D10Texture2DKHR</strong></a>, or
-<a href="#clCreateFromD3D10Texture3DKHR"><strong>clCreateFromD3D10Texture3DKHR</strong></a>.</p>
+<p>if the <a href="#cl_khr_d3d10_sharing"><code>cl_khr_<wbr>d3d10_<wbr>sharing</code></a> extension is supported,
+if <em>param_name</em> is <a href="#CL_IMAGE_D3D10_SUBRESOURCE_KHR"><code>CL_IMAGE_<wbr>D3D10_<wbr>SUBRESOURCE_<wbr>KHR</code></a>,
+and if <em>image</em> was not created by the function <a href="#clCreateFromD3D10Texture2DKHR"><strong>clCreateFromD3D10Texture2DKHR</strong></a> or <a href="#clCreateFromD3D10Texture3DKHR"><strong>clCreateFromD3D10Texture3DKHR</strong></a></p>
</li>
</ul>
</div>
-<div class="paragraph">
-<p>The following errors may be returned if the <a href="#cl_khr_d3d11_sharing"><code>cl_khr_<wbr>d3d11_<wbr>sharing</code></a>
-extension is supported:</p>
-</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_D3D11_RESOURCE_KHR"><code>CL_INVALID_<wbr>D3D11_<wbr>RESOURCE_<wbr>KHR</code></a></p>
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_D3D11_RESOURCE_KHR"><code>CL_INVALID_<wbr>D3D11_<wbr>RESOURCE_<wbr>KHR</code></a> if <em>param_name</em> is
-<a href="#CL_IMAGE_D3D11_SUBRESOURCE_KHR"><code>CL_IMAGE_<wbr>D3D11_<wbr>SUBRESOURCE_<wbr>KHR</code></a> and <em>image</em> was not created by the
-function <a href="#clCreateFromD3D11Texture2DKHR"><strong>clCreateFromD3D11Texture2DKHR</strong></a>, or
-<a href="#clCreateFromD3D11Texture3DKHR"><strong>clCreateFromD3D11Texture3DKHR</strong></a>.</p>
+<p>if the <a href="#cl_khr_d3d11_sharing"><code>cl_khr_<wbr>d3d11_<wbr>sharing</code></a> extension is supported,
+if <em>param_name</em> is <a href="#CL_IMAGE_D3D11_SUBRESOURCE_KHR"><code>CL_IMAGE_<wbr>D3D11_<wbr>SUBRESOURCE_<wbr>KHR</code></a>,
+and if <em>image</em> was not created by the function <a href="#clCreateFromD3D11Texture2DKHR"><strong>clCreateFromD3D11Texture2DKHR</strong></a> or <a href="#clCreateFromD3D11Texture3DKHR"><strong>clCreateFromD3D11Texture3DKHR</strong></a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -19111,12 +21580,10 @@
<div class="sect4">
<h5 id="restrictions-on-msaa-images"><a class="anchor" href="#restrictions-on-msaa-images"></a>5.3.13.2. Restrictions on Multi-Sample Images</h5>
<div class="paragraph">
-<p>The formats described in the <a href="#image-channel-order-table">Image Channel
-Order Values</a> and <a href="#image-channel-data-types-table">Image Channel Data
-Types</a> tables of the OpenCL 3.0 specification, specification and the
-additional formats described in the <a href="#min-supported-image-formats-2.0">Minimum list of supported image formats for reading or writing</a> table also
-support OpenCL images created from a OpenGL multi-sampled color or depth
-texture.</p>
+<p>The formats described in the <a href="#image-channel-order-table">Image Channel Order
+Values</a> and <a href="#image-channel-data-types-table">Image Channel Data Types</a> tables
+of the OpenCL specification also support OpenCL images created from a OpenGL
+multi-sampled color or depth texture.</p>
</div>
<div class="paragraph">
<p>Multi-sample OpenCL image objects can only be read from a kernel.
@@ -19315,11 +21782,11 @@
about the image format being queried and is described in the
<a href="#memory-flags-table">Memory Flags</a> table. <em>flags</em> may be <a href="#CL_MEM_READ_WRITE"><code>CL_MEM_<wbr>READ_<wbr>WRITE</code></a> to
specialize the query for images that may be read from and written to by different
-kernel instances when correctly ordered by event dependencies, or <a href="#CL_MEM_READ_ONLY"><code>CL_MEM_<wbr>READ_<wbr>ONLY</code></a>
+kernel-instances when correctly ordered by event dependencies, or <a href="#CL_MEM_READ_ONLY"><code>CL_MEM_<wbr>READ_<wbr>ONLY</code></a>
to specialize the query for images that may be read from by a kernel, or
<a href="#CL_MEM_WRITE_ONLY"><code>CL_MEM_<wbr>WRITE_<wbr>ONLY</code></a> to specialiaze the query for images that may be written to by
a kernel, or <a href="#CL_MEM_KERNEL_READ_AND_WRITE"><code>CL_MEM_<wbr>KERNEL_<wbr>READ_<wbr>AND_<wbr>WRITE</code></a> to specialize the query for images that
-may be both read from and written to by the same kernel instance. When <em>flags</em> is
+may be both read from and written to by the same kernel-instance. When <em>flags</em> is
<code>0</code> the value returned for the query must be correct for all possible values of <em>flags</em>.</p>
</li>
<li>
@@ -19490,37 +21957,98 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if <em>context</em> if not a valid context.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>context</em> if not a valid context</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_PROPERTY"><code>CL_INVALID_<wbr>PROPERTY</code></a> if a property name in properties is not a supported
-property name, if the value specified for a supported property name is not
-valid, or if the same property name is specified more than once.</p>
+<p><a href="#CL_INVALID_PROPERTY"><code>CL_INVALID_<wbr>PROPERTY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if a property name in <em>properties</em> is not a supported property name</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if values specified in <em>flags</em> are not valid.</p>
+<p>if the value specified for a supported property name is not valid</p>
</li>
<li>
-<p><a href="#CL_INVALID_IMAGE_FORMAT_DESCRIPTOR"><code>CL_INVALID_<wbr>IMAGE_<wbr>FORMAT_<wbr>DESCRIPTOR</code></a> if values specified in <em>image_format</em>
-are not valid.</p>
+<p>if the same property name is specified more than once</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_IMAGE_DESCRIPTOR"><code>CL_INVALID_<wbr>IMAGE_<wbr>DESCRIPTOR</code></a> if values specified in <em>image_desc</em>
-are not valid.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if values specified in <em>flags</em> are not valid</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>param_name</em> is not valid, or if size in bytes
-specified by <em>param_value_size</em> is < size of return type as described in
-the <a href="#image-requirements-info-table">Image Requirements Queries</a> table and
-<em>param_value</em> is not <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_IMAGE_FORMAT_DESCRIPTOR"><code>CL_INVALID_<wbr>IMAGE_<wbr>FORMAT_<wbr>DESCRIPTOR</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if values specified in <em>image_format</em> are not valid</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_INVALID_IMAGE_DESCRIPTOR"><code>CL_INVALID_<wbr>IMAGE_<wbr>DESCRIPTOR</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if values specified in <em>image_desc</em> are not valid</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>param_name</em> is not valid</p>
+</li>
+<li>
+<p>if size in bytes specified by <em>param_value_size</em> is less than the size of
+the return type specified in the
+<a href="#image-requirements-info-table">Image Requirements Queries</a>
+table and <em>param_value</em> is not <code>NULL</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -21120,12 +23648,12 @@
<p class="tableblock"> Otherwise, returns <code>NULL</code>.</p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_MEM_MAP_COUNT"></a><a href="#CL_MEM_MAP_COUNT"><code>CL_MEM_<wbr>MAP_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_23" class="footnote" href="#_footnotedef_23" title="View footnote.">23</a>]</sup></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_MEM_MAP_COUNT"></a><a href="#CL_MEM_MAP_COUNT"><code>CL_MEM_<wbr>MAP_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_24" class="footnote" href="#_footnotedef_24" title="View footnote.">24</a>]</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uint</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Map count.</p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_MEM_REFERENCE_COUNT"></a><a href="#CL_MEM_REFERENCE_COUNT"><code>CL_MEM_<wbr>REFERENCE_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_24" class="footnote" href="#_footnotedef_24" title="View footnote.">24</a>]</sup></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_MEM_REFERENCE_COUNT"></a><a href="#CL_MEM_REFERENCE_COUNT"><code>CL_MEM_<wbr>REFERENCE_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_25" class="footnote" href="#_footnotedef_25" title="View footnote.">25</a>]</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uint</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Return <em>memobj</em> reference count.</p></td>
</tr>
@@ -22709,7 +25237,7 @@
</div>
<div class="paragraph">
<p>These objects need to be acquired before they can be used by any OpenCL
-commands queued to a command-queue or the behaviour is undefined.
+commands queued to a command-queue or the behavior is undefined.
The OpenGL objects are acquired by the OpenCL context associated with
<em>command_queue</em> and can therefore be used by all command-queues associated
with the OpenCL context.</p>
@@ -23637,41 +26165,106 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if the device associated with <em>command_queue</em> does not support SVM.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the device associated with <em>command_queue</em> does not support SVM</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if the context associated with <em>command_queue</em> and
-events in <em>event_wait_list</em> are not the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>dst_ptr</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"><code>CL_EXEC_<wbr>STATUS_<wbr>ERROR_<wbr>FOR_<wbr>EVENTS_<wbr>IN_<wbr>WAIT_<wbr>LIST</code></a> if the copy operation is
-blocking and the execution status of any of the events in
-<em>event_wait_list</em> is a negative integer value.</p>
+<p>if <em>src_ptr</em> is <code>NULL</code></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>dst_ptr</em> or <em>src_ptr</em> is <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
</li>
<li>
-<p><a href="#CL_MEM_COPY_OVERLAP"><code>CL_MEM_<wbr>COPY_<wbr>OVERLAP</code></a> if the values specified for <em>dst_ptr</em>, <em>src_ptr</em> and
-<em>size</em> result in an overlapping copy.</p>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"><code>CL_EXEC_<wbr>STATUS_<wbr>ERROR_<wbr>FOR_<wbr>EVENTS_<wbr>IN_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the copy operations is blocking and the execution status of
+any of the events in <em>event_wait_list</em> is a negative integer value indicating an error</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_MEM_COPY_OVERLAP"><code>CL_MEM_<wbr>COPY_<wbr>OVERLAP</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the values specified for <em>dst_ptr</em>, <em>src_ptr</em> and <em>size</em> result in an overlapping copy</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -23779,42 +26372,100 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if the device associated with <em>command_queue</em> does not support SVM.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the device associated with <em>command_queue</em> does not support SVM</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if the context associated with <em>command_queue</em> and
-events in <em>event_wait_list</em> are not the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>svm_ptr</em> is <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>svm_ptr</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>svm_ptr</em> is not aligned to <em>pattern_size</em> bytes.</p>
+<p>if <em>svm_ptr</em> is not aligned to <em>pattern_size</em> bytes</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>pattern</em> is <code>NULL</code> or if <em>pattern_size</em> is 0 or if
-<em>pattern_size</em> is not one of {1, 2, 4, 8, 16, 32, 64, 128}.</p>
+<p>if <em>pattern</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>size</em> is not a multiple of <em>pattern_size</em>.</p>
+<p>if <em>pattern_size</em> is zero</p>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p>if <em>pattern_size</em> is not a power of two</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if <em>pattern_size</em> is greater than 128</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p>if <em>size</em> is not a multiple of <em>pattern_size</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
+</li>
+<li>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
+</li>
+<li>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -23924,41 +26575,99 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if the device associated with <em>command_queue</em> does not support SVM.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the device associated with <em>command_queue</em> does not support SVM</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if context associated with <em>command_queue</em> and events
-in <em>event_wait_list</em> are not the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>svm_ptr</em> is <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>svm_ptr</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>size</em> is 0 or if values specified in <em>map_flags</em>
-are not valid.</p>
+<p>if <em>size</em> is zero</p>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p>if values specified in <em>map_flags</em> are not valid</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"><code>CL_EXEC_<wbr>STATUS_<wbr>ERROR_<wbr>FOR_<wbr>EVENTS_<wbr>IN_<wbr>WAIT_<wbr>LIST</code></a> if the map operation is
-blocking and the execution status of any of the events in
-<em>event_wait_list</em> is a negative integer value.</p>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST"><code>CL_EXEC_<wbr>STATUS_<wbr>ERROR_<wbr>FOR_<wbr>EVENTS_<wbr>IN_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the map operations is blocking and the execution status of
+any of the events in <em>event_wait_list</em> is a negative integer value indicating an error</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -24044,32 +26753,82 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if the device associated with <em>command_queue</em> does not support SVM.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the device associated with <em>command_queue</em> does not support SVM</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if context associated with <em>command_queue</em> and events
-in <em>event_wait_list</em> are not the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>svm_ptr</em> is <code>NULL</code>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>svm_ptr</em> is <code>NULL</code></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or if <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -24217,38 +26976,92 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if the device associated with <em>command_queue</em> does not support SVM.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the device associated with <em>command_queue</em> does not support SVM</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if context associated with <em>command_queue</em> and events
-in <em>event_wait_list</em> are not the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>num_svm_pointers</em> is zero or <em>svm_pointers</em> is
-<code>NULL</code>.</p>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>num_svm_pointers</em> is zero</p>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>sizes</em>[i] is non-zero range [<em>svm_pointers</em>[i],
-<em>svm_pointers</em>[i]+<em>sizes</em>[i]) is not contained within an existing
-<a href="#clSVMAlloc"><strong>clSVMAlloc</strong></a> allocation.</p>
+<p>if <em>svm_pointers</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or if <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p>if <em>flags</em> is not zero and is not a valid combination of the values
+described in the <a href="#migration-flags-table">Memory migration Flags</a> table</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if <em>sizes</em>[i] is non-zero and the memory range described by <em>svm_pointers</em>[i] and <em>sizes</em>[i] is not contained within an SVM allocation returned by <a href="#clSVMAlloc"><strong>clSVMAlloc</strong></a></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
+</li>
+<li>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
+</li>
+<li>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -24563,7 +27376,7 @@
</li>
<li>
<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>addressing_mode</em>, <em>filter_mode</em>, <em>normalized_coords</em>
-or a combination of these arguements are not valid.</p>
+or a combination of these arguments are not valid.</p>
</li>
<li>
<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if images are not supported by any device
@@ -24744,7 +27557,7 @@
</thead>
<tbody>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_SAMPLER_REFERENCE_COUNT"></a><a href="#CL_SAMPLER_REFERENCE_COUNT"><code>CL_SAMPLER_<wbr>REFERENCE_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_25" class="footnote" href="#_footnotedef_25" title="View footnote.">25</a>]</sup></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_SAMPLER_REFERENCE_COUNT"></a><a href="#CL_SAMPLER_REFERENCE_COUNT"><code>CL_SAMPLER_<wbr>REFERENCE_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_26" class="footnote" href="#_footnotedef_26" title="View footnote.">26</a>]</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uint</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Return the <em>sampler</em> reference count.</p></td>
</tr>
@@ -24892,19 +27705,13 @@
</ul>
</div>
<div class="paragraph">
-<p>The source code specified by <em>strings</em> will be loaded into the program
-object.</p>
+<p>The devices associated with the program object are the devices associated
+with <em>context</em>.</p>
</div>
<div class="paragraph">
-<p>The devices associated with the program object are the devices associated
-with <em>context</em>.
-The source code specified by <em>strings</em> is either an OpenCL C program source,
-header or implementation-defined source for custom devices that support an
-online compiler.
-OpenCL C++ is not supported as an online-compiled kernel language through
-this interface.
-If the <a href="#cl_ext_cxx_for_opencl"><code>cl_ext_<wbr>cxx_<wbr>for_<wbr>opencl</code></a> extension is supported, the source code
-specified by <em>strings</em> may also be a C++ for OpenCL program source or header.</p>
+<p>The source code specified by <em>strings</em> are loaded into the program object.
+The source languages supported for <em>strings</em> are defined by device queries such
+as <a href="#CL_DEVICE_OPENCL_C_ALL_VERSIONS"><code>CL_DEVICE_<wbr>OPENCL_<wbr>C_<wbr>ALL_<wbr>VERSIONS</code></a>.</p>
</div>
<div class="paragraph">
<p><a href="#clCreateProgramWithSource"><strong>clCreateProgramWithSource</strong></a> returns a valid non-zero program object and
@@ -26009,6 +28816,10 @@
<p><a href="#CL_INVALID_PROGRAM"><code>CL_INVALID_<wbr>PROGRAM</code></a> if <em>program</em> is not a valid program object.</p>
</li>
<li>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if the context associated with <em>program</em> and
+programs in <em>input_headers</em> are not the same.</p>
+</li>
+<li>
<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>device_list</em> is <code>NULL</code> and <em>num_devices</em> is greater
than zero, or if <em>device_list</em> is not <code>NULL</code> and <em>num_devices</em> is zero.</p>
</li>
@@ -26246,6 +29057,10 @@
<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if <em>context</em> is not a valid context.</p>
</li>
<li>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if the context associated with programs in
+<em>input_programs</em> is not the same as <em>context</em>.</p>
+</li>
+<li>
<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>device_list</em> is <code>NULL</code> and <em>num_devices</em> is greater
than zero, or if <em>device_list</em> is not <code>NULL</code> and <em>num_devices</em> is zero.</p>
</li>
@@ -26535,7 +29350,7 @@
Environment specifications, and (d) may violate edge case behavior in the
OpenCL C or OpenCL SPIR-V Environment specifications.
This option includes the <code>-cl-no-signed-zeros</code>, <code>-cl-mad-enable</code>, and
-<code>-cl-denorms-are-zero</code> <sup class="footnote">[<a id="_footnoteref_26" class="footnote" href="#_footnotedef_26" title="View footnote.">26</a>]</sup> options.</p>
+<code>-cl-denorms-are-zero</code> <sup class="footnote">[<a id="_footnoteref_27" class="footnote" href="#_footnotedef_27" title="View footnote.">27</a>]</sup> options.</p>
</dd>
<dt class="hdlist1"><code>-cl-finite-math-only</code> </dt>
<dd>
@@ -26597,19 +29412,23 @@
<div class="ulist">
<ul>
<li>
-<p><code>CL1.1</code>: Support OpenCL C 1.1 language features defined in <em>section 6</em> of
+<p><code>CL1.1</code>: Support the OpenCL C 1.1 language features defined in <em>section 6</em> of
the OpenCL 1.1 specification or in the unified OpenCL C specification.</p>
</li>
<li>
-<p><code>CL1.2</code>: Support OpenCL C 1.2 language features defined in <em>section 6</em> of
+<p><code>CL1.2</code>: Support the OpenCL C 1.2 language features defined in <em>section 6</em> of
the OpenCL 1.2 specification or in the unified OpenCL C specification.</p>
</li>
<li>
-<p><code>CL2.0</code>: Support OpenCL C 2.0 language features defined in the OpenCL C 2.0
+<p><code>CL2.0</code>: Support the OpenCL C 2.0 language features defined in the OpenCL C 2.0
specification or in the unified OpenCL C specification.</p>
</li>
<li>
-<p><code>CL3.0</code>: Support OpenCL C 3.0 language features defined in the unified
+<p><code>CL3.0</code>: Support the OpenCL C 3.0 language features defined in the unified
+OpenCL C specification.</p>
+</li>
+<li>
+<p><code>CL3.1</code>: Support the OpenCL C 3.1 language features defined in the unified
OpenCL C specification.</p>
</li>
</ul>
@@ -26639,17 +29458,20 @@
</div>
<div class="paragraph">
<p>Calls to <a href="#clBuildProgram"><strong>clBuildProgram</strong></a> or <a href="#clCompileProgram"><strong>clCompileProgram</strong></a> with the <code>-cl-std=CL3.0</code>
-option <strong>will fail</strong> to compile the program for any devices with
-<a href="#CL_DEVICE_OPENCL_C_VERSION"><code>CL_DEVICE_<wbr>OPENCL_<wbr>C_<wbr>VERSION</code></a> equal to OpenCL C 2.0 or earlier
-and when <a href="#CL_DEVICE_OPENCL_C_ALL_VERSIONS"><code>CL_DEVICE_<wbr>OPENCL_<wbr>C_<wbr>ALL_<wbr>VERSIONS</code></a> does not include OpenCL C 3.0.</p>
+option <strong>will fail</strong> to compile the program for any devices
+when <a href="#CL_DEVICE_OPENCL_C_ALL_VERSIONS"><code>CL_DEVICE_<wbr>OPENCL_<wbr>C_<wbr>ALL_<wbr>VERSIONS</code></a> does not include OpenCL C 3.0.</p>
+</div>
+<div class="paragraph">
+<p>Calls to <a href="#clBuildProgram"><strong>clBuildProgram</strong></a> or <a href="#clCompileProgram"><strong>clCompileProgram</strong></a> with the <code>-cl-std=CL3.1</code>
+option <strong>will fail</strong> to compile the program for any devices
+when <a href="#CL_DEVICE_OPENCL_C_ALL_VERSIONS"><code>CL_DEVICE_<wbr>OPENCL_<wbr>C_<wbr>ALL_<wbr>VERSIONS</code></a> does not include OpenCL C 3.1.</p>
</div>
<div class="paragraph">
<p>If the <code>-cl-std</code> build option is not specified, the highest OpenCL C 1.x
language version supported by each device is used when compiling the program
for each device.
-Applications are required to specify the <code>-cl-std=CL2.0</code> build option to
-compile or build programs with OpenCL C 2.0 and the <code>-cl-std=CL3.0</code>
-build option to compile or build programs with OpenCL C 3.0.</p>
+Applications are required to specify the <code>-cl-std</code> build option to
+compile or build programs with newer versions of OpenCL C.</p>
</div>
</div>
<div class="sect4">
@@ -26987,7 +29809,7 @@
</thead>
<tbody>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_PROGRAM_REFERENCE_COUNT"></a><a href="#CL_PROGRAM_REFERENCE_COUNT"><code>CL_PROGRAM_<wbr>REFERENCE_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_27" class="footnote" href="#_footnotedef_27" title="View footnote.">27</a>]</sup></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_PROGRAM_REFERENCE_COUNT"></a><a href="#CL_PROGRAM_REFERENCE_COUNT"><code>CL_PROGRAM_<wbr>REFERENCE_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_28" class="footnote" href="#_footnotedef_28" title="View footnote.">28</a>]</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uint</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Return the <em>program</em> reference count.</p></td>
</tr>
@@ -27681,125 +30503,122 @@
<p><em>kernel</em> is a valid kernel object.</p>
</li>
<li>
-<p><em>arg_index</em> is the argument index.
-Arguments to the kernel are referred by indices that go from 0 for the
-leftmost argument to <em>n</em> - 1, where <em>n</em> is the total number of arguments
-declared by a kernel (see below).</p>
+<p><em>arg_index</em> is the kernel argument index.
+Kernel arguments are referred to by indices that go from zero to
+<em>n - 1</em>, where <em>n</em> is the total number of arguments declared by the kernel.</p>
</li>
<li>
-<p><em>arg_size</em> specifies the size of the argument value.
-If the argument is a memory object, the <em>arg_size</em> value must be equal to
-<code>sizeof(<code>cl_mem</code>)</code>.
-For arguments declared with the <code>local</code> qualifier, the size specified will
-be the size in bytes of the buffer that must be allocated for the <code>local</code>
-argument.
-If the argument is of type <em>sampler_t</em>, the <em>arg_size</em> value must be equal
-to <code>sizeof(<code>cl_sampler</code>)</code>.
-If the argument is of type <em>queue_t</em>, the <em>arg_size</em> value must be equal to
-<code>sizeof(<code>cl_command_<wbr>queue</code>)</code>.
-For all other arguments, the size will be the size of argument type.</p>
+<p><em>arg_size</em> specifies the size of the kernel argument value.</p>
</li>
<li>
-<p><em>arg_value</em> is a pointer to data that should be used as the argument value
-for argument specified by <em>arg_index</em>.
+<p><em>arg_value</em> is a pointer to the data for the kernel argument.
The argument data pointed to by <em>arg_value</em> is copied and the <em>arg_value</em>
pointer can therefore be reused by the application after <a href="#clSetKernelArg"><strong>clSetKernelArg</strong></a>
returns.
-The argument value specified is the value used by all API calls that enqueue
-<em>kernel</em> (<a href="#clEnqueueNDRangeKernel"><strong>clEnqueueNDRangeKernel</strong></a> and <a href="#clEnqueueTask"><strong>clEnqueueTask</strong></a>) until the argument
-value is changed by a call to <a href="#clSetKernelArg"><strong>clSetKernelArg</strong></a> for <em>kernel</em>.</p>
+The argument data is used by all API calls that enqueue the kernel until the
+argument is changed by another call to <a href="#clSetKernelArg"><strong>clSetKernelArg</strong></a> for the kernel.</p>
</li>
</ul>
</div>
<div class="paragraph">
-<p>For example, consider the following kernel:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl_c"><span class="nx">kernel</span> <span class="kt">void</span> <span class="nf">image_filter</span> <span class="p">(</span><span class="kt">int</span> <span class="n">n</span><span class="p">,</span>
- <span class="kt">int</span> <span class="n">m</span><span class="p">,</span>
- <span class="nx">constant</span> <span class="kt">float</span> <span class="o">*</span><span class="n">filter_weights</span><span class="p">,</span>
- <span class="nx">read_only</span> <span class="kt">image2d_t</span> <span class="n">src_image</span><span class="p">,</span>
- <span class="nx">write_only</span> <span class="kt">image2d_t</span> <span class="n">dst_image</span><span class="p">)</span>
-<span class="p">{</span>
-<span class="p">...</span>
-<span class="p">}</span></code></pre>
-</div>
+<p>If the kernel argument being set is a pointer to the <code>global</code> or <code>constant</code>
+address space, then <em>arg_value</em> must point to a buffer memory object or <code>NULL</code>,
+or <em>arg_value</em> must be <code>NULL</code>.
+If <em>arg_value</em> is <code>NULL</code> or points to <code>NULL</code>, then the kernel argument will be
+set to <code>NULL</code>.</p>
</div>
<div class="paragraph">
-<p>Argument index values for <code>image_filter</code> will be 0 for <code>n</code>, 1 for <code>m</code>, 2 for
-<code>filter_weights</code>, 3 for <code>src_image</code> and 4 for <code>dst_image</code>.</p>
+<p>If the kernel argument being set is a pointer to the <code>local</code> address space, then
+<em>arg_value</em> must be <code>NULL</code>, and <em>arg_size</em> specifies the amount of local memory
+in bytes that are allocated for the kernel argument.
+Prior to OpenCL 3.1, <em>arg_size</em> must be greater than zero.
+For OpenCL 3.1 and newer, <em>arg_size</em> may be zero, indicating that no local
+memory is required for the kernel argument. <sup class="footnote">[<a id="_footnoteref_29" class="footnote" href="#_footnotedef_29" title="View footnote.">29</a>]</sup></p>
</div>
<div class="paragraph">
-<p>If the argument is a memory object (buffer, pipe, image or image array), the
-<em>arg_value</em> entry will be a pointer to the appropriate buffer, pipe, image
-or image array object.
-The memory object must be created with the context associated with the
-kernel object.
-If the argument is a buffer object, the <em>arg_value</em> pointer can be <code>NULL</code> or
-point to a <code>NULL</code> value in which case a <code>NULL</code> value will be used as the
-value for the argument declared as a pointer to <code>global</code> or <code>constant</code>
-memory in the kernel.
-If the argument is declared with the <code>local</code> qualifier, the <em>arg_value</em>
-entry must be <code>NULL</code>.
-If the argument is of type <em>sampler_t</em>, the <em>arg_value</em> entry must be a
-pointer to the sampler object.
-If the argument is of type <em>queue_t</em>, the <em>arg_value</em> entry must be a
-pointer to the device queue object.</p>
+<p>If the kernel argument being set is an image object, then <em>arg_value</em> must point
+to an image memory object.
+Additionally:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>If the kernel argument is a 1D image, then the image memory object must be of
+image type <a href="#CL_MEM_OBJECT_IMAGE1D"><code>CL_MEM_<wbr>OBJECT_<wbr>IMAGE1D</code></a>.</p>
+</li>
+<li>
+<p>If the kernel argument is a 2D image, then the image memory object must be of
+image type <a href="#CL_MEM_OBJECT_IMAGE2D"><code>CL_MEM_<wbr>OBJECT_<wbr>IMAGE2D</code></a>.</p>
+</li>
+<li>
+<p>If the kernel argument is a 3D image, then the image memory object must be of
+image type <a href="#CL_MEM_OBJECT_IMAGE3D"><code>CL_MEM_<wbr>OBJECT_<wbr>IMAGE3D</code></a>.</p>
+</li>
+<li>
+<p>If the kernel argument is a 1D image buffer, then the image memory object must
+be of image type <a href="#CL_MEM_OBJECT_IMAGE1D_BUFFER"><code>CL_MEM_<wbr>OBJECT_<wbr>IMAGE1D_<wbr>BUFFER</code></a>.</p>
+</li>
+<li>
+<p>If the kernel argument is a 1D image array, then the image memory object must
+be of image type <a href="#CL_MEM_OBJECT_IMAGE1D_ARRAY"><code>CL_MEM_<wbr>OBJECT_<wbr>IMAGE1D_<wbr>ARRAY</code></a>.</p>
+</li>
+<li>
+<p>If the kernel argument is a 2D image array, then the image memory object must
+be of image type <a href="#CL_MEM_OBJECT_IMAGE2D_ARRAY"><code>CL_MEM_<wbr>OBJECT_<wbr>IMAGE2D_<wbr>ARRAY</code></a>.</p>
+</li>
+<li>
+<p>If the kernel argument is a 2D depth image, then the image memory object must
+be of image type <a href="#CL_MEM_OBJECT_IMAGE2D"><code>CL_MEM_<wbr>OBJECT_<wbr>IMAGE2D</code></a> and image channel order <a href="#CL_DEPTH"><code>CL_DEPTH</code></a>.</p>
+</li>
+<li>
+<p>If the kernel argument is a 2D depth image array, then the image memory object
+must be of image type <a href="#CL_MEM_OBJECT_IMAGE2D_ARRAY"><code>CL_MEM_<wbr>OBJECT_<wbr>IMAGE2D_<wbr>ARRAY</code></a> and image channel order
+<a href="#CL_DEPTH"><code>CL_DEPTH</code></a>.</p>
+</li>
+<li>
+<p>If the kernel argument is a 2D MSAA image, then the image memory object must
+be of image type <a href="#CL_MEM_OBJECT_IMAGE2D"><code>CL_MEM_<wbr>OBJECT_<wbr>IMAGE2D</code></a>.</p>
+</li>
+<li>
+<p>If the kernel argument is a 2D MSAA image array, then the image memory object
+must be of image type <a href="#CL_MEM_OBJECT_IMAGE2D_ARRAY"><code>CL_MEM_<wbr>OBJECT_<wbr>IMAGE2D_<wbr>ARRAY</code></a>.</p>
+</li>
+<li>
+<p>If the kernel argument is a 2D MSAA depth image, then the image memory object
+must be of image type <a href="#CL_MEM_OBJECT_IMAGE2D"><code>CL_MEM_<wbr>OBJECT_<wbr>IMAGE2D</code></a> and image channel order
+<a href="#CL_DEPTH"><code>CL_DEPTH</code></a>.</p>
+</li>
+<li>
+<p>If the kernel argument is a 2D MSAA depth image array, then the image memory
+object must be of image type <a href="#CL_MEM_OBJECT_IMAGE2D_ARRAY"><code>CL_MEM_<wbr>OBJECT_<wbr>IMAGE2D_<wbr>ARRAY</code></a> and image channel
+order <a href="#CL_DEPTH"><code>CL_DEPTH</code></a>.</p>
+</li>
+</ul>
</div>
<div class="paragraph">
-<p>If the <a href="#cl_khr_gl_msaa_sharing"><code>cl_khr_<wbr>gl_<wbr>msaa_<wbr>sharing</code></a> extension is supported, then:
-If the argument is a multi-sample 2D image, the <em>arg_value</em> entry must be a
-pointer to a multi-sample image object.
-If the argument is a multi-sample 2D depth image, the <em>arg_value</em> entry must
-be a pointer to a multisample depth image object.
-If the argument is a multi-sample 2D image array, the <em>arg_value</em> entry must
-be a pointer to a multi-sample image array object.
-If the argument is a multi-sample 2D depth image array, the <em>arg_value</em>
-entry must be a pointer to a multi-sample depth image array object.</p>
+<p>Behavior is undefined if the same image memory object is passed as both a
+<code>read_only</code> image and a <code>write_only</code> image, or as a <code>read_write</code> image and
+either a <code>read_only</code> image or a <code>write_only</code> image.</p>
</div>
<div class="paragraph">
-<p>If the argument is declared to be a pointer of a built-in scalar or vector
-type, or a user defined structure type in the global or constant address
-space, the memory object specified as argument value must be a buffer object
-(or <code>NULL</code>).
-If the argument is declared with the <code>constant</code> qualifier, the size in bytes
-of the memory object cannot exceed <a href="#CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE"><code>CL_DEVICE_<wbr>MAX_<wbr>CONSTANT_<wbr>BUFFER_<wbr>SIZE</code></a> and
-the number of arguments declared as pointers to <code>constant</code> memory cannot
-exceed <a href="#CL_DEVICE_MAX_CONSTANT_ARGS"><code>CL_DEVICE_<wbr>MAX_<wbr>CONSTANT_<wbr>ARGS</code></a>.</p>
+<p>If the kernel argument being set is a sampler, then <em>arg_value</em> must point to a
+sampler object.</p>
</div>
<div class="paragraph">
-<p>The memory object specified as argument value must be a pipe object if the
-argument is declared with the <em>pipe</em> qualifier.</p>
+<p>If the kernel argument being set is a device queue, then <em>arg_value</em> must point
+to a device queue object.</p>
</div>
<div class="paragraph">
-<p>The memory object specified as argument value must be a 2D image object if
-the argument is declared to be of type <em>image2d_t</em>.
-The memory object specified as argument value must be a 2D image object with
-image channel order = <a href="#CL_DEPTH"><code>CL_DEPTH</code></a> if the argument is declared to be of type
-<em>image2d_depth_t</em>.
-The memory object specified as argument value must be a 3D image object if
-argument is declared to be of type <em>image3d_t</em>.
-The memory object specified as argument value must be a 1D image object if
-the argument is declared to be of type <em>image1d_t</em>.
-The memory object specified as argument value must be a 1D image buffer
-object if the argument is declared to be of type <em>image1d_buffer_t</em>.
-The memory object specified as argument value must be a 1D image array
-object if argument is declared to be of type <em>image1d_array_t</em>.
-The memory object specified as argument value must be a 2D image array
-object if argument is declared to be of type <em>image2d_array_t</em>.
-The memory object specified as argument value must be a 2D image array
-object with image channel order = <a href="#CL_DEPTH"><code>CL_DEPTH</code></a> if argument is declared to be of
-type <em>image2d_array_depth_t</em>.</p>
+<p>If the kernel argument being set is a pipe, then <em>arg_value</em> must point to a
+pipe memory object.</p>
</div>
<div class="paragraph">
-<p>Behavior is undefined if the same memory object is passed as both a <code>read_only</code>
-image and a <code>write_only</code> image, or as a <code>read_write</code> image and either a
-<code>read_only</code> image or a <code>write_only</code> image.</p>
+<p>For all other kernel arguments, <em>arg_value</em> points to the data that is used as
+the kernel argument value.</p>
</div>
<div class="paragraph">
-<p>For all other kernel arguments, the <em>arg_value</em> entry must be a pointer to
-the actual data to be used as argument value.</p>
+<p>All OpenCL objects set as kernel arguments must be created from the same context
+as the kernel object.</p>
</div>
<div class="admonitionblock note">
<table>
@@ -27828,94 +30647,168 @@
</table>
</div>
<div class="paragraph">
-<p><a href="#clSetKernelArg"><strong>clSetKernelArg</strong></a> returns <a href="#CL_SUCCESS"><code>CL_SUCCESS</code></a> if the function was executed
-successfully.
+<p><a href="#clSetKernelArg"><strong>clSetKernelArg</strong></a> returns <a href="#CL_SUCCESS"><code>CL_SUCCESS</code></a> if the function is executed successfully.
Otherwise, it returns one of the following errors:</p>
</div>
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_KERNEL"><code>CL_INVALID_<wbr>KERNEL</code></a> if <em>kernel</em> is not a valid kernel object.</p>
+<p><a href="#CL_INVALID_KERNEL"><code>CL_INVALID_<wbr>KERNEL</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>kernel</em> is not a valid kernel</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_ARG_INDEX"><code>CL_INVALID_<wbr>ARG_<wbr>INDEX</code></a> if <em>arg_index</em> is not a valid argument index.</p>
+<p><a href="#CL_INVALID_ARG_INDEX"><code>CL_INVALID_<wbr>ARG_<wbr>INDEX</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>arg_index</em> is not a valid argument index</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_ARG_VALUE"><code>CL_INVALID_<wbr>ARG_<wbr>VALUE</code></a> if <em>arg_value</em> specified is not a valid value.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>kernel</em> and an OpenCL object pointed to
+by <em>arg_value</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a> for an argument declared to be a memory object
-when the specified <em>arg_value</em> is not a valid memory object.</p>
+<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>arg_value</em> is <code>NULL</code> and it must point to a valid memory object</p>
</li>
<li>
-<p><a href="#CL_INVALID_MEM_OBJECT"><code>CL_INVALID_<wbr>MEM_<wbr>OBJECT</code></a> for an argument declared to be a
-depth image, depth image array,
-multi-sample image, multi-sample image array, multi-sample depth image,
-or a multi-sample depth image array
-when the specified <em>arg_value</em> does not follow the rules described above
-for a depth memory object or memory array object argument.</p>
+<p>if <em>arg_value</em> points to <code>NULL</code> and it must point to a valid memory object</p>
</li>
<li>
-<p><a href="#CL_INVALID_SAMPLER"><code>CL_INVALID_<wbr>SAMPLER</code></a> for an argument declared to be of type <em>sampler_t</em>
-when the specified <em>arg_value</em> is not a valid sampler object.</p>
+<p>if <em>arg_value</em> is not <code>NULL</code>, and does not point to <code>NULL</code>, and does not
+point to a valid memory object</p>
</li>
<li>
-<p><a href="#CL_INVALID_DEVICE_QUEUE"><code>CL_INVALID_<wbr>DEVICE_<wbr>QUEUE</code></a> for an argument declared to be of type <em>queue_t</em>
-when the specified <em>arg_value</em> is not a valid device queue object.
+<p>if <em>arg_value</em> points to a valid memory object, but the memory object is
+not valid for the kernel argument specified by <em>arg_index</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_SAMPLER"><code>CL_INVALID_<wbr>SAMPLER</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the kernel argument is a sampler, but <em>arg_value</em> does not point to a
+valid sampler object</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_DEVICE_QUEUE"><code>CL_INVALID_<wbr>DEVICE_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the kernel argument is a device queue, but <em>arg_value</em> does not point
+to a valid device queue object.
This error code is <a href="#unified-spec">missing before</a> version 2.0.</p>
</li>
+</ul>
+</div>
+</li>
<li>
<p><a href="#CL_INVALID_ARG_SIZE"><code>CL_INVALID_<wbr>ARG_<wbr>SIZE</code></a></p>
<div class="ulist">
<ul>
<li>
-<p>if <em>arg_size</em> does not match the size of the data type for an argument
-that is not a memory object, or</p>
+<p>if <em>arg_value</em> points to a memory object and <em>arg_size</em> is not equal to
+<code>sizeof(<code>cl_mem</code>)</code></p>
</li>
<li>
-<p>if the argument is a memory object and <em>arg_size</em> != <code>sizeof(<code>cl_mem</code>)</code>, or</p>
+<p>if <em>arg_value</em> points to a sampler object and <em>arg_size</em> is not equal to
+<code>sizeof(<code>cl_sampler</code>)</code></p>
</li>
<li>
-<p>if <em>arg_size</em> is zero and the argument is declared with the <code>local</code> qualifier, or</p>
+<p>if <em>arg_value</em> points to a device queue object and <em>arg_size</em> is not
+equal to <code>sizeof(<code>cl_command_<wbr>queue</code>)</code></p>
</li>
<li>
-<p>if the argument is a sampler and <em>arg_size</em> != <code>sizeof(<code>cl_sampler</code>)</code>.</p>
+<p>if the kernel argument is a pointer to the <code>local</code> address space and
+<em>arg_size</em> is zero.
+This error condition does not apply if the platform associated with <em>kernel</em>
+is OpenCL 3.1 or newer.</p>
+</li>
+<li>
+<p>if <em>arg_value</em> points to the data to be used as the kernel argument value
+and <em>arg_size</em> does not match the size of the data type for the argument</p>
</li>
</ul>
</div>
</li>
<li>
-<p><a href="#CL_MAX_SIZE_RESTRICTION_EXCEEDED"><code>CL_MAX_<wbr>SIZE_<wbr>RESTRICTION_<wbr>EXCEEDED</code></a> if the size in bytes of the memory
-object (if the argument is a memory object) or <em>arg_size</em> (if the
-argument is declared with <code>local</code> qualifier) exceeds a language-
-specified maximum size restriction for this argument, such as the
-<strong>MaxByteOffset</strong> SPIR-V decoration.
-This error code is <a href="#unified-spec">missing before</a> version 2.2.</p>
-</li>
-<li>
<p><a href="#CL_INVALID_ARG_VALUE"><code>CL_INVALID_<wbr>ARG_<wbr>VALUE</code></a></p>
<div class="ulist">
<ul>
<li>
<p>if the argument is an image declared with the <code>read_only</code> qualifier and
-<em>arg_value</em> refers to an image object created with <em>cl_mem_flags</em> of
-<a href="#CL_MEM_WRITE_ONLY"><code>CL_MEM_<wbr>WRITE_<wbr>ONLY</code></a>, or</p>
+<em>arg_value</em> points to an image object created with the memory flag
+<a href="#CL_MEM_WRITE_ONLY"><code>CL_MEM_<wbr>WRITE_<wbr>ONLY</code></a></p>
</li>
<li>
-<p>if the image argument is declared with the <code>write_only</code> qualifier and
-<em>arg_value</em> refers to an image object created with <em>cl_mem_flags</em> of
-<a href="#CL_MEM_READ_ONLY"><code>CL_MEM_<wbr>READ_<wbr>ONLY</code></a>.</p>
+<p>if the argument is an image declared with the <code>write_only</code> qualifier and
+<em>arg_value</em> points to an image object created with the memory flag
+<a href="#CL_MEM_READ_ONLY"><code>CL_MEM_<wbr>READ_<wbr>ONLY</code></a>
+or <a href="#CL_MEM_IMMUTABLE_EXT"><code>CL_MEM_<wbr>IMMUTABLE_<wbr>EXT</code></a></p>
</li>
</ul>
</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p><a href="#CL_MAX_SIZE_RESTRICTION_EXCEEDED"><code>CL_MAX_<wbr>SIZE_<wbr>RESTRICTION_<wbr>EXCEEDED</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the size in bytes of the memory object (if the argument is a memory
+object) or <em>arg_size</em> (if the argument is declared with <code>local</code> qualifier)
+exceeds a language-specified maximum size restriction for this argument,
+such as the <strong>MaxByteOffset</strong> SPIR-V decoration.
+This error code is <a href="#unified-spec">missing before</a> version 2.2.</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -27933,7 +30826,7 @@
</li>
<li>
<p>The argument value is unset such that a subsequent kernel enqueue fails with
-<a href="#CL_INVALID_KERNEL_ARGS"><code>CL_INVALID_<wbr>KERNEL_<wbr>ARGS</code></a>. <sup class="footnote">[<a id="_footnoteref_28" class="footnote" href="#_footnotedef_28" title="View footnote.">28</a>]</sup></p>
+<a href="#CL_INVALID_KERNEL_ARGS"><code>CL_INVALID_<wbr>KERNEL_<wbr>ARGS</code></a>. <sup class="footnote">[<a id="_footnoteref_30" class="footnote" href="#_footnotedef_30" title="View footnote.">30</a>]</sup></p>
</li>
</ul>
</div>
@@ -27994,7 +30887,7 @@
</ul>
</div>
<div class="paragraph">
-<p><a href="#clSetKernelArgSVMPointer"><strong>clSetKernelArgSVMPointer</strong></a> returns <a href="#CL_SUCCESS"><code>CL_SUCCESS</code></a> if the function was executed
+<p><a href="#clSetKernelArgSVMPointer"><strong>clSetKernelArgSVMPointer</strong></a> returns <a href="#CL_SUCCESS"><code>CL_SUCCESS</code></a> if the function is executed
successfully.
Otherwise, it returns one of the following errors:</p>
</div>
@@ -28093,7 +30986,18 @@
the <a href="#cl_ext_buffer_device_address"><code>cl_ext_<wbr>buffer_<wbr>device_<wbr>address</code></a> extension.</p>
</li>
<li>
-<p><a href="#CL_INVALID_ARG_INDEX"><code>CL_INVALID_<wbr>ARG_<wbr>INDEX</code></a> if <em>arg_index</em> is not a valid argument index.</p>
+<p><a href="#CL_INVALID_ARG_INDEX"><code>CL_INVALID_<wbr>ARG_<wbr>INDEX</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>arg_index</em> is not a valid argument index.</p>
+</li>
+<li>
+<p>if <em>arg_index</em> corresponds to an argument that is not a pointer to the <code>global</code>
+address space.</p>
+</li>
+</ul>
+</div>
</li>
<li>
<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
@@ -28233,18 +31137,8 @@
<p><a href="#CL_INVALID_KERNEL"><code>CL_INVALID_<wbr>KERNEL</code></a> if <em>kernel</em> is a not a valid kernel object.</p>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> for <a href="#CL_KERNEL_EXEC_INFO_SVM_PTRS"><code>CL_KERNEL_<wbr>EXEC_<wbr>INFO_<wbr>SVM_<wbr>PTRS</code></a> and
-<a href="#CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM"><code>CL_KERNEL_<wbr>EXEC_<wbr>INFO_<wbr>SVM_<wbr>FINE_<wbr>GRAIN_<wbr>SYSTEM</code></a> if no devices in
-the context associated with <em>kernel</em> support SVM.</p>
-</li>
-<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> for <a href="#CL_KERNEL_EXEC_INFO_DEVICE_PTRS_EXT"><code>CL_KERNEL_<wbr>EXEC_<wbr>INFO_<wbr>DEVICE_<wbr>PTRS_<wbr>EXT</code></a> if no
-device in the context associated with <em>kernel</em> support the <a href="#cl_ext_buffer_device_address"><code>cl_ext_<wbr>buffer_<wbr>device_<wbr>address</code></a>
-extension.</p>
-</li>
-<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>param_name</em> is not valid, if <em>param_value</em> is
-<code>NULL</code> or if the size specified by <em>param_value_size</em> is not valid.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>param_name is <a href="#CL_KERNEL_EXEC_INFO_SVM_PTRS"><code>CL_KERNEL_<wbr>EXEC_<wbr>INFO_<wbr>SVM_<wbr>PTRS</code></a> and
+no devices in the context associated with _kernel</em> support SVM.</p>
</li>
<li>
<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>param_name</em> is
@@ -28253,6 +31147,12 @@
system SVM allocations.</p>
</li>
<li>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>param_name</em> is
+<a href="#CL_KERNEL_EXEC_INFO_DEVICE_PTRS_EXT"><code>CL_KERNEL_<wbr>EXEC_<wbr>INFO_<wbr>DEVICE_<wbr>PTRS_<wbr>EXT</code></a> and no devices in the context
+associated with <em>kernel</em> support the <a href="#cl_ext_buffer_device_address"><code>cl_ext_<wbr>buffer_<wbr>device_<wbr>address</code></a>
+extension.</p>
+</li>
+<li>
<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>param_name</em> is not valid, if <em>param_value</em> is
<code>NULL</code> and <em>param_value_size</em> is greater than zero, or if the size specified
by <em>param_value_size</em> is not valid.</p>
@@ -28452,7 +31352,7 @@
<td class="tableblock halign-left valign-top"><p class="tableblock">Return the number of arguments to kernel.</p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_KERNEL_REFERENCE_COUNT"></a><a href="#CL_KERNEL_REFERENCE_COUNT"><code>CL_KERNEL_<wbr>REFERENCE_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_29" class="footnote" href="#_footnotedef_29" title="View footnote.">29</a>]</sup></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_KERNEL_REFERENCE_COUNT"></a><a href="#CL_KERNEL_REFERENCE_COUNT"><code>CL_KERNEL_<wbr>REFERENCE_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_31" class="footnote" href="#_footnotedef_31" title="View footnote.">31</a>]</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uint</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Return the <em>kernel</em> reference count.</p></td>
</tr>
@@ -28591,21 +31491,18 @@
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_KERNEL_GLOBAL_WORK_SIZE"></a><a href="#CL_KERNEL_GLOBAL_WORK_SIZE"><code>CL_KERNEL_<wbr>GLOBAL_<wbr>WORK_<wbr>SIZE</code></a></p>
<p class="tableblock"><a href="#unified-spec">missing before</a> version 1.2.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>size_t</code>[3]</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">This provides a mechanism for the application to query the maximum
- global size that can be used to execute a kernel (i.e. the
- <em>global_work_size</em> argument to <a href="#clEnqueueNDRangeKernel"><strong>clEnqueueNDRangeKernel</strong></a>) on a custom
- device given by <em>device</em> or a built-in kernel on an OpenCL device
- given by <em>device</em>.</p>
-<p class="tableblock"> If <em>device</em> is not a custom device and <em>kernel</em> is not a built-in
- kernel, <a href="#clGetKernelWorkGroupInfo"><strong>clGetKernelWorkGroupInfo</strong></a> returns the error
- <a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a>.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Provides a mechanism for the application to query the maximum
+ global size that can be used to execute a built-in kernel on a
+ specific device given by <em>device</em>.</p>
+<p class="tableblock"> If <em>kernel</em> is not a built-in kernel, querying
+ <a href="#CL_KERNEL_GLOBAL_WORK_SIZE"><code>CL_KERNEL_<wbr>GLOBAL_<wbr>WORK_<wbr>SIZE</code></a> returns the error <a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a>.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_KERNEL_WORK_GROUP_SIZE"></a><a href="#CL_KERNEL_WORK_GROUP_SIZE"><code>CL_KERNEL_<wbr>WORK_<wbr>GROUP_<wbr>SIZE</code></a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>size_t</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">This provides a mechanism for the application to query the maximum
+<td class="tableblock halign-left valign-top"><p class="tableblock">Provides a mechanism for the application to query the maximum
work-group size that can be used to execute the kernel on a specific
- device given by device.
+ device given by <em>device</em>.
The OpenCL implementation uses the resource requirements of the
kernel (register usage etc.) to determine what this work-group size
should be.</p>
@@ -28681,7 +31578,7 @@
</li>
<li>
<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>param_name</em> is <a href="#CL_KERNEL_GLOBAL_WORK_SIZE"><code>CL_KERNEL_<wbr>GLOBAL_<wbr>WORK_<wbr>SIZE</code></a> and
-<em>device</em> is not a custom device and <em>kernel</em> is not a built-in kernel.</p>
+<em>kernel</em> is not a built-in kernel.</p>
</li>
<li>
<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
@@ -28727,7 +31624,33 @@
</table>
</div>
<div class="paragraph">
-<p>Also see <a href="#cl_khr_subgroups"><code>cl_khr_<wbr>subgroups</code></a>.</p>
+<p>or the equivalent</p>
+</div>
+<div id="clGetKernelSubGroupInfoKHR" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="opencl"><span class="c1">// Provided by cl_khr_subgroups</span>
+<span class="kt">cl_int</span> <span class="nf">clGetKernelSubGroupInfoKHR</span><span class="p">(</span>
+ <span class="kt">cl_kernel</span> <span class="n">in_kernel</span><span class="p">,</span>
+ <span class="kt">cl_device_id</span> <span class="n">in_device</span><span class="p">,</span>
+ <span class="kt">cl_kernel_sub_group_info</span> <span class="n">param_name</span><span class="p">,</span>
+ <span class="kt">size_t</span> <span class="n">input_value_size</span><span class="p">,</span>
+ <span class="k">const</span> <span class="kt">void</span><span class="o">*</span> <span class="n">input_value</span><span class="p">,</span>
+ <span class="kt">size_t</span> <span class="n">param_value_size</span><span class="p">,</span>
+ <span class="kt">void</span><span class="o">*</span> <span class="n">param_value</span><span class="p">,</span>
+ <span class="kt">size_t</span><span class="o">*</span> <span class="n">param_value_size_ret</span><span class="p">);</span></code></pre>
+</div>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+<a href="#clGetKernelSubGroupInfoKHR"><strong>clGetKernelSubGroupInfoKHR</strong></a> is provided by the <code>cl_khr_subgroups</code> extension.
+</td>
+</tr>
+</table>
</div>
<div class="ulist">
<ul>
@@ -28820,7 +31743,7 @@
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>size_t</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the number of sub-groups that will be present in each
work-group for a given local work size.
- All workgroups, apart from the last work-group in each dimension
+ All work-groups, apart from the last work-group in each dimension
in the presence of non-uniform work-group sizes, will have the
same number of sub-groups.</p>
<p class="tableblock"> The <em>input_value</em> must be an array of <code>size_t</code> values
@@ -29145,6 +32068,33 @@
<div class="paragraph">
<p>To query a suggested local work size for a kernel object, call the function</p>
</div>
+<div id="clGetKernelSuggestedLocalWorkSize" class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="opencl"><span class="c1">// Provided by CL_VERSION_3_1</span>
+<span class="kt">cl_int</span> <span class="nf">clGetKernelSuggestedLocalWorkSize</span><span class="p">(</span>
+ <span class="kt">cl_command_queue</span> <span class="n">command_queue</span><span class="p">,</span>
+ <span class="kt">cl_kernel</span> <span class="n">kernel</span><span class="p">,</span>
+ <span class="kt">cl_uint</span> <span class="n">work_dim</span><span class="p">,</span>
+ <span class="k">const</span> <span class="kt">size_t</span><span class="o">*</span> <span class="n">global_work_offset</span><span class="p">,</span>
+ <span class="k">const</span> <span class="kt">size_t</span><span class="o">*</span> <span class="n">global_work_size</span><span class="p">,</span>
+ <span class="kt">size_t</span><span class="o">*</span> <span class="n">suggested_local_work_size</span><span class="p">);</span></code></pre>
+</div>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+<a href="#clGetKernelSuggestedLocalWorkSize"><strong>clGetKernelSuggestedLocalWorkSize</strong></a> is <a href="#unified-spec">missing before</a> version 3.1.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>or the equivalent</p>
+</div>
<div id="clGetKernelSuggestedLocalWorkSizeKHR" class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="opencl"><span class="c1">// Provided by cl_khr_suggested_local_work_size</span>
@@ -29208,82 +32158,190 @@
local work size.</p>
</div>
<div class="paragraph">
-<p><a href="#clGetKernelSuggestedLocalWorkSizeKHR"><strong>clGetKernelSuggestedLocalWorkSizeKHR</strong></a> returns <a href="#CL_SUCCESS"><code>CL_SUCCESS</code></a> if the query
+<p><a href="#clGetKernelSuggestedLocalWorkSize"><strong>clGetKernelSuggestedLocalWorkSize</strong></a> returns <a href="#CL_SUCCESS"><code>CL_SUCCESS</code></a> if the query
executed successfully.
Otherwise, it returns one of the following errors:</p>
</div>
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_KERNEL"><code>CL_INVALID_<wbr>KERNEL</code></a> if <em>kernel</em> is not a valid kernel object.</p>
+<p><a href="#CL_INVALID_KERNEL"><code>CL_INVALID_<wbr>KERNEL</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>kernel</em> is not a valid kernel</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if the context associated with <em>kernel</em> is not the
-same as the context associated with <em>command_queue</em>.</p>
+<p><a href="#CL_INVALID_PROGRAM_EXECUTABLE"><code>CL_INVALID_<wbr>PROGRAM_<wbr>EXECUTABLE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is no successfully built program executable available for the device associated with <em>command_queue</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_PROGRAM_EXECUTABLE"><code>CL_INVALID_<wbr>PROGRAM_<wbr>EXECUTABLE</code></a> if there is no successfully built
-program executable available for <em>kernel</em> for the device associated with
-<em>command_queue</em>.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and <em>kernel</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_KERNEL_ARGS"><code>CL_INVALID_<wbr>KERNEL_<wbr>ARGS</code></a> if all argument values for <em>kernel</em> have not
-been set.</p>
+<p><a href="#CL_INVALID_KERNEL_ARGS"><code>CL_INVALID_<wbr>KERNEL_<wbr>ARGS</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if any kernel arguments for <em>kernel</em> have not been set</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a> if a sub-buffer object is set as an
-argument to <em>kernel</em> and the offset specified when the sub-buffer object
-was created is not aligned to <a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> for the
-device associated with <em>command_queue</em>.</p>
+<p><a href="#CL_INVALID_WORK_DIMENSION"><code>CL_INVALID_<wbr>WORK_<wbr>DIMENSION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>work_dim</em> is not valid for the device associated with <em>command_queue</em> (is greater than the value returned for <a href="#CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>ITEM_<wbr>DIMENSIONS</code></a>)</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_IMAGE_SIZE"><code>CL_INVALID_<wbr>IMAGE_<wbr>SIZE</code></a> if an image object is set as an argument to
-<em>kernel</em> and the image dimensions are not supported by device associated
-with <em>command_queue</em>.</p>
+<p><a href="#CL_INVALID_GLOBAL_OFFSET"><code>CL_INVALID_<wbr>GLOBAL_<wbr>OFFSET</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>global_work_offset</em> is not <code>NULL</code>.
+This error condition does not apply when the device associated with
+<em>command_queue</em> supports OpenCL 1.1 or newer.</p>
</li>
<li>
-<p><a href="#CL_IMAGE_FORMAT_NOT_SUPPORTED"><code>CL_IMAGE_<wbr>FORMAT_<wbr>NOT_<wbr>SUPPORTED</code></a> if an image object is set as an argument
-to <em>kernel</em> and the image format is not supported by the device
-associated with <em>command_queue</em>.</p>
+<p>if the value specified in <em>global_work_size</em> plus the corresponding value
+in <em>global_work_offset</em> for any dimensions is greater than the maximum value
+representable by <code>size_t</code> on the device associated with <em>command_queue</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if an SVM pointer is set as an argument to
-<em>kernel</em> and the device associated with <em>command_queue</em> does not support
-SVM or the required SVM capabilities for the SVM pointer.</p>
+<p><a href="#CL_INVALID_GLOBAL_WORK_SIZE"><code>CL_INVALID_<wbr>GLOBAL_<wbr>WORK_<wbr>SIZE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>global_work_size</em> is <code>NULL</code></p>
</li>
<li>
-<p><a href="#CL_INVALID_WORK_DIMENSION"><code>CL_INVALID_<wbr>WORK_<wbr>DIMENSION</code></a> if <em>work_dim</em> is not a valid value (i.e. a
-value between 1 and <a href="#CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>ITEM_<wbr>DIMENSIONS</code></a>).</p>
+<p>if any of the values specified in <em>global_work_size</em>[0], …​
+<em>global_work_size</em>[<em>work_dim</em> - 1] are zero</p>
</li>
<li>
-<p><a href="#CL_INVALID_GLOBAL_WORK_SIZE"><code>CL_INVALID_<wbr>GLOBAL_<wbr>WORK_<wbr>SIZE</code></a> if <em>global_work_size</em> is NULL or if any of
-the values specified in <em>global_work_size</em> are 0.</p>
+<p>if any of the values specified in <em>global_work_size</em>[0], …​
+<em>global_work_size</em>[<em>work_dim</em> - 1] exceed the maximum value representable by
+<code>size_t</code> on the device associated with <em>command_queue</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_GLOBAL_WORK_SIZE"><code>CL_INVALID_<wbr>GLOBAL_<wbr>WORK_<wbr>SIZE</code></a> if any of the values specified in
-<em>global_work_size</em> exceed the maximum value representable by <code>size_t</code> on
-the device associated with <em>command_queue</em>.</p>
+<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if a kernel argument for <em>kernel</em> is a sub-buffer object and the offset
+specified when the sub-buffer object is created is not aligned to
+<a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> for the device associated with
+<em>command_queue</em>.
+This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_GLOBAL_OFFSET"><code>CL_INVALID_<wbr>GLOBAL_<wbr>OFFSET</code></a> if the value specified in <em>global_work_size</em>
-plus the corresponding value in <em>global_work_offset</em> for dimension
-exceeds the maximum value representable by <code>size_t</code> on the device
-associated with <em>command_queue</em>.</p>
+<p><a href="#CL_INVALID_IMAGE_SIZE"><code>CL_INVALID_<wbr>IMAGE_<wbr>SIZE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if a kernel argument for <em>kernel</em> is an image and the dimensions of the
+image, such as the image width or image height, are not supported by the
+device associated with <em>command_queue</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>suggested_local_work_size</em> is NULL.</p>
+<p><a href="#CL_IMAGE_FORMAT_NOT_SUPPORTED"><code>CL_IMAGE_<wbr>FORMAT_<wbr>NOT_<wbr>SUPPORTED</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if a kernel argument for <em>kernel</em> is an image and the format of the
+image, such as the image channel order or image channel data type, are not
+supported by the device associated with <em>command_queue</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the device.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if SVM pointers are set as arguments for <em>kernel</em> and the device associated with <em>command_queue</em> does not support SVM</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p>if system pointers are set as arguments for <em>kernel</em> and the device associated with <em>command_queue</em> does not support fine-grain system SVM</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>suggested_local_work_size</em> is <code>NULL</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -29378,8 +32436,8 @@
<a href="#kernel-workgroup-info-table">Kernel Object Device Queries</a> table, and the
number of work-items specified in <em>local_work_size</em>[0], …​,
<em>local_work_size</em>[<em>work_dim</em> - 1] must be less than or equal to the
-corresponding values specified by <a href="#CL_DEVICE_MAX_WORK_ITEM_SIZES"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>ITEM_<wbr>SIZES</code></a>[0], …​,
-<a href="#CL_DEVICE_MAX_WORK_ITEM_SIZES"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>ITEM_<wbr>SIZES</code></a>[<em>work_dim</em> - 1].
+corresponding values specified by <a href="#CL_DEVICE_MAX_WORK_GROUP_SIZES"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>GROUP_<wbr>SIZES</code></a>[0], …​,
+<a href="#CL_DEVICE_MAX_WORK_GROUP_SIZES"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>GROUP_<wbr>SIZES</code></a>[<em>work_dim</em> - 1].
The explicitly specified <em>local_work_size</em> will be used to determine how to
break the global work-items specified by <em>global_work_size</em> into appropriate
work-group instances.</p>
@@ -29425,13 +32483,13 @@
<div class="olist loweralpha">
<ol class="loweralpha" type="a">
<li>
-<p>If the program was created with <a href="#clCreateProgramWithSource"><strong>clCreateProgramWithSource</strong></a>, the program must be compiled or built using the <code>-cl-std=CL2.0</code> or <code>-cl-std=CL3.0</code> build option and without the <code>-cl-uniform-work-group-size</code> build option.</p>
+<p>If the program was created with <a href="#clCreateProgramWithSource"><strong>clCreateProgramWithSource</strong></a>, then the program must be compiled for OpenCL C 2.0 or newer (e.g. by using the <code>-cl-std=CL2.0</code> or newer build option), and without the <code>-cl-uniform-work-group-size</code> build option.</p>
</li>
<li>
-<p>If the program was created with <a href="#clCreateProgramWithIL"><strong>clCreateProgramWithIL</strong></a> or <a href="#clCreateProgramWithBinary"><strong>clCreateProgramWithBinary</strong></a>, the program must be compiled or built without the <code>-cl-uniform-work-group-size</code> build options.</p>
+<p>If the program was created with <a href="#clCreateProgramWithIL"><strong>clCreateProgramWithIL</strong></a> or <a href="#clCreateProgramWithBinary"><strong>clCreateProgramWithBinary</strong></a>, then the program must be compiled or built without the <code>-cl-uniform-work-group-size</code> build options.</p>
</li>
<li>
-<p>If the program was created using <a href="#clLinkProgram"><strong>clLinkProgram</strong></a>, all input programs must support non-uniform work-groups.</p>
+<p>If the program was created using <a href="#clLinkProgram"><strong>clLinkProgram</strong></a>, then all input programs must support non-uniform work-groups.</p>
</li>
</ol>
</div>
@@ -29489,134 +32547,238 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_INVALID_PROGRAM_EXECUTABLE"><code>CL_INVALID_<wbr>PROGRAM_<wbr>EXECUTABLE</code></a> if there is no successfully built program
-executable available for the device associated with <em>command_queue</em>.</p>
+<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>command_queue</em> is not a valid host command-queue</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> if <em>command_queue</em> is not a valid host
-command-queue.</p>
+<p><a href="#CL_INVALID_KERNEL"><code>CL_INVALID_<wbr>KERNEL</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>kernel</em> is not a valid kernel</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_KERNEL"><code>CL_INVALID_<wbr>KERNEL</code></a> if <em>kernel</em> is not a valid kernel object.</p>
+<p><a href="#CL_INVALID_PROGRAM_EXECUTABLE"><code>CL_INVALID_<wbr>PROGRAM_<wbr>EXECUTABLE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is no successfully built program executable available for the device associated with <em>command_queue</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a> if context associated with <em>command_queue</em> and
-<em>kernel</em> are not the same or if the context associated with
-<em>command_queue</em> and events in <em>event_wait_list</em> are not the same.</p>
+<p><a href="#CL_INVALID_CONTEXT"><code>CL_INVALID_<wbr>CONTEXT</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the context associated with <em>command_queue</em> and <em>kernel</em> are not the same</p>
</li>
<li>
-<p><a href="#CL_INVALID_KERNEL_ARGS"><code>CL_INVALID_<wbr>KERNEL_<wbr>ARGS</code></a> if the kernel argument values have not been
-specified.</p>
+<p>if the context associated with <em>command_queue</em> and events in <em>event_wait_list</em> are not the same</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_WORK_DIMENSION"><code>CL_INVALID_<wbr>WORK_<wbr>DIMENSION</code></a> if <em>work_dim</em> is not a valid value (i.e. a
-value between 1 and <a href="#CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>ITEM_<wbr>DIMENSIONS</code></a>).</p>
+<p><a href="#CL_INVALID_KERNEL_ARGS"><code>CL_INVALID_<wbr>KERNEL_<wbr>ARGS</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if any kernel arguments for <em>kernel</em> have not been set</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_GLOBAL_WORK_SIZE"><code>CL_INVALID_<wbr>GLOBAL_<wbr>WORK_<wbr>SIZE</code></a> if <em>global_work_size</em> is NULL or if any of
-the values specified in <em>global_work_size</em>[0], …​
+<p><a href="#CL_INVALID_WORK_DIMENSION"><code>CL_INVALID_<wbr>WORK_<wbr>DIMENSION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>work_dim</em> is not valid for the device associated with <em>command_queue</em> (is greater than the value returned for <a href="#CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>ITEM_<wbr>DIMENSIONS</code></a>)</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_GLOBAL_OFFSET"><code>CL_INVALID_<wbr>GLOBAL_<wbr>OFFSET</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>global_work_offset</em> is not <code>NULL</code>.
+This error condition does not apply when the device associated with
+<em>command_queue</em> supports OpenCL 1.1 or newer.</p>
+</li>
+<li>
+<p>if the value specified in <em>global_work_size</em> plus the corresponding value
+in <em>global_work_offset</em> for any dimensions is greater than the maximum value
+representable by <code>size_t</code> on the device associated with <em>command_queue</em></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_INVALID_GLOBAL_WORK_SIZE"><code>CL_INVALID_<wbr>GLOBAL_<wbr>WORK_<wbr>SIZE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>global_work_size</em> is <code>NULL</code>.
+This error condition does not apply when the device associated with
+<em>command_queue</em> supports OpenCL 2.1 or newer.</p>
+</li>
+<li>
+<p>if any of the values specified in <em>global_work_size</em>[0], …​
<em>global_work_size</em>[<em>work_dim</em> - 1] are zero.
This error condition does not apply when the device associated with
<em>command_queue</em> supports OpenCL 2.1 or newer.</p>
</li>
<li>
-<p><a href="#CL_INVALID_GLOBAL_WORK_SIZE"><code>CL_INVALID_<wbr>GLOBAL_<wbr>WORK_<wbr>SIZE</code></a> if any of the values specified in
-<em>global_work_size</em>[0], …​ <em>global_work_size</em>[<em>work_dim</em> - 1] exceed the
-maximum value representable by <code>size_t</code> on the device on which the
-kernel-instance will be enqueued.</p>
+<p>if any of the values specified in <em>global_work_size</em>[0], …​
+<em>global_work_size</em>[<em>work_dim</em> - 1] exceed the maximum value representable by
+<code>size_t</code> on the device associated with <em>command_queue</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_GLOBAL_OFFSET"><code>CL_INVALID_<wbr>GLOBAL_<wbr>OFFSET</code></a> if the value specified in <em>global_work_size</em>
-+ the corresponding values in <em>global_work_offset</em> for any
-dimensions is greater than the maximum value representable by size t on
-the device on which the kernel-instance will be enqueued, or if
-<em>global_work_offset</em> is non-<code>NULL</code> <a href="#unified-spec">before</a> version 1.1.</p>
+<p><a href="#CL_INVALID_WORK_GROUP_SIZE"><code>CL_INVALID_<wbr>WORK_<wbr>GROUP_<wbr>SIZE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>local_work_size</em> is not <code>NULL</code>, if the work-group size must be uniform, and if the <em>global_work_size</em> is not evenly divisible by the <em>local_work_size</em></p>
</li>
<li>
-<p><a href="#CL_INVALID_WORK_GROUP_SIZE"><code>CL_INVALID_<wbr>WORK_<wbr>GROUP_<wbr>SIZE</code></a> if <em>local_work_size</em> is specified and does
-not match the required work-group size for <em>kernel</em> in the program
-source.</p>
+<p>if <em>local_work_size</em> is not <code>NULL</code> and if the total number of work-items in the work-group is zero</p>
</li>
<li>
-<p><a href="#CL_INVALID_WORK_GROUP_SIZE"><code>CL_INVALID_<wbr>WORK_<wbr>GROUP_<wbr>SIZE</code></a> if <em>local_work_size</em> is specified and is not
-consistent with the required number of sub-groups for <em>kernel</em> in the
-program source.</p>
+<p>if <em>local_work_size</em> is not <code>NULL</code> and if the total number of work-items in the work-group is greater than the maximum work-group size supported for <em>kernel</em> on the device associated with <em>command_queue</em> (is greater than the value returned for <a href="#CL_KERNEL_WORK_GROUP_SIZE"><code>CL_KERNEL_<wbr>WORK_<wbr>GROUP_<wbr>SIZE</code></a>)</p>
</li>
<li>
-<p><a href="#CL_INVALID_WORK_GROUP_SIZE"><code>CL_INVALID_<wbr>WORK_<wbr>GROUP_<wbr>SIZE</code></a> if <em>local_work_size</em> is specified and the
-total number of work-items in the work-group computed as
-<em>local_work_size</em>[0] × …​ <em>local_work_size</em>[<em>work_dim</em> - 1] is
-greater than the value specified by <a href="#CL_KERNEL_WORK_GROUP_SIZE"><code>CL_KERNEL_<wbr>WORK_<wbr>GROUP_<wbr>SIZE</code></a> in the
-<a href="#kernel-workgroup-info-table">Kernel Object Device Queries</a> table.</p>
+<p>if <em>local_work_size</em> is not <code>NULL</code> and if the <em>local_work_size</em> does not match the required work-group size for <em>kernel</em></p>
</li>
<li>
-<p><a href="#CL_INVALID_WORK_GROUP_SIZE"><code>CL_INVALID_<wbr>WORK_<wbr>GROUP_<wbr>SIZE</code></a> if the work-group size must be uniform and
-the <em>local_work_size</em> is not <code>NULL</code>, is not equal to the required
-work-group size specified in the kernel source, or the
-<em>global_work_size</em> is not evenly divisible by the <em>local_work_size</em>.</p>
+<p>if <em>local_work_size</em> is not <code>NULL</code> and if the <em>local_work_size</em> is not consistent with the required number of sub-groups for <em>kernel</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_WORK_ITEM_SIZE"><code>CL_INVALID_<wbr>WORK_<wbr>ITEM_<wbr>SIZE</code></a> if the number of work-items specified in any
-of <em>local_work_size</em>[0], …​ <em>local_work_size</em>[<em>work_dim</em> - 1] is
-greater than the corresponding values specified by
-<a href="#CL_DEVICE_MAX_WORK_ITEM_SIZES"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>ITEM_<wbr>SIZES</code></a>[0], …​,
-<a href="#CL_DEVICE_MAX_WORK_ITEM_SIZES"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>ITEM_<wbr>SIZES</code></a>[<em>work_dim</em> - 1].</p>
+<p><a href="#CL_INVALID_WORK_ITEM_SIZE"><code>CL_INVALID_<wbr>WORK_<wbr>ITEM_<wbr>SIZE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if the number of work-items specified in any dimension of <em>local_work_size</em> is not valid for the device associated with <em>command_queue</em> (is greater than the corresponding value returned for <a href="#CL_DEVICE_MAX_WORK_GROUP_SIZES"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>GROUP_<wbr>SIZES</code></a>)</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a> if a sub-buffer object is specified as
-the value for an argument that is a buffer object and the <em>offset</em>
+<p><a href="#CL_MISALIGNED_SUB_BUFFER_OFFSET"><code>CL_MISALIGNED_<wbr>SUB_<wbr>BUFFER_<wbr>OFFSET</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if a kernel argument for <em>kernel</em> is a sub-buffer object and the offset
specified when the sub-buffer object is created is not aligned to
-<a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> value for device associated with <em>queue</em>.
+<a href="#CL_DEVICE_MEM_BASE_ADDR_ALIGN"><code>CL_DEVICE_<wbr>MEM_<wbr>BASE_<wbr>ADDR_<wbr>ALIGN</code></a> for the device associated with
+<em>command_queue</em>.
This error code is <a href="#unified-spec">missing before</a> version 1.1.</p>
</li>
-<li>
-<p><a href="#CL_INVALID_IMAGE_SIZE"><code>CL_INVALID_<wbr>IMAGE_<wbr>SIZE</code></a> if an image object is specified as an argument
-value and the image dimensions (image width, height, specified or
-compute row and/or slice pitch) are not supported by device associated
-with <em>queue</em>.</p>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_IMAGE_FORMAT_NOT_SUPPORTED"><code>CL_IMAGE_<wbr>FORMAT_<wbr>NOT_<wbr>SUPPORTED</code></a> if an image object is specified as an
-argument value and the image format (image channel order and data type)
-is not supported by device associated with <em>queue</em>.</p>
+<p><a href="#CL_INVALID_IMAGE_SIZE"><code>CL_INVALID_<wbr>IMAGE_<wbr>SIZE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if a kernel argument for <em>kernel</em> is an image and the dimensions of the
+image, such as the image width or image height, are not supported by the
+device associated with <em>command_queue</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to queue the execution
-instance of <em>kernel</em> on the command-queue because of insufficient
-resources needed to execute the kernel.
-For example, the explicitly specified <em>local_work_size</em> causes a failure
-to execute the kernel because of insufficient resources such as
-registers or local memory.
-Another example would be the number of read-only image args used in
-<em>kernel</em> exceed the <a href="#CL_DEVICE_MAX_READ_IMAGE_ARGS"><code>CL_DEVICE_<wbr>MAX_<wbr>READ_<wbr>IMAGE_<wbr>ARGS</code></a> value for device or
-the number of write-only and read-write image args used in <em>kernel</em>
-exceed the <a href="#CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS"><code>CL_DEVICE_<wbr>MAX_<wbr>READ_<wbr>WRITE_<wbr>IMAGE_<wbr>ARGS</code></a> value for device or the
-number of samplers used in <em>kernel</em> exceed <a href="#CL_DEVICE_MAX_SAMPLERS"><code>CL_DEVICE_<wbr>MAX_<wbr>SAMPLERS</code></a> for
-device.</p>
+<p><a href="#CL_IMAGE_FORMAT_NOT_SUPPORTED"><code>CL_IMAGE_<wbr>FORMAT_<wbr>NOT_<wbr>SUPPORTED</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if a kernel argument for <em>kernel</em> is an image and the format of the
+image, such as the image channel order or image channel data type, are not
+supported by the device associated with <em>command_queue</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a> if there is a failure to allocate
-memory for data store associated with image or buffer objects specified
-as arguments to <em>kernel</em>.</p>
+<p><a href="#CL_MEM_OBJECT_ALLOCATION_FAILURE"><code>CL_MEM_<wbr>OBJECT_<wbr>ALLOCATION_<wbr>FAILURE</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate memory for the data store associated with any buffer or image object kernel arguments for <em>kernel</em></p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a> if <em>event_wait_list</em> is <code>NULL</code> and
-<em>num_events_in_wait_list</em> > 0, or <em>event_wait_list</em> is not <code>NULL</code> and
-<em>num_events_in_wait_list</em> is 0, or if event objects in <em>event_wait_list</em>
-are not valid events.</p>
+<p><a href="#CL_INVALID_EVENT_WAIT_LIST"><code>CL_INVALID_<wbr>EVENT_<wbr>WAIT_<wbr>LIST</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if <em>event_wait_list</em> is <code>NULL</code> and <em>num_events_in_wait_list</em> is greater than zero</p>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if SVM pointers are passed as arguments to a kernel
-and the device does not support SVM, or if system pointers are passed as
-arguments to a kernel and the device does not support fine-grain system SVM.</p>
+<p>if <em>event_wait_list</em> is not <code>NULL</code> and <em>num_events_in_wait_list</em> is zero</p>
</li>
<li>
-<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a> if there is a failure to allocate resources required
-by the OpenCL implementation on the device.</p>
+<p>if event objects in <em>event_wait_list</em> are not valid events</p>
+</li>
+</ul>
+</div>
</li>
<li>
-<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a> if there is a failure to allocate resources
-required by the OpenCL implementation on the host.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if SVM pointers are set as arguments for <em>kernel</em> and the device associated with <em>command_queue</em> does not support SVM</p>
+</li>
+<li>
+<p>if system pointers are set as arguments for <em>kernel</em> and the device associated with <em>command_queue</em> does not support fine-grain system SVM</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_RESOURCES"><code>CL_OUT_<wbr>OF_<wbr>RESOURCES</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the device</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#CL_OUT_OF_HOST_MEMORY"><code>CL_OUT_<wbr>OF_<wbr>HOST_<wbr>MEMORY</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if there is a failure to allocate resources required by the OpenCL
+implementation on the host</p>
+</li>
+</ul>
+</div>
</li>
</ul>
</div>
@@ -30178,7 +33340,7 @@
</table>
</div>
<div class="paragraph">
-<p><a href="#clSetUserEventStatus"><strong>clSetUserEventStatus</strong></a> returns <a href="#CL_SUCCESS"><code>CL_SUCCESS</code></a> if the function was executed
+<p><a href="#clSetUserEventStatus"><strong>clSetUserEventStatus</strong></a> returns <a href="#CL_SUCCESS"><code>CL_SUCCESS</code></a> if the function is executed
successfully.
Otherwise, it returns one of the following errors:</p>
</div>
@@ -30355,7 +33517,7 @@
<a href="#event-command-type-table">Event Command Types</a> table.</p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_EVENT_COMMAND_EXECUTION_STATUS"></a><a href="#CL_EVENT_COMMAND_EXECUTION_STATUS"><code>CL_EVENT_<wbr>COMMAND_<wbr>EXECUTION_<wbr>STATUS</code></a> <sup class="footnote">[<a id="_footnoteref_30" class="footnote" href="#_footnotedef_30" title="View footnote.">30</a>]</sup></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_EVENT_COMMAND_EXECUTION_STATUS"></a><a href="#CL_EVENT_COMMAND_EXECUTION_STATUS"><code>CL_EVENT_<wbr>COMMAND_<wbr>EXECUTION_<wbr>STATUS</code></a> <sup class="footnote">[<a id="_footnoteref_32" class="footnote" href="#_footnotedef_32" title="View footnote.">32</a>]</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_int</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Return the execution status of the command identified by event.
Valid values are:</p>
@@ -30384,7 +33546,7 @@
<p class="tableblock"> <a href="#CL_COMPLETE"><code>CL_COMPLETE</code></a> - All commands have completed on all devices.</p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_EVENT_REFERENCE_COUNT"></a><a href="#CL_EVENT_REFERENCE_COUNT"><code>CL_EVENT_<wbr>REFERENCE_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_31" class="footnote" href="#_footnotedef_31" title="View footnote.">31</a>]</sup></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_EVENT_REFERENCE_COUNT"></a><a href="#CL_EVENT_REFERENCE_COUNT"><code>CL_EVENT_<wbr>REFERENCE_<wbr>COUNT</code></a> <sup class="footnote">[<a id="_footnoteref_33" class="footnote" href="#_footnotedef_33" title="View footnote.">33</a>]</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uint</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Return the <em>event</em> reference count.</p></td>
</tr>
@@ -30624,11 +33786,13 @@
</tbody>
</table>
<div class="paragraph">
-<p>Using <a href="#clGetEventInfo"><strong>clGetEventInfo</strong></a> to determine if a command identified by <em>event</em> has
-finished execution (i.e. <a href="#CL_EVENT_COMMAND_EXECUTION_STATUS"><code>CL_EVENT_<wbr>COMMAND_<wbr>EXECUTION_<wbr>STATUS</code></a> returns
-<a href="#CL_COMPLETE"><code>CL_COMPLETE</code></a>) is not a synchronization point.
-There are no guarantees that the memory objects being modified by command
-associated with <em>event</em> will be visible to other enqueued commands.</p>
+<p>Prior to OpenCL 3.1, using <a href="#clGetEventInfo"><strong>clGetEventInfo</strong></a> to determine if a command identified
+by <em>event</em> has finished execution (i.e. whether
+<a href="#CL_EVENT_COMMAND_EXECUTION_STATUS"><code>CL_EVENT_<wbr>COMMAND_<wbr>EXECUTION_<wbr>STATUS</code></a> returns <a href="#CL_COMPLETE"><code>CL_COMPLETE</code></a>) is not a
+synchronization point.
+For OpenCL 3.1 and newer, if a call to <a href="#clGetEventInfo"><strong>clGetEventInfo</strong></a> to determine the
+execution status of a command identified by <em>event</em> returns <a href="#CL_COMPLETE"><code>CL_COMPLETE</code></a>, then
+the call to <a href="#clGetEventInfo"><strong>clGetEventInfo</strong></a> is a synchronization point.</p>
</div>
<div class="paragraph">
<p><a href="#clGetEventInfo"><strong>clGetEventInfo</strong></a> returns <a href="#CL_SUCCESS"><code>CL_SUCCESS</code></a> if the function is executed
@@ -32916,7 +36080,7 @@
<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the context specified when the semaphore is created.</p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_SEMAPHORE_REFERENCE_COUNT_KHR"></a><a href="#CL_SEMAPHORE_REFERENCE_COUNT_KHR"><code>CL_SEMAPHORE_<wbr>REFERENCE_<wbr>COUNT_<wbr>KHR</code></a> <sup class="footnote">[<a id="_footnoteref_32" class="footnote" href="#_footnotedef_32" title="View footnote.">32</a>]</sup></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_SEMAPHORE_REFERENCE_COUNT_KHR"></a><a href="#CL_SEMAPHORE_REFERENCE_COUNT_KHR"><code>CL_SEMAPHORE_<wbr>REFERENCE_<wbr>COUNT_<wbr>KHR</code></a> <sup class="footnote">[<a id="_footnoteref_34" class="footnote" href="#_footnotedef_34" title="View footnote.">34</a>]</sup></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uint</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the semaphore reference count.</p></td>
</tr>
@@ -33393,13 +36557,14 @@
operations, as well as enabling driver optimizations.</p>
</div>
<div class="paragraph">
-<p>Command-buffers are <em>sequential use</em> by default, but may also be set to
-<em>simultaneous use</em> on creation if the device optionally supports this
-capability.
-A sequential use command-buffer must have a <a href="#pending_count">Pending Count</a>
-of 0 or 1.
-The simultaneous use capability removes this restriction and allows
-command-buffers to have a <a href="#pending_count">Pending Count</a> greater than 1.</p>
+<p>Upon creation a command-buffer is in the <a href="#recording">Recording</a> state. In
+order for the command-buffer to be enqueued it must first be finalized using
+<a href="#clFinalizeCommandBufferKHR"><strong>clFinalizeCommandBufferKHR</strong></a>, after which no further commands can be recorded.
+A command-buffer is enqueued for execution on command-queues with a call to
+<a href="#clEnqueueCommandBufferKHR"><strong>clEnqueueCommandBufferKHR</strong></a>. It is always valid to call
+<a href="#clEnqueueCommandBufferKHR"><strong>clEnqueueCommandBufferKHR</strong></a> with a command-buffer that has previously been
+enqueued, provided the call doesn’t violate the definition of
+<a href="#simultaneous-use">simultaneous use</a>.</p>
</div>
<div class="paragraph">
<p>Command-buffers are created using an ordered list of command-queues that
@@ -33480,6 +36645,42 @@
</tr>
</table>
</div>
+<div class="paragraph">
+<p>Simultaneous use is defined using the <em>prerequisite</em> terminology from the
+<a href="#_execution_model">execution model</a>.
+Simultaneous use is an optional feature for devices to support concurrent
+executions of a command-buffer which have been updated between submissions.
+A command-buffer must be created with <a href="#CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>SIMULTANEOUS_<wbr>USE_<wbr>KHR</code></a>
+to avoid undefined behavior if a simultaneous use pattern occurs.</p>
+</div>
+<div id="simultaneous-use" class="dlist">
+<dl>
+<dt class="hdlist1">Simultaneous Use</dt>
+<dd>
+<p>When a command-buffer is submitted for
+execution without a prerequisite on all the previous submissions of the same
+command-buffer which are not in the <a href="#CL_COMPLETE"><code>CL_COMPLETE</code></a> state.</p>
+</dd>
+</dl>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>An example of simultaneous use would be two submissions of the same
+command-buffer to a single out-of-order queue, without any events or barriers
+used to express a dependency between the two enqueue calls. Using a single
+in-order queue, events, or barriers to express dependencies between submissions
+of the same command-buffer would each be ways to avoid simultaneous use.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
<div class="sect3">
<h4 id="_command_buffers_and_multiple_devices"><a class="anchor" href="#_command_buffers_and_multiple_devices"></a>5.17.1. Command-Buffers and Multiple Devices</h4>
<div class="paragraph">
@@ -33522,7 +36723,9 @@
<div class="sect3">
<h4 id="_command_buffer_lifecycle"><a class="anchor" href="#_command_buffer_lifecycle"></a>5.17.2. Command-Buffer Lifecycle</h4>
<div class="paragraph">
-<p>A command-buffer is always in one of the following states:</p>
+<p>A command-buffer is created in the recording state and transitions to the
+executable state when finalized, at which point it cannot move back to
+the recording state.</p>
</div>
<div id="recording" class="dlist">
<dl>
@@ -33533,39 +36736,33 @@
</dd>
</dl>
</div>
+<div id="finalized" class="dlist">
+<dl>
+<dt class="hdlist1">Finalized</dt>
+<dd>
+<p>State after command recording has finished with
+<a href="#clFinalizeCommandBufferKHR"><strong>clFinalizeCommandBufferKHR</strong></a>, but there is at least one command for which not
+all arguments or parameters have been set (this is a valid state only for
+mutable command buffers).</p>
+</dd>
+</dl>
+</div>
<div id="executable" class="dlist">
<dl>
<dt class="hdlist1">Executable</dt>
<dd>
<p>State after command recording has finished with
-<a href="#clFinalizeCommandBufferKHR"><strong>clFinalizeCommandBufferKHR</strong></a> and the command-buffer may be enqueued.</p>
-</dd>
-</dl>
-</div>
-<div id="pending" class="dlist">
-<dl>
-<dt class="hdlist1">Pending</dt>
-<dd>
-<p>Once a command-buffer has been enqueued to a command-queue it enters
-the Pending state until completion, at which point it moves back to the
-<a href="#executable">Executable</a> state.</p>
+<a href="#clFinalizeCommandBufferKHR"><strong>clFinalizeCommandBufferKHR</strong></a> and all the arguments and parameters of all
+commands have been set. In this state the command-buffer may be enqueued.</p>
</dd>
</dl>
</div>
<div class="imageblock text-center">
<div class="content">
-<img src="data:image/png;base64,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AgQI1CMg4KhHyTEECBAgQIBAVQEBhwuDAAECBAgQyIqAgCMrnVAHAQIECBDIoYCAI4dNUzIBAgQIECiogICjoI21LAIECBAg0AwBAUczlM1BgAABAgQI1CMg4KhHyTEECBAgQIBAVQEBhwuDAAECBAgQyIqAgCMrnVAHAQIECBDIoYCAI4dNUzIBAgQIECiogICjoI21LAIECBAg0AwBAUczlM1BgAABAgQI1CMg4KhHyTEECBAgQIBAVQEBhwuDAAECBAgQyIqAgCMrnVAHAQIECBDIoYCAI4dNUzIBAgQIECiogICjoI21LAIECBAg0AwBAUczlM1BgAABAgQI1CMg4KhHyTEECBAgQIBAVQEBhwuDAAECBAgQyIqAgCMrnVAHAQIECBDIoYCAI4dNUzIBAgQIECiogICjoI21LAIECBAg0BOBE044IUyZMiWceOKJYdiwYTWHqifguO2228Jpp50Wttxyy/Czn/2sJ2U5lwABAgQIECBQU0DA4eIgQIAAAQIE5hM49thjw9SpU5Pvjxw5Mhx66KFVlRYUcFx66aVh7NixybmbbbZZOP/882kTIECAAAECBHpFQMDRK6wGJUCAAAEC+Rb4+OOPw4477hjefffdZCFDhw5N7sJYZJFFOi2sq4DjRz/6UbjzzjuT45dccskQ7+To169fvmFUT4AAAQIECGRWQMCR2dYojAABAgQItFbg1ltvDWPGjOkoYu21105CjhVXXLHje9UCjldeeSXEcOPPf/5zx3HHH3982H333Vu7ILMTIECAAAEChRYQcBS6vRZHgAABAgR6JnDIIYeEhx9+uGOQpZdeOgk9Ntpoo+R7lQHHn/70p3DyySeHt956q+OcddddN/z617/uWSHOJkCAAAECBAgsQEDA4RIhQIAAAQIEago89dRTyR4clZ/S5qPlAUdpM9HKYy+//PKw/vrrUyZAgAABAgQI9KqAgKNXeQ1OgAABAgTyL3DuueeG6667rmMhffr0CXPnzk2Cj9/97ndh1qxZYYcddkg2E11ooYXCnDlzOo4dMWJEOO644/KPYAUECBAgQIBA5gUEHJlvkQIJECBAgEBrBT766KOw6667hrfffjsJNso/ffv2TQKNeMzCCy8cZs+enfw4hiBLLbVUuOWWW2ws2tr2mZ0AAQIECLSNgICjbVptoQQIECBAoHGByg1H6xnJ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kBUBAUdWOqEOAgQIECCQQwEBRw6bpmQCBAgQIFBQAQFHQRtrWQQIECBAoBkCAo5mKJuDAAECBAgQqEdAwFGPkmMIECBAgACBqgICDhcGAQIECBAgkBUBAUdWOqEOAgQIECCQQwEBRw6bpmQCBAgQIFBQAQFHQRtrWQQIECBAoBkCAo5mKJuDAAECBAgQqEdAwFGPkmMIECBAgACBqgICDhcGAQIECBAgkBUBAUdWOqEOAgQIECCQQwEBRw6bpmQCBAgQIFBQAQFHQRtrWQQIECBAoBkCAo5mKJuDAAECBAgQqEdAwFGPkmMIECBAgACBqgICDhcGAQIECBAgkBUBAUdWOqEOAgQIECCQQwEBRw6bpmQCBAgQIFBQAQFHQRtrWQQIECBAoBkCAo5mKJuDAAECBAgQqEdAwFGPkmMIECBAgACBqgICDhcGAQIECBAgkBUBAUdWOqEOAgQIECCQQwEBRw6bpmQCBAgQIFBQAQFHQRtrWQQIECBAoBkCAo5mKJuDAAECBAgQqEdAwFGPkmMIECBAgACBqgICDhcGAQIECBAgkBUBAUdWOqEOAgQIECCQQwEBRw6bpmQCBAgQIFBQAQFHQRtrWQQIECBAoBkCAo5mKJuDAAECBAgQqEdAwFGPkmMIECBAgACBqgICDhcGAQIECBAgkBUBAUdWOqEOAgQIECCQQwEBRw6bpmQCBAgQIFBQAQFHQRtrWQQIECBAoBkCAo5mKJuDAAECBAgQqEdAwFGPkmMIECBAgACBqgICDhcGAQIECBAgkBUBAUdWOqEOAgQIECCQQwEBRw6bpmQCBAgQIFBQAQFHQRtrWQQIECBAoBkCAo5mKJuDAAECBAgQqEdAwFGPkmMIECBAgACBqgICDhcGAQIECBAgkBUBAUdWOqEOAgQIECCQQwEBRw6bpmQCBAgQIFBQAQFHQRtrWQQIECBAoBkCAo5mKJuDAAECBAgQqEdAwFGPkmMIECBAgACBqgICDhcGAQIECBAgkBUBAUdWOqEOAgQIECCQQwEBRw6bpmQCBAgQIFBQAQFHQRtrWQQIECBAoBkCAo5mKJuDAAECBAgQqEdAwFGPkmMIECBAgACBqgICDhcGAQIECBAgkBUBAUdWOqEOAgQIECCQQwEBRw6bpmQCBAgQIFBQAQFHQRtrWQQIECBAoBkCAo5mKJuDAAECBAgQqEdA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ERZffPGcVJ5emR9//HHYbLPNOg0YXx0b3yTz6aefhtGjRyeP7vzkJz8JO+ywQ3oTG4kAAQIECBDIvICAI/MtUiABAgQIEAjhmWeeSR5JiZ8YbrTz5pgxuHj99dc7LosYahx88MHJ188991zi9NFHHyVvlvE6WL89BAgQIECgfQQEHO3TayslQIAAgZwKxLsW4h/t8fGMM844I2yzzTY5XUk6ZX/ve98Ljz76aMdgZ599dthqq606vi7t0/GVr3wlCTmWWmqpdCY2CgECBAgQIJBpAQFHptujOAIECBAgEMIJJ5yQ7DFx4IEHJv/a/XP66aeHW265pYPhtttuC1/60pc6scRg4xe/+EXYYostws9//vN2J7N+AgQIECDQFgICjrZos0USIECAQF4FLr/88vCrX/0quWsj3r3hE8L/+3//L1x00UUJRb9+/UK8Y6Pa58c//nG44447kn05So+w8CNAgAABAgSKKyDgKG5vrYwAAQIEci7whz/8IRx99NFhtdVWC1dddVVYdNFFc76idMovf1XsRhttFC6++OKqA8+dOzd8+9vfDn/729/CmWeeGYYMGZJOAUYhQIAAAQIEMikg4MhkWxRFgAABAu0u8OqrryZ/nL/zzjvhyiuvtFlm2QXx7LPPhn322Sf5zsiRI8Ohhx5a83KJm7NGx/jGmXjnx0orrdTul5b1EyBAgACBwgoIOArbWgsjQIAAgTwLxEcqHnnkkeS1sMOGDcvzUlKv/cMPPwyDBw9Oxq3nzozbb789eW3s+uuvH+IjPz4ECBAgQIBAMQUEHMXsq1URIECAQI4Fzj///HDNNdeE3XffPRx//PE5Xknvlb7ZZpuF+HaZCRMmhBVXXHGBE51zzjnh+uuvD3vuuWf44Q9/uMDjHUCAAAECBAjkT0DAkb+eqZgAAQIECiwwadKkcPLJJ4d11lknXHHFFQVeac+W9sc//jHEx0++853v1D1Q6fWyp556athpp53qPs+BBAgQIECAQD4EBBz56JMqCRAgQKANBF5//fWw9957h48++ihce+21YZVVVmmDVTdviS+99FLYd999Q9x8NN7NMXDgwOZNbiYCBAgQIECg1wUEHL1ObAICBAgQIFCfQHxjSnxzin036vNq5KjSfhybbLJJuPDCCxsZwjkECBAgQIBARgUEHBltjLIIECBAoL0E4p4bce+N7bbb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" alt="commandbuffer lifecycle">
+<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWsAAAJ8CAYAAAA4fYDGAAAAAXNSR0IB2cksfwAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+kIHA0bLTMRR7AAACAASURBVHja7N11mBVl48bx75zebmLp7lIEBQTFegULRSxUXsVGBRtFEQtfReUniKKIgR2IBQqYiIJISHcvucX2iZn5/bF48LALAhIL3J/r4tI9Z86c2Wfn3OeZp8awbdtGREQqNIeKQEREYS0iIgprERGFtYiIKKxFRERhLSKisBYREYW1iIgorEVEFNYiIqKwFhE5HrlUBHK0syyL7dsz2bhxE4FACWAQHx9P9erVSEiIVwGJwlrkSLFtm5UrV/PbbzP57LNvmDZtCVFRLgzDACAUsrAsm169unDuuWfStu0JpKWlquDkqGVo1T052uTm7uC1197inXc+p7jYjxkKUlxSQHFxPqFQAAMHHq+PqKg4vN4YnE4XyUmxPDJ4AGeccRoej1uFKAprkUNp+fKVDBr0JHPnrqS4eAfZWRmU+HOxbavc7Z0ODzExKaSk1sDr8dGr19nce19/YmNjVJiisBY5JEG9bAW33T6QtWs2k5WVQU7Oun1+rcNwUrlKI2Jjk7m4R1cGPXyfAlsU1iIH29at27j66ltZs2YzmzetpLBo2wHtp3KlRsQnpHH11efzwAN34Xar20aODhq6JxWeZdk8//xI1q7dyrZtaw84qAG2bltOYWEO77zzFd9MmozqKqKwFjlIZsz4nY8//o6C/Czy8jb9y73ZbN68lGDQzwv/9xoZGZuwLEuFLBWergGlgteqLb74YiIOh8227asPyj5t2yQ7exNut5fZs+eRlJRIdHR0eNifiGrWIvspOzuHjz76Dr+/ENP0H7T9FuRvxTJDvP/+Z4RCIUpKSlTYorAWOVDz5y8kGDQpyM8+qPs1rSB+fyG//76ErKxsAoEApmmqwEVhLXIgli1dgcfjIL9g20Hfd1FxPobDICszC0C1a1FYixyoDRs34XCAaQYO+r79/kIchkFBQSEAoVBItWtRWIscCMs6dOH516g962/D9xTWorAWOQCpqSnYloHDcfAHLnk8PmzbJirK97cvBw3jE4W1yH5r1Kg+wZBFVFTSQd+3zxeLZdkkJycprEVhLfJvtGzZnKKiIPFxB3d5UwOD6Kh4atVMo1KltPDjmtEoCmuRA5Cenk737m2Jioo7qE0hMbFpOJwurrzqIlyuXfvVxBhRWIscAJfLyYUXdsPh9JAQn37Q9puUWJWkxBg6dTo5ojbtcOgjIQprkf1mGAbnnHMGDeqnk5JaHa834V/vMyWlDl5fHBdedCZVq1aJ/EAorEVhLXJgoqOjeebZR0hIiCG9akOcTs8B7ys2tjJJSem0a9eYa6+9skyzx9+bREQU1iL7qVmzpgx+pD8ebxQ1arTC69n/GnZiYg2qVKlPjRpp3Hvv7WVuPuByuVSzlgpL1Qg5KhiGQffz/oNpmjzx5EhcrmZkZW1kx47NWFZwr691u2JITatFbGwyDRpU48knB1KnTq0y+/f5fCpoqbifAd0pRo4mtm2zcOEiBvQfzIaN2wmFAhQX55Gfl0VhcSa2VXo6u5xu4uIqERuXgtcbg8PhpFu3Ttx+e19SUlLK7Nfj8RAVFaUCFoW1yMGUnZ3D5MnfMX78RKZNW0RUlAuXy7HzxrkGYBAImBiGQc+ep9Pt3DNpc0Krcps5XC6X1rMWhbXIoVJcXExxcTFr165n8eKlvPvuJyxbuh4bmwsv7MoZXbvQpGkjUlNT9hjETqeTmJgYBbVUeGqzlqNWVFQUTqeTevXqUKdOLebM+Z1vvxmPDZx55mA6d+601xmJbrebqKgoBbUorEUONY/Hg9PppLi4GMMwsNkVznsKaofDgdfrxePxqABFYS1yuDidTqKjoyPC1zAMHA4Htm1jGEb4Z7fbjdvtVqGJwlqkIoiKiiIuLi6idq3mDlFYi1QwfwWzAlqOFZquJSKisBYREYW1iIjCWkREFNYiIqKwFhFRWIuIiMJaREQU1iIiCmsREVFYi4gorEVERGEtIiIKaxERhbWIiCisRUREYS0iorAWERGFtYiIKKxFRBTWIiKisBYRUViLiIjCWkREFNYiIgprERFRWIuIiMJaRERhLSIiCmsREYW1iIgorEVERGEtIqKwFhERhbWIiOyVS0Ugx4rKlStz1VVXYds2Pp9PBSLHFMO2bVvFICJSsakZREREYS0iIgprERGFtYiIKKxFRERhLSJyLNE4azmo/H4/AX8ADPD5onC7dYqJKKylQrAsi40bM3j//U/5bso0gsEQAD6fh3O7deWSnheSnl4VwzCOit/now/Hk5OTw3nnn0u1aun6A0uFoEkx8q+Devynn/PsM6PJzSnE7XHidDiwAcu0CAZNUtPiefSxuznrrK5Hxe9026138+P3f/DRpy/TrFlT/ZFFNWs5+i2Yv4jHh4wgP9/PkMf7cdrpp5KcnIRl2WRnZTP+sy946cX3mf3Hn0dNWBsGOJ3qzhGFtRwjQiGToUOHEwiEGPJEP3r3vjyiqSMuLpYTT2xDKPgu+9ICYpompmnidrv32GRi2zaWZeF0Ovf5OIPBEKZpAjZOpxO32/1Pcb3bf/edaZr7dWwiCms55LZv286a1Rl4vC5OP71zuQG7p5D+8ouJ/DF7Hu3anUC3buewdOkyXnv1LfLzC+h6RheuuKJnxPYFBYX88P1PTJ8+k6KiIpJTkjnnnK6cdNKJuFzln8Z/zpvP1Kk/smrVWkpK/DsXePLSslUzeva8iLS01PC2hYVFvPPOB1iWxdIlqwmFLD78cDxVq1QOb5NWKZWLL74AhyOy1l1SUsIvv/zGjz/8Ql5eHvHxcZzetTOdOp2C1+vViSIKazmy8vLzCfiDuFxOUlNTy92mbt06jH79sTLPb9iQwbtvf02VymmsXLmaG/reQ8b6LCzTplbtmhHbzp+/kEEPPcW82aspKghSmG8Sl+hmzMsTuOracxj44N0kJiZEvCY/v4B2ba6hUhUv/mKTwh0hcEBCsocp3/7OFxMmM2bs8HAHYjAYZMTwceTmFBEb58EwDMa98RXBoBXeZ7fzT6ZHj/Mj3mfNmnU8Ovhpvp88B3+JSf6OELHxLt4a+zXnnteewY8+oE5KUVjLkWWaJpZl43IbeDzlNy1Uq5ZeflgZBoZhsHbtBh568Am6dTuNzp074PX5CAaD4c125O7gvnuGkJ2dx1PP9OesM7uSmJTAli1bee+9jxnzyqdERUcxaNC9ETVsp9PBs8Nvon37ttSqXYvEhHhs22bzli2Mee0tPv34O14a+RpPPTUYDIiOjuL1N/6HZdu88NzLLF60lieevpM6dWqH9+nz+SJq1YWFhTz04OP88ftSBj7clwsu7E5aWipZWVl8+cVEXhr5DsOeHcGzwx7fY+1fZJ/ZIgdo0aIldstmp9ttTzjLNk1rv1770kuv2fXrdLSbNupsf/nlJDsUCpW73dtvvWfXrXmKPXLkaNs0zYjn/H6/feXlfe2TTjzb3r59e5nXWlb5x7Rq1Rq7Xu0O9vnnXWEXFhSWef62W++yWzQ9zV64cNFef4c/Zs2xGzc41X7iiWfKPba7Bgy0q1duZ8+bO18ni/xr6vKWI+rK3t3p1u3scjvlTNPkt99mYVo27dufVKat2OPx0OW0U8jans+6dRvLqbyX32CemJhAKGgRDIYIhkIHfOx/zJ4LNnTp0rHcY2vRoikut4NFixbrDy1qBpGjW1JS4h5D1TRN/P4AlmnjcBhkZWXvfl2I0+XEcBgUFhSWeb3f72fDho0UFBQCu6YT5OXl43I5dj524NMMNm7YhOEwCAZD5Rzbrqae3Nwd+kOLwlqO+YY6YmI99Lt1YLlT1/Pzi7GtsqG7Y0ce9983mD9mLSIhMQav1xN+LhQK4fb8++F1pmlhWzYD73sKr69sm31BfjFOlwNNOxOFtRxRhmGAAbZlEwoF8Xg8h+R9SoqDPDz4LqpVq1p+nNs2NWpUD/9sWRZvvfUuk7+Zyd339aFXr4sjOvhyc3dwRufLD04ZOAwG3HMDTZo02sN3jU1ScrJOFlFYy5ETGxODx+MiGDTJzd1BpUppB/3LwDAcmKZN7Vo1adK00T69LhQyWbRwKUX5QS677BJSU1PK7Ney9vx6n8+LZduEQuZe3yc+PhawqVu3Ni1bNtcJIYeUOhjlgKWkppCcHE/AH2LBgkV73M6yLPLy8vd7/263m/T0ynh9LuYvWLhfTSfBYAgMynT82bbNokWL8Xj33AxSs2YNQkGL1avW7PVdGjduiGnazJ+/SCeDKKyl4oqOjuLmW6/FNC2GPvkiixYtxbIsbNsOTwvPy8tnzJi3ePHFlw/oPS69tAfBgMlrr77LggWLyuzf7/czdcoPbNuWueukdjhITk4kJtbN1Kk/EAqVTmPfsSOP18e8zfAXRuNyO8jbUcTWrdt3TkXf5bTTT8XpcvD8sFeZNGkymzdvYfv2LLKzcyPan9u1P5G0ygm8NOJtfvrpF0zT/Nux2YRCIaZPn8Gffy7QySL//kpTq+7Jv1FS4uexIU/z4fuT8XicXNDjNGrVrAHAtm3b+fqrn9i6KZfbB1zBvff1D79u1KgxvDDsTQbcfQ233HrDHkeEWJbF2LHjeGLwKxgOOOfc9tSrXxuH4SBnxw5+nT6HRXM38seCCdSoUS1ce5469Qf69B5IdLSLNic2wOvz8vP386nfqArvvPcyo18Zy3vvTCQvx8/I0Q/S89Ie4fcMBAK88MJLjBz+AS6Xg/wdQSzL5uLLOzJ69AvhYYaWZfHF519zx61P4nAanH5GGxo3qY/L5aKwsIjffpvL1G+XMvXHl+jSpZNOFlFYy5EVCAT55JPPmDTpO+bOXk5ebjEGkJgczQknNuaMszpz6aU9ItbJmPDZl8yYOYt27U6kR48L9rrWtW3b/PTTL3wzaSqLF69gy+YsAJJTEqhfvybt259Ar8suKbMOx3dTf+DrryeTlZWDL8pHs6YNufKqy0hNTaGgoICPP/6Mdes2cEbXLpzauWOZL4lp035l+vQZFOQXYNs21apV5ZZbb4xYkc+2bebMmcdnn33FsiUr2bBhK6ZpkZAYS716NWjTpgVXXXUZcfFxOlFEYS1Hnm3b+P0BCgoKKCosHfMcExtLbGwMHo+nTBj/1WRgGMY+r1IXCoUIBoNYO3sHDcOBy+Xc6yp9wWAQ07QwDAO321WmDds0TQzDgcOx55r9rvfb87GGQubOYzP/tq0Lj8d91Nx0QRTWIiLyL6mDUUREYS0iIgprERGFtYiIKKxFRERhLSKisBYRkcNKq+7JMaOwsDC8zofX69WdxUU1a5GKxrIsXnzxRXr27EnPnj2ZNWuWCkUU1iIVUV5eHlOmTGHKlCkRd0gXUViLiIjCWkREFNYiIgprERFRWIuIKKxFRERhLSIiCmsREYW1iIgorEVERGEtIqKwFhERhbWIiMJaREQU1iIiorAWEVFYi4iIwlpERBTWIiIKaxERUViLAJCZmUleXt5B3adpmmRlZVFUVKQClqOCS0UgFZ1lWfTt25fatWtzwQUX0KpVK6KionA6nRiGsc/7CIVCZGdnM336dCZMmECTJk249957VcCisBY5GCpVqsRTTz3FhRdeyLPPPkvdunU5//zzad26NW3btqVRo0Z7DO68vDzmz5/PH3/8wezZs3nnnXcA6NevH/3798ftdquA5ahg2LZtqxjkaDBr1iyuuOIKVq1aFfF4w4YNuemmm5g+fTrjx48HYPDgwRQXF/PMM8+U2U+vXr14+eWXSU5OVqGKwlrkYLNtm4kTJ3LppZdSXFx8QPvo2LEj77//PjVq1FCBylFFHYxy9NQsDINzzz2XN998E6/Xu9+vb9myJWPHjlVQi8Ja5JCfsA4HPXr0YOjQofv92pEjR9KgQQMVoiisRQ4Ht9vNrbfeyj333LPPr/n888/p1KnTPo8eEVFYixwEXq+XwYMHc8011+x1O6fTyeuvv855552noBaFtciREBsby9ChQ+nYseMet3n44Yfp3bs3DodOdTm6aTSIHPVWrVpFr169mDNnTsTj/fr1Y9iwYQfUGSmisBY5BGbNmsXZZ59Nbm4uAGeddRYffPCBxlKLwlqkopk4cSLdu3fnhBNOYMKECRqiJwprkYrqww8/pHnz5jRr1kyFIQprkYrKtm2N+pBjkrrI5diqfSioRWEtIiJHipZIPYZYlgXYqGHruL++wDDQ2HKFtVQEtm3j9wdYsWIlS5cuZ/XqNWRl5RAMBlE3xHEe1YaB1+ulWrWqNG7ckIYN6lO9RjUcDoeaiRTWcrjk5OQye/ZcZvz2Ox99PIWtW/OIinLhdjtxOPRBlF1M08LvNykoCHL6aU05+5wunNT2BFq0bI7Ho5suHHVfwhoNcnTIzMxkyuQfeO75MeTnF5db0zZNW7VqwTB2NYOUV5Fu1aoed9xxIyee2JqoqCgVmMJaDoZAIMCXX05i1Kg32bgxK+I5j8dFUlIsiQmxNG5Sn/r16xAXF4vH41HBHccKCorYsWMHC+YvYWPGZnJyCsjNLYz4Inc6HbRp04CBAwfQtGljtW8rrOXf2LRpM8OHv8zHH3+Hx+MM16CLi0MM6H8lZ53dlSpVKpOYmIjbrRYtKau4uJjs7BxWrFjFBx+MZ9KkGfh87oha+P339+XKKy/D69WXvMJa9tvSpcu59dYHyMjIBMCybFJT4+jb93K6dTubqlWrqJBkv9i2zfz5Cxk//kvGjfsat7u0AmCaFpdccgYDB95FYmKCCkphLftq3rz53HrrA2RlFQDgcBicf15n7rr7NipXrqwefflXTNNkzpx5PPXUcBYtWhdu1z755Ga88MJTJCcnqZAU1vJPFi9eSt++d5OVlQ+Utks/+eTd/Oecs/DoMlUOouzsbP5v+Mt88OG34au3s848iWeefZzY2BgVkMJa9iQjYxOX9bqR7Zl5AMTFRTHs2Yfoctqpqk3LIVFSUsKYMW8xYsS7O2vdFj17nsmQIQ+qDbuCURdwBREIBHjhhVHhoPb53Dz//CMKajmkfD4fN954HddffzGmaeF0Ovj88x+YPPk7FY7CWsrzxedf8+mnPwClw6qGDr2PU0/toKCWQ87jcXPnHbfQs+eZQGlzyMMPP8eKFatUOApr+bvMzCxeeWUcHo8Ty7K54IIunHnm6QpqOWy8Pi933nkzSUmxABQXBxg7dhwFBQWaaKWwlr9MmjSF9RtKh+hVr5bCPffcoYktcthVrVqFp58eGB7S9957k1m+fBWFhYU7FwkThfVxLCsrmxf/7w0Mo3Qc7LV9epKSovsGypHRrl1bmjevW1rb9jp5+633CQSCCmyFtcyd+yf5BaVrfRiGwXnnnavmDzlioqOjuPHGaygqDGAYBnPnLSY3NwfLsigqKlKTiML6+GTbNj///Ft4/enb+11FamqKCkaOqA4dTqbtSQ0B2Lw5h2XLVmIYBqZpUlRUpAJSWB9/ioqKGD9+KgBut5POXTqqUOSI83jcdOnSPny1N2nSrmF8oVAIv9+vQlJYH19WrlzN9u2lU8oTE2OoVi1dhSJHPhQcDtq0aUUwaAIwbdpsCgsLw8/7/X61Xyusjy/Lli4nOrp0BbT0qmlaREcqjEYN65OXHwCgpCRIVlZ2+DnbtikpKVEhKayPHytWrsbtLh1b3bRpQ5xOpwpFKoTklGQqp8XtDGfIydkR8XwoFFLtWmF9fDBNk7y8fAyjdMZYo0b1VShSYXg8Hpo1q/VXXZqC/IKI50vvAaq268NJK9YfIbZtEwwEw/8fFa3bKx0NAoFdNyQ2DOOYvpdhfPyumrU/UDaYg8EgPp9PQ00V1sd6WINl77qMdLt1A9OKIBgMsWrVagBiY2OpXj2y07f/nQOZ/sscDKD9KS34vxefwefzHpNl4fX5wv9fXpNH6X0/TVwuxcjhoGaQ40woZBIMBvf4LxQKHdcTH4qKirjislu4+MIbePedD8s8b5kW/pIQfn8I07SA43uSiGma+lCpZi2HwsiRo3lt9Ic4yrl09Xo9tGhVn06d2nPBhd1JS0s9Tq967PC/3TVp2oCoKDcYpWtpGMbxXd8JBoN4vV59sBTWcrBZlkVJcRCPx7Wzpm0R2jmetrAgwG/TFzJj+kK++nIKY8a+qHVKdnNn/1tUCLudT6KwlkOgW7ezsW2bV0Z+gMPh4JbbLqPNCa0Bm6LCIj76aAIzf1vMksXr+eSTCdx003UqNNnrVYhlWTgcalFVWMtB1bhxQzZt2kww+B4uN7Ru3ZLTTz81/HyHjidzeudL8PuDfPTBl1x//TXldiDl5xewdu068nbkkZAYT+3atYiNjd2Hy+YQGzdmkJubi8vlIiUlhapV93wT4MzMLNat20BJcTGpaanUrl1rj7eb2rx5KyXFxRiGQXq1qng8Htav38CK5SupUrUKzZo1iQiZpUuXs3DBYmzbpkXLZjRu3HCPx11UVMzWrdsiHouPj4u48jBNk4yMzWDbxMTGkpJSeuPZLVu2smTJMgygWfOme21eKigoZOvWbYRCQSinGcbj9VKnTm2dyAprOU6qQ3t8KikpkUZNajN/3gqysvLw+wMRYV1UVMyECV8y7H+vkrm9AJfLQShkkZwaw6CH+3HBhd3LXYs7FArx88/TGf7CaGbPXIl7540WggGTXld25X/PDMH3t9EH27dnMm7cB4z8v/ewTBuHwyAYNGnQKJ0HBt5G1zNOx+VyRlyOv/XWu7z4/AckJUczafI4Nm7cxH+vuYdQyOKc/7TnpZefCy9I9NZb7/LkkNE4XaVfEpZpM3DQTVx4Yfdyy2XduvW0aHoplVJLj9EMWTz82A30u/2m8DYlJSW0a3MJphliwL1XcN/9/fn0k88ZeN9z4TuIp1WKZ/SYZ2nVqsVuXzRbeP+9j3n15Y/Jzy/B4Sj/y+viXqczfPjQCjVcTivxKazlCHE6HX/7IFoRgfu/p5/n4w8nY1kW9RpUJjUtkezsPDI2ZPLwQy+wbv1GBgy4LeKy2LIsRo8ey6gR72JZNnEJ3vD3RXSMm1Ur1xIIBMNhnZubyy03382iBWvweFxERXuIT4hm+9YdbN6URf/bH+OW21dx6619I2Z9OhwOEhJ9REV7yM7K4e7+j2IY4HI5MP52PDNnzOKZoWPweJ3Ytk1icixWyGLYM2PIzd2BaZYNH8MwqFzJR2ycF4fDwLLsci/9k5J9WLaF3x9g7Otv89yzb+D1uTAMA9u22bGjiCGDn+Gd90YTHR298/fdQd/r+7N65SYwoE69NOLiSp/bti2X4iI/tWpXASAxIa5CNoWIwlqOwAcvKzO3NLQdDlyuXeO/f/11Bu+Nm4jL7eT6G3vy3//2xufzUlLi560332XMq5/wzlsTuOCCc2nQYNeMzLlz/+Tll97DsmySkmN5YGA/mjVvQsDvZ8XK1Uz8ekq45mmaJi+PGsOCP1djGHBl7+706XMV0THRbN2ylccfG8af81by5thPOPfcM6lfv17ZJotCPwMHPkFySgIPPNSPSpVSyc8vDH9xTJ8+A8MoDeA777qWHj3OxzRNfvnlNx5/9EVCobKdZrVr12Tm7M/Yvj2T3lfeiWXteciaw2EwYfxUnE4H997flzPPPA3Tshjy6P+YNXMxW7ZkkpOdEw7rTz6ZwIqlGzEcBvc+0JcLLugWHnf/668zubPfY9x867WceuopuN1uTUJRWMvxqHR8dQDbhuLiEqb9PJ0VyzLwel10PLVNeMKHZVn88cdcXG4nVaomce21V4bX3o6NjaXXZRfz5tjPKCkJsmjhkoiw/vKLSZih0jtnj3rlaVq3bhl+rknTxpx33n/CQ+CKi4r5+aeZOBwGnTq34r77B4SPITU1hYcH38t/zuiDbdtM/Hoyd9x5S7lfOE2a1GPQw/eRnJwU8ZxlWaxbtwGAGrXSuPzynuEFtHr1upj69etybe/+ZQLb5/NRvXq10rDkn8Oyeo00nn/hcRr9rR38P+d2ZdbMxfj9IYKhUPjLafWqtThdDlq0rMuVV14aDnGA9u1PojAvwEMPPMsHH4+iefOmOmkV1nK8cbud3D3giXCzhw2YIROvz0VUlIebbuoTEYDbt2cBkJAQS5TPR2hn4ADExcXhdDkIhcyIjrhQKMR3U38DIK1SYkQn39+bL/6SX1DIhvXbsSybE9u2KjM7sGHDBlStnkx+XiE//zyz3LCOjvZy+x03lQnqvxTsvDNPXFwM0btN869Xr+7O3+PAh6RZlk3HTu0ighqIaGPf7esFKL1p7e61Ztu2wCidzLR48VKFtcJajlemae2cibdLbKyPp55+gCZNG0c8HvCXLpm5ds1m7howMKK9OBgyCfhLw9v6WxtmKBRiU0YOHo+DypWT/nFafSgUIhSysC2bqKiy66W4nE5SUuPIzyvc40JCDqexHysYHpomBcOxb/t1OBxUTa+CZdnMn7eCP/6YS4cO7cMdoZMnf0dcQukXVszfatyisJbjLKjvGHA1bdu2Yd26DTwxZCShkEmf63py1tld99J0YrJy5YYytcAqVUtrsruPBgn3Ue73bD/jMMbrkWEYBr16Xcxn479lc0YW11x5N126tqF69cqsWZPBzF8X4fY4SauUwAknttZJq7CW45Fl2TRt0piTT25HixbN+ezTr/lz3kreGPsJl/a6mEqVUsttrmjUpCbvvf9axFC7vQWu1+cE9m1JzdKOv9JELq8Tz7ItiksCZZpPDnKEHta/Q+XKlRj7xv/xxhvj+PrLn/jp+7kEAhbYNtVrJdPltJO49torqFq1ik7a45imHUnpJXZMNHf0v4lgwCQ/r5hXXx0bMZXYMAzi4ksnvRQWFlNUVLxP+/V5vTRpWrou8ro1W8jMzNrr9rGxsSQkRON0Oli7Zn2ZhYK2b89k2aJNpV8ajeod0O8aFVX6JVNUVEJJya7fw7ZtNm7YiBk6/FOoa9WqwWWXXUJKajwjRj3Cj7+8x+9zJzD1+094auhgmqmtWmGtIpC/nHhiG8485yQcWXcxMwAAIABJREFUDoOJX/3InNnzyMvLD4d1o0YNsG3I2JjJ119/QyhklmlWWb58JWvXrIuopHY77wwASkoCjBnzFjk5uUDpQkk5OblMm/YrJSX+cJC2PqG0rXzK5OnMnDErvKvCwiJeefl14hO92JbNBReee0DNDrVqVwdgw7ptfPTheDZv3kJGxmbGj/+CAf0fLvN7HQ7Ll6/g8l63sm1LDo2bNKRBg3pUq5ZOXFysliAVNYNIJK/Xw2WX9WDSVzOAAnr2uI2b+13KAw/chWEYnHHGabwx9gPWrdnKY4Nf4tNPvqbLaScTFxvL1m2ZzPh1NvPnrWHc+89Ru06t8H7POecMxrz6ATtyC3ljzGe8MvJjWrSqQ2FhCUsWbqB129p8+NFYfD4vXq+XPv+9iqnfziInu4Crr7qb07q2IS0thSmTf6Mgv7Qm3Pm01rRp02r/aycOBx1Oacdrr3wKwLNPv87gh0aVflFEu+nd5zw++fDbMp2uh9rSpcsJBkKYTgdTJn/PunXrI445NTWV+vXrltvpKgprOWYZmKZV7pTmzl06cd0NFzH+k8llZumlpqYwatQzPPLIUObOWc7SxetZtmT9ziYEAJuU1Fg8u434qFGjOmPGPsfgh59m8aK1+KLcrFyxEYCEJF+ZiR7t27dl1KuPMeyZUaxft51fp80Ho/Q93G4nXU4/gccef4iYmLKjIyzLxrb2PqOu06kduO32yxn31gSKiwPEJXiJifHS+9qLuOaaK/l8/FTMvawmV7p4kV3uStaWvXMluj0cwp6OLz29aunMSNPixeHjyjzvdjtp3rI+I0b+TyshHq+fWltzRY+IYDDEvfc+xKRJvxEMmowY8Qjdu59zWN47MzOLjI0ZYBhUrVqFSpXSIp73+/1kZGymID+fuPi4MgsHFRQUsmbNGubOmc/6DRuxLIv4uDgaNW5A48YNw5NHdrdjRx5Lly5nzux5bM/MxOFwUKtWTU45+STq1qsT8cVg2zaZmVnMmzefeXPnU1xSQpXKlTmlQzvq168Xbnf++/Zr1qwjPz8fwzCoV69uuWH+l1AoxJo161i+bDlg0LhJI2rXrlnaJLFsJTY2MdHR1Nr52K6yCbBs2TJsGxISShew+vs+Fy9eim3bxMbGUq9enYjXbtq0me3bMzEMdh5fTPjY589fyDW97yQ62rez9rzrY5mTnUfJzk7V/nf34cYb/3tYZjHedtt9TJ06A4ChQ+/mjDNOK3e7mJgYNdUorBXWcmwLhUKMHj2WQfe8wpCn+9Lv9pvLjHLJzd3BZZf2Zf26rbRs3YD3P3jtsCxJqrCuWNTBKHIEZWVl8fLI90hI8dK8RbNyQzgxMYHadapj27B5U6YK7Tilr0ORI2jHjgIKC/w4XQY52bnlrmAXCATJyNiCYUDNWpW1kJPCWkQOt+TkRBKTY8jfUczwF15jY0YGvr/d09AGVq9ay/IlG7Asm7PPOU1hrbCWw2/Xh05dB8enpKRERo56gvz8/D1uU7t2Tbqe0RnDMOjY4eTDdmx7WwZWFNbHT0wbu1ZhMwyDkpISFcpxyOl00rHjyRXy2PLzC8L//08LcMmhpw7GI1XwDifenZe7hgHbtqnjSCoOy7LYuiUzXJnYfaikKKyPo7A2qF49PTw5ZcH8RSoUqTAKCgqZM3d9uDKRkJCgQlFYH78a1K+HP2BiGAbLV6ylsLBIhSIVwvr1G4iOdoVr1klJSSoUhfXxq1nzphTmBwHIyysiM1NNIVIxLFiwCJ+vNKxr165CaqqmuCusj2OVKqVx1tmtdoZ1MYsWLVWhyBEXCoWYNWsuDoeBbcMFF5x1WGZMisK64ha+w0H37meGf37//fFHZHlOkb/btm07kyZOByDK5+aUU9rtdWipxn0rrI95hgFt27YJr343bdp8Zs+eo4KRI8a2bcaOHUdw5w0Y6jeoXmahL4W1wvq41KhRA07tVHpvPa/XxXvvfUowGFLByBGxcUMGkyb+hNNp4PeHuPDCc8rcAV5hrbA+LjmdTm6/40Z8vtJJB5999hM//PCzCkYOu1AoxOhX3yAzq3Q2ZYsWtTnnnDP+MagV1grr40bjxg3p2rW0XTAqys1TT/0fGzZsVMHIYWPbNhO//paPP54ClN4koU+fy/7xpshOp1OFp7A+frjdbu699w4qVUoEYPPmHB599Omd9yoUOfTmzZvPk0+NDP98ztnt6dKl0z5dGYrC+rhStWoVHn74TkpKSturf/llPkOHPseOHXkqHDmkli5dzt13DSY3txCASpUSuf2OG3G7/3npIN10QGF93DEMg7PPPoNBg27E6Sz9s3z++U/cddeDZGVlq4DkoLMsizlz5nLddQPI2FR6jsXG+nh66ECqVKm8T+esatYK6+M2sK+99kp6X3Ve+O7a06b9yU03DeCPPzSkTw6eQCDIe+9+xE03PUDWzg5Fvz/EkCEDaNa8yT7tw+PxqHPxcOaD7sFY8QSDQUaPfoOhQ8cSG+sBoLAwwL33XkvPnhdSrVq6CkkOiGmaLFq4mJEjxzD1uz9wu0trxm63k2HDHqRDh3bsSyIYhkFcXJzCWmEtlmXx6aefM2zYq+G2RID4+CiuuOJ8eva8iLS0VHw+rz4w8o/nUlFRMatXrWHEyNeYMWMBgUBo53M2zZrV4sGB/WnUuME+79Pj8ey8C7sorAXLslm1ajUDH3iMhYvWhqf8WpZNdLSHE9o0okHDunTseDLVq1cjJSUZt9utdsTjvfYcChEIBtm6dTurV69m5szZLF68nD//XL2zVly6ndvl5KIeXbnxxj4kJMTve2ioVq2wlvLl5eUxadIUXnzxDbZsycXl2tXVYNs2RUVBCgtD+EssqteIIzbWq0I7Ttl26aJg27cV4fY4iI114fW6IoK1sDDA2We35b//vYLmzZvu9yJN0dHRunOMwlr2pKSkhOzsHL75Zio///wbM2YsIhg0cTodqIIj/3SFFgpZVKmSQPv2Lene/WxOPLFNeNTR/lDzh8Ja9kFRURHBYBC/P0BWVjYzZ/7B99//wrp1mwgEggSDIWzb5nj9ixYXB7Ase2eouMKdZ8fdh9owcLkceL1uoqOjaNWqMWd07UzjJo2IiYk+4LHRTqeTmJgYNX8orOWfL3FtioqKCIVC4Q+lZVkUFRZRVFyMv8SPZVvH5Z3SLcti5MhRfPrpJACGDRtCu3YnHZdl4TAcuNylQR0dHYXH4wmfPwfK5XIRHR2toD6CNP3oKKsxRUdHU1xcTDAYxLZtDMMgJjaGmNiY4/xS3yI+Pobc3A0AVK6cRs2aNXTS/MuQVlBXoC9hFcHRGdg+n08fHjnkPB6Pmj5Us5Z/w+v14nK5KC4uxjR1dxk5yLU4h4OoqCit/aGwloPB6XQSGxtLIBAgEAgotOWghLTH48Hr1fBPhbUckktVt9tNKBTC7/djWcdnJ6McGMMwwiH9V2ekKKzlEH7g3G43brcby7KwLItQKIRpmuEa9/EW4IZh6EurnDL566rM6XTicrlwOBy6e7nCWo7UpazD4YhobzzWQ8uyrIhL9+joaOLj4xXWewlsUViLPqBH/Pf762cFkxwzlTAVgYiIwlpERBTWIiIKaxERUViLiIjCWkREYS0iIgprERFRWIuIKKxFRERhLSKisBYREYW1iIgorEVEFNYiIqKwFhERhbWIiMJaREQU1iIiorAWEVFYi4iIwlpERGEtIiIKaxERUViLiCisRUREYS0iIgprERGFtYiIKKxFRBTWIiJSMRm2bdsqBjna2bbN7NmzycvLA6BBgwbUqFFDBSMKaxEROXzUDCIiorAWERGFtYiIwlpERBTWIiKyz1wqAjkUSkpKmPX7H4RMk7i4OE48sQ2GYRyx47FtG8u0MAwDh9NR7vH+9ttMAJKSkmjduqX+iKKwlmNfcXEJjz/+AhvWbaf7eZ1o06Y1TueRC+tVK1dz2233k55emTGvj8C5W2AXFRVzw3UP4nY7ubJ3d1q1askR/G4RUVjL/vn886+YO+fPf9zuhBNbc8EF3SMe83o9xMZ6cbicRzz4LNti08ZMPG43UHZqgWFAfHwUTqeB0+nUH14U1nL0sG2b9es3Mmb0F8TFe7Ftm5zMknK3fWhIUsTPiYkJvPveq9i2jdPpxOGo2N0jCQkJ/DjtM2zbxlUBvlxEFNayzwzD4PLLe3Liia3p+9/7qVGzEt9MeY7yJr1GR0eXeW18fNxR87s6HI6j6nhFYS0SIS0tlZKSEgzDwOfzUrt2rX98jWmauwW3A4cjsqpqWRa2beNwOMIdj6ZpYlmlnYBOp3OPHZK2bWNZFpZlY9sWYOBw7P01e7t6sCyrTHD/fT+2bbMvqzLs6erhr/ewbbu0g3O3/YsorOWwM02Tp59+gYKCgvBj5513Dh07nhIRXuPefp/Va9Zx4YXdaNOmFfPmzmfChK+Yv2ApUV4vp5/Riauvvhyfzxex/7z8fL74/GuWLF7GypXryM3Jw+lykp5eiTZtmnNRj/OpVi19n493+7ZMhj33Yrid2jRNbrn5eurUrR3eJiNjE2NfH1fuKJK/eL1e7rjjZrxeb8Tj69dvYPLk71m5YhU5OXmkpSXTvHlT/nPuWSQmJuiEEYW1HBm2bbNi+WoyNm4hOyuPoqIAHU5pV2a7ZctW8uF739KxQ3umTv2BG/o8RM06qSQkxDJ7wVr++H0pJcUl3Nbvxoga64b1G7n52v9Rt0kSTZrUon6DmhQX+5k3dxnTfpzL99/9wtg3R5KQsG9BaFomv/06F6/HzbZtuWRuK+Saq6+I2KakuITBj75FUlT07r8t8cleoqLdVKqcSL9+N0aUw8wZs7j+uvvwFwdp3qoO6emVmD17IR+8+y1vv/0xo199jho1quukEYW1HIETyuXi1deGYxgGL418lVEj3t/ztm4nL7/8JrZtM3bc05x8cjucTgfff/8Tt930KNOmzeD6vtdEtIcnJiQw8fsRtGrdkqgoH4bhAGwKCgoZMuRpvpowjUmTpnD55T336XirVKnM1O8+JRgM8eDAIXzy4Y9ltqlduxaZmb+U+8U0+dvvGfTgcCpVTo5o2sjJyWHQoKfx+dyMHPUYHTq0x+FwEAqF+Pzzr3ls8AiGvzCK/z3zGC6XPobyzzSDUfar1mxZFqGQGfFv9zZfj8eD2+3G6XKyt5Zew4CUlERGv/o8Xbt2ITo6Cq/Xy1lndSUxOZZtW3MIhSLbv6tVT6dzl04kJMTvfB8XbrebpKRELr74fBxOg59/+m2ffyfDMPB6vXi9njJjr3d9qbhISUkp82/NmvWMeultPG4njz56f0STzZQpP7JuzTYG3HU9p5/eGa/Xi9vtJioqip6XXMS53TvywTvfsWH9Rp1Yopq1HFwrlm+kVnrH3QIcbr69B4MG3bff+wsGLXr1uojKlStFPO50OomJ9oY75fZVSkoStg25uTsOeVksWLCQPlcPAOCV156kWfMmEc9P+/k33G4nTZo2KvNap8tJ/QZ1cXt+YMWKVRHt4yIKa/nXvF4Xp3ZpVebx1JSkA62q7/f4a9subWJYsGAR2dnZEc9tWL8Rp+PQj7LYsCGD224ZCIbBffffQJfTTi1zBbJl83YMA/x+P9nZOWX2EQqFSp8PlOjEEoW1HFw1albhpVHPsXtl1+E4fMPQfvttJo8+8iwbN2wnNs4XMUIjFAxhHOJjycnJ5f77BrN1Sy7X9DmfK67sVe4wPBsby7K5qe8Dezwmr9cFaAifKKzlIHM4DDwezxF7/0AgwJhX32JTRibj3htO8+ZNI6aGL1q0hEt73HLI3j8/P59BDz3O7FnLOP+Czgy4qx8ej3sPW5eO/X76mQeo36DeHveZmpqiE0sU1nJsKSnx88espTRrUZfWrVridEWu4eF0ODhUNxQNBAKMGjWG76fMokWrutx7f/8yszbDMW0YJCXGYdtQpWplGjVqoD+e/PvKkopAjha2bRMKmpimhb1bLAeDQb759jtcLge2TZmOydIhfgbBYAjL2r9IN02TN954h7GvjadZyzq8OOJpKldO2+trTj6lLaGQyaKFi/fYSbqvMyNFVLOWo4rH46Fhkxos/HMVUyZ/T/uTT8IMmaxavZqPP/qckGliWTZbt2Yye/ZcGjVqSFxcLADx8XEYDti6NZuJE7+hVq2a1K1bm/j4+H98340bMxj6+GsYBvS++lK2b89k+7btkbUep5OmTRuHm2XO7XYWr4/5gOHPv0FycjKnntqRhMTS9wqFTDZlbGLatOmc2rkjNWvW0B9XFNZycOzvMLqdVUdCobK14L9qlaa55/1Zto0ROXwbn8/LlVf14N4Bz3Ln7Y8RClql2wE39+vFrbfeQEnxIKZ8+zsXnXcL304dS7PmzQCoVCmNy6/ozuuvjuee/kPJySzhpxnv0KxZfMQxBUrMcptASopCJCT7uLv/U+WtsErVaklM+e4ToqKiAEhPr8pDD9/B4EHPM+COJzAcDqqmJ5fOlNyeQ96OYrasL2LByvE6uURhLQeHz+fj6j4XEOWL2q/XtWrdkrvvvZZq6em7NUkYtGjRhJibokhKTiz3tZf0PIdQKITrb+3ShmHQs2cPatSowbvvfEzm9kzSq1WlZ88LOKldW9xuF8+/8CQ//TSdtWvWkZiUFPHau++5nZPancDsP+YSDAaJi9u1yp7D4eDUUztQr16dMrXtmJgYbut/yV6HGbo9nojnDcOge/f/0LJlcz54/xN+/30eAX8AgDp1q1KjZjqX9rxwnxbGEgEwbDWayVHor/Zew3AcFWtP+/0BgsHSsHY6nfh8Pq28JwprEZFjjUaDiIgorEVERGEtIqKwFhERhbWIiCisRUQU1iIiclhpBqMcE2zbZv369ZSUlC7mn5aWRnJysgpGVLMWqWhhPWrUKBo3bkzjxo2ZN2+eCkUU1iIV8mTebW0OEYW1iIgorEVERGEtIqKwFhERhbWIiMJaREQU1iIiorAWEVFYi4iIwlpERBTWIiIKaxERUViLiIjCWkREYS0iIgprERGFtYiIKKxFRERhLSKisBYREYW1SJht2yxYsIANGzZQUlKCZVn/ep+hUIjCwkIWLVrEtm3bVMhyVHCpCKQiMwyD+vXr88gjj7BmzRpat25Nhw4daN26NcnJyfu8H8uy2LBhAzNnzmTWrFlMnz6dBx54gCZNmqiQRWEtcjBERUUxaNAgbr75Zh5++OHw4/369ePMM8+kUaNGpKenYxhGRI08KyuLtWvXMn/+fMaPH89XX30Vfn706NGcd955OBy6uJSjpOJi27atYpCjQWZmJr179+bbb7+NqHmnpqaSlpbGjh07yMjIAKBZs2aUlJSwbds28vPzw9s7nU4eeeQRHnroIZxOpwpVFNYih8LKlSvp1KkTW7duPaDXX3311bz88svExMSoMOWoomtAOarUr1+fr776itjY2P1+bY8ePRg+fLiCWhTWIodD27Zt+eijj6hUqdI+v6ZTp04MHz58vzolRSoSNYPIUck0Td544w1uuOGGf9y2du3afPHFF7Ro0UIFJ6pZixxOTqeTPn368Pzzz+91u2rVqvHuu+8qqEVhLXKkuFwubr75Zvr377/HbYYPH84pp5yiwhKFtciRFBUVxaOPPsrll19e5rnRo0fTo0ePiPHXIgprkSMkISGBF154gbPOOiv82JNPPkmfPn00llqOGepglGPGkiVL6NatG2effTbDhg0jLi5OhSIKa5GKaMGCBdSsWZOEhAQVhiisRUTk8FKbtYiIwlpERA4GLZF6DLJtG8uy+KuFSy1dxzKD0pGJBg6HgWEYGqqosJaKbt3a9SxesoyVK1exceMm1q/fxLatOeTnF2FbCuxj8gPsdpKQGEv16pWoUaMaNWqk06hhA5o2a0xSUpIK6Fj6WlYH49EtKyubOXPm8e47n/Dzz3/icjtUszrOmaYFGFxzdXcuuPBcGjRoQExMtApGYS2Hmw0U5Bfw3nsf8+GHX7BpUxbl/RUdDgOn04HLpYkhx+y5YNmETBPTtMtt7nK7ndStW5V77rmVk09uj8fjVqEprOWwfDhtm++++5HRo99i7tyVOJ2OiBpV1arJnH9eV1q3aUF6ehWio6N33rpKte1j9XywLJOcnBw2rM/gl+kzmfj1dEKmicOx629uhix6XHw6t956PXXq1FbBKazlUMrPz2fs2HcYNuxtoqNLa0jBoEnNmmlcddVFdOjQnoYN6+N2q/Z0vJ8nf/65gJ9+ms5bb30J2OGmMYfDYMSIR+natYvuP6mwlkMhOzubAf0fYubvi7BtsG2oXDmB3r17cMUVlxIXF6u2aolgWRbr129g1KgxTJz4C8GgWfqhNwz697+G6667Rs0iCms5qEGdlc0ddzzA77OW8lced+nShsGD7yc9vapCWvYqGAwye/Y87rlnCNu35wHgdDro27cnd955ixa7UljLwZCXl8899wzixx/nYBgGtm1zx+29+e91V6uHX/bLunUbeOSRp/jtt4UYhoFl2QwadDPXXHOlvvCPAmq0qsBCoRDDnn0xHNROp4P77u3Lzbf0VVDLfqtVqwbDhw/ljDNOKv3wOwweeeQlvpv6oyZOKazl3/juux/5+JPJ4VrQjTdeyrV9rtJQPDlgSUmJPPHEIBo3rgmAz+di6NMj2LJlmwpHYS0HYuvWbTzyyHNYO2ce9uhxOrfc0he3W5NO5d9JSUlmxIihVKuWAsCGDdv53/+GU1JSosJRWMv+sCyLceM+ICenAIDExBjuuOMmvF6vCkcOiho1qnPP3TdTXBzEMAymTpnBjBmzFNgKa9kf2dk5fPjhxHCnz8MP30n16tVUMHLQGIbBOf85k0t7ng5AMGTy4YefUVJSQlFRkdqwFdayL95990Oys0tr1S2a16FLl04qFDnonE4nV199OS5XaQx88cWvLFy4hGAwSHFxsQpIYS17k5eXx9dff4/L5SAQMLmox7nExcWqYOSQaNa8CW3aNAIgNtbDTz/9gmVZCmyFtfyTjI2b2Lw5Gyjtqe/W7RwVihwybrebG27oHW72mP3HfAKBIACBQIBAIKBCUlhLeeYvWEQgEAKgZ8+zSEzUjV/lENeumzWlWrVUAObMXUVmZlb4uZKSEizLUiEprGV3P/44Pfz/zZs30WI7csjFxsZSu3ZVAAyHwaKFi8Od27Zta4SIwlp25/cHmPbzvPCHpG7d2ioUOeR8Pi81qlfDtm1cTgfz/lwU8XwwGCQUCqmgFNbylx07dpCTWwSAZdmkpqaqUOSwaNK0IcGghcNhsGbNekzTjHhebdcKa4moWfvDw6hsG6Kjo1QoclgkJyfvvB0YFBQUlmmnDgaDGnt9hGnucgUS8AfCS6Balo3P56vQx5uVlU1eXv7OLxebOnVqVejV2zIyNoVHOrhcLqpXT9dqczvFx8cR2hnWoZCJaVq4XGUrExX9nFRYy2FhWmZEeFT0zsUff5jGk0+MACBvRwlLlv9wRO9Ss2TJMjZv2oLT6eCkdicSHR25MuHIEa/y7aRfwICOnVrz/AtDK9xddTZt2sxLI8fgcDg47/xzaN++7WF5X7fbib2zMm3bNrZddgSI2q0V1nIE2bbN4sVLyc7O/sdtq1atQv369f72WoviotK2zNysEo7kVbJt28yc8TtDHhlFpSoJTPj8jTJhbZoWRUV+DMMo0yZbUfj9fl55cQLxSR5OOKFlhTo2y7KwbVtXIwprOTIhB1OmfM/I/3uv9LbpezHo0Vsiwrpxk0Y89mT/nR9kO+LmvUeCYRj4otx4PE4oJ1C6dTuTk9q1BiAuLq7CXrk4XQYOp4OKlomlN+e1dGcZhbUcmYADr9dLalocO3aORImLjyIuLrqcS+XIJoPmzZvSvHnTo+Z3Pe30zvqDH4TatcJaYS1HqDbau/dl1KhRjXvvGgrAgLv7ctZZXctsqyVaxTTNCtfOr7CW40ZcXBwJCbumtcfHx5GamrLH7YPBIJO//S5ieFf16um0OaF1+Ge/389PP/1CKBQiNTWFk046kVAoxB+z5jB79jyCwQBNmzWmc+dOREVFDlEsKChk+fIVrF2zjoyMzfgDfpxOJ1WrVqFxo4Y0a95kvwIjMzOLX6fPiGhrrV2nFi1aNAv/vGrVGtasXrv3ZgBsTjmlPbGxMRGP79iRx6KFi1m9ei35+QWkpCTRqFEDmjZrusebRaxbt4GpU39gwfwlJCbG0enUU+jcuaNORlFYy8ETDAYZ8uhw8vOKwo/ddsdVu4V1gOEvjGbNqi1ccWU3mjZtwtNDn+ezT6eG735jGPDf6y/hrrv7RVxaf/PNZB564HkcjrKNti6Xg0suPZuBD969zzX9rKwcbrzuUZJSov5KXe578IaIsF60cAl3D3gqPM69PDmZxfw+77NwWNu2zbJlK7hrwMOsW7MFy7LDHXAul4Mzzz6FR4cMJCEhPmI/GRmb6HPt7WzZtKtT98P3v+HKq7vT85KLqMj9d1on5MjRpBg5kMYT4hNiiE/4h5v27uywXL8hg2efGc6Ez74jPiGalNQ4HE4Htg1vvzmB7OycyJfZNh6vi6TkWGrUTKNeg3SqVU8hKspDKGQx7s2vmDDhq30/yR0GVdLjiE+I+vthRW7jNIiN8xITG/kvKtrzt+OKfM22bZncefuDrFm1GZfbSftTmnNd30to3qIulg3ffD2dES++EjGZxLIsnhs2gs0bSxdLio7xUrtOZdIqJfDZJ1N44olhJKZoMpSoZi37aPdg+nttLyrKxxdfjiMrK5tePW8gN6dwr/v6+ce5NG5SkzFjn6Vx44a43S5ef/1tRgx/l8KCAOvWbSAtbdfU+rZtT2TCF69TqVIa0dHROJ1OgsEQK1eu4uYb72Xb1lymTvmJiy++YJ+aQ+rVq8P0GV+yZctWLu91C/l5Zddp7tLlVL6a2Gq339lg5cpV3NV/CIUFfpq1rhaxtvj48Z+zbs1WiotDvP6dxE5+AAAgAElEQVTms3To0B4oHY88btwHDH3iFUY+/zGXX9GT+vXrAqXrlS9ZvBLDYVCjVhovv/IsdevWobi4mD//XMjDg54u94pCRDVrKWPI4OGc2fWSiH/9brs3IsSio6OJjo7ap2Bp1boeb779EieffBKJiQnExMRwQptW+EtCOBxGmckWderUol69usTFxYWbR9xuFw0a1KNtu+YA5OcX7PN6FQ6Hg5iYGKKjo/fYxBAXF0u1aukR/3Jzd/DgA0MpLPATHePlf888QlJS4s5ANhn/6ST+n73zjo+iWvv4b2Z7sptKekhCSAgJCR1CAqF3BARREOSqoIgi91WxUxS9CKhYUEEQAUWaIkVAem8KQgKhhAQIgfRets/OnPePwMKyCUWKgM/3frjgzsyZM8+c85vnPKdxPIfWCQ2RkBB/VahGjn79ekGlUkDrrkRy8lH7MbPZAoOhehW7Xr06oV69MLs9ExJaY9r0CaiqtFAhJMizJm5MVaXRIR4NAL5+Hn87vdi4hs7rct8gMCsIAgoLiyEIVwTZZrPBaDDZwwl3cxLOyZNpeH7kOJSWVEGtUeLLmZPRqlXzq/IioKS4AgAQEhIIQbA65IcxBg9PLSyWMpRdFeZhjEG6dKJWp3WaYOLt7QWrWYRKTVWTILEmbkC/RzugSZNYh98093BRqcOHkzHzy7nYvvkIrFYJ7HKHJM/Bw1MNXnZ3wwTnzp3H/419F6UlVbBaREz9+BUktm3jFCa6HItev3YP1qzsBFyTLYVCBg6AWEunHAU7CBJr4rbo0KEtevfp+Y/cu6KiEu9NnI6zZ3KRmBSDxwY9ApWqupNPFCUsWbISJ1Iz79r9s7Nz8NzIV5GXUwKL2YZ3J72Afv16X3e2Y0SDIPTv363mCaCMIaphAypUBIk1cef5JxfCzMrKQtrJi7DZJLw4ZgQ6dkxyCIP8+efhuybWZaVlGPfaBOTllIDnOfzfa0/h2WefqlGoOe7KQluREWF4ftSI6ywhWrMPLUrO65OIogSOepKIGqBiQdxXVFXqAVSvNXLtOOqqqipkZeXcMI3L451v6b5VVXjnnclIOXIGvIzH+IljMPrF52qdWq1SqVA3xA8A8MeBFBiNJnAcV8ufq7wjhRwqVfUIlpMn0h0WlDKbzFiy5Ge4e9IypAR51sR9js5NB8YYNC4KbNq4Fd7eXhBtNqRnnMXnn85BcXElAKCwoBQpyUcR0ygaXl6e4DgOKlW1yJWXGbB0yS+IiYlCo9gYhITUveF9d+7Yi62bDkGhlCEwyBtqjRpbNm91/AgwoFOnJOh0OnAch2eeHYK3Xp+O0lI9PpvxFYYOexze3t6QyXgYjSYUF5cgJfkoWrZqgQYNIqqfT6uFh4cOudklWLdmL/wDvkTbxHhUVemxbNkq7NiSDJ27+r5dFZAgsSYIAEBYWCiiY0NxNiMHPy/biNWrtoFJDBaLgFfHPQOlUompU+agIL8cL40ej+/mf4z4+FYAgJiYhmASgwRg3twVMOitWLL8s5sSa8YYuEvDELMvFGH82586nVNaZMKho6ug0+kAAF26dESHTpuxa0cyFi9ah5UrNkOpUoDjqsMZFouAkkID1m6ca09DrVZj1Kj/4P/GfgClSoYfF6zBooVrIElAXJNwLPxpOp5+6m2oNVQ1CQqDEDXAcZx91h5/0/OdOajVSrhq1TWOt1aqFHDVqmsMJXAcB3cPNdzc1Q4RXZ1Oi4+mjkdwXR8oVQqAMcjkPN4ZPxrPjhiOwUMGYfjTfaHVqaFWKxyGvsXGxeDTL96Fl7cOrlo13D3UDsc5DtC4qKDVOT8jz1+ewaiu9Y9nHY1DejqdFh9/8iFGPDcQLi5KCIKIygojKsqNMBos4HkOMXHBDhN+AKBL146YNPllaFyUUKmqwyJtEmPx+RdTUD8iHDo3JXRualDwmnCoM4w2VrtvSE/PQI8ez0CplMFqFXHs2CaHGXN3E7PZDL3eAIBBo9HA1dX1htdIknRpqjiDUqmEm5ubw7GysnIwJkEuVziNs7ZYLKiqqt4SzNVVC43GMU5rMBiRn58PJjF4eXvBy8vTwQsuKyuHJEnQ6bROsW293gCz2QyAQafT2Y+LooiysnIA1fHwyx4yAJhMJhgMhht434CHh3uNsyYLC4uQn1cAg7E6DZVKBS8vTwQE+Ne6hklxcQnKysqgUCgQGBgIpVIBSZJQUVF5yQtXOS1ydbf466/D6Nv3Jbi5qVCvnh9++OHrGrfwUigUTps6EBQGIe4harX6lvfX43m+1tX5eJ6Ht7dXrdeqVKrrLsTk6uqC+vXDa20FXC3e16LVujqtjAcAMpms1vxqNJrbEkZfXx/4+vrc0jV16ng75YfnefssSYKgMAhBEASJNUEQBEFi/dBDXQgEQZBY39fIZHKHxYBorC1xr7BaBfuIHo7j7tvNhEmsifsCpVJhF2uer15OkyDuBZWVVZBdWiBLLpeTWJNYE9dDo9FAEES7d2PQ68koxD2hoKDIvqWZu7sOPE87mJNYE7Xi7u4Gf3/3S541h8KiYjIKcddhjCHtVDrkchkkiaF+/TDIZCQNJNZErSgUCnTo0NLuWZ89ew40Z4m425jNZmTn5IHjAJtNQrOmsWQUEmviRnTokGj/d0rKcRJr4q5TVaVHZmaO3UloFBtN5Y7EmrgRjRpFQ6OpXmz/1xU7UFxcQkYh7irJyUdRUFC9RVmb+Bq2YCNIrAlnAgMDEBxcPW2Zl3FY+etvZBTirmGxWPDVV9+D5zkwxtCiZZPr7hjPcbQZGYk1AaB6TYwhQ/pDEETI5TzW/77NvrAPQdxpUlKO4dy5PABARYUFXbp0uK4gk1iTWBNX0bdvb4SF+QIA0tIuYt26DWQU4i541VbMm7cIoli9oe+zz/RCvXqh1xcMGn9NYk1cQafTYsjgvpAkBp7nMGPGPGRknCXDEHcMxhhWrlyD7dsPAwBUKgUGDHzkxoJBYk1iTThWiCeHPo569fwBAAaDBdOmfQGTyUTGIe4IGRlnMHPmAvvY6kGDuiEqKvK619A0dBJrokbvWofJk1+3r9ewe3cKPv74S1itVjIOcVvk5ORi9Og3UVpaPUO2QVQQnn76yRvGoy9vAEyQWBPX0KZNa4x5aSg4rnpG45Ilv+Ozz76mNUOIv01+fgFefvkt5ORUDwlVKuV4Y9xL8PC48YYHcrmcxJrEmqjNk3nu+acxYEBn+ySFBQtW44MPptEIEeKWOXXqNEaNeg0nTmRVV36ew6RJY9G0WeObul6pVJIRSayJ2lCr1Xj33dfRt297u2D/8stWPP/c/+FoSirNNCNuiNFoxIoVqzFo0GicPn3R3lJ7442R6Nat0015yzKZrMaNj4l76LzRhrkPBnq9AVOnzsCKFVvtvykUMgwf3g9PPTUYfn5+kMupMhFXMJnMOH06HdOmzURKSrp9+V2NRonXXhuBvn173XSHoUajIc+axJq4WSwWCxYvXo7PP1sIq2ADUL3jdp06OiQmNsPAgX3RrFkTqFRK6gz6F8IYs++OvmPHbvy2ZgMOHzltX3YXALy9dfjoo7fRpEmcvfP6ZrxqV1dXKk8k1sStkpp6Ap988jX270+1L2XJGIPBICAkxBudO8ejfv0w1KlTBxqNGhq1GhxPFe1hxGYTYTabUVWlR2FhEVKPncKmTX9CYgwqldx+ntUiYtQLA/H444/C19fnlsJnWq2WQiAk1sTfpaqqCmvXbsD69Vuwd+8JqFSyGj0fxhjoDT/EFZgDAA41Ob2iKEEm49G7d1sMGtQPjRpF37J3rFQqodFoyNAk1sTtYDAYYDQacfz4KSxbtgppaedQUlLp0Owl/n24uKjg4+OODh3i8Wj/PvAP8P9b/RkU/iCxJu4Q1aEPAyRJgiRJKC0tQ0lJKc6cOYczZ87heGo6cnOLYDCaHvpRI4wBFosASWKXPELZv6LDVcbL4OauRWRkCKKiwtGgQQRCQoLh7e0NnU77t987z/NwdXWlGYsk1sSdQpIkGI1Gh53QL3tCl5vI/w47iJg8+QN8/vnnAIB169ahffv2/6oP99V/3w4k1PcncjLBg83limUwGOyCfaXiAsC/41t82aO+WrwkSaICQqGPh6eukwkeguYRx8HV1RUqlYqMQfxtVCoVCTV51sS9EGy1Wg25XA6z2ewQFiGIG3nTKpXqujvEECTWxJ1+oXI5tFotBEGAxWIh0SZqb1bzPFQqFc1MJLEm/kkUCgXkcjkkSYIgCBAEgWK4BDiOg0KhgFKpBM/zFPIgsSbul4p5eQEetVoNSZIgiqK98+1hGggkiqLDLDu5XE4e41UeNM/zkMlkNMKDxJp4kCrtw4gkSZDLrxRnlUpFM++Ih6v+kgkIgiBIrAmCIAgSa4IgCBJrgiAIgsSaIAiCILEmCIIgsSYIgiBIrAmCIAgSa4IgCBJrgiAIgsSaIAiCxJogCIIgsSYIgiBIrAmCIEisCYIgCBJrgiAIgsSaIAiCxJogCIIgsSYIgiBIrAmCIEisCYIgCBJrgiAIEmuCIAiCxJogCIIgsSYIgiCxJgiCIEisCYIgCBJrgiAIEmuCIAiCxJogCILEmiAIgiCxJoi7iiRJ9n8zxsggxEMFx6hUEw8JxcXFEAQBAKDT6aDVaskoBIk1QRAEce+gMAhBEASJNUEQBEFiTRAEQWJNEARBkFgTBEEQN42cTPDwYDQaodfroVAo4enp4XTcahVQXl4OjuPg41OHDPaAwxhDTk4uOA7w9fWFQqEgo5BnTfwT6PUGVFXpUVWlh8FguOH5KSmp6NV9GGZ9853DBJHL5OfnY8gTz2P4Uy/SpJGHAEmSMKD/CDwxaBSKi0vIIORZE/+Ml2xCXMNuKMo1AgAMzIbCwp3X9YiZxFBUWFU9MaQWLa6qNEKhpNf+0HhbHAeOoxmb5FkT/xipx46DgaFDjyg8+mQrhAXrcPivZDIMQZBYE/dT8/bAH4fAyzj85+kn8NzzwyFJDPsP/AlRFMlABPEvhNrD9yGCYMPRlOOwmES0S0qAVusKm8CQejQNFosFLi4u/2j+GGMoLS1DeXkFlEoFfHx8oFaraj1frzfgfGYWrIIAL08PhITWBc/X7CeYzRaYTSZodVrI5XIwxnD+fBbKysoRGBAA/wA/h3MzMs6AMYYGDSJrzIPRaILVYoHOTQeZTAbGGM6ezURlZSXqBgfBx9fH4dwzGWfA8TyioiKhVCprfabiohLk5uXBYDBAxsvg7uGOevVCa73GaDDCYrVCrVZDo1EDACorq5B5LhPgONSvHw6t1rXW++XnF+B0WjoYgMjI+ggKCrzp91VSUoqcnFwIggCe5+Ht5YWg4EDIZDKqbA8SjLjvyMnJZfVD27JnnxnDRFFkoiix1155h0WEtWVpaem1Xrd3zwFWNyCevTdpChNtotPxrKwLrGWzbiwhvheTJOmW8yWKIvvzz0PsuRFjmZ9nSxbs35oF+bZmDcLbsR9+WOyUpl5vYD/+uIRFRSSxugHxLMi3NQuo04oNfmIEO3jwLyaKznncvHkb83FvwY4cSWF6vZ5Nm/oZ8/NsycKC27AG4e3Y6tXrGGOMpaefYf37DmUhgfEsJDCe9eo5mJ0/n+WU3tKlvzB/71bs5Mk0VlFRwSZNmsL8varTaxiZxDZv3sYYYyw19QTr0W2QPb3HBj7NcnJyndIrLS1jzz7zEvP1aMnqBsSzuv7xl/5uzZLa9mW7d++r0Xbzv/+RuXBN2YIFi5ggCGzt2t9ZXEwnFhIYz0KD2rBOHfqz1NQTTtfZbCL7eflKVj80kYWHJrDQoDYsMrwtW7x4OTMaTax1ix6sbULvGvOakXGWvf32+8zPs6X9PqFBbViQbyvWtfNAVlRURJXtAYI86/uQPXv2A2Bo374NOI4Dx3GIT2iJtb/txtatOxAVFfmPeNO//LIKUz74GryMR+ceTeDmpoXNZkNRURl+XLgSTz01BBzHAQBMJhPeenMStm05iNAwXzRv0Qh16wYhLe0M/vzjGEY99yY+/WwiunTp6HAfjuPg7qVGWlo6Vq1ch0MHU/DEsE4oKSlDypF0vP3GdNSp443J738Kf39vPPpYe6QeS0fm2VzMnbMQUz6adE16PHTuSpw6mYZvZ8/H2bNZeGJYZxQUFOFYylm8+t8P8d18V0x4dxrqhvijQVQ9pCSfxInUc1iy5Be8/vp/HdIzmUzIOp+LPo+2RnBwIAICfWE0mHDyZDoOHTyBF0e9i2W/zEJsbIxjPngO/nU1sFismDt3AZYt+Q1tEuPg4eGO9PSzSDt5AZ/N+AbfzPoUGo3Gft22bTswcfxncNWqEJ8Qh7i4aGRmZuG7OYshCDbYRBEKOHvIZ8+ew/BhY1BZYUTHrrEICPSHRqOB0WhAeXklCgpKYLUKVNnIsyb+LoIgsGFDn2cN6rdjhw8n238/ejSVxUS1Z716PM5MJtM996zPnjnH4hp1Yq2ad2eH/zrCjEYjE0WRCYLAyssrWHLyMYc0N27YzGKi2rMhg0ewgvwC+zGbzcaOHElh8a16sJbNu7OiomKH+2zZsp1FhCWyhpFJbPQLr7CCgkImSRIrKSllvXo8zhpGJrH6oYls3bqNzGw2M0mS2JEjKSwmqj2LbtCeCVbBIb1ly35lkfXasqiIduzVV95hRUXFTJIkVlBQwLp2HsgaRiaxqIgktn37bmaxWJgkSWzPnv2sYWQS65DUz8kOVquVFReXMKvV6vT7N1/PZRH12rK5c+Y72XfBgkWsflgii2/Zgz3/3H/ZhQsXmSAITJIYKy4uYQnxvViT2M6ssLDIoSy89uq7rH5YIvvuu4X2e4qiyHJyctmzz45hDSOTavSs53z7PYsMb8sWLviJGQxGdnV2LBYLKylxfgbi/oY6GO8zSopLcPFCHjQaJRo0iLD/Hh5eDwqFHEVF5cjPL7jn+VqxYg1MRiueGzUYzZo3hUajAc/zkMvlcHd3Q9OmcXavmjFg/vylUCrlGD9hHHz9fO3HZDIZmjSJQ8dOrVFWosdfh47UeL+4JvUx5aNJ8PX1Acdx0Ol00LlpwRgw4b0X0adPD6hUKnAch6CgQOjcXGCx2GrtgE1IjMPkD95FnTre1d67uzt0OhcwxvD+h/9Fp05JUCqV4DgOERHhUKrkKCtxHtuuUCjg7e3lNAFFoVCgS9eOMBsF5OcX1jyUjgHtOrTAlzOnoW7dYMjlcnAc4OXlhZatYqGvMkO02eyni6KIkycyoFIp8MQTA+335HkegYEB+PDDdyGX11yFi4tLYLNJaJeUCBcXDS6ZHwCgVCrh5eVFk2geMEis7zOyLlxEUWElBj/Zx2HxfK3WFU8M6QV9lRlnzpy75x2e6elnYbNJaNasiV14a8NoNCLlcAa8fdwR4O/nXOh4Hk2axoExhuzsnBrTaNeuNby8PJ1CJExiiI6JuuZ3gOevn6e27eKh012zGQEHSBJz+CheTo8Dh+s9piiKsFis9j9Wq9WeptliRU1aLTGGuNhohzDHZRVXyOX26+3nSwxFRRUIDfOHi4vGKT1/fz+4uKhrzF+98DAolTJMfn86UlNPoKysDCaTicZjP8BQzPo+Y8f2PWCMoXV8c1RUVNgrPcdxaNW6OX5c+Bt27tiHrl073bM8SZIIQRAg2iS4uetuKr5ts4lQKGSQyWseceDq6gJJYhBrmGl5rWjdwqHar+HujC1EUcSuXXuxetU6mExmh2N6vRGuWiVqnZF0yyFKXGqN3LpP1adPT+zZfQB7dydj8KCXEBjkhaBgPwQE+KF7905ol5R43dEuBIk1cR0MBiOWLlkPABj93AQIgnRNU5uHXMFjyaINePOt/8LNze0fyCV3h897sDy95ct+xcR3v0Cbto3Qs2dnKFVK+9MWFBThrz/T7ot8urnp8OXM6Th9OgNpaek4fvwUNv6+B5vXH8ZPP2zEI/0TMXXaJHh6elLFI7EmbpXTp9OhrzIhvL4/OndNrKEpzbB1yz6cP1uA1NSTaNu2zT0T6Or/ocY1R2rTaiYx1NbqFgSbfaTLg0J5WTm+nb0ILq5KfPzJBwgKCnA4npmZhelTFtw5q3NXWip/B4VCgdjYGMTGxmDQoEcxYcKbOH8+C/Pm/YA1K3dgxYo1eP75Z6jikVgTt9bkZUhJSYUkMYx+6WkMGNDXqZJyHIegwEB88N43OHIkBQkJ8bXGau+kvyqXy+DiqoFCJUNOdi6io6Oue75KqYSPrw6VlUYYDAanFQAZYzh5Mg28jEMdb+8H5h2ZzCYIgg0AB9+rJtNcxmKx4k5+ezgO0Go1yMsrgSDYIJc7VteqKj1MJgsUSpebfo8REeEYOXI4tmzch00bd5FYP0BQB+N9giRJOHTwCBRyGdq1SwDHceB53uEPx3FIap8Ik8mGlOTjEEWbQxpqtRKSxGA0mcCYVEPl5wAOsAk2mEymm86bTCZDQkJLgAG//fY7LBZLDfm/8nlQKBUY8mRflJXqsWb1eqePTnZ2DnZsOwCLyYZmzZo8MO+I4/hqMebgtApiVtZFTP1oBlx1Sog28Y6ItkwmQ0yjcJSV6LFp01aHY2Vl5Zg+7XMIgvPol7KycmzatPVKp+c1nDt3HhaLDRERIVTxyLMmbpWiohJsWP8nevaOr3Et6ssEBwcjPjEK27ccQXlZucN06eC6weB5DhvX74WvzywEBPihZ69u8Pb2AgB4eHjAxUWNosJyfDB5OuIax6Bjx6Sbmrrcr38fLF++Fht/PwCL5S385z+D4enlAZtNRE52Ltav34qZX02zTyMf+Fh//LxsPb747EeYLWb07tUdSpUS589fwP8++AJ5uSUY//4o1AsPe2Dekbu7O3z9vFFWegHffD0XPXt1hc0mIiX5GOZ9txyTP3gNqUfPYMvm/YiL+xk9e3aDd52/33KQy+Xo1DkJm37/A5MmfIaLF7LRoEEECguL8N3cJRjyZD9oNMoaPHwLevZ8BV06N8CAAT0RFlYXCqUSgtWKlKPHMX/uaujcVBjy5CCqeCTWxK2ya9cegDE0bxHn1Nx19LZ4JCW1xpFDGTiSfBQ9enS1H/P19cEHH72MeXOXYt7cFagoM6FdUqJdrHU6LSa+9yqmTpmJNat2YNnizVi7IfamxNrd3R0zZkzGhAkfYe/uZOzeeQQKhax6RIdNQkxcPYf4c0hIMGbPnY73Jk3Hd9+uwI8LVkOukMFosEDnpsEzIwbgmWeeqqWVUVsch0GqMX7LgbFq7545HUEt1wBgzKFFcG2o5trGiUajxtRpE/H6a5Ow6Iff8NOPa6s/kiF18MH/xqFbt87IzcvDoh9WYsan36NNQmsHsWYSu27MQ5KYw3NzHIcBA/ri7NlMrPh5I775anH1R9fTFYOHPIJnRwzH4p/WQCbjHWzv5uaG18c9isN/Hcc3Xy2+1M/AXfoA8IiJC8GLLz2Lxo1jqeI9QHCMBl7eF2RfzIHFaoGXpyc8va7fQ19cXIKKigq4uLggIMDf4ZjNJqKoqBgmowEMQFBQkMMCR4wxlBSXoLKqCowx+Pv7wdXV9abzqdcbcO5cJlKPnUBFRQVkcjnqh9dD4yaxNcZxKyoqcfp0Oo4dOwGrxYKAwAA0b94UwbUsJFReXo6SklKnZ2OMISvrAkRRhI9PHYeRMFargOzsbDDGUK9emMMiUZdtpdVq4efn6xB2unDhIkRRhK+vD3Q63VXpWZGdnQPGGOrXD3fKY2lJKc6eO4+qqip4eLgjNDTE/kEURRHFxSUwmy3w8/O1276wsAhVVVXQanXw83O2U3Z2DiwWC+rWDXYaUicINuTm5uL8+QvgeQ7h4fXg7+8PmYxHVtZFMMYQGOjvcJ3NZkNZWTnKSsuQX1AImyBALpfDP8Affn6+cHd3o0pHYk0QBEHcaaiDkSAIgsSaIAiCILEmCIIgsSYIgiBIrAmCIAgSa4IgCBJrgiAIgsSaIAiCILEmCIIgsSYIgiBIrAmCIEisCYIgCBJrgiAIgsSaIAiCxJogCIL4B6GdYoh7il5vQFlZGXieQ1BQEBmEIMizJq4vmnoYDAbc670nVq38DQmtHsPmTdvpJdwDjEYj9Ho9bDYbGeM2YIzBYDBAr9fjn9qvhcT6X4gkSXi0338w9uU3b2mX89vFarVi8eJVCKrriT6P9KQXcQ/e86efzMSAR/+D/fv+IIPcBiaTGa/839t4tN9w5OcXkFgT946M03koLSnHvXQSDhw4iJOpF9CuffPr7uBO3EnP2oSz6fkQyLO+Xd8aZWWVyDidR5418XBjs9mwft0mcBzQu3d3KBQKMgpB3AL3pINRkiSYzWZYrQIEwQrGGJRKFVQqJdRqDTiu5sptsVjA8zw0Go09ZiRYBcjkcri56RzOF0URJpMJgiDU6i2q1Sq4uLjY/9tisQDgoFQqwF2TCVEUYbPZwPO8k7AYjUZwHAeNRgMAMJstMJlM4DjAxcXFvsv05TxbrdU7S2u1rg47b9dsJwtsNgEcx0GhUDrsTO7wnWcMJpMJjAEajRo8z0OSpGobCTbIZDJota4OO4jbbDYIgg2SJILjAFGSYDabHPIkl8tqFFKbzQaTyQybrdq+1fmTQ61SQ664cTEqL6/A/n1HUD/SH23btnE4ZrFYIAgCFHIFVGoVJElCVZUeZWVlcHFxgZubDmq1utaPgNlcfb3VagHPy6BUKqHRqJ12Cb+M2WyBKNqgUCigVCohiiL0egMkUYRao4FGc+VegiDAYrHAarVBECyQy+VQKBTQaDS1fnDMZgskSYJGowbHcbAJNugNBjAmQa1W28vN5bJksVjAczxcta6Qy+XXc+5gtpghWAUwMCgUCqjVaqeyyxiD2WwGkxhsNhs4DrBarDCZzPZzOA5QqVRO114u+2azGTabCJmMh0qlqvVZJUm6VPar6wPHcTAaTbBYzOA4Hu7ubk73sFqtMJvNEEURjAE8X13WL5fjW8ViscBisVyVHg+lspT2UHUAACAASURBVNo2taV3WZOq7cNBqVRCpVLVaAurtdp2kiiB4ziYzWYHW/I8V+O1d5q7vru5yWTG1199i5SUEzh3NgflZXowBnh4uiI6uh6eGPIoevXq7nTdsWPH8d6k6UhIaI7Xxo3Ftm07MXvWAmSczkHDmFAsWz7PXoDy8vIxd84CJCefQObZXFitNTf5pn/6Fvr162Ov5K+++i5USgUmvfe2k/inpp7ArG/moVWr5hgxcvhVldeG55/7L7RaF3zx5TRcvJiDTz7+En8cOAa5XIb2HVpi/IQ34OnpgTVr1mHB/KXIOJ2NoLo+ePLJ/vjP00MdBPQypaVlWLjgJyQnpyI/rwQKpQyBQX7o1bML+vXv41RZTCYzXn99PEqKyzDjsynw9PTAd3MXYPOmXTifmQ8fPw/0eaQzXnnlJfu1hw8n4+uvvgOTGP44cBxKlRxNmkZCLrsiEP0e7YUBA/o63Cs9/QwWzP8JJ0+k43xmAQTBBpVKgdAwPzRpGoM333oFrq6u1y0HS5euwHvjv8D4917E008Pczi2edM2fP319/jP04+jX78+mD9/EVb8sh4XzhdBqZKhdXws3nhzLKKjoxyuu3gxG59/Pgvnz13E+cw8GI1W8DwH/wBPxDSKwIsvjUSjRtFOQrZk8c9Ytep3DBv2GPo/2hfffjsPvyxfj8KCcoyf9BKGDn0CAHDq1Gl8O/t7ZJ3PQWZmPixmATIZh6C6dRAXF4UxL49CeHiY07POn/8jDh1MxtRp70MSRXz66VfYsf0PGPQWtGjZEOMnvo6IiHAcOZyCzz+fjaPJGXBzd8Ej/TrjlVfG1PiBNpstWL5sBXbt2o+8vCKINhH+AT5IbNsKw4c/CVdXRydk5IixkMtlOHUyExXlRoRHBMDP19t+jo+vN957/x2H6wDg7NlMLJi/COnpmSgpLodW54LQsCA8+eQgtGnTykl4CwuL8MKoV+Hn54PpH09GdnYOpk/9AinJGeB4YN+BtdBqXe0CuWvnXvz6629IP52J3JxSSJIEnZsG9cID0bJVU4wb998anbeaEEURW7Zsx5rVvyM9/TwK8sogSQzuHq4ICw9AUlICXnrpOafrCguLMP/7H3Es9RQKC0qhVikRVNcf/fr1RM+e3SGTXRH406cz8L8PPgE4DseOZsBiFtC0WaTDB71RbBRefW2sw3UPpGctWK3YuGEXJImhS7cE+Pn5gEkMp05lYOvmg9i5PRmLlmrRrl2i43WCDYf+SEdMTATS08/grTemwmwUEBjsjbzcYrv3XFJcipdGv45jKefQoXMzDBjYC66urmASw+pVv4OX8RgwsA+YJKFBg0iHSnvoz+Nwd3eBJInOX2uzFbt3HkFoaF0n9+Z0WiZ4GY+DBw9jwvhpUCjk6NwlHmt/24O1a3bDz88HjZvEYuyL/8OAQR2gUqmQciQDM79YiMS2bRAVFemQYl5ePp4f+QqOH8tCqzYN0advZ1gtVmzauBtvjvsYZ8+exyuvjoFSqXDIx4WsXJw+dRHFRcX4+OMvsObXPRj4REdERIZhy8YD+Pabn1E/vB4GDOwLjuMgCDbs25MKJjHIFTwEq4g/9p0Ew5XvdcfObR3ydvRoKoY8PgZWqw0NooLRp18HyGU8DAYj9u9LwYEDR2440sBgMGLh/GVQquVISIh3Om4VrDhx7DwqK6swb+5CzPjkBzz7XD+oNRqsXrkZ+/cexbtlH+KHH2c7fFRzc/Px+edr8djAFhg4qDu8vD1gNJiwd+8hbNrwB06eOIOfV3yPOnW8nVpGKUfOoH9/PX5dsQoT3/wWoRFecPfUwnyVx5Sbm4ufl+xE157NMGRIL7h7uqOqsgpbt+zD2jW7kXnuIn5YNBs6ndYh/aoqPQ7sO4aMjLP4adEyHNh/FB06tcYf+1Pwx/7jePedD/D6G2MxfOgrSGgbh8R2TbB545/47ttfERcXgz59HDtfqyqrMGHC/7B29R5ENAhA127toFQpsXf3QUz73zwcOpiMzz6fAnd390tlG9i9PRVKNQ+5XAaOA85m5CI9LdueZuOm4WBMcrjPoYOHMXzoq7Babej9SCLad2iDosISrF61Fat+3oWZsyegf/8+Dt6qJDEc3J+OZq1sKCwoxKuvTET6qRyER/hj565zDvdYs2Y93hw3HRazDe06xCK+TTMwMJQUlWL71sOoqjJg3LixAG5OrZcu+QWTJ30Fi0VExy5N0bZtC0gSQ2FhMbZt+QsyXo4XXxzp8IE5dzYTI559BRfOF6Fdh8bo268rjAYT1q/bjt/XHMBb47PwwuiRUFxqLUqShHUr/0IdfxfIFTw4jsORv9IhXRYgBnjX8az+x10Pm99lLBYLS0/PYIIgOPwuSRJbufI3Vj8skU2c+D8miqLD8b/+SmZBfq1Zh/b9WO+eg9mqVWuZ0WhkkiSxqqoqJkkSY4yxL7+YxSLCEtmnn37pdI/c3DwWE9WBrfhltVP6VquVxbfqxbp3fYyVlZU55fvQwSMsJqo9m/rRDKfr2rTuyRpGJrGoiCQ259vvmcViYYwxtuH3zSy6QXsW3SCJ9e87lB07dpxJksSsVisb+ezLrGFkElu9eq2THV79v7dZo4Yd2I8/LGGCYLMfqyivYC+MeoVFN2jPdu/a63Cd0Whkj/QZwhpGJrGmcV3Y9GmfseLiEnuaixf/zMJDEtjbb7/nYBdJkpjNZmMhgW1Y/75Dmb5KzyRJsv+5Nm9vvjGRRTdIYsuWrmBWq/WqY4xZrQLLyDhrf/7aSE4+yuJiOrKnho1iNpvodHzt2t9ZeEgCaxiZxF568TWWl5tnP1ZeXs6eefpFFh6SwNasXudwXWFBIbtw4aJTvi0WC5sw/gMWHpLAFi1a6vRMc+fMZ1ERSax3zyfY8KdeYAf//IvZbDYmSRIzGo32c3NyclleXr5T+kajiY0d+warH5bI9u494PQ8X3zxDWsYmcRiotqzCeM/ZGWlZUySGEtJOcYiw9uyhpFJLL5VD7Z58zYmiiKTJInNnj2PRUUksZEjxjql98vPK1nDyCQ2ccKHTF+ldyiLX838lkU3aM8WLvzJ6TlFUWRvvTmJ1QtJYFu2bHd4z87PZGR9+zzJWrXozvbs2X/luMTY+fNZrEe3QaxtQm+Wl5fvcF1eXgEL9GnFmsR1Zr17DmazZ89jpaXldlterncV5ZUsPCSRJcT3Yn/++VeN9089dpxd83OtFBQUsiC/1iyp3SPsaEqq03G93sCOHz/h8Jsoiuy/Y99kcTEd2S+/rGI225W6VlJSyp55+kXWuFEnlpp63MmWer2ePTZwOAsJjGfZ2TnXteXd4q53MCqVSkRGRjjF4jiOQ9euHeHpqUXKkZO1fpjyc0sx6f1x6N+/jz0mptVqwXEcRFHE0aMnIAgS+vTp6XQPf38/dOvRBnO+XQSj8c4PUXv19Wcw8rmn7bHRsHqhUCplUCjlmDp9EuLiGl2K7SrQqUu1x2q1CA5pZGfnYPPmA/AP8MSAgX0hl18Jkbi5u+G1116CzSZi9579tXxsgbfeGY3Xxo2Ft7eX3bYd2rdFRakFBr3jWGqO4xybspf+2+n3S2mnnToDX39P9OzVzSEUw3GAQiFHRER4rbHhy2zcsBVWqw2jX3z2uk3FFq0aYtr09+Ef4G//zd3dHY8/0R9yuQx79zoOP/Px9UHdusFO+VYqlWjfodreJ46frrH3nuMAmyhi6rRJaNW6BWQymUM/BAAEBgbA39/PKX2NRo3evbuB5zmcyThb6/O0SYjDu+PHwcPTAxwHhIbWhSQxyOUyTP9kArp27Qyer/bWYmKiwHGAxWxyiq1+/dUP8PF1x0tjnoer9kq4SaFQ4PEnBsAvwANff/kjBEFweM9Xx7q5a97ztc+UfOQoUg6fQ99+nZCQ0PrKcQ4IDQ3B86OeQmFBBf7441CNz2q12vDsyCEYNepZeHq622152QsvKy+D1WpDeP1gNG4cW4NNNYiNa3TTIZD8/AIoFDzCw4PR8JrwGAC4urqgUaMYh9+ysi7il6U70Dq+ER55pKdDONLLyxNjxoyETZSwccM2J62qzi/n8N+12fKhHA0ik8nh4alFRYXeoSl+NY/0a4+WLZvXahBJksAYq7VjRibjcf5cfo2hjttBpVagU8ckhxfO8xzAcdBqNQiv5xjLlPGyGtMpKS6BJEqIbBAGrVbrdNzXzxd1fNxx7GhajaIjSRIS28Y7Pb9cIYco3l7jjOOAhjGRyM8txeKfliMzM8tBEG6GwsIizP9uJSIaBDnFj6+lR8+O0Gp1Tr/7+NQBYwyVlVU3PWxKq9VCYgwmk7nGDmebTcLjTzyCoKDAv2Wbyx17er2h5o+oxDB02CAH8ee46urm6a1FVFSkgzDxXM1VsbS0DGnHc+Af4O0UbgEAnU4LDw8dCgsqUFZa/rffddrpDMiVPMLqhdbYpxJcNxAyGY9TJ0/XeH1oqC+6dOlYa4eep6cnXFyUyEi/gA2/b0J+fsFtDYHz9/eD2SgiIz0LWzZvQ2Fh0Q2vycq6AKVKhqDggBo7BH18feDqqsKunffnmPS7HrNmjOHixWzs2bMf5zOzrsR6LvW0FxWVw92t9s4phbL2LPI8j3rhoVAojiI5+Sjq16/nIOr5+QXYse0gAoO9/1Yv8/WFrPYv6q18aK2XRq/o9SYkJx91iiNWiwFDeVnVrefxDjzjM888ibRTZ/DJ9AX4dPoCeNfRotcjHdCqVTPENopBaFhIrbZljGHbtp2QGENi25Zwd3e7CZvW9Bwc2CVP/9oOphMnTmHf3gMoLil1bLFczINSKa81lsgYq3WEydWjFlJTT2Dv3j9QWVnpcOz8+Yv2dGoZuHFHPC6bzQZexsFoNOPYseNQqZROeTQaqkf02MS/75BUVlRBxnPIzcnHkSPJTsczLrUgKiuranGKZNd9Xjc3Hb6aPRnvvDUV416dBgCoV98fvXp1RIuWTREdHQV/f7+bzq+vrw9mfz8JE8fPwNgxH4ADENEgCD17d0CLFs0Q3bABfHx9nPrPOK76A5icnFKjYyGJEirK9f9OsT59OgOjnhsHm01EXFwDuHtc8ZwEmw2SxG5LTJ59Zhh+X7cT06Z8g4z0s+jarSNUKjXOnT2H7+ctgdFowbDhfR08nPsNjuNwLCUd77z9vxq1xc3dFXXqeP4jeYuOboifFs/Bnt37sHnzDpzPvIjdO//Er79sgYuLEkOe7Iv//t/oGod2CYKA7dv2wGoWMXjwwDvaXJQkhkWLluKzT+fDP8AL0TH1oboqHGM0mnA7t5MkCQsX/ISvZi5CaJgfIiLrQXnVEEWT0XxP30NWZj7em/hxjR9GjudRv4F/dcvudsohz2Hlr5uwY3vNIbfQMN8bjvq5Ht26dULTpnHYtHErdu+uHtWy8teNmD9vBbzruGHCpFfQvXuXmy4n/fr1QXx8S2zYsAV7d/+BgsISLF+6Ht99+zN8/Twx5aO30bZdglNd27cnBRnpWTWmWcfXA241tGAeerFmjOGTj79CaUkVvv1uKhIT4x0Km8FgxPFjw53iuLdC3ZBg/LBoJj6b8TV+WLAGs776xT7aQatT473J/8WjAx6psWl3vwg1Ywxtk5ph6rT3IElSra2IOx0bY1f9//XQ6bTo3acHevXuDpPJhKoqPc6fz8KHk2dg/rxf0aFjW7Rs2dzpurNnM7Fj22E8+nh7hIWF3kY+mVMrwWAw4Ofla6FRK7Hop1nw9fVxsM+B/X9i6O5X/vY9y8rK8NmnC9GiVRS++vpjeHl6OjRVduzYjcOHxt+7j2ajMHw5c9p1WwPXbbncIOTAcYAkMrwweigGDOxXe0v3NiYzcRwHX18fDP/Pkxj21GAYDAZUVlbh8OEUvDluKt6fOANxcY0QGBhwczFcnkNAgD9GjBiOp58eCoPBiMrKShzY/ycmjv8c774zFStWzoePTx37QzLG0KdfB7z22tjrtthvouI8XGJtMVtwOu0clCo5wmpoLjMmwWoVbrvBHhFRHwMG9EFVlRGvvzHGPpEmODjIaRzpzVK9yNHdfwEqlRIcx6GqSg+dTnvHwzW14e2jQ0lxBURRuqXK5uLiAhcXF/j5+eL1N1/Ci6Mm4K+/kp3EmjGGRT8ug4zn0L17p5v7WNZi76rKKoCrntR0WZCtVivOpueiY+fmTkJ9udV2Ox+3vLxCVJabER4eCnc3N6ciKt6j6dtqlRo2QYLFIsDV1QVubm638L54uLhowPMcqmqJrdvLQx0vSIxBlER4eLjf9U4znueh0+mg0+kQFBSIU6dO48cFq5GfV3DTYn1tGMbNTQc3Nx0ef2Ig/vorBb+v243S0lK7WLtoXCBJDFaLADc33S05cDzPQy6TgZfx0BsM/4hY311l4KoLjCQxWMwWh0NGoxGzvpmH/Lwy2ETxtjob9u07gLFjJqNbt/Zo3rwpmjZtjKioyOsKdfUoDRkMBjMsFqtD8/fUqdN4+62P7skaAP7+/lAo5TiTcQEXLlystYVydR7vhDffqXNLFOSX4/Dh5FpDUVlZ1XmqaRy1KIooKCgCY6xazGqI/+3ffwQKlRxt2rS+qXytWrURebn5Dq0Li8WKXbv2gUkMTZrGOniCMjmPktJyh/MZYygqKsYPC5dCpZJfOsb+hphUi5XJZHLoZ2GMITs7F998Pf/SR0O4q+XD3cMN3Xo3x7mzuThz5lyt55mvqV+XbdQwugEYY/jzj0MOs+6upXHjWAhWCX/+cQRGo7HW0NCtdjBftllKyjGUl5fX6BxYrVZkX8y9NFtSedPpVVZW1tgSNZstuHAhF3K5DLKrJnxFRFT3aaWmpqHkmj4Ox7pmqcGpUsE/wAdKpQwHDvwJm02852J9Vz1rtVqNFi1jsGnDAcyZuxDDhj4OpUqJkydOYe3aTWjWvDGiY0Jw6uQFzJv3A7p164z69evdckHIOn8BPM/jyJFUxLc5Bf7SyAuOA+RyOYICA6HWODYf5XI5WraKxYb1+/Dxx19i+PDBsFis2LljNzZu2IUhQ/tizqxld/0F+Pr64KWXh+KLGT/gnbc/wKhRT6Nps8ZQqaqnXefl5WHnzj0QbRJGvzjyjol1j55dsGH9Prz1+hQ80q8TgoODIJPJ0LBhA8S3aQkAyM3Jw9gxE9CpSzxi42IQHBwIuVwOo8GIQ4eOYPXKrfDy1qFtuzZO90hJOYbC/HKMGv2E06SU2igqLMXwp15Cl65t0aJFE4DjsHPHHqxasR06dxf07t3dofJENwpF6tFzmDt3ATp2TILZbMFfh47g99+3oVv3Dti57QiOHU3DypVr0KlTe3h7e9+0jYKDg1DH1xXbt/6JZctWoHWr5jAYjNi79wDWrt2KR/p2xem0i/h9/TaEhgWjZ8/uf7sVd6N39cLo/2DM6Al4/bX38fJ/RyAxsc2lyUEMxcWlOHTwMDZt2o5Zs2c4jQrq1q0zPg+Yh99W74TRaEJ0dBQ0Lhpo1Gr069/HPlsyOrohBj7eAZs27MekiVPw1PDBiIgIh0wmhyAIyMw8j40btqBlq+bo2rXTLT/HgQMH8c5bH6J1m2Zo3DgGnp5e4HkOJSWl2LVrHzZv/AORDYJQNyT4ptLbtWsvJk6YitatmiC2cQw83D3AcRwKi4qwY/seJB8+jdi4cAQGXhkG6uvni1fGPYVvZy3DW2++h5HPDUdsbAyUSiUkSUJ2dja2b9sNhUKB50c94/Qenn5mGNau3oOvZ/6AMxnnEBoWAoVCAW9vL/Tu3f2ut4rvegfja+PG4uSJs1ixfCt+WrARglWCscqGKTOex+jRIxESEoTRIz7Ee+/MRlhoiINY68sFMIndsDA3a94YglXEhvX7sPyn7VddU+0dRTcOwDvjx6JHj64OBh321ONY99serP9tN5b/tBWMMQQEe+C77z+FJImY/fWSGu8pCCKsFpuTv8YYYLXYIKjEGj8qZrOtxiGKw596EpUVVfj8kyXYu+sNlBRY4OWjRlWpAKULB6WKx9sTR9To3ZqNtlrDNWUma60x8E6d2uPt8S/gf5NnY96c1QCrztmHU8faxTogwB/hEcH4aeEmKFVb7c/IcdV/N2gYgEnvj0PdusHX2MeGuXMWQaNRoHef7jddVl54cRhCQ0Lw+rgP8dUXyy+NWZfBahUx48vx8PPztZ/r4uKCF0Y/jReem4hPp83H5PFzYLNJ8A/S4eMZ76Bbt84oLirGnG9W4rWx07B1V5xdrBljMBmE68ZxdTotJv/vNbz0/Id4b/xMGPUCbIKEsEhvfDFzMpo1a4LMc1n4ecl2DBr0JgoL29nFmjEGi9lWY9jYZLDBJog1xuUtZluNnmdiYhu8O3EMJk/6Cq+O/QjlRVa4uithMdggQYKLVo7mrSLsQwOvxtPTA9/M+giTJk7DiuU7IZPtBmMMLVpHXHo3qkuxaDnefOsVCDYBvyzbjqWLtkBfIcLNU4WyQhN0ngpwHLDs19ZOOa8sFS6NRGG1NrGjo6Pw04+r8P2cNZDJfrOHvTieg9ViQ4/erTBh0hs3HeaJbhiFHxeuxtzDq8Dzqx3SMxlteOyJdnh3wusOawFxHIdnRzxVPVN2zmps2XAY5cVWeNRRo7zYAhcdD4WSx+QpY2q8Z5Mmcfj8q/GY+O4MLPx+XfUoJcbw+JOd0atXt7vfv8XuQVu/rKwMW7bswIULF+Gm0yEpKRENo6PscbGLF3OQdT4L4fXr2eNVBQWFOHw4GR4e7mjTpnWtX62CgkL8sHAJSkvLEBERDvHaJnFhEVat3AIOHJYs+wZRDRs4XH/kyFH8tmY9jCYTgoICMPiJgfAP8MeFCxexZfMO1K0bjO49Ol/VFGTYunUbJImhVasW9okoAFBaWoqDBw+D5zh07tLRwctJS0tHZuZ5hIWFOq1xcTmvaWmnsX3bbuTk5MJms0Emk8O7jifi41uhdesWDmNDbTYbdu3cA6sgICEhHh4e7g7pmYwm7Ni5GzqdFomJCTVORmGMoaSkFGlp6dDrq8BY9QSImJiGVwmvgPT0Mzh16jSyL+bAZrPBxcUFjWKj0aJFM/u6D1eTnHwUTzw2Bs1bRmLhD7NuOBJn3boN+L8xH2LylLEYNmwIiotLsXPHLly4cBEeHh7o0rUTwsJCarw289x5bNu2CxUVFQgKCkT7Du0QEFA9kcVmsyE9/QxKSkrRpEmsXQhSU48jOzsXISHBThMnruV0Wjq279gNo8GI0LAQdOyYZG8pCIKAtLR0lJWWoU1Ca/vkoOTko8jPL0B0dJRDx6rFYsX27Tshk/FITGzjMK4+OzsHqaknoFar0KlThxrfVXZ2LrZv24mMM2dhtQrgOQ46Nx2aNW2MpPaJ0Ol01w2TnE5LR35BASRJgkqlRLt2ba9ZwqD6mf46dAR79/1RPQdAql4wKijIH+2SEhEbG+M0SGD3rj1QKBVo2zbRYc0M534gI06cOIm0tAwUFxWDMQZPTw80a94EcXGNrr+IVU19GVV6HD9+EqdPZ6C0pASMAd51vNGieVNExzR0mGB2rZNz/PhJ7Nq1F3m5BRBFETK5DL4+dZCQ2BotWjS7bkdqRUUlTp5MQ0VFBRhj8HB3R5urJxLdLdgDTHl5ORsyeAR75ukXHaZCXztVdMnin1lURBJbvmxFjefYbCITBOGeTRu9ETabjQmCcGkK9IP1TiRJYjNnzmbhIQns11/X3NQ1l6ebL1q0hBE3Xz4EwXbXyqwkSUwQrpTDh92WD8IzPtDrWV+8mIuUIxlo1ar2LyHHcagfEV7dXKvS19KTzEMul9+zaaM307Mtl8svTTR4sN6JXm/AL8vXI7CuN7p06Qji7pWP6kWa7k4B4TgOcvmVcviw2/JBeMYHesNcwWoFY0Bxcel1z8u+mAOAu+EMOuL2qayoxIRJ/wcPd48ap0cTBPEvFOuAAD/4+rnjl+Ub4ePjjZYtmzl8ISXGkHbqNL6auRCeXq5o3rwJvfG7TFBwIIKCb229DZlMjrqhdaCQy8mABFFba+dedDDeLSRJwp49+/HOW1ORc7EEFrPo0MHPAVAoeTRpXg+TP3gLzVs0vW9CHcQVjEYTjEYjVCoVeeME8TCK9dWVPTc3D6LoPFxKqVQhKCjQqdebIAiCxJogCIK4o9Du5gRBECTWBEEQxJ2Aut+JhwLGGDIzM2EyVW+L5e/vf0trgRAEedYEcY/E+rvvvkNsbCxiY2Nx7NgxMgpBYk0QBEGQWBMEQRAk1gRBECTWBEEQBIk1QRAEiTVBEARBYk0QBEGQWBMEQZBYEwRBECTWBEEQBIk1QRAEiTVBEARBYk0QBEGQWBMEQZBYEwRBECTWBEEQJNYEQRAEiTVBEARBYk0QBEFiTRAEQZBYEwRBENciJxMQ9zOMMRw9ehQcxyE4OBhubm5QKBS3labJZEJ5eTnOnDmDqKgo+Pr6kqEJ8qwJ4nbgOA6xsbHYvHkz+vXrh5EjR2Lx4sXIycmBIAhgjN0wDUmSYDabcfz4cXz88ccYNmwYevToAY7j4OPjQ0YmyLMmiDtSSOVyjBkzBpmZmZg9ezYWLVoEABg8eDASEhLQrFkzxMTEOAi3KIq4cOECUlJSkJKSgo0bN+LAgQP24z///DPatm0LjuPIwMSD4biwm3FNCOI+oKqqCi+88AKWLl1a43GdToeqqioAgJubGyorK52bkjyPr7/+GqNHjyahJkisCeJukZubiwEDBuDgwYN/6/rXX38dU6ZMgVKpJGMSJNYEcTdJS0tDz549kZWVdUvXjRw5El988QW0Wi0ZkXjgoA5G4oGjYcOGWLp0KerVq3fT1wwcOBBTp04loSbIsyaIewljDL/++iuGDRsGq9V63XNbtmyJZcuWoX79+mQ4gjxrgrinXgbHYeDAgZgzZw5kMtl1vfCFCxeSUBMk1gTxjxVensfQoUMxZcqUWs+ZNWsWYmJiyFgEiTVB/JMolUqMHTsWL7/8stOx5cuXo2PHiCwf7AAAGjNJREFUjjREjyCxJoj7ARcXF0yZMgWDBw8GACgUCsyaNQuDBg0ioSYeGqiDkXhoyM7OxiOPPIJevXrhvffeg1qtJqMQJNYEcT9y/vx5+Pn5QaPRkDEIEmuCIAji3kIxa4IgCBJrgiAI4k5AS6Q+AEgSg80mwGazQRRFSJIEUZTIMMStV3i5DBzHQy6XQS6X3/ZGDgSJ9b8exhjKyytx5EgyDh48jIsXc1FcXIrS0kpYLFaYzQIZibglOI6Di4sSKpUSfn7eqFPHE5GR9REf3wqxsdG0EuH9/v6og/H+wmqx4uixVGzatB2LFq2DyWSFWi2n8cLEXUEUGfR6CxrHhWDIkP7o0LEd6tevR4YhsSZqQxAEHD16HFOmfI60tCxIEnPwskWRQRQluLqq4OamgUajIqMRt9xa0+tNqCg3QbDZIJPxkMkcu61kMh4DBnTBiy+OQFBQIDkJJNbE1ZSUlGL69M+xaeN+mC2CQ8Xx9NSiRYtG6NWzC8Lr14OnpwcUCgXkchkZjrhFsQYEwQZBsCAvtwAnTp7Cb79tRmZmDqqqTLisBIwBAQGeeO65IRgyZBDFtUmsCQA4dOgw3n//U6SnZ4Pnq70Yi9mGRwe0x5AhAxEZGQFvby8yFHGXwiAicnLycPRoKmbNWojTp7OhUFQ7AiaTgCef7I5x416Gry9tLExi/S9FkiTs2rUXI0e+C4Wiuilqsdj+v70zD4+izPbwW9XVe3cWQjAJISD7DsOOqDMDA8LVUcENF1AEHQWVUbmoKMrIgFcWl6CjgoqioIMbCAg4yqpIdBQNq2xhC5AEEpJO0umt6v7RoUkDYVHUNJ73efJApztV1aerf3XqfGfh8ssvYtiwQbRr1wZVlcxK4dfD663g06Wf8fLLs9i2/QAmU9h5uPDCFKZPn0pGRj0xkoj1749PP13G//7vhEhWR1ycnQceGMY111yNxSK3ncJvQzgLqZinnnqGhQtXRVJEMzKSmTkzk/T0umIkEevfD2vWZDFs2EORL0JaWi0yMyfQunVLWdARagQ+n4/58xfxxBPPo+sGhgHt2zXiXy9NoXbtJDGQiPX5T07OLq668nZ8/iAATRqnMfWZ8TRr1kSMI9QodF1n0aIlPProFHy+IIZh0KtnZ555diJ2u3Q0/LWRoOivSEVFBVMmT4sIdVKSm0mTx4lQCzVTHFSVyy/vy6hRd6DrBoqisHzFtyxY8Ani4olYn9csWrSUxUuyANBMKpMmjaVly+ZiGKFGC/ZNN13PHcOuAcIx7SeffIEff/wRuSkXsT4vyc8v4LnnXsVsVgmFDG686X/o1q2TGEao8WiaiaFDB5OakgiEc7XfmDmb4uJiQqGQGEjE+vxi5covyM8vBiA1NYG7774DTZPWLEJskFS7Fk+OH42mhSVj/vyV5Obup6ysTARbxPr8weMpZfLkVyKP77rrFmrVShDDCDFF584d6NQpHLYLhnTeeOMdDMMQwRaxPn/47rvvKSwsrbyFDNGz5x8lRU+IOex2OwNv6I/XG0BVFbKyfqCwsCgi2LoubXtFrGMYXdf5+utvIw1zBg26nNTUFDGMEJP88U+XkpYajl0fOlTCnj17gfDCY3l5uRhIxDp2CYVCfP31OiDcT/jyy/uIUYSYxWaz0X9A78pzWyc7e2PkLjEUCuHz+cRIItaxSWFhEatXbwbCedX16qWLUYTYFQxVoUWLZpHHS5esjHre5/NJOETEOjbZu2cfR/sx1a4dj9vtFqMIMU2DBhmRfuvrN+ymtLQs8pxhGFRUVIiRRKxjj9179mKxhFtOOp12KdMVYp7aSUmRghhFgaKiI1HPB4NB8a5FrGOPwsNFqKqCAbjdbml7KsQ8doc9Um6uKAperzfqecMw8Pv9YigR69iiwlcRXoAxDOLi3JKyJ8Q8VSfHKAonzbEOBAJSjn6OkRK6XxjDMCCs1WgmuTaeryxfvprVq77EMGD4iGEkJ9c+o78rKy1jbdY3gEH9jAwaN2lU49/r8Q7HyURZ13V0XcdkkvFzItZCtezdu4+tW7ed0WubNWtGenraeW0Pj6eUrKyvURSF+vUzaNz43AtiXl4+c95ehN8X4rbbboIznIJVWlbKsNvGoKrwyGN/iwmxPlNCoZCItYi1cCp27tzJkEGPoJ4m5OKrCPLmO/933ot1SUkJvXvfR1qyg8nPjfpFxPqox6moZx/mMmlqOGPoPIuQSQm6iLVwug9VM5OeUYuiyhJ3TTNROzn+JF8m/XfSTEoh0WbF6bac9gImnDskI0TEWjgNXbt2ZvqrU+nz51uJS7DS+7LuTJg49sTYogHmczzv0TCMyH7ONvOl6vGd24VY4yT/O92xgGHoVVLUlJ/wfkDXQxiGgaqq5yQT6OfYV8RaxFqocZ61ht1uQw8ZVR7bTysCCxcspqTEg4FBxw7taVFlMIKu6yxd+hmFh4tQFOjZ60+kpFwQtY0tW7byzdffkpefj0k1kVY3lR49up12yOqBAwf55utvyd2/n0AgiNvloknTxnTp0ikyPHjf3lyy128Aw6D9H9qRlpYa+Xufz8/q1V/i9/upVSuRLl06o6oKBfmH+GptFocPFRKfbEVVFb779gecTkdE8CwWC/36HWsBEAwGWb9+Ixs3bubgwTy85V4URcHldtGkSWMuveQi3HGnL2wK+AMs+mQpWVn/xVteQaNGDbi6/1+pV++nDZw1DIPs7A2sW/cDBfmHMZs1MjLS6XFxdy64oE6NPA8lG0TEWvglAgWKQvMWTbnxhuGUerx079GGl156BltlEU9u7gFGjngSRVXodlFrrrr6iipi6eO112Yx5emZWCxaVMGE3xfixVfG0bdv7xO85WAwyOJPPmXMw5Pw+0OoVeK9Rw57mTvvOS65pAcAe/flcv+9/ySk67wzNzNKrAMBPy+/9Abrf9jJwJv70rlzR8BEYVERY8dMxecLYLOFT/UF81fx8bxjJdJ105Oiji0nZxc3Xn8PoHC8cx8K6TRpls70Gc9Qt271cf6KCh8TJkxh9luLIv2fYQ3/fncB786dcdZrBB5PKZmZL/PaKx9itWrohkFlNigJCU6efX4c3S/qWiPTQg3DkHTVc4TkkgkRGjVqyNBh12MYkPXVRn7I3hDxql+d8QaKquB0WXli3GicTuex5159k8xnZ2Gzm2nVuj433fI/3HDjZTRuWherTePv94znu+++P+FLPH/+Qh4e/TTBoI7NZqZRkzRatKxPvYxknG5L9MUEUE0Kpmpu/RXCfSuUKqt0qqqSlp5ESmpipIjDHWcjo0EyGfXDP0m1T+wrHp/gpFnzdP7QsQldurWkU+fmNGiYgklV2bl9PxMnPFOt12g2q0yenMnH8z6nfYfGdOrSnJTKLnWHD3l4Z87cswoPGIbB9FdeZ/asj7HZNdq0b8igW//K1QN6Ua9+MiUl5Yx68El27twlJ7B41kKM+8zk7NzDgo8/wagauzUMLuvzl4jnfFTcbhk0kCWLl7H1x31MnPAsc96ZgcdTyvJlawG4577BXHhhgyiv78P3F6MoCr37dOXJ8Y8RHx8HQEHBIe4ZMZrs77fz+mtv07Zt60hBRXFxCVMnTUfXDWoluXku80maNm2MyWTC5/Ozb18ubrfrZ73zBg0yeHv2y+zff5C/XHob8bWs3HnXjQwYcFVULLqq55eSksJ7788gITEeq82GWdPQdR2Px8OYR8azYtl/WbXiWwoKDlGnTvJJ71C2bM5hxmuTaNGyBRaLmT179vK3O0exb08BG9ZvIRAIYrVazug95OTs5vmpc3C6LAwachX33z8cuz1cQbh79x6u6DeYosJS5s9byAMP3iunu4i1ELvhDVifvZP7R06I+v3BPeXsyrsoSqwB3G4Xj419kNuHjGLbj/tYteoL9u7NJT/vCF27tWTgwGujxC03dz+7c/LRdYN+/XpHhBqgdu0kunfvSPb329m79wDl5V7i48NinZX1DftzizBpKveOHFIZugjjckFSUq2f/d7NZjNJSUlUVPgJVIS9WbfLdcptu92uEy4SqqqSmJhI7z5/YsWy/2JgUFxcclKxDoV0Jk15jI6dOkR+V79+Bk2bNmDfngJyc/PR9TNPadu4YRM2h4ZJU7nmmisjaw+KEr4YXdm/Jx+9/xkfffgpI/8+ItI3XRCxFmKQuHg7rVo1jMqECASC1WYTdOz0B/oP+Atz31nCI6OfJhgM4XBYGf3wSBwOR9RrCw8XgRIWKbPFfEJTH7VSPMrLvFF5tz9u2YbFaqKsNED37l1rlL18Ph9FRUeiuscpSuV7BTCqz3QIhQzqpqWdIPY2W/iiGAyGOJt1txKPB1VVImsBVe2rKAoJ8eHFzu1bDlYWoYhYi1gLMYlhGFx8SUcmPvX4CXHWowJyPKqqMuKeO1n2+VccPlSCrhtcN/AyWrVqcdLtAzicFh4ePRGbzRJ1USj1eCtfV6lykYtFoHJfCmZzzTkN9+8/wD/HTyZr7XqOFJZHHbOmmVBNv+5imVF5UfB6/Qy5dSQmzVQlwAUlJeHpLCE92r6CiLUQix+yplUrzNWxbNkKCvKKUdSwoK79ah1FRUeoVSsxWkwq/w0GQlx7XV8aN77wpJJh1jSs1uqO4VcUQOXUF7Zpma+w/PP/4nBamfzsQyQdfb8KrPkii1lvfvzbfIZmE0PvuIGEhPhqDh4p7RaxFn5vbN++g6mTZ2DSVK674TI++uA/7Np5kA8+mMewYbdFxazNZg0M8PlDXPrHi+nevcsZ7cNqs4EBhh4etvrz7h5OXYChaSZCuoFCeGGzOkpLy3hl2gKSUx0MvOkKBgy4Mur54mIPcHqx1k9SfBQMBiOhi7PJZDNppnATME2lX78+p0wZFM5vJMAlRBEMBnnu2ZcpK62gcdN0HhnzIMPvvQWAZybP5Pt12VGvv+CCOpg0FZtdY/36jdWmtB0vpi1bNsPnC+FwmZn30UIM3TjBy43a1lGFU4ia8xcIBFm4YDHbtu6r9j25XC7S6rtQTSpLFi+nrKw8sv2q+wgXwFSGiKzWqG34/X42btx8knuK4+4gzCbmz1uIz+ePbLvE4yE39yAAyXUSTlgrUCK2P3HhsU5yHUIhHW95gG3bdlR/gZBqQfGshVhHISdnLwsXLD5BSA2gXdvW1G+QERHI+fMX8cnCL7HbzTw29n5sNivXXns18z5cwu5debzwwgxe/NdUbLawmKWk1OEPHZvww7rtvD3rQ1JTL6Bz504kJsbj9wc4fLiQzZu3kJOzm2HDbotUJHbq1IEGDZPJzzvC22/Nx+V20q1rZ6w2K0eOFJOdvYFu3TrRvn07ABwOG4oSDsnMfH0OhYVH8JaXs2bNN7z37nLi4q3VFl84HHauH3gZc99dyo+b9/DwQ0/QunULNM2EZjYzePCNKIqC0+VEURVUVWHJkuV07doJu8POzh05LFiwlNUrv0dVFXTdYNXKLzF0g+ZV5hEevaZMGDeT7OxN9Ox1CU6Hg6/WfsPG7BxQoEmThlHhCrPZQmItJx6Pl8WffI7NZqFevXR69foTAB06tossLj4xdjJjnwjSrl0b4uLc+Hx+DhUcYv36TRwpLubWW2+S013EWohZqVZgQ/YORj0w8YTnAv4QL7/6z4hY5+cV8K8X3sBq1eh2URvatGkNhFPwbh40gCcencaKZd8xd+4HDBoUFjiHw8Hw4bcz4u6xFOQXM+r+p/CWBfCWBTGZFewODYtV46JL2jB06ODIvt1uFw89cg/3Dv8HAJnPzmJqYCaGbqCaVPy+IG+/e6zcPSUlheQ6CeTnHWHNF9l8ufoHQMHlsjFn7lQyn5/O5o27q7GBws03X8+yz78iP6+Yzz7N4rNPswBIS09i8OAbI6I+ctR1zH5rITu3H+DmgSMxjHAxzl+vupR/v/cig26+j2BQZ8qk1zl8uJCHmjeNukg0bVaP9z58lDuHjmLNF9mR/aOEuxxeeVW/qOZZTqeDDp1asmLZt2zdspenJ05n0OC/RsQ6MTGR5zLHcu+If5Cfd4ThfxuLtyxARXkIzaJgd5ixWE30H9BLTnYRayEm41uqSqt2dU9ZfBHSj3XdC4VCTJv2MharRnpGbW4fekvUvMjrruvP6lVr2bf3AB/PX0rPnn+M9Py45NIevDX7eSZPnsbuXQc4UlSKw6WjVlY8JtWOp1WrZlEipSgK/fr1ZtZsN88/N509uw9QUuxF1w0sFhOpdRMj3jtAnTrJPPLofTw1IZP8vCNomomM+nV47PEHadu2FXFxLupckBDx3I+nabMmzH1/Bi+8MINNG37E5w+AAQmJcVHHNHzEHeTlFbA+eyt+fwCn007Xbu0Z/dDfiYtzM278/cx689/4/UHsjmP9VqxWC42apDFo8HW0bt2SN956nn+On0rOzn2EQjrJyQnce98wunTpFHVcVquVMY8+gN//NHkH8zEMsDuiF2J79+nF6286mZY5gz27D1JsLsPpNjCZFFxuO8nJCbRt30pO+vPd8TKk28ovSmbmSzyfORtVUbj2ml489X/jfpX9hkIhSko8p32d3W7DZrNhGOFCj6OnQ3x83Amx1bKyMvz+cMqd3WY7oaDG5/NRWFhESYmHUCiIoqg4HQ7cce6Tbu/YdsspLCyktLQUwzDQNDOJiQkkJSVF9QsxDIOCgkMcPnwYVVWpk5xMYq1EdF3n8OFCdF3HrGkk1kqsNiRiGAZlZeUEgwEMozJX+bgMi0AgSGFhIcFgEKvVSq1aiVHH7vGUEgwGMZs1XK5wAU1FhQ+fz4fNZotcIL1eL8XFxei6gcvlJC4urtrPwe8PUF5ehmEQtd2qlJd7KSoqwuMpRddDqKqK0+kkLs5NXFzcr9aDo6ysnLZt+6BpKoFAiDlznqXFceGgoxc/t1tG2YlnLZwSk8lEYmLCWYRLlOrTwiK37E4qW4KcFKvVSmpqCqmpKWd1rE6nA6fTcUbHWKdO8gmVg6qqnvEYLUVRcLmcp3yN2aydspPdycrgbTZr1J1A+EJoP223w6NYLGYsllN/Xg6HHYfDLif37/VuWUwgCIIgYi0IgiCIWMcaErsTBEHEukZiMpnACKfQVVQp5hCEWEU/bhCuqooTImJ9HuCwOyLTMkpKPDLqSIh5/JVNuIDKUnizGEXEOvZJS0shGAyXAns8pZFuc4IQq3g8nkhZvq4buN1uMYqIdexTLyMdvz9821hW5sXrrRCjCDFNfn5BJPRhNptITIwXo4hYxz7p6XVxucL5twcPFlJcXCxGEWIWwzDYsX1npNDlL706YbFYxDAi1rGPw+Ggd+/OAJSWVrBp0xYxihDTYv3dd8c6L/a4uKsYRcT6/MBkUunQoW3k8ezZH0g7SyFmOXToEHPe+QwAm81MixZNZdFcxPr8QFEUunbtRCAQjluvXbuRTRvFuxZi06t+//352GzhLhWpqUmkpaWc9vwXRKxjhlatWtCtW8uwwVWFTxZ/Kt61EHMUF5ewaOHnaJpKMKgzYEDfkzacEqEWsY5ZTCYTI0bcHpk8/eKLc4+bOiIINZ/33vuIrdtyAaiXnkTfvr1PGQIRsRaxjknatWtDmzYNMQCbTWPKlBcoLS0TwwgxwaZNW8jMnBWZlDPgmr6nza+uriWuIGJdo3G5XIwZc3+45AvIytrI66+/JYszQo3H4yll3LhJ+P3hob/pdWtz7bVXnbbMXKati1jHLK1bt+Luuwei6waGAdOmzWb+vIViGKHGUlHhY/z4p1m3bhsQnrI+9vG/43Q6T/u3ItYi1jGLyaRy551D6NGjTeVtosJ9IyeycMFiWXAUahylpaVMmDCZjz5aEfGi77zzBjp2bH/av1UURcT6HCNjvX4DcnP3M3ToSHJy8gCwWEyMGHELQ4bcgtVqFQMJvzn5+QWMfWwCK1etwzAMDMNgwICePPDAPaec63kUi8VyxlNyBBHrGk1Ozm5GjBjNjh0HgHBDnCuuuJgRI+6gceOGYiDhNyEUCrFy5RdMnvwvduzYH8noGDCgJ/fdd9cZjRULj05zyQKjiPX5w549+3h87AS+XLMhcpupKApjxtxFz56XRqaHC8IvTSAQYNvW7bz99lz+Pfc/aJoacSKGDu3PkCE3Y7PZzmhbmqadUUxbELGOKUpKPDwzdRrvf/CfSJUjQEKCk549u3HDDf1p1KghVqsFTdPEWxF+NoZhoOs6gUCQ8vJyvvnmW2bOfIfNm3dRUXGshW9iopN777mNvv16o2lnFn9WFAWn0ynxahHr85NgIMjarK95/PHJ5OYejvpSBYM6TZqk0bRpA2rXrkVaWioJCfHYJLYtnCW6YeD1esnPL+DgwXzy8gpYv347hw55MJtNUYL75z93YMSIYdSrl35W+7BarWfsgQsi1jFLbu5+Pv98Oa+/9h45u/IjPRiqEgrp6LqBLh+bcLZf9koh1jT1hOpCwzDwePxccUU3rr3mCjp17oCmaWe1fZPJhNPplMpFEevfgeej65SWluL1elm9ag0rVn7Jxg3b2bvvEBBO9ZMvgvDzwyBHQyEGZrOJZs3Sadu2OX369KR165Y/KdQm4Q8R698doVCIsrKyyhBIkPJyL3l5+ezYkcPGjVvYuWMPRUUleL0yfFc4e0F1uR3USU6kefMmNGvemIYNLyQhIR673faT10MURcHhcJy1Jy6IWMc8YZEujypFP+pRH815BfnYhJ8SCAFVUaDK+fRzLwB2ux2zWYbmilj/jj3s8vJyqWwUaiyqqmK328WjFrEWjMrVe5mILtQ0NE3D4XDIGoqItVCVYDCI1+sVL1uoEd60zWZD0zQRahFroTovOxAI4Pf7CYVCYhDhVxdps9mM1WoVkRaxFs7G0/b7/QSDwYiQC8I5FYZKQdY0DYvFInFpEWvh53rbR39CoVCVTBFB+GkCrSgKqqqiqmrksSBiLQiCIJwh0hVIEARBxFoQBEEQsRYEQRCxFgRBEESsBUEQBBFrQRCE84n/BxPQLLPd2UnlAAAAAElFTkSuQmCC" alt="commandbuffer lifecycle">
</div>
<div class="title">Figure 5. Lifecycle of a command-buffer.</div>
</div>
-<div id="pending_count" class="paragraph">
-<p>The Pending Count is the number of copies of the command
-buffer in the <a href="#pending">Pending</a> state.
-By default a command-buffer’s Pending Count must be 0 or 1.
-If the command-buffer was created with
-<a href="#CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>SIMULTANEOUS_<wbr>USE_<wbr>KHR</code></a> then the command-buffer may have a
-Pending Count greater than 1.</p>
-</div>
</div>
<div class="sect3">
<h4 id="_creating_command_buffer_objects"><a class="anchor" href="#_creating_command_buffer_objects"></a>5.17.3. Creating Command-Buffer Objects</h4>
@@ -33642,11 +36839,10 @@
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_command_<wbr>buffer_<wbr>flags_<wbr>khr</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">This is a bitfield and can be set to a combination of the following values:</p>
<p class="tableblock"> <a id="CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR"></a><a href="#CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>SIMULTANEOUS_<wbr>USE_<wbr>KHR</code></a> - Allow multiple
- instances of the command-buffer to be submitted to the device for
- execution.
- If set, devices must support
+ instances of the command-buffer to be scheduled for execution on the
+ device in a usage pattern that exhibits <a href="#simultaneous-use">simultaneous use</a>. If set, devices must support
<a href="#CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>CAPABILITY_<wbr>SIMULTANEOUS_<wbr>USE_<wbr>KHR</code></a>.</p>
-<p class="tableblock">provided by the <code>cl_khr_command_buffer</code> extension.</p>
+<p class="tableblock">provided by the <code>cl_khr_command_buffer_mutable_dispatch</code> extension.</p>
<p class="tableblock"> <a id="CL_COMMAND_BUFFER_DEVICE_SIDE_SYNC_KHR"></a><a href="#CL_COMMAND_BUFFER_DEVICE_SIDE_SYNC_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>DEVICE_<wbr>SIDE_<wbr>SYNC_<wbr>KHR</code></a> - All commands in the
command-buffer must use native synchronization, as reported by
<a href="#CL_DEVICE_COMMAND_BUFFER_SYNC_DEVICES_KHR"><code>CL_DEVICE_<wbr>COMMAND_<wbr>BUFFER_<wbr>SYNC_<wbr>DEVICES_<wbr>KHR</code></a>.
@@ -33741,25 +36937,6 @@
</tr>
</tbody>
</table>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-<div class="paragraph">
-<p>Upon creation the command-buffer is defined as being in the
-<a href="#recording">Recording</a> state, in order for the command-buffer to be enqueued
-it must first be finalized using <a href="#clFinalizeCommandBufferKHR"><strong>clFinalizeCommandBufferKHR</strong></a> after which no
-further commands can be recorded.
-A command-buffer is submitted for execution on command-queues with a call to
-<a href="#clEnqueueCommandBufferKHR"><strong>clEnqueueCommandBufferKHR</strong></a>.</p>
-</div>
-</td>
-</tr>
-</table>
-</div>
<div class="paragraph">
<p><a href="#clCreateCommandBufferKHR"><strong>clCreateCommandBufferKHR</strong></a> returns a valid non-zero command-buffer and
<em>errcode_ret</em> is set to <a href="#CL_SUCCESS"><code>CL_SUCCESS</code></a> if the command-buffer is created
@@ -33999,9 +37176,10 @@
</td>
<td class="content">
<div class="paragraph">
-<p><a href="#clFinalizeCommandBufferKHR"><strong>clFinalizeCommandBufferKHR</strong></a> places the command-buffer in the
-<a href="#executable">Executable</a> state where commands can no longer be recorded, at
-this point the command-buffer is ready to be enqueued.</p>
+<p><a href="#clFinalizeCommandBufferKHR"><strong>clFinalizeCommandBufferKHR</strong></a> places the command-buffer either in the
+<a href="#finalized">Finalized</a> or <a href="#executable">Executable</a> states where commands can
+no longer be recorded. If the new state is <a href="#executable">Executable</a>, the
+command-buffer is ready to be enqueued.</p>
</div>
</td>
</tr>
@@ -34101,21 +37279,6 @@
</li>
</ul>
</div>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-<div class="paragraph">
-<p>To enqueue a command-buffer it must be in a <a href="#executable">Executable</a> state,
-see <a href="#clFinalizeCommandBufferKHR"><strong>clFinalizeCommandBufferKHR</strong></a>.</p>
-</div>
-</td>
-</tr>
-</table>
-</div>
<div class="paragraph">
<p><a href="#clEnqueueCommandBufferKHR"><strong>clEnqueueCommandBufferKHR</strong></a> returns <a href="#CL_SUCCESS"><code>CL_SUCCESS</code></a> if the command-buffer
execution was successfully queued, or one of the errors below:</p>
@@ -34127,11 +37290,8 @@
command-buffer.</p>
</li>
<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>command_buffer</em> has not been finalized.</p>
-</li>
-<li>
-<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>command_buffer</em> was not created with the
-<a href="#CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>SIMULTANEOUS_<wbr>USE_<wbr>KHR</code></a> flag and is in the <a href="#pending">Pending</a> state.</p>
+<p><a href="#CL_INVALID_OPERATION"><code>CL_INVALID_<wbr>OPERATION</code></a> if <em>command_buffer</em> is not in the
+<a href="#executable">Executable</a> state.</p>
</li>
<li>
<p><a href="#CL_INVALID_VALUE"><code>CL_INVALID_<wbr>VALUE</code></a> if <em>queues</em> is <code>NULL</code> and <em>num_queues</em> is > 0, or
@@ -34192,6 +37352,12 @@
</div>
</div>
</div>
+<div class="paragraph">
+<p>Calling <a href="#clEnqueueCommandBufferKHR"><strong>clEnqueueCommandBufferKHR</strong></a> in a usage pattern that exhbits
+<a href="#simultaneous-use">simultaneous use</a> when <em>command_buffer</em> was not created
+with the <a href="#CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>SIMULTANEOUS_<wbr>USE_<wbr>KHR</code></a> flag results in undefined
+behavior.</p>
+</div>
</div>
<div class="sect3">
<h4 id="_recording_commands_to_a_command_buffer"><a class="anchor" href="#_recording_commands_to_a_command_buffer"></a>5.17.5. Recording Commands to a Command-Buffer</h4>
@@ -35807,7 +38973,9 @@
by clCommandNDRangeKernelKHR</a> table.</p>
</li>
<li>
-<p><em>kernel</em> is a valid kernel object which <strong>must</strong> have its arguments set.
+<p><em>kernel</em> is a valid kernel object, which <strong>must</strong> have its arguments set
+unless the command has the <a href="#CL_MUTABLE_DISPATCH_ARGUMENTS_KHR"><code>CL_MUTABLE_<wbr>DISPATCH_<wbr>ARGUMENTS_<wbr>KHR</code></a> property set
+(see description of argument <em>mutable_handle</em>).
Any changes to <em>kernel</em> after calling <a href="#clCommandNDRangeKernelKHR"><strong>clCommandNDRangeKernelKHR</strong></a>, such
as with <a href="#clSetKernelArg"><strong>clSetKernelArg</strong></a> or <a href="#clSetKernelExecInfo"><strong>clSetKernelExecInfo</strong></a>, have no effect on the
recorded command.
@@ -35977,6 +39145,18 @@
Otherwise, it returns the errors defined by <a href="#clEnqueueNDRangeKernel"><strong>clEnqueueNDRangeKernel</strong></a> except:</p>
</div>
<div class="paragraph">
+<p><a href="#CL_INVALID_KERNEL_ARGS"><code>CL_INVALID_<wbr>KERNEL_<wbr>ARGS</code></a> is replaced with:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#CL_INVALID_KERNEL_ARGS"><code>CL_INVALID_<wbr>KERNEL_<wbr>ARGS</code></a> if the kernel argument values have not been
+specified and the <a href="#CL_MUTABLE_DISPATCH_ARGUMENTS_KHR"><code>CL_MUTABLE_<wbr>DISPATCH_<wbr>ARGUMENTS_<wbr>KHR</code></a> flag was not set in
+the <em>properties</em> parameter.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
<p><a href="#CL_INVALID_COMMAND_QUEUE"><code>CL_INVALID_<wbr>COMMAND_<wbr>QUEUE</code></a> is replaced with:</p>
</div>
<div class="ulist">
@@ -36571,9 +39751,7 @@
</ul>
</div>
<div class="paragraph">
-<p>The returned command-buffer has the same state as the input command-buffer,
-unless the input command-buffer is in the <a href="#pending">Pending</a> state, in
-which case the returned command-buffer has state <a href="#executable">Executable</a>.</p>
+<p>The returned command-buffer has the same state as the input command-buffer.</p>
</div>
<div class="paragraph">
<p><a href="#clRemapCommandBufferKHR"><strong>clRemapCommandBufferKHR</strong></a> returns a valid command-buffer with <em>errcode_ret</em>
@@ -36706,6 +39884,13 @@
<div class="openblock">
<div class="content">
<div class="paragraph">
+<p>When recording an ND-range kernel command, the kernel’s arguments do not have to
+be set, and setting them may be postponed to after the command buffer’s
+finalization (in which case, the command buffer is in Finalized state).
+All the arguments must be set before the command buffer can be enqueued
+for execution (Executable state).</p>
+</div>
+<div class="paragraph">
<p>To modify the configuration of mutable-command handles returned during
<em>command_buffer</em> recording, updating the behavior of those commands in
future enqueues of <em>command_buffer</em>, call the function</p>
@@ -36796,11 +39981,6 @@
</li>
</ul>
</div>
-<div class="paragraph">
-<p>Using this function when <em>command_buffer</em> is in the <a href="#pending">pending</a>
-state and not created with the <a href="#CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>SIMULTANEOUS_<wbr>USE_<wbr>KHR</code></a> flag
-causes undefined behavior.</p>
-</div>
<div class="admonitionblock note">
<table>
<tr>
@@ -37174,7 +40354,7 @@
<em>command_buffer</em> was created.</p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_COMMAND_BUFFER_REFERENCE_COUNT_KHR"></a><a href="#CL_COMMAND_BUFFER_REFERENCE_COUNT_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>REFERENCE_<wbr>COUNT_<wbr>KHR</code></a> <sup class="footnote">[<a id="_footnoteref_33" class="footnote" href="#_footnotedef_33" title="View footnote.">33</a>]</sup></p>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="CL_COMMAND_BUFFER_REFERENCE_COUNT_KHR"></a><a href="#CL_COMMAND_BUFFER_REFERENCE_COUNT_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>REFERENCE_<wbr>COUNT_<wbr>KHR</code></a> <sup class="footnote">[<a id="_footnoteref_35" class="footnote" href="#_footnotedef_35" title="View footnote.">35</a>]</sup></p>
<p class="tableblock">provided by the <code>cl_khr_command_buffer</code> extension.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_uint</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Return the <em>command_buffer</em> reference count.</p></td>
@@ -37187,13 +40367,13 @@
<p class="tableblock"> <a id="CL_COMMAND_BUFFER_STATE_RECORDING_KHR"></a><a href="#CL_COMMAND_BUFFER_STATE_RECORDING_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>STATE_<wbr>RECORDING_<wbr>KHR</code></a> is returned when
<em>command_buffer</em> has not been finalized.</p>
<p class="tableblock">provided by the <code>cl_khr_command_buffer</code> extension.</p>
+<p class="tableblock"> <a id="CL_COMMAND_BUFFER_STATE_FINALIZED_KHR"></a><a href="#CL_COMMAND_BUFFER_STATE_FINALIZED_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>STATE_<wbr>FINALIZED_<wbr>KHR</code></a> is returned when an
+ instance of <em>command_buffer</em> has been finalized, but there is at least
+ one command for which not all arguments or parameters have been set.</p>
+<p class="tableblock">provided by the <code>cl_khr_command_buffer_mutable_dispatch</code> extension.</p>
<p class="tableblock"> <a id="CL_COMMAND_BUFFER_STATE_EXECUTABLE_KHR"></a><a href="#CL_COMMAND_BUFFER_STATE_EXECUTABLE_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>STATE_<wbr>EXECUTABLE_<wbr>KHR</code></a> is returned when
- <em>command_buffer</em> has been finalized and there is not a <a href="#pending">Pending</a> instance of <em>command_buffer</em> awaiting completion on a
- command_queue.</p>
-<p class="tableblock">provided by the <code>cl_khr_command_buffer</code> extension.</p>
-<p class="tableblock"> <a id="CL_COMMAND_BUFFER_STATE_PENDING_KHR"></a><a href="#CL_COMMAND_BUFFER_STATE_PENDING_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>STATE_<wbr>PENDING_<wbr>KHR</code></a> is returned when an
- instance of <em>command_buffer</em> has been enqueued for execution but not
- yet completed.</p>
+ <em>command_buffer</em> has been finalized, all the arguments and parameters of
+ all commands have been set.</p>
<p class="tableblock">provided by the <code>cl_khr_command_buffer</code> extension.</p></td>
</tr>
<tr>
@@ -37644,51 +40824,36 @@
</div>
</div>
<div class="sect1">
-<h2 id="_associated_opencl_specification"><a class="anchor" href="#_associated_opencl_specification"></a>6. Associated OpenCL specification</h2>
+<h2 id="_associated_opencl_specifications"><a class="anchor" href="#_associated_opencl_specifications"></a>6. Associated OpenCL Specifications</h2>
<div class="sectionbody">
<div class="sect2">
-<h3 id="spirv-il"><a class="anchor" href="#spirv-il"></a>6.1. SPIR-V Intermediate Language</h3>
+<h3 id="opencl-c-kernel-language"><a class="anchor" href="#opencl-c-kernel-language"></a>6.1. The OpenCL C Kernel Language</h3>
<div class="paragraph">
-<p>OpenCL 2.1 and 2.2 require support for the SPIR-V intermediate
-language that allows offline compilation to a binary
-format that may be consumed by the <a href="#clCreateProgramWithIL"><strong>clCreateProgramWithIL</strong></a> interface.</p>
-</div>
-<div class="paragraph">
-<p>The OpenCL specification includes a specification for the SPIR-V
-intermediate language as a cross-platform input language.
-In addition, platform vendors may support their own IL if this is
-appropriate.
-The OpenCL runtime will return a list of supported IL versions using the
-<a href="#CL_DEVICE_IL_VERSION"><code>CL_DEVICE_<wbr>IL_<wbr>VERSION</code></a> or <a href="#CL_DEVICE_ILS_WITH_VERSION"><code>CL_DEVICE_<wbr>ILS_<wbr>WITH_<wbr>VERSION</code></a> parameter to
-the <a href="#clGetDeviceInfo"><strong>clGetDeviceInfo</strong></a> query.</p>
+<p>The OpenCL C kernel language is defined in the OpenCL C unified
+specification, which specifies all versions of OpenCL C.
+When an OpenCL device supports one or more versions of the OpenCL C kernel
+language (see <a href="#CL_DEVICE_OPENCL_C_VERSION"><code>CL_DEVICE_<wbr>OPENCL_<wbr>C_<wbr>VERSION</code></a> and
+<a href="#CL_DEVICE_OPENCL_C_ALL_VERSIONS"><code>CL_DEVICE_<wbr>OPENCL_<wbr>C_<wbr>ALL_<wbr>VERSIONS</code></a>), OpenCL program objects may be created by
+passing OpenCL C source strings to <a href="#clCreateProgramWithSource"><strong>clCreateProgramWithSource</strong></a>.</p>
</div>
</div>
<div class="sect2">
-<h3 id="opencl-extensions"><a class="anchor" href="#opencl-extensions"></a>6.2. Extensions to OpenCL</h3>
+<h3 id="spirv-il"><a class="anchor" href="#spirv-il"></a>6.2. SPIR-V Intermediate Language</h3>
+<div class="paragraph">
+<p>The OpenCL specifications include the SPIR-V specification, which defines a
+cross-platform intermediate language.
+When an OpenCL device supports one or more versions of SPIR-V (see
+<a href="#CL_DEVICE_IL_VERSION"><code>CL_DEVICE_<wbr>IL_<wbr>VERSION</code></a> or <a href="#CL_DEVICE_ILS_WITH_VERSION"><code>CL_DEVICE_<wbr>ILS_<wbr>WITH_<wbr>VERSION</code></a>), OpenCL program objects
+may be created by passing SPIR-V to <a href="#clCreateProgramWithIL"><strong>clCreateProgramWithIL</strong></a>.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="opencl-extensions"><a class="anchor" href="#opencl-extensions"></a>6.3. Extensions to OpenCL</h3>
<div class="paragraph">
<p>In addition to the specification of core features, OpenCL provides a number
-of extensions to the API, kernel language or intermediate representation.
-These features are defined in the OpenCL extension specification document.</p>
-</div>
-<div class="paragraph">
-<p>Extensions defined against earlier versions of the OpenCL specifications,
-whether the API or language specification, are defined in the matching
-versions of the extension specification document.</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="opencl-c-kernel-language"><a class="anchor" href="#opencl-c-kernel-language"></a>6.3. The OpenCL C Kernel Language</h3>
-<div class="paragraph">
-<p>The OpenCL C kernel language is not defined in the OpenCL unified
-specification.
-The OpenCL C kernel languages are instead defined in the OpenCL 1.0,
-OpenCL 1.1, OpenCL 1.2, OpenCL C 2.0 Kernel Language, and OpenCL C 3.0
-Kernel Language specifications.
-When OpenCL devices support one or more versions of the OpenCL C
-kernel language (see <a href="#CL_DEVICE_OPENCL_C_VERSION"><code>CL_DEVICE_<wbr>OPENCL_<wbr>C_<wbr>VERSION</code></a> and
-<a href="#CL_DEVICE_OPENCL_C_ALL_VERSIONS"><code>CL_DEVICE_<wbr>OPENCL_<wbr>C_<wbr>ALL_<wbr>VERSIONS</code></a>),
-OpenCL program objects may be created by passing OpenCL C source
-strings to <a href="#clCreateProgramWithSource"><strong>clCreateProgramWithSource</strong></a>.</p>
+of extensions to the API, kernel language, or intermediate representation.
+These extensions are described in the OpenCL specifications or in vendor-provided
+documentation.</p>
</div>
</div>
</div>
@@ -37699,11 +40864,10 @@
<div class="paragraph">
<p>The OpenCL specification describes the feature requirements for desktop
platforms.
-This section describes the OpenCL embedded profile that allows us to
-target a subset of the OpenCL specification for handheld and embedded
+This section describes the OpenCL embedded profile, which defines
+a subset of the OpenCL specification for handheld and embedded
platforms.
-The optional extensions defined in the OpenCL Extension Specification
-apply to both profiles.</p>
+Optional OpenCL extensions may apply to both profiles.</p>
</div>
<div class="paragraph">
<p>The OpenCL embedded profile has the following restrictions until version 2.0 (i.e. the optionality described below was <a href="#unified-spec">deprecated by</a> version 2.0):</p>
@@ -37741,7 +40905,7 @@
<p>Image and image arrays created with an
<code>image_channel_data_type</code> value of <a href="#CL_FLOAT"><code>CL_FLOAT</code></a> or <a href="#CL_HALF_FLOAT"><code>CL_HALF_<wbr>FLOAT</code></a> can only be
used with samplers that use a filter mode of <a href="#CL_FILTER_NEAREST"><code>CL_FILTER_<wbr>NEAREST</code></a>.
-The values returned by <strong>read_imagef</strong> <sup class="footnote">[<a id="_footnoteref_34" class="footnote" href="#_footnotedef_34" title="View footnote.">34</a>]</sup> for 2D and 3D
+The values returned by <strong>read_imagef</strong> <sup class="footnote">[<a id="_footnoteref_36" class="footnote" href="#_footnotedef_36" title="View footnote.">36</a>]</sup> for 2D and 3D
images if <code>image_channel_data_type</code> value is <a href="#CL_FLOAT"><code>CL_FLOAT</code></a> or <a href="#CL_HALF_FLOAT"><code>CL_HALF_<wbr>FLOAT</code></a>
and sampler with filter_mode = <a href="#CL_FILTER_LINEAR"><code>CL_FILTER_<wbr>LINEAR</code></a> are undefined.</p>
</li>
@@ -37756,7 +40920,7 @@
<li>
<p>64 bit integers i.e. long, ulong including the appropriate vector data
types and operations on 64-bit integers are optional.
-The <strong>cles_khr_int64</strong> <sup class="footnote">[<a id="_footnoteref_35" class="footnote" href="#_footnotedef_35" title="View footnote.">35</a>]</sup> extension string will
+The <strong>cles_khr_int64</strong> <sup class="footnote">[<a id="_footnoteref_37" class="footnote" href="#_footnotedef_37" title="View footnote.">37</a>]</sup> extension string will
be reported if the embedded profile implementation supports 64-bit integers.
If double precision is supported i.e. <a href="#CL_DEVICE_DOUBLE_FP_CONFIG"><code>CL_DEVICE_<wbr>DOUBLE_<wbr>FP_<wbr>CONFIG</code></a> is not
zero, then <strong>cles_khr_int64</strong> must also be supported.</p>
@@ -38086,18 +41250,20 @@
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#CL_DEVICE_COMPILER_AVAILABLE"><code>CL_DEVICE_<wbr>COMPILER_<wbr>AVAILABLE</code></a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_bool</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Is <a href="#CL_FALSE"><code>CL_FALSE</code></a> if the implementation does not have a compiler available
- to compile the program source.</p>
-<p class="tableblock"> Is <a href="#CL_TRUE"><code>CL_TRUE</code></a> if the compiler is available.
- This can be <a href="#CL_FALSE"><code>CL_FALSE</code></a> for the embedded platform profile only.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Is <a href="#CL_TRUE"><code>CL_TRUE</code></a> if a compiler is available to compile programs created from
+ source or IL, or <a href="#CL_FALSE"><code>CL_FALSE</code></a> if the implementation does not have a
+ compiler available.</p>
+<p class="tableblock"> This can be <a href="#CL_FALSE"><code>CL_FALSE</code></a> for devices supporting the embedded profile.</p>
+<p class="tableblock"> When an online compiler is not available, OpenCL programs may still be
+ created from binaries or built-in kernels supported by the device.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#CL_DEVICE_LINKER_AVAILABLE"><code>CL_DEVICE_<wbr>LINKER_<wbr>AVAILABLE</code></a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_bool</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Is <a href="#CL_FALSE"><code>CL_FALSE</code></a> if the implementation does not have a linker available.
- Is <a href="#CL_TRUE"><code>CL_TRUE</code></a> if the linker is available.</p>
-<p class="tableblock"> This can be <a href="#CL_FALSE"><code>CL_FALSE</code></a> for the embedded platform profile only.</p>
-<p class="tableblock"> This must be <a href="#CL_TRUE"><code>CL_TRUE</code></a> if <a href="#CL_DEVICE_COMPILER_AVAILABLE"><code>CL_DEVICE_<wbr>COMPILER_<wbr>AVAILABLE</code></a> is <a href="#CL_TRUE"><code>CL_TRUE</code></a>.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Is <a href="#CL_TRUE"><code>CL_TRUE</code></a> if a linker is available to link compiled programs, or
+ <a href="#CL_FALSE"><code>CL_FALSE</code></a> if the implementation does not have a linker available.</p>
+<p class="tableblock"> This can be <a href="#CL_FALSE"><code>CL_FALSE</code></a> for devices supporting the embedded profile, but
+ must be <a href="#CL_TRUE"><code>CL_TRUE</code></a> if <a href="#CL_DEVICE_COMPILER_AVAILABLE"><code>CL_DEVICE_<wbr>COMPILER_<wbr>AVAILABLE</code></a> is <a href="#CL_TRUE"><code>CL_TRUE</code></a>.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE"><code>CL_DEVICE_<wbr>QUEUE_<wbr>ON_<wbr>DEVICE_<wbr>MAX_<wbr>SIZE</code></a></p></td>
@@ -38163,7 +41329,7 @@
</table>
<div class="paragraph">
<p>For embedded profiles devices that support reading from and writing to the same
-image object from the same kernel instance (see <a href="#CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS"><code>CL_DEVICE_<wbr>MAX_<wbr>READ_<wbr>WRITE_<wbr>IMAGE_<wbr>ARGS</code></a>)
+image object from the same kernel-instance (see <a href="#CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS"><code>CL_DEVICE_<wbr>MAX_<wbr>READ_<wbr>WRITE_<wbr>IMAGE_<wbr>ARGS</code></a>)
there is no required minimum list of supported image formats.</p>
</div>
</div>
@@ -38203,14 +41369,14 @@
<h3 id="_multiple_host_threads"><a class="anchor" href="#_multiple_host_threads"></a>Multiple Host Threads</h3>
<div class="paragraph">
<p>OpenCL calls that modify the state of <code>cl_kernel</code> objects are not
-thread-safe <sup class="footnote">[<a id="_footnoteref_36" class="footnote" href="#_footnotedef_36" title="View footnote.">36</a>]</sup>: <a href="#clSetKernelArg"><strong>clSetKernelArg</strong></a>,
+thread-safe <sup class="footnote">[<a id="_footnoteref_38" class="footnote" href="#_footnotedef_38" title="View footnote.">38</a>]</sup>: <a href="#clSetKernelArg"><strong>clSetKernelArg</strong></a>,
<a href="#clSetKernelArgSVMPointer"><strong>clSetKernelArgSVMPointer</strong></a>, <a href="#clSetKernelExecInfo"><strong>clSetKernelExecInfo</strong></a> and <a href="#clCloneKernel"><strong>clCloneKernel</strong></a>.
These APIs are safe to call from any host thread so long as concurrent calls
operate on different <code>cl_kernel</code> objects.
The state of a <code>cl_kernel</code> object is undefined if <a href="#clSetKernelArg"><strong>clSetKernelArg</strong></a>,
<a href="#clSetKernelArgSVMPointer"><strong>clSetKernelArgSVMPointer</strong></a>, <a href="#clSetKernelExecInfo"><strong>clSetKernelExecInfo</strong></a> or <a href="#clCloneKernel"><strong>clCloneKernel</strong></a> are called
from multiple host threads on the same <code>cl_kernel</code> object at the same time
-<sup class="footnote">[<a id="_footnoteref_37" class="footnote" href="#_footnotedef_37" title="View footnote.">37</a>]</sup>.</p>
+<sup class="footnote">[<a id="_footnoteref_39" class="footnote" href="#_footnotedef_39" title="View footnote.">39</a>]</sup>.</p>
</div>
<div class="paragraph">
<p>Additionally, OpenCL calls that modify the state of <code>cl_command_<wbr>buffer_<wbr>khr</code>
@@ -38396,7 +41562,7 @@
That is the transformation is equally valid whether that vector was a
<code>uchar16</code> or a <code>ulong2</code>.
Of course, as is well known, little-endian machines
-actually <sup class="footnote">[<a id="_footnoteref_38" class="footnote" href="#_footnotedef_38" title="View footnote.">38</a>]</sup> store their data in reverse byte order to
+actually <sup class="footnote">[<a id="_footnoteref_40" class="footnote" href="#_footnotedef_40" title="View footnote.">40</a>]</sup> store their data in reverse byte order to
compensate for the little-endian storage format of the array elements:</p>
</div>
<div class="paragraph">
@@ -38559,7 +41725,7 @@
</div>
<div class="listingblock">
<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float</span> <span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> <span class="mf">0.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">2.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">3.0</span><span class="n">f</span> <span class="p">};</span>
+<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float</span> <span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> <span class="mf">0.0f</span><span class="p">,</span> <span class="mf">1.0f</span><span class="p">,</span> <span class="mf">2.0f</span><span class="p">,</span> <span class="mf">3.0f</span> <span class="p">};</span>
<span class="kt">float4</span> <span class="n">v</span> <span class="o">=</span> <span class="n">vload4</span><span class="p">(</span> <span class="mi">0</span><span class="p">,</span> <span class="n">x</span> <span class="p">);</span>
<span class="kt">uint4</span> <span class="n">y</span> <span class="o">=</span> <span class="n">as_uint4</span><span class="p">(</span><span class="n">v</span><span class="p">);</span> <span class="c1">// legal, portable</span>
<span class="kt">ushort8</span> <span class="n">z</span> <span class="o">=</span> <span class="n">as_ushort8</span><span class="p">(</span><span class="n">v</span><span class="p">);</span> <span class="c1">// legal, not portable</span>
@@ -38571,7 +41737,7 @@
</div>
<div class="listingblock">
<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl"><span class="n">v</span> <span class="n">contains</span> <span class="p">{</span> <span class="mf">0.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">2.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">3.0</span><span class="n">f</span> <span class="p">}</span>
+<pre class="rouge highlight"><code data-lang="opencl"><span class="n">v</span> <span class="n">contains</span> <span class="p">{</span> <span class="mf">0.0f</span><span class="p">,</span> <span class="mf">1.0f</span><span class="p">,</span> <span class="mf">2.0f</span><span class="p">,</span> <span class="mf">3.0f</span> <span class="p">}</span>
<span class="n">y</span> <span class="n">contains</span> <span class="p">{</span> <span class="mh">0x00000000</span><span class="p">,</span> <span class="mh">0x3f800000</span><span class="p">,</span>
<span class="mh">0x40000000</span><span class="p">,</span> <span class="mh">0x40400000</span> <span class="p">}</span>
<span class="n">z</span> <span class="n">contains</span> <span class="p">{</span> <span class="mh">0x0000</span><span class="p">,</span> <span class="mh">0x0000</span><span class="p">,</span> <span class="mh">0x3f80</span><span class="p">,</span> <span class="mh">0x0000</span><span class="p">,</span>
@@ -38584,7 +41750,7 @@
</div>
<div class="listingblock">
<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl"><span class="n">v</span> <span class="n">contains</span> <span class="p">{</span> <span class="mf">3.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">2.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">0.0</span><span class="n">f</span> <span class="p">}</span>
+<pre class="rouge highlight"><code data-lang="opencl"><span class="n">v</span> <span class="n">contains</span> <span class="p">{</span> <span class="mf">3.0f</span><span class="p">,</span> <span class="mf">2.0f</span><span class="p">,</span> <span class="mf">1.0f</span><span class="p">,</span> <span class="mf">0.0f</span> <span class="p">}</span>
<span class="n">y</span> <span class="n">contains</span> <span class="p">{</span> <span class="mh">0x40400000</span><span class="p">,</span> <span class="mh">0x40000000</span><span class="p">,</span>
<span class="mh">0x3f800000</span><span class="p">,</span> <span class="mh">0x00000000</span> <span class="p">}</span>
<span class="n">z</span> <span class="n">contains</span> <span class="p">{</span> <span class="mh">0x4040</span><span class="p">,</span> <span class="mh">0x0000</span><span class="p">,</span> <span class="mh">0x4000</span><span class="p">,</span> <span class="mh">0x0000</span><span class="p">,</span>
@@ -38827,7 +41993,7 @@
</div>
<div class="listingblock">
<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl"><span class="kt">cl_float2</span> <span class="n">foo</span> <span class="o">=</span> <span class="p">{</span> <span class="p">.</span><span class="n">s</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="mf">2.0</span><span class="n">f</span> <span class="p">};</span>
+<pre class="rouge highlight"><code data-lang="opencl"><span class="kt">cl_float2</span> <span class="n">foo</span> <span class="o">=</span> <span class="p">{</span> <span class="p">.</span><span class="n">s</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="mf">2.0f</span> <span class="p">};</span>
<span class="kt">cl_int8</span> <span class="n">bar</span> <span class="o">=</span> <span class="p">{{</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mi">14</span><span class="p">,</span> <span class="mi">16</span> <span class="p">}};</span></code></pre>
</div>
</div>
@@ -38843,7 +42009,7 @@
</div>
<div class="listingblock">
<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl"><span class="n">foo</span><span class="p">.</span><span class="n">s</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">;</span> <span class="c1">// Sets the 1st vector component of foo</span>
+<pre class="rouge highlight"><code data-lang="opencl"><span class="n">foo</span><span class="p">.</span><span class="n">s</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mf">1.0f</span><span class="p">;</span> <span class="c1">// Sets the 1st vector component of foo</span>
<span class="n">pos</span><span class="p">.</span><span class="n">s</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span> <span class="c1">// Sets the 7th vector component of bar</span></code></pre>
</div>
</div>
@@ -38871,8 +42037,8 @@
<pre class="rouge highlight"><code data-lang="opencl"><span class="cp">#ifdef CL_HAS_NAMED_VECTOR_FIELDS
</span> <span class="kt">cl_float4</span> <span class="n">foo</span><span class="p">;</span>
<span class="kt">cl_int16</span> <span class="n">bar</span><span class="p">;</span>
- <span class="n">foo</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">;</span> <span class="c1">// Set first component</span>
- <span class="n">foo</span><span class="p">.</span><span class="n">s0</span> <span class="o">=</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">;</span> <span class="c1">// Same as above</span>
+ <span class="n">foo</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="mf">1.0f</span><span class="p">;</span> <span class="c1">// Set first component</span>
+ <span class="n">foo</span><span class="p">.</span><span class="n">s0</span> <span class="o">=</span> <span class="mf">1.0f</span><span class="p">;</span> <span class="c1">// Same as above</span>
<span class="n">bar</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span> <span class="c1">// Set third component</span>
<span class="n">bar</span><span class="p">.</span><span class="n">se</span> <span class="o">=</span> <span class="mi">11</span><span class="p">;</span> <span class="c1">// Same as bar.s[0xe]</span>
<span class="n">bar</span><span class="p">.</span><span class="n">sD</span> <span class="o">=</span> <span class="mi">12</span><span class="p">;</span> <span class="c1">// Same as bar.s[0xd]</span>
@@ -38882,7 +42048,7 @@
<div class="paragraph">
<p>Vector data type components may also be accessed using the <code>.rgba</code> field
naming convention, similar to how they are used within the OpenCL C 3.0
-language.
+or newer language.
Use of the <code>.rgba</code> field naming convention only allows accessing of the
first 4 component fields.
Support of these notations is identified by the <code>CL_HAS_NAMED_RGBA_VECTOR_FIELDS</code>
@@ -38894,7 +42060,7 @@
<pre class="rouge highlight"><code data-lang="opencl"><span class="cp">#ifdef CL_HAS_NAMED_RGBA_VECTOR_FIELDS
</span> <span class="kt">cl_float4</span> <span class="n">foo</span><span class="p">;</span>
<span class="kt">cl_int16</span> <span class="n">bar</span><span class="p">;</span>
- <span class="n">foo</span><span class="p">.</span><span class="n">r</span> <span class="o">=</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">;</span> <span class="c1">// Set first component</span>
+ <span class="n">foo</span><span class="p">.</span><span class="n">r</span> <span class="o">=</span> <span class="mf">1.0f</span><span class="p">;</span> <span class="c1">// Set first component</span>
<span class="n">bar</span><span class="p">.</span><span class="n">b</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span> <span class="c1">// Set third component</span>
<span class="cp">#endif</span></code></pre>
</div>
@@ -38928,7 +42094,7 @@
<div class="content">
<pre class="rouge highlight"><code data-lang="opencl"><span class="cp">#ifdef CL_HAS_HI_LO_VECTOR_FIELDS
</span> <span class="kt">cl_float4</span> <span class="n">foo</span><span class="p">;</span>
- <span class="kt">cl_float2</span> <span class="n">new_hi</span> <span class="o">=</span> <span class="mf">2.0</span><span class="n">f</span><span class="p">,</span> <span class="n">new_lo</span> <span class="o">=</span> <span class="mf">4.0</span><span class="n">f</span><span class="p">;</span>
+ <span class="kt">cl_float2</span> <span class="n">new_hi</span> <span class="o">=</span> <span class="mf">2.0f</span><span class="p">,</span> <span class="n">new_lo</span> <span class="o">=</span> <span class="mf">4.0f</span><span class="p">;</span>
<span class="n">foo</span><span class="p">.</span><span class="n">hi</span> <span class="o">=</span> <span class="n">new_hi</span><span class="p">;</span>
<span class="n">foo</span><span class="p">.</span><span class="n">lo</span> <span class="o">=</span> <span class="n">new_lo</span><span class="p">;</span>
<span class="cp">#endif</span></code></pre>
@@ -39672,7 +42838,7 @@
<ul>
<li>
<p><a href="#clSetKernelArgSVMPointer"><strong>clSetKernelArgSVMPointer</strong></a> to control which shared virtual memory (SVM)
-pointer to associate with a kernel instance.</p>
+pointer to associate with a kernel-instance.</p>
</li>
<li>
<p><a href="#clSVMAlloc"><strong>clSVMAlloc</strong></a>, <a href="#clSVMFree"><strong>clSVMFree</strong></a> and <a href="#clEnqueueSVMFree"><strong>clEnqueueSVMFree</strong></a> to allocate and free
@@ -39918,7 +43084,8 @@
runtimes.</p>
</div>
<div class="paragraph">
-<p>The SPIR-V and OpenCL SPIR-V Environment specifications have been added.</p>
+<p>The SPIR-V and OpenCL SPIR-V Environment specifications have been added.
+OpenCL 2.1 requires support for the SPIR-V 1.0 intermediate language.</p>
</div>
</div>
<div class="sect2">
@@ -39972,6 +43139,10 @@
<p>Added definition of Deprecation and Specialization constants to the
glossary.</p>
</div>
+<div class="paragraph">
+<p>OpenCL 2.2 requires support for the SPIR-V 1.0, SPIR-V 1.1, and SPIR-V 1.2
+intermediate languages.</p>
+</div>
</div>
<div class="sect2">
<h3 id="_summary_of_changes_from_opencl_2_2_to_opencl_3_0"><a class="anchor" href="#_summary_of_changes_from_opencl_2_2_to_opencl_3_0"></a>Summary of Changes from OpenCL 2.2 to OpenCL 3.0</h3>
@@ -40168,14 +43339,11 @@
</li>
</ul>
</div>
-</div>
-<div class="sect2">
-<h3 id="_summary_of_changes_from_opencl_3_0"><a class="anchor" href="#_summary_of_changes_from_opencl_3_0"></a>Summary of Changes from OpenCL 3.0</h3>
<div class="paragraph">
<p>The first non-experimental version of the OpenCL 3.0 specifications was <strong>v3.0.5</strong>.</p>
</div>
<div class="paragraph">
-<p>Changes from <strong>v3.0.5</strong>:</p>
+<p>Changes from <strong>v3.0.5</strong> to <strong>v3.0.6</strong>:</p>
</div>
<div class="ulist">
<ul>
@@ -40216,7 +43384,7 @@
</ul>
</div>
<div class="paragraph">
-<p>Changes from <strong>v3.0.6</strong>:</p>
+<p>Changes from <strong>v3.0.6</strong> to <strong>v3.0.7</strong>:</p>
</div>
<div class="ulist">
<ul>
@@ -40257,7 +43425,7 @@
</ul>
</div>
<div class="paragraph">
-<p>Changes from <strong>v3.0.7</strong>:</p>
+<p>Changes from <strong>v3.0.7</strong> to <strong>v3.0.8</strong>:</p>
</div>
<div class="ulist">
<ul>
@@ -40283,7 +43451,7 @@
</ul>
</div>
<div class="paragraph">
-<p>Changes from <strong>v3.0.8</strong>:</p>
+<p>Changes from <strong>v3.0.8</strong> to <strong>v3.0.9</strong>:</p>
</div>
<div class="ulist">
<ul>
@@ -40342,7 +43510,7 @@
</ul>
</div>
<div class="paragraph">
-<p>Changes from <strong>v3.0.9</strong>:</p>
+<p>Changes from <strong>v3.0.9</strong> to <strong>v3.0.10</strong>:</p>
</div>
<div class="ulist">
<ul>
@@ -40380,7 +43548,7 @@
</ul>
</div>
<div class="paragraph">
-<p>Changes from <strong>v3.0.10</strong>:</p>
+<p>Changes from <strong>v3.0.10</strong> to <strong>v3.0.11</strong>:</p>
</div>
<div class="ulist">
<ul>
@@ -40424,7 +43592,7 @@
</ul>
</div>
<div class="paragraph">
-<p>Changes from <strong>v3.0.11</strong>:</p>
+<p>Changes from <strong>v3.0.11</strong> to <strong>v3.0.12</strong>:</p>
</div>
<div class="ulist">
<ul>
@@ -40459,7 +43627,7 @@
</ul>
</div>
<div class="paragraph">
-<p>Changes from <strong>v3.0.12</strong>:</p>
+<p>Changes from <strong>v3.0.12</strong> to <strong>v3.0.13</strong>:</p>
</div>
<div class="ulist">
<ul>
@@ -40487,7 +43655,7 @@
</ul>
</div>
<div class="paragraph">
-<p>Changes from <strong>v3.0.13</strong>:</p>
+<p>Changes from <strong>v3.0.13</strong> to <strong>v3.0.14</strong>:</p>
</div>
<div class="ulist">
<ul>
@@ -40516,7 +43684,7 @@
</ul>
</div>
<div class="paragraph">
-<p>Changes from <strong>v3.0.14</strong>:</p>
+<p>Changes from <strong>v3.0.14</strong> to <strong>v3.0.15</strong>:</p>
</div>
<div class="ulist">
<ul>
@@ -40617,7 +43785,7 @@
<div class="ulist">
<ul>
<li>
-<p>Clarified that only rotating within a subgroup is supported, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/967">#967</a>.</p>
+<p>Clarified that only rotating within a sub-group is supported, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/967">#967</a>.</p>
</li>
</ul>
</div>
@@ -40625,7 +43793,7 @@
</ul>
</div>
<div class="paragraph">
-<p>Changes from <strong>v3.0.15</strong>:</p>
+<p>Changes from <strong>v3.0.15</strong> to <strong>v3.0.16</strong>:</p>
</div>
<div class="ulist">
<ul>
@@ -40709,7 +43877,7 @@
</ul>
</div>
<div class="paragraph">
-<p>Changes from <strong>v3.0.16</strong>:</p>
+<p>Changes from <strong>v3.0.16</strong> to <strong>v3.0.17</strong>:</p>
</div>
<div class="ulist">
<ul>
@@ -40855,7 +44023,7 @@
</ul>
</div>
<div class="paragraph">
-<p>Changes from <strong>v3.0.17</strong>:</p>
+<p>Changes from <strong>v3.0.17</strong> to <strong>v3.0.18</strong>:</p>
</div>
<div class="ulist">
<ul>
@@ -40947,7 +44115,7 @@
</ul>
</div>
<div class="paragraph">
-<p>Changes from <strong>v3.0.18</strong>:</p>
+<p>Changes from <strong>v3.0.18</strong> to <strong>v3.0.19</strong>:</p>
</div>
<div class="ulist">
<ul>
@@ -41017,7 +44185,7 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#cl_khr_external_memory_android_hardware_buffer"><code>cl_khr_<wbr>external_<wbr>memory_<wbr>android_<wbr>hardware_<wbr>buffer</code></a></p>
+<p><a href="#cl_khr_external_memory_android_hardware_buffer"><code>cl_khr_<wbr>external_<wbr>memory_<wbr>android_<wbr>hardware_<wbr>buffer</code></a> (experimental)</p>
</li>
<li>
<p><a href="#cl_khr_spirv_queries"><code>cl_khr_<wbr>spirv_<wbr>queries</code></a></p>
@@ -41028,6 +44196,149 @@
</ul>
</div>
</div>
+<div class="sect2">
+<h3 id="_summary_of_changes_from_opencl_3_0_to_opencl_3_1"><a class="anchor" href="#_summary_of_changes_from_opencl_3_0_to_opencl_3_1"></a>Summary of Changes from OpenCL 3.0 to OpenCL 3.1</h3>
+<div class="paragraph">
+<p>OpenCL 3.1 adds the OpenCL 3.1 C kernel language.
+Please refer to the OpenCL C specification for details.</p>
+</div>
+<div class="paragraph">
+<p>OpenCL 3.1 requires support for the SPIR-V 1.0, SPIR-V 1.1, SPIR-V 1.2, SPIR-V
+1.3, and SPIR-V 1.4 intermediate languages.
+Please refer to the OpenCL SPIR-V Environment specification for details.</p>
+</div>
+<div class="paragraph">
+<p>OpenCL 3.1 removes the OpenCL Extension Specification.
+The OpenCL Extension Specification is no longer needed now that EXT and KHR extensions are documented in the main OpenCL specifications.
+See <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1516">#1516</a>.</p>
+</div>
+<div class="paragraph">
+<p>Other changes in OpenCL 3.1:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Added required support for sub-groups, see <a href="#CL_DEVICE_MAX_NUM_SUB_GROUPS"><code>CL_DEVICE_<wbr>MAX_<wbr>NUM_<wbr>SUB_<wbr>GROUPS</code></a>.</p>
+</li>
+<li>
+<p>Relaxed the definition of inclusive scopes, see internal issue 367.</p>
+</li>
+<li>
+<p>Clarified and un-deprecated the <a href="#CL_DEVICE_HOST_UNIFIED_MEMORY"><code>CL_DEVICE_<wbr>HOST_<wbr>UNIFIED_<wbr>MEMORY</code></a> query, see internal issue 370.</p>
+</li>
+<li>
+<p>Updated the memory model so observing that an event is <a href="#CL_COMPLETE"><code>CL_COMPLETE</code></a> is a synchronization point, see internal issue 373.</p>
+</li>
+<li>
+<p>Allowed <a href="#clSetKernelArg"><strong>clSetKernelArg</strong></a> to set a local memory kernel argument to zero, see internal issue 374.</p>
+</li>
+<li>
+<p>Deprecated the confusingly named <a href="#CL_DEVICE_MAX_WORK_ITEM_SIZES"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>ITEM_<wbr>SIZES</code></a> query, use <a href="#CL_DEVICE_MAX_WORK_GROUP_SIZES"><code>CL_DEVICE_<wbr>MAX_<wbr>WORK_<wbr>GROUP_<wbr>SIZES</code></a> instead, see internal issue 375.</p>
+</li>
+<li>
+<p>Cleaned up inconsistencies in the error condition descriptions for <a href="#clSetKernelExecInfo"><strong>clSetKernelExecInfo</strong></a>, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1419">#1419</a>.</p>
+</li>
+<li>
+<p>Improved error code documentation consistency for many OpenCL APIs, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1439">#1439</a> and others.</p>
+</li>
+<li>
+<p>Added missing error conditions for <a href="#clCompileProgram"><strong>clCompileProgram</strong></a> and <a href="#clLinkProgram"><strong>clLinkProgram</strong></a>, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1453">#1453</a>.</p>
+</li>
+<li>
+<p>Clarified the description of sub-group functions, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1483">#1483</a>.</p>
+</li>
+<li>
+<p>Refactored and clarified the description for <a href="#clSetKernelArg"><strong>clSetKernelArg</strong></a>, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1493">#1493</a>.</p>
+</li>
+<li>
+<p>Clarified the description of atomic operations, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1500">#1500</a>.</p>
+</li>
+<li>
+<p>Cleaned up a few more descriptions of custom devices, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1540">#1540</a>.</p>
+</li>
+<li>
+<p>Added missing error condition for <a href="#clEnqueueNDRangeKernel"><strong>clEnqueueNDRangeKernel</strong></a> when the local work-group size is zero, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1542">#1542</a>.</p>
+</li>
+<li>
+<p><a href="#cl_khr_command_buffer_mutable_dispatch"><code>cl_khr_<wbr>command_<wbr>buffer_<wbr>mutable_<wbr>dispatch</code></a> (experimental):</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Relaxed the requirement to set all kernel arguments before recording a command buffer, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1382">#1382</a>.</p>
+</li>
+<li>
+<p>Redefined and clarified command-buffer simultaneous use, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1411">#1411</a>.</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="#cl_khr_external_memory_android_hardware_buffer"><code>cl_khr_<wbr>external_<wbr>memory_<wbr>android_<wbr>hardware_<wbr>buffer</code></a> (experimental)</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Clarified that images cannot be created if the format is <code>AHARDWAREBUFFER_FORMAT_BLOB</code>, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1477">#1477</a>.</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p></p>
+<div class="ulist">
+<ul>
+<li>
+<p>Added a missing error condition for <a href="#clSetKernelArgDevicePointerEXT"><strong>clSetKernelArgDevicePointerEXT</strong></a>, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1493">#1492</a>.</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Added new extensions:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#cl_khr_unified_svm"><code>cl_khr_<wbr>unified_<wbr>svm</code></a> (experimental)</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Promoted the following extensions to the core API:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#cl_khr_device_uuid"><code>cl_khr_<wbr>device_<wbr>uuid</code></a></p>
+</li>
+<li>
+<p><a href="#cl_khr_extended_bit_ops"><code>cl_khr_<wbr>extended_<wbr>bit_<wbr>ops</code></a></p>
+</li>
+<li>
+<p><a href="#cl_khr_integer_dot_product"><code>cl_khr_<wbr>integer_<wbr>dot_<wbr>product</code></a></p>
+</li>
+<li>
+<p><a href="#cl_khr_spirv_queries"><code>cl_khr_<wbr>spirv_<wbr>queries</code></a></p>
+</li>
+<li>
+<p><a href="#cl_khr_subgroup_extended_types"><code>cl_khr_<wbr>subgroup_<wbr>extended_<wbr>types</code></a></p>
+</li>
+<li>
+<p><a href="#cl_khr_subgroup_rotate"><code>cl_khr_<wbr>subgroup_<wbr>rotate</code></a></p>
+</li>
+<li>
+<p><a href="#cl_khr_subgroup_shuffle"><code>cl_khr_<wbr>subgroup_<wbr>shuffle</code></a></p>
+</li>
+<li>
+<p><a href="#cl_khr_subgroup_shuffle_relative"><code>cl_khr_<wbr>subgroup_<wbr>shuffle_<wbr>relative</code></a></p>
+</li>
+<li>
+<p><a href="#cl_khr_suggested_local_work_size"><code>cl_khr_<wbr>suggested_<wbr>local_<wbr>work_<wbr>size</code></a></p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
</div>
</div>
<div class="sect1">
@@ -42231,6 +45542,164 @@
names.</p>
</div>
<div class="sect2">
+<h3 id="naming-convention-for-optional-extensions"><a class="anchor" href="#naming-convention-for-optional-extensions"></a>Naming Convention for Optional Extensions</h3>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>OpenCL extensions approved by the OpenCL working group use the following
+naming convention:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>A unique <em>name string</em> of the form <code><strong>cl_khr_<<em>name</em>></strong></code> or
+<code><strong>cl_ext_<<em>name</em>></strong></code> is associated with each extension.
+If the extension is supported by an implementation, this string will be
+present in the implementation’s <a href="#CL_PLATFORM_EXTENSIONS"><code>CL_PLATFORM_<wbr>EXTENSIONS</code></a> string or
+<a href="#CL_DEVICE_EXTENSIONS"><code>CL_DEVICE_<wbr>EXTENSIONS</code></a> string.</p>
+</li>
+<li>
+<p>All enumerants defined by the extension will have names of the form
+<strong>CL_<<em>enum_name</em>>_KHR</strong> or <strong>CL_<<em>enum_name</em>>_EXT</strong>.</p>
+</li>
+<li>
+<p>All types defined by the extension will have names of the form
+<strong>cl_<<em>type_name</em>>_khr</strong> or <strong>cl_<<em>type_name</em>>_ext</strong>.</p>
+</li>
+<li>
+<p>All API functions defined by the extension will have names of the form
+<strong>cl<<em>function_name</em>>KHR</strong> or <strong>cl<<em>function_name</em>>EXT</strong>.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Functions and enumerants defined by extensions that are promoted to
+core features will have their <strong>KHR</strong> or <strong>EXT</strong> affix removed.
+OpenCL implementations of such later revisions must also export the name
+strings of promoted extensions in the <a href="#CL_PLATFORM_EXTENSIONS"><code>CL_PLATFORM_<wbr>EXTENSIONS</code></a> or
+<a href="#CL_DEVICE_EXTENSIONS"><code>CL_DEVICE_<wbr>EXTENSIONS</code></a> string, and support the <strong>KHR</strong>- or <strong>EXT</strong>-affixed versions
+of functions and enumerants as a transition aid.</p>
+</div>
+<div class="paragraph">
+<p>Vendor extensions are strongly encouraged to follow a similar naming
+convention:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>A unique <em>name string</em> of the form <code><strong>cl_<<em>vendor_tag</em>>_<<em>name></em></strong></code>
+is associated with each extension.
+If the extension is supported by an implementation, this string will be
+present in the implementation’s <a href="#CL_PLATFORM_EXTENSIONS"><code>CL_PLATFORM_<wbr>EXTENSIONS</code></a> string or
+<a href="#CL_DEVICE_EXTENSIONS"><code>CL_DEVICE_<wbr>EXTENSIONS</code></a> string.</p>
+</li>
+<li>
+<p>All enumerants defined by the vendor extension should have names of the
+form <strong>CL_<<em>enum_name</em>>_<<em>VENDOR_TAG</em>>.</strong></p>
+</li>
+<li>
+<p>All types defined by the vendor extension should have names of the
+form <strong>cl_<<em>type_name</em>>_<<em>vendor_tag</em>>.</strong></p>
+</li>
+<li>
+<p>All API functions defined by the vendor extension should have names of the
+form <strong>cl<<em>function_name</em>><<em>VENDOR_TAG</em>></strong>.</p>
+</li>
+<li>
+<p>All OpenCL C functions, types, and attribute qualifiers defined by the
+vendor extension should have names of the form
+<strong><<em>vendor_tag</em>>_<<em>name</em>></strong>.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Vendor extensions are not currently included in the OpenCL specifications, but
+vendor extension specifications are frequently included in the online Registry
+of extensions.</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="header-conventions-for-optional-extensions"><a class="anchor" href="#header-conventions-for-optional-extensions"></a>Header Conventions for Optional Extensions</h3>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>Function pointer typedefs should be declared for all extensions that add API
+entrypoints.
+These typedefs are a required part of the extension interface, and should be
+provided in an appropriate header, such as <code>cl_ext.h</code>.</p>
+</div>
+<div class="paragraph">
+<p>The following convention should be followed for all extensions affecting the
+host API:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="opencl"><span class="cp">#define cl_extension_name 1
+#define CL_EXTENSION_NAME_NAME "cl_extension_name"
+</span>
+<span class="cp">#define CL_EXTENSION_NAME_VERSION CL_MAKE_VERSION(major, minor, patch)
+</span>
+<span class="c1">// all data typedefs and token #defines for this extension</span>
+<span class="cp">#define CL_EXTENSION_ENUM_NAME_TAG 0xXXXX
+</span>
+<span class="c1">// function types for extension functions</span>
+<span class="k">typedef</span> <span class="n">return_type</span>
+<span class="nf">clExtensionFunctionNameTAG_t</span><span class="p">(...);</span>
+
+<span class="c1">// function pointer typedefs for extension functions</span>
+<span class="k">typedef</span> <span class="n">clExtensionFunctionNameTAG_t</span> <span class="o">*</span>
+<span class="n">clExtensionFunctionNameTAG_fn</span><span class="p">;</span>
+
+<span class="c1">// extension function prototypes (optional)</span>
+<span class="k">extern</span> <span class="n">return_type</span>
+<span class="nf">clExtensionFunctionTAG</span><span class="p">(...);</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>where <code>TAG</code> can be <code>KHR</code>, <code>EXT</code> or <code>vendor-specific</code>.</p>
+</div>
+<div class="paragraph">
+<p>Consider, for example, the <a href="#cl_khr_create_command_queue"><code>cl_khr_<wbr>create_<wbr>command_<wbr>queue</code></a> extension.
+This extension adds the following to <code>cl_ext.h</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="opencl"><span class="cp">#define cl_khr_create_command_queue 1
+#define CL_KHR_CREATE_COMMAND_QUEUE_EXTENSION_NAME \
+ "cl_khr_create_command_queue"
+</span>
+<span class="cp">#define CL_KHR_CREATE_COMMAND_QUEUE_EXTENSION_VERSION CL_MAKE_VERSION(1, 0, 0)
+</span>
+<span class="k">typedef</span> <span class="kt">cl_properties</span> <span class="kt">cl_queue_properties_khr</span><span class="p">;</span>
+
+<span class="k">typedef</span> <span class="kt">cl_command_queue</span> <span class="n">CL_API_CALL</span>
+<span class="nf">clCreateCommandQueueWithPropertiesKHR_t</span><span class="p">(</span>
+ <span class="kt">cl_context</span> <span class="n">context</span><span class="p">,</span>
+ <span class="kt">cl_device_id</span> <span class="n">device</span><span class="p">,</span>
+ <span class="k">const</span> <span class="kt">cl_queue_properties_khr</span><span class="o">*</span> <span class="n">properties</span><span class="p">,</span>
+ <span class="kt">cl_int</span><span class="o">*</span> <span class="n">errcode_ret</span><span class="p">);</span>
+
+<span class="k">typedef</span> <span class="n">clCreateCommandQueueWithPropertiesKHR_t</span> <span class="o">*</span>
+<span class="n">clCreateCommandQueueWithPropertiesKHR_fn</span> <span class="n">CL_API_SUFFIX__VERSION_1_2</span><span class="p">;</span>
+
+<span class="cp">#if !defined(CL_NO_NON_ICD_DISPATCH_EXTENSION_PROTOTYPES)
+</span>
+<span class="k">extern</span> <span class="n">CL_API_ENTRY</span> <span class="kt">cl_command_queue</span> <span class="n">CL_API_CALL</span>
+<span class="n">clCreateCommandQueueWithPropertiesKHR</span><span class="p">(</span>
+ <span class="kt">cl_context</span> <span class="n">context</span><span class="p">,</span>
+ <span class="kt">cl_device_id</span> <span class="n">device</span><span class="p">,</span>
+ <span class="k">const</span> <span class="kt">cl_queue_properties_khr</span><span class="o">*</span> <span class="n">properties</span><span class="p">,</span>
+ <span class="kt">cl_int</span><span class="o">*</span> <span class="n">errcode_ret</span><span class="p">)</span> <span class="n">CL_API_SUFFIX__VERSION_1_2</span><span class="p">;</span>
+
+<span class="cp">#endif </span><span class="cm">/* !defined(CL_NO_NON_ICD_DISPATCH_EXTENSION_PROTOTYPES) */</span></code></pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect2">
<h3 id="boilerplate-experimental-header"><a class="anchor" href="#boilerplate-experimental-header"></a>Experimental Extensions</h3>
<div class="paragraph">
<p><em>Experimental</em> OpenCL extensions described in this appendix are being made
@@ -42370,6 +45839,9 @@
<p><code><a href="#cl_khr_icd">cl_khr_icd</a></code></p>
</li>
<li>
+<p><code><a href="#cl_khr_icd_unloadable">cl_khr_icd_unloadable</a></code></p>
+</li>
+<li>
<p><code><a href="#cl_khr_il_program">cl_khr_il_program</a></code></p>
</li>
<li>
@@ -43509,6 +46981,17 @@
<dd>
<p>None</p>
</dd>
+<dt class="hdlist1"><strong>Deprecation State</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p><em>Promoted</em> to
+OpenCL 3.1</p>
+</li>
+</ul>
+</div>
+</dd>
</dl>
</div>
<div class="sect4">
@@ -44393,6 +47876,17 @@
<dd>
<p>None</p>
</dd>
+<dt class="hdlist1"><strong>Deprecation State</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p><em>Promoted</em> to
+OpenCL 3.1</p>
+</li>
+</ul>
+</div>
+</dd>
</dl>
</div>
<div class="sect4">
@@ -44707,7 +48201,7 @@
</div>
</li>
<li>
-<p>What is the behaviour of the queries that return an array of structures when
+<p>What is the behavior of the queries that return an array of structures when
there are no elements to return?</p>
<div class="openblock">
<div class="content">
@@ -47915,7 +51409,7 @@
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
<dd>
-<p>2025-04-01</p>
+<p>2025-12-15</p>
</dd>
<dt class="hdlist1"><strong>IP Status</strong></dt>
<dd>
@@ -47992,7 +51486,7 @@
may be inferred have been deprecated and may be ignored.</p>
</div>
<div class="paragraph">
-<p>New in version 2.0.0, object that are ICD 2 compatible should also contain
+<p>New in version 2.0.0, objects that are ICD 2 compatible should also contain
a <code>dispatch_data</code> field of type <code>void *</code> that the loader is free to modify
for a platform through the <a href="#clIcdSetPlatformDispatchDataKHR"><strong>clIcdSetPlatformDispatchDataKHR</strong></a> new API entry
point. In order to distinguish ICD 1 and ICD 2 objects, the pointers to
@@ -48199,7 +51693,7 @@
structure of a platform is set to <code>CL_ICD2_TAG_KHR</code> the platform will be
deemed ICD 2 compatible and dispatch will be managed by the ICD Loader. If the
<code>CL_ICD2_TAG_KHR</code> tag is present but one of the two functions above is
-missing or it the tag is present in only one of the pointers, the ICD Loader
+missing or if the tag is present in only one of the pointers, the ICD Loader
will ignore the Vendor ICD and continue on to the next.</p>
</div>
<div class="paragraph">
@@ -48314,6 +51808,24 @@
<p><strong>RESOLVED</strong>: As there is no standard mechanism for unloading a vendor
implementation, do not add one for the ICD Loader.</p>
</div>
+<div class="paragraph">
+<p>New in version 2.0.1, the loader now supports deinitialization and platform
+that support unloading their driver can advertise it through the
+<a href="#cl_khr_icd_unloadable"><code>cl_khr_<wbr>icd_<wbr>unloadable</code></a> extension.</p>
+</div>
+</div>
+</div>
+</li>
+<li>
+<p>How will the ICD Loader that support deinitialization enable compatibility
+with old layers.</p>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>The ICD Loader that support deinitialization will check for the
+<code>OCL_ICD_FORCE_LEGACY_TERMINATION</code> environment variable, and revert to the
+legacy behavior if it evaluates to true.</p>
+</div>
</div>
</div>
</li>
@@ -48388,6 +51900,95 @@
</ul>
</div>
</li>
+<li>
+<p>Revision 2.0.1, 2025-12-15</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Loader deinitialization.</p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="cl_khr_icd_unloadable"><a class="anchor" href="#cl_khr_icd_unloadable"></a>cl_khr_icd_unloadable</h4>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><strong>Name String</strong></dt>
+<dd>
+<p><code>cl_khr_icd_unloadable</code></p>
+</dd>
+<dt class="hdlist1"><strong>Ratification Status</strong></dt>
+<dd>
+<p>Not ratified</p>
+</dd>
+<dt class="hdlist1"><strong>Extension and Version Dependencies</strong></dt>
+<dd>
+<p>None</p>
+</dd>
+</dl>
+</div>
+<div class="sect4">
+<h5 id="_other_extension_metadata_33"><a class="anchor" href="#_other_extension_metadata_33"></a>Other Extension Metadata</h5>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
+<dd>
+<p>2025-11-25</p>
+</dd>
+<dt class="hdlist1"><strong>IP Status</strong></dt>
+<dd>
+<p>No known IP claims.</p>
+</dd>
+</dl>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_description_33"><a class="anchor" href="#_description_33"></a>Description</h5>
+<div class="paragraph">
+<p><a href="#cl_khr_icd_unloadable"><code>cl_khr_<wbr>icd_<wbr>unloadable</code></a> describes a platform extension which defines
+a simple mechanism through which a Khronos OpenCL installable client driver
+(ICD), as defined by the <a href="#cl_khr_icd"><code>cl_khr_<wbr>icd</code></a>, can advertise being unloaded by
+the ICD Loader.</p>
+</div>
+<div class="paragraph">
+<p>This is a platform extension, so if this extension is supported by an
+implementation, the string <code>"cl_khr_icd_unloadable"</code> will be present in the
+<a href="#CL_PLATFORM_EXTENSIONS"><code>CL_PLATFORM_<wbr>EXTENSIONS</code></a> string.</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_new_enums_22"><a class="anchor" href="#_new_enums_22"></a>New Enums</h5>
+<div class="paragraph">
+<p>Used as a parameter name to query if a platform can be unloaded by the ICD
+Loader:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#CL_PLATFORM_UNLOADABLE_KHR"><code>CL_PLATFORM_<wbr>UNLOADABLE_<wbr>KHR</code></a></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_version_history_33"><a class="anchor" href="#_version_history_33"></a>Version History</h5>
+<div class="ulist">
+<ul>
+<li>
+<p>Revision 1.0.0, 2025-12-15</p>
+<div class="ulist">
+<ul>
+<li>
+<p>First assigned version.</p>
+</li>
+</ul>
+</div>
+</li>
</ul>
</div>
</div>
@@ -48422,7 +52023,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_33"><a class="anchor" href="#_other_extension_metadata_33"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_34"><a class="anchor" href="#_other_extension_metadata_34"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -48437,7 +52038,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_33"><a class="anchor" href="#_description_33"></a>Description</h5>
+<h5 id="_description_34"><a class="anchor" href="#_description_34"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_il_program"><code>cl_khr_<wbr>il_<wbr>program</code></a> adds the ability to create programs with intermediate
language (IL), usually SPIR-V.
@@ -48462,7 +52063,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_22"><a class="anchor" href="#_new_enums_22"></a>New Enums</h5>
+<h5 id="_new_enums_23"><a class="anchor" href="#_new_enums_23"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -48489,7 +52090,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_33"><a class="anchor" href="#_version_history_33"></a>Version History</h5>
+<h5 id="_version_history_34"><a class="anchor" href="#_version_history_34"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -48536,7 +52137,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_34"><a class="anchor" href="#_other_extension_metadata_34"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_35"><a class="anchor" href="#_other_extension_metadata_35"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -48551,7 +52152,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_34"><a class="anchor" href="#_description_34"></a>Description</h5>
+<h5 id="_description_35"><a class="anchor" href="#_description_35"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_image2d_from_buffer"><code>cl_khr_<wbr>image2d_<wbr>from_<wbr>buffer</code></a> allows a 2D image to be created from an
existing OpenCL buffer memory object.</p>
@@ -48565,7 +52166,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_23"><a class="anchor" href="#_new_enums_23"></a>New Enums</h5>
+<h5 id="_new_enums_24"><a class="anchor" href="#_new_enums_24"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -48578,7 +52179,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_34"><a class="anchor" href="#_version_history_34"></a>Version History</h5>
+<h5 id="_version_history_35"><a class="anchor" href="#_version_history_35"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -48614,7 +52215,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_35"><a class="anchor" href="#_other_extension_metadata_35"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_36"><a class="anchor" href="#_other_extension_metadata_36"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -48629,7 +52230,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_35"><a class="anchor" href="#_description_35"></a>Description</h5>
+<h5 id="_description_36"><a class="anchor" href="#_description_36"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_initialize_memory"><code>cl_khr_<wbr>initialize_<wbr>memory</code></a> adds OpenCL C support for initializing local and
private memory before a kernel begins execution.
@@ -48653,7 +52254,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_24"><a class="anchor" href="#_new_enums_24"></a>New Enums</h5>
+<h5 id="_new_enums_25"><a class="anchor" href="#_new_enums_25"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -48683,7 +52284,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_35"><a class="anchor" href="#_version_history_35"></a>Version History</h5>
+<h5 id="_version_history_36"><a class="anchor" href="#_version_history_36"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -48719,7 +52320,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_36"><a class="anchor" href="#_other_extension_metadata_36"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_37"><a class="anchor" href="#_other_extension_metadata_37"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -48734,7 +52335,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_36"><a class="anchor" href="#_description_36"></a>Description</h5>
+<h5 id="_description_37"><a class="anchor" href="#_description_37"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_int64_base_atomics"><code>cl_khr_<wbr>int64_<wbr>base_<wbr>atomics</code></a> adds built-in OpenCL functions supporting atomic
operations to be performed on 64-bit signed and unsigned integers in global
@@ -48746,7 +52347,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_36"><a class="anchor" href="#_version_history_36"></a>Version History</h5>
+<h5 id="_version_history_37"><a class="anchor" href="#_version_history_37"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -48782,7 +52383,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_37"><a class="anchor" href="#_other_extension_metadata_37"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_38"><a class="anchor" href="#_other_extension_metadata_38"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -48797,7 +52398,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_37"><a class="anchor" href="#_description_37"></a>Description</h5>
+<h5 id="_description_38"><a class="anchor" href="#_description_38"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_int64_extended_atomics"><code>cl_khr_<wbr>int64_<wbr>extended_<wbr>atomics</code></a> adds built-in OpenCL functions supporting
extended atomic operations to be performed on 64-bit signed and unsigned
@@ -48809,7 +52410,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_37"><a class="anchor" href="#_version_history_37"></a>Version History</h5>
+<h5 id="_version_history_38"><a class="anchor" href="#_version_history_38"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -48842,10 +52443,21 @@
<dd>
<p>None</p>
</dd>
+<dt class="hdlist1"><strong>Deprecation State</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p><em>Promoted</em> to
+OpenCL 3.1</p>
+</li>
+</ul>
+</div>
+</dd>
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_38"><a class="anchor" href="#_other_extension_metadata_38"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_39"><a class="anchor" href="#_other_extension_metadata_39"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -48888,7 +52500,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_38"><a class="anchor" href="#_description_38"></a>Description</h5>
+<h5 id="_description_39"><a class="anchor" href="#_description_39"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_integer_dot_product"><code>cl_khr_<wbr>integer_<wbr>dot_<wbr>product</code></a> adds support for SPIR-V instructions and OpenCL
C built-in functions to compute the dot product of vectors of integers.</p>
@@ -48926,7 +52538,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_25"><a class="anchor" href="#_new_enums_25"></a>New Enums</h5>
+<h5 id="_new_enums_26"><a class="anchor" href="#_new_enums_26"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -48962,7 +52574,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_38"><a class="anchor" href="#_version_history_38"></a>Version History</h5>
+<h5 id="_version_history_39"><a class="anchor" href="#_version_history_39"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -49008,7 +52620,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_39"><a class="anchor" href="#_other_extension_metadata_39"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_40"><a class="anchor" href="#_other_extension_metadata_40"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -49048,7 +52660,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_39"><a class="anchor" href="#_description_39"></a>Description</h5>
+<h5 id="_description_40"><a class="anchor" href="#_description_40"></a>Description</h5>
<div class="paragraph">
<p><code>cl_khr_kernel_clock</code> adds the ability for a kernel to sample the value from one
of three clocks provided by compute units.</p>
@@ -49089,7 +52701,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_26"><a class="anchor" href="#_new_enums_26"></a>New Enums</h5>
+<h5 id="_new_enums_27"><a class="anchor" href="#_new_enums_27"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -49122,7 +52734,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_39"><a class="anchor" href="#_version_history_39"></a>Version History</h5>
+<h5 id="_version_history_40"><a class="anchor" href="#_version_history_40"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -49179,7 +52791,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_40"><a class="anchor" href="#_other_extension_metadata_40"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_41"><a class="anchor" href="#_other_extension_metadata_41"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -49194,7 +52806,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_40"><a class="anchor" href="#_description_40"></a>Description</h5>
+<h5 id="_description_41"><a class="anchor" href="#_description_41"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_local_int32_base_atomics"><code>cl_khr_<wbr>local_<wbr>int32_<wbr>base_<wbr>atomics</code></a> allows OpenCL C atomic operations to be
performed on 32-bit signed and unsigned integers in local memory.</p>
@@ -49209,7 +52821,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_40"><a class="anchor" href="#_version_history_40"></a>Version History</h5>
+<h5 id="_version_history_41"><a class="anchor" href="#_version_history_41"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -49256,7 +52868,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_41"><a class="anchor" href="#_other_extension_metadata_41"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_42"><a class="anchor" href="#_other_extension_metadata_42"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -49271,7 +52883,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_41"><a class="anchor" href="#_description_41"></a>Description</h5>
+<h5 id="_description_42"><a class="anchor" href="#_description_42"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_local_int32_extended_atomics"><code>cl_khr_<wbr>local_<wbr>int32_<wbr>extended_<wbr>atomics</code></a> allows OpenCL C extended atomic
operations to be performed on 32-bit signed and unsigned integers in local
@@ -49288,7 +52900,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_41"><a class="anchor" href="#_version_history_41"></a>Version History</h5>
+<h5 id="_version_history_42"><a class="anchor" href="#_version_history_42"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -49324,7 +52936,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_42"><a class="anchor" href="#_other_extension_metadata_42"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_43"><a class="anchor" href="#_other_extension_metadata_43"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -49339,7 +52951,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_42"><a class="anchor" href="#_description_42"></a>Description</h5>
+<h5 id="_description_43"><a class="anchor" href="#_description_43"></a>Description</h5>
<div class="paragraph">
<p>The <a href="#cl_khr_mipmap_image"><code>cl_khr_<wbr>mipmap_<wbr>image</code></a> extension adds the ability to create and access
mipmapped images:</p>
@@ -49380,7 +52992,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_42"><a class="anchor" href="#_version_history_42"></a>Version History</h5>
+<h5 id="_version_history_43"><a class="anchor" href="#_version_history_43"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -49422,7 +53034,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_43"><a class="anchor" href="#_other_extension_metadata_43"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_44"><a class="anchor" href="#_other_extension_metadata_44"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -49437,7 +53049,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_43"><a class="anchor" href="#_description_43"></a>Description</h5>
+<h5 id="_description_44"><a class="anchor" href="#_description_44"></a>Description</h5>
<div class="paragraph">
<p>The <a href="#cl_khr_mipmap_image_writes"><code>cl_khr_<wbr>mipmap_<wbr>image_<wbr>writes</code></a> extension adds OpenCL C built-in functions
to write to a mipmapped image.</p>
@@ -49452,7 +53064,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_43"><a class="anchor" href="#_version_history_43"></a>Version History</h5>
+<h5 id="_version_history_44"><a class="anchor" href="#_version_history_44"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -49488,7 +53100,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_44"><a class="anchor" href="#_other_extension_metadata_44"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_45"><a class="anchor" href="#_other_extension_metadata_45"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -49503,7 +53115,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_44"><a class="anchor" href="#_description_44"></a>Description</h5>
+<h5 id="_description_45"><a class="anchor" href="#_description_45"></a>Description</h5>
<div class="paragraph">
<p>The <a href="#cl_khr_pci_bus_info"><code>cl_khr_<wbr>pci_<wbr>bus_<wbr>info</code></a> extension adds a new query to obtain PCI bus
information about an OpenCL device.</p>
@@ -49533,7 +53145,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_27"><a class="anchor" href="#_new_enums_27"></a>New Enums</h5>
+<h5 id="_new_enums_28"><a class="anchor" href="#_new_enums_28"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -49550,7 +53162,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_44"><a class="anchor" href="#_version_history_44"></a>Version History</h5>
+<h5 id="_version_history_45"><a class="anchor" href="#_version_history_45"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -49586,7 +53198,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_45"><a class="anchor" href="#_other_extension_metadata_45"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_46"><a class="anchor" href="#_other_extension_metadata_46"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -49601,7 +53213,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_45"><a class="anchor" href="#_description_45"></a>Description</h5>
+<h5 id="_description_46"><a class="anchor" href="#_description_46"></a>Description</h5>
<div class="paragraph">
<p>The <a href="#cl_khr_priority_hints"><code>cl_khr_<wbr>priority_<wbr>hints</code></a> extension adds priority hints for OpenCL, but
does not specify the scheduling behavior or minimum guarantees.
@@ -49628,7 +53240,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_28"><a class="anchor" href="#_new_enums_28"></a>New Enums</h5>
+<h5 id="_new_enums_29"><a class="anchor" href="#_new_enums_29"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -49661,7 +53273,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_45"><a class="anchor" href="#_version_history_45"></a>Version History</h5>
+<h5 id="_version_history_46"><a class="anchor" href="#_version_history_46"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -49708,7 +53320,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_46"><a class="anchor" href="#_other_extension_metadata_46"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_47"><a class="anchor" href="#_other_extension_metadata_47"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -49723,7 +53335,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_46"><a class="anchor" href="#_description_46"></a>Description</h5>
+<h5 id="_description_47"><a class="anchor" href="#_description_47"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_select_fprounding_mode"><code>cl_khr_<wbr>select_<wbr>fprounding_<wbr>mode</code></a> allows an application to specify the
rounding mode for an instruction or group of instructions in the OpenCL C
@@ -49749,7 +53361,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_46"><a class="anchor" href="#_version_history_46"></a>Version History</h5>
+<h5 id="_version_history_47"><a class="anchor" href="#_version_history_47"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -49791,7 +53403,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_47"><a class="anchor" href="#_other_extension_metadata_47"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_48"><a class="anchor" href="#_other_extension_metadata_48"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -49867,7 +53479,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_47"><a class="anchor" href="#_description_47"></a>Description</h5>
+<h5 id="_description_48"><a class="anchor" href="#_description_48"></a>Description</h5>
<div class="paragraph">
<p>OpenCL provides <code>cl_event</code> as a primary mechanism of synchronization
between host and device as well as across devices.
@@ -49962,7 +53574,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_29"><a class="anchor" href="#_new_enums_29"></a>New Enums</h5>
+<h5 id="_new_enums_30"><a class="anchor" href="#_new_enums_30"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -50211,7 +53823,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_47"><a class="anchor" href="#_version_history_47"></a>Version History</h5>
+<h5 id="_version_history_48"><a class="anchor" href="#_version_history_48"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -50279,7 +53891,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_48"><a class="anchor" href="#_other_extension_metadata_48"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_49"><a class="anchor" href="#_other_extension_metadata_49"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -50294,7 +53906,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_48"><a class="anchor" href="#_description_48"></a>Description</h5>
+<h5 id="_description_49"><a class="anchor" href="#_description_49"></a>Description</h5>
<div class="paragraph">
<p><code>cl_khr_spirv_extended_debug_info</code> allows use of the SPIR-V
<code>OpenCL.DebugInfo.100</code> extended instruction set.</p>
@@ -50306,7 +53918,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_48"><a class="anchor" href="#_version_history_48"></a>Version History</h5>
+<h5 id="_version_history_49"><a class="anchor" href="#_version_history_49"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -50342,7 +53954,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_49"><a class="anchor" href="#_other_extension_metadata_49"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_50"><a class="anchor" href="#_other_extension_metadata_50"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -50357,7 +53969,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_49"><a class="anchor" href="#_description_49"></a>Description</h5>
+<h5 id="_description_50"><a class="anchor" href="#_description_50"></a>Description</h5>
<div class="paragraph">
<p>The <a href="#cl_khr_spirv_linkonce_odr"><code>cl_khr_<wbr>spirv_<wbr>linkonce_<wbr>odr</code></a> extension allows use of the SPIR-V extension
<code>SPV_KHR_linkonce_odr</code>.</p>
@@ -50369,7 +53981,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_49"><a class="anchor" href="#_version_history_49"></a>Version History</h5>
+<h5 id="_version_history_50"><a class="anchor" href="#_version_history_50"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -50405,7 +54017,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_50"><a class="anchor" href="#_other_extension_metadata_50"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_51"><a class="anchor" href="#_other_extension_metadata_51"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -50420,7 +54032,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_50"><a class="anchor" href="#_description_50"></a>Description</h5>
+<h5 id="_description_51"><a class="anchor" href="#_description_51"></a>Description</h5>
<div class="paragraph">
<p><code>cl_khr_spirv_no_integer_wrap_decoration</code> allows use of the SPIR-V extension
<code>SPV_KHR_no_integer_wrap_decoration</code>, which adds new decorations to indicate
@@ -50433,7 +54045,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_50"><a class="anchor" href="#_version_history_50"></a>Version History</h5>
+<h5 id="_version_history_51"><a class="anchor" href="#_version_history_51"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -50466,10 +54078,21 @@
<dd>
<p>None</p>
</dd>
+<dt class="hdlist1"><strong>Deprecation State</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p><em>Promoted</em> to
+OpenCL 3.1</p>
+</li>
+</ul>
+</div>
+</dd>
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_51"><a class="anchor" href="#_other_extension_metadata_51"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_52"><a class="anchor" href="#_other_extension_metadata_52"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -50484,7 +54107,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_51"><a class="anchor" href="#_description_51"></a>Description</h5>
+<h5 id="_description_52"><a class="anchor" href="#_description_52"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_spirv_queries"><code>cl_khr_<wbr>spirv_<wbr>queries</code></a> adds queries to determine the SPIR-V extended
instruction sets, SPIR-V extensions, and SPIR-V capabilities that are supported
@@ -50492,7 +54115,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_30"><a class="anchor" href="#_new_enums_30"></a>New Enums</h5>
+<h5 id="_new_enums_31"><a class="anchor" href="#_new_enums_31"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -50515,7 +54138,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_51"><a class="anchor" href="#_version_history_51"></a>Version History</h5>
+<h5 id="_version_history_52"><a class="anchor" href="#_version_history_52"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -50551,7 +54174,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_52"><a class="anchor" href="#_other_extension_metadata_52"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_53"><a class="anchor" href="#_other_extension_metadata_53"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -50566,7 +54189,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_52"><a class="anchor" href="#_description_52"></a>Description</h5>
+<h5 id="_description_53"><a class="anchor" href="#_description_53"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_srgb_image_writes"><code>cl_khr_<wbr>srgb_<wbr>image_<wbr>writes</code></a> enables OpenCL C kernels to write to sRGB images
using the <strong>write_imagef</strong> built-in function.
@@ -50585,7 +54208,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_52"><a class="anchor" href="#_version_history_52"></a>Version History</h5>
+<h5 id="_version_history_53"><a class="anchor" href="#_version_history_53"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -50621,7 +54244,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_53"><a class="anchor" href="#_other_extension_metadata_53"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_54"><a class="anchor" href="#_other_extension_metadata_54"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -50636,7 +54259,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_53"><a class="anchor" href="#_description_53"></a>Description</h5>
+<h5 id="_description_54"><a class="anchor" href="#_description_54"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_subgroup_ballot"><code>cl_khr_<wbr>subgroup_<wbr>ballot</code></a> adds built-in OpenCL C functions with the ability
to collect and operate on ballots from work items in a sub-group.</p>
@@ -50674,7 +54297,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_53"><a class="anchor" href="#_version_history_53"></a>Version History</h5>
+<h5 id="_version_history_54"><a class="anchor" href="#_version_history_54"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -50710,7 +54333,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_54"><a class="anchor" href="#_other_extension_metadata_54"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_55"><a class="anchor" href="#_other_extension_metadata_55"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -50725,7 +54348,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_54"><a class="anchor" href="#_description_54"></a>Description</h5>
+<h5 id="_description_55"><a class="anchor" href="#_description_55"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_subgroup_clustered_reduce"><code>cl_khr_<wbr>subgroup_<wbr>clustered_<wbr>reduce</code></a> adds built-in OpenCL functions for
clustered reductions that operate on a subset of work items in the
@@ -50757,7 +54380,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_54"><a class="anchor" href="#_version_history_54"></a>Version History</h5>
+<h5 id="_version_history_55"><a class="anchor" href="#_version_history_55"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -50790,10 +54413,21 @@
<dd>
<p>None</p>
</dd>
+<dt class="hdlist1"><strong>Deprecation State</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p><em>Promoted</em> to
+OpenCL 3.1</p>
+</li>
+</ul>
+</div>
+</dd>
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_55"><a class="anchor" href="#_other_extension_metadata_55"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_56"><a class="anchor" href="#_other_extension_metadata_56"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -50808,7 +54442,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_55"><a class="anchor" href="#_description_55"></a>Description</h5>
+<h5 id="_description_56"><a class="anchor" href="#_description_56"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_subgroup_extended_types"><code>cl_khr_<wbr>subgroup_<wbr>extended_<wbr>types</code></a> adds additional supported OpenCL C data
types to the existing sub-group broadcast, scan, and reduction functions.</p>
@@ -50844,7 +54478,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_55"><a class="anchor" href="#_version_history_55"></a>Version History</h5>
+<h5 id="_version_history_56"><a class="anchor" href="#_version_history_56"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -50880,7 +54514,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_56"><a class="anchor" href="#_other_extension_metadata_56"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_57"><a class="anchor" href="#_other_extension_metadata_57"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -50895,7 +54529,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_56"><a class="anchor" href="#_description_56"></a>Description</h5>
+<h5 id="_description_57"><a class="anchor" href="#_description_57"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_subgroup_named_barrier"><code>cl_khr_<wbr>subgroup_<wbr>named_<wbr>barrier</code></a> adds barrier operations that cover subsets
of an OpenCL work-group.
@@ -50907,7 +54541,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_31"><a class="anchor" href="#_new_enums_31"></a>New Enums</h5>
+<h5 id="_new_enums_32"><a class="anchor" href="#_new_enums_32"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -50924,7 +54558,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_56"><a class="anchor" href="#_version_history_56"></a>Version History</h5>
+<h5 id="_version_history_57"><a class="anchor" href="#_version_history_57"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -50960,7 +54594,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_57"><a class="anchor" href="#_other_extension_metadata_57"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_58"><a class="anchor" href="#_other_extension_metadata_58"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -50975,7 +54609,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_57"><a class="anchor" href="#_description_57"></a>Description</h5>
+<h5 id="_description_58"><a class="anchor" href="#_description_58"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_subgroup_non_uniform_arithmetic"><code>cl_khr_<wbr>subgroup_<wbr>non_<wbr>uniform_<wbr>arithmetic</code></a> adds built-in OpenCL C functions
providing the ability to use some sub-group functions within non-uniform
@@ -51031,7 +54665,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_57"><a class="anchor" href="#_version_history_57"></a>Version History</h5>
+<h5 id="_version_history_58"><a class="anchor" href="#_version_history_58"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -51067,7 +54701,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_58"><a class="anchor" href="#_other_extension_metadata_58"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_59"><a class="anchor" href="#_other_extension_metadata_59"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -51082,7 +54716,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_58"><a class="anchor" href="#_description_58"></a>Description</h5>
+<h5 id="_description_59"><a class="anchor" href="#_description_59"></a>Description</h5>
</div>
<div class="sect4">
@@ -51114,7 +54748,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_58"><a class="anchor" href="#_version_history_58"></a>Version History</h5>
+<h5 id="_version_history_59"><a class="anchor" href="#_version_history_59"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -51147,10 +54781,21 @@
<dd>
<p>None</p>
</dd>
+<dt class="hdlist1"><strong>Deprecation State</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p><em>Promoted</em> to
+OpenCL 3.1</p>
+</li>
+</ul>
+</div>
+</dd>
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_59"><a class="anchor" href="#_other_extension_metadata_59"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_60"><a class="anchor" href="#_other_extension_metadata_60"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -51190,7 +54835,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_59"><a class="anchor" href="#_description_59"></a>Description</h5>
+<h5 id="_description_60"><a class="anchor" href="#_description_60"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_subgroup_rotate"><code>cl_khr_<wbr>subgroup_<wbr>rotate</code></a> adds built-in OpenCL C functions with support for a
new sub-group data exchange operation that makes it possible to rotate
@@ -51202,7 +54847,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_59"><a class="anchor" href="#_version_history_59"></a>Version History</h5>
+<h5 id="_version_history_60"><a class="anchor" href="#_version_history_60"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -51235,10 +54880,21 @@
<dd>
<p>None</p>
</dd>
+<dt class="hdlist1"><strong>Deprecation State</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p><em>Promoted</em> to
+OpenCL 3.1</p>
+</li>
+</ul>
+</div>
+</dd>
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_60"><a class="anchor" href="#_other_extension_metadata_60"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_61"><a class="anchor" href="#_other_extension_metadata_61"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -51253,7 +54909,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_60"><a class="anchor" href="#_description_60"></a>Description</h5>
+<h5 id="_description_61"><a class="anchor" href="#_description_61"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_subgroup_shuffle"><code>cl_khr_<wbr>subgroup_<wbr>shuffle</code></a> adds built-in OpenCL C functions providing
additional ways to exchange data among work items in a sub-group.</p>
@@ -51276,7 +54932,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_60"><a class="anchor" href="#_version_history_60"></a>Version History</h5>
+<h5 id="_version_history_61"><a class="anchor" href="#_version_history_61"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -51309,10 +54965,21 @@
<dd>
<p>None</p>
</dd>
+<dt class="hdlist1"><strong>Deprecation State</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p><em>Promoted</em> to
+OpenCL 3.1</p>
+</li>
+</ul>
+</div>
+</dd>
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_61"><a class="anchor" href="#_other_extension_metadata_61"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_62"><a class="anchor" href="#_other_extension_metadata_62"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -51327,7 +54994,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_61"><a class="anchor" href="#_description_61"></a>Description</h5>
+<h5 id="_description_62"><a class="anchor" href="#_description_62"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_subgroup_shuffle_relative"><code>cl_khr_<wbr>subgroup_<wbr>shuffle_<wbr>relative</code></a> adds built-in OpenCL C functions
providing specialized ways to exchange data among work items in a sub-group
@@ -51351,7 +55018,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_61"><a class="anchor" href="#_version_history_61"></a>Version History</h5>
+<h5 id="_version_history_62"><a class="anchor" href="#_version_history_62"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -51398,7 +55065,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_62"><a class="anchor" href="#_other_extension_metadata_62"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_63"><a class="anchor" href="#_other_extension_metadata_63"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -51413,7 +55080,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_62"><a class="anchor" href="#_description_62"></a>Description</h5>
+<h5 id="_description_63"><a class="anchor" href="#_description_63"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_subgroups"><code>cl_khr_<wbr>subgroups</code></a> adds support for implementation-controlled groups of work
items, known as sub-groups.
@@ -51465,7 +55132,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_32"><a class="anchor" href="#_new_enums_32"></a>New Enums</h5>
+<h5 id="_new_enums_33"><a class="anchor" href="#_new_enums_33"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -51485,7 +55152,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_62"><a class="anchor" href="#_version_history_62"></a>Version History</h5>
+<h5 id="_version_history_63"><a class="anchor" href="#_version_history_63"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -51518,10 +55185,21 @@
<dd>
<p>None</p>
</dd>
+<dt class="hdlist1"><strong>Deprecation State</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p><em>Promoted</em> to
+OpenCL 3.1</p>
+</li>
+</ul>
+</div>
+</dd>
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_63"><a class="anchor" href="#_other_extension_metadata_63"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_64"><a class="anchor" href="#_other_extension_metadata_64"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -51536,7 +55214,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_63"><a class="anchor" href="#_description_63"></a>Description</h5>
+<h5 id="_description_64"><a class="anchor" href="#_description_64"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_suggested_local_work_size"><code>cl_khr_<wbr>suggested_<wbr>local_<wbr>work_<wbr>size</code></a> adds the ability to query a suggested
local work-group size for a kernel running on a device for a specified
@@ -51564,7 +55242,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_63"><a class="anchor" href="#_version_history_63"></a>Version History</h5>
+<h5 id="_version_history_64"><a class="anchor" href="#_version_history_64"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -51600,7 +55278,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_64"><a class="anchor" href="#_other_extension_metadata_64"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_65"><a class="anchor" href="#_other_extension_metadata_65"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -51615,7 +55293,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_64"><a class="anchor" href="#_description_64"></a>Description</h5>
+<h5 id="_description_65"><a class="anchor" href="#_description_65"></a>Description</h5>
<div class="paragraph">
<p>The <a href="#cl_khr_terminate_context"><code>cl_khr_<wbr>terminate_<wbr>context</code></a> extension provides a new query to check
whether a device can terminate an OpenCL context, and adds an API to
@@ -51662,7 +55340,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_33"><a class="anchor" href="#_new_enums_33"></a>New Enums</h5>
+<h5 id="_new_enums_34"><a class="anchor" href="#_new_enums_34"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -51709,7 +55387,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_64"><a class="anchor" href="#_version_history_64"></a>Version History</h5>
+<h5 id="_version_history_65"><a class="anchor" href="#_version_history_65"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -51745,7 +55423,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_65"><a class="anchor" href="#_other_extension_metadata_65"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_66"><a class="anchor" href="#_other_extension_metadata_66"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -51760,7 +55438,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_65"><a class="anchor" href="#_description_65"></a>Description</h5>
+<h5 id="_description_66"><a class="anchor" href="#_description_66"></a>Description</h5>
<div class="paragraph">
<p>The <a href="#cl_khr_throttle_hints"><code>cl_khr_<wbr>throttle_<wbr>hints</code></a> extension adds throttle hints for OpenCL, but
does not specify the throttling behavior or minimum guarantees.
@@ -51786,7 +55464,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_34"><a class="anchor" href="#_new_enums_34"></a>New Enums</h5>
+<h5 id="_new_enums_35"><a class="anchor" href="#_new_enums_35"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -51819,7 +55497,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_65"><a class="anchor" href="#_version_history_65"></a>Version History</h5>
+<h5 id="_version_history_66"><a class="anchor" href="#_version_history_66"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -51855,7 +55533,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_66"><a class="anchor" href="#_other_extension_metadata_66"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_67"><a class="anchor" href="#_other_extension_metadata_67"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -51883,7 +55561,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_66"><a class="anchor" href="#_description_66"></a>Description</h5>
+<h5 id="_description_67"><a class="anchor" href="#_description_67"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_work_group_uniform_arithmetic"><code>cl_khr_<wbr>work_<wbr>group_<wbr>uniform_<wbr>arithmetic</code></a> adds additional built-in work-group
collective functions to OpenCL C.
@@ -51937,7 +55615,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_66"><a class="anchor" href="#_version_history_66"></a>Version History</h5>
+<h5 id="_version_history_67"><a class="anchor" href="#_version_history_67"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -51979,7 +55657,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_67"><a class="anchor" href="#_other_extension_metadata_67"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_68"><a class="anchor" href="#_other_extension_metadata_68"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -52016,7 +55694,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_67"><a class="anchor" href="#_description_67"></a>Description</h5>
+<h5 id="_description_68"><a class="anchor" href="#_description_68"></a>Description</h5>
<div class="paragraph">
<p>This extension provides access to raw device pointers for <code>cl_mem</code> buffers
without requiring a shared virtual address space between the host and
@@ -52049,7 +55727,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_command"><a class="anchor" href="#_new_command"></a>New Command</h5>
+<h5 id="_new_commands_18"><a class="anchor" href="#_new_commands_18"></a>New Commands</h5>
<div class="ulist">
<ul>
<li>
@@ -52069,7 +55747,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_35"><a class="anchor" href="#_new_enums_35"></a>New Enums</h5>
+<h5 id="_new_enums_36"><a class="anchor" href="#_new_enums_36"></a>New enums</h5>
<div class="ulist">
<ul>
<li>
@@ -52106,7 +55784,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_67"><a class="anchor" href="#_version_history_67"></a>Version History</h5>
+<h5 id="_version_history_68"><a class="anchor" href="#_version_history_68"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -52180,7 +55858,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_68"><a class="anchor" href="#_other_extension_metadata_68"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_69"><a class="anchor" href="#_other_extension_metadata_69"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -52220,7 +55898,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_68"><a class="anchor" href="#_description_68"></a>Description</h5>
+<h5 id="_description_69"><a class="anchor" href="#_description_69"></a>Description</h5>
<div class="paragraph">
<p>This extension adds support for building programs written using the C++ for
OpenCL kernel language documented in the <strong>OpenCL-Docs</strong> repository
@@ -52233,7 +55911,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_36"><a class="anchor" href="#_new_enums_36"></a>New Enums</h5>
+<h5 id="_new_enums_37"><a class="anchor" href="#_new_enums_37"></a>New enums</h5>
<div class="ulist">
<ul>
<li>
@@ -52283,7 +55961,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_68"><a class="anchor" href="#_version_history_68"></a>Version History</h5>
+<h5 id="_version_history_69"><a class="anchor" href="#_version_history_69"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -52319,7 +55997,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_69"><a class="anchor" href="#_other_extension_metadata_69"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_70"><a class="anchor" href="#_other_extension_metadata_70"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -52334,13 +56012,13 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_69"><a class="anchor" href="#_description_69"></a>Description</h5>
+<h5 id="_description_70"><a class="anchor" href="#_description_70"></a>Description</h5>
<div class="paragraph">
<p>Precursor to the functionality described in <a href="#platform-device-partitioning">Partitioning a Device</a>.</p>
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_69"><a class="anchor" href="#_version_history_69"></a>Version History</h5>
+<h5 id="_version_history_70"><a class="anchor" href="#_version_history_70"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -52384,7 +56062,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_70"><a class="anchor" href="#_other_extension_metadata_70"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_71"><a class="anchor" href="#_other_extension_metadata_71"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -52399,14 +56077,14 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_70"><a class="anchor" href="#_description_70"></a>Description</h5>
+<h5 id="_description_71"><a class="anchor" href="#_description_71"></a>Description</h5>
<div class="paragraph">
<p>The latest published specification for this extension is available on
the <a href="https://registry.khronos.org/OpenCL/extensions/ext/cl_ext_float_atomics.html">OpenCL registry</a>.</p>
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_70"><a class="anchor" href="#_version_history_70"></a>Version History</h5>
+<h5 id="_version_history_71"><a class="anchor" href="#_version_history_71"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -52450,7 +56128,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_71"><a class="anchor" href="#_other_extension_metadata_71"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_72"><a class="anchor" href="#_other_extension_metadata_72"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -52484,14 +56162,14 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_71"><a class="anchor" href="#_description_71"></a>Description</h5>
+<h5 id="_description_72"><a class="anchor" href="#_description_72"></a>Description</h5>
<div class="paragraph">
<p>This extension enables all types of images to be created from an existing buffer
object.</p>
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_37"><a class="anchor" href="#_new_enums_37"></a>New Enums</h5>
+<h5 id="_new_enums_38"><a class="anchor" href="#_new_enums_38"></a>New enums</h5>
<div class="ulist">
<ul>
<li>
@@ -52635,7 +56313,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_71"><a class="anchor" href="#_version_history_71"></a>Version History</h5>
+<h5 id="_version_history_72"><a class="anchor" href="#_version_history_72"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -52677,7 +56355,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_72"><a class="anchor" href="#_other_extension_metadata_72"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_73"><a class="anchor" href="#_other_extension_metadata_73"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -52692,14 +56370,34 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_72"><a class="anchor" href="#_description_72"></a>Description</h5>
+<h5 id="_description_73"><a class="anchor" href="#_description_73"></a>Description</h5>
<div class="paragraph">
<p>The latest published specification for this extension is available on
the <a href="https://registry.khronos.org/OpenCL/extensions/ext/cl_ext_image_raw10_raw12.html">OpenCL registry</a>.</p>
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_72"><a class="anchor" href="#_version_history_72"></a>Version History</h5>
+<h5 id="_new_enums_39"><a class="anchor" href="#_new_enums_39"></a>New enums</h5>
+<div class="ulist">
+<ul>
+<li>
+<p><code>cl_channel_<wbr>type</code></p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#CL_UNSIGNED_INT_RAW10_EXT"><code>CL_UNSIGNED_<wbr>INT_<wbr>RAW10_<wbr>EXT</code></a></p>
+</li>
+<li>
+<p><a href="#CL_UNSIGNED_INT_RAW12_EXT"><code>CL_UNSIGNED_<wbr>INT_<wbr>RAW12_<wbr>EXT</code></a></p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_version_history_73"><a class="anchor" href="#_version_history_73"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -52741,7 +56439,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_73"><a class="anchor" href="#_other_extension_metadata_73"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_74"><a class="anchor" href="#_other_extension_metadata_74"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -52785,14 +56483,14 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_73"><a class="anchor" href="#_description_73"></a>Description</h5>
+<h5 id="_description_74"><a class="anchor" href="#_description_74"></a>Description</h5>
<div class="paragraph">
<p>This extension enables applications to query requirements for an image without
having to create the image.</p>
</div>
</div>
<div class="sect4">
-<h5 id="_new_commands_18"><a class="anchor" href="#_new_commands_18"></a>New Commands</h5>
+<h5 id="_new_commands_19"><a class="anchor" href="#_new_commands_19"></a>New Commands</h5>
<div class="ulist">
<ul>
<li>
@@ -52812,7 +56510,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_38"><a class="anchor" href="#_new_enums_38"></a>New Enums</h5>
+<h5 id="_new_enums_40"><a class="anchor" href="#_new_enums_40"></a>New enums</h5>
<div class="ulist">
<ul>
<li>
@@ -52820,10 +56518,10 @@
<div class="ulist">
<ul>
<li>
-<p><a href="#CL_IMAGE_REQUIREMENTS_ROW_PITCH_ALIGNMENT_EXT"><code>CL_IMAGE_<wbr>REQUIREMENTS_<wbr>ROW_<wbr>PITCH_<wbr>ALIGNMENT_<wbr>EXT</code></a></p>
+<p><a href="#CL_IMAGE_REQUIREMENTS_BASE_ADDRESS_ALIGNMENT_EXT"><code>CL_IMAGE_<wbr>REQUIREMENTS_<wbr>BASE_<wbr>ADDRESS_<wbr>ALIGNMENT_<wbr>EXT</code></a></p>
</li>
<li>
-<p><a href="#CL_IMAGE_REQUIREMENTS_BASE_ADDRESS_ALIGNMENT_EXT"><code>CL_IMAGE_<wbr>REQUIREMENTS_<wbr>BASE_<wbr>ADDRESS_<wbr>ALIGNMENT_<wbr>EXT</code></a></p>
+<p><a href="#CL_IMAGE_REQUIREMENTS_ROW_PITCH_ALIGNMENT_EXT"><code>CL_IMAGE_<wbr>REQUIREMENTS_<wbr>ROW_<wbr>PITCH_<wbr>ALIGNMENT_<wbr>EXT</code></a></p>
</li>
<li>
<p><a href="#CL_IMAGE_REQUIREMENTS_SIZE_EXT"><code>CL_IMAGE_<wbr>REQUIREMENTS_<wbr>SIZE_<wbr>EXT</code></a></p>
@@ -53055,7 +56753,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_73"><a class="anchor" href="#_version_history_73"></a>Version History</h5>
+<h5 id="_version_history_74"><a class="anchor" href="#_version_history_74"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -53097,7 +56795,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_74"><a class="anchor" href="#_other_extension_metadata_74"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_75"><a class="anchor" href="#_other_extension_metadata_75"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -53122,7 +56820,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_74"><a class="anchor" href="#_description_74"></a>Description</h5>
+<h5 id="_description_75"><a class="anchor" href="#_description_75"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_ext_image_unorm_int_2_101010"><code>cl_ext_<wbr>image_<wbr>unorm_<wbr>int_<wbr>2_<wbr>101010</code></a> adds support for the <a href="#CL_UNORM_INT_2_101010_EXT"><code>CL_UNORM_<wbr>INT_<wbr>2_<wbr>101010_<wbr>EXT</code></a>
image format.</p>
@@ -53133,17 +56831,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_feature_macro"><a class="anchor" href="#_new_feature_macro"></a>New feature macro</h5>
-<div class="ulist">
-<ul>
-<li>
-<p><code>__opencl_c_<wbr>ext_<wbr>image_<wbr>unorm_<wbr>int_<wbr>2_<wbr>101010</code></p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_new_enums_39"><a class="anchor" href="#_new_enums_39"></a>New Enums</h5>
+<h5 id="_new_enums_41"><a class="anchor" href="#_new_enums_41"></a>New enums</h5>
<div class="ulist">
<ul>
<li>
@@ -53160,6 +56848,16 @@
</div>
</div>
<div class="sect4">
+<h5 id="_new_feature_macro"><a class="anchor" href="#_new_feature_macro"></a>New feature macro</h5>
+<div class="ulist">
+<ul>
+<li>
+<p><code>__opencl_c_<wbr>ext_<wbr>image_<wbr>unorm_<wbr>int_<wbr>2_<wbr>101010</code></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect4">
<h5 id="_new_opencl_c_channel_data_type"><a class="anchor" href="#_new_opencl_c_channel_data_type"></a>New OpenCL C channel data type</h5>
<div class="ulist">
<ul>
@@ -53170,7 +56868,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_74"><a class="anchor" href="#_version_history_74"></a>Version History</h5>
+<h5 id="_version_history_75"><a class="anchor" href="#_version_history_75"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -53212,7 +56910,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_75"><a class="anchor" href="#_other_extension_metadata_75"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_76"><a class="anchor" href="#_other_extension_metadata_76"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -53237,7 +56935,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_75"><a class="anchor" href="#_description_75"></a>Description</h5>
+<h5 id="_description_76"><a class="anchor" href="#_description_76"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_ext_image_unsigned_10x6_12x4_14x2"><code>cl_ext_<wbr>image_<wbr>unsigned_<wbr>10x6_<wbr>12x4_<wbr>14x2</code></a> adds support for the following image
formats:</p>
@@ -53270,17 +56968,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_feature_macro_2"><a class="anchor" href="#_new_feature_macro_2"></a>New feature macro</h5>
-<div class="ulist">
-<ul>
-<li>
-<p><code>__opencl_c_<wbr>ext_<wbr>image_<wbr>unsigned_<wbr>10x6_<wbr>12x4_<wbr>14x2</code></p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_new_enums_40"><a class="anchor" href="#_new_enums_40"></a>New Enums</h5>
+<h5 id="_new_enums_42"><a class="anchor" href="#_new_enums_42"></a>New enums</h5>
<div class="ulist">
<ul>
<li>
@@ -53312,6 +57000,16 @@
</div>
</div>
<div class="sect4">
+<h5 id="_new_feature_macro_2"><a class="anchor" href="#_new_feature_macro_2"></a>New feature macro</h5>
+<div class="ulist">
+<ul>
+<li>
+<p><code>__opencl_c_<wbr>ext_<wbr>image_<wbr>unsigned_<wbr>10x6_<wbr>12x4_<wbr>14x2</code></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect4">
<h5 id="_new_opencl_c_channel_data_type_2"><a class="anchor" href="#_new_opencl_c_channel_data_type_2"></a>New OpenCL C channel data type</h5>
<div class="ulist">
<ul>
@@ -53337,7 +57035,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_75"><a class="anchor" href="#_version_history_75"></a>Version History</h5>
+<h5 id="_version_history_76"><a class="anchor" href="#_version_history_76"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -53379,7 +57077,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_76"><a class="anchor" href="#_other_extension_metadata_76"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_77"><a class="anchor" href="#_other_extension_metadata_77"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -53420,7 +57118,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_76"><a class="anchor" href="#_description_76"></a>Description</h5>
+<h5 id="_description_77"><a class="anchor" href="#_description_77"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_ext_immutable_memory_objects"><code>cl_ext_<wbr>immutable_<wbr>memory_<wbr>objects</code></a> provides a mechanism to create memory
objects that cannot be modified by the implementation after creation. This,
@@ -53429,7 +57127,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_41"><a class="anchor" href="#_new_enums_41"></a>New Enums</h5>
+<h5 id="_new_enums_43"><a class="anchor" href="#_new_enums_43"></a>New enums</h5>
<div class="ulist">
<ul>
<li>
@@ -53454,14 +57152,14 @@
<div class="content">
<div class="paragraph">
<p><strong>RESOLVED</strong>: No. Memory objects created with <a href="#CL_MEM_READ_ONLY"><code>CL_MEM_<wbr>READ_<wbr>ONLY</code></a> can be modified
-by copy or fill commands and this behaviour cannot be changed without breaking
+by copy or fill commands and this behavior cannot be changed without breaking
backwards compatibility.</p>
</div>
</div>
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_76"><a class="anchor" href="#_version_history_76"></a>Version History</h5>
+<h5 id="_version_history_77"><a class="anchor" href="#_version_history_77"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -53497,7 +57195,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_77"><a class="anchor" href="#_other_extension_metadata_77"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_78"><a class="anchor" href="#_other_extension_metadata_78"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -53512,13 +57210,13 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_77"><a class="anchor" href="#_description_77"></a>Description</h5>
+<h5 id="_description_78"><a class="anchor" href="#_description_78"></a>Description</h5>
<div class="paragraph">
<p>Precursor to <a href="#clEnqueueMigrateMemObjects"><strong>clEnqueueMigrateMemObjects</strong></a>.</p>
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_77"><a class="anchor" href="#_version_history_77"></a>Version History</h5>
+<h5 id="_version_history_78"><a class="anchor" href="#_version_history_78"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -53558,6 +57256,9 @@
<li>
<p><code><a href="#cl_khr_external_semaphore_win32">cl_khr_external_semaphore_win32</a></code></p>
</li>
+<li>
+<p><code><a href="#cl_khr_unified_svm">cl_khr_unified_svm</a></code></p>
+</li>
</ul>
</div>
<div style="page-break-after: always;"></div>
@@ -53604,12 +57305,12 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_78"><a class="anchor" href="#_other_extension_metadata_78"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_79"><a class="anchor" href="#_other_extension_metadata_79"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
<dd>
-<p>2024-12-13</p>
+<p>2025-07-10</p>
</dd>
<dt class="hdlist1"><strong>IP Status</strong></dt>
<dd>
@@ -53677,7 +57378,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_78"><a class="anchor" href="#_description_78"></a>Description</h5>
+<h5 id="_description_79"><a class="anchor" href="#_description_79"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_command_buffer"><code>cl_khr_<wbr>command_<wbr>buffer</code></a> adds the ability to record and replay buffers of
OpenCL commands.</p>
@@ -53797,16 +57498,6 @@
from the sync-point values returned is implementation defined.</p>
</div>
</div>
-<div class="sect5">
-<h6 id="_simultaneous_use"><a class="anchor" href="#_simultaneous_use"></a>Simultaneous Use</h6>
-<div class="paragraph">
-<p>The optional simultaneous use capability was added to the extension so that
-vendors can support pipelined workflows, where command-buffers are repeatedly
-enqueued without blocking in user code. However, simultaneous use may result in
-command-buffers being more expensive to enqueue than in a sequential model, so
-the capability is optional to enable optimizations on command-buffer recording.</p>
-</div>
-</div>
</div>
<div class="sect4">
<h5 id="_interactions_with_other_extensions_2"><a class="anchor" href="#_interactions_with_other_extensions_2"></a>Interactions With Other Extensions</h5>
@@ -53900,7 +57591,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_commands_19"><a class="anchor" href="#_new_commands_19"></a>New Commands</h5>
+<h5 id="_new_commands_20"><a class="anchor" href="#_new_commands_20"></a>New Commands</h5>
<div class="ulist">
<ul>
<li>
@@ -54000,7 +57691,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_42"><a class="anchor" href="#_new_enums_42"></a>New Enums</h5>
+<h5 id="_new_enums_44"><a class="anchor" href="#_new_enums_44"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -54029,9 +57720,6 @@
<li>
<p><a href="#CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>CAPABILITY_<wbr>DEVICE_<wbr>SIDE_<wbr>ENQUEUE_<wbr>KHR</code></a></p>
</li>
-<li>
-<p><a href="#CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>CAPABILITY_<wbr>SIMULTANEOUS_<wbr>USE_<wbr>KHR</code></a></p>
-</li>
</ul>
</div>
</li>
@@ -54046,16 +57734,6 @@
</div>
</li>
<li>
-<p><code>cl_command_<wbr>buffer_<wbr>flags_<wbr>khr</code></p>
-<div class="ulist">
-<ul>
-<li>
-<p><a href="#CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>SIMULTANEOUS_<wbr>USE_<wbr>KHR</code></a></p>
-</li>
-</ul>
-</div>
-</li>
-<li>
<p><code>cl_command_<wbr>buffer_<wbr>info_<wbr>khr</code></p>
<div class="ulist">
<ul>
@@ -54090,9 +57768,6 @@
<li>
<p><a href="#CL_COMMAND_BUFFER_STATE_EXECUTABLE_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>STATE_<wbr>EXECUTABLE_<wbr>KHR</code></a></p>
</li>
-<li>
-<p><a href="#CL_COMMAND_BUFFER_STATE_PENDING_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>STATE_<wbr>PENDING_<wbr>KHR</code></a></p>
-</li>
</ul>
</div>
</li>
@@ -54337,7 +58012,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_78"><a class="anchor" href="#_version_history_78"></a>Version History</h5>
+<h5 id="_version_history_79"><a class="anchor" href="#_version_history_79"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -54424,6 +58099,17 @@
</ul>
</div>
</li>
+<li>
+<p>0.9.8, 2025-07-10</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Rework simultaneous use definition and remove pending state
+(experimental).</p>
+</li>
+</ul>
+</div>
+</li>
</ul>
</div>
</div>
@@ -54461,7 +58147,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_79"><a class="anchor" href="#_other_extension_metadata_79"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_80"><a class="anchor" href="#_other_extension_metadata_80"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -54528,7 +58214,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_79"><a class="anchor" href="#_description_79"></a>Description</h5>
+<h5 id="_description_80"><a class="anchor" href="#_description_80"></a>Description</h5>
<div class="paragraph">
<p>The <a href="#cl_khr_command_buffer"><code>cl_khr_<wbr>command_<wbr>buffer</code></a> extension separates command construction from
enqueue by providing a mechanism to record a set of commands which can then
@@ -54552,7 +58238,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_commands_20"><a class="anchor" href="#_new_commands_20"></a>New Commands</h5>
+<h5 id="_new_commands_21"><a class="anchor" href="#_new_commands_21"></a>New Commands</h5>
<div class="ulist">
<ul>
<li>
@@ -54577,7 +58263,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_43"><a class="anchor" href="#_new_enums_43"></a>New Enums</h5>
+<h5 id="_new_enums_45"><a class="anchor" href="#_new_enums_45"></a>New Enums</h5>
<div class="paragraph">
<p>Enums for querying device command-buffer capabilities with
<a href="#clGetDeviceInfo"><strong>clGetDeviceInfo</strong></a>, see the <a href="#multi-device-queries">device queries table</a>:</p>
@@ -54895,7 +58581,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_79"><a class="anchor" href="#_version_history_79"></a>Version History</h5>
+<h5 id="_version_history_80"><a class="anchor" href="#_version_history_80"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -54967,12 +58653,12 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_80"><a class="anchor" href="#_other_extension_metadata_80"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_81"><a class="anchor" href="#_other_extension_metadata_81"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
<dd>
-<p>2024-09-05</p>
+<p>2025-08-08</p>
</dd>
<dt class="hdlist1"><strong>IP Status</strong></dt>
<dd>
@@ -55034,7 +58720,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_80"><a class="anchor" href="#_description_80"></a>Description</h5>
+<h5 id="_description_81"><a class="anchor" href="#_description_81"></a>Description</h5>
<div class="paragraph">
<p>The <a href="#cl_khr_command_buffer"><code>cl_khr_<wbr>command_<wbr>buffer</code></a> extension separates command construction
from enqueue by providing a mechanism to record a set of commands which can
@@ -55050,6 +58736,17 @@
offsets, to change without having to re-record the entire command sequence
in a new command-buffer.</p>
</div>
+<div class="sect5">
+<h6 id="_simultaneous_use"><a class="anchor" href="#_simultaneous_use"></a>Simultaneous Use</h6>
+<div class="paragraph">
+<p>The optional <a href="#simultaneous-use">simultaneous use</a> capability was added to the
+extension so that vendors could support concurrent execution of the same
+command-buffer object which has been updated between submissions. However,
+simultaneous use may result in command-buffers having a larger overhead to
+implement, so the capability is optional to enable optimizations when this
+usage isn’t required by a user.</p>
+</div>
+</div>
</div>
<div class="sect4">
<h5 id="_interactions_with_other_extensions_3"><a class="anchor" href="#_interactions_with_other_extensions_3"></a>Interactions With Other Extensions</h5>
@@ -55067,7 +58764,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_commands_21"><a class="anchor" href="#_new_commands_21"></a>New Commands</h5>
+<h5 id="_new_commands_22"><a class="anchor" href="#_new_commands_22"></a>New Commands</h5>
<div class="ulist">
<ul>
<li>
@@ -55108,7 +58805,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_44"><a class="anchor" href="#_new_enums_44"></a>New Enums</h5>
+<h5 id="_new_enums_46"><a class="anchor" href="#_new_enums_46"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -55122,6 +58819,16 @@
</div>
</li>
<li>
+<p><code>cl_device_<wbr>command_<wbr>buffer_<wbr>capabilities_<wbr>khr</code></p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>CAPABILITY_<wbr>SIMULTANEOUS_<wbr>USE_<wbr>KHR</code></a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
<p><code>cl_command_<wbr>properties_<wbr>khr</code></p>
<div class="ulist">
<ul>
@@ -55207,6 +58914,9 @@
<li>
<p><a href="#CL_COMMAND_BUFFER_MUTABLE_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>MUTABLE_<wbr>KHR</code></a></p>
</li>
+<li>
+<p><a href="#CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>SIMULTANEOUS_<wbr>USE_<wbr>KHR</code></a></p>
+</li>
</ul>
</div>
</li>
@@ -55231,6 +58941,16 @@
</div>
</li>
<li>
+<p><code>cl_command_<wbr>buffer_<wbr>state_<wbr>khr</code></p>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#CL_COMMAND_BUFFER_STATE_FINALIZED_KHR"><code>CL_COMMAND_<wbr>BUFFER_<wbr>STATE_<wbr>FINALIZED_<wbr>KHR</code></a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
<p>New Error Codes</p>
<div class="ulist">
<ul>
@@ -55507,7 +59227,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_80"><a class="anchor" href="#_version_history_80"></a>Version History</h5>
+<h5 id="_version_history_81"><a class="anchor" href="#_version_history_81"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -55553,6 +59273,29 @@
</ul>
</div>
</li>
+<li>
+<p>Revision 0.9.4, 2025-08-08</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Move <code>CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR</code> and
+<code>CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR</code> in this
+extension from the base extension (experimental).</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Revision 0.9.5 2025-08-28</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Permitting recording ND-range kernel commands without having set all of
+their arguments (experimental).</p>
+</li>
+</ul>
+</div>
+</li>
</ul>
</div>
</div>
@@ -55592,7 +59335,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_81"><a class="anchor" href="#_other_extension_metadata_81"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_82"><a class="anchor" href="#_other_extension_metadata_82"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -55629,7 +59372,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_81"><a class="anchor" href="#_description_81"></a>Description</h5>
+<h5 id="_description_82"><a class="anchor" href="#_description_82"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_external_memory_android_hardware_buffer"><code>cl_khr_<wbr>external_<wbr>memory_<wbr>android_<wbr>hardware_<wbr>buffer</code></a> extends the functionality provided by <a href="#cl_khr_external_memory"><code>cl_khr_<wbr>external_<wbr>memory</code></a>.
It enables an application to create an OpenCL image or buffer object from an AHardwareBuffer.
@@ -55651,7 +59394,7 @@
</div>
<div class="sect4">
-<h5 id="_new_enums_45"><a class="anchor" href="#_new_enums_45"></a>New Enums</h5>
+<h5 id="_new_enums_47"><a class="anchor" href="#_new_enums_47"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -55772,7 +59515,7 @@
</ol>
</div>
<div class="sect5">
-<h6 id="_version_history_81"><a class="anchor" href="#_version_history_81"></a>Version History</h6>
+<h6 id="_version_history_82"><a class="anchor" href="#_version_history_82"></a>Version History</h6>
<div class="ulist">
<ul>
<li>
@@ -55837,7 +59580,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_82"><a class="anchor" href="#_other_extension_metadata_82"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_83"><a class="anchor" href="#_other_extension_metadata_83"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -55910,7 +59653,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_82"><a class="anchor" href="#_description_82"></a>Description</h5>
+<h5 id="_description_83"><a class="anchor" href="#_description_83"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_external_semaphore_dx_fence"><code>cl_khr_<wbr>external_<wbr>semaphore_<wbr>dx_<wbr>fence</code></a> supports importing and exporting a
D3D12 fence as an external semaphore using the APIs introduced by
@@ -55918,7 +59661,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_46"><a class="anchor" href="#_new_enums_46"></a>New Enums</h5>
+<h5 id="_new_enums_48"><a class="anchor" href="#_new_enums_48"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -55935,7 +59678,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_82"><a class="anchor" href="#_version_history_82"></a>Version History</h5>
+<h5 id="_version_history_83"><a class="anchor" href="#_version_history_83"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -55989,7 +59732,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_83"><a class="anchor" href="#_other_extension_metadata_83"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_84"><a class="anchor" href="#_other_extension_metadata_84"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -56062,7 +59805,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_83"><a class="anchor" href="#_description_83"></a>Description</h5>
+<h5 id="_description_84"><a class="anchor" href="#_description_84"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_external_semaphore_win32"><code>cl_khr_<wbr>external_<wbr>semaphore_<wbr>win32</code></a> supports importing and exporting an NT
handle or global share handle as an external semaphore using the APIs
@@ -56070,7 +59813,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_47"><a class="anchor" href="#_new_enums_47"></a>New Enums</h5>
+<h5 id="_new_enums_49"><a class="anchor" href="#_new_enums_49"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -56093,7 +59836,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_83"><a class="anchor" href="#_version_history_83"></a>Version History</h5>
+<h5 id="_version_history_84"><a class="anchor" href="#_version_history_84"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -56120,6 +59863,330 @@
</div>
</div>
</div>
+<div class="sect3">
+<h4 id="cl_khr_unified_svm"><a class="anchor" href="#cl_khr_unified_svm"></a>cl_khr_unified_svm</h4>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><strong>Name String</strong></dt>
+<dd>
+<p><code>cl_khr_unified_svm</code></p>
+</dd>
+<dt class="hdlist1"><strong>Ratification Status</strong></dt>
+<dd>
+<p>Not ratified</p>
+</dd>
+<dt class="hdlist1"><strong>Extension and Version Dependencies</strong></dt>
+<dd>
+<p>None</p>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>This is a <em>experimental</em> extension and <strong class="purple">must</strong> be used with caution.
+See the <a href="#boilerplate-experimental-header">description</a> of experimental header files for enablement and stability details.</strong></p>
+</li>
+</ul>
+</div>
+</dd>
+</dl>
+</div>
+<div class="sect4">
+<h5 id="_other_extension_metadata_85"><a class="anchor" href="#_other_extension_metadata_85"></a>Other Extension Metadata</h5>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
+<dd>
+<p>2025-08-30</p>
+</dd>
+<dt class="hdlist1"><strong>IP Status</strong></dt>
+<dd>
+<p>No known IP claims.</p>
+</dd>
+<dt class="hdlist1"><strong>Contributors</strong></dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p>Brice Videau, Argonne National Laboratory</p>
+</li>
+<li>
+<p>Kévin Petit, Arm Ltd.</p>
+</li>
+<li>
+<p>Ewan Crawford, Codeplay Software Ltd.</p>
+</li>
+<li>
+<p>Paul Fradgley, Imagination Technologies</p>
+</li>
+<li>
+<p>Ben Ashbaugh, Intel</p>
+</li>
+<li>
+<p>Pekka Jääskeläinen, Intel</p>
+</li>
+<li>
+<p>Nikhil Joshi, NVIDIA</p>
+</li>
+<li>
+<p>Balaji Calidas, Qualcomm Technologies Inc.</p>
+</li>
+</ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_description_85"><a class="anchor" href="#_description_85"></a>Description</h5>
+<div class="paragraph">
+<p>This extension adds additional types of Shared Virtual Memory (SVM) to OpenCL.</p>
+</div>
+<div class="paragraph">
+<p>The extension is still under development.
+To learn more about the APIs proposed for this extension, or to provide feedback, please visit:</p>
+</div>
+<div class="paragraph">
+<p><a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1282" class="bare">https://github.com/KhronosGroup/OpenCL-Docs/pull/1282</a></p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_new_commands_23"><a class="anchor" href="#_new_commands_23"></a>New Commands</h5>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#clSVMAllocWithPropertiesKHR"><strong>clSVMAllocWithPropertiesKHR</strong></a><a id="clSVMAllocWithPropertiesKHR"></a></p>
+</li>
+<li>
+<p><a href="#clSVMFreeWithPropertiesKHR"><strong>clSVMFreeWithPropertiesKHR</strong></a><a id="clSVMFreeWithPropertiesKHR"></a></p>
+</li>
+<li>
+<p><a href="#clGetSVMPointerInfoKHR"><strong>clGetSVMPointerInfoKHR</strong></a><a id="clGetSVMPointerInfoKHR"></a></p>
+</li>
+<li>
+<p><a href="#clGetSVMSuggestedTypeIndexKHR"><strong>clGetSVMSuggestedTypeIndexKHR</strong></a><a id="clGetSVMSuggestedTypeIndexKHR"></a></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_new_types_23"><a class="anchor" href="#_new_types_23"></a>New Types</h5>
+<div class="ulist">
+<ul>
+<li>
+<p><code>cl_svm_<wbr>capabilities_<wbr>khr</code></p>
+</li>
+<li>
+<p><code>cl_svm_<wbr>alloc_<wbr>properties_<wbr>khr</code></p>
+</li>
+<li>
+<p><code>cl_svm_<wbr>alloc_<wbr>access_<wbr>flags_<wbr>khr</code></p>
+</li>
+<li>
+<p><code>cl_svm_<wbr>free_<wbr>properties_<wbr>khr</code></p>
+</li>
+<li>
+<p><code>cl_svm_<wbr>free_<wbr>flags_<wbr>khr</code></p>
+</li>
+<li>
+<p><code>cl_svm_<wbr>pointer_<wbr>info_<wbr>khr</code></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_new_enums_50"><a class="anchor" href="#_new_enums_50"></a>New Enums</h5>
+<div class="ulist">
+<ul>
+<li>
+<p><code>cl_platform_<wbr>info</code></p>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="CL_PLATFORM_SVM_TYPE_CAPABILITIES_KHR"></a><a href="#CL_PLATFORM_SVM_TYPE_CAPABILITIES_KHR"><code>CL_PLATFORM_<wbr>SVM_<wbr>TYPE_<wbr>CAPABILITIES_<wbr>KHR</code></a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><code>cl_device_<wbr>info</code></p>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="CL_DEVICE_SVM_TYPE_CAPABILITIES_KHR"></a><a href="#CL_DEVICE_SVM_TYPE_CAPABILITIES_KHR"><code>CL_DEVICE_<wbr>SVM_<wbr>TYPE_<wbr>CAPABILITIES_<wbr>KHR</code></a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><code>cl_svm_<wbr>capabilities_<wbr>khr</code></p>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="CL_SVM_CAPABILITY_SINGLE_ADDRESS_SPACE_KHR"></a><a href="#CL_SVM_CAPABILITY_SINGLE_ADDRESS_SPACE_KHR"><code>CL_SVM_<wbr>CAPABILITY_<wbr>SINGLE_<wbr>ADDRESS_<wbr>SPACE_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_CAPABILITY_SYSTEM_ALLOCATED_KHR"></a><a href="#CL_SVM_CAPABILITY_SYSTEM_ALLOCATED_KHR"><code>CL_SVM_<wbr>CAPABILITY_<wbr>SYSTEM_<wbr>ALLOCATED_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_CAPABILITY_DEVICE_OWNED_KHR"></a><a href="#CL_SVM_CAPABILITY_DEVICE_OWNED_KHR"><code>CL_SVM_<wbr>CAPABILITY_<wbr>DEVICE_<wbr>OWNED_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_CAPABILITY_DEVICE_UNASSOCIATED_KHR"></a><a href="#CL_SVM_CAPABILITY_DEVICE_UNASSOCIATED_KHR"><code>CL_SVM_<wbr>CAPABILITY_<wbr>DEVICE_<wbr>UNASSOCIATED_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_CAPABILITY_CONTEXT_ACCESS_KHR"></a><a href="#CL_SVM_CAPABILITY_CONTEXT_ACCESS_KHR"><code>CL_SVM_<wbr>CAPABILITY_<wbr>CONTEXT_<wbr>ACCESS_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_CAPABILITY_HOST_OWNED_KHR"></a><a href="#CL_SVM_CAPABILITY_HOST_OWNED_KHR"><code>CL_SVM_<wbr>CAPABILITY_<wbr>HOST_<wbr>OWNED_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_CAPABILITY_HOST_READ_KHR"></a><a href="#CL_SVM_CAPABILITY_HOST_READ_KHR"><code>CL_SVM_<wbr>CAPABILITY_<wbr>HOST_<wbr>READ_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_CAPABILITY_HOST_WRITE_KHR"></a><a href="#CL_SVM_CAPABILITY_HOST_WRITE_KHR"><code>CL_SVM_<wbr>CAPABILITY_<wbr>HOST_<wbr>WRITE_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_CAPABILITY_HOST_MAP_KHR"></a><a href="#CL_SVM_CAPABILITY_HOST_MAP_KHR"><code>CL_SVM_<wbr>CAPABILITY_<wbr>HOST_<wbr>MAP_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_CAPABILITY_DEVICE_READ_KHR"></a><a href="#CL_SVM_CAPABILITY_DEVICE_READ_KHR"><code>CL_SVM_<wbr>CAPABILITY_<wbr>DEVICE_<wbr>READ_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_CAPABILITY_DEVICE_WRITE_KHR"></a><a href="#CL_SVM_CAPABILITY_DEVICE_WRITE_KHR"><code>CL_SVM_<wbr>CAPABILITY_<wbr>DEVICE_<wbr>WRITE_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_CAPABILITY_DEVICE_ATOMIC_ACCESS_KHR"></a><a href="#CL_SVM_CAPABILITY_DEVICE_ATOMIC_ACCESS_KHR"><code>CL_SVM_<wbr>CAPABILITY_<wbr>DEVICE_<wbr>ATOMIC_<wbr>ACCESS_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_CAPABILITY_CONCURRENT_ACCESS_KHR"></a><a href="#CL_SVM_CAPABILITY_CONCURRENT_ACCESS_KHR"><code>CL_SVM_<wbr>CAPABILITY_<wbr>CONCURRENT_<wbr>ACCESS_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_CAPABILITY_CONCURRENT_ATOMIC_ACCESS_KHR"></a><a href="#CL_SVM_CAPABILITY_CONCURRENT_ATOMIC_ACCESS_KHR"><code>CL_SVM_<wbr>CAPABILITY_<wbr>CONCURRENT_<wbr>ATOMIC_<wbr>ACCESS_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_CAPABILITY_INDIRECT_ACCESS_KHR"></a><a href="#CL_SVM_CAPABILITY_INDIRECT_ACCESS_KHR"><code>CL_SVM_<wbr>CAPABILITY_<wbr>INDIRECT_<wbr>ACCESS_<wbr>KHR</code></a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><code>cl_svm_<wbr>alloc_<wbr>properties_<wbr>khr</code></p>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="CL_SVM_ALLOC_ASSOCIATED_DEVICE_HANDLE_KHR"></a><a href="#CL_SVM_ALLOC_ASSOCIATED_DEVICE_HANDLE_KHR"><code>CL_SVM_<wbr>ALLOC_<wbr>ASSOCIATED_<wbr>DEVICE_<wbr>HANDLE_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_ALLOC_ACCESS_FLAGS_KHR"></a><a href="#CL_SVM_ALLOC_ACCESS_FLAGS_KHR"><code>CL_SVM_<wbr>ALLOC_<wbr>ACCESS_<wbr>FLAGS_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_ALLOC_ALIGNMENT_KHR"></a><a href="#CL_SVM_ALLOC_ALIGNMENT_KHR"><code>CL_SVM_<wbr>ALLOC_<wbr>ALIGNMENT_<wbr>KHR</code></a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><code>cl_svm_<wbr>alloc_<wbr>access_<wbr>flags_<wbr>khr</code></p>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="CL_SVM_ALLOC_ACCESS_HOST_NOREAD_KHR"></a><a href="#CL_SVM_ALLOC_ACCESS_HOST_NOREAD_KHR"><code>CL_SVM_<wbr>ALLOC_<wbr>ACCESS_<wbr>HOST_<wbr>NOREAD_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_ALLOC_ACCESS_HOST_NOWRITE_KHR"></a><a href="#CL_SVM_ALLOC_ACCESS_HOST_NOWRITE_KHR"><code>CL_SVM_<wbr>ALLOC_<wbr>ACCESS_<wbr>HOST_<wbr>NOWRITE_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_ALLOC_ACCESS_DEVICE_NOREAD_KHR"></a><a href="#CL_SVM_ALLOC_ACCESS_DEVICE_NOREAD_KHR"><code>CL_SVM_<wbr>ALLOC_<wbr>ACCESS_<wbr>DEVICE_<wbr>NOREAD_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_ALLOC_ACCESS_DEVICE_NOWRITE_KHR"></a><a href="#CL_SVM_ALLOC_ACCESS_DEVICE_NOWRITE_KHR"><code>CL_SVM_<wbr>ALLOC_<wbr>ACCESS_<wbr>DEVICE_<wbr>NOWRITE_<wbr>KHR</code></a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><code>cl_svm_<wbr>pointer_<wbr>info_<wbr>khr</code></p>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="CL_SVM_INFO_TYPE_INDEX_KHR"></a><a href="#CL_SVM_INFO_TYPE_INDEX_KHR"><code>CL_SVM_<wbr>INFO_<wbr>TYPE_<wbr>INDEX_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_INFO_CAPABILITIES_KHR"></a><a href="#CL_SVM_INFO_CAPABILITIES_KHR"><code>CL_SVM_<wbr>INFO_<wbr>CAPABILITIES_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_INFO_PROPERTIES_KHR"></a><a href="#CL_SVM_INFO_PROPERTIES_KHR"><code>CL_SVM_<wbr>INFO_<wbr>PROPERTIES_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_INFO_ACCESS_FLAGS_KHR"></a><a href="#CL_SVM_INFO_ACCESS_FLAGS_KHR"><code>CL_SVM_<wbr>INFO_<wbr>ACCESS_<wbr>FLAGS_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_INFO_BASE_PTR_KHR"></a><a href="#CL_SVM_INFO_BASE_PTR_KHR"><code>CL_SVM_<wbr>INFO_<wbr>BASE_<wbr>PTR_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_INFO_SIZE_KHR"></a><a href="#CL_SVM_INFO_SIZE_KHR"><code>CL_SVM_<wbr>INFO_<wbr>SIZE_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_INFO_ASSOCIATED_DEVICE_HANDLE_KHR"></a><a href="#CL_SVM_INFO_ASSOCIATED_DEVICE_HANDLE_KHR"><code>CL_SVM_<wbr>INFO_<wbr>ASSOCIATED_<wbr>DEVICE_<wbr>HANDLE_<wbr>KHR</code></a></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><code>cl_kernel_<wbr>exec_<wbr>info</code></p>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="CL_KERNEL_EXEC_INFO_SVM_INDIRECT_ACCESS_KHR"></a><a href="#CL_KERNEL_EXEC_INFO_SVM_INDIRECT_ACCESS_KHR"><code>CL_KERNEL_<wbr>EXEC_<wbr>INFO_<wbr>SVM_<wbr>INDIRECT_<wbr>ACCESS_<wbr>KHR</code></a></p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_svm_type_convenience_macros"><a class="anchor" href="#_svm_type_convenience_macros"></a>SVM Type Convenience Macros</h5>
+<div class="ulist">
+<ul>
+<li>
+<p><a id="CL_SVM_TYPE_MACRO_COARSE_GRAIN_BUFFER_KHR"></a><a href="#CL_SVM_TYPE_MACRO_COARSE_GRAIN_BUFFER_KHR"><code>CL_SVM_<wbr>TYPE_<wbr>MACRO_<wbr>COARSE_<wbr>GRAIN_<wbr>BUFFER_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_TYPE_MACRO_FINE_GRAIN_BUFFER_KHR"></a><a href="#CL_SVM_TYPE_MACRO_FINE_GRAIN_BUFFER_KHR"><code>CL_SVM_<wbr>TYPE_<wbr>MACRO_<wbr>FINE_<wbr>GRAIN_<wbr>BUFFER_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_TYPE_MACRO_DEVICE_KHR"></a><a href="#CL_SVM_TYPE_MACRO_DEVICE_KHR"><code>CL_SVM_<wbr>TYPE_<wbr>MACRO_<wbr>DEVICE_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_TYPE_MACRO_HOST_KHR"></a><a href="#CL_SVM_TYPE_MACRO_HOST_KHR"><code>CL_SVM_<wbr>TYPE_<wbr>MACRO_<wbr>HOST_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_TYPE_MACRO_SINGLE_DEVICE_SHARED_KHR"></a><a href="#CL_SVM_TYPE_MACRO_SINGLE_DEVICE_SHARED_KHR"><code>CL_SVM_<wbr>TYPE_<wbr>MACRO_<wbr>SINGLE_<wbr>DEVICE_<wbr>SHARED_<wbr>KHR</code></a></p>
+</li>
+<li>
+<p><a id="CL_SVM_TYPE_MACRO_SYSTEM_KHR"></a><a href="#CL_SVM_TYPE_MACRO_SYSTEM_KHR"><code>CL_SVM_<wbr>TYPE_<wbr>MACRO_<wbr>SYSTEM_<wbr>KHR</code></a></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_version_history_85"><a class="anchor" href="#_version_history_85"></a>Version History</h5>
+<div class="ulist">
+<ul>
+<li>
+<p>Revision 0.9.0, 2025-08-30</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Initial revision incorporated into the main specification (experimental).</p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+</div>
</div>
<div class="sect2">
<h3 id="deprecated-extension-appendices-list"><a class="anchor" href="#deprecated-extension-appendices-list"></a>List of Deprecated Extensions</h3>
@@ -56170,7 +60237,7 @@
</dl>
</div>
<div class="sect4">
-<h5 id="_other_extension_metadata_84"><a class="anchor" href="#_other_extension_metadata_84"></a>Other Extension Metadata</h5>
+<h5 id="_other_extension_metadata_86"><a class="anchor" href="#_other_extension_metadata_86"></a>Other Extension Metadata</h5>
<div class="dlist">
<dl>
<dt class="hdlist1"><strong>Last Modified Date</strong></dt>
@@ -56185,7 +60252,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_description_84"><a class="anchor" href="#_description_84"></a>Description</h5>
+<h5 id="_description_86"><a class="anchor" href="#_description_86"></a>Description</h5>
<div class="paragraph">
<p><a href="#cl_khr_spir"><code>cl_khr_<wbr>spir</code></a> adds the ability to create an OpenCL program object from a
Standard Portable Intermediate Representation (SPIR) instance.
@@ -56203,7 +60270,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_new_enums_48"><a class="anchor" href="#_new_enums_48"></a>New Enums</h5>
+<h5 id="_new_enums_51"><a class="anchor" href="#_new_enums_51"></a>New Enums</h5>
<div class="ulist">
<ul>
<li>
@@ -56230,7 +60297,7 @@
</div>
</div>
<div class="sect4">
-<h5 id="_version_history_84"><a class="anchor" href="#_version_history_84"></a>Version History</h5>
+<h5 id="_version_history_86"><a class="anchor" href="#_version_history_86"></a>Version History</h5>
<div class="ulist">
<ul>
<li>
@@ -56291,6 +60358,8 @@
Tanya Lattner, Apple<br>
Mikael Bourges-Sevenier, Aptina<br>
Brice Videau, Argonne National Laboratory<br>
+Thomas Applencourt, Argonne National Laboratory<br>
+Nevin Liber, Argonne National Laboratory<br>
Anton Lokhmotov, ARM<br>
Dave Shreiner, ARM<br>
Einar Hov, ARM<br>
@@ -56311,11 +60380,15 @@
Alistair Donaldson, Codeplay<br>
Alastair Murray, Codeplay<br>
Ewan Crawford, Codeplay<br>
+Ewa Gałamon, Cognizant<br>
+Marcin Hajder, Cognizant<br>
+Faith Ekstrand, Collabora<br>
Stephen Frye, Electronic Arts<br>
Eric Schenk, Electronic Arts<br>
Daniel Laroche, Freescale<br>
David Neto, Google<br>
James Price, Google<br>
+Romaric Jodin, Google<br>
Robin Grosman, Huawei<br>
Craig Davies, Huawei<br>
Brian Horton, IBM<br>
@@ -56326,6 +60399,7 @@
Mark Nutter, IBM<br>
Mike Perks, IBM<br>
Sean Wagner, IBM<br>
+Ahmed Amrani Akdi, Imagination Technologies<br>
Jeremy Kemp, Imagination Technologies<br>
Jon Parr, Imagination Technologies<br>
Paul Fradgley, Imagination Technologies<br>
@@ -56351,6 +60425,7 @@
Jayanth Rao, Intel<br>
Josh Fryman, Intel<br>
Kevin Stevens, Intel<br>
+Konrad Trifunovic, Intel<br>
Larry Seiler, Intel<br>
Michael Kinsner, Intel<br>
Michal Mrozek, Intel<br>
@@ -56367,6 +60442,7 @@
Bor-Sung Liang, Mediatek<br>
Rahul Agarwal, Mediatek<br>
Michal Witaszek, Mobica<br>
+Aharon Abramson, Mobileye<br>
JenqKuen Lee, NTHU<br>
Amit Rao, NVIDIA<br>
Ashish Srivastava, NVIDIA<br>
@@ -56395,9 +60471,11 @@
Mayuresh Pise, NVIDIA<br>
Allan Tzeng, QUALCOMM<br>
Alex Bourd, QUALCOMM<br>
+Alexander Galazin, QUALCOMM<br>
Andrew Gruber, QUALCOMM<br>
Andrzej Mamona, QUALCOMM<br>
Anirudh Acharya, QUALCOMM<br>
+Arvind Sudarsanam, QUALCOMM<br>
Balaji Calidas, QUALCOMM<br>
Benedict Gaster, QUALCOMM<br>
Bill Torzewski, QUALCOMM<br>
@@ -56410,6 +60488,7 @@
Hongqiang Wang, QUALCOMM<br>
Jay Yun, QUALCOMM<br>
Jian Liu, QUALCOMM<br>
+Jose Lopez, QUALCOMM<br>
Joshua Kelly, QUALCOMM<br>
Lee Howes, QUALCOMM<br>
Lihan Bin, QUALCOMM<br>
@@ -56423,7 +60502,11 @@
Vlad Shimanskiy, QUALCOMM<br>
Yu-Chi Huang, QUALCOMM<br>
Yuehai Du, QUALCOMM<br>
+Karol Herbst, Red Hat<br>
+Austin Annestrand, Samsung<br>
Raun Krisch, Samsung<br>
+Gowtham Tammana, Samsung<br>
+Pavan Lanka, Samsung<br>
Tasneem Brutch, Samsung<br>
Yoonseo Choi, Samsung<br>
Dennis Adams, Sony<br>
@@ -56434,6 +60517,7 @@
Jakub Szuppe, StreamHPC<br>
Máté Ferenc Nagy-Egri, StreamHPC<br>
Vincent Hindriksen, StreamHPC<br>
+Pekka Jääskeläinen, Tampere University<br>
Ajay Jayaraj, Texas Instruments<br>
Alan Ward, Texas Instruments<br>
Yuan Zhao, Texas Instruments<br>
@@ -56460,7 +60544,7 @@
<div id="footnotes" style="max-width: 100%;">
<hr>
<div class="footnote" id="_footnotedef_1">
-<a href="#_footnoteref_1">1</a>. This value for memory_scope can only be used with atomic_work_item_fence with flags set to <code>CLK_IMAGE_MEM_FENCE</code>.
+<a href="#_footnoteref_1">1</a>. This value for <strong>memory_scope</strong> can only be used with <strong>atomic_work_item_fence</strong> with flags set to <code>CLK_IMAGE_MEM_FENCE</code>.
</div>
<div class="footnote" id="_footnotedef_2">
<a href="#_footnoteref_2">2</a>. The platform profile returns the profile that is implemented by the OpenCL framework. If the platform profile returned is FULL_PROFILE, the OpenCL framework will support devices that are FULL_PROFILE and may also support devices that are EMBEDDED_PROFILE. The compiler must be available for all devices i.e. <a href="#CL_DEVICE_COMPILER_AVAILABLE"><code>CL_DEVICE_<wbr>COMPILER_<wbr>AVAILABLE</code></a> is <a href="#CL_TRUE"><code>CL_TRUE</code></a>. If the platform profile returned is EMBEDDED_PROFILE, then devices that are only EMBEDDED_PROFILE are supported.
@@ -56484,94 +60568,100 @@
<a href="#_footnoteref_8">8</a>. The optional rounding modes should be included as a device capability only if it is supported natively. All explicit conversion functions with specific rounding modes must still operate correctly.
</div>
<div class="footnote" id="_footnotedef_9">
-<a href="#_footnoteref_9">9</a>. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
+<a href="#_footnoteref_9">9</a>. When the query for <a href="#CL_DEVICE_HOST_UNIFIED_MEMORY"><code>CL_DEVICE_<wbr>HOST_<wbr>UNIFIED_<wbr>MEMORY</code></a> is <a href="#CL_TRUE"><code>CL_TRUE</code></a>, allocating OpenCL memory will likely reduce the amount of host memory available to the system. Likewise, allocating host memory will likely reduce the amount of memory available to OpenCL. If the memory described by <a href="#CL_DEVICE_GLOBAL_MEM_SIZE"><code>CL_DEVICE_<wbr>GLOBAL_<wbr>MEM_<wbr>SIZE</code></a> is primarily host memory, such as for CPUs, integrated GPUs, and other devices with a relatively small amount of dedicated device memory, then the device should return <a href="#CL_TRUE"><code>CL_TRUE</code></a> for <a href="#CL_DEVICE_HOST_UNIFIED_MEMORY"><code>CL_DEVICE_<wbr>HOST_<wbr>UNIFIED_<wbr>MEMORY</code></a>.
</div>
<div class="footnote" id="_footnotedef_10">
-<a href="#_footnoteref_10">10</a>. Note that this flag does not provide meaning for atomic memory operations, but only for atomic fence operations in certain circumstances, refer to the Memory Scope section of the OpenCL C specification.
+<a href="#_footnoteref_10">10</a>. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
</div>
<div class="footnote" id="_footnotedef_11">
-<a href="#_footnoteref_11">11</a>. Duplicate devices specified in <em>devices</em> are ignored.
+<a href="#_footnoteref_11">11</a>. Note that this flag does not provide meaning for atomic memory operations, but only for atomic fence operations in certain circumstances, refer to the Memory Scope section of the OpenCL C specification.
</div>
<div class="footnote" id="_footnotedef_12">
-<a href="#_footnoteref_12">12</a>. <a href="#clCreateContextFromType"><strong>clCreateContextFromType</strong></a> may create a context for all or a subset of the actual physical devices present in the platform that match <em>device_type</em>.
+<a href="#_footnoteref_12">12</a>. Duplicate devices specified in <em>devices</em> are ignored.
</div>
<div class="footnote" id="_footnotedef_13">
-<a href="#_footnoteref_13">13</a>. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
+<a href="#_footnoteref_13">13</a>. <a href="#clCreateContextFromType"><strong>clCreateContextFromType</strong></a> may create a context for all or a subset of the actual physical devices present in the platform that match <em>device_type</em>.
</div>
<div class="footnote" id="_footnotedef_14">
-<a href="#_footnoteref_14">14</a>. Only out-of-order device queues are supported.
+<a href="#_footnoteref_14">14</a>. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
</div>
<div class="footnote" id="_footnotedef_15">
-<a href="#_footnoteref_15">15</a>. The application must create a default device queue if any kernels containing calls to <code>get_default_queue</code> are enqueued. There can only be one default device queue for each device within a context. If a default device queue has already been created, calling <a href="#clCreateCommandQueueWithProperties"><strong>clCreateCommandQueueWithProperties</strong></a> with <a href="#CL_QUEUE_PROPERTIES"><code>CL_QUEUE_<wbr>PROPERTIES</code></a> set to <a href="#CL_QUEUE_ON_DEVICE"><code>CL_QUEUE_<wbr>ON_<wbr>DEVICE</code></a> and <a href="#CL_QUEUE_ON_DEVICE_DEFAULT"><code>CL_QUEUE_<wbr>ON_<wbr>DEVICE_<wbr>DEFAULT</code></a> will return the default device queue that has already been created and increment its reference count by 1.
+<a href="#_footnoteref_15">15</a>. Only out-of-order device queues are supported.
</div>
<div class="footnote" id="_footnotedef_16">
-<a href="#_footnoteref_16">16</a>. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
+<a href="#_footnoteref_16">16</a>. The application must create a default device queue if any kernels containing calls to <code>get_default_queue</code> are enqueued. There can only be one default device queue for each device within a context. If a default device queue has already been created, calling <a href="#clCreateCommandQueueWithProperties"><strong>clCreateCommandQueueWithProperties</strong></a> with <a href="#CL_QUEUE_PROPERTIES"><code>CL_QUEUE_<wbr>PROPERTIES</code></a> set to <a href="#CL_QUEUE_ON_DEVICE"><code>CL_QUEUE_<wbr>ON_<wbr>DEVICE</code></a> and <a href="#CL_QUEUE_ON_DEVICE_DEFAULT"><code>CL_QUEUE_<wbr>ON_<wbr>DEVICE_<wbr>DEFAULT</code></a> will return the default device queue that has already been created and increment its reference count by 1.
</div>
<div class="footnote" id="_footnotedef_17">
-<a href="#_footnoteref_17">17</a>. Note that reading and writing 2D image arrays from a kernel with <code>image_array_size</code> equal to one may perform worse than 2D images.
+<a href="#_footnoteref_17">17</a>. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
</div>
<div class="footnote" id="_footnotedef_18">
-<a href="#_footnoteref_18">18</a>. Therefore, specifying <em>num_mip_levels</em> equal to either <code>0</code> or <code>1</code> creates an image with a single mipmap level.
+<a href="#_footnoteref_18">18</a>. Note that reading and writing 2D image arrays from a kernel with <code>image_array_size</code> equal to one may perform worse than 2D images.
</div>
<div class="footnote" id="_footnotedef_19">
-<a href="#_footnoteref_19">19</a>. To create an image from a buffer object that shares the data store between the image and buffer object.
+<a href="#_footnoteref_19">19</a>. Therefore, specifying <em>num_mip_levels</em> equal to either <code>0</code> or <code>1</code> creates an image with a single mipmap level.
</div>
<div class="footnote" id="_footnotedef_20">
-<a href="#_footnoteref_20">20</a>. To create an image object from another image object that share the data store between these image objects.
+<a href="#_footnoteref_20">20</a>. To create an image from a buffer object that shares the data store between the image and buffer object.
</div>
<div class="footnote" id="_footnotedef_21">
-<a href="#_footnoteref_21">21</a>. Support for the <a href="#CL_DEPTH"><code>CL_DEPTH</code></a> image channel order is required only for 2D images and 2D image arrays.
+<a href="#_footnoteref_21">21</a>. To create an image object from another image object that share the data store between these image objects.
</div>
<div class="footnote" id="_footnotedef_22">
-<a href="#_footnoteref_22">22</a>. Support for reading from the <a href="#CL_sRGBA"><code>CL_sRGBA</code></a> image channel order is optional for 1D image buffers. Support for writing to the <a href="#CL_sRGBA"><code>CL_sRGBA</code></a> image channel order is optional for all image types.
+<a href="#_footnoteref_22">22</a>. Support for the <a href="#CL_DEPTH"><code>CL_DEPTH</code></a> image channel order is required only for 2D images and 2D image arrays.
</div>
<div class="footnote" id="_footnotedef_23">
-<a href="#_footnoteref_23">23</a>. The map count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for debugging.
+<a href="#_footnoteref_23">23</a>. Support for reading from the <a href="#CL_sRGBA"><code>CL_sRGBA</code></a> image channel order is optional for 1D image buffers. Support for writing to the <a href="#CL_sRGBA"><code>CL_sRGBA</code></a> image channel order is optional for all image types.
</div>
<div class="footnote" id="_footnotedef_24">
-<a href="#_footnoteref_24">24</a>. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
+<a href="#_footnoteref_24">24</a>. The map count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for debugging.
</div>
<div class="footnote" id="_footnotedef_25">
<a href="#_footnoteref_25">25</a>. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
</div>
<div class="footnote" id="_footnotedef_26">
-<a href="#_footnoteref_26">26</a>. As per the definition of <code>-cl-denorms-are-zero</code>, the inclusion of this option with <code>-cl-unsafe-math-optimizations</code> means that the implementation may flush denormal numbers to zero but is not required to.
+<a href="#_footnoteref_26">26</a>. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
</div>
<div class="footnote" id="_footnotedef_27">
-<a href="#_footnoteref_27">27</a>. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
+<a href="#_footnoteref_27">27</a>. As per the definition of <code>-cl-denorms-are-zero</code>, the inclusion of this option with <code>-cl-unsafe-math-optimizations</code> means that the implementation may flush denormal numbers to zero but is not required to.
</div>
<div class="footnote" id="_footnotedef_28">
-<a href="#_footnoteref_28">28</a>. Implementations are encouraged to favor this option as it makes it more likely that errors will be managed by applications.
+<a href="#_footnoteref_28">28</a>. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
</div>
<div class="footnote" id="_footnotedef_29">
-<a href="#_footnoteref_29">29</a>. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
+<a href="#_footnoteref_29">29</a>. When the size of a <code>local</code> argument is set to zero, the value of the pointer within the kernel is implementation-defined.
</div>
<div class="footnote" id="_footnotedef_30">
-<a href="#_footnoteref_30">30</a>. The error code values are negative, and event state values are positive. The event state values are ordered from the largest value <a href="#CL_QUEUED"><code>CL_QUEUED</code></a> for the first or initial state to the smallest value (<a href="#CL_COMPLETE"><code>CL_COMPLETE</code></a> or negative integer value) for the last or complete state. The value of <a href="#CL_COMPLETE"><code>CL_COMPLETE</code></a> and <a href="#CL_SUCCESS"><code>CL_SUCCESS</code></a> are the same.
+<a href="#_footnoteref_30">30</a>. Implementations are encouraged to favor this option as it makes it more likely that errors will be managed by applications.
</div>
<div class="footnote" id="_footnotedef_31">
<a href="#_footnoteref_31">31</a>. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
</div>
<div class="footnote" id="_footnotedef_32">
-<a href="#_footnoteref_32">32</a>. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
+<a href="#_footnoteref_32">32</a>. The error code values are negative, and event state values are positive. The event state values are ordered from the largest value <a href="#CL_QUEUED"><code>CL_QUEUED</code></a> for the first or initial state to the smallest value (<a href="#CL_COMPLETE"><code>CL_COMPLETE</code></a> or negative integer value) for the last or complete state. The value of <a href="#CL_COMPLETE"><code>CL_COMPLETE</code></a> and <a href="#CL_SUCCESS"><code>CL_SUCCESS</code></a> are the same.
</div>
<div class="footnote" id="_footnotedef_33">
<a href="#_footnoteref_33">33</a>. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
</div>
<div class="footnote" id="_footnotedef_34">
-<a href="#_footnoteref_34">34</a>. And <strong>read_imageh</strong>, if the <a href="#cl_khr_fp16"><code>cl_khr_<wbr>fp16</code></a> extension is supported.
+<a href="#_footnoteref_34">34</a>. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
</div>
<div class="footnote" id="_footnotedef_35">
-<a href="#_footnoteref_35">35</a>. Note that the performance of 64-bit integer arithmetic can vary significantly between embedded devices.
+<a href="#_footnoteref_35">35</a>. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
</div>
<div class="footnote" id="_footnotedef_36">
-<a href="#_footnoteref_36">36</a>. Please refer to the OpenCL glossary for the OpenCL definition of thread-safe. This definition may be different from usage of the term in other contexts.
+<a href="#_footnoteref_36">36</a>. And <strong>read_imageh</strong>, if the <a href="#cl_khr_fp16"><code>cl_khr_<wbr>fp16</code></a> extension is supported.
</div>
<div class="footnote" id="_footnotedef_37">
-<a href="#_footnoteref_37">37</a>. There is an inherent race condition in the design of OpenCL that occurs between setting a kernel argument and using the kernel with <a href="#clEnqueueNDRangeKernel"><strong>clEnqueueNDRangeKernel</strong></a>. Another host thread might change the kernel arguments between when a host thread sets the kernel arguments and then enqueues the kernel, causing the wrong kernel arguments to be enqueued. Rather than attempt to share <code>cl_kernel</code> objects among multiple host threads, applications are strongly encouraged to make additional <code>cl_kernel</code> objects for each host thread.
+<a href="#_footnoteref_37">37</a>. Note that the performance of 64-bit integer arithmetic can vary significantly between embedded devices.
</div>
<div class="footnote" id="_footnotedef_38">
-<a href="#_footnoteref_38">38</a>. Note that we are talking about the programming model here. In reality, little endian systems might choose to simply address their bytes from "the right" or reverse the "order" of the bits in the byte. Either of these choices would mean that no big swap would need to occur in hardware.
+<a href="#_footnoteref_38">38</a>. Please refer to the OpenCL glossary for the OpenCL definition of thread-safe. This definition may be different from usage of the term in other contexts.
+</div>
+<div class="footnote" id="_footnotedef_39">
+<a href="#_footnoteref_39">39</a>. There is an inherent race condition in the design of OpenCL that occurs between setting a kernel argument and using the kernel with <a href="#clEnqueueNDRangeKernel"><strong>clEnqueueNDRangeKernel</strong></a>. Another host thread might change the kernel arguments between when a host thread sets the kernel arguments and then enqueues the kernel, causing the wrong kernel arguments to be enqueued. Rather than attempt to share <code>cl_kernel</code> objects among multiple host threads, applications are strongly encouraged to make additional <code>cl_kernel</code> objects for each host thread.
+</div>
+<div class="footnote" id="_footnotedef_40">
+<a href="#_footnoteref_40">40</a>. Note that we are talking about the programming model here. In reality, little endian systems might choose to simply address their bytes from "the right" or reverse the "order" of the bits in the byte. Either of these choices would mean that no big swap would need to occur in hardware.
</div>
</div>
diff --git a/specs/unified/html/OpenCL_C.html b/specs/unified/html/OpenCL_C.html
index 445473f..16765ef 100644
--- a/specs/unified/html/OpenCL_C.html
+++ b/specs/unified/html/OpenCL_C.html
@@ -926,9 +926,9 @@
<h1>The OpenCL<sup>™</sup> C Specification</h1>
<div class="details">
<span id="author" class="author">Khronos<sup>®</sup> OpenCL Working Group</span><br>
-<span id="revnumber">version v3.0.19,</span>
-<span id="revdate">Thu, 10 Jul 2025 11:00:00 +0000</span>
-<br><span id="revremark">from git branch: main commit: 85da0d12c298ffa9eefd2adb1864f2c8193cbe3e</span>
+<span id="revnumber">version v3.1.0,</span>
+<span id="revdate">Tue, 05 May 2026 04:00:00 +0000</span>
+<br><span id="revremark">from git branch: main commit: 9fff1a87a975972517f5d878b50f6063dc1b731b</span>
</div>
<div id="toc" class="toc2">
<div id="toctitle">Table of Contents</div>
@@ -1007,7 +1007,11 @@
</li>
<li><a href="#storage-class-specifiers">6.10. Storage-Class Specifiers</a></li>
<li><a href="#restrictions">6.11. Restrictions</a></li>
-<li><a href="#preprocessor-directives-and-macros">6.12. Preprocessor Directives and Macros</a></li>
+<li><a href="#preprocessor-directives-and-macros">6.12. Preprocessor Directives and Macros</a>
+<ul class="sectlevel3">
+<li><a href="#preprocessor-directives-for-optional-extensions">6.12.1. Preprocessor Directives for Optional Extensions</a></li>
+</ul>
+</li>
<li><a href="#attribute-qualifiers">6.13. Attribute Qualifiers</a>
<ul class="sectlevel3">
<li><a href="#specifying-attributes-of-types">6.13.1. Specifying Attributes of Types</a></li>
@@ -1015,7 +1019,6 @@
<li><a href="#specifying-attributes-of-variables">6.13.3. Specifying Attributes of Variables</a></li>
<li><a href="#specifying-attributes-of-blocks-and-control-flow-statements">6.13.4. Specifying Attributes of Blocks and Control-Flow-Statements</a></li>
<li><a href="#specifying-attribute-for-unrolling-loops">6.13.5. Specifying Attribute for Unrolling Loops</a></li>
-<li><a href="#extending-attribute-qualifiers">6.13.6. Extending Attribute Qualifiers</a></li>
</ul>
</li>
<li><a href="#blocks">6.14. Blocks</a>
@@ -1088,7 +1091,8 @@
<li><a href="#references">9. Normative References</a></li>
<li><a href="#changes_to_opencl">Appendix A: Changes to OpenCL</a>
<ul class="sectlevel2">
-<li><a href="#_summary_of_changes_from_opencl_3_0">Summary of changes from OpenCL 3.0</a></li>
+<li><a href="#_summary_of_changes_to_opencl_3_0">Summary of Changes to OpenCL 3.0</a></li>
+<li><a href="#_summary_of_changes_from_opencl_3_0_to_opencl_3_1">Summary of Changes from OpenCL 3.0 to OpenCL 3.1</a></li>
</ul>
</li>
</ul>
@@ -1099,7 +1103,7 @@
<div class="sectionbody">
<div style="page-break-after: always;"></div>
<div class="paragraph">
-<p>Copyright 2008-2025 The Khronos Group Inc.</p>
+<p>Copyright 2008-2026 The Khronos Group Inc.</p>
</div>
<div class="paragraph">
<p>This Specification is protected by copyright laws and contains material proprietary to Khronos.
@@ -1220,8 +1224,8 @@
<li>
<p>Requires support for OpenCL C 2.0, or OpenCL C 3.0 or newer and the
<code>__opencl_c_<wbr><feature_<wbr>name></code> feature:
-Features that were introduced in OpenCL C 2.0 as mandatory, but made
-<a href="#optional-functionality">optional</a> in OpenCL C 3.0.
+Features that were introduced in OpenCL C 2.0 as mandatory, but are
+<a href="#optional-functionality">optional</a> in OpenCL C 3.0 or newer.
Compilers for versions of OpenCL C 1.2 or below will not provide these
features, compilers for OpenCL C 2.0 will provide these features,
compilers for OpenCL C 3.0 or newer may provide these features.</p>
@@ -1270,8 +1274,9 @@
<div class="paragraph">
<p>Optional core language features are described in this document. They are
optional from OpenCL C 3.0 onwards and therefore are not supported by all
-implementations. When an OpenCL C 3.0 optional feature is supported, an
-associated <em>feature test macro</em> will be predefined.</p>
+implementations.
+When an optional OpenCL C 3.0 or newer feature is supported, an associated
+<em>feature test macro</em> will be predefined.</p>
</div>
<div class="paragraph">
<p>The following table describes OpenCL C 3.0 or newer features and their
@@ -1381,14 +1386,12 @@
operations across a work-group.</p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>__opencl_c_<wbr>integer_<wbr>dot_<wbr>product_<wbr>input_<wbr>4x8bit_<wbr>packed</code><br>
- (when the <code>cl_khr_<wbr>integer_<wbr>dot_<wbr>product</code> extension macro is defined)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>__opencl_c_<wbr>integer_<wbr>dot_<wbr>product_<wbr>input_<wbr>4x8bit_<wbr>packed</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The OpenCL C compiler supports built-in functions that perform dot
products on 4x8 bit packed integer vectors.</p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>__opencl_c_<wbr>integer_<wbr>dot_<wbr>product_<wbr>input_<wbr>4x8bit</code><br>
- (when the <code>cl_khr_<wbr>integer_<wbr>dot_<wbr>product</code> extension macro is defined)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>__opencl_c_<wbr>integer_<wbr>dot_<wbr>product_<wbr>input_<wbr>4x8bit</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The OpenCL C compiler supports built-in functions that perform dot
products on 4x8 bit integer vectors.</p></td>
</tr>
@@ -1443,14 +1446,14 @@
<h4 id="extensions"><a class="anchor" href="#extensions"></a>6.2.2. Extensions</h4>
<div class="paragraph">
<p>Other optional functionality may be described by language extensions to OpenCL
-C. Extensions are described in the <a href="#opencl-extension-spec">OpenCL Extension
-Specification</a>. When an OpenCL C extension is supported an associated
-<em>extension macro</em> will be predefined. Please refer to the OpenCL Extension
-Specification for more information about predefined extension macros.</p>
-</div>
-<div class="paragraph">
-<p>Prior to OpenCL C 3.0, support for some optional core language features was
-indicated using predefined extension macros.</p>
+C.
+Extensions to OpenCL C are described in the OpenCL C specification or in
+vendor-provided documentation.
+When an OpenCL C extension is supported an associated extension macro will be
+predefined.
+Please refer to <a href="#preprocessor-directives-for-optional-extensions">Preprocessor
+Directives for Optional Extensions</a> for more information about predefined
+extension macros.</p>
</div>
<div class="paragraph">
<p>When an optional core language feature began as an extension it may have both an
@@ -1463,8 +1466,8 @@
<div class="sect4">
<h5 id="cl_khr_3d_image_writes"><a class="anchor" href="#cl_khr_3d_image_writes"></a>6.2.2.1. 3D Image Writes</h5>
<div class="paragraph">
-<p>The <code>cl_khr_<wbr>3d_<wbr>image_<wbr>writes</code> extension was promoted to OpenCL 2.0, and to
-OpenCL 3.0 as the <code>__opencl_c_<wbr>3d_<wbr>image_<wbr>writes</code> feature.
+<p>The <code>cl_khr_<wbr>3d_<wbr>image_<wbr>writes</code> extension was promoted to OpenCL C 2.0, and to
+OpenCL C 3.0 and newer as the <code>__opencl_c_<wbr>3d_<wbr>image_<wbr>writes</code> feature.
The extension adds <a href="#built-in-image-write-functions">Built-in Image Write
Functions</a> that allow a kernel to write to 3D image objects in addition to
2D image objects.</p>
@@ -1522,9 +1525,9 @@
<div class="sect4">
<h5 id="cl_khr_extended_bit_ops"><a class="anchor" href="#cl_khr_extended_bit_ops"></a>6.2.2.7. Extended Bit Operations</h5>
<div class="paragraph">
-<p>The <code>cl_khr_<wbr>extended_<wbr>bit_<wbr>ops</code> extension provides additional
-<a href="#extended-bit-operations">Extended Bit Operations</a> including bitfield
-insert, bitfield extract, and bit reverse.</p>
+<p>The <code>cl_khr_<wbr>extended_<wbr>bit_<wbr>ops</code> extension was promoted to OpenCL C 3.1.
+The extension provides additional <a href="#extended-bit-operations">Extended Bit
+Operations</a> including bitfield insert, bitfield extract, and bit reverse.</p>
</div>
</div>
<div class="sect4">
@@ -1586,7 +1589,7 @@
<div class="paragraph">
<p>There is one <a href="#restrictions-initialize-memory">restriction</a> on the timing
of this initialization discussed in this document, although most of the
-extension is defined by the OpenCL 3.0 API Specification.</p>
+extension is defined by the OpenCL API Specification.</p>
</div>
</div>
<div class="sect4">
@@ -1610,19 +1613,17 @@
<div class="sect4">
<h5 id="cl_khr_integer_dot_product"><a class="anchor" href="#cl_khr_integer_dot_product"></a>6.2.2.16. Integer Dot Product</h5>
<div class="paragraph">
-<p>The <code>cl_khr_<wbr>integer_<wbr>dot_<wbr>product</code> extension adds support for SPIR-V
-instructions and OpenCL C built-in functions to compute the dot product of
-vectors of integers.
-The extension provides new <a href="#table-builtin-functions">built-in vector
-integer argument functions</a> operating on these types.</p>
+<p>The <code>cl_khr_<wbr>integer_<wbr>dot_<wbr>product</code> extension was promoted to OpenCL C 3.1.
+The extension adds support for OpenCL C built-in functions to compute the dot
+product of vectors of integers, as described in the <a href="#table-builtin-functions">built-in vector integer argument functions</a> table.</p>
</div>
</div>
<div class="sect4">
<h5 id="cl_khr_kernel_clock"><a class="anchor" href="#cl_khr_kernel_clock"></a>6.2.2.17. Kernel Clock</h5>
<div class="paragraph">
-<p>The <code>cl_khr_kernel_clock</code> extension adds support for SPIR-V instructions and
-OpenCL C built-in functions to sample the value from one of three clocks
-provided by compute units. The extension provides the following functions:</p>
+<p>The <code>cl_khr_<wbr>kernel_<wbr>clock</code> extension adds OpenCL C built-in functions to sample
+the value from one of three clocks provided by compute units.
+The extension provides the following functions:</p>
</div>
<div class="ulist">
<ul>
@@ -1768,9 +1769,10 @@
<div class="sect4">
<h5 id="cl_khr_subgroup_extended_types"><a class="anchor" href="#cl_khr_subgroup_extended_types"></a>6.2.2.27. Sub-Group Extended Types</h5>
<div class="paragraph">
-<p>The <code>cl_khr_<wbr>subgroup_<wbr>extended_<wbr>types</code> extension adds <a href="#sub-group-functions">additional supported data types</a> to the existing
-<a href="#table-collective-functions">sub-group broadcast, scan, and reduction
-functions</a>.</p>
+<p>The <code>cl_khr_<wbr>subgroup_<wbr>extended_<wbr>types</code> extension was promoted to OpenCL C 3.1.
+The extension adds <a href="#sub-group-functions">additional supported data types</a> to
+the existing <a href="#table-collective-functions">sub-group broadcast, scan, and
+reduction functions</a>.</p>
</div>
</div>
<div class="sect4">
@@ -1822,9 +1824,9 @@
<div class="sect4">
<h5 id="cl_khr_subgroup_rotate"><a class="anchor" href="#cl_khr_subgroup_rotate"></a>6.2.2.30. Sub-Group Rotation</h5>
<div class="paragraph">
-<p>The <code>cl_khr_<wbr>subgroup_<wbr>rotate</code> extension adds support for a new sub-group data
-exchange operation that makes it possible to rotate values through the work
-items in a sub-group.</p>
+<p>The <code>cl_khr_<wbr>subgroup_<wbr>rotate</code> extension was promoted to OpenCL C 3.1.
+The extension adds support for a new sub-group data exchange operation that
+makes it possible to rotate values through the work items in a sub-group.</p>
</div>
<div class="paragraph">
<p>The extension provides the following functions:</p>
@@ -1840,8 +1842,9 @@
<div class="sect4">
<h5 id="cl_khr_subgroup_shuffle"><a class="anchor" href="#cl_khr_subgroup_shuffle"></a>6.2.2.31. Sub-Group General Purpose Shuffles</h5>
<div class="paragraph">
-<p>The <code>cl_khr_<wbr>subgroup_<wbr>shuffle</code> extension adds additional ways to exchange
-data among work items in a sub-group.</p>
+<p>The <code>cl_khr_<wbr>subgroup_<wbr>shuffle</code> extension was promoted to OpenCL C 3.1.
+The extension adds support for flexibly exchanging data among work items in a
+sub-group.</p>
</div>
<div class="paragraph">
<p>The extension provides the following functions:</p>
@@ -1857,9 +1860,9 @@
<div class="sect4">
<h5 id="cl_khr_subgroup_shuffle_relative"><a class="anchor" href="#cl_khr_subgroup_shuffle_relative"></a>6.2.2.32. Sub-Group Relative Shuffles</h5>
<div class="paragraph">
-<p>The <code>cl_khr_<wbr>subgroup_<wbr>shuffle_<wbr>relative</code> extension adds specialized ways to
-exchange data among work items in a sub-group that may perform better on
-some implementations.</p>
+<p>The <code>cl_khr_<wbr>subgroup_<wbr>shuffle_<wbr>relative</code> was promoted to OpenCL C 3.1.
+The extension adds specialized ways to exchange data among work items
+in a sub-group that may perform better on some implementations.</p>
</div>
<div class="paragraph">
<p>The extension provides the following functions:</p>
@@ -2124,9 +2127,8 @@
<h5 id="double-precision-support"><a class="anchor" href="#double-precision-support"></a>6.3.1.1. Double-Precision Floating-Point Support</h5>
<div class="paragraph">
<p>Double-precision floating-point is supported if
-the <code>cl_khr_<wbr>fp64</code> extension macro is supported, or if
-OpenCL 1.2 or newer is supported.
-In OpenCL 3.0, it also requires support for the <code>__opencl_c_<wbr>fp64</code> feature,</p>
+the <code>cl_khr_<wbr>fp64</code> extension is supported, or if
+OpenCL 3.0 or newer and the <code>__opencl_c_<wbr>fp64</code> feature is supported.</p>
</div>
<div class="paragraph">
<p>If double-precision is not supported, implementations may
@@ -2811,11 +2813,11 @@
</div>
<div class="listingblock">
<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float4</span> <span class="n">f</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">2.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">3.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">4.0</span><span class="n">f</span><span class="p">);</span>
+<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float4</span> <span class="n">f</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0f</span><span class="p">,</span> <span class="mf">2.0f</span><span class="p">,</span> <span class="mf">3.0f</span><span class="p">,</span> <span class="mf">4.0f</span><span class="p">);</span>
<span class="kt">uint4</span> <span class="n">u</span> <span class="o">=</span> <span class="p">(</span><span class="kt">uint4</span><span class="p">)(</span><span class="mi">1</span><span class="p">);</span> <span class="c1">// u will be (1, 1, 1, 1).</span>
-<span class="kt">float4</span> <span class="n">f</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)((</span><span class="kt">float2</span><span class="p">)(</span><span class="mf">1.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">2.0</span><span class="n">f</span><span class="p">),</span> <span class="p">(</span><span class="kt">float2</span><span class="p">)(</span><span class="mf">3.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">4.0</span><span class="n">f</span><span class="p">));</span>
-<span class="kt">float4</span> <span class="n">f</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0</span><span class="n">f</span><span class="p">,</span> <span class="p">(</span><span class="kt">float2</span><span class="p">)(</span><span class="mf">2.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">3.0</span><span class="n">f</span><span class="p">),</span> <span class="mf">4.0</span><span class="n">f</span><span class="p">);</span>
-<span class="kt">float4</span> <span class="n">f</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">2.0</span><span class="n">f</span><span class="p">);</span> <span class="c1">// error</span></code></pre>
+<span class="kt">float4</span> <span class="n">f</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)((</span><span class="kt">float2</span><span class="p">)(</span><span class="mf">1.0f</span><span class="p">,</span> <span class="mf">2.0f</span><span class="p">),</span> <span class="p">(</span><span class="kt">float2</span><span class="p">)(</span><span class="mf">3.0f</span><span class="p">,</span> <span class="mf">4.0f</span><span class="p">));</span>
+<span class="kt">float4</span> <span class="n">f</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0f</span><span class="p">,</span> <span class="p">(</span><span class="kt">float2</span><span class="p">)(</span><span class="mf">2.0f</span><span class="p">,</span> <span class="mf">3.0f</span><span class="p">),</span> <span class="mf">4.0f</span><span class="p">);</span>
+<span class="kt">float4</span> <span class="n">f</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0f</span><span class="p">,</span> <span class="mf">2.0f</span><span class="p">);</span> <span class="c1">// error</span></code></pre>
</div>
</div>
</div>
@@ -2829,8 +2831,8 @@
Vector data types with four or more components, such as <code>ulong4</code> or <code>float8</code>, can access <code>.xyzw</code> elements.</p>
</div>
<div class="paragraph">
-<p>In OpenCL C 3.0, the components of vector data types can also be addressed as
-<code><vector_data_type>.rgba</code>.
+<p>In OpenCL C 3.0 or newer, the components of vector data types can also be
+addressed as <code><vector_data_type>.rgba</code>.
Vector data types with two or more components can access <code>.rg</code> elements.
Vector data types with three or more components can access <code>.rgb</code> elements.
Vector data types with four or more components can access <code>.rgba</code> elements.</p>
@@ -2842,14 +2844,14 @@
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float2</span> <span class="n">coord</span><span class="p">;</span>
-<span class="n">coord</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">;</span> <span class="c1">// is legal</span>
-<span class="n">coord</span><span class="p">.</span><span class="n">r</span> <span class="o">=</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">;</span> <span class="c1">// is legal in OpenCL C 3.0</span>
-<span class="n">coord</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">;</span> <span class="c1">// is illegal, since coord only has two components</span>
+<span class="n">coord</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="mf">1.0f</span><span class="p">;</span> <span class="c1">// is legal</span>
+<span class="n">coord</span><span class="p">.</span><span class="n">r</span> <span class="o">=</span> <span class="mf">1.0f</span><span class="p">;</span> <span class="c1">// is legal in OpenCL C 3.0 or newer</span>
+<span class="n">coord</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="mf">1.0f</span><span class="p">;</span> <span class="c1">// is illegal, since coord only has two components</span>
<span class="kt">float3</span> <span class="n">pos</span><span class="p">;</span>
-<span class="n">pos</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">;</span> <span class="c1">// is legal</span>
-<span class="n">pos</span><span class="p">.</span><span class="n">b</span> <span class="o">=</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">;</span> <span class="c1">// is legal in OpenCL C 3.0</span>
-<span class="n">pos</span><span class="p">.</span><span class="n">w</span> <span class="o">=</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">;</span> <span class="c1">// is illegal, since pos only has three components</span></code></pre>
+<span class="n">pos</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="mf">1.0f</span><span class="p">;</span> <span class="c1">// is legal</span>
+<span class="n">pos</span><span class="p">.</span><span class="n">b</span> <span class="o">=</span> <span class="mf">1.0f</span><span class="p">;</span> <span class="c1">// is legal in OpenCL C 3.0 or newer</span>
+<span class="n">pos</span><span class="p">.</span><span class="n">w</span> <span class="o">=</span> <span class="mf">1.0f</span><span class="p">;</span> <span class="c1">// is illegal, since pos only has three components</span></code></pre>
</div>
</div>
<div class="paragraph">
@@ -2860,10 +2862,10 @@
<div class="content">
<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float4</span> <span class="n">c</span><span class="p">;</span>
-<span class="n">c</span><span class="p">.</span><span class="n">xyzw</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">2.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">3.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">4.0</span><span class="n">f</span><span class="p">);</span>
-<span class="n">c</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">;</span>
-<span class="n">c</span><span class="p">.</span><span class="n">xy</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float2</span><span class="p">)(</span><span class="mf">3.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">4.0</span><span class="n">f</span><span class="p">);</span>
-<span class="n">c</span><span class="p">.</span><span class="n">xyz</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float3</span><span class="p">)(</span><span class="mf">3.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">4.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">5.0</span><span class="n">f</span><span class="p">);</span></code></pre>
+<span class="n">c</span><span class="p">.</span><span class="n">xyzw</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0f</span><span class="p">,</span> <span class="mf">2.0f</span><span class="p">,</span> <span class="mf">3.0f</span><span class="p">,</span> <span class="mf">4.0f</span><span class="p">);</span>
+<span class="n">c</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="mf">1.0f</span><span class="p">;</span>
+<span class="n">c</span><span class="p">.</span><span class="n">xy</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float2</span><span class="p">)(</span><span class="mf">3.0f</span><span class="p">,</span> <span class="mf">4.0f</span><span class="p">);</span>
+<span class="n">c</span><span class="p">.</span><span class="n">xyz</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float3</span><span class="p">)(</span><span class="mf">3.0f</span><span class="p">,</span> <span class="mf">4.0f</span><span class="p">,</span> <span class="mf">5.0f</span><span class="p">);</span></code></pre>
</div>
</div>
<div class="paragraph">
@@ -2872,7 +2874,7 @@
</div>
<div class="listingblock">
<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float4</span> <span class="n">pos</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">2.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">3.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">4.0</span><span class="n">f</span><span class="p">);</span>
+<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float4</span> <span class="n">pos</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0f</span><span class="p">,</span> <span class="mf">2.0f</span><span class="p">,</span> <span class="mf">3.0f</span><span class="p">,</span> <span class="mf">4.0f</span><span class="p">);</span>
<span class="kt">float4</span> <span class="n">swiz</span><span class="o">=</span> <span class="n">pos</span><span class="p">.</span><span class="n">wzyx</span><span class="p">;</span> <span class="c1">// swiz = (4.0f, 3.0f, 2.0f, 1.0f)</span>
@@ -2889,15 +2891,15 @@
</div>
<div class="listingblock">
<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float4</span> <span class="n">pos</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">2.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">3.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">4.0</span><span class="n">f</span><span class="p">);</span>
+<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float4</span> <span class="n">pos</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0f</span><span class="p">,</span> <span class="mf">2.0f</span><span class="p">,</span> <span class="mf">3.0f</span><span class="p">,</span> <span class="mf">4.0f</span><span class="p">);</span>
-<span class="n">pos</span><span class="p">.</span><span class="n">xw</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float2</span><span class="p">)(</span><span class="mf">5.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">6.0</span><span class="n">f</span><span class="p">);</span><span class="c1">// pos = (5.0f, 2.0f, 3.0f, 6.0f)</span>
-<span class="n">pos</span><span class="p">.</span><span class="n">wx</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float2</span><span class="p">)(</span><span class="mf">7.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">8.0</span><span class="n">f</span><span class="p">);</span><span class="c1">// pos = (8.0f, 2.0f, 3.0f, 7.0f)</span>
-<span class="n">pos</span><span class="p">.</span><span class="n">xyz</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float3</span><span class="p">)(</span><span class="mf">3.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">5.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">9.0</span><span class="n">f</span><span class="p">);</span> <span class="c1">// pos = (3.0f, 5.0f, 9.0f, 4.0f)</span>
-<span class="n">pos</span><span class="p">.</span><span class="n">xx</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float2</span><span class="p">)(</span><span class="mf">3.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">4.0</span><span class="n">f</span><span class="p">);</span><span class="c1">// illegal - 'x' used twice</span>
+<span class="n">pos</span><span class="p">.</span><span class="n">xw</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float2</span><span class="p">)(</span><span class="mf">5.0f</span><span class="p">,</span> <span class="mf">6.0f</span><span class="p">);</span><span class="c1">// pos = (5.0f, 2.0f, 3.0f, 6.0f)</span>
+<span class="n">pos</span><span class="p">.</span><span class="n">wx</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float2</span><span class="p">)(</span><span class="mf">7.0f</span><span class="p">,</span> <span class="mf">8.0f</span><span class="p">);</span><span class="c1">// pos = (8.0f, 2.0f, 3.0f, 7.0f)</span>
+<span class="n">pos</span><span class="p">.</span><span class="n">xyz</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float3</span><span class="p">)(</span><span class="mf">3.0f</span><span class="p">,</span> <span class="mf">5.0f</span><span class="p">,</span> <span class="mf">9.0f</span><span class="p">);</span> <span class="c1">// pos = (3.0f, 5.0f, 9.0f, 4.0f)</span>
+<span class="n">pos</span><span class="p">.</span><span class="n">xx</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float2</span><span class="p">)(</span><span class="mf">3.0f</span><span class="p">,</span> <span class="mf">4.0f</span><span class="p">);</span><span class="c1">// illegal - 'x' used twice</span>
<span class="c1">// illegal - mismatch between float2 and float4</span>
-<span class="n">pos</span><span class="p">.</span><span class="n">xy</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">2.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">3.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">4.0</span><span class="n">f</span><span class="p">);</span>
+<span class="n">pos</span><span class="p">.</span><span class="n">xy</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0f</span><span class="p">,</span> <span class="mf">2.0f</span><span class="p">,</span> <span class="mf">3.0f</span><span class="p">,</span> <span class="mf">4.0f</span><span class="p">);</span>
<span class="kt">float4</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span><span class="p">;</span>
<span class="kt">float16</span> <span class="n">x</span><span class="p">;</span>
@@ -3070,7 +3072,7 @@
<span class="n">m</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="n">x</span><span class="p">.</span><span class="n">hi</span><span class="p">.</span><span class="n">hi</span><span class="p">;</span> <span class="c1">// { m[0][3], m[1][3], m[2][3], m[3][3] }</span>
<span class="p">}</span>
-<span class="kt">float3</span> <span class="n">vf</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float3</span><span class="p">)(</span><span class="mf">1.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">2.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">3.0</span><span class="n">f</span><span class="p">);</span>
+<span class="kt">float3</span> <span class="n">vf</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float3</span><span class="p">)(</span><span class="mf">1.0f</span><span class="p">,</span> <span class="mf">2.0f</span><span class="p">,</span> <span class="mf">3.0f</span><span class="p">);</span>
<span class="kt">float2</span> <span class="n">low</span> <span class="o">=</span> <span class="n">vf</span><span class="p">.</span><span class="n">lo</span><span class="p">;</span> <span class="c1">// (1.0f, 2.0f);</span>
<span class="kt">float2</span> <span class="n">high</span> <span class="o">=</span> <span class="n">vf</span><span class="p">.</span><span class="n">hi</span><span class="p">;</span> <span class="c1">// (3.0f, _undefined_);</span></code></pre>
</div>
@@ -3178,7 +3180,7 @@
</div>
<div class="listingblock">
<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float</span> <span class="n">f</span> <span class="o">=</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">;</span>
+<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float</span> <span class="n">f</span> <span class="o">=</span> <span class="mf">1.0f</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="n">f</span><span class="p">;</span></code></pre>
</div>
</div>
@@ -3219,7 +3221,7 @@
</div>
<div class="listingblock">
<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float</span> <span class="n">f</span> <span class="o">=</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">;</span>
+<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float</span> <span class="n">f</span> <span class="o">=</span> <span class="mf">1.0f</span><span class="p">;</span>
<span class="kt">float4</span> <span class="n">va</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)</span><span class="n">f</span><span class="p">;</span>
<span class="c1">// va is a float4 vector with elements (f, f, f, f).</span>
@@ -3230,7 +3232,7 @@
<span class="c1">// vb is a float4 vector with elements</span>
<span class="c1">// ((float)u, (float)u, (float)u, (float)u).</span>
-<span class="kt">float</span> <span class="n">f</span> <span class="o">=</span> <span class="mf">2.0</span><span class="n">f</span><span class="p">;</span>
+<span class="kt">float</span> <span class="n">f</span> <span class="o">=</span> <span class="mf">2.0f</span><span class="p">;</span>
<span class="kt">int2</span> <span class="n">vc</span> <span class="o">=</span> <span class="p">(</span><span class="kt">int2</span><span class="p">)</span><span class="n">f</span><span class="p">;</span>
<span class="c1">// vc is an int2 vector with elements ((int)f, (int)f).</span>
@@ -3417,14 +3419,14 @@
implementation-defined.</p>
</div>
<div class="paragraph">
-<p>Conversions to integer type may opt to convert using the optional saturated
+<p>Conversions to integer types may opt to convert using the optional saturated
mode by appending the <code>_sat</code> modifier to the conversion function name.
When in saturated mode, values that are outside the representable range
-shall clamp to the nearest representable value in the destination format.
-(NaN should be converted to 0).</p>
+are clamped to the nearest representable value in the destination format,
+and NaN is converted to zero.</p>
</div>
<div class="paragraph">
-<p>Conversions to floating-point type shall conform to IEEE-754 rounding rules.
+<p>Conversions to floating-point types conform to IEEE-754 rounding rules.
The <code>_sat</code> modifier may not be used for conversions to floating-point
formats.</p>
</div>
@@ -3438,7 +3440,7 @@
<div class="content">
<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">short4</span> <span class="n">s</span><span class="p">;</span>
-<span class="c1">// negative values clamped to 0</span>
+<span class="c1">// negative values clamped to zero</span>
<span class="kt">ushort4</span> <span class="n">u</span> <span class="o">=</span> <span class="fm">convert_ushort4_sat</span><span class="p">(</span> <span class="n">s</span> <span class="p">);</span>
<span class="c1">// values > CHAR_MAX converted to CHAR_MAX</span>
@@ -3458,7 +3460,7 @@
<span class="kt">int4</span> <span class="n">i</span> <span class="o">=</span> <span class="fm">convert_int4</span><span class="p">(</span> <span class="n">f</span> <span class="p">);</span>
<span class="c1">// values > INT_MAX clamp to INT_MAX, values < INT_MIN clamp</span>
-<span class="c1">// to INT_MIN. NaN should produce 0.</span>
+<span class="c1">// to INT_MIN, and NaN is converted to zero</span>
<span class="c1">// The _rtz_ rounding mode is used to produce the integer values.</span>
<span class="kt">int4</span> <span class="n">i2</span> <span class="o">=</span> <span class="fm">convert_int4_sat</span><span class="p">(</span> <span class="n">f</span> <span class="p">);</span>
@@ -3525,7 +3527,7 @@
<span class="c1">// depending on endianness the low or high half</span>
<span class="c1">// of d is unknown</span>
-<span class="n">u</span><span class="p">.</span><span class="n">f</span> <span class="o">=</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">;</span> <span class="c1">// u.u contains 0x3f800000, u.d contains an</span>
+<span class="n">u</span><span class="p">.</span><span class="n">f</span> <span class="o">=</span> <span class="mf">1.0f</span><span class="p">;</span> <span class="c1">// u.u contains 0x3f800000, u.d contains an</span>
<span class="c1">// undefined value -- depending on endianness</span>
<span class="c1">// the low or high half of d is unknown</span>
@@ -3575,10 +3577,10 @@
</div>
<div class="listingblock">
<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float</span> <span class="n">f</span> <span class="o">=</span> <span class="mf">1.0</span><span class="n">f</span><span class="p">;</span>
+<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float</span> <span class="n">f</span> <span class="o">=</span> <span class="mf">1.0f</span><span class="p">;</span>
<span class="kt">uint</span> <span class="n">u</span> <span class="o">=</span> <span class="fm">as_uint</span><span class="p">(</span><span class="n">f</span><span class="p">);</span> <span class="c1">// Legal. Contains: 0x3f800000</span>
-<span class="kt">float4</span> <span class="n">f</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">2.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">3.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">4.0</span><span class="n">f</span><span class="p">);</span>
+<span class="kt">float4</span> <span class="n">f</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0f</span><span class="p">,</span> <span class="mf">2.0f</span><span class="p">,</span> <span class="mf">3.0f</span><span class="p">,</span> <span class="mf">4.0f</span><span class="p">);</span>
<span class="c1">// Legal. Contains:</span>
<span class="c1">// (int4)(0x3f800000, 0x40000000, 0x40400000, 0x40800000)</span>
<span class="kt">int4</span> <span class="n">i</span> <span class="o">=</span> <span class="fm">as_int4</span><span class="p">(</span><span class="n">f</span><span class="p">);</span>
@@ -4366,8 +4368,9 @@
</div>
</div>
<div class="paragraph">
-<p>For OpenCL C 2.0, or OpenCL C 3.0 with the <code>__opencl_c_<wbr>generic_<wbr>address_<wbr>space</code>
-feature macro, there is an additional unnamed generic address space.</p>
+<p>For OpenCL C 2.0, or OpenCL C 3.0 or newer with the
+<code>__opencl_c_<wbr>generic_<wbr>address_<wbr>space</code> feature macro, there is an additional unnamed
+generic address space.</p>
</div>
<div class="paragraph">
<p>Most of the restrictions from section 5.1.2 and section 5.3 of the
@@ -4602,12 +4605,12 @@
<div class="openblock">
<div class="content">
<div class="paragraph">
-<p>The generic address space requires support for OpenCL C 2.0 or OpenCL C 3.0 with
-the <code>__opencl_c_<wbr>generic_<wbr>address_<wbr>space</code> feature. It can be used with pointer
-types and it represents a placeholder for any of the named address spaces
-- <code>global</code>, <code>local</code> or <code>private</code>. It signals that a pointer points to an object
-in one of these concrete named address spaces. The exact address space
-resolution can occur dynamically during the kernel execution.</p>
+<p>The generic address space requires support for either OpenCL C 2.0, or OpenCL C
+3.0 or newer with the <code>__opencl_c_<wbr>generic_<wbr>address_<wbr>space</code> feature.
+It can be used with pointer types and it represents a placeholder for any of the
+named address spaces - <code>global</code>, <code>local</code> or <code>private</code>. It signals that a pointer
+points to an object in one of these concrete named address spaces. The exact
+address space resolution can occur dynamically during the kernel execution.</p>
</div>
<div class="listingblock">
<div class="content">
@@ -4664,12 +4667,13 @@
<div class="ulist">
<ul>
<li>
-<p>Must be qualified by <code>__constant</code> in OpenCL C prior to 2.0 or OpenCL C 3.0
-without <code>__opencl_c_<wbr>program_<wbr>scope_<wbr>global_<wbr>variables</code> feature.</p>
+<p>Must be qualified by <code>__constant</code> prior to OpenCL C 2.0, or for OpenCL C 3.0
+or newer without <code>__opencl_c_<wbr>program_<wbr>scope_<wbr>global_<wbr>variables</code> feature.</p>
</li>
<li>
-<p>Can be qualified by either <code>__constant</code> or <code>__global</code> for OpenCL C 2.0 or
-OpenCL C 3.0 with <code>__opencl_c_<wbr>program_<wbr>scope_<wbr>global_<wbr>variables</code> feature.</p>
+<p>Can be qualified by either <code>__constant</code> or <code>__global</code> for OpenCL C 2.0, or
+OpenCL C 3.0 or newer with <code>__opencl_c_<wbr>program_<wbr>scope_<wbr>global_<wbr>variables</code>
+feature.</p>
</li>
</ul>
</div>
@@ -4782,14 +4786,14 @@
therefore only the default address space is applicable.</p>
</div>
<div class="paragraph">
-<p>For OpenCL C 2.0 or with the <code>__opencl_c_<wbr>program_<wbr>scope_<wbr>global_<wbr>variables</code>
-feature, the address space for a variable at program scope or a <code>static</code>
-or <code>extern</code> variable inside a function are inferred to be <code>__global</code>.</p>
+<p>For OpenCL C 2.0, or OpenCL C 3.0 or newer with the
+<code>__opencl_c_<wbr>program_<wbr>scope_<wbr>global_<wbr>variables</code> feature, the address space for a
+variable at program scope or a <code>static</code> or <code>extern</code> variable inside a function
+are inferred to be <code>__global</code>.</p>
</div>
<div class="paragraph">
-<p>If the generic address space is supported i.e. for OpenCL C 2.0 or OpenCL C 3.0
-with <code>__opencl_c_<wbr>generic_<wbr>address_<wbr>space</code> feature, pointers that are declared
-without pointing to a named address space point to the generic address space.</p>
+<p>If the generic address space is supported, pointers that are declared without
+pointing to a named address space point to the generic address space.</p>
</div>
<div class="paragraph">
<p>All string literal storage shall be in the <code>__constant</code> address space.</p>
@@ -4829,14 +4833,14 @@
<span class="kt">int</span> <span class="o">*</span><span class="n">ptr</span><span class="p">;</span> <span class="c1">// ptr is inferred to be in the global address space.</span>
<span class="c1">// ptr points to a location in (1) the generic address</span>
- <span class="c1">// space for OpenCL C 2.0 or OpenCL C 3.0 with</span>
- <span class="c1">// __opencl_c_generic_address_space feature or</span>
+ <span class="c1">// space for OpenCL C 2.0, or OpenCL C 3.0 or newer with</span>
+ <span class="c1">// the __opencl_c_generic_address_space feature, or</span>
<span class="c1">// in (2) the private address space otherwise.</span>
<span class="kt">int</span> <span class="o">*</span><span class="nx">global</span> <span class="n">ptr</span><span class="p">;</span> <span class="c1">// ptr is declared to be in the global address space.</span>
- <span class="c1">// ptr points to an location in (1) the generic address</span>
- <span class="c1">// space for OpenCL C 2.0 or OpenCL C 3.0 with</span>
- <span class="c1">// __opencl_c_generic_address_space feature or</span>
+ <span class="c1">// ptr points to a location in (1) the generic address</span>
+ <span class="c1">// space for OpenCL C 2.0, or OpenCL C 3.0 or newer with</span>
+ <span class="c1">// __opencl_c_generic_address_space feature, or</span>
<span class="c1">// in (2) the private address space otherwise.</span>
<span class="nx">constant</span> <span class="kt">int</span> <span class="o">*</span><span class="n">ptr</span> <span class="o">=</span>
@@ -4848,8 +4852,8 @@
<span class="k">static</span> <span class="kt">int</span> <span class="n">foo</span><span class="p">;</span> <span class="c1">// foo is allocated in the global address space.</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">ptr</span><span class="p">;</span> <span class="c1">// ptr is allocated in the private address space.</span>
<span class="c1">// ptr points to a location in (1) the generic address</span>
- <span class="c1">// space for OpenCL C 2.0 or OpenCL C 3.0 with</span>
- <span class="c1">// __opencl_c_generic_address_space feature or</span>
+ <span class="c1">// space for OpenCL C 2.0, or OpenCL C 3.0 or newer with</span>
+ <span class="c1">// __opencl_c_generic_address_space feature, or</span>
<span class="c1">// in (2) the private address space otherwise.</span>
<span class="p">...</span>
<span class="p">}</span></code></pre>
@@ -4868,9 +4872,9 @@
<div class="ulist">
<ul>
<li>
-<p>Program scope variables or variables inside functions with
-a <code>static</code> or <code>extern</code> type specifier for OpenCL C prior to version 2.0 or
-OpenCL C 3.0 without <code>__opencl_c_<wbr>program_<wbr>scope_<wbr>global_<wbr>variables</code> feature,</p>
+<p>Program scope variables or variables inside functions with a <code>static</code> or
+<code>extern</code> type specifier prior to OpenCL C 2.0, or for OpenCL C 3.0 or newer
+without <code>__opencl_c_<wbr>program_<wbr>scope_<wbr>global_<wbr>variables</code> feature.</p>
</li>
<li>
<p>Pointers used as arguments to kernel functions (the address space pointed
@@ -4901,16 +4905,16 @@
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>__global</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Program scope variables, for OpenCL C 2.0 or
- OpenCL C 3.0 with the <code>__opencl_c_<wbr>program_<wbr>scope_<wbr>global_<wbr>variables</code> feature,</p>
-<p class="tableblock"> <code>static</code> or <code>extern</code> local variables, for OpenCL C 2.0 or
- OpenCL C 3.0 with the <code>__opencl_c_<wbr>program_<wbr>scope_<wbr>global_<wbr>variables</code> feature,</p>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Program scope variables, for OpenCL C 2.0, or
+ OpenCL C 3.0 or newer with the <code>__opencl_c_<wbr>program_<wbr>scope_<wbr>global_<wbr>variables</code> feature,</p>
+<p class="tableblock"> <code>static</code> or <code>extern</code> local variables, for OpenCL C 2.0, or
+ OpenCL C 3.0 or newer with the <code>__opencl_c_<wbr>program_<wbr>scope_<wbr>global_<wbr>variables</code> feature,</p>
<p class="tableblock"> Pointers.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Optional constant initializers, 0-initialized by default.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Program scope variables, for OpenCL C 2.0 or
- OpenCL C 3.0 with the <code>__opencl_c_<wbr>program_<wbr>scope_<wbr>global_<wbr>variables</code> feature.</p>
-<p class="tableblock"> <code>static</code> or <code>extern</code> local variables, for OpenCL C 2.0 or
- OpenCL C 3.0 with the <code>__opencl_c_<wbr>program_<wbr>scope_<wbr>global_<wbr>variables</code> feature.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Program scope variables, for OpenCL C 2.0, or
+ OpenCL C 3.0 or newer with the <code>__opencl_c_<wbr>program_<wbr>scope_<wbr>global_<wbr>variables</code> feature.</p>
+<p class="tableblock"> <code>static</code> or <code>extern</code> local variables, for OpenCL C 2.0, or
+ OpenCL C 3.0 or newer with the <code>__opencl_c_<wbr>program_<wbr>scope_<wbr>global_<wbr>variables</code> feature.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>__private</code></p></td>
@@ -4921,7 +4925,7 @@
<td class="tableblock halign-left valign-top"><p class="tableblock">Local scope variables,</p>
<p class="tableblock"> Function arguments and return types,</p>
<p class="tableblock"> Pointers in which the address space they point to is not given explicitly,
- for OpenCL C prior to version 2.0 or OpenCL C 3.0 without the
+ prior to OpenCL C 2.0, or for OpenCL C 3.0 or newer without the
<code>__opencl_c_<wbr>generic_<wbr>address_<wbr>space</code> feature.</p></td>
</tr>
<tr>
@@ -4942,12 +4946,12 @@
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Generic</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Pointers, for OpenCL C 2.0 or OpenCL C 3.0 with the
+<td class="tableblock halign-left valign-top"><p class="tableblock">Pointers, for OpenCL C 2.0, or OpenCL C 3.0 or newer with the
<code>__opencl_c_<wbr>generic_<wbr>address_<wbr>space</code> feature</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Not applicable.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Pointers in which the address space they point to is not given explicitly,
- for OpenCL C 2.0 or OpenCL C 3.0 with the <code>__opencl_c_<wbr>generic_<wbr>address_<wbr>space</code>
- feature.</p></td>
+ prior to OpenCL C 2.0, or for OpenCL C 3.0 or newer with the
+ <code>__opencl_c_<wbr>generic_<wbr>address_<wbr>space</code> feature.</p></td>
</tr>
</tbody>
</table>
@@ -5715,7 +5719,7 @@
<span class="nx">kernel</span> <span class="kt">void</span> <span class="nf">my_func</span><span class="p">(</span><span class="kt">image2d_t</span> <span class="n">img</span><span class="p">,</span> <span class="nx">global</span> <span class="kt">float</span> <span class="o">*</span><span class="n">a</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">extern</span> <span class="nx">constant</span> <span class="kt">float4</span> <span class="n">a</span><span class="p">;</span>
- <span class="k">static</span> <span class="nx">constant</span> <span class="kt">float4</span> <span class="n">b</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0</span><span class="n">f</span><span class="p">);</span> <span class="c1">// OK.</span>
+ <span class="k">static</span> <span class="nx">constant</span> <span class="kt">float4</span> <span class="n">b</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0f</span><span class="p">);</span> <span class="c1">// OK.</span>
<span class="k">static</span> <span class="kt">float</span> <span class="n">c</span><span class="p">;</span> <span class="c1">// Error: No implicit address space</span>
<span class="nx">global</span> <span class="kt">int</span> <span class="n">hurl</span><span class="p">;</span> <span class="c1">// Error: Must be static</span>
<span class="p">...</span>
@@ -5995,11 +5999,7 @@
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="opencl_c"><span class="c1">// on-off-switch is one of ON, OFF, or DEFAULT</span>
-<span class="cp">#pragma OPENCL FP_CONTRACT on-off-switch
-</span>
-<span class="cp">#pragma OPENCL EXTENSION extensionname : behavior
-</span>
-<span class="cp">#pragma OPENCL EXTENSION all : behavior</span></code></pre>
+<span class="cp">#pragma OPENCL FP_CONTRACT on-off-switch</span></code></pre>
</div>
</div>
<div class="paragraph">
@@ -6052,6 +6052,11 @@
<p>Substitutes the integer 300 reflecting the OpenCL 3.0 version.
<a href="#unified-spec">Requires</a> support for OpenCL C 3.0 or newer.</p>
</dd>
+<dt class="hdlist1"><code>CL_VERSION_3_1</code> </dt>
+<dd>
+<p>Substitutes the integer 301 reflecting the OpenCL 3.1 version.
+<a href="#unified-spec">Requires</a> support for OpenCL C 3.1 or newer.</p>
+</dd>
<dt class="hdlist1"><code>__OPENCL_C_VERSION__</code> </dt>
<dd>
<p>Substitutes an integer reflecting the OpenCL C version specified by the
@@ -6125,7 +6130,101 @@
<div class="paragraph">
<p>In OpenCL C 3.0 or newer there are a number of optional predefined macros
indicating optional language features. Such macros are listed in the
-<a href="#table-optional-lang-features">optional features in OpenCL C 3.0 table</a>.</p>
+<a href="#table-optional-lang-features">optional features in OpenCL C 3.0 or newer table</a>.</p>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="preprocessor-directives-for-optional-extensions"><a class="anchor" href="#preprocessor-directives-for-optional-extensions"></a>6.12.1. Preprocessor Directives for Optional Extensions</h4>
+<div class="paragraph">
+<p>The <strong>#pragma OPENCL EXTENSION</strong> directive controls the behavior of the OpenCL
+compiler with respect to extensions.
+The <strong>#pragma OPENCL EXTENSION</strong> directive is defined as:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="opencl_c"><span class="cp">#pragma OPENCL EXTENSION <extension_name> : <behavior>
+#pragma OPENCL EXTENSION all : <behavior></span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>where <em>extension_name</em> is the name of the extension.
+The token <strong>all</strong> means that the behavior applies to all extensions supported
+by the compiler.
+The <em>behavior</em> can be set to one of the following values given by the table
+below.</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 25%;">
+<col style="width: 75%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><strong>behavior</strong></th>
+<th class="tableblock halign-left valign-top"><strong>Description</strong></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>enable</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Behave as specified by the extension <em>extension_name</em>.</p>
+<p class="tableblock"> Report an error on the <strong><code>#pragma OPENCL EXTENSION</code></strong> if the
+ <em>extension_name</em> is not supported, or if <strong>all</strong> is specified.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>disable</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Behave (including issuing errors and warnings) as if the extension
+ <em>extension_name</em> is not part of the language definition.</p>
+<p class="tableblock"> If <strong>all</strong> is specified, then behavior must revert back to that of the
+ non-extended core version of the language being compiled to.</p>
+<p class="tableblock"> Warn on the <strong><code>#pragma OPENCL EXTENSION</code></strong> if the extension <em>extension_name</em>
+ is not supported.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>The <strong><code>#pragma OPENCL EXTENSION</code></strong> directive is a simple, low-level mechanism
+to set the behavior for each extension.
+It does not define policies such as which combinations are appropriate;
+those must be defined elsewhere.
+The order of directives matter in setting the behavior for each extension.
+Directives that occur later override those seen earlier.
+The <strong>all</strong> variant sets the behavior for all extensions, overriding all
+previously issued extension directives, but only if the <em>behavior</em> is set to
+<strong>disable</strong>.</p>
+</div>
+<div class="paragraph">
+<p>The initial state of the compiler is as if the directive</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="opencl_c"><span class="cp">#pragma OPENCL EXTENSION all : disable</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>was issued, telling the compiler that all error and warning reporting must
+be done according to this specification, ignoring any extensions.</p>
+</div>
+<div class="paragraph">
+<p>Every extension which affects the OpenCL language semantics, syntax or adds
+built-in functions to the language must create a preprocessor <code>#define</code> that
+matches the extension name string.
+This <code>#define</code> would be available in the language if and only if the
+extension is supported on a given implementation.</p>
+</div>
+<div class="paragraph">
+<p>For example, compilers that support the <code>cl_khr_<wbr>3d_<wbr>image_<wbr>writes</code> extension
+will add a preprocessor <code>#define</code> called <code>cl_khr_<wbr>3d_<wbr>image_<wbr>writes</code>.
+A kernel can now use this preprocessor <code>#define</code> to do something like:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="rouge highlight"><code data-lang="opencl_c"><span class="cp">#ifdef cl_khr_3d_image_writes
+</span> <span class="c1">// do something using the extension</span>
+<span class="cp">#else
+</span> <span class="c1">// do something else or #error!</span>
+<span class="cp">#endif</span></code></pre>
</div>
</div>
</div>
@@ -6701,27 +6800,6 @@
</div>
</div>
</div>
-<div class="sect3">
-<h4 id="extending-attribute-qualifiers"><a class="anchor" href="#extending-attribute-qualifiers"></a>6.13.6. Extending Attribute Qualifiers</h4>
-<div class="paragraph">
-<p>The attribute syntax can be extended for standard language extensions and
-vendor specific extensions.
-Any extensions should follow the naming conventions outlined in the
-introduction to <a href="#opencl-extension-spec">section 9 in the OpenCL 2.0
-Extension Specification</a>.</p>
-</div>
-<div class="paragraph">
-<p>Attributes are intended as useful hints to the compiler.
-It is our intention that a particular implementation of OpenCL be free to
-ignore all attributes and the resulting executable binary will produce the
-same result.
-This does not preclude an implementation from making use of the additional
-information provided by attributes and performing optimizations or other
-transformations as it sees fit.
-In this case it is the programmer’s responsibility to guarantee that the
-information provided is in some sense correct.</p>
-</div>
-</div>
</div>
<div class="sect2">
<h3 id="blocks"><a class="anchor" href="#blocks"></a>6.14. Blocks</h3>
@@ -7302,7 +7380,7 @@
</td>
<td class="content">
The functionality described in the following table <a href="#unified-spec">requires</a> support for
-the <code>cl_khr_<wbr>subgroups</code> extension macro; or for
+the <code>cl_khr_<wbr>subgroups</code> extension, or
OpenCL C 3.0 or newer and the <code>__opencl_c_<wbr>subgroups</code> feature.
</td>
</tr>
@@ -7642,7 +7720,7 @@
<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>fmin</strong>(gentype <em>x</em>, gentype <em>y</em>)<br>
gentypef <strong>fmin</strong>(gentypef <em>x</em>, float <em>y</em>)<br>
gentyped <strong>fmin</strong>(gentyped <em>x</em>, double <em>y</em>)</p>
-<p class="tableblock">gentypeh <strong>fmax</strong>(gentypeh <em>x</em>, half <em>y</em>)</p></td>
+<p class="tableblock">gentypeh <strong>fmin</strong>(gentypeh <em>x</em>, half <em>y</em>)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <em>y</em> if <em>y</em> < <em>x</em>, otherwise it returns <em>x</em>.
If one argument is a NaN, <strong>fmin</strong>() returns the other argument.
If both arguments are NaNs, <strong>fmin</strong>() returns a NaN.
@@ -7800,7 +7878,6 @@
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>mad</strong> computes <em>a</em> * <em>b</em> + <em>c</em>.
The function may compute <em>a</em> * <em>b</em> + <em>c</em> with reduced accuracy in the
embedded profile.
- See the OpenCL SPIR-V Environment Specification for details.
On some hardware the mad instruction may provide better performance
than expanded computation of <em>a</em> * <em>b</em> + <em>c</em>.
<sup class="footnote">[<a id="_footnoteref_48" class="footnote" href="#_footnotedef_48" title="View footnote.">48</a>]</sup></p></td>
@@ -8014,7 +8091,7 @@
<ul>
<li>
<p>A subset of functions from <a href="#table-builtin-math">Built-in Scalar and Vector
-Argument Math Functions</a> that are defined with the half_ prefix .
+Argument Math Functions</a> that are defined with the half_ prefix.
These functions are implemented with a minimum of 10-bits of accuracy,
i.e. the maximum error value <= 8192 ulp.</p>
</li>
@@ -8902,8 +8979,8 @@
multiplied component-wise.
All the components of the resulting vectors are added together to form
the final result.</p>
-<p class="tableblock"> <a href="#unified-spec">Requires</a> that the
- <code>__opencl_c_<wbr>integer_<wbr>dot_<wbr>product_<wbr>input_<wbr>4x8bit</code> feature macro is defined,</p></td>
+<p class="tableblock"> <a href="#unified-spec">Requires</a> support for the
+ <code>__opencl_c_<wbr>integer_<wbr>dot_<wbr>product_<wbr>input_<wbr>4x8bit</code> feature.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uint <strong>dot_acc_sat</strong>(uchar4 a, uchar4 b, uint acc)<br>
@@ -8921,8 +8998,8 @@
</div>
</div>
<div class="paragraph">
-<p><a href="#unified-spec">Requires</a> that the
-<code>__opencl_c_<wbr>integer_<wbr>dot_<wbr>product_<wbr>input_<wbr>4x8bit</code> feature macro is defined,</p>
+<p><a href="#unified-spec">Requires</a> support for the
+<code>__opencl_c_<wbr>integer_<wbr>dot_<wbr>product_<wbr>input_<wbr>4x8bit</code> feature.</p>
</div></div></td>
</tr>
<tr>
@@ -8931,9 +9008,8 @@
int <strong>dot_4x8packed_us_int</strong>(uint a, uint b)<br>
int <strong>dot_4x8packed_su_int</strong>(uint a, uint b)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <strong>dot</strong> for 4x8 bit input vectors packed into a 32-bit word.</p>
-<p class="tableblock"> <a href="#unified-spec">Requires</a> that the
- <code>__opencl_c_<wbr>integer_<wbr>dot_<wbr>product_<wbr>input_<wbr>4x8bit_<wbr>packed</code> feature macro is
- defined,</p></td>
+<p class="tableblock"> <a href="#unified-spec">Requires</a> support for the
+ <code>__opencl_c_<wbr>integer_<wbr>dot_<wbr>product_<wbr>input_<wbr>4x8bit_<wbr>packed</code> feature.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uint <strong>dot_acc_sat_4x8packed_uu_uint</strong>(uint a, uint b, uint acc)<br>
@@ -8942,9 +9018,8 @@
int <strong>dot_acc_sat_4x8packed_su_int</strong>(uint a, uint b, int acc)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <strong>dot_acc_set</strong> for 4x8 bit input vectors packed into a 32-bit
word.</p>
-<p class="tableblock"> <a href="#unified-spec">Requires</a> that the
- <code>__opencl_c_<wbr>integer_<wbr>dot_<wbr>product_<wbr>input_<wbr>4x8bit_<wbr>packed</code> feature macro is
- defined,</p></td>
+<p class="tableblock"> <a href="#unified-spec">Requires</a> support for the
+ <code>__opencl_c_<wbr>integer_<wbr>dot_<wbr>product_<wbr>input_<wbr>4x8bit_<wbr>packed</code> feature.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>mad_hi</strong>(gentype <em>a</em>, gentype <em>b</em>, gentype <em>c</em>)</p></td>
@@ -9061,10 +9136,12 @@
<div class="openblock">
<div class="content">
<div class="paragraph">
-<p>If the <code>cl_khr_<wbr>extended_<wbr>bit_<wbr>ops</code> extension macro is supported, the
-functions described in the <a href="#table-builtin-extended-bit-operations">Built-in
-Scalar and Vector Extended Bit Operations</a> table can be used with built-in
-scalar or vector integer types to perform extended bit operations.
+<p>If
+the <code>cl_khr_<wbr>extended_<wbr>bit_<wbr>ops</code> extension macro or
+OpenCL C 3.1 or newer is supported, the functions described in the
+<a href="#table-builtin-extended-bit-operations">Built-in Scalar and Vector Extended Bit
+Operations</a> table can be used with built-in scalar or vector integer types to
+perform extended bit operations.
The functions that operate on vector types operate component-wise.
The description is per-component.</p>
</div>
@@ -9081,6 +9158,20 @@
<code>ulong</code>, and <code>ulong<em>n</em></code>.
<em>n</em> is 2, 3, 4, 8, or 16.</p>
</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+The functionality described in the following table <a href="#unified-spec">requires</a> support for
+the <code>cl_khr_<wbr>extended_<wbr>bit_<wbr>ops</code> extension macro or
+OpenCL C 3.1 or newer.
+</td>
+</tr>
+</table>
+</div>
<table id="table-builtin-extended-bit-operations" class="tableblock frame-all grid-all stretch">
<caption class="title">Table 15. Built-in Scalar and Vector Extended Bit Operations</caption>
<colgroup>
@@ -9114,9 +9205,7 @@
If <em>count</em> equals 0, the return value will be equal to <em>base</em>.</p>
<p class="tableblock"> If <em>count</em> or <em>offset</em> or <em>offset</em> + <em>count</em> is greater than number of
bits in <code>gentype</code> (for scalar types) or components of <code>gentype</code> (for
- vector types), the result is undefined.</p>
-<p class="tableblock"> <a href="#unified-spec">Requires</a> support for the
- <code>cl_khr_<wbr>extended_<wbr>bit_<wbr>ops</code> extension macro.</p></td>
+ vector types), the result is undefined.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock">
@@ -9137,9 +9226,7 @@
If <em>count</em> equals 0, the result is 0.</p>
<p class="tableblock"> If the <em>count</em> or <em>offset</em> or <em>offset</em> + <em>count</em> is greater than
number of bits in <code>gentype</code> (for scalar types) or components of
- <code>gentype</code> (for vector types), the result is undefined.</p>
-<p class="tableblock"> <a href="#unified-spec">Requires</a> support for the
- <code>cl_khr_<wbr>extended_<wbr>bit_<wbr>ops</code> extension macro.</p></td>
+ <code>gentype</code> (for vector types), the result is undefined.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock">
@@ -9159,9 +9246,7 @@
If <em>count</em> equals 0, the result is 0.</p>
<p class="tableblock"> If the <em>count</em> or <em>offset</em> or <em>offset</em> + <em>count</em> is greater than
number of bits in <code>gentype</code> (for scalar types) or components of
- <code>gentype</code> (for vector types), the result is undefined.</p>
-<p class="tableblock"> <a href="#unified-spec">Requires</a> support for the
- <code>cl_khr_<wbr>extended_<wbr>bit_<wbr>ops</code> extension macro.</p></td>
+ <code>gentype</code> (for vector types), the result is undefined.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock">
@@ -9175,9 +9260,7 @@
the bit numbered <em>width</em> - <em>n</em> - 1 of <em>base</em> (for scalar types) or a
component of <em>base</em> (for vector types), where <em>width</em> is number of
bits of <code>gentype</code> (for scalar types) or components of <code>gentype</code> (for
- vector types).</p>
-<p class="tableblock"> <a href="#unified-spec">Requires</a> support for the
- <code>cl_khr_<wbr>extended_<wbr>bit_<wbr>ops</code> extension macro.</p></td>
+ vector types).</p></td>
</tr>
</tbody>
</table>
@@ -9656,7 +9739,7 @@
</div>
<div class="listingblock">
<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl_c"><span class="k">if</span> <span class="p">(</span><span class="n">all</span><span class="p">(</span><span class="n">p</span> <span class="o">==</span> <span class="mf">0.0</span><span class="n">f</span><span class="p">))</span>
+<pre class="rouge highlight"><code data-lang="opencl_c"><span class="k">if</span> <span class="p">(</span><span class="n">all</span><span class="p">(</span><span class="n">p</span> <span class="o">==</span> <span class="mf">0.0f</span><span class="p">))</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">p</span><span class="p">;</span>
<span class="k">else</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">p</span> <span class="o">/</span>
@@ -9810,7 +9893,7 @@
long<em>n</em> <strong>islessgreater</strong>(double<em>n</em> <em>x</em>, double<em>n</em> <em>y</em>)</p>
<p class="tableblock"> int <strong>islessgreater</strong>(half <em>x</em>, half <em>y</em>)<br>
short<em>n</em> <strong>islessgreater</strong>(half<em>n</em> <em>x</em>, half<em>n</em> <em>y</em>)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the component-wise compare of (<em>x</em> < <em>y</em>) || (<em>x</em> > <em>y</em>) .</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the component-wise compare of (<em>x</em> < <em>y</em>) || (<em>x</em> > <em>y</em>).</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"></td>
@@ -10379,7 +10462,7 @@
</td>
<td class="content">
The functionality described in the following table <a href="#unified-spec">requires</a> support for
-the <code>cl_khr_<wbr>subgroups</code> extension macro; or for
+the <code>cl_khr_<wbr>subgroups</code> extension, or
OpenCL 3.0 or newer and the <code>__opencl_c_<wbr>subgroups</code> feature.
</td>
</tr>
@@ -11296,7 +11379,7 @@
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>memory_scope_sub_group</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#unified-spec">Requires</a> support for
-the <code>cl_khr_<wbr>subgroups</code> extension macro; or for
+the <code>cl_khr_<wbr>subgroups</code> extension, or
OpenCL C 3.0 or newer and the <code>__opencl_c_<wbr>subgroups</code> feature.</p></td>
</tr>
<tr>
@@ -11488,7 +11571,7 @@
<span class="n">C</span> <span class="n">desired</span><span class="p">,</span>
<span class="n">memory_order</span> <span class="n">order</span><span class="p">)</span>
-<span class="c1">// Requires OpenCL C 2.0 or OpenCL C 3.0 or newer and both the</span>
+<span class="c1">// Requires OpenCL C 2.0, or OpenCL C 3.0 or newer and both the</span>
<span class="c1">// __opencl_c_generic_address_space and __opencl_c_atomic_scope_device</span>
<span class="c1">// features.</span>
<span class="kt">void</span> <span class="fm">atomic_store_explicit</span><span class="p">(</span><span class="k">volatile</span> <span class="n">A</span> <span class="o">*</span><span class="n">object</span><span class="p">,</span>
@@ -11613,7 +11696,7 @@
</td>
<td class="content">
The non-explicit <code>atomic_load</code> function <a href="#unified-spec">requires</a>
-support for OpenCL C 2.0 or OpenCL C 3.0 or newer and both the
+support for OpenCL C 2.0, or OpenCL C 3.0 or newer and both the
<code>__opencl_c_<wbr>atomic_<wbr>order_<wbr>seq_<wbr>cst</code> and <code>__opencl_c_<wbr>atomic_<wbr>scope_<wbr>device</code>
features.
For the explicit variants, memory order and scope enumerations must respect the
@@ -11665,7 +11748,7 @@
<span class="n">C</span> <span class="n">desired</span><span class="p">,</span>
<span class="n">memory_order</span> <span class="n">order</span><span class="p">)</span>
-<span class="c1">// Requires OpenCL C 2.0 or OpenCL C 3.0 or newer and both the</span>
+<span class="c1">// Requires OpenCL C 2.0, or OpenCL C 3.0 or newer and both the</span>
<span class="c1">// __opencl_c_generic_address_space and __opencl_c_atomic_scope_device</span>
<span class="c1">// feature.</span>
<span class="n">C</span> <span class="fm">atomic_exchange_explicit</span><span class="p">(</span><span class="k">volatile</span> <span class="n">A</span> <span class="o">*</span><span class="n">object</span><span class="p">,</span>
@@ -11706,7 +11789,7 @@
</td>
<td class="content">
The non-explicit <code>atomic_exchange</code> function <a href="#unified-spec">requires</a>
-support for OpenCL C 2.0 or OpenCL C 3.0 or newer and both the
+support for OpenCL C 2.0, or OpenCL C 3.0 or newer and both the
<code>__opencl_c_<wbr>atomic_<wbr>order_<wbr>seq_<wbr>cst</code> and <code>__opencl_c_<wbr>atomic_<wbr>scope_<wbr>device</code>
features.
For the explicit variants, memory order and scope enumerations must respect the
@@ -12184,7 +12267,7 @@
<span class="n">M</span> <span class="n">operand</span><span class="p">,</span>
<span class="n">memory_order</span> <span class="n">order</span><span class="p">)</span>
-<span class="c1">// Requires OpenCL C 2.0 or OpenCL C 3.0 or newer and both the</span>
+<span class="c1">// Requires OpenCL C 2.0, or OpenCL C 3.0 or newer and both the</span>
<span class="c1">// __opencl_c_generic_address_space and __opencl_c_atomic_scope_device</span>
<span class="c1">// features.</span>
<span class="n">C</span> <span class="n">atomic_fetch_key_explicit</span><span class="p">(</span><span class="k">volatile</span> <span class="n">A</span> <span class="o">*</span><span class="n">object</span><span class="p">,</span>
@@ -12320,7 +12403,7 @@
<span class="k">volatile</span> <span class="nx">__local</span> <span class="n">atomic_flag</span> <span class="o">*</span><span class="n">object</span><span class="p">,</span>
<span class="n">memory_order</span> <span class="n">order</span><span class="p">)</span>
-<span class="c1">// Requires OpenCL C 2.0 or OpenCL C 3.0 or newer and both the</span>
+<span class="c1">// Requires OpenCL C 2.0, or OpenCL C 3.0 or newer and both the</span>
<span class="c1">// __opencl_c_generic_address_space and __opencl_c_atomic_scope_device</span>
<span class="c1">// features.</span>
<span class="kt">bool</span> <span class="fm">atomic_flag_test_and_set_explicit</span><span class="p">(</span>
@@ -12966,7 +13049,7 @@
<li>
<p>Using <code>memory_scope_sub_group</code> with any built-in atomic function
<a href="#unified-spec">requires</a> support for
-the <code>cl_khr_<wbr>subgroups</code> extension macro; or for
+the <code>cl_khr_<wbr>subgroups</code> extension, or
OpenCL C 3.0 or newer and the <code>__opencl_c_<wbr>subgroups</code> feature.</p>
</li>
<li>
@@ -13332,6 +13415,18 @@
integers are supported by the device.</p>
</div>
<div class="paragraph">
+<p><strong>z</strong> Specifies that a following <strong>d</strong>, <strong>i</strong>, <strong>o</strong>, <strong>u</strong>, <strong>x</strong>, or <strong>X</strong> conversion
+specifier applies to a <code>size_t</code> argument.
+The <strong>z</strong> length modifier <a href="#unified-spec">requires</a> support for OpenCL C 3.1 or
+newer.</p>
+</div>
+<div class="paragraph">
+<p><strong>t</strong> Specifies that a following <strong>d</strong>, <strong>i</strong>, <strong>o</strong>, <strong>u</strong>, <strong>x</strong>, or <strong>X</strong> conversion
+specifier applies to a <code>ptrdiff_t</code> argument.
+The <strong>t</strong> length modifier <a href="#unified-spec">requires</a> support for OpenCL C 3.1 or
+newer.</p>
+</div>
+<div class="paragraph">
<p>If the vector specifier is used, the length modifiers and their meanings
are:</p>
</div>
@@ -13542,7 +13637,7 @@
</div>
<div class="listingblock">
<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float4</span> <span class="n">f</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">2.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">3.0</span><span class="n">f</span><span class="p">,</span> <span class="mf">4.0</span><span class="n">f</span><span class="p">);</span>
+<pre class="rouge highlight"><code data-lang="opencl_c"><span class="kt">float4</span> <span class="n">f</span> <span class="o">=</span> <span class="p">(</span><span class="kt">float4</span><span class="p">)(</span><span class="mf">1.0f</span><span class="p">,</span> <span class="mf">2.0f</span><span class="p">,</span> <span class="mf">3.0f</span><span class="p">,</span> <span class="mf">4.0f</span><span class="p">);</span>
<span class="kt">uchar4</span> <span class="n">uc</span> <span class="o">=</span> <span class="p">(</span><span class="kt">uchar4</span><span class="p">)(</span><span class="mh">0xFA</span><span class="p">,</span> <span class="mh">0xFB</span><span class="p">,</span> <span class="mh">0xFC</span><span class="p">,</span> <span class="mh">0xFD</span><span class="p">);</span>
<span class="fm">printf</span><span class="p">(</span><span class="s">"f4 = %2.2v4hlf</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">f</span><span class="p">);</span>
@@ -13608,19 +13703,24 @@
<div class="ulist">
<ul>
<li>
+<p>The asterisk <strong>*</strong> field width specifier is not supported by OpenCL C.</p>
+</li>
+<li>
<p>The <strong>l</strong> modifier followed by a <strong>c</strong> conversion specifier or <strong>s</strong>
conversion specifier is not supported by OpenCL C.</p>
</li>
<li>
-<p>The <strong>ll</strong>, <strong>j</strong>, <strong>z</strong>, <strong>t</strong>, and <strong>L</strong> length modifiers are not supported by
-OpenCL C but are reserved.</p>
+<p>The <strong>ll</strong>, <strong>j</strong>, and <strong>L</strong> length modifiers are not supported by OpenCL C but
+are reserved.
+Prior to OpenCL C 3.1, the <strong>z</strong> and <strong>t</strong> length modifiers additionally are not
+supported by OpenCL C but are reserved.</p>
</li>
<li>
<p>The <strong>n</strong> conversion specifier is not supported by OpenCL C but is
reserved.</p>
</li>
<li>
-<p>OpenCL C adds the optional *v*<em>n</em> vector specifier to support printing
+<p>OpenCL C adds the optional <strong>v</strong><em>n</em> vector specifier to support printing
of vector types.</p>
</li>
<li>
@@ -17179,8 +17279,6 @@
</div>
<div class="sect3">
<h4 id="enqueuing-kernels"><a class="anchor" href="#enqueuing-kernels"></a>6.15.19. Enqueuing Kernels</h4>
-<div class="openblock">
-<div class="content">
<div class="admonitionblock note">
<table>
<tr>
@@ -17201,12 +17299,20 @@
A kernel may enqueue code represented by Block syntax, and control execution
order with event dependencies including user events and markers.
There are several advantages to using the Block syntax: it is more compact;
-it does not require a cl_kernel object; and enqueuing can be done as a
+it does not require a <code>cl_kernel</code> object; and enqueuing can be done as a
single semantic step.</p>
</div>
<div class="paragraph">
+<p>The macro <code>CLK_NULL_EVENT</code> refers to an invalid device event.
+The macro <code>CLK_NULL_QUEUE</code> refers to an invalid device queue.</p>
+</div>
+<div class="sect4">
+<h5 id="built-in-functions-enqueuing-a-kernel"><a class="anchor" href="#built-in-functions-enqueuing-a-kernel"></a>6.15.19.1. Built-in Functions - Enqueuing a Kernel</h5>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
<p>The following table describes the list of built-in functions that can be
-used to enqueue a kernel(s).</p>
+used to enqueue a kernel.</p>
</div>
<div class="paragraph">
<p>When the <code>cl_khr_<wbr>device_<wbr>enqueue_<wbr>local_<wbr>arg_<wbr>types</code> extension macro is
@@ -17223,14 +17329,6 @@
<p>When the <code>cl_khr_<wbr>device_<wbr>enqueue_<wbr>local_<wbr>arg_<wbr>types</code> extension macro is
not supported, the pointee type of these functions must be <code>void</code>.</p>
</div>
-<div class="paragraph">
-<p>The macro <code>CLK_NULL_EVENT</code> refers to an invalid device event.
-The macro <code>CLK_NULL_QUEUE</code> refers to an invalid device queue.</p>
-</div>
-</div>
-</div>
-<div class="sect4">
-<h5 id="built-in-functions-enqueuing-a-kernel"><a class="anchor" href="#built-in-functions-enqueuing-a-kernel"></a>6.15.19.1. Built-in Functions - Enqueuing a Kernel</h5>
<table id="table-builtin-kernel-enqueue" class="tableblock frame-all grid-all stretch">
<caption class="title">Table 44. Built-in Kernel Enqueue Functions</caption>
<colgroup>
@@ -17252,6 +17350,14 @@
const clk_event_t *<em>event_wait_list</em>, clk_event_t *<em>event_ret</em>,
void (^<em>block</em>)(void))<br>
int <strong>enqueue_kernel</strong>(queue_t <em>queue</em>, kernel_enqueue_flags_t <em>flags</em>,
+ const ndrange_t <em>ndrange</em>, void (^<em>block</em>)(local void *, …​),
+ uint size0, …​)<br>
+ int <strong>enqueue_kernel</strong>(queue_t <em>queue</em>, kernel_enqueue_flags_t <em>flags</em>,
+ const ndrange_t <em>ndrange</em>, uint <em>num_events_in_wait_list</em>,
+ const clk_event_t *<em>event_wait_list</em>, clk_event_t *<em>event_ret</em>,
+ void (^<em>block</em>)(local void *, …​), uint size0, …​)</p>
+<p class="tableblock"> If the <code>cl_khr_<wbr>device_<wbr>enqueue_<wbr>local_<wbr>arg_<wbr>types</code> extension macro is supported:</p>
+<p class="tableblock"> int <strong>enqueue_kernel</strong>(queue_t <em>queue</em>, kernel_enqueue_flags_t <em>flags</em>,
const ndrange_t <em>ndrange</em>, void (^<em>block</em>)(local gentype *, …​),
uint size0, …​)<br>
int <strong>enqueue_kernel</strong>(queue_t <em>queue</em>, kernel_enqueue_flags_t <em>flags</em>,
@@ -17267,7 +17373,7 @@
<div class="paragraph">
<p>The <strong>enqueue_kernel</strong> built-in function allows a work-item to enqueue a
block.
-Work-items can enqueue multiple blocks to a device queue(s).</p>
+Work-items can enqueue multiple blocks to device queues.</p>
</div>
<div class="paragraph">
<p>The <strong>enqueue_kernel</strong> built-in function returns <code>CLK_SUCCESS</code> if the block is
@@ -17311,6 +17417,8 @@
</li>
</ul>
</div>
+</div>
+</div>
<div class="paragraph">
<p>Below are some examples of how to enqueue a block.</p>
</div>
@@ -17510,7 +17618,7 @@
The kernel dp_func_A will launch a kernel (evaluate_dp_work_A) that will
determine if new nd-range work needs to be performed.
If new nd-range work does need to be performed, then evaluate_dp_work_A will
-enqueue a new instance of dp_func_A .
+enqueue a new instance of dp_func_A.
This process is repeated until all the work is completed.</p>
</div>
<div class="listingblock">
@@ -17598,7 +17706,7 @@
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CLK_ENQUEUE_FLAGS_WAIT_WORK_GROUP</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Indicates that the enqueued kernels wait only for the workgroup that
+<td class="tableblock halign-left valign-top"><p class="tableblock">Indicates that the enqueued kernels wait only for the work-group that
enqueued the kernels to finish before they begin execution.
<sup class="footnote">[<a id="_footnoteref_93" class="footnote" href="#_footnotedef_93" title="View footnote.">93</a>]</sup></p></td>
</tr>
@@ -17668,7 +17776,9 @@
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uint <strong>get_kernel_work_group_size</strong>(void (^block)(void))<br>
- uint <strong>get_kernel_work_group_size</strong>(void (^block)(local gentype *, …​))</p></td>
+ uint <strong>get_kernel_work_group_size</strong>(void (^block)(local void <strong>, …​))</p>
+<p class="tableblock"> If the <code>cl_khr_<wbr>device_<wbr>enqueue_<wbr>local_<wbr>arg_<wbr>types</code> extension macro is supported:</p>
+<p class="tableblock"> uint *get_kernel_work_group_size</strong>(void (^block)(local gentype *, …​))</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">This provides a mechanism to query the maximum work-group size that
can be used to execute a block on a specific device given by <em>device</em>.</p>
<p class="tableblock"> <em>block</em> specifies the block to be enqueued.</p></td>
@@ -17677,6 +17787,9 @@
<td class="tableblock halign-left valign-top"><p class="tableblock">uint <strong>get_kernel_<wbr>preferred_<wbr>work_<wbr>group_<wbr>size_<wbr>multiple</strong>(
void (^block)(void))<br>
uint <strong>get_kernel_<wbr>preferred_<wbr>work_<wbr>group_<wbr>size_<wbr>multiple</strong>(
+ void (^block)(local void <strong>, …​))</p>
+<p class="tableblock"> If the <code>cl_khr_<wbr>device_<wbr>enqueue_<wbr>local_<wbr>arg_<wbr>types</code> extension macro is supported:</p>
+<p class="tableblock"> uint *get_kernel_<wbr>preferred_<wbr>work_<wbr>group_<wbr>size_<wbr>multiple</strong>(
void (^block)(local gentype *, …​))</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the preferred multiple of work-group size for launch.
This is a performance hint.
@@ -18050,7 +18163,7 @@
<td class="content">
The functionality described in this section <a href="#unified-spec">requires</a>
support for
-the <code>cl_khr_<wbr>subgroups</code> extension macro; or for
+the <code>cl_khr_<wbr>subgroups</code> extension, or
OpenCL C 3.0 or newer and the <code>__opencl_c_<wbr>subgroups</code> feature.
</td>
</tr>
@@ -18074,14 +18187,15 @@
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
-If the <code>cl_khr_<wbr>subgroup_<wbr>extended_<wbr>types</code> extension is supported, the
-generic type name <code>gentype</code> may additionally be <code>char</code>, <code>uchar</code>, <code>short</code>, and
-<code>ushort</code>.
+If
+the <code>cl_khr_<wbr>subgroup_<wbr>extended_<wbr>types</code> extension macro or
+OpenCL C 3.1 or newer is supported, the generic type name <code>gentype</code> may
+additionally be <code>char</code>, <code>uchar</code>, <code>short</code>, and <code>ushort</code>.
For the <code>sub_group_broadcast</code> function, <code>gentype</code> may additionally be one of
the supported built-in vector data types <code>char<em>n</em></code>, <code>uchar<em>n</em></code>,
<code>short<em>n</em></code>, <code>ushort<em>n</em></code>, <code>int<em>n</em></code>, <code>uint<em>n</em></code>, <code>long<em>n</em></code>,
<code>ulong<em>n</em></code>, <code>float<em>n</em></code>, <code>half<em>n</em></code> <sup class="footnote">[<a id="_footnoteref_97" class="footnote" href="#_footnotedef_97" title="View footnote.">97</a>]</sup>, or
-<code>double<em>n</em></code> <sup class="footnote">[<a id="_footnoteref_98" class="footnote" href="#_footnotedef_98" title="View footnote.">98</a>]</sup>
+<code>double<em>n</em></code> <sup class="footnote">[<a id="_footnoteref_98" class="footnote" href="#_footnotedef_98" title="View footnote.">98</a>]</sup>.
</td>
</tr>
</table>
@@ -18185,8 +18299,8 @@
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
-The functionality described in the following table <a href="#unified-spec">requires</a> support
-the <code>cl_khr_<wbr>subgroups</code> extension macro; or for
+The functionality described in the following table <a href="#unified-spec">requires</a> support for
+the <code>cl_khr_<wbr>subgroups</code> extension, or
OpenCL C 3.0 or newer and the <code>__opencl_c_<wbr>subgroups</code> and <code>__opencl_c_<wbr>pipes</code>
features.
</td>
@@ -18258,7 +18372,7 @@
</td>
<td class="content">
The functionality described in the following table <a href="#unified-spec">requires</a> support
-the <code>cl_khr_<wbr>subgroups</code> extension macro; or for
+the <code>cl_khr_<wbr>subgroups</code> extension, or
OpenCL C 3.0 or newer and the <code>__opencl_c_<wbr>subgroups</code> and
<code>__opencl_c_<wbr>device_<wbr>enqueue</code> features.
</td>
@@ -18587,10 +18701,7 @@
size <em>n</em>, the <em>n</em> work items in the sub-group with the smallest sub-group
local IDs are assigned to the first cluster, then the <em>n</em> remaining work
items with the smallest sub-group local IDs are assigned to the next
-cluster, and so on.
-Behavior is undefined if the specified cluster size is not an integer
-constant expression, is not a power-of-two, or is greater than the maximum
-size of a sub-group within the dispatch.</p>
+cluster, and so on.</p>
</div>
<div class="sect5">
<h6 id="_arithmetic_operations"><a class="anchor" href="#_arithmetic_operations"></a>6.15.20.2.1. Arithmetic Operations</h6>
@@ -18634,7 +18745,10 @@
</div></div></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the summation, multiplication, minimum, or maximum of <em>value</em>
for all active work items in the sub-group within a cluster of the
- specified <em>clustersize</em>.</p></td>
+ specified <em>clustersize</em>.</p>
+<p class="tableblock"> Behavior is undefined if <em>clustersize</em> is not an integer constant
+ expression, is not a power-of-two, or is greater than the maximum size of a
+ sub-group within the dispatch.</p></td>
</tr>
</tbody>
</table>
@@ -18682,7 +18796,10 @@
</div>
</div></div></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the bitwise <strong>and</strong>, <strong>or</strong>, or <strong>xor</strong> of <em>value</em> for all active work
- items in the sub-group within a cluster of the specified <em>clustersize</em>.</p></td>
+ items in the sub-group within a cluster of the specified <em>clustersize</em>.</p>
+<p class="tableblock"> Behavior is undefined if <em>clustersize</em> is not an integer constant
+ expression, is not a power-of-two, or is greater than the maximum size of a
+ sub-group within the dispatch.</p></td>
</tr>
</tbody>
</table>
@@ -18725,7 +18842,10 @@
</div></div></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the logical <strong>and</strong>, <strong>or</strong>, or <strong>xor</strong> of <em>predicate</em> for all active
work items in the sub-group within a cluster of the specified
- <em>clustersize</em>.</p></td>
+ <em>clustersize</em>.</p>
+<p class="tableblock"> Behavior is undefined if <em>clustersize</em> is not an integer constant
+ expression, is not a power-of-two, or is greater than the maximum size of a
+ sub-group within the dispatch.</p></td>
</tr>
</tbody>
</table>
@@ -19112,23 +19232,12 @@
</div>
<div class="sect4">
<h5 id="sub-group-rotate-functions"><a class="anchor" href="#sub-group-rotate-functions"></a>6.15.20.5. Built-in Sub-Group Rotation Functions</h5>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-The functionality described in this section <a href="#unified-spec">requires</a>
-support for the <code>cl_khr_<wbr>subgroup_<wbr>rotate</code> extension.
-</td>
-</tr>
-</table>
-</div>
<div class="paragraph">
-<p>The <a href="#table-rotate-functions">following table</a> describes a specialized
-OpenCL C programming language built-in function that allow work items in a
-sub-group to exchange data.
+<p>If
+the <code>cl_khr_<wbr>subgroup_<wbr>rotate</code> extension macro or
+OpenCL C 3.1 or newer is supported, the functions described in the
+<a href="#table-rotate-functions">Built-in Sub-Group Rotation Functions</a> table can be
+used to exchange data by rotating values through the work-items in a sub-group.
This function need not be encountered by all work items in a sub-group
executing the kernel.
For the functions below, the generic type name <code>gentype</code> may be one of the
@@ -19137,6 +19246,21 @@
<sup class="footnote">[<a id="_footnoteref_109" class="footnote" href="#_footnotedef_109" title="View footnote.">109</a>]</sup>, and <code>double</code>
<sup class="footnote">[<a id="_footnoteref_110" class="footnote" href="#_footnotedef_110" title="View footnote.">110</a>]</sup>.</p>
</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+The functionality described in the following table <a href="#unified-spec">requires</a>
+support for
+the <code>cl_khr_<wbr>subgroup_<wbr>rotate</code> extension macro or
+OpenCL C 3.1 or newer.
+</td>
+</tr>
+</table>
+</div>
<table id="table-rotate-functions" class="tableblock frame-all grid-all stretch">
<caption class="title">Table 61. Built-in Sub-Group Rotation Functions</caption>
<colgroup>
@@ -19180,9 +19304,9 @@
executing the function belongs.<br>
The value of <em>delta</em> is required to be dynamically-uniform for all work
items in the sub-group, otherwise the behavior is undefined.</p>
-<p class="tableblock"> <em>clustersize</em> must be an integer constant expression and a power of two,
- smaller than or equal to the maximum sub-group size, otherwise the
- behavior is undefined.</p>
+<p class="tableblock"> Behavior is undefined if <em>clustersize</em> is not an integer constant
+ expression, is not a power-of-two, or is greater than the maximum size of a
+ sub-group within the dispatch.</p>
<p class="tableblock"> The return value is undefined if the work item with sub-group local ID
equal to the calculated index is inactive.</p></td>
</tr>
@@ -19191,6 +19315,21 @@
</div>
<div class="sect4">
<h5 id="_built_in_sub_group_general_purpose_shuffle_functions"><a class="anchor" href="#_built_in_sub_group_general_purpose_shuffle_functions"></a>6.15.20.6. Built-in Sub-Group General Purpose Shuffle Functions</h5>
+<div class="paragraph">
+<p>If
+the <code>cl_khr_<wbr>subgroup_<wbr>shuffle</code> extension macro or
+OpenCL C 3.1 or newer is supported, the functions described in the
+<a href="#table-shuffle-functions">Built-in Sub-Group General Purpose Shuffle
+Functions</a> table can be used to flexibly exchange data among work-items in a
+sub-group.
+These functions need not be encountered by all work items in a sub-group
+executing the kernel.
+For the functions below, the generic type name <code>gentype</code> may be one of the
+supported built-in scalar data types <code>char</code>, <code>uchar</code>, <code>short</code>, <code>ushort</code>,
+<code>int</code>, <code>uint</code>, <code>long</code>, <code>ulong</code>, <code>float</code>, <code>half</code>
+<sup class="footnote">[<a id="_footnoteref_111" class="footnote" href="#_footnotedef_111" title="View footnote.">111</a>]</sup>, and <code>double</code>
+<sup class="footnote">[<a id="_footnoteref_112" class="footnote" href="#_footnotedef_112" title="View footnote.">112</a>]</sup>.</p>
+</div>
<div class="admonitionblock note">
<table>
<tr>
@@ -19199,23 +19338,13 @@
</td>
<td class="content">
The functionality described in this section <a href="#unified-spec">requires</a>
-support for the <code>cl_khr_<wbr>subgroup_<wbr>shuffle</code> extension.
+support for
+the <code>cl_khr_<wbr>subgroup_<wbr>shuffle</code> extension macro or
+OpenCL C 3.1 or newer.
</td>
</tr>
</table>
</div>
-<div class="paragraph">
-<p>The <a href="#table-shuffle-functions">following table</a> describes the OpenCL C
-programming language built-in functions that allow work items in a sub-group
-to exchange data.
-These functions need not be encountered by all work items in a sub-group
-executing the kernel.
-For the functions below, the generic type name <code>gentype</code> may be one of the
-supported built-in scalar data types <code>char</code>, <code>uchar</code>, <code>short</code>, <code>ushort</code>,
-<code>int</code>, <code>uint</code>, <code>long</code>, <code>ulong</code>, <code>float</code>, <code>half</code>
-<sup class="footnote">[<a id="_footnoteref_111" class="footnote" href="#_footnotedef_111" title="View footnote.">111</a>]</sup>, and <code>double</code>
-<sup class="footnote">[<a id="_footnoteref_112" class="footnote" href="#_footnotedef_112" title="View footnote.">112</a>]</sup>.</p>
-</div>
<table id="table-shuffle-functions" class="tableblock frame-all grid-all stretch">
<caption class="title">Table 62. Built-in Sub-Group General Purpose Shuffle Functions</caption>
<colgroup>
@@ -19267,8 +19396,12 @@
<div class="sect4">
<h5 id="_built_in_sub_group_relative_shuffle_functions"><a class="anchor" href="#_built_in_sub_group_relative_shuffle_functions"></a>6.15.20.7. Built-in Sub-Group Relative Shuffle Functions</h5>
<div class="paragraph">
-<p>The table below describes specialized OpenCL C programming language built-in
-functions that allow work items in a sub-group to exchange data.
+<p>If
+the <code>cl_khr_<wbr>subgroup_<wbr>shuffle_<wbr>relative</code> extension macro or
+OpenCL C 3.1 or newer is supported, the functions described in the
+<a href="#table-shuffle-relative-functionss">Built-in Sub-Group Relative Shuffle
+Functions</a> table can be used to exchange data among relative work-items in a
+sub-group.
These functions need not be encountered by all work items in a sub-group
executing the kernel.
For the functions below, the generic type name <code>gentype</code> may be one of the
@@ -19277,6 +19410,21 @@
<sup class="footnote">[<a id="_footnoteref_113" class="footnote" href="#_footnotedef_113" title="View footnote.">113</a>]</sup>, and <code>double</code>
<sup class="footnote">[<a id="_footnoteref_114" class="footnote" href="#_footnotedef_114" title="View footnote.">114</a>]</sup>.</p>
</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+The functionality described in this section <a href="#unified-spec">requires</a>
+support for
+the <code>cl_khr_<wbr>subgroup_<wbr>shuffle_<wbr>relative</code> extension macro or
+OpenCL C 3.1 or newer.
+</td>
+</tr>
+</table>
+</div>
<table id="table-shuffle-relative-functions" class="tableblock frame-all grid-all stretch">
<caption class="title">Table 63. Built-in Sub-Group Relative Shuffle Functions</caption>
<colgroup>
@@ -19352,7 +19500,8 @@
</thead>
<tbody>
<tr>
-<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">For OpenCL 2.1 or <code>cl_khr_<wbr>subgroups</code>:</p></td>
+<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">For OpenCL C 2.1, OpenCL C 3.0 and the <code>__opencl_c_<wbr>subgroups</code> feature,
+OpenCL C 3.1 or newer, or <code>cl_khr_<wbr>subgroups</code>:</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>get_sub_<wbr>group_<wbr>size</code></p></td>
@@ -19611,60 +19760,6 @@
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>GroupNonUniformClustered</strong></p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">For <code>cl_khr_<wbr>subgroup_<wbr>extended_<wbr>types</code>:<br>
- Note: This extension adds new types to uniform sub-group operations.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sub_group_<wbr>broadcast</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>OpGroupBroadcast</strong></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Groups</strong></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sub_group_<wbr>reduce_<wbr>add</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>OpGroupIAdd</strong>, <strong>OpGroupFAdd</strong></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Groups</strong></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sub_group_<wbr>reduce_<wbr>min</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>OpGroupSMin</strong>, <strong>OpGroupUMin</strong>, <strong>OpGroupFMin</strong></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Groups</strong></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sub_group_<wbr>reduce_<wbr>max</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>OpGroupSMax</strong>, <strong>OpGroupUMax</strong>, <strong>OpGroupFMax</strong></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Groups</strong></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sub_group_<wbr>scan_<wbr>exclusive_<wbr>add</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>OpGroupIAdd</strong>, <strong>OpGroupFAdd</strong></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Groups</strong></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sub_group_<wbr>scan_<wbr>exclusive_<wbr>min</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>OpGroupSMin</strong>, <strong>OpGroupUMin</strong>, <strong>OpGroupFMin</strong></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Groups</strong></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sub_group_<wbr>scan_<wbr>exclusive_<wbr>max</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>OpGroupSMax</strong>, <strong>OpGroupUMax</strong>, <strong>OpGroupFMax</strong></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Groups</strong></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sub_group_<wbr>scan_<wbr>inclusive_<wbr>add</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>OpGroupIAdd</strong>, <strong>OpGroupFAdd</strong></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Groups</strong></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sub_group_<wbr>scan_<wbr>inclusive_<wbr>min</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>OpGroupSMin</strong>, <strong>OpGroupUMin</strong>, <strong>OpGroupFMin</strong></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Groups</strong></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sub_group_<wbr>scan_<wbr>inclusive_<wbr>max</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>OpGroupSMax</strong>, <strong>OpGroupUMax</strong>, <strong>OpGroupFMax</strong></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Groups</strong></p></td>
-</tr>
-<tr>
<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">For <code>cl_khr_<wbr>subgroup_<wbr>non_<wbr>uniform_<wbr>arithmetic</code>:</p></td>
</tr>
<tr>
@@ -19841,7 +19936,22 @@
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>GroupNonUniformVote</strong></p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">For <code>cl_khr_<wbr>subgroup_<wbr>shuffle</code>:</p></td>
+<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">For OpenCL C 3.1 or newer
+or <code>cl_khr_<wbr>subgroup_<wbr>rotate</code>:</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sub_group_<wbr>rotate</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>OpGroupNonUniformRotateKHR</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>GroupNonUniformRotateKHR</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sub_group_<wbr>clustered_<wbr>rotate</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>OpGroupNonUniformRotateKHR</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>GroupNonUniformRotateKHR</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">For OpenCL C 3.1 or newer
+or <code>cl_khr_<wbr>subgroup_<wbr>shuffle</code>:</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sub_group_<wbr>shuffle</code></p></td>
@@ -19854,7 +19964,8 @@
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>GroupNonUniformShuffle</strong></p></td>
</tr>
<tr>
-<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">For <code>cl_khr_<wbr>subgroup_<wbr>shuffle_<wbr>relative</code>:</p></td>
+<td class="tableblock halign-left valign-top" colspan="3"><p class="tableblock">For OpenCL C 3.1 or newer
+or <code>cl_khr_<wbr>subgroup_<wbr>shuffle_<wbr>relative</code>:</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sub_group_<wbr>shuffle_<wbr>up</code></p></td>
@@ -23025,19 +23136,19 @@
</div>
<div class="listingblock">
<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl_c"><span class="n">s_prime</span> <span class="o">=</span> <span class="mf">2.0</span><span class="n">f</span> <span class="o">*</span> <span class="n">rint</span><span class="p">(</span><span class="mf">0.5</span><span class="n">f</span> <span class="o">*</span> <span class="n">s</span><span class="p">)</span>
+<pre class="rouge highlight"><code data-lang="opencl_c"><span class="n">s_prime</span> <span class="o">=</span> <span class="mf">2.0f</span> <span class="o">*</span> <span class="n">rint</span><span class="p">(</span><span class="mf">0.5f</span> <span class="o">*</span> <span class="n">s</span><span class="p">)</span>
<span class="n">s_prime</span> <span class="o">=</span> <span class="n">fabs</span><span class="p">(</span><span class="n">s</span> <span class="o">-</span> <span class="n">s_prime</span><span class="p">)</span>
<span class="n">u</span> <span class="o">=</span> <span class="n">s_prime</span> <span class="o">*</span> <span class="n">w_t</span>
<span class="n">i</span> <span class="o">=</span> <span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="n">floor</span><span class="p">(</span><span class="n">u</span><span class="p">)</span>
<span class="n">i</span> <span class="o">=</span> <span class="n">min</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">w_t</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-<span class="n">t_prime</span> <span class="o">=</span> <span class="mf">2.0</span><span class="n">f</span> <span class="o">*</span> <span class="n">rint</span><span class="p">(</span><span class="mf">0.5</span><span class="n">f</span> <span class="o">*</span> <span class="n">t</span><span class="p">)</span>
+<span class="n">t_prime</span> <span class="o">=</span> <span class="mf">2.0f</span> <span class="o">*</span> <span class="n">rint</span><span class="p">(</span><span class="mf">0.5f</span> <span class="o">*</span> <span class="n">t</span><span class="p">)</span>
<span class="n">t_prime</span> <span class="o">=</span> <span class="n">fabs</span><span class="p">(</span><span class="n">t</span> <span class="o">-</span> <span class="n">t_prime</span><span class="p">)</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">t_prime</span> <span class="o">*</span> <span class="n">h_t</span>
<span class="n">j</span> <span class="o">=</span> <span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="n">floor</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="n">j</span> <span class="o">=</span> <span class="n">min</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="n">h_t</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-<span class="n">r_prime</span> <span class="o">=</span> <span class="mf">2.0</span><span class="n">f</span> <span class="o">*</span> <span class="n">rint</span><span class="p">(</span><span class="mf">0.5</span><span class="n">f</span> <span class="o">*</span> <span class="n">r</span><span class="p">)</span>
+<span class="n">r_prime</span> <span class="o">=</span> <span class="mf">2.0f</span> <span class="o">*</span> <span class="n">rint</span><span class="p">(</span><span class="mf">0.5f</span> <span class="o">*</span> <span class="n">r</span><span class="p">)</span>
<span class="n">r_prime</span> <span class="o">=</span> <span class="n">fabs</span><span class="p">(</span><span class="n">r</span> <span class="o">-</span> <span class="n">r_prime</span><span class="p">)</span>
<span class="n">w</span> <span class="o">=</span> <span class="n">r_prime</span> <span class="o">*</span> <span class="n">d_t</span>
<span class="n">k</span> <span class="o">=</span> <span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="n">floor</span><span class="p">(</span><span class="n">w</span><span class="p">)</span>
@@ -23064,26 +23175,26 @@
</div>
<div class="listingblock">
<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl_c"><span class="n">s_prime</span> <span class="o">=</span> <span class="mf">2.0</span><span class="n">f</span> <span class="o">*</span> <span class="n">rint</span><span class="p">(</span><span class="mf">0.5</span><span class="n">f</span> <span class="o">*</span> <span class="n">s</span><span class="p">)</span>
+<pre class="rouge highlight"><code data-lang="opencl_c"><span class="n">s_prime</span> <span class="o">=</span> <span class="mf">2.0f</span> <span class="o">*</span> <span class="n">rint</span><span class="p">(</span><span class="mf">0.5f</span> <span class="o">*</span> <span class="n">s</span><span class="p">)</span>
<span class="n">s_prime</span> <span class="o">=</span> <span class="n">fabs</span><span class="p">(</span><span class="n">s</span> <span class="o">-</span> <span class="n">s_prime</span><span class="p">)</span>
<span class="n">u</span> <span class="o">=</span> <span class="n">s_prime</span> <span class="o">*</span> <span class="n">w_t</span>
-<span class="n">i0</span> <span class="o">=</span> <span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="n">floor</span><span class="p">(</span><span class="n">u</span> <span class="o">-</span> <span class="mf">0.5</span><span class="n">f</span><span class="p">)</span>
+<span class="n">i0</span> <span class="o">=</span> <span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="n">floor</span><span class="p">(</span><span class="n">u</span> <span class="o">-</span> <span class="mf">0.5f</span><span class="p">)</span>
<span class="n">i1</span> <span class="o">=</span> <span class="n">i0</span> <span class="o">+</span> <span class="mi">1</span>
<span class="n">i0</span> <span class="o">=</span> <span class="n">max</span><span class="p">(</span><span class="n">i0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">i1</span> <span class="o">=</span> <span class="n">min</span><span class="p">(</span><span class="n">i1</span><span class="p">,</span> <span class="n">w_t</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-<span class="n">t_prime</span> <span class="o">=</span> <span class="mf">2.0</span><span class="n">f</span> <span class="o">*</span> <span class="n">rint</span><span class="p">(</span><span class="mf">0.5</span><span class="n">f</span> <span class="o">*</span> <span class="n">t</span><span class="p">)</span>
+<span class="n">t_prime</span> <span class="o">=</span> <span class="mf">2.0f</span> <span class="o">*</span> <span class="n">rint</span><span class="p">(</span><span class="mf">0.5f</span> <span class="o">*</span> <span class="n">t</span><span class="p">)</span>
<span class="n">t_prime</span> <span class="o">=</span> <span class="n">fabs</span><span class="p">(</span><span class="n">t</span> <span class="o">-</span> <span class="n">t_prime</span><span class="p">)</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">t_prime</span> <span class="o">*</span> <span class="n">h_t</span>
-<span class="n">j0</span> <span class="o">=</span> <span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="n">floor</span><span class="p">(</span><span class="n">v</span> <span class="o">-</span> <span class="mf">0.5</span><span class="n">f</span><span class="p">)</span>
+<span class="n">j0</span> <span class="o">=</span> <span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="n">floor</span><span class="p">(</span><span class="n">v</span> <span class="o">-</span> <span class="mf">0.5f</span><span class="p">)</span>
<span class="n">j1</span> <span class="o">=</span> <span class="n">j0</span> <span class="o">+</span> <span class="mi">1</span>
<span class="n">j0</span> <span class="o">=</span> <span class="n">max</span><span class="p">(</span><span class="n">j0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">j1</span> <span class="o">=</span> <span class="n">min</span><span class="p">(</span><span class="n">j1</span><span class="p">,</span> <span class="n">h_t</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-<span class="n">r_prime</span> <span class="o">=</span> <span class="mf">2.0</span><span class="n">f</span> <span class="o">*</span> <span class="n">rint</span><span class="p">(</span><span class="mf">0.5</span><span class="n">f</span> <span class="o">*</span> <span class="n">r</span><span class="p">)</span>
+<span class="n">r_prime</span> <span class="o">=</span> <span class="mf">2.0f</span> <span class="o">*</span> <span class="n">rint</span><span class="p">(</span><span class="mf">0.5f</span> <span class="o">*</span> <span class="n">r</span><span class="p">)</span>
<span class="n">r_prime</span> <span class="o">=</span> <span class="n">fabs</span><span class="p">(</span><span class="n">r</span> <span class="o">-</span> <span class="n">r_prime</span><span class="p">)</span>
<span class="n">w</span> <span class="o">=</span> <span class="n">r_prime</span> <span class="o">*</span> <span class="n">d_t</span>
-<span class="n">k0</span> <span class="o">=</span> <span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="n">floor</span><span class="p">(</span><span class="n">w</span> <span class="o">-</span> <span class="mf">0.5</span><span class="n">f</span><span class="p">)</span>
+<span class="n">k0</span> <span class="o">=</span> <span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="n">floor</span><span class="p">(</span><span class="n">w</span> <span class="o">-</span> <span class="mf">0.5f</span><span class="p">)</span>
<span class="n">k1</span> <span class="o">=</span> <span class="n">k0</span> <span class="o">+</span> <span class="mi">1</span>
<span class="n">k0</span> <span class="o">=</span> <span class="n">max</span><span class="p">(</span><span class="n">k0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">k1</span> <span class="o">=</span> <span class="n">min</span><span class="p">(</span><span class="n">k1</span><span class="p">,</span> <span class="n">d_t</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
@@ -24551,12 +24662,6 @@
Data Types" table (5.7) of that Specification.</p>
</li>
<li>
-<p><a id="opencl-extension-spec"></a> “The OpenCL Extension Specification, Version
-3.0, Unified”, <a href="https://www.khronos.org/registry/OpenCL/" class="bare">https://www.khronos.org/registry/OpenCL/</a> .
-References are to sections and tables of this specific version, although
-other versions exists.</p>
-</li>
-<li>
<p><a id="sRGB-spec"></a> “IEC 61966-2-1:1999 Multimedia systems and equipment -
Colour measurement and management - Part 2-1: Colour management -
Default RGB colour space - sRGB”,
@@ -24581,7 +24686,7 @@
summarized below.</p>
</div>
<div class="sect2">
-<h3 id="_summary_of_changes_from_opencl_3_0"><a class="anchor" href="#_summary_of_changes_from_opencl_3_0"></a>Summary of changes from OpenCL 3.0</h3>
+<h3 id="_summary_of_changes_to_opencl_3_0"><a class="anchor" href="#_summary_of_changes_to_opencl_3_0"></a>Summary of Changes to OpenCL 3.0</h3>
<div class="paragraph">
<p>The first non-experimental version of the OpenCL 3.0 specifications was <strong>v3.0.5</strong>.</p>
</div>
@@ -24752,6 +24857,62 @@
</ul>
</div>
</div>
+<div class="sect2">
+<h3 id="_summary_of_changes_from_opencl_3_0_to_opencl_3_1"><a class="anchor" href="#_summary_of_changes_from_opencl_3_0_to_opencl_3_1"></a>Summary of Changes from OpenCL 3.0 to OpenCL 3.1</h3>
+<div class="paragraph">
+<p>OpenCL 3.1 adds the OpenCL 3.1 C kernel language.</p>
+</div>
+<div class="paragraph">
+<p>Other changes in OpenCL 3.1:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Added support for the <strong>z</strong> and <strong>t</strong> <code>printf</code> length specifiers, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/issues/654">#654</a>.</p>
+</li>
+<li>
+<p>Removed a few references to SPIR-V that do not belong in OpenCL C spec, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1517">#1517</a>.</p>
+</li>
+<li>
+<p>Fixed a typo for <code>fmin</code> for the <code>half</code> type, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1519">#1519</a>.</p>
+</li>
+<li>
+<p>Removed the Extending Attribute Qualifiers section, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1532">#1532</a>.</p>
+</li>
+<li>
+<p>Moved the documentation of cluster size restrictions to improve readability, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1535">#1535</a>.</p>
+</li>
+<li>
+<p>Clarified behavior for NaN to integer saturated conversions, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1546">#1546</a>.</p>
+</li>
+<li>
+<p>Promoted the following extensions to the core API:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>cl_khr_<wbr>extended_<wbr>bit_<wbr>ops</code></p>
+</li>
+<li>
+<p><code>cl_khr_<wbr>integer_<wbr>dot_<wbr>product</code></p>
+</li>
+<li>
+<p><code>cl_khr_<wbr>subgroup_<wbr>extended_<wbr>types</code></p>
+</li>
+<li>
+<p><code>cl_khr_<wbr>subgroup_<wbr>rotate</code></p>
+</li>
+<li>
+<p><code>cl_khr_<wbr>subgroup_<wbr>shuffle</code></p>
+</li>
+<li>
+<p><code>cl_khr_<wbr>subgroup_<wbr>shuffle_<wbr>relative</code></p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
</div>
</div>
</div>
diff --git a/specs/unified/html/OpenCL_Env.html b/specs/unified/html/OpenCL_Env.html
index d175891..2fe19b6 100644
--- a/specs/unified/html/OpenCL_Env.html
+++ b/specs/unified/html/OpenCL_Env.html
@@ -891,9 +891,9 @@
<h1>The OpenCL<sup>™</sup> SPIR-V Environment Specification</h1>
<div class="details">
<span id="author" class="author">Khronos<sup>®</sup> OpenCL Working Group</span><br>
-<span id="revnumber">version v3.0.19,</span>
-<span id="revdate">Thu, 10 Jul 2025 11:00:00 +0000</span>
-<br><span id="revremark">from git branch: main commit: 85da0d12c298ffa9eefd2adb1864f2c8193cbe3e</span>
+<span id="revnumber">version v3.1.0,</span>
+<span id="revdate">Tue, 05 May 2026 04:00:00 +0000</span>
+<br><span id="revremark">from git branch: main commit: 9fff1a87a975972517f5d878b50f6063dc1b731b</span>
</div>
<div id="toc" class="toc2">
<div id="toctitle">Table of Contents</div>
@@ -923,6 +923,7 @@
<li><a href="#required-capabilities-1.4">3.5. SPIR-V 1.4</a></li>
<li><a href="#required-capabilities-1.5">3.6. SPIR-V 1.5</a></li>
<li><a href="#required-capabilities-1.6">3.7. SPIR-V 1.6</a></li>
+<li><a href="#required-capabilities-extensions">3.8. SPIR-V Extensions</a></li>
</ul>
</li>
<li><a href="#validation-rules">4. Validation Rules</a></li>
@@ -959,7 +960,8 @@
<li><a href="#references">8. Normative References</a></li>
<li><a href="#changes_to_opencl">Appendix A: Changes to OpenCL</a>
<ul class="sectlevel2">
-<li><a href="#_summary_of_changes_from_opencl_3_0">Summary of changes from OpenCL 3.0</a></li>
+<li><a href="#_summary_of_changes_to_opencl_3_0">Summary of changes to OpenCL 3.0</a></li>
+<li><a href="#_summary_of_changes_from_opencl_3_0_to_opencl_3_1">Summary of Changes from OpenCL 3.0 to OpenCL 3.1</a></li>
</ul>
</li>
</ul>
@@ -969,7 +971,7 @@
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
-<p>Copyright 2008-2025 The Khronos Group Inc.</p>
+<p>Copyright 2008-2026 The Khronos Group Inc.</p>
</div>
<div class="paragraph">
<p>This Specification is protected by copyright laws and contains material proprietary to Khronos.
@@ -1072,18 +1074,18 @@
<div class="sect2">
<h3 id="_supported_spir_v_versions"><a class="anchor" href="#_supported_spir_v_versions"></a>2.1. Supported SPIR-V Versions</h3>
<div class="paragraph">
-<p>An OpenCL environment describes the versions of SPIR-V modules that it
+<p>An OpenCL device describes the versions of SPIR-V modules that it
supports using the <code>CL_DEVICE_<wbr>IL_<wbr>VERSION</code> query in OpenCL 2.1 or newer,
the <code>CL_DEVICE_<wbr>ILS_<wbr>WITH_<wbr>VERSION</code> query in OpenCL 3.0 or newer, or the
<code>CL_DEVICE_<wbr>IL_<wbr>VERSION_<wbr>KHR</code> query in the <code>cl_khr_<wbr>il_<wbr>program</code> extension.</p>
</div>
<div class="paragraph">
-<p>OpenCL environments that support the <code>cl_khr_<wbr>il_<wbr>program</code> extension or
-OpenCL 2.1 must support SPIR-V 1.0 modules. OpenCL environments that support
+<p>OpenCL devices that support the <code>cl_khr_<wbr>il_<wbr>program</code> extension or
+OpenCL 2.1 must support SPIR-V 1.0 modules. OpenCL devices that support
OpenCL 2.2 must support SPIR-V 1.0, 1.1, and 1.2 modules.
-Use the <code>CL_DEVICE_<wbr>IL_<wbr>VERSION</code> or <code>CL_DEVICE_<wbr>ILS_<wbr>WITH_<wbr>VERSION</code> query
-to determine the versions of SPIR-V modules that are supported by
-OpenCL environments that support OpenCL 3.0.</p>
+There is no requirement for an OpenCL 3.0 device to support SPIR-V.
+OpenCL devices that support OpenCL 3.1 must support SPIR-V 1.0, 1.1, 1.2,
+1.3, and 1.4 modules.</p>
</div>
</div>
<div class="sect2">
@@ -1862,6 +1864,19 @@
matches the supported operand types for the format specifier in the following
table.</p>
</div>
+<div class="paragraph">
+<p>In this table, <code>size_t</code> and <code>ptrdiff_t</code> are used as generic types to represent:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>OpTypeInt</strong> with <em>Width</em> equal to 32 if the <em>Addressing Model</em> declared in <strong>OpMemoryModel</strong> is <strong>Physical32</strong>.</p>
+</li>
+<li>
+<p><strong>OpTypeInt</strong> with <em>Width</em> equal to 64 if the <em>Addressing Model</em> declared in <strong>OpMemoryModel</strong> is <strong>Physical64</strong>.</p>
+</li>
+</ul>
+</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 16.6666%;">
@@ -1940,8 +1955,54 @@
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>a</strong>, <strong>A</strong>, <strong>e</strong>, <strong>E</strong>, <strong>f</strong>, <strong>F</strong>, <strong>g</strong>, <strong>G</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>OpTypeVector</strong> with <em>n</em> components of <strong>OpTypeFloat</strong> with <em>Width</em> equal to 64</p></td>
</tr>
+<tr>
+<td class="tableblock halign-left valign-top" colspan="4"><p class="tableblock">For devices supporting OpenCL 3.1 or newer:</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(none)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>z</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>d</strong>, <strong>i</strong>, <strong>o</strong>, <strong>u</strong>, <strong>x</strong>, <strong>X</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>size_t</code></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(none)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>t</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>d</strong>, <strong>i</strong>, <strong>o</strong>, <strong>u</strong>, <strong>x</strong>, <strong>X</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>ptrdiff_t</code></p></td>
+</tr>
</tbody>
</table>
+<div class="paragraph">
+<p>The following additional restrictions also apply to the <strong>printf</strong> instruction in
+the <strong>OpenCL.std</strong> extended instruction set for OpenCL:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Behavior is undefined for the asterisk <strong>*</strong> field width modifier.</p>
+</li>
+<li>
+<p>Behavior is undefined when the <strong>l</strong> length modifier is followed by the <strong>c</strong>
+conversion specifier or the <strong>s</strong> conversion specifier.</p>
+</li>
+<li>
+<p>Behavior is undefined for the <strong>ll</strong>, <strong>j</strong>, and <strong>L</strong> length modifiers.
+Prior to OpenCL 3.1, behavior is additionally undefined for the <strong>z</strong> and <strong>t</strong>
+length modifiers.</p>
+</li>
+<li>
+<p>Behavior is undefined for the <strong>n</strong> conversion specifier.</p>
+</li>
+<li>
+<p>Behavior is undefined for the <strong>l</strong> length modifier when 64-bit integers are not
+supported.</p>
+</li>
+<li>
+<p>Behavior is undefined for the conversion specifier <strong>s</strong> when the operand is not
+a literal string.</p>
+</li>
+</ul>
+</div>
</div>
</div>
</div>
@@ -2138,7 +2199,51 @@
above.</p>
</div>
<div class="paragraph">
-<p>SPIR-V 1.3 does not add any new required capabilities.</p>
+<p>Prior to OpenCL 3.1, SPIR-V 1.3 did not add any new required capabilities.</p>
+</div>
+<div class="paragraph">
+<p>An OpenCL environment supporting SPIR-V 1.3 and OpenCL 3.1 must support SPIR-V
+1.3 modules that declare the following capabilities:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>GroupNonUniformShuffle</strong></p>
+</li>
+<li>
+<p><strong>GroupNonUniformShuffleRelative</strong></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>For instructions requiring these capabilities, <em>Scope</em> for <em>Execution</em> may be:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>Subgroup</strong></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>For the instructions <strong>OpGroupNonUniformShuffle</strong> and <strong>OpGroupNonUniformShuffleXor</strong> requiring these capabilities, valid types for <em>Value</em> are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Scalars of supported types:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>OpTypeInt</strong> (equivalent to <code>char</code>, <code>uchar</code>, <code>short</code>, <code>ushort</code>, <code>int</code>, <code>uint</code>, <code>long</code>, and <code>ulong</code>)</p>
+</li>
+<li>
+<p><strong>OpTypeFloat</strong> (equivalent to <code>half</code>, <code>float</code>, and <code>double</code>)</p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
</div>
</div>
<div class="sect2">
@@ -2171,7 +2276,72 @@
above.</p>
</div>
<div class="paragraph">
-<p>SPIR-V 1.6 does not add any new required capabilities.</p>
+<p>Prior to OpenCL 3.1, SPIR-V 1.6 did not add any new required capabilities.</p>
+</div>
+<div class="paragraph">
+<p>An OpenCL environment supporting SPIR-V 1.6 and OpenCL 3.1 must support SPIR-V
+1.6 modules that declare the following capabilities:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>DotProduct</strong></p>
+</li>
+<li>
+<p><strong>DotProductInput4x8Bit</strong> if <code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>INPUT_<wbr>4x8BIT</code> is supported</p>
+</li>
+<li>
+<p><strong>DotProductInput4x8BitPacked</strong></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect2">
+<h3 id="required-capabilities-extensions"><a class="anchor" href="#required-capabilities-extensions"></a>3.8. SPIR-V Extensions</h3>
+<div class="paragraph">
+<p>An OpenCL environment supporting OpenCL 3.1 must support SPIR-V modules that
+declare the following SPIR-V extensions via <strong>OpExtension</strong> and the following
+extension capabilities:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>SPV_KHR_bit_instructions</code></p>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>BitInstructions</strong></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><code>SPV_KHR_integer_dot_product</code></p>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>DotProductKHR</strong></p>
+</li>
+<li>
+<p><strong>DotProductInput4x8BitKHR</strong> if <code>CL_DEVICE_<wbr>INTEGER_<wbr>DOT_<wbr>PRODUCT_<wbr>INPUT_<wbr>4x8BIT_<wbr>KHR</code> is supported</p>
+</li>
+<li>
+<p><strong>DotProductInput4x8BitPackedKHR</strong></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><code>SPV_KHR_subgroup_rotate</code></p>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>GroupNonUniformRotateKHR</strong></p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
</div>
</div>
</div>
@@ -2241,12 +2411,8 @@
</ul>
</div>
<div class="paragraph">
-<p>The image write instruction <strong>OpImageWrite</strong> must not include any optional
-<em>Image Operands</em>.</p>
-</div>
-<div class="paragraph">
-<p>The image read instructions <strong>OpImageRead</strong> and <strong>OpImageSampleExplicitLod</strong>
-must not include the optional <em>Image Operand</em> <strong>ConstOffset</strong>.</p>
+<p>For all image read and write instructions, if an optional <em>Image Operand</em> is
+present, then it must not include <strong>ConstOffset</strong>.</p>
</div>
<div class="paragraph">
<p>For all <strong>Atomic Instructions</strong>:</p>
@@ -7879,14 +8045,14 @@
to the data vector component type or scalar type:</p>
</div>
<table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 13. <em>Image Data Types</em></caption>
+<caption class="title">Table 13. <em>Mapping Image Data Types to Data Types</em></caption>
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
-<th class="tableblock halign-left valign-top"><strong>Image Channel Order</strong></th>
+<th class="tableblock halign-left valign-top"><strong>Image Channel Data Type</strong></th>
<th class="tableblock halign-left valign-top"><strong>Data Type</strong></th>
</tr>
</thead>
@@ -7969,10 +8135,6 @@
<a href="https://www.khronos.org/registry/OpenCL/" class="bare">https://www.khronos.org/registry/OpenCL/</a> .</p>
</li>
<li>
-<p><a id="opencl-extension-spec"></a> “The OpenCL Extension Specification, Version
-3.0, Unified”, <a href="https://www.khronos.org/registry/OpenCL/" class="bare">https://www.khronos.org/registry/OpenCL/</a> .</p>
-</li>
-<li>
<p><a id="spirv-spec"></a> “SPIR-V Specification, Version 1.6, Unified”,
<a href="https://www.khronos.org/registry/spir-v/" class="bare">https://www.khronos.org/registry/spir-v/</a> .</p>
</li>
@@ -8004,7 +8166,7 @@
versions are summarized below.</p>
</div>
<div class="sect2">
-<h3 id="_summary_of_changes_from_opencl_3_0"><a class="anchor" href="#_summary_of_changes_from_opencl_3_0"></a>Summary of changes from OpenCL 3.0</h3>
+<h3 id="_summary_of_changes_to_opencl_3_0"><a class="anchor" href="#_summary_of_changes_to_opencl_3_0"></a>Summary of changes to OpenCL 3.0</h3>
<div class="paragraph">
<p>The first non-experimental version of the OpenCL 3.0 specifications was <strong>v3.0.5</strong>.</p>
</div>
@@ -8190,6 +8352,54 @@
</ul>
</div>
</div>
+<div class="sect2">
+<h3 id="_summary_of_changes_from_opencl_3_0_to_opencl_3_1"><a class="anchor" href="#_summary_of_changes_from_opencl_3_0_to_opencl_3_1"></a>Summary of Changes from OpenCL 3.0 to OpenCL 3.1</h3>
+<div class="paragraph">
+<p>OpenCL 3.1 requires support for the SPIR-V 1.0, SPIR-V 1.1, SPIR-V 1.2, SPIR-V
+1.3, and SPIR-V 1.4 intermediate languages.</p>
+</div>
+<div class="paragraph">
+<p>Other changes in OpenCL 3.1:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Added support for the <strong>z</strong> and <strong>t</strong> <code>printf</code> length specifiers, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/issues/654">#654</a>.</p>
+</li>
+<li>
+<p>Allowed optional image operands for image write instructions, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1451">#1451</a>.</p>
+</li>
+<li>
+<p>Fixed a typo in the Image Data Types table header row, see <a href="https://github.com/KhronosGroup/OpenCL-Docs/pull/1531">#1531</a>.</p>
+</li>
+<li>
+<p>Promoted the following extensions to the core API:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>cl_khr_<wbr>extended_<wbr>bit_<wbr>ops</code></p>
+</li>
+<li>
+<p><code>cl_khr_<wbr>integer_<wbr>dot_<wbr>product</code></p>
+</li>
+<li>
+<p><code>cl_khr_<wbr>subgroup_<wbr>extended_<wbr>types</code></p>
+</li>
+<li>
+<p><code>cl_khr_<wbr>subgroup_<wbr>rotate</code></p>
+</li>
+<li>
+<p><code>cl_khr_<wbr>subgroup_<wbr>shuffle</code></p>
+</li>
+<li>
+<p><code>cl_khr_<wbr>subgroup_<wbr>shuffle_<wbr>relative</code></p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
</div>
</div>
</div>
diff --git a/specs/unified/html/OpenCL_Ext.html b/specs/unified/html/OpenCL_Ext.html
deleted file mode 100644
index d3280b5..0000000
--- a/specs/unified/html/OpenCL_Ext.html
+++ /dev/null
@@ -1,1782 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-<meta charset="UTF-8">
-<meta http-equiv="X-UA-Compatible" content="IE=edge">
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 2.0.23">
-<meta name="description" content="OpenCL(TM) is an open, royalty-free standard for cross-platform parallel programming of diverse accelerators. This document describes OpenCL extensions.">
-<meta name="author" content="Khronos® OpenCL Working Group">
-<title>The OpenCL™ Extension Specification</title>
-<style>
-/*! normalize.css v2.1.2 | MIT License | git.io/normalize */
-/* ========================================================================== HTML5 display definitions ========================================================================== */
-/** Correct `block` display not defined in IE 8/9. */
-article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; }
-
-/** Correct `inline-block` display not defined in IE 8/9. */
-audio, canvas, video { display: inline-block; }
-
-/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */
-audio:not([controls]) { display: none; height: 0; }
-
-/** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */
-[hidden], template { display: none; }
-
-script { display: none !important; }
-
-/* ========================================================================== Base ========================================================================== */
-/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */
-html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ }
-
-/** Remove default margin. */
-body { margin: 0; }
-
-/* ========================================================================== Links ========================================================================== */
-/** Remove the gray background color from active links in IE 10. */
-a { background: transparent; }
-
-/** Address `outline` inconsistency between Chrome and other browsers. */
-a:focus { outline: thin dotted; }
-
-/** Improve readability when focused and also mouse hovered in all browsers. */
-a:active, a:hover { outline: 0; }
-
-/* ========================================================================== Typography ========================================================================== */
-/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */
-h1 { font-size: 2em; margin: 0.67em 0; }
-
-/** Address styling not present in IE 8/9, Safari 5, and Chrome. */
-abbr[title] { border-bottom: 1px dotted; }
-
-/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */
-b, strong { font-weight: bold; }
-
-/** Address styling not present in Safari 5 and Chrome. */
-dfn { font-style: italic; }
-
-/** Address differences between Firefox and other browsers. */
-hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; }
-
-/** Address styling not present in IE 8/9. */
-mark { background: #ff0; color: #000; }
-
-/** Correct font family set oddly in Safari 5 and Chrome. */
-code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; }
-
-/** Improve readability of pre-formatted text in all browsers. */
-pre { white-space: pre-wrap; }
-
-/** Set consistent quote types. */
-q { quotes: "\201C" "\201D" "\2018" "\2019"; }
-
-/** Address inconsistent and variable font size in all browsers. */
-small { font-size: 80%; }
-
-/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */
-sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
-
-sup { top: -0.5em; }
-
-sub { bottom: -0.25em; }
-
-/* ========================================================================== Embedded content ========================================================================== */
-/** Remove border when inside `a` element in IE 8/9. */
-img { border: 0; }
-
-/** Correct overflow displayed oddly in IE 9. */
-svg:not(:root) { overflow: hidden; }
-
-/* ========================================================================== Figures ========================================================================== */
-/** Address margin not present in IE 8/9 and Safari 5. */
-figure { margin: 0; }
-
-/* ========================================================================== Forms ========================================================================== */
-/** Define consistent border, margin, and padding. */
-fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
-
-/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */
-legend { border: 0; /* 1 */ padding: 0; /* 2 */ }
-
-/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */
-button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ }
-
-/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */
-button, input { line-height: normal; }
-
-/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */
-button, select { text-transform: none; }
-
-/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */
-button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ }
-
-/** Re-set default cursor for disabled elements. */
-button[disabled], html input[disabled] { cursor: default; }
-
-/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */
-input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }
-
-/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */
-input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; }
-
-/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */
-input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
-
-/** Remove inner padding and border in Firefox 4+. */
-button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
-
-/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */
-textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ }
-
-/* ========================================================================== Tables ========================================================================== */
-/** Remove most spacing between table cells. */
-table { border-collapse: collapse; border-spacing: 0; }
-
-meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; }
-
-meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; }
-
-meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; }
-
-*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
-
-html, body { font-size: 100%; }
-
-body { background: #fff; color: #222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; }
-
-a:hover { cursor: pointer; }
-
-img, object, embed { max-width: 100%; height: auto; }
-
-object, embed { height: 100%; }
-
-img { -ms-interpolation-mode: bicubic; }
-
-#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; }
-
-.left { float: left !important; }
-
-.right { float: right !important; }
-
-.text-left { text-align: left !important; }
-
-.text-right { text-align: right !important; }
-
-.text-center { text-align: center !important; }
-
-.text-justify { text-align: justify !important; }
-
-.hide { display: none; }
-
-.antialiased { -webkit-font-smoothing: antialiased; }
-
-img { display: inline-block; vertical-align: middle; }
-
-textarea { height: auto; min-height: 50px; }
-
-select { width: 100%; }
-
-object, svg { display: inline-block; vertical-align: middle; }
-
-.center { margin-left: auto; margin-right: auto; }
-
-.spread { width: 100%; }
-
-p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; }
-
-.subheader, .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { line-height: 1.4; color: black; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; }
-
-/* Typography resets */
-div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; }
-
-/* Default Link Styles */
-a { color: #0068b0; text-decoration: none; line-height: inherit; }
-a:hover, a:focus { color: #333; }
-a img { border: none; }
-
-/* Default paragraph styles */
-p { font-family: Noto, sans-serif; font-weight: normal; font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; text-rendering: optimizeLegibility; }
-p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; }
-
-/* Default header styles */
-h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: Noto, sans-serif; font-weight: normal; font-style: normal; color: black; text-rendering: optimizeLegibility; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.2125em; }
-h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #4d4d4d; line-height: 0; }
-
-h1 { font-size: 2.125em; }
-
-h2 { font-size: 1.6875em; }
-
-h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; }
-
-h4 { font-size: 1.125em; }
-
-h5 { font-size: 1.125em; }
-
-h6 { font-size: 1em; }
-
-hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; }
-
-/* Helpful Typography Defaults */
-em, i { font-style: italic; line-height: inherit; }
-
-strong, b { font-weight: bold; line-height: inherit; }
-
-small { font-size: 60%; line-height: inherit; }
-
-code { font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; color: #264357; }
-
-/* Lists */
-ul, ol, dl { font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; list-style-position: outside; font-family: Noto, sans-serif; }
-
-ul, ol { margin-left: 1.5em; }
-ul.no-bullet, ol.no-bullet { margin-left: 1.5em; }
-
-/* Unordered Lists */
-ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ }
-ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; }
-ul.square { list-style-type: square; }
-ul.circle { list-style-type: circle; }
-ul.disc { list-style-type: disc; }
-ul.no-bullet { list-style: none; }
-
-/* Ordered Lists */
-ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; }
-
-/* Definition Lists */
-dl dt { margin-bottom: 0.3em; font-weight: bold; }
-dl dd { margin-bottom: 0.75em; }
-
-/* Abbreviations */
-abbr, acronym { text-transform: uppercase; font-size: 90%; color: black; border-bottom: 1px dotted #ddd; cursor: help; }
-
-abbr { text-transform: none; }
-
-/* Blockquotes */
-blockquote { margin: 0 0 0.75em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #ddd; }
-blockquote cite { display: block; font-size: 0.8125em; color: #365E7A; }
-blockquote cite:before { content: "\2014 \0020"; }
-blockquote cite a, blockquote cite a:visited { color: #365E7A; }
-
-blockquote, blockquote p { line-height: 1.6; color: #333; }
-
-/* Microformats */
-.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #ddd; padding: 0.625em 0.75em; }
-.vcard li { margin: 0; display: block; }
-.vcard .fn { font-weight: bold; font-size: 0.9375em; }
-
-.vevent .summary { font-weight: bold; }
-.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; }
-
-@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
- h1 { font-size: 2.75em; }
- h2 { font-size: 2.3125em; }
- h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; }
- h4 { font-size: 1.4375em; } }
-/* Tables */
-table { background: #fff; margin-bottom: 1.25em; border: solid 1px #d8d8ce; }
-table thead, table tfoot { background: #eee; font-weight: bold; }
-table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: #222; text-align: left; }
-table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #6d6e71; }
-table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #f8f8f8; }
-table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; }
-
-body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; tab-size: 4; }
-
-h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
-
-a:hover, a:focus { text-decoration: underline; }
-
-.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; }
-.clearfix:after, .float-group:after { clear: both; }
-
-*:not(pre) > code { font-size: inherit; font-style: normal !important; letter-spacing: 0; padding: 0; background-color: transparent; -webkit-border-radius: 0; border-radius: 0; line-height: inherit; word-wrap: break-word; }
-*:not(pre) > code.nobreak { word-wrap: normal; }
-*:not(pre) > code.nowrap { white-space: nowrap; }
-
-pre, pre > code { line-height: 1.6; color: #264357; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; }
-
-em em { font-style: normal; }
-
-strong strong { font-weight: normal; }
-
-.keyseq { color: #333333; }
-
-kbd { font-family: Consolas, "Liberation Mono", Courier, monospace; display: inline-block; color: black; font-size: 0.65em; line-height: 1.45; background-color: #f7f7f7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; margin: 0 0.15em; padding: 0.2em 0.5em; vertical-align: middle; position: relative; top: -0.1em; white-space: nowrap; }
-
-.keyseq kbd:first-child { margin-left: 0; }
-
-.keyseq kbd:last-child { margin-right: 0; }
-
-.menuseq, .menuref { color: #000; }
-
-.menuseq b:not(.caret), .menuref { font-weight: inherit; }
-
-.menuseq { word-spacing: -0.02em; }
-.menuseq b.caret { font-size: 1.25em; line-height: 0.8; }
-.menuseq i.caret { font-weight: bold; text-align: center; width: 0.45em; }
-
-b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; }
-
-b.button:before { content: "["; padding: 0 3px 0 2px; }
-
-b.button:after { content: "]"; padding: 0 2px 0 3px; }
-
-#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 1.5em; padding-right: 1.5em; }
-#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; }
-#header:after, #content:after, #footnotes:after, #footer:after { clear: both; }
-
-#content { margin-top: 1.25em; }
-
-#content:before { content: none; }
-
-#header > h1:first-child { color: black; margin-top: 2.25rem; margin-bottom: 0; }
-#header > h1:first-child + #toc { margin-top: 8px; border-top: 1px solid #ddd; }
-#header > h1:only-child, body.toc2 #header > h1:nth-last-child(2) { border-bottom: 1px solid #ddd; padding-bottom: 8px; }
-#header .details { border-bottom: 1px solid #ddd; line-height: 1.45; padding-top: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; color: #365E7A; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; }
-#header .details span:first-child { margin-left: -0.125em; }
-#header .details span.email a { color: #333; }
-#header .details br { display: none; }
-#header .details br + span:before { content: "\00a0\2013\00a0"; }
-#header .details br + span.author:before { content: "\00a0\22c5\00a0"; color: #333; }
-#header .details br + span#revremark:before { content: "\00a0|\00a0"; }
-#header #revnumber { text-transform: capitalize; }
-#header #revnumber:after { content: "\00a0"; }
-
-#content > h1:first-child:not([class]) { color: black; border-bottom: 1px solid #ddd; padding-bottom: 8px; margin-top: 0; padding-top: 1rem; margin-bottom: 1.25rem; }
-
-#toc { border-bottom: 0 solid #ddd; padding-bottom: 0.5em; }
-#toc > ul { margin-left: 0.125em; }
-#toc ul.sectlevel0 > li > a { font-style: italic; }
-#toc ul.sectlevel0 ul.sectlevel1 { margin: 0.5em 0; }
-#toc ul { font-family: Noto, sans-serif; list-style-type: none; }
-#toc li { line-height: 1.3334; margin-top: 0.3334em; }
-#toc a { text-decoration: none; }
-#toc a:active { text-decoration: underline; }
-
-#toctitle { color: black; font-size: 1.2em; }
-
-@media only screen and (min-width: 768px) { #toctitle { font-size: 1.375em; }
- body.toc2 { padding-left: 15em; padding-right: 0; }
- #toc.toc2 { margin-top: 0 !important; background-color: #fff; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #ddd; border-top-width: 0 !important; border-bottom-width: 0 !important; z-index: 1000; padding: 1.25em 1em; height: 100%; overflow: auto; }
- #toc.toc2 #toctitle { margin-top: 0; margin-bottom: 0.8rem; font-size: 1.2em; }
- #toc.toc2 > ul { font-size: 0.9em; margin-bottom: 0; }
- #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; }
- #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; }
- body.toc2.toc-right { padding-left: 0; padding-right: 15em; }
- body.toc2.toc-right #toc.toc2 { border-right-width: 0; border-left: 1px solid #ddd; left: auto; right: 0; } }
-@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; }
- #toc.toc2 { width: 20em; }
- #toc.toc2 #toctitle { font-size: 1.375em; }
- #toc.toc2 > ul { font-size: 0.95em; }
- #toc.toc2 ul ul { padding-left: 1.25em; }
- body.toc2.toc-right { padding-left: 0; padding-right: 20em; } }
-#content #toc { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
-#content #toc > :first-child { margin-top: 0; }
-#content #toc > :last-child { margin-bottom: 0; }
-
-#footer { max-width: 100%; background: none; padding: 1.25em; }
-
-#footer-text { color: black; line-height: 1.44; }
-
-#content { margin-bottom: 0.625em; }
-
-.sect1 { padding-bottom: 0.625em; }
-
-@media only screen and (min-width: 768px) { #content { margin-bottom: 1.25em; }
- .sect1 { padding-bottom: 1.25em; } }
-.sect1:last-child { padding-bottom: 0; }
-
-.sect1 + .sect1 { border-top: 0 solid #ddd; }
-
-#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; z-index: 1001; width: 1.5ex; margin-left: -1.5ex; display: block; text-decoration: none !important; visibility: hidden; text-align: center; font-weight: normal; }
-#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: "\00A7"; font-size: 0.85em; display: block; padding-top: 0.1em; }
-#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; }
-#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: black; text-decoration: none; }
-#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: black; }
-
-.audioblock, .imageblock, .literalblock, .listingblock, .stemblock, .videoblock { margin-bottom: 1.25em; }
-
-.admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-rendering: optimizeLegibility; text-align: left; }
-
-table.tableblock > caption.title { white-space: nowrap; overflow: visible; max-width: 0; }
-
-.paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { color: black; }
-
-table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; }
-
-.admonitionblock > table { border-collapse: separate; border: 0; background: none; width: 100%; }
-.admonitionblock > table td.icon { text-align: center; width: 80px; }
-.admonitionblock > table td.icon img { max-width: initial; }
-.admonitionblock > table td.icon .title { font-weight: bold; font-family: Noto, sans-serif; text-transform: uppercase; }
-.admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #ddd; color: #365E7A; }
-.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; }
-
-.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
-.exampleblock > .content > :first-child { margin-top: 0; }
-.exampleblock > .content > :last-child { margin-bottom: 0; }
-
-.sidebarblock { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; }
-.sidebarblock > :first-child { margin-top: 0; }
-.sidebarblock > :last-child { margin-bottom: 0; }
-.sidebarblock > .content > .title { color: black; margin-top: 0; }
-
-.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; }
-
-.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { background: #eee; }
-.sidebarblock .literalblock pre, .sidebarblock .listingblock pre:not(.highlight), .sidebarblock .listingblock pre[class="highlight"], .sidebarblock .listingblock pre[class^="highlight "], .sidebarblock .listingblock pre.CodeRay, .sidebarblock .listingblock pre.prettyprint { background: #f2f1f1; }
-
-.literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border: 1px hidden #666; -webkit-border-radius: 0; border-radius: 0; word-wrap: break-word; padding: 1.25em 1.5625em 1.125em 1.5625em; font-size: 0.8125em; }
-.literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; }
-@media only screen and (min-width: 768px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.90625em; } }
-@media only screen and (min-width: 1280px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 1em; } }
-
-.literalblock.output pre { color: #eee; background-color: #264357; }
-
-.listingblock pre.highlightjs { padding: 0; }
-.listingblock pre.highlightjs > code { padding: 1.25em 1.5625em 1.125em 1.5625em; -webkit-border-radius: 0; border-radius: 0; }
-
-.listingblock > .content { position: relative; }
-
-.listingblock code[data-lang]:before { display: none; content: attr(data-lang); position: absolute; font-size: 0.75em; top: 0.425rem; right: 0.5rem; line-height: 1; text-transform: uppercase; color: #999; }
-
-.listingblock:hover code[data-lang]:before { display: block; }
-
-.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; }
-
-.listingblock.terminal pre .command:not([data-prompt]):before { content: "$"; }
-
-table.pyhltable { border-collapse: separate; border: 0; margin-bottom: 0; background: none; }
-
-table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; line-height: 1.6; }
-
-table.pyhltable td.code { padding-left: .75em; padding-right: 0; }
-
-pre.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #ddd; }
-
-pre.pygments .lineno { display: inline-block; margin-right: .25em; }
-
-table.pyhltable .linenodiv { background: none !important; padding-right: 0 !important; }
-
-.quoteblock { margin: 0 1em 0.75em 1.5em; display: table; }
-.quoteblock > .title { margin-left: -1.5em; margin-bottom: 0.75em; }
-.quoteblock blockquote, .quoteblock blockquote p { color: #333; font-size: 1.15rem; line-height: 1.75; word-spacing: 0.1em; letter-spacing: 0; font-style: italic; text-align: justify; }
-.quoteblock blockquote { margin: 0; padding: 0; border: 0; }
-.quoteblock blockquote:before { content: "\201c"; float: left; font-size: 2.75em; font-weight: bold; line-height: 0.6em; margin-left: -0.6em; color: black; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }
-.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; }
-.quoteblock .attribution { margin-top: 0.5em; margin-right: 0.5ex; text-align: right; }
-.quoteblock .quoteblock { margin-left: 0; margin-right: 0; padding: 0.5em 0; border-left: 3px solid #365E7A; }
-.quoteblock .quoteblock blockquote { padding: 0 0 0 0.75em; }
-.quoteblock .quoteblock blockquote:before { display: none; }
-
-.verseblock { margin: 0 1em 0.75em 1em; }
-.verseblock pre { font-family: "Open Sans", "DejaVu Sans", sans; font-size: 1.15rem; color: #333; font-weight: 300; text-rendering: optimizeLegibility; }
-.verseblock pre strong { font-weight: 400; }
-.verseblock .attribution { margin-top: 1.25rem; margin-left: 0.5ex; }
-
-.quoteblock .attribution, .verseblock .attribution { font-size: 0.8125em; line-height: 1.45; font-style: italic; }
-.quoteblock .attribution br, .verseblock .attribution br { display: none; }
-.quoteblock .attribution cite, .verseblock .attribution cite { display: block; letter-spacing: -0.025em; color: #365E7A; }
-
-.quoteblock.abstract { margin: 0 0 0.75em 0; display: block; }
-.quoteblock.abstract blockquote, .quoteblock.abstract blockquote p { text-align: left; word-spacing: 0; }
-.quoteblock.abstract blockquote:before, .quoteblock.abstract blockquote p:first-of-type:before { display: none; }
-
-table.tableblock { max-width: 100%; border-collapse: separate; }
-table.tableblock td > .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; }
-
-table.tableblock, th.tableblock, td.tableblock { border: 0 solid #d8d8ce; }
-
-table.grid-all > thead > tr > .tableblock, table.grid-all > tbody > tr > .tableblock { border-width: 0 1px 1px 0; }
-
-table.grid-all > tfoot > tr > .tableblock { border-width: 1px 1px 0 0; }
-
-table.grid-cols > * > tr > .tableblock { border-width: 0 1px 0 0; }
-
-table.grid-rows > thead > tr > .tableblock, table.grid-rows > tbody > tr > .tableblock { border-width: 0 0 1px 0; }
-
-table.grid-rows > tfoot > tr > .tableblock { border-width: 1px 0 0 0; }
-
-table.grid-all > * > tr > .tableblock:last-child, table.grid-cols > * > tr > .tableblock:last-child { border-right-width: 0; }
-
-table.grid-all > tbody > tr:last-child > .tableblock, table.grid-all > thead:last-child > tr > .tableblock, table.grid-rows > tbody > tr:last-child > .tableblock, table.grid-rows > thead:last-child > tr > .tableblock { border-bottom-width: 0; }
-
-table.frame-all { border-width: 1px; }
-
-table.frame-sides { border-width: 0 1px; }
-
-table.frame-topbot { border-width: 1px 0; }
-
-th.halign-left, td.halign-left { text-align: left; }
-
-th.halign-right, td.halign-right { text-align: right; }
-
-th.halign-center, td.halign-center { text-align: center; }
-
-th.valign-top, td.valign-top { vertical-align: top; }
-
-th.valign-bottom, td.valign-bottom { vertical-align: bottom; }
-
-th.valign-middle, td.valign-middle { vertical-align: middle; }
-
-table thead th, table tfoot th { font-weight: bold; }
-
-tbody tr th { display: table-cell; line-height: 1.4; background: #eee; }
-
-tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: #222; font-weight: bold; }
-
-p.tableblock > code:only-child { background: none; padding: 0; }
-
-p.tableblock { font-size: 1em; }
-
-td > div.verse { white-space: pre; }
-
-ol { margin-left: 1.75em; }
-
-ul li ol { margin-left: 1.5em; }
-
-dl dd { margin-left: 1.125em; }
-
-dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; }
-
-ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.375em; }
-
-ul.checklist, ul.none, ol.none, ul.no-bullet, ol.no-bullet, ol.unnumbered, ul.unstyled, ol.unstyled { list-style-type: none; }
-
-ul.no-bullet, ol.no-bullet, ol.unnumbered { margin-left: 0.625em; }
-
-ul.unstyled, ol.unstyled { margin-left: 0; }
-
-ul.checklist { margin-left: 0.625em; }
-
-ul.checklist li > p:first-child > .fa-square-o:first-child, ul.checklist li > p:first-child > .fa-check-square-o:first-child { width: 1.25em; font-size: 0.8em; position: relative; bottom: 0.125em; }
-
-ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; }
-
-ul.inline { display: -ms-flexbox; display: -webkit-box; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; list-style: none; margin: 0 0 0.375em -0.75em; }
-
-ul.inline > li { margin-left: 0.75em; }
-
-.unstyled dl dt { font-weight: normal; font-style: normal; }
-
-ol.arabic { list-style-type: decimal; }
-
-ol.decimal { list-style-type: decimal-leading-zero; }
-
-ol.loweralpha { list-style-type: lower-alpha; }
-
-ol.upperalpha { list-style-type: upper-alpha; }
-
-ol.lowerroman { list-style-type: lower-roman; }
-
-ol.upperroman { list-style-type: upper-roman; }
-
-ol.lowergreek { list-style-type: lower-greek; }
-
-.hdlist > table, .colist > table { border: 0; background: none; }
-.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; }
-
-td.hdlist1, td.hdlist2 { vertical-align: top; padding: 0 0.625em; }
-
-td.hdlist1 { font-weight: bold; padding-bottom: 0.75em; }
-
-.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; }
-
-.colist > table tr > td:first-of-type { padding: 0.4em 0.75em 0 0.75em; line-height: 1; vertical-align: top; }
-.colist > table tr > td:first-of-type img { max-width: initial; }
-.colist > table tr > td:last-of-type { padding: 0.25em 0; }
-
-.thumb, .th { line-height: 0; display: inline-block; border: solid 4px #fff; -webkit-box-shadow: 0 0 0 1px #ddd; box-shadow: 0 0 0 1px #ddd; }
-
-.imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; }
-.imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; }
-.imageblock > .title { margin-bottom: 0; }
-.imageblock.thumb, .imageblock.th { border-width: 6px; }
-.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; }
-
-.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; }
-.image.left { margin-right: 0.625em; }
-.image.right { margin-left: 0.625em; }
-
-a.image { text-decoration: none; display: inline-block; }
-a.image object { pointer-events: none; }
-
-sup.footnote, sup.footnoteref { font-size: 0.875em; position: static; vertical-align: super; }
-sup.footnote a, sup.footnoteref a { text-decoration: none; }
-sup.footnote a:active, sup.footnoteref a:active { text-decoration: underline; }
-
-#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; }
-#footnotes hr { width: 20%; min-width: 6.25em; margin: -0.25em 0 0.75em 0; border-width: 1px 0 0 0; }
-#footnotes .footnote { padding: 0 0.375em 0 0.225em; line-height: 1.3334; font-size: 0.875em; margin-left: 1.2em; margin-bottom: 0.2em; }
-#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; margin-left: -1.05em; }
-#footnotes .footnote:last-of-type { margin-bottom: 0; }
-#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; }
-
-.gist .file-data > table { border: 0; background: #fff; width: 100%; margin-bottom: 0; }
-.gist .file-data > table td.line-data { width: 99%; }
-
-div.unbreakable { page-break-inside: avoid; }
-
-.big { font-size: larger; }
-
-.small { font-size: smaller; }
-
-.underline { text-decoration: underline; }
-
-.overline { text-decoration: overline; }
-
-.line-through { text-decoration: line-through; }
-
-.aqua { color: #00bfbf; }
-
-.aqua-background { background-color: #00fafa; }
-
-.black { color: black; }
-
-.black-background { background-color: black; }
-
-.blue { color: #0000bf; }
-
-.blue-background { background-color: #0000fa; }
-
-.fuchsia { color: #bf00bf; }
-
-.fuchsia-background { background-color: #fa00fa; }
-
-.gray { color: #606060; }
-
-.gray-background { background-color: #7d7d7d; }
-
-.green { color: #006000; }
-
-.green-background { background-color: #007d00; }
-
-.lime { color: #00bf00; }
-
-.lime-background { background-color: #00fa00; }
-
-.maroon { color: #600000; }
-
-.maroon-background { background-color: #7d0000; }
-
-.navy { color: #000060; }
-
-.navy-background { background-color: #00007d; }
-
-.olive { color: #606000; }
-
-.olive-background { background-color: #7d7d00; }
-
-.purple { color: #600060; }
-
-.purple-background { background-color: #7d007d; }
-
-.red { color: #bf0000; }
-
-.red-background { background-color: #fa0000; }
-
-.silver { color: #909090; }
-
-.silver-background { background-color: #bcbcbc; }
-
-.teal { color: #006060; }
-
-.teal-background { background-color: #007d7d; }
-
-.white { color: #bfbfbf; }
-
-.white-background { background-color: #fafafa; }
-
-.yellow { color: #bfbf00; }
-
-.yellow-background { background-color: #fafa00; }
-
-span.icon > .fa { cursor: default; }
-a span.icon > .fa { cursor: inherit; }
-
-.admonitionblock td.icon [class^="fa icon-"] { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; }
-.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #29475c; }
-.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; }
-.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; }
-.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; }
-.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; }
-
-.conum[data-value] { display: inline-block; color: #fff !important; background-color: black; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; font-size: 0.75em; width: 1.67em; height: 1.67em; line-height: 1.67em; font-family: "Open Sans", "DejaVu Sans", sans-serif; font-style: normal; font-weight: bold; }
-.conum[data-value] * { color: #fff !important; }
-.conum[data-value] + b { display: none; }
-.conum[data-value]:after { content: attr(data-value); }
-pre .conum[data-value] { position: relative; top: -0.125em; }
-
-b.conum * { color: inherit !important; }
-
-.conum:not([data-value]):empty { display: none; }
-
-h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { border-bottom: 1px solid #ddd; }
-
-.sect1 { padding-bottom: 0; }
-
-#toctitle { color: #00406F; font-weight: normal; margin-top: 1.5em; }
-
-.sidebarblock { border-color: #aaa; }
-
-code { -webkit-border-radius: 4px; border-radius: 4px; }
-
-p.tableblock.header { color: #6d6e71; }
-
-.literalblock pre, .listingblock pre { background: #eee; }
-
-/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/901 */
-a code { color: inherit; }
-
-/* From https://github.com/KhronosGroup/Vulkan-Docs/pull/1157 */
-/* Make VUID anchor handles*/
-li > p > a[id^="VUID-"] { visibility: hidden; position: absolute; z-index: 1001; width: 2.2ex; margin-left: -2.2ex; display: block; text-decoration: none !important; text-align: center; font-weight: normal; }
-
-li > p > a[id^="VUID-"]:before { content: "\00A7"; font-size: 1em; display: block; padding-top: 0em; background: #fff; }
-
-li > p:hover > a[id^="VUID-"], li > p > a[id^="VUID-"]:hover { visibility: visible; }
-
-li > p > a[id^="VUID-"].link { color: black; text-decoration: none; }
-
-/* TODO: not quite sure what these two do */
-li > p > a[id^="VUID-"].link:hover { color: black; }
-
-.vuid { color: #4d4d4d; font-family: monospace; }
-
-</style>
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
-<style>
-pre.rouge table td { padding: 5px; }
-pre.rouge table pre { margin: 0; }
-pre.rouge .kp {
- color: #445588;
- font-weight: bold;
- font-style: italic;
-}
-pre.rouge .fm {
- color: #00c5cd;
- font-weight: bold;
-}
-pre.rouge .nx {
- color: #ff4500;
- font-weight: bold;
-}
-pre.rouge .vm {
- color: #ffa500;
- font-weight: bold;
-}
-pre.rouge .cm {
- color: #555544;
- font-style: italic;
-}
-pre.rouge .cp {
- color: #555555;
- font-weight: bold;
-}
-pre.rouge .c1 {
- color: #555544;
- font-style: italic;
-}
-pre.rouge .cs {
- color: #555555;
- font-weight: bold;
- font-style: italic;
-}
-pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cpf {
- color: #555544;
- font-style: italic;
-}
-pre.rouge, pre.rouge .w {
- color: #24292f;
- background-color: #f6f8fa;
-}
-pre.rouge .k, pre.rouge .kd, pre.rouge .kn, pre.rouge .kr, pre.rouge .kt, pre.rouge .kv {
- color: #cf222e;
-}
-pre.rouge .gr {
- color: #f6f8fa;
-}
-pre.rouge .gd {
- color: #82071e;
- background-color: #ffebe9;
-}
-pre.rouge .nb {
- color: #953800;
-}
-pre.rouge .nc {
- color: #953800;
-}
-pre.rouge .no {
- color: #953800;
-}
-pre.rouge .nn {
- color: #953800;
-}
-pre.rouge .sr {
- color: #116329;
-}
-pre.rouge .na {
- color: #116329;
-}
-pre.rouge .nt {
- color: #116329;
-}
-pre.rouge .gi {
- color: #116329;
- background-color: #dafbe1;
-}
-pre.rouge .ges {
- font-weight: bold;
- font-style: italic;
-}
-pre.rouge .kc {
- color: #0550ae;
-}
-pre.rouge .l, pre.rouge .ld, pre.rouge .m, pre.rouge .mb, pre.rouge .mf, pre.rouge .mh, pre.rouge .mi, pre.rouge .il, pre.rouge .mo, pre.rouge .mx {
- color: #0550ae;
-}
-pre.rouge .sb {
- color: #0550ae;
-}
-pre.rouge .bp {
- color: #0550ae;
-}
-pre.rouge .ne {
- color: #0550ae;
-}
-pre.rouge .nl {
- color: #0550ae;
-}
-pre.rouge .py {
- color: #0550ae;
-}
-pre.rouge .nv, pre.rouge .vc, pre.rouge .vg, pre.rouge .vi {
- color: #0550ae;
-}
-pre.rouge .o, pre.rouge .ow {
- color: #0550ae;
-}
-pre.rouge .gh {
- color: #0550ae;
- font-weight: bold;
-}
-pre.rouge .gu {
- color: #0550ae;
- font-weight: bold;
-}
-pre.rouge .s, pre.rouge .sa, pre.rouge .sc, pre.rouge .dl, pre.rouge .sd, pre.rouge .s2, pre.rouge .se, pre.rouge .sh, pre.rouge .sx, pre.rouge .s1, pre.rouge .ss {
- color: #0a3069;
-}
-pre.rouge .nd {
- color: #8250df;
-}
-pre.rouge .nf {
- color: #8250df;
-}
-pre.rouge .err {
- color: #f6f8fa;
- background-color: #82071e;
-}
-pre.rouge .gl {
- color: #6e7781;
-}
-pre.rouge .gt {
- color: #6e7781;
-}
-pre.rouge .ni {
- color: #24292f;
-}
-pre.rouge .si {
- color: #24292f;
-}
-pre.rouge .ge {
- color: #24292f;
- font-style: italic;
-}
-pre.rouge .gs {
- color: #24292f;
- font-weight: bold;
-}
-</style>
-<link rel="stylesheet" href="../katex/katex.min.css">
-<script src="../katex/katex.min.js"></script>
-<script src="../katex/contrib/auto-render.min.js"></script>
- <!-- Use KaTeX to render math once document is loaded, see
- https://github.com/Khan/KaTeX/tree/master/contrib/auto-render -->
-<script>
- document.addEventListener("DOMContentLoaded", function () {
- renderMathInElement(
- document.body,
- {
- delimiters: [
- { left: "$$", right: "$$", display: true},
- { left: "\\[", right: "\\]", display: true},
- { left: "$", right: "$", display: false},
- { left: "\\(", right: "\\)", display: false}
- ]
- }
- );
- });
-</script></head>
-<body class="book toc2 toc-left">
-<div style="text-align: left;">
- <span class="image"><img src="data:image/png;base64,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" alt="OpenCL Logo" width="550" height="250">
- </span>
-</div>
-<div id="header" style="max-width: 100%;">
-<h1>The OpenCL<sup>™</sup> Extension Specification</h1>
-<div class="details">
-<span id="author" class="author">Khronos<sup>®</sup> OpenCL Working Group</span><br>
-<span id="revnumber">version v3.0.19,</span>
-<span id="revdate">Thu, 10 Jul 2025 11:00:00 +0000</span>
-<br><span id="revremark">from git branch: main commit: 85da0d12c298ffa9eefd2adb1864f2c8193cbe3e</span>
-</div>
-<div id="toc" class="toc2">
-<div id="toctitle">Table of Contents</div>
-<ul class="sectlevel1">
-<li><a href="#extensions-overview">1. Extensions Overview</a></li>
-<li><a href="#_extensions_promoted_to_core_features">Appendix A: Extensions Promoted to Core Features</a></li>
-<li><a href="#_deprecated_extensions">Appendix B: Deprecated Extensions</a></li>
-<li><a href="#quick-reference">Appendix C: Quick Reference</a></li>
-</ul>
-</div>
-</div>
-<div id="content" style="max-width: 100%;">
-<div id="preamble">
-<div class="sectionbody">
-<div style="page-break-after: always;"></div>
-<div class="paragraph">
-<p>Copyright 2008-2025 The Khronos Group Inc.</p>
-</div>
-<div class="paragraph">
-<p>This Specification is protected by copyright laws and contains material proprietary to Khronos.
-Except as described by these terms, it or any components may not be reproduced, republished,
-distributed, transmitted, displayed, broadcast or otherwise exploited in any manner without the
-express prior written permission of Khronos.</p>
-</div>
-<div class="paragraph">
-<p>This Specification has been created under the Khronos Intellectual Property Rights
-Policy, which is Attachment A of the Khronos Group Membership Agreement available at
-www.khronos.org/files/member_agreement.pdf and defines the terms 'Scope', 'Compliant Portion',
-and 'Necessary Patent Claims'.</p>
-</div>
-<div class="paragraph">
-<p>Khronos grants a conditional copyright license to use and reproduce the
-unmodified Specification for any purpose, without fee or royalty, EXCEPT no licenses
-to any patent, trademark or other intellectual property rights are granted under these
-terms. Parties desiring to implement the Specification and make use of Khronos trademarks
-in relation to that implementation, and receive reciprocal patent license protection under
-the Khronos Intellectual Property Rights Policy must become Adopters and confirm the
-implementation as conformant under the process defined by Khronos for this Specification;
-see <a href="https://www.khronos.org/adopters" class="bare">https://www.khronos.org/adopters</a>.</p>
-</div>
-<div class="paragraph">
-<p>Khronos makes no, and expressly disclaims any, representations or warranties,
-express or implied, regarding this Specification, including, without limitation:
-merchantability, fitness for a particular purpose, non-infringement of any
-intellectual property, correctness, accuracy, completeness, timeliness, and
-reliability. Under no circumstances will Khronos, or any of its Promoters,
-Contributors or Members, or their respective partners, officers, directors,
-employees, agents or representatives be liable for any damages, whether direct,
-indirect, special or consequential damages for lost revenues, lost profits, or
-otherwise, arising from or in connection with these materials.</p>
-</div>
-<div class="paragraph">
-<p>Where this Specification identifies specific sections of external references, only those
-specifically identified sections define normative functionality. The Khronos Intellectual
-Property Rights Policy excludes external references to materials and associated enabling
-technology not created by Khronos from the Scope of this specification, and any licenses
-that may be required to implement such referenced materials and associated technologies
-must be obtained separately and may involve royalty payments.</p>
-</div>
-<div class="paragraph">
-<p>Khronos® and Vulkan® are registered trademarks, and SPIR™, SPIR-V™, and SYCL™ are trademarks
-of The Khronos Group Inc. OpenCL™ is a trademark of Apple Inc. used under license by Khronos.
-OpenGL® is a registered trademark and the OpenGL ES™ and OpenGL SC™ logos
-are trademarks of Hewlett Packard Enterprise used under license by Khronos.
-All other product names, trademarks, and/or company names are used solely for identification
-and belong to their respective owners.</p>
-</div>
-<div style="page-break-after: always;"></div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="extensions-overview"><a class="anchor" href="#extensions-overview"></a>1. Extensions Overview</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p><em>Extensions</em> are optional features which may be supported by OpenCL
-implementations.
-Extensions are not required to be supported by a conformant OpenCL
-implementation, but are expected to be widely available, and in some cases
-may define functionality that is likely to be required in a future revision
-of the OpenCL specification.</p>
-</div>
-<div class="paragraph">
-<p>In the past, this document contained full specification language for
-Khronos-approved <code>khr</code> extensions, described in terms of changes to the core
-OpenCL Specification.
-This extension language has now been integrated into the OpenCL 3.0
-Specification, and can be read in context there.</p>
-</div>
-<div class="paragraph">
-<p>The remaining parts of this document describe general issues in <em>using</em>
-extensions, such as API <a href="#naming-convention-for-optional-extensions">Naming
-Conventions for Optional Extensions</a>; OpenCL C
-<a href="#compiler-directives-for-optional-extensions">Compiler Directives for
-Optional Extensions</a>; and <a href="#getting-opencl-api-extension-function-pointers">Getting OpenCL API Extension Function Pointers</a>.</p>
-</div>
-<div class="paragraph">
-<p>In addition, there is a section on <a href="#spirv_extensions">Extensions to the
-OpenCL SPIR-V Environment</a>.</p>
-</div>
-<div class="paragraph">
-<p>Finally, the <a href="#quick-reference">Quick Reference</a> appendix summarizes khr
-extensions and links to them in the OpenCL API Specification.
-In some cases, extensions are mostly or entirely to the OpenCL C language
-rather than to the OpenCL API.
-Such extensions can be reached by following the links in the API
-Specification extension appendices.</p>
-</div>
-<div class="sect2">
-<h3 id="naming-convention-for-optional-extensions"><a class="anchor" href="#naming-convention-for-optional-extensions"></a>1.1. Naming Convention for Optional Extensions</h3>
-<div class="paragraph">
-<p>OpenCL extensions approved by the OpenCL working group use the following
-naming convention:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>A unique <em>name string</em> of the form <code>"<strong>cl_khr_<<em>name</em>></strong>"</code> is associated
-with each extension.
-If the extension is supported by an implementation, this string will be
-present in the implementation’s <code>CL_PLATFORM_<wbr>EXTENSIONS</code> string or
-<code>CL_DEVICE_<wbr>EXTENSIONS</code> string.</p>
-</li>
-<li>
-<p>All API functions defined by the extension will have names of the form
-<strong>cl<<em>function_name</em>>KHR</strong>.</p>
-</li>
-<li>
-<p>All enumerants defined by the extension will have names of the form
-<strong>CL_<<em>enum_name</em>>_KHR.</strong></p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>Functions and enumerants defined by extensions that are promoted to
-core features will have their <strong>KHR</strong> affix removed.
-OpenCL implementations of such later revisions must also export the name
-strings of promoted extensions in the <code>CL_PLATFORM_<wbr>EXTENSIONS</code> or
-<code>CL_DEVICE_<wbr>EXTENSIONS</code> string, and support the <strong>KHR</strong>-affixed versions of
-functions and enumerants as a transition aid.</p>
-</div>
-<div class="paragraph">
-<p>Vendor extensions are strongly encouraged to follow a similar naming
-convention:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>A unique <em>name string</em> of the form <code>"<strong>cl_<<em>vendor_name</em>>_<<em>name></em></strong>"</code>
-is associated with each extension.
-If the extension is supported by an implementation, this string will be
-present in the implementation’s <code>CL_PLATFORM_<wbr>EXTENSIONS</code> string or
-<code>CL_DEVICE_<wbr>EXTENSIONS</code> string.</p>
-</li>
-<li>
-<p>All API functions defined by the vendor extension will have names of the
-form <strong>cl<<em>function_name</em>><<em>vendor_name</em>></strong>.</p>
-</li>
-<li>
-<p>All enumerants defined by the vendor extension will have names of the
-form <strong>CL_<<em>enum_name</em>>_<<em>vendor_name</em>>.</strong></p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect2">
-<h3 id="compiler-directives-for-optional-extensions"><a class="anchor" href="#compiler-directives-for-optional-extensions"></a>1.2. Compiler Directives for Optional Extensions</h3>
-<div class="paragraph">
-<p>The <strong>#pragma OPENCL EXTENSION</strong> directive controls the behavior of the OpenCL
-compiler with respect to extensions.
-The <strong>#pragma OPENCL EXTENSION</strong> directive is defined as:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl_c"><span class="cp">#pragma OPENCL EXTENSION <extension_name> : <behavior>
-#pragma OPENCL EXTENSION all : <behavior></span></code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>where <em>extension_name</em> is the name of the extension.
-The <em>extension_name</em> will have names of the form <strong>cl_khr_<<em>name</em>></strong> for an
-extension approved by the OpenCL working group and will have names of the
-form <strong>cl_<<em>vendor_name</em>>_<<em>name</em>></strong> for vendor extensions.
-The token <strong>all</strong> means that the behavior applies to all extensions supported
-by the compiler.
-The <em>behavior</em> can be set to one of the following values given by the table
-below.</p>
-</div>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 25%;">
-<col style="width: 75%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-top"><strong>behavior</strong></th>
-<th class="tableblock halign-left valign-top"><strong>Description</strong></th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>enable</strong></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Behave as specified by the extension <em>extension_name</em>.</p>
-<p class="tableblock"> Report an error on the <strong><code>#pragma OPENCL EXTENSION</code></strong> if the
- <em>extension_name</em> is not supported, or if <strong>all</strong> is specified.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>disable</strong></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Behave (including issuing errors and warnings) as if the extension
- <em>extension_name</em> is not part of the language definition.</p>
-<p class="tableblock"> If <strong>all</strong> is specified, then behavior must revert back to that of the
- non-extended core version of the language being compiled to.</p>
-<p class="tableblock"> Warn on the <strong><code>#pragma OPENCL EXTENSION</code></strong> if the extension <em>extension_name</em>
- is not supported.</p></td>
-</tr>
-</tbody>
-</table>
-<div class="paragraph">
-<p>The <strong><code>#pragma OPENCL EXTENSION</code></strong> directive is a simple, low-level mechanism
-to set the behavior for each extension.
-It does not define policies such as which combinations are appropriate;
-those must be defined elsewhere.
-The order of directives matter in setting the behavior for each extension.
-Directives that occur later override those seen earlier.
-The <strong>all</strong> variant sets the behavior for all extensions, overriding all
-previously issued extension directives, but only if the <em>behavior</em> is set to
-<strong>disable</strong>.</p>
-</div>
-<div class="paragraph">
-<p>The initial state of the compiler is as if the directive</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl_c"><span class="cp">#pragma OPENCL EXTENSION all : disable</span></code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>was issued, telling the compiler that all error and warning reporting must
-be done according to this specification, ignoring any extensions.</p>
-</div>
-<div class="paragraph">
-<p>Every extension which affects the OpenCL language semantics, syntax or adds
-built-in functions to the language must create a preprocessor <code>#define</code> that
-matches the extension name string.
-This <code>#define</code> would be available in the language if and only if the
-extension is supported on a given implementation.</p>
-</div>
-<div class="paragraph">
-<p><strong>Example</strong>:</p>
-</div>
-<div class="paragraph">
-<p>An extension which adds the extension string <code>"cl_khr_3d_image_writes"</code>
-should also add a preprocessor <code>#define</code> called <strong>cl_khr_3d_image_writes</strong>.
-A kernel can now use this preprocessor <code>#define</code> to do something like:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl_c"><span class="cp">#ifdef cl_khr_3d_image_writes
-</span> <span class="c1">// do something using the extension</span>
-<span class="cp">#else
-</span> <span class="c1">// do something else or #error!</span>
-<span class="cp">#endif</span></code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="getting-opencl-api-extension-function-pointers"><a class="anchor" href="#getting-opencl-api-extension-function-pointers"></a>1.3. Getting OpenCL API Extension Function Pointers</h3>
-<div class="paragraph">
-<p>The function
-</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl"><span class="kt">void</span><span class="o">*</span> <span class="n">clGetExtensionFunctionAddressForPlatform</span><span class="p">(</span><span class="kt">cl_platform_id</span> <span class="n">platform</span><span class="p">,</span>
- <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">funcname</span><span class="p">)</span></code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>returns the address of the extension function named by <em>funcname</em> for a
-given <em>platform</em> The pointer returned should be cast to a function pointer
-type matching the extension function’s definition defined in the appropriate
-extension specification and header file.
-A return value of <code>NULL</code> indicates that the specified function does not
-exist for the implementation or <em>platform</em> is not a valid platform.
-A non-<code>NULL</code> return value for <strong>clGetExtensionFunctionAddressForPlatform</strong>
-does not guarantee that an extension function is actually supported by the
-platform.
-The application must also make a corresponding query using
-<strong>clGetPlatformInfo</strong>(platform, CL_PLATFORM_EXTENSIONS, …​) or
-<strong>clGetDeviceInfo</strong>(device, CL_DEVICE_EXTENSIONS, …​) to determine if an
-extension is supported by the OpenCL implementation.</p>
-</div>
-<div class="paragraph">
-<p>Since there is no way to qualify the query with a
-device, the function pointer returned must work for all implementations of
-that extension on different devices for a platform.
-The behavior of calling a device extension function on a device not
-supporting that extension is undefined.</p>
-</div>
-<div class="paragraph">
-<p><strong>clGetExtensionFunctionAddressForPlatform</strong> may not be used to query for core
-(non-extension) functions in OpenCL.
-For extension functions that may be queried using
-<strong>clGetExtensionFunctionAddressForPlatform</strong>, implementations may also choose to
-export those functions statically from the object libraries
-implementing those functions, however, portable applications cannot rely on
-this behavior.</p>
-</div>
-<div class="paragraph">
-<p>Function pointer typedefs must be declared for all extensions that add API
-entrypoints.
-These typedefs are a required part of the extension interface, to be
-provided in an appropriate header (such as cl_ext.h if the extension is an
-OpenCL extension, or cl_gl_ext.h if the extension is an OpenCL / OpenGL
-sharing extension).</p>
-</div>
-<div class="paragraph">
-<p>The following convention must be followed for all extensions affecting the
-host API:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl"><span class="cp">#ifndef extension_name
-#define extension_name 1
-</span>
-<span class="c1">// all data typedefs, token #defines, prototypes, and</span>
-<span class="c1">// function pointer typedefs for this extension</span>
-
-<span class="c1">// function pointer typedefs must use the</span>
-<span class="c1">// following naming convention</span>
-
-<span class="k">typedef</span> <span class="nf">return_type</span>
- <span class="p">(</span><span class="n">CL_API_CALL</span> <span class="o">*</span><span class="n">clExtensionFunctionNameTAG_fn</span><span class="p">)(...);</span>
-
-<span class="cp">#endif // _extension_name_</span></code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>where <code>TAG</code> can be <code>KHR</code>, <code>EXT</code> or <code>vendor-specific</code>.</p>
-</div>
-<div class="paragraph">
-<p>Consider, for example, the <code>cl_khr_<wbr>gl_<wbr>sharing</code> extension.
-This extension would add the following to cl_gl_ext.h:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="rouge highlight"><code data-lang="opencl"><span class="cp">#ifndef cl_khr_gl_sharing
-#define cl_khr_gl_sharing 1
-</span>
-<span class="c1">// all data typedefs, token #defines, prototypes, and</span>
-<span class="c1">// function pointer typedefs for this extension</span>
-<span class="cp">#define CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR -1000
-#define CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR 0x2006
-#define CL_DEVICES_FOR_GL_CONTEXT_KHR 0x2007
-#define CL_GL_CONTEXT_KHR 0x2008
-#define CL_EGL_DISPLAY_KHR 0x2009
-#define CL_GLX_DISPLAY_KHR 0x200A
-#define CL_WGL_HDC_KHR 0x200B
-#define CL_CGL_SHAREGROUP_KHR 0x200C
-</span>
-<span class="c1">// function pointer typedefs must use the</span>
-<span class="c1">// following naming convention</span>
-<span class="k">typedef</span> <span class="nf">cl_int</span>
- <span class="p">(</span><span class="n">CL_API_CALL</span> <span class="o">*</span><span class="n">clGetGLContextInfoKHR_fn</span><span class="p">)(</span>
- <span class="k">const</span> <span class="kt">cl_context_properties</span> <span class="o">*</span> <span class="cm">/* properties */</span><span class="p">,</span>
- <span class="kt">cl_gl_context_info</span> <span class="cm">/* param_name */</span><span class="p">,</span>
- <span class="kt">size_t</span> <span class="cm">/* param_value_size */</span><span class="p">,</span>
- <span class="kt">void</span> <span class="o">*</span> <span class="cm">/* param_value */</span><span class="p">,</span>
- <span class="kt">size_t</span> <span class="o">*</span> <span class="cm">/*param_value_size_ret*/</span><span class="p">);</span>
-
-<span class="cp">#endif // cl_khr_gl_sharing</span></code></pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_extensions_promoted_to_core_features"><a class="anchor" href="#_extensions_promoted_to_core_features"></a>Appendix A: Extensions Promoted to Core Features</h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="_for_opencl_1_1"><a class="anchor" href="#_for_opencl_1_1"></a>A.1. For OpenCL 1.1:</h3>
-<div class="ulist">
-<ul>
-<li>
-<p>The functionality previously described by <code>cl_khr_<wbr>byte_<wbr>addressable_<wbr>store</code> is now part of the core feature set.</p>
-</li>
-<li>
-<p>The functionality previously described by <code>cl_khr_<wbr>global_<wbr>int32_<wbr>base_<wbr>atomics</code>, <code>cl_khr_<wbr>global_<wbr>int32_<wbr>extended_<wbr>atomics</code>, <code>cl_khr_<wbr>local_<wbr>int32_<wbr>base_<wbr>atomics</code>, and <code>cl_khr_<wbr>local_<wbr>int32_<wbr>extended_<wbr>atomics</code> is now part of the core feature set.</p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_for_opencl_1_2"><a class="anchor" href="#_for_opencl_1_2"></a>A.2. For OpenCL 1.2:</h3>
-<div class="ulist">
-<ul>
-<li>
-<p>The functionality previously described by <code>cl_khr_<wbr>fp64</code> is now an optional core feature.</p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_for_opencl_2_0"><a class="anchor" href="#_for_opencl_2_0"></a>A.3. For OpenCL 2.0:</h3>
-<div class="ulist">
-<ul>
-<li>
-<p>The functionality described by <code>cl_khr_<wbr>3d_<wbr>image_<wbr>writes</code> is part of the core feature set.</p>
-</li>
-<li>
-<p>The functionality described by <code>cl_khr_<wbr>create_<wbr>command_<wbr>queue</code> is part of the core feature set.</p>
-</li>
-<li>
-<p>The functionality described by <code>cl_khr_<wbr>depth_<wbr>images</code> is now part of the core feature set.</p>
-</li>
-<li>
-<p>The functionality described by <code>cl_khr_<wbr>image2d_<wbr>from_<wbr>buffer</code> is now part of the core feature set.</p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_for_opencl_2_1"><a class="anchor" href="#_for_opencl_2_1"></a>A.4. For OpenCL 2.1:</h3>
-<div class="ulist">
-<ul>
-<li>
-<p>The functionality described by <code>cl_khr_<wbr>il_<wbr>program</code> is now part of the core feature set.</p>
-</li>
-<li>
-<p>The API functionality described by <code>cl_khr_<wbr>subgroups</code> is now part of the core API feature set, but the built-in functions described by <code>cl_khr_<wbr>subgroups</code> must still be accessed as an extension to the OpenCL 2.0 C Language specification.</p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_for_opencl_3_0"><a class="anchor" href="#_for_opencl_3_0"></a>A.5. For OpenCL 3.0:</h3>
-<div class="ulist">
-<ul>
-<li>
-<p>The API functionality described by <code>cl_khr_<wbr>extended_<wbr>versioning</code> is now part of the core API feature set, with minor modifications.</p>
-</li>
-<li>
-<p>The built-in functions described by <code>cl_khr_<wbr>subgroups</code> are now supported in OpenCL C 3.0 when the {opencl_c_subgroups} feature is supported.</p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_deprecated_extensions"><a class="anchor" href="#_deprecated_extensions"></a>Appendix B: Deprecated Extensions</h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="_for_opencl_1_1_2"><a class="anchor" href="#_for_opencl_1_1_2"></a>B.1. For OpenCL 1.1:</h3>
-<div class="ulist">
-<ul>
-<li>
-<p>The <code>cl_khr_<wbr>select_<wbr>fprounding_<wbr>mode</code> extension has been deprecated.
-Its use is no longer recommended.</p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="quick-reference"><a class="anchor" href="#quick-reference"></a>Appendix C: Quick Reference</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>Each extension in this table includes a link to the corresponding appendix
-in the OpenCL 3.0 API Specification, which provides a fuller description and
-references to the actual extension specification language in the API and C
-Language Specifications.</p>
-</div>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 45.4545%;">
-<col style="width: 36.3636%;">
-<col style="width: 18.1819%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-top">Extension Name and Link</th>
-<th class="tableblock halign-left valign-top">Brief Description</th>
-<th class="tableblock halign-left valign-top">Status</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_3d_image_writes"></a> <a href="OpenCL_API.html#cl_khr_3d_image_writes"><code>cl_khr_<wbr>3d_<wbr>image_<wbr>writes</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Write to 3D images</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 2.0</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_async_work_group_copy_fence"></a> <a href="OpenCL_API.html#cl_khr_async_work_group_copy_fence"><code>cl_khr_<wbr>async_<wbr>work_<wbr>group_<wbr>copy_<wbr>fence</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Asynchronous Copy Fences</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_byte_addressable_store"></a> <a href="OpenCL_API.html#cl_khr_byte_addressable_store"><code>cl_khr_<wbr>byte_<wbr>addressable_<wbr>store</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Read and write from 8-bit and 16-bit pointers</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 1.1</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_command_buffer"></a> <a href="OpenCL_API.html#cl_khr_command_buffer"><code>cl_khr_<wbr>command_<wbr>buffer</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Record and Replay Commands</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Experimental Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_command_buffer_multi_device"></a> <a href="OpenCL_API.html#cl_khr_command_buffer_multi_device"><code>cl_khr_<wbr>command_<wbr>buffer_<wbr>multi_<wbr>device</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Allow a command-buffer to contain commands targeting different devices</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Experimental Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_command_buffer_mutable_dispatch"></a> <a href="OpenCL_API.html#cl_khr_command_buffer_mutable_dispatch"><code>cl_khr_<wbr>command_<wbr>buffer_<wbr>mutable_<wbr>dispatch</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Modify kernel execution commands between enqueues of a command-buffer</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Experimental Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_create_command_queue"></a> <a href="OpenCL_API.html#cl_khr_create_command_queue"><code>cl_khr_<wbr>create_<wbr>command_<wbr>queue</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">API to Create Command-Queues with Properties</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 2.0</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_d3d10_sharing"></a> <a href="OpenCL_API.html#cl_khr_d3d10_sharing"><code>cl_khr_<wbr>d3d10_<wbr>sharing</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Share Direct3D 10 Buffers and Textures with OpenCL</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_d3d11_sharing"></a> <a href="OpenCL_API.html#cl_khr_d3d11_sharing"><code>cl_khr_<wbr>d3d11_<wbr>sharing</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Share Direct3D 11 Buffers and Textures with OpenCL</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_depth_images"></a> <a href="OpenCL_API.html#cl_khr_depth_images"><code>cl_khr_<wbr>depth_<wbr>images</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Single Channel Depth Images</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 2.0</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_device_enqueue_local_arg_types"></a> <a href="OpenCL_API.html#cl_khr_device_enqueue_local_arg_types"><code>cl_khr_<wbr>device_<wbr>enqueue_<wbr>local_<wbr>arg_<wbr>types</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Pass Non-Void Local Pointers to Child Kernels</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_device_uuid"></a> <a href="OpenCL_API.html#cl_khr_device_uuid"><code>cl_khr_<wbr>device_<wbr>uuid</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Unique Device and Driver Identifier Queries</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_dx9_media_sharing"></a> <a href="OpenCL_API.html#cl_khr_dx9_media_sharing"><code>cl_khr_<wbr>dx9_<wbr>media_<wbr>sharing</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Share DirectX 9 Media Surfaces with OpenCL</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_egl_event"></a> <a href="OpenCL_API.html#cl_khr_egl_event"><code>cl_khr_<wbr>egl_<wbr>event</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Share EGL Sync Objects with OpenCL</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_egl_image"></a> <a href="OpenCL_API.html#cl_khr_egl_image"><code>cl_khr_<wbr>egl_<wbr>image</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Share EGL Images with OpenCL</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_extended_async_copies"></a> <a href="OpenCL_API.html#cl_khr_extended_async_copies"><code>cl_khr_<wbr>extended_<wbr>async_<wbr>copies</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">2D and 3D Async Copies</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_extended_bit_ops"></a> <a href="OpenCL_API.html#cl_khr_extended_bit_ops"><code>cl_khr_<wbr>extended_<wbr>bit_<wbr>ops</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Bit Insert, Extract, and Reverse Operations</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_extended_versioning"></a> <a href="OpenCL_API.html#cl_khr_extended_versioning"><code>cl_khr_<wbr>extended_<wbr>versioning</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extend versioning of platform, devices, extensions, etc.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 3.0 (with minor changes)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_memory"></a> <a href="OpenCL_API.html#cl_khr_external_memory"><code>cl_khr_<wbr>external_<wbr>memory</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Common Functionality for External Memory Sharing</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_memory_dma_buf"></a> <a href="OpenCL_API.html#cl_khr_external_memory"><code>cl_khr_<wbr>external_<wbr>memory_<wbr>dma_<wbr>buf</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">dma_buf External Memory Handles</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_memory_opaque_fd"></a> <a href="OpenCL_API.html#cl_khr_external_memory"><code>cl_khr_<wbr>external_<wbr>memory_<wbr>opaque_<wbr>fd</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Opaque File Descriptor External Memory Handles</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_memory_win32"></a> <a href="OpenCL_API.html#cl_khr_external_memory"><code>cl_khr_<wbr>external_<wbr>memory_<wbr>win32</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">NT Handle External Memory Handles</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_expect_assume"></a> <a href="OpenCL_API.html#cl_khr_expect_assume"><code>cl_khr_<wbr>expect_<wbr>assume</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Kernel Optimization Hints</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_semaphore"></a> <a href="OpenCL_API.html#cl_khr_external_semaphore"><code>cl_khr_<wbr>external_<wbr>semaphore</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Common Functionality for External Semaphore Sharing</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_semaphore_dx_fence"></a> <a href="OpenCL_API.html#cl_khr_external_semaphore"><code>cl_khr_<wbr>external_<wbr>semaphore_<wbr>dx_<wbr>fence</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Direct3D 12 External Semaphore Handles</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Experimental Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_semaphore_opaque_fd"></a> <a href="OpenCL_API.html#cl_khr_external_semaphore"><code>cl_khr_<wbr>external_<wbr>semaphore_<wbr>opaque_<wbr>fd</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Opaque File Descriptor External Semaphore Handles</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_semaphore_sync_fd"></a> <a href="OpenCL_API.html#cl_khr_external_semaphore"><code>cl_khr_<wbr>external_<wbr>semaphore_<wbr>sync_<wbr>fd</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Sync FD External Semaphore Handles</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_memory_android_hardware_buffer"></a> <a href="OpenCL_API.html#cl_khr_external_memory_android_hardware_buffer"><code>cl_khr_<wbr>external_<wbr>memory_<wbr>android_<wbr>hardware_<wbr>buffer</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Android Hardware Buffer External Memory Handle</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_semaphore_win32"></a> <a href="OpenCL_API.html#cl_khr_external_semaphore"><code>cl_khr_<wbr>external_<wbr>semaphore_<wbr>win32</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">NT Handle External Semaphore Handles</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Experimental Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_fp16"></a> <a href="OpenCL_API.html#cl_khr_fp16"><code>cl_khr_<wbr>fp16</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Operations on 16-bit Floating-Point Values</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_fp64"></a> <a href="OpenCL_API.html#cl_khr_fp64"><code>cl_khr_<wbr>fp64</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Operations on 64-bit Floating-Point Values</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Optional Core Feature in OpenCL 1.2</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_gl_depth_images"></a> <a href="OpenCL_API.html#cl_khr_gl_depth_images"><code>cl_khr_<wbr>gl_<wbr>depth_<wbr>images</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Share OpenGL Depth Images with OpenCL</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_gl_event"></a> <a href="OpenCL_API.html#cl_khr_gl_event"><code>cl_khr_<wbr>gl_<wbr>event</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Share OpenGL Fence Sync Objects with OpenCL</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_gl_msaa_sharing"></a> <a href="OpenCL_API.html#cl_khr_gl_msaa_sharing"><code>cl_khr_<wbr>gl_<wbr>msaa_<wbr>sharing</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Share OpenGL MSAA Textures with OpenCL</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_gl_sharing"></a> <a href="OpenCL_API.html#cl_khr_gl_sharing"><code>cl_khr_<wbr>gl_<wbr>sharing</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Sharing OpenGL Buffers and Textures with OpenCL</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_global_int32_base_atomics"></a> <a href="OpenCL_API.html#cl_khr_int32_atomics"><code>cl_khr_<wbr>global_<wbr>int32_<wbr>base_<wbr>atomics</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Basic Atomic Operations on 32-bit Integers in Global Memory</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 1.1</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_global_int32_extended_atomics"></a> <a href="OpenCL_API.html#cl_khr_int32_atomics"><code>cl_khr_<wbr>global_<wbr>int32_<wbr>extended_<wbr>atomics</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extended Atomic Operations on 32-bit Integers in Global Memory</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 1.1</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_icd"></a> <a href="OpenCL_API.html#cl_khr_icd"><code>cl_khr_<wbr>icd</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Installable Client Drivers</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_il_program"></a> <a href="OpenCL_API.html#cl_khr_il_program"><code>cl_khr_<wbr>il_<wbr>program</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Support for Intermediate Language (IL) Programs (SPIR-V)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 2.1</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_image2d_from_buffer"></a> <a href="OpenCL_API.html#cl_khr_image2d_from_buffer"><code>cl_khr_<wbr>image2d_<wbr>from_<wbr>buffer</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Create 2D Images from Buffers</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 2.0</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_initialize_memory"></a> <a href="OpenCL_API.html#cl_khr_initialize_memory"><code>cl_khr_<wbr>initialize_<wbr>memory</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Initialize Local and Private Memory on Allocation</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_int64_base_atomics"></a> <a href="OpenCL_API.html#cl_khr_int64_atomics"><code>cl_khr_<wbr>int64_<wbr>base_<wbr>atomics</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Basic Atomic Operations on 64-bit Integers in Global and Local Memory</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_int64_extended_atomics"></a> <a href="OpenCL_API.html#cl_khr_int64_atomics"><code>cl_khr_<wbr>int64_<wbr>extended_<wbr>atomics</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extended Atomic Operations on 64-bit Integers in Global and Local Memory</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_local_int32_base_atomics"></a> <a href="OpenCL_API.html#cl_khr_int32_atomics"><code>cl_khr_<wbr>local_<wbr>int32_<wbr>base_<wbr>atomics</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Basic Atomic Operations on 32-bit Integers in Local Memory</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 1.1</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_local_int32_extended_atomics"></a> <a href="OpenCL_API.html#cl_khr_int32_atomics"><code>cl_khr_<wbr>local_<wbr>int32_<wbr>extended_<wbr>atomics</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extended Atomic Operations on 32-bit Integers in Local Memory</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 1.1</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_integer_dot_product"></a> <a href="OpenCL_API.html#cl_khr_integer_dot_product"><code>cl_khr_<wbr>integer_<wbr>dot_<wbr>product</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Integer dot product operations</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_kernel_clock"></a> <a href="OpenCL_API.html#cl_khr_kernel_clock"><code>cl_khr_<wbr>kernel_<wbr>clock</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Sample Clock Values Within a Kernel</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_mipmap_image"></a> <a href="OpenCL_API.html#cl_khr_mipmap_image"><code>cl_khr_<wbr>mipmap_<wbr>image</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Create and Use Images with Mipmaps</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_pci_bus_info"></a> <a href="OpenCL_API.html#cl_khr_pci_bus_info"><code>cl_khr_<wbr>pci_<wbr>bus_<wbr>info</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Query PCI Bus Information for an OpenCL Device</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_priority_hints"></a> <a href="OpenCL_API.html#cl_khr_priority_hints"><code>cl_khr_<wbr>priority_<wbr>hints</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Create Command-Queues with Different Priorities</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_select_fprounding_mode"></a> <a href="OpenCL_API.html#cl_khr_select_fprounding_mode"><code>cl_khr_<wbr>select_<wbr>fprounding_<wbr>mode</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Set the Current Kernel Rounding Mode</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">DEPRECATED</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_semaphore"></a> <a href="OpenCL_API.html#cl_khr_semaphore"><code>cl_khr_<wbr>semaphore</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Semaphore Synchronization Primitives</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_spir"></a> <a href="OpenCL_API.html#cl_khr_spir"><code>cl_khr_<wbr>spir</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Standard Portable Intermediate Representation Programs</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension, Superseded by IL Programs / SPIR-V</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_spirv_extended_debug_info"></a> <a href="OpenCL_API.html#cl_khr_spirv_extended_debug_info"><code>cl_khr_<wbr>spirv_<wbr>extended_<wbr>debug_<wbr>info</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Allows Use of the SPIR-V <code>OpenCL.DebugInfo.100</code> Extended Instruction Set</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_spirv_linkonce_odr"></a> <a href="OpenCL_API.html#cl_khr_spirv_linkonce_odr"><code>cl_khr_<wbr>spirv_<wbr>linkonce_<wbr>odr</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Allows Use of the SPIR-V <code>SPV_KHR_linkonce_odr</code> Extension</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_spirv_no_integer_wrap_decoration"></a> <a href="OpenCL_API.html#cl_khr_spirv_no_integer_wrap_decoration"><code>cl_khr_<wbr>spirv_<wbr>no_<wbr>integer_<wbr>wrap_<wbr>decoration</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Allows Use of the SPIR-V <code>SPV_KHR_no_integer_wrap_decoration</code> Extension</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_srgb_image_writes"></a> <a href="OpenCL_API.html#cl_khr_srgb_image_writes"><code>cl_khr_<wbr>srgb_<wbr>image_<wbr>writes</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Write to sRGB Images</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroups"></a> <a href="OpenCL_API.html#cl_khr_subgroups"><code>cl_khr_<wbr>subgroups</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Sub-Groupings of Work Items</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 2.1 (with minor changes)</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_ballot"></a> <a href="OpenCL_API.html#cl_khr_subgroup_ballot"><code>cl_khr_<wbr>subgroup_<wbr>ballot</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Exchange Ballots Among Sub-Groupings of Work Items</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_clustered_reduce"></a> <a href="OpenCL_API.html#cl_khr_subgroup_clustered_reduce"><code>cl_khr_<wbr>subgroup_<wbr>clustered_<wbr>reduce</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Clustered Reductions for Sub-Groupings of Work Items</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_extended_types"></a> <a href="OpenCL_API.html#cl_khr_subgroup_extended_types"><code>cl_khr_<wbr>subgroup_<wbr>extended_<wbr>types</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Additional Type Support for Sub-group Functions</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_named_barrier"></a> <a href="OpenCL_API.html#cl_khr_subgroup_named_barrier"><code>cl_khr_<wbr>subgroup_<wbr>named_<wbr>barrier</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Barriers for Subsets of a Work-group</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_non_uniform_arithmetic"></a> <a href="OpenCL_API.html#cl_khr_subgroup_non_uniform_arithmetic"><code>cl_khr_<wbr>subgroup_<wbr>non_<wbr>uniform_<wbr>arithmetic</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Sub-group Arithmetic Functions in Non-Uniform Control Flow</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_non_uniform_vote"></a> <a href="OpenCL_API.html#cl_khr_subgroup_non_uniform_vote"><code>cl_khr_<wbr>subgroup_<wbr>non_<wbr>uniform_<wbr>vote</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Hold Votes Among Sub-Groupings of Work Items</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_rotate"></a> <a href="OpenCL_API.html#cl_khr_subgroup_rotate"><code>cl_khr_<wbr>subgroup_<wbr>rotate</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Rotation Among Sub-Groupings of Work Items</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_shuffle"></a> <a href="OpenCL_API.html#cl_khr_subgroup_shuffle"><code>cl_khr_<wbr>subgroup_<wbr>shuffle</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">General-Purpose Shuffles Among Sub-Groupings of Work Items</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_shuffle_relative"></a> <a href="OpenCL_API.html#cl_khr_subgroup_shuffle_relative"><code>cl_khr_<wbr>subgroup_<wbr>shuffle_<wbr>relative</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Relative Shuffles Among Sub-Groupings of Work Items</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_suggested_local_work_size"></a> <a href="OpenCL_API.html#cl_khr_suggested_local_work_size"><code>cl_khr_<wbr>suggested_<wbr>local_<wbr>work_<wbr>size</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Query a Suggested Local Work Size</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_terminate_context"></a> <a href="OpenCL_API.html#cl_khr_terminate_context"><code>cl_khr_<wbr>terminate_<wbr>context</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Terminate an OpenCL Context</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_throttle_hints"></a> <a href="OpenCL_API.html#cl_khr_throttle_hints"><code>cl_khr_<wbr>throttle_<wbr>hints</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Create Command-Queues with Different Throttle Policies</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_work_group_uniform_arithmetic"></a> <a href="OpenCL_API.html#cl_khr_work_group_uniform_arithmetic"><code>cl_khr_<wbr>work_<wbr>group_<wbr>uniform_<wbr>arithmetic</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Work-group Uniform Arithmetic</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-</div>
-
-<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-MML-AM_HTMLorMML"></script>
-</body>
-</html>
\ No newline at end of file
diff --git a/specs/unified/pdf/OpenCL_API.pdf b/specs/unified/pdf/OpenCL_API.pdf
index c4d8d02..c85ef43 100644
--- a/specs/unified/pdf/OpenCL_API.pdf
+++ b/specs/unified/pdf/OpenCL_API.pdf
Binary files differ
diff --git a/specs/unified/pdf/OpenCL_C.pdf b/specs/unified/pdf/OpenCL_C.pdf
index 51dd41d..7b4587a 100644
--- a/specs/unified/pdf/OpenCL_C.pdf
+++ b/specs/unified/pdf/OpenCL_C.pdf
Binary files differ
diff --git a/specs/unified/pdf/OpenCL_Env.pdf b/specs/unified/pdf/OpenCL_Env.pdf
index e57257f..8fed30a 100644
--- a/specs/unified/pdf/OpenCL_Env.pdf
+++ b/specs/unified/pdf/OpenCL_Env.pdf
Binary files differ
diff --git a/specs/unified/pdf/OpenCL_Ext.pdf b/specs/unified/pdf/OpenCL_Ext.pdf
deleted file mode 100644
index db4bc08..0000000
--- a/specs/unified/pdf/OpenCL_Ext.pdf
+++ /dev/null
Binary files differ