| // Copyright 2017-2024 The Khronos Group Inc. |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| // Please keep footnotes in alphabetical order! |
| |
| // Note: Follows the suggested syntax from: |
| // https://github.com/asciidoctor/asciidoctor-pdf/issues/1397 |
| |
| :fn-atomic-scope-work-item: pass:n[ \ |
| 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. \ |
| ] |
| |
| :fn-create-context-all-or-subset: pass:n[ \ |
| {clCreateContextfromType} may may create a context for all or a subset of the actual physical devices present in the platform that match _device_type_. \ |
| ] |
| |
| :fn-default-device-queue: pass:n[ \ |
| The application must create a default device queue if any kernels containing calls to `get_default_queue` 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 {clCreateCommandQueueWithProperties} with {CL_QUEUE_PROPERTIES} set to {CL_QUEUE_ON_DEVICE} and {CL_QUEUE_ON_DEVICE_DEFAULT} will return the default device queue that has already been created and increment its reference count by 1. \ |
| ] |
| |
| :fn-depth-image-requirements: pass:n[ \ |
| Support for the {CL_DEPTH} image channel order is required only for 2D images and 2D image arrays. \ |
| ] |
| |
| :fn-duplicate-devices: pass:n[ \ |
| Duplicate devices specified in _devices_ are ignored. \ |
| ] |
| |
| :fn-endianness: pass:n[ \ |
| 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. \ |
| ] |
| |
| :fn-error-precedence: pass:n[ \ |
| The OpenCL specification does not describe the order of precedence for error codes returned by API calls. \ |
| ] |
| |
| :fn-event-status-order: pass:n[ \ |
| The error code values are negative, and event state values are positive. \ |
| The event state values are ordered from the largest value {CL_QUEUED} for the first or initial state to the smallest value ({CL_COMPLETE} or negative integer value) for the last or complete state. \ |
| The value of {CL_COMPLETE} and {CL_SUCCESS} are the same. \ |
| ] |
| |
| :fn-get-device-ids-all-or-subset: pass:n[ \ |
| {clGetDeviceIDs} may return all or a subset of the actual physical devices present in the platform and that match _device_type_. \ |
| ] |
| |
| :fn-image-array-performance: pass:n[ \ |
| Note that reading and writing 2D image arrays from a kernel with `image_array_size` equal to one may perform worse than 2D images. \ |
| ] |
| |
| :fn-image-from-buffer: pass:n[ \ |
| To create a 2D image from a buffer object that share the data store between the image and buffer object. \ |
| ] |
| |
| :fn-image-from-image: pass:n[ \ |
| To create an image object from another image object that share the data store between these image objects. \ |
| ] |
| |
| :fn-image-mem-fence: pass:n[ \ |
| This value for memory_scope can only be used with atomic_work_item_fence with flags set to `CLK_IMAGE_MEM_FENCE`. \ |
| ] |
| |
| :fn-int64-performance: pass:n[ \ |
| Note that the performance of 64-bit integer arithmetic can vary significantly between embedded devices. \ |
| ] |
| |
| :fn-map-count-usage: pass:n[ \ |
| The map count returned should be considered immediately stale. \ |
| It is unsuitable for general use in applications. \ |
| This feature is provided for debugging. \ |
| ] |
| |
| :fn-max-read-image-args: pass:n[ \ |
| A kernel that uses an image argument with the write_only or read_write image qualifier may result in additional read_only images resources being created internally by an implementation. \ |
| The internally created read_only image resources will count against the max supported read image arguments given by {CL_DEVICE_MAX_READ_IMAGE_ARGS}. \ |
| Enqueuing a kernel that requires more images than the implementation can support will result in a {CL_OUT_OF_RESOURCES} error being returned. \ |
| ] |
| |
| :fn-native-rounding-modes: pass:n[ \ |
| 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. \ |
| ] |
| |
| :fn-null-terminated-string: pass:n[ \ |
| A null terminated string is returned by OpenCL query function calls if the return type of the information being queried is a {char_TYPE}[\]. \ |
| ] |
| |
| :fn-out-of-order-device-queue: pass:n[ \ |
| Only out-of-order device queues are supported. \ |
| ] |
| |
| :fn-platform-profile: pass:n[ \ |
| 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. {CL_DEVICE_COMPILER_AVAILABLE} is {CL_TRUE}. \ |
| If the platform profile returned is EMBEDDED_PROFILE, then devices that are only EMBEDDED_PROFILE are supported. \ |
| ] |
| |
| :fn-race-condition: pass:n[ \ |
| There is an inherent race condition in the design of OpenCL that occurs between setting a kernel argument and using the kernel with {clEnqueueNDRangeKernel}. \ |
| 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 {cl_kernel_TYPE} objects among multiple host threads, applications are strongly encouraged to make additional {cl_kernel_TYPE} objects for kernel functions for each host thread. \ |
| ] |
| |
| :fn-readimageh: pass:n[ \ |
| And *read_imageh*, if the `cl_khr_fp16` extension is supported. \ |
| ] |
| |
| :fn-reference-count-usage: pass:n[ \ |
| 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. \ |
| ] |
| |
| :fn-setkernelarg-prefer-unset-on-error: pass:n[ \ |
| Implementations are encouraged to favor this option as it makes it more likely that errors will be managed by applications. \ |
| ] |
| |
| :fn-srgb-image-requirements: pass:n[ \ |
| Support for reading from the {CL_sRGBA} image channel order is optional for 1D image buffers. \ |
| Support for writing to the {CL_sRGBA} image channel order is optional for all image types. \ |
| ] |
| |
| :fn-thread-safe: pass:n[ \ |
| 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. \ |
| ] |
| |
| :fn-unsafe-denorms-are-zero: pass:n[ \ |
| As per the definition of `-cl-denorms-are-zero`, the inclusion of this option with `-cl-unsafe-math-optimizations` means that the implementation may flush denormal numbers to zero but is not required to. \ |
| ] |
| |
| :fn-vendor-id: pass:n[ \ |
| OpenCL adopters must report a valid vendor ID for their implementation. \ |
| If there is no valid PCI vendor ID defined for the physical device, implementations must obtain a Khronos vendor ID. \ |
| This is a unique identifier greater than the largest PCI vendor ID (`0x10000`) and is representable by a {cl_uint_TYPE}. \ |
| Khronos vendor IDs are synchronized across APIs by utilizing Vulkan's vk.xml as the central Khronos vendor ID registry. \ |
| An ID must be reserved here prior to use in OpenCL, regardless of whether a vendor implements Vulkan. \ |
| Only once the ID has been allotted may it be exposed to OpenCL by proposing a merge request against cl.xml, in the `main` branch of the OpenCL-Docs project. \ |
| The merge must define a new enumerant by adding an `<enum>` tag to the {cl_khronos_vendor_id_TYPE} `<enums>` tag, with the `<value>` attribute set as the acquired Khronos vendor ID. \ |
| The `<name>` attribute must identify the vendor/adopter, and be of the form `CL_KHRONOS_VENDOR_ID_<vendor>`. \ |
| ] |