diff --git a/Makefile b/Makefile index 5dcaae6f..d08fcd60 100644 --- a/Makefile +++ b/Makefile @@ -97,6 +97,7 @@ COMMONATTRIBOPTS = -a revdate="$(SPECDATE)" \ -a stem=latexmath \ -a generated=$(GENERATED) \ -a sectnumlevels=5 \ + -a nofooter \ -a refprefix ATTRIBOPTS = -a revnumber="$(SPECREVISION)" \ @@ -513,10 +514,12 @@ $(MANHTMLDIR)/intro.html: $(REFPATH)/intro.txt $(MANCOPYRIGHT) REGISTRY = $(ROOTDIR)/xml APIXML = $(REGISTRY)/cl.xml CFEATURES = c/features.txt +CFUNCTIONS = c/functions.txt GENSCRIPT = $(SCRIPTS)/gencl.py DICTSCRIPT = $(SCRIPTS)/gen_dictionaries.py VERSIONSCRIPT = $(SCRIPTS)/gen_version_notes.py -CFEATSCRIPT = $(SCRIPTS)/gen_c_feature_dictionary.py +CFEATSCRIPT = $(SCRIPTS)/gen_dictionary_from_file.py +CFUNCSCRIPT = $(SCRIPTS)/gen_dictionary_from_file.py GENSCRIPTOPTS = $(VERSIONOPTIONS) $(EXTOPTIONS) $(GENSCRIPTEXTRA) -registry $(APIXML) GENSCRIPTEXTRA = @@ -542,7 +545,8 @@ extinc: $(METADEPEND) $(METADEPEND): $(APIXML) $(GENSCRIPT) $(QUIET)$(MKDIR) $(METAPATH) $(QUIET)$(PYTHON) $(GENSCRIPT) $(GENSCRIPTOPTS) -o $(METAPATH) extinc - $(QUIET)$(PYTHON) $(CFEATSCRIPT) -features $(CFEATURES) -o $(METAPATH)/c-feature-dictionary.asciidoc + $(QUIET)$(PYTHON) $(CFEATSCRIPT) -i $(CFEATURES) -o $(METAPATH)/c-feature-dictionary.asciidoc + $(QUIET)$(PYTHON) $(CFUNCSCRIPT) -i $(CFUNCTIONS) -o $(METAPATH)/c-function-dictionary.asciidoc # This generates a single file containing asciidoc attributes for each # extension in the spec being built. diff --git a/OpenCL_C.txt b/OpenCL_C.txt index c6a096a7..7a2347fa 100644 --- a/OpenCL_C.txt +++ b/OpenCL_C.txt @@ -246,6 +246,12 @@ clock shared by all work-items executing in the same work-group. clock shared by all work-items executing in the same sub-group. endif::cl_khr_kernel_clock[] +ifdef::cl_ext_image_unorm_int_2_101010[] +| {opencl_c_ext_image_unorm_int_2_101010} +| The OpenCL C compiler supports `CLK_UNORM_INT_2_101010_EXT` and returning it +from `get_image_channel_data_type`. +endif::cl_ext_image_unorm_int_2_101010[] + |==== In OpenCL C 3.0 or newer, feature macros must expand to the value `1` if the @@ -12483,6 +12489,14 @@ endif::cl_khr_gl_msaa_sharing[] `CLK_UNORM_INT_101010_2` footnote:[{fn-CLK_UNORM_INT_101010_2}] +ifdef::cl_ext_image_unorm_int_2_101010[] + Additionally, if the {opencl_c_ext_image_unorm_int_2_101010} feature is + supported: + + `CLK_UNORM_INT_2_101010_EXT` + +endif::cl_ext_image_unorm_int_2_101010[] + | int *get_image_channel_order*(_aQual_ image2d_t _image_) + int *get_image_channel_order*(_aQual_ image3d_t _image_) @@ -13676,10 +13690,6 @@ execution. [[built-in-functions-kernel-query-functions]] ==== Built-in Functions - Kernel Query Functions -// Note: the Unicode "zero width space" (​) is used in some places to -// cause long function names to break much more sensibly. -// Probably the asciidoc built-in {zwsp} should be used instead. - [open,refpage='kernelQueryFunctions',desc='Built-in Functions - Kernel Query Functions',type='freeform',spec='clang',anchor='built-in-functions-kernel-query-functions',xrefs='enqueue_kernel',alias='get_kernel_preferred get_kernel_work_group_size'] -- [[table-builtin-kernel-query]] @@ -13693,9 +13703,9 @@ execution. can be used to execute a block on a specific device given by _device_. _block_ specifies the block to be enqueued. -| uint *get_kernel_preferred_​work_group_size_multiple*( +| uint *{get_kernel_preferred_work_group_size_multiple}*( void (^block)(void)) + - uint *get_kernel_preferred_​work_group_size_multiple*( + uint *{get_kernel_preferred_work_group_size_multiple}*( void (^block)(local {localArgType} *, ...)) | Returns the preferred multiple of work-group size for launch. This is a performance hint. @@ -14975,138 +14985,138 @@ This section is informational and non-normative. 3+| For OpenCL 2.1 or {cl_khr_subgroups_EXT}: -| `get_​sub_​group_​size` +| `{get_sub_group_size}` | *SubgroupSize* | *Kernel* -| `get_​max_​sub_​group_​size` +| `{get_max_sub_group_size}` | *SubgroupMaxSize* | *Kernel* -| `get_​num_​sub_​groups` +| `{get_num_sub_groups}` | *NumSubgroups* | *Kernel* -| `get_​enqueued_​num_​sub_​groups` +| `{get_enqueued_num_sub_groups}` | *NumEnqueuedSubgroups* | *Kernel* -| `get_​sub_​group_​id` +| `{get_sub_group_id}` | *SubgroupId* | *Kernel* -| `get_​sub_​group_​local_​id` +| `{get_sub_group_local_id}` | *SubgroupLocalInvocationId* | *Kernel* -| `sub_​group_​barrier` +| `{sub_group_barrier}` | *OpControlBarrier* | None Needed -| `sub_​group_​all` +| `{sub_group_all}` | *OpGroupAll* | *Groups* -| `sub_​group_​any` +| `{sub_group_any}` | *OpGroupAny* | *Groups* -| `sub_​group_​broadcast` +| `{sub_group_broadcast}` | *OpGroupBroadcast* | *Groups* -| `sub_​group_​reduce_​add` +| `{sub_group_reduce_add}` | *OpGroupIAdd*, *OpGroupFAdd* | *Groups* -| `sub_​group_​reduce_​min` +| `{sub_group_reduce_min}` | *OpGroupSMin*, *OpGroupUMin*, *OpGroupFMin* | *Groups* -| `sub_​group_​reduce_​max` +| `{sub_group_reduce_max}` | *OpGroupSMax*, *OpGroupUMax*, *OpGroupFMax* | *Groups* -| `sub_​group_​scan_​exclusive_​add` +| `{sub_group_scan_exclusive_add}` | *OpGroupIAdd*, *OpGroupFAdd* | *Groups* -| `sub_​group_​scan_​exclusive_​min` +| `{sub_group_scan_exclusive_min}` | *OpGroupSMin*, *OpGroupUMin*, *OpGroupFMin* | *Groups* -| `sub_​group_​scan_​exclusive_​max` +| `{sub_group_scan_exclusive_max}` | *OpGroupSMax*, *OpGroupUMax*, *OpGroupFMax* | *Groups* -| `sub_​group_​scan_​inclusive_​add` +| `{sub_group_scan_inclusive_add}` | *OpGroupIAdd*, *OpGroupFAdd* | *Groups* -| `sub_​group_​scan_​inclusive_​min` +| `{sub_group_scan_inclusive_min}` | *OpGroupSMin*, *OpGroupUMin*, *OpGroupFMin* | *Groups* -| `sub_​group_​scan_​inclusive_​max` +| `{sub_group_scan_inclusive_max}` | *OpGroupSMax*, *OpGroupUMax*, *OpGroupFMax* | *Groups* -| `sub_​group_​reserve_​read_​pipe` +| `{sub_group_reserve_read_pipe}` | *OpGroupReserveReadPipePackets* | *Pipes* -| `sub_​group_​reserve_​write_​pipe` +| `{sub_group_reserve_write_pipe}` | *OpGroupReserveReadWritePackets* | *Pipes* -| `sub_​group_​commit_​read_​pipe` +| `{sub_group_commit_read_pipe}` | *OpGroupCommitReadPipe* | *Pipes* -| `sub_​group_​commit_​write_​pipe` +| `{sub_group_commit_write_pipe}` | *OpGroupCommitWritePipe* | *Pipes* -| `get_​kernel_​sub_​group_​count_​for_​ndrange` +| `{get_kernel_sub_group_count_for_ndrange}` | *OpGetKernelNDrangeSubGroupCount* | *DeviceEnqueue* -| `get_​kernel_​max_​sub_​group_​size_​for_​ndrange` +| `{get_kernel_max_sub_group_size_for_ndrange}` | *OpGetKernelNDrangeMaxSubGroupSize* | *DeviceEnqueue* ifdef::cl_khr_subgroup_ballot[] 3+| For {cl_khr_subgroup_ballot_EXT}: -| `sub_​group_​non_​uniform_​broadcast` +| `{sub_group_non_uniform_broadcast}` | *OpGroupNonUniformBroadcast* | *GroupNonUniformBallot* -| `sub_​group_​broadcast_​first` +| `{sub_group_broadcast_first}` | *OpGroupNonUniformBroadcastFirst* | *GroupNonUniformBallot* -| `sub_​group_​ballot` +| `{sub_group_ballot}` | *OpGroupNonUniformBallot* | *GroupNonUniformBallot* -| `sub_​group_​inverse_​ballot` +| `{sub_group_inverse_ballot}` | *OpGroupNonUniformInverseBallot* | *GroupNonUniformBallot* -| `sub_​group_​ballot_​bit_​extract` +| `{sub_group_ballot_bit_extract}` | *OpGroupNonUniformBallotBitExtract* | *GroupNonUniformBallot* -| `sub_​group_​ballot_​bit_​count` +| `{sub_group_ballot_bit_count}` | *OpGroupNonUniformBallotBitCount* | *GroupNonUniformBallot* -| `sub_​group_​ballot_​inclusive_​scan` +| `{sub_group_ballot_inclusive_scan}` | *OpGroupNonUniformBallotBitCount* | *GroupNonUniformBallot* -| `sub_​group_​ballot_​exclusive_​scan` +| `{sub_group_ballot_exclusive_scan}` | *OpGroupNonUniformBallotBitCount* | *GroupNonUniformBallot* -| `sub_​group_​ballot_​find_​lsb` +| `{sub_group_ballot_find_lsb}` | *OpGroupNonUniformBallotFindLSB* | *GroupNonUniformBallot* -| `sub_​group_​ballot_​find_​msb` +| `{sub_group_ballot_find_msb}` | *OpGroupNonUniformBallotFindMSB* | *GroupNonUniformBallot* -| `get_​sub_​group_​eq_​mask` +| `{get_sub_group_eq_mask}` | *SubgroupEqMask* | *GroupNonUniformBallot* -| `get_​sub_​group_​ge_​mask` +| `{get_sub_group_ge_mask}` | *SubgroupGeMask* | *GroupNonUniformBallot* -| `get_​sub_​group_​gt_​mask` +| `{get_sub_group_gt_mask}` | *SubgroupGtMask* | *GroupNonUniformBallot* -| `get_​sub_​group_​le_​mask` +| `{get_sub_group_le_mask}` | *SubgroupLeMask* | *GroupNonUniformBallot* -| `get_​sub_​group_​lt_​mask` +| `{get_sub_group_lt_mask}` | *SubgroupLtMask* | *GroupNonUniformBallot* endif::cl_khr_subgroup_ballot[] @@ -15114,34 +15124,34 @@ endif::cl_khr_subgroup_ballot[] ifdef::cl_khr_subgroup_clustered_reduce[] 3+| For {cl_khr_subgroup_clustered_reduce_EXT}: -| `sub_​group_​clustered_​reduce_​add` +| `{sub_group_clustered_reduce_add}` | *OpGroupNonUniformIAdd*, *OpGroupNonUniformFAdd* | *GroupNonUniformClustered* -| `sub_​group_​clustered_​reduce_​mul` +| `{sub_group_clustered_reduce_mul}` | *OpGroupNonUniformIMul*, *OpGroupNonUniformFMul* | *GroupNonUniformClustered* -| `sub_​group_​clustered_​reduce_​min` +| `{sub_group_clustered_reduce_min}` | *OpGroupNonUniformSMin*, *OpGroupNonUniformUMin*, *OpGroupNonUniformFMin* | *GroupNonUniformClustered* -| `sub_​group_​clustered_​reduce_​max` +| `{sub_group_clustered_reduce_max}` | *OpGroupNonUniformSMax*, *OpGroupNonUniformUMax*, *OpGroupNonUniformFMax* | *GroupNonUniformClustered* -| `sub_​group_​clustered_​reduce_​and` +| `{sub_group_clustered_reduce_and}` | *OpGroupNonUniformBitwiseAnd* | *GroupNonUniformClustered* -| `sub_​group_​clustered_​reduce_​or` +| `{sub_group_clustered_reduce_or}` | *OpGroupNonUniformBitwiseOr* | *GroupNonUniformClustered* -| `sub_​group_​clustered_​reduce_​xor` +| `{sub_group_clustered_reduce_xor}` | *OpGroupNonUniformBitwiseXor* | *GroupNonUniformClustered* -| `sub_​group_​clustered_​reduce_​logical_​and` +| `{sub_group_clustered_reduce_logical_and}` | *OpGroupNonUniformLogicalAnd* | *GroupNonUniformClustered* -| `sub_​group_​clustered_​reduce_​logical_​or` +| `{sub_group_clustered_reduce_logical_or}` | *OpGroupNonUniformLogicalOr* | *GroupNonUniformClustered* -| `sub_​group_​clustered_​reduce_​logical_​xor` +| `{sub_group_clustered_reduce_logical_xor}` | *OpGroupNonUniformLogicalXor* | *GroupNonUniformClustered* endif::cl_khr_subgroup_clustered_reduce[] @@ -15150,37 +15160,37 @@ ifdef::cl_khr_subgroup_extended_types[] 3+| For {cl_khr_subgroup_extended_types_EXT}: + Note: This extension adds new types to uniform sub-group operations. -| `sub_​group_​broadcast` +| `{sub_group_broadcast}` | *OpGroupBroadcast* | *Groups* -| `sub_​group_​reduce_​add` +| `{sub_group_reduce_add}` | *OpGroupIAdd*, *OpGroupFAdd* | *Groups* -| `sub_​group_​reduce_​min` +| `{sub_group_reduce_min}` | *OpGroupSMin*, *OpGroupUMin*, *OpGroupFMin* | *Groups* -| `sub_​group_​reduce_​max` +| `{sub_group_reduce_max}` | *OpGroupSMax*, *OpGroupUMax*, *OpGroupFMax* | *Groups* -| `sub_​group_​scan_​exclusive_​add` +| `{sub_group_scan_exclusive_add}` | *OpGroupIAdd*, *OpGroupFAdd* | *Groups* -| `sub_​group_​scan_​exclusive_​min` +| `{sub_group_scan_exclusive_min}` | *OpGroupSMin*, *OpGroupUMin*, *OpGroupFMin* | *Groups* -| `sub_​group_​scan_​exclusive_​max` +| `{sub_group_scan_exclusive_max}` | *OpGroupSMax*, *OpGroupUMax*, *OpGroupFMax* | *Groups* -| `sub_​group_​scan_​inclusive_​add` +| `{sub_group_scan_inclusive_add}` | *OpGroupIAdd*, *OpGroupFAdd* | *Groups* -| `sub_​group_​scan_​inclusive_​min` +| `{sub_group_scan_inclusive_min}` | *OpGroupSMin*, *OpGroupUMin*, *OpGroupFMin* | *Groups* -| `sub_​group_​scan_​inclusive_​max` +| `{sub_group_scan_inclusive_max}` | *OpGroupSMax*, *OpGroupUMax*, *OpGroupFMax* | *Groups* endif::cl_khr_subgroup_extended_types[] @@ -15188,96 +15198,96 @@ endif::cl_khr_subgroup_extended_types[] ifdef::cl_khr_subgroup_non_uniform_arithmetic[] 3+| For {cl_khr_subgroup_non_uniform_arithmetic_EXT}: -| `sub_​group_​non_​uniform_​reduce_​add` +| `{sub_group_non_uniform_reduce_add}` | *OpGroupNonUniformIAdd*, *OpGroupNonUniformFAdd* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​reduce_​mul` +| `{sub_group_non_uniform_reduce_mul}` | *OpGroupNonUniformIMul*, *OpGroupNonUniformFMul* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​reduce_​min` +| `{sub_group_non_uniform_reduce_min}` | *OpGroupNonUniformSMin*, *OpGroupNonUniformUMin*, *OpGroupNonUniformFMin* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​reduce_​max` +| `{sub_group_non_uniform_reduce_max}` | *OpGroupNonUniformSMax*, *OpGroupNonUniformUMax*, *OpGroupNonUniformFMax* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​reduce_​and` +| `{sub_group_non_uniform_reduce_and}` | *OpGroupNonUniformBitwiseAnd* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​reduce_​or` +| `{sub_group_non_uniform_reduce_or}` | *OpGroupNonUniformBitwiseOr* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​reduce_​xor` +| `{sub_group_non_uniform_reduce_xor}` | *OpGroupNonUniformBitwiseXor* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​reduce_​logical_​and` +| `{sub_group_non_uniform_reduce_logical_and}` | *OpGroupNonUniformLogicalAnd* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​reduce_​logical_​or` +| `{sub_group_non_uniform_reduce_logical_or}` | *OpGroupNonUniformLogicalOr* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​reduce_​logical_​xor` +| `{sub_group_non_uniform_reduce_logical_xor}` | *OpGroupNonUniformLogicalXor* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​scan_​inclusive_​add` +| `{sub_group_non_uniform_scan_inclusive_add}` | *OpGroupNonUniformIAdd*, *OpGroupNonUniformFAdd* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​scan_​inclusive_​mul` +| `{sub_group_non_uniform_scan_inclusive_mul}` | *OpGroupNonUniformIMul*, *OpGroupNonUniformFMul* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​scan_​inclusive_​min` +| `{sub_group_non_uniform_scan_inclusive_min}` | *OpGroupNonUniformSMin*, *OpGroupNonUniformUMin*, *OpGroupNonUniformFMin* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​scan_​inclusive_​max` +| `{sub_group_non_uniform_scan_inclusive_max}` | *OpGroupNonUniformSMax*, *OpGroupNonUniformUMax*, *OpGroupNonUniformFMax* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​scan_​inclusive_​and` +| `{sub_group_non_uniform_scan_inclusive_and}` | *OpGroupNonUniformBitwiseAnd* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​scan_​inclusive_​or` +| `{sub_group_non_uniform_scan_inclusive_or}` | *OpGroupNonUniformBitwiseOr* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​scan_​inclusive_​xor` +| `{sub_group_non_uniform_scan_inclusive_xor}` | *OpGroupNonUniformBitwiseXor* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​scan_​inclusive_​logical_​and` +| `{sub_group_non_uniform_scan_inclusive_logical_and}` | *OpGroupNonUniformLogicalAnd* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​scan_​inclusive_​logical_​or` +| `{sub_group_non_uniform_scan_inclusive_logical_or}` | *OpGroupNonUniformLogicalOr* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​scan_​inclusive_​logical_​xor` +| `{sub_group_non_uniform_scan_inclusive_logical_xor}` | *OpGroupNonUniformLogicalXor* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​scan_​exclusive_​add` +| `{sub_group_non_uniform_scan_exclusive_add}` | *OpGroupNonUniformIAdd*, *OpGroupNonUniformFAdd* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​scan_​exclusive_​mul` +| `{sub_group_non_uniform_scan_exclusive_mul}` | *OpGroupNonUniformIMul*, *OpGroupNonUniformFMul* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​scan_​exclusive_​min` +| `{sub_group_non_uniform_scan_exclusive_min}` | *OpGroupNonUniformSMin*, *OpGroupNonUniformUMin*, *OpGroupNonUniformFMin* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​​scan_​exclusive_​max` +| `{sub_group_non_uniform_scan_exclusive_max}` | *OpGroupNonUniformSMax*, *OpGroupNonUniformUMax*, *OpGroupNonUniformFMax* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​​scan_​exclusive_​and` +| `{sub_group_non_uniform_scan_exclusive_and}` | *OpGroupNonUniformBitwiseAnd* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​​scan_​exclusive_​or` +| `{sub_group_non_uniform_scan_exclusive_or}` | *OpGroupNonUniformBitwiseOr* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​​scan_​exclusive_​xor` +| `{sub_group_non_uniform_scan_exclusive_xor}` | *OpGroupNonUniformBitwiseXor* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​​scan_​exclusive_​logical_​and` +| `{sub_group_non_uniform_scan_exclusive_logical_and}` | *OpGroupNonUniformLogicalAnd* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​​scan_​exclusive_​logical_​or` +| `{sub_group_non_uniform_scan_exclusive_logical_or}` | *OpGroupNonUniformLogicalOr* | *GroupNonUniformArithmetic* -| `sub_​group_​non_​uniform_​​scan_​exclusive_​logical_​xor` +| `{sub_group_non_uniform_scan_exclusive_logical_xor}` | *OpGroupNonUniformLogicalXor* | *GroupNonUniformArithmetic* endif::cl_khr_subgroup_non_uniform_arithmetic[] @@ -15285,16 +15295,16 @@ endif::cl_khr_subgroup_non_uniform_arithmetic[] ifdef::cl_khr_subgroup_non_uniform_vote[] 3+| For {cl_khr_subgroup_non_uniform_vote_EXT}: -| `sub_​group_​elect` +| `{sub_group_elect}` | *OpGroupNonUniformElect* | *GroupNonUniform* -| `sub_​group_​non_​uniform_​all` +| `{sub_group_non_uniform_all}` | *OpGroupNonUniformAll* | *GroupNonUniformVote* -| `sub_​group_​non_​uniform_​any` +| `{sub_group_non_uniform_any}` | *OpGroupNonUniformAny* | *GroupNonUniformVote* -| `sub_​group_​non_​uniform_​all_​equal` +| `{sub_group_non_uniform_all_equal}` | *OpGroupNonUniformAllEqual* | *GroupNonUniformVote* endif::cl_khr_subgroup_non_uniform_vote[] @@ -15302,10 +15312,10 @@ endif::cl_khr_subgroup_non_uniform_vote[] ifdef::cl_khr_subgroup_shuffle[] 3+| For {cl_khr_subgroup_shuffle_EXT}: -| `sub_​group_​shuffle` +| `{sub_group_shuffle}` | *OpGroupNonUniformShuffle* | *GroupNonUniformShuffle* -| `sub_​group_​shuffle_​xor` +| `{sub_group_shuffle_xor}` | *OpGroupNonUniformShuffleXor* | *GroupNonUniformShuffle* endif::cl_khr_subgroup_shuffle[] @@ -15313,10 +15323,10 @@ endif::cl_khr_subgroup_shuffle[] ifdef::cl_khr_subgroup_shuffle_relative[] 3+| For {cl_khr_subgroup_shuffle_relative_EXT}: -| `sub_​group_​shuffle_​up` +| `{sub_group_shuffle_up}` | *OpGroupNonUniformShuffleUp* | *GroupNonUniformShuffleRelative* -| `sub_​group_​shuffle_​down` +| `{sub_group_shuffle_down}` | *OpGroupNonUniformShuffleDown* | *GroupNonUniformShuffleRelative* endif::cl_khr_subgroup_shuffle_relative[] diff --git a/api/appendix_e.asciidoc b/api/appendix_e.asciidoc index 9df39d32..ba953448 100644 --- a/api/appendix_e.asciidoc +++ b/api/appendix_e.asciidoc @@ -377,7 +377,7 @@ device: capabilities of a device. * {CL_DEVICE_PIPE_SUPPORT} to determine whether a device supports pipe memory objects. - * {CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_MULTIPLE} to determine the + * {CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_MULTIPLE} to determine the preferred work-group size multiple for a device. OpenCL 3.0 adds new queries to conveniently and precisely diff --git a/api/appendix_h.asciidoc b/api/appendix_h.asciidoc index 2a2d3759..d1cef63a 100644 --- a/api/appendix_h.asciidoc +++ b/api/appendix_h.asciidoc @@ -334,7 +334,7 @@ When sRGB images are not supported: |*Behavior* | {clGetSupportedImageFormats} -| Will not return return any image formats with `image_channel_order` equal to an sRGB image channel order if no devices in _context_ support sRGB images. +| Will not return any image formats with `image_channel_order` equal to an sRGB image channel order if no devices in _context_ support sRGB images. |==== diff --git a/api/cl_ext_image_unorm_int_2_101010.asciidoc b/api/cl_ext_image_unorm_int_2_101010.asciidoc new file mode 100644 index 00000000..1320526d --- /dev/null +++ b/api/cl_ext_image_unorm_int_2_101010.asciidoc @@ -0,0 +1,39 @@ +// Copyright 2020-2024 The Khronos Group Inc. +// SPDX-License-Identifier: CC-BY-4.0 + +include::{generated}/meta/{refprefix}cl_ext_image_unorm_int_2_101010.txt[] + +=== Other Extension Metadata + +*Last Modified Date*:: + 2024-05-10 +*IP Status*:: + No known IP claims. +*Contributors*:: + - Kévin Petit, Arm Ltd. + +=== Description + +{cl_ext_image_unorm_int_2_101010_EXT} adds support for the {CL_UNORM_INT_2_101010_EXT} +image format. + +OpenCL C compilers supporting this extension will define the +{opencl_c_ext_image_unorm_int_2_101010} feature macro. + +=== New feature macro + + * {opencl_c_ext_image_unorm_int_2_101010} + +=== New Enums + + * {cl_channel_type_TYPE} + ** {CL_UNORM_INT_2_101010_EXT} + +=== New OpenCL C channel data type + + * `CLK_UNORM_INT_2_101010_EXT` + +=== Version History + + * Revision 1.0.0, 2024-05-10 + ** Initial version diff --git a/api/cl_khr_command_buffer.asciidoc b/api/cl_khr_command_buffer.asciidoc index 8234aa43..a97e067d 100644 --- a/api/cl_khr_command_buffer.asciidoc +++ b/api/cl_khr_command_buffer.asciidoc @@ -4,7 +4,7 @@ include::{generated}/meta/{refprefix}cl_khr_command_buffer.txt[] // *Revision*:: -// 0.9.4 +// 0.9.5 // *Extension and Version Dependencies*:: // This extension requires OpenCL 1.2 or later. // Buffering of SVM commands requires OpenCL 2.0 or later. @@ -12,7 +12,7 @@ include::{generated}/meta/{refprefix}cl_khr_command_buffer.txt[] === Other Extension Metadata *Last Modified Date*:: - 2023-03-31 + 2024-07-24 *IP Status*:: No known IP claims. *Contributors*:: @@ -137,13 +137,15 @@ retain its provisional extension status until other layered extensions are released, as these may reveal modifications needed to the base specification to support their intended use cases. -==== ND-range Kernel Command Properties +==== Command Properties -The {clCommandNDRangeKernelKHR} entry-point defines a `properties` parameter of -new type {cl_ndrange_kernel_command_properties_khr_TYPE}. No properties are defined -in {cl_khr_command_buffer_EXT}, but the parameter enables layered extensions like -{cl_khr_command_buffer_mutable_dispatch_EXT} to define properties that inform -the characteristics of the kernel command. +The command recording entry-points allow a `properties` parameter of +new type {cl_command_properties_khr_TYPE} to be passed. No properties are +defined in {cl_khr_command_buffer_EXT}, but the parameter enables layered +extensions to define characteristics of the individual commands. + +For example, {cl_khr_command_buffer_mutable_dispatch_EXT} defines properties +that can be set when appending a kernel command with {clCommandNDRangeKernelKHR}. ==== Command Handles @@ -214,7 +216,7 @@ features: * {cl_command_buffer_state_khr_TYPE} * {cl_command_buffer_properties_khr_TYPE} * {cl_command_buffer_flags_khr_TYPE} - * {cl_ndrange_kernel_command_properties_khr_TYPE} + * {cl_command_properties_khr_TYPE} * {cl_mutable_command_khr_TYPE} === New Enums @@ -433,4 +435,7 @@ features: * 0.9.4, 2023-05-11 ** Add clCommandSVMMemcpyKHR and clCommandSVMMemFillKHR command entries (provisional). + * 0.9.5, 2024-07-24 + ** Add a properties parameter to all command recording entry-points + (provisional). diff --git a/api/cl_khr_command_buffer_mutable_dispatch.asciidoc b/api/cl_khr_command_buffer_mutable_dispatch.asciidoc index 486d01d1..51e2b869 100644 --- a/api/cl_khr_command_buffer_mutable_dispatch.asciidoc +++ b/api/cl_khr_command_buffer_mutable_dispatch.asciidoc @@ -6,7 +6,7 @@ include::{generated}/meta/{refprefix}cl_khr_command_buffer_mutable_dispatch.txt[ === Other Extension Metadata *Last Modified Date*:: - 2024-06-19 + 2024-09-05 *IP Status*:: No known IP claims. *Contributors*:: @@ -72,7 +72,7 @@ void pointer using {cl_command_buffer_update_type_khr_TYPE}. * {cl_device_info_TYPE} ** {CL_DEVICE_MUTABLE_DISPATCH_CAPABILITIES_KHR} - * {cl_ndrange_kernel_command_properties_khr_TYPE} + * {cl_command_properties_khr_TYPE} ** {CL_MUTABLE_DISPATCH_ASSERTS_KHR} ** {CL_MUTABLE_DISPATCH_UPDATABLE_FIELDS_KHR} * {cl_mutable_dispatch_asserts_khr_TYPE} @@ -86,7 +86,7 @@ void pointer using {cl_command_buffer_update_type_khr_TYPE}. * {cl_mutable_command_info_khr_TYPE} ** {CL_MUTABLE_COMMAND_COMMAND_QUEUE_KHR} ** {CL_MUTABLE_COMMAND_COMMAND_BUFFER_KHR} - ** {CL_MUTABLE_DISPATCH_PROPERTIES_ARRAY_KHR} + ** {CL_MUTABLE_COMMAND_PROPERTIES_ARRAY_KHR} ** {CL_MUTABLE_DISPATCH_KERNEL_KHR} ** {CL_MUTABLE_DISPATCH_DIMENSIONS_KHR} ** {CL_MUTABLE_DISPATCH_GLOBAL_WORK_OFFSET_KHR} @@ -196,7 +196,7 @@ kernel void vector_addition(global int* tile1, global int* tile2, CL_CHECK(clSetKernelArg(kernel, 2, sizeof(cl_mem), &output_buffers[0])); // Instruct the nd-range command to allow for mutable kernel arguments - cl_ndrange_kernel_command_properties_khr mutable_properties[] = { + cl_command_properties_khr mutable_properties[] = { CL_MUTABLE_DISPATCH_UPDATABLE_FIELDS_KHR, CL_MUTABLE_DISPATCH_ARGUMENTS_KHR, 0}; @@ -360,3 +360,6 @@ may be a introduced as a stand alone extension. * Revision 0.9.2, 2024-06-19 ** Change {clUpdateMutableCommandsKHR} API to pass configs as an array rather than linked list (provisional). + * Revision 0.9.3, 2024-09-05 + ** Rename `CL_MUTABLE_DISPATCH_PROPERTIES_ARRAY_KHR` to + `CL_MUTABLE_COMMAND_PROPERTIES_ARRAY_KHR` (provisional). diff --git a/api/cl_khr_egl_image.asciidoc b/api/cl_khr_egl_image.asciidoc index 42e03b71..dcea8fd3 100644 --- a/api/cl_khr_egl_image.asciidoc +++ b/api/cl_khr_egl_image.asciidoc @@ -13,7 +13,7 @@ include::{generated}/meta/{refprefix}cl_khr_egl_image.txt[] === Description {cl_khr_egl_image_EXT} provides a mechanism to creating OpenCL memory objects -from from EGLImages. +from EGLImages. === New Commands diff --git a/api/cl_khr_external_memory.asciidoc b/api/cl_khr_external_memory.asciidoc index cd572a8f..3d61b564 100644 --- a/api/cl_khr_external_memory.asciidoc +++ b/api/cl_khr_external_memory.asciidoc @@ -60,7 +60,7 @@ imported into OpenCL. * {cl_mem_properties_TYPE} ** {CL_MEM_DEVICE_HANDLE_LIST_KHR} ** {CL_MEM_DEVICE_HANDLE_LIST_END_KHR} - * Return values from from {clGetEventInfo} when _param_name_ is + * Return values from {clGetEventInfo} when _param_name_ is {cl_command_type_TYPE}: ** {CL_COMMAND_ACQUIRE_EXTERNAL_MEM_OBJECTS_KHR} ** {CL_COMMAND_RELEASE_EXTERNAL_MEM_OBJECTS_KHR} diff --git a/api/cl_khr_external_memory_win32.asciidoc b/api/cl_khr_external_memory_win32.asciidoc index 005c9278..fb18ff47 100644 --- a/api/cl_khr_external_memory_win32.asciidoc +++ b/api/cl_khr_external_memory_win32.asciidoc @@ -6,7 +6,7 @@ include::{generated}/meta/{refprefix}cl_khr_external_memory_win32.txt[] === Other Extension Metadata *Last Modified Date*:: - 2024-03-15 + 2024-06-11 *IP Status*:: No known IP claims. *Contributors*:: @@ -40,6 +40,7 @@ image memory object. * {cl_external_memory_handle_type_khr_TYPE} ** {CL_EXTERNAL_MEMORY_HANDLE_OPAQUE_WIN32_KHR} ** {CL_EXTERNAL_MEMORY_HANDLE_OPAQUE_WIN32_KMT_KHR} + ** {CL_EXTERNAL_MEMORY_HANDLE_OPAQUE_WIN32_NAME_KHR} === Version History @@ -57,3 +58,6 @@ image memory object. (provisional). * Revision 1.0.0, 2024-03-15 ** First non-provisional version. + * Revision 1.1.0, 2024-06-11 + ** Added {CL_EXTERNAL_MEMORY_HANDLE_OPAQUE_WIN32_NAME_KHR}. + diff --git a/api/cl_khr_external_semaphore.asciidoc b/api/cl_khr_external_semaphore.asciidoc index 1bbf5679..cdd7ea10 100644 --- a/api/cl_khr_external_semaphore.asciidoc +++ b/api/cl_khr_external_semaphore.asciidoc @@ -70,6 +70,10 @@ The layered extensions {cl_khr_external_semaphore_opaque_fd_EXT}, {cl_khr_external_semaphore_win32_EXT} define specific external semaphores that may be imported into or exported from OpenCL. +=== New Commands + + * {clGetSemaphoreHandleForTypeKHR} + === New Types * {cl_external_semaphore_handle_type_khr_TYPE} diff --git a/api/cl_khr_external_semaphore_sync_fd.asciidoc b/api/cl_khr_external_semaphore_sync_fd.asciidoc index ae1bc789..19162666 100644 --- a/api/cl_khr_external_semaphore_sync_fd.asciidoc +++ b/api/cl_khr_external_semaphore_sync_fd.asciidoc @@ -37,7 +37,6 @@ external semaphore using the APIs introduced by === New Commands - * {clGetSemaphoreHandleForTypeKHR} * {clReImportSemaphoreSyncFdKHR} === New Types diff --git a/api/cl_khr_external_semaphore_win32.asciidoc b/api/cl_khr_external_semaphore_win32.asciidoc index 725a5996..543741d3 100644 --- a/api/cl_khr_external_semaphore_win32.asciidoc +++ b/api/cl_khr_external_semaphore_win32.asciidoc @@ -6,7 +6,7 @@ include::{generated}/meta/{refprefix}cl_khr_external_semaphore_win32.txt[] === Other Extension Metadata *Last Modified Date*:: - 2021-09-10 + 2024-06-11 *IP Status*:: No known IP claims. *Contributors*:: @@ -39,8 +39,11 @@ introduced by {cl_khr_external_semaphore_EXT}. * {cl_external_semaphore_handle_type_khr_TYPE} ** {CL_SEMAPHORE_HANDLE_OPAQUE_WIN32_KHR} ** {CL_SEMAPHORE_HANDLE_OPAQUE_WIN32_KMT_KHR} + ** {CL_SEMAPHORE_HANDLE_OPAQUE_WIN32_NAME_KHR} === Version History * Revision 0.9.0, 2021-09-10 ** Initial version (provisional). + * Revision 0.9.1, 2024-06-11 + ** Added {CL_SEMAPHORE_HANDLE_OPAQUE_WIN32_NAME_KHR}. diff --git a/api/cl_khr_priority_hints.asciidoc b/api/cl_khr_priority_hints.asciidoc index dfd29df1..988498b5 100644 --- a/api/cl_khr_priority_hints.asciidoc +++ b/api/cl_khr_priority_hints.asciidoc @@ -14,7 +14,7 @@ include::{generated}/meta/{refprefix}cl_khr_priority_hints.txt[] The {cl_khr_priority_hints_EXT} extension adds priority hints for OpenCL, but does not specify the scheduling behavior or minimum guarantees. -It is expected that the the user guides associated with each implementation +It is expected that the user guides associated with each implementation which supports this extension will describe the scheduling behavior guarantees. diff --git a/api/cl_khr_semaphore.asciidoc b/api/cl_khr_semaphore.asciidoc index 721a3da2..40afe4c1 100644 --- a/api/cl_khr_semaphore.asciidoc +++ b/api/cl_khr_semaphore.asciidoc @@ -255,3 +255,6 @@ while (true) { {CL_SEMAPHORE_DEVICE_HANDLE_LIST_KHR} (provisional). * Revision 1.0.0, 2024-03-15 ** First non-provisional version. + * Revision 1.0.1, 2024-09-08 + ** Unified {CL_INVALID_COMMAND_QUEUE} error behavior for + {clEnqueueSignalSemaphoresKHR} and {clEnqueueWaitSemaphoresKHR}. diff --git a/api/footnotes.asciidoc b/api/footnotes.asciidoc index cc407d98..b5452357 100644 --- a/api/footnotes.asciidoc +++ b/api/footnotes.asciidoc @@ -11,7 +11,7 @@ Note that this flag does not provide meaning for atomic memory operations, but o ] :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_. \ +{clCreateContextfromType} 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[ \ diff --git a/api/opencl_architecture.asciidoc b/api/opencl_architecture.asciidoc index 63dc7d50..38d33377 100644 --- a/api/opencl_architecture.asciidoc +++ b/api/opencl_architecture.asciidoc @@ -679,7 +679,7 @@ The OpenCL execution model supports three types of kernels: * *OpenCL kernels* are managed by the OpenCL API as kernel objects associated with kernel functions within program objects. OpenCL program objects are created and built using OpenCL APIs. - The OpenCL API includes functions to query the kernel languages and + The OpenCL API includes functions to query the kernel languages and intermediate languages that may be used to create OpenCL program objects for a device. * *Native kernels* are accessed through a host function pointer. diff --git a/api/opencl_platform_layer.asciidoc b/api/opencl_platform_layer.asciidoc index 2b1ae266..81f08b58 100644 --- a/api/opencl_platform_layer.asciidoc +++ b/api/opencl_platform_layer.asciidoc @@ -473,7 +473,7 @@ device except for the following queries: [[device-queries-table]] .List of supported param_names by {clGetDeviceInfo} -[width="100%",cols="<33%,<17%,<50%",options="header"] +[width="100%",cols="<28%,<15%,<57%",options="header"] |==== | Device Info | Return Type | Description | {CL_DEVICE_TYPE_anchor} @@ -1606,6 +1606,9 @@ include::{generated}/api/version-notes/CL_DEVICE_ATOMIC_MEMORY_CAPABILITIES.asci {CL_DEVICE_ATOMIC_ORDER_RELAXED} \| + {CL_DEVICE_ATOMIC_SCOPE_WORK_GROUP} + A device that does not support {CL_DEVICE_SVM_ATOMICS} (and hence does not support {CL_MEM_SVM_ATOMICS}) may still support {CL_DEVICE_ATOMIC_SCOPE_ALL_DEVICES}. On these devices, an atomic operation with + *memory_scope_all_svm_devices* will behave the same as if the scope were *memory_scope_device* - refer to the <>. + | {CL_DEVICE_ATOMIC_FENCE_CAPABILITIES_anchor} include::{generated}/api/version-notes/CL_DEVICE_ATOMIC_FENCE_CAPABILITIES.asciidoc[] diff --git a/api/opencl_runtime_layer.asciidoc b/api/opencl_runtime_layer.asciidoc index 263ca185..a10d5fb9 100644 --- a/api/opencl_runtime_layer.asciidoc +++ b/api/opencl_runtime_layer.asciidoc @@ -1704,10 +1704,11 @@ include::{generated}/api/version-notes/CL_MAP_WRITE_INVALIDATE_REGION.asciidoc[] |==== -- +ifdef::cl_khr_d3d10_sharing,cl_khr_d3d11_sharing[] +=== Creating Buffer Objects From Direct3D Buffer Resources +endif::cl_khr_d3d10_sharing,cl_khr_d3d11_sharing[] ifdef::cl_khr_d3d10_sharing[] -=== Creating OpenCL Buffer Objects From Direct3D 10 Buffer Resources - [open,refpage='clCreateFromD3D10BufferKHR',desc='Create OpenCL buffer object from a Direct3D 10 buffer',type='protos'] -- To create an OpenCL buffer object from a Direct3D 10 buffer, call the @@ -1763,8 +1764,6 @@ endif::cl_khr_d3d10_sharing[] ifdef::cl_khr_d3d11_sharing[] -=== Creating OpenCL Buffer Objects From Direct3D 11 Buffer Resources - [open,refpage='clCreateFromD3D11BufferKHR',desc='Create OpenCL buffer object from a Direct3D 11 buffer',type='protos'] -- To create an OpenCL buffer object from a Direct3D 11 buffer, call the @@ -1820,7 +1819,7 @@ endif::cl_khr_d3d11_sharing[] ifdef::cl_khr_gl_sharing[] -=== Creating OpenCL Buffer Objects From OpenGL Buffer Objects +=== Creating Buffer Objects From OpenGL Buffer Objects [open,refpage='clCreateFromGLBuffer',desc='Create OpenCL buffer object from an OpenGL buffer object',type='protos'] -- @@ -1837,7 +1836,7 @@ include::{generated}/api/version-notes/clCreateFromGLBuffer.asciidoc[] Only the {CL_MEM_READ_ONLY}, {CL_MEM_WRITE_ONLY} and {CL_MEM_READ_WRITE} flags specified in that table can be used. * _bufobj_ is the name of an OpenGL buffer object. - The data store of the OpenGL buffer object must have have been + The data store of the OpenGL buffer object must have been previously created by calling `glBufferData`, although its contents need not be initialized. The size of the data store will be used to determine the size of the @@ -2474,6 +2473,15 @@ include::{generated}/api/version-notes/CL_UNORM_INT_101010_2.asciidoc[] include::{generated}/api/version-notes/CL_SIGNED_INT8.asciidoc[] | Each channel component is an unnormalized signed 8-bit integer value + +ifdef::cl_ext_image_unorm_int_2_101010[] +| {CL_UNORM_INT_2_101010_EXT_anchor} + +include::{generated}/api/version-notes/CL_UNORM_INT_2_101010_EXT.asciidoc[] + | Represents a normalized 2-10-10-10 four-channel ABGR image. + The channel order must be {CL_ABGR}. +endif::cl_ext_image_unorm_int_2_101010[] + | {CL_SIGNED_INT16_anchor} include::{generated}/api/version-notes/CL_SIGNED_INT16.asciidoc[] @@ -2565,6 +2573,10 @@ For {CL_UNORM_INT_101010}, bits 31:30 are undefined, R is in bits 29:20, G in bits 19:10 and B in bits 9:0. For {CL_UNORM_INT_101010_2}, R is in bits 31:22, G in bits 21:12, B in bits 11:2 and A in bits 1:0. +ifdef::cl_ext_image_unorm_int_2_101010[] +For {CL_UNORM_INT_2_101010_EXT}, A is in bits 31:30, B in bits 29:20, G in bits +19:10 and R in bits 9:0. +endif::cl_ext_image_unorm_int_2_101010[] OpenCL implementations must maintain the minimum precision specified by the number of bits in `image_channel_data_type`. @@ -2646,7 +2658,7 @@ ifdef::cl_khr_external_memory[] If _image_slice_pitch_ is zero and the image is created from an external memory handle, then the image slice pitch is implementation-defined. endif::cl_khr_external_memory[] - The image slice pitch must be {geq} the image image row pitch {times} + The image slice pitch must be {geq} the image row pitch {times} _image_height_ for a 2D image array or a 3D image, must be {geq} the image row pitch for a 1D image array, and must be a multiple of the image row pitch. @@ -2654,7 +2666,7 @@ endif::cl_khr_external_memory[] ifndef::cl_khr_mipmap_image[0.] ifdef::cl_khr_mipmap_image[] 0 unless the {cl_khr_mipmap_image_EXT} extension is supported, in which - case it must be a value greater than 1 specifying the number of mipmap + case it may be a nonzero value specifying the number of mipmap levels in the image. endif::cl_khr_mipmap_image[] * _num_samples_ must be 0. @@ -4351,7 +4363,7 @@ endif::cl_khr_d3d11_sharing[] ifdef::cl_khr_dx9_media_sharing[] -=== Creating OpenCL Image Objects From DirectX 9 Media Resources +=== Creating Image Objects From DirectX 9 Media Resources [open,refpage='clCreateFromDX9MediaSurfaceKHR',desc='Create OpenCL image object from a media surface',type='protos'] -- @@ -4451,9 +4463,11 @@ performance. endif::cl_khr_dx9_media_sharing[] -ifdef::cl_khr_d3d10_sharing[] -=== Creating OpenCL Image Objects From Direct3D 10 Textures and Resources +ifdef::cl_khr_d3d10_sharing,cl_khr_d3d11_sharing[] +=== Creating Image Objects From Direct3D Textures and Resources +endif::cl_khr_d3d10_sharing,cl_khr_d3d11_sharing[] +ifdef::cl_khr_d3d10_sharing[] [open,refpage='clCreateFromD3D10Texture2DKHR',desc='Create OpenCL 2D image object from a Direct3D 10 2D texture',type='protos'] -- To create an OpenCL 2D image object from a subresource of a Direct3D 10 2D @@ -4586,8 +4600,6 @@ endif::cl_khr_d3d10_sharing[] ifdef::cl_khr_d3d11_sharing[] -=== Creating OpenCL Image Objects From Direct3D 11 Textures and Resources - [open,refpage='clCreateFromD3D11Texture2DKHR',desc='Create OpenCL 2D image object from a Direct3D 11 2D texture',type='protos'] -- To create an OpenCL 2D image object from a subresource of a Direct3D 11 2D @@ -4720,7 +4732,7 @@ endif::cl_khr_d3d11_sharing[] ifdef::cl_khr_egl_image[] -=== Creating OpenCL Image Objects From EGL Images +=== Creating Image Objects From EGL Images [open,refpage='clCreateFromEGLImageKHR',desc='Create cl_mem target from EGLImage source',type='protos'] -- @@ -4799,7 +4811,7 @@ endif::cl_khr_egl_image[] ifdef::cl_khr_gl_sharing[] -=== Creating OpenCL Image Objects From OpenGL Textures and Renderbuffers +=== Creating Image Objects From OpenGL Textures and Renderbuffers [open,refpage='clCreateFromGLTexture',desc='Create OpenCL image object from an OpenGL texture object',type='protos'] -- @@ -5227,10 +5239,7 @@ include::{generated}/api/version-notes/CL_PIPE_PROPERTIES.asciidoc[] -- -== Querying, Unmapping, Migrating, Retaining and Releasing Memory Objects - -// === Handling Memory Objects - +== Memory Objects === Retaining and Releasing Memory Objects @@ -5429,7 +5438,8 @@ acquired. This is to guarantee that the state of the memory objects is up-to-date and they are accessible to OpenCL. -The following restrictions shall apply - +The following restrictions shall apply: + * Each memory object must be acquired only once. Acquiring a memory object multiple times without releasing it results in implementation-defined behavior. @@ -5468,9 +5478,9 @@ Otherwise, it returns one of the following errors: ** if _command_queue_ is not a valid command-queue, or ** if device associated with _command_queue_ is not one of the devices specified by {CL_MEM_DEVICE_HANDLE_LIST_KHR} at the time of creating - one or more of _mem_objects_, or ** if one or more of _mem_objects_ - belong to a context that does not contain a device associated with - _command_queue_. + one or more of _mem_objects_, or + ** if one or more of _mem_objects_ belong to a context that does not + contain a device associated with _command_queue_. * {CL_INVALID_EVENT_WAIT_LIST} ** if _event_wait_list_ is `NULL` and _num_events_in_wait_list_ is not 0, or @@ -5522,7 +5532,8 @@ commands in the other API. This is to guarantee that the state of memory objects is up-to-date and they are accessible to the other API. -The following restrictions shall apply - +The following restrictions shall apply: + * Each memory object must be released only once. Releasing a memory object multiple times without acquiring it results in implementation-defined behavior. @@ -5653,6 +5664,16 @@ buffer or an image memory object from an external handle: It does not own a reference to the underlying memory resource represented by its memory object, and will therefore become invalid when all memory objects associated with it are destroyed. + * {CL_EXTERNAL_MEMORY_HANDLE_OPAQUE_WIN32_NAME_KHR_anchor} specifies an NT handle name that + has only limited valid usage outside of OpenCL and other compatible + APIs. + NT handle name is a null-terminated UTF-16 string naming the payload to import. + It must be compatible with the functions `DuplicateHandle`, + `CloseHandle`, `CompareObjectHandles`, `GetHandleInformation`, and + `SetHandleInformation`. + It owns a reference to the underlying memory resource represented by its + memory object. + endif::cl_khr_external_memory_win32[] For these extensions, importing memory object payloads from Windows handles @@ -6187,9 +6208,11 @@ and {clGetImageInfo} with _param_name_ {CL_MEM_DX9_MEDIA_ADAPTER_TYPE_KHR}, endif::cl_khr_dx9_media_sharing[] -ifdef::cl_khr_d3d10_sharing[] -=== Querying Direct3D Properties of Memory Objects Created From Direct3D 10 Resources +ifdef::cl_khr_d3d10_sharing,cl_khr_d3d11_sharing[] +=== Querying Direct3D Properties of Memory Objects Created From Direct3D Resources +endif::cl_khr_d3d10_sharing,cl_khr_d3d11_sharing[] +ifdef::cl_khr_d3d10_sharing[] Properties of Direct3D 10 objects may be queried using {clGetMemObjectInfo} and {clGetImageInfo} with _param_name_ {CL_MEM_D3D10_RESOURCE_KHR} and {CL_IMAGE_D3D10_SUBRESOURCE_KHR} respectively. @@ -6197,8 +6220,6 @@ endif::cl_khr_d3d10_sharing[] ifdef::cl_khr_d3d11_sharing[] -=== Querying Direct3D Properties of Memory Objects Created From Direct3D 11 Resources - Properties of Direct3D 11 objects may be queried using {clGetMemObjectInfo} and {clGetImageInfo} with _param_name_ {CL_MEM_D3D11_RESOURCE_KHR} and {CL_IMAGE_D3D11_SUBRESOURCE_KHR} respectively. @@ -6485,9 +6506,11 @@ Otherwise it returns one of the following errors: endif::cl_khr_dx9_media_sharing[] -ifdef::cl_khr_d3d10_sharing[] -=== Sharing Memory Objects Created From Direct3D 10 Resources Between Direct3D 10 and OpenCL Contexts +ifdef::cl_khr_d3d10_sharing,cl_khr_d3d11_sharing[] +=== Sharing Memory Objects Created From Direct3D Resources Between Direct3D and OpenCL Contexts +endif::cl_khr_d3d10_sharing,cl_khr_d3d11_sharing[] +ifdef::cl_khr_d3d10_sharing[] [open,refpage='clEnqueueAcquireD3D10ObjectsKHR',desc='Acquire OpenCL memory objects created from Direct3D 10 resources',type='protos'] -- To acquire OpenCL memory objects that have been created from Direct3D 10 @@ -6658,8 +6681,6 @@ endif::cl_khr_d3d10_sharing[] ifdef::cl_khr_d3d11_sharing[] -=== Sharing Memory Objects Created From Direct3D 11 Resources Between Direct3D 11 and OpenCL Contexts - [open,refpage='clEnqueueAcquireD3D11ObjectsKHR',desc='Acquire OpenCL memory objects created from Direct3D 11 resources',type='protos'] -- To acquire OpenCL memory objects that have been created from Direct3D 11 @@ -7088,7 +7109,7 @@ include::{generated}/api/version-notes/clEnqueueReleaseGLObjects.asciidoc[] to an element of the _event_wait_list_ array. ifdef::cl_khr_gl_event[] -If an OpenGL context is bound to the current thread, then then any OpenGL +If an OpenGL context is bound to the current thread, then any OpenGL commands which . affect or access the contents of the memory objects listed in the @@ -12864,7 +12885,7 @@ _errcode_ret_ returns an appropriate error code. If _errcode_ret_ is `NULL`, no error code is returned. {clCreateSemaphoreWithPropertiesKHR} returns a valid semaphore object in an -un-signaled state and and _errcode_ret_ is set to {CL_SUCCESS} if the +un-signaled state and _errcode_ret_ is set to {CL_SUCCESS} if the function is executed successfully. Otherwise, it returns a `NULL` value with one of the following error values returned in _errcode_ret_: @@ -12919,6 +12940,7 @@ Please refer to handle specific documentation for more details on transference r To export an external handle from a semaphore, call the function include::{generated}/api/protos/clGetSemaphoreHandleForTypeKHR.txt[] +include::{generated}/api/version-notes/clGetSemaphoreHandleForTypeKHR.asciidoc[] * _sema_object_ specifies a valid semaphore object with exportable properties. @@ -13144,6 +13166,14 @@ a semaphore from an external handle: It does not own a reference to the underlying synchronization primitive represented by its semaphore object, and will therefore become invalid when all semaphore objects associated with it are destroyed. + * {CL_SEMAPHORE_HANDLE_OPAQUE_WIN32_NAME_KHR} specifies an NT handle name that has + only limited valid usage outside of OpenCL and other compatible APIs. + NT handle name is a null-terminated UTF-16 string naming the payload to import. + It must be compatible with the functions `DuplicateHandle`, + `CloseHandle`, `CompareObjectHandles`, `GetHandleInformation`, and + `SetHandleInformation`. + It owns a reference to the underlying synchronization primitive + represented by its semaphore object. endif::cl_khr_external_semaphore_win32[] @@ -13161,6 +13191,12 @@ include::{generated}/api/version-notes/CL_SEMAPHORE_HANDLE_OPAQUE_WIN32_KHR.asci include::{generated}/api/version-notes/CL_SEMAPHORE_HANDLE_OPAQUE_WIN32_KMT_KHR.asciidoc[] | Reference + +| {CL_SEMAPHORE_HANDLE_OPAQUE_WIN32_NAME_KHR_anchor} + +include::{generated}/api/version-notes/CL_SEMAPHORE_HANDLE_OPAQUE_WIN32_NAME_KHR.asciidoc[] + | Reference + endif::cl_khr_external_semaphore_win32[] |==== @@ -13229,6 +13265,16 @@ events in _event_wait_list_ when {clEnqueueWaitSemaphoresKHR} returns. Waiting on the same binary semaphore twice without an interleaving signal may lead to undefined behavior. +[NOTE] +==== +When _command_queue_ is an out-of-order command-queue there are no implicit +dependencies between the semaphore wait command and commands enqueued into the +command-queue after the semaphore wait command. +If such dependencies are required, applications may enqueue a command-queue +barrier after the semaphore wait command, to explicitly add dependencies between +the semaphore wait command and subsequent commands. +==== + // refError {clEnqueueWaitSemaphoresKHR} returns {CL_SUCCESS} if the function is @@ -13239,7 +13285,9 @@ Otherwise, it returns one of the following errors: ** if _command_queue_ is not a valid command-queue, or ** if the device associated with _command_queue_ is not same as one of the devices specified by {CL_SEMAPHORE_DEVICE_HANDLE_LIST_KHR} at the time - of creating one or more of _sema_objects_. + of creating one or more of _sema_objects_, or + ** if one or more of _sema_objects_ belong to a context that does not + contain a device associated with _command_queue_. * {CL_INVALID_VALUE} if _num_sema_objects_ is 0. * {CL_INVALID_SEMAPHORE_KHR} if any of the semaphore objects specified by _sema_objects_ is not valid. @@ -13318,6 +13366,16 @@ events in _event_wait_list_ when {clEnqueueSignalSemaphoresKHR} returns. Signaling the same binary semaphore twice without an interleaving wait may lead to undefined behavior. +[NOTE] +==== +When _command_queue_ is an out-of-order command-queue there are no implicit +dependencies between commands enqueued into the command-queue before the +semaphore signal command and the semaphore signal command. +If such dependencies are required, applications may enqueue a command-queue +barrier before the semaphore signal command, to explicitly add dependencies between +the preceding commands and the semaphore signal command. +==== + // refError {clEnqueueSignalSemaphoresKHR} returns {CL_SUCCESS} if the function is @@ -13342,11 +13400,11 @@ Otherwise, it returns one of the following errors: _sema_objects_ requires a semaphore payload and _sema_payload_list_ is `NULL`. * {CL_INVALID_EVENT_WAIT_LIST} - ** if _event_wait_list_ is `NULL` and _num_events_in_wait_list_ is not - 0, or - ** if _event_wait_list_ is not `NULL` and _num_events_in_wait_list_ is - 0, or - ** if event objects in _event_wait_list_ are not valid events. + ** if _event_wait_list_ is `NULL` and _num_events_in_wait_list_ is not 0, + or + ** if _event_wait_list_ is not `NULL` and _num_events_in_wait_list_ is 0, + or + ** if event objects in _event_wait_list_ are not valid events. * {CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST} if the execution status of any of the events in _event_wait_list_ is a negative integer value. * {CL_OUT_OF_RESOURCES} if there is a failure to allocate resources @@ -13355,7 +13413,6 @@ Otherwise, it returns one of the following errors: required by the OpenCL implementation on the host. -- - === Retaining and Releasing Semaphores [open,refpage='clReleaseSemaphoreKHR',desc='Release a semaphore object',type='protos'] @@ -14341,6 +14398,11 @@ ifdef::cl_khr_command_buffer_multi_device[] _command_queue_ is `NULL`, then only one command-queue must have been set on _command_buffer_ creation; otherwise, _command_queue_ must not be `NULL`. endif::cl_khr_command_buffer_multi_device[] + * _properties_ specifies a list of properties for the command and their + corresponding values. Each property name is immediately followed by the + corresponding desired value. The list is terminated with 0. The + {cl_khr_command_buffer_EXT} extension does not define any properties, but + supported properties may be defined by layered extensions in future. * _sync_point_wait_list_, _num_sync_points_in_wait_list_ specify synchronization-points that need to complete before this particular command can be executed. @@ -14403,6 +14465,7 @@ ifdef::cl_khr_command_buffer_multi_device[] associated with _command_queue_ and _command_buffer_ is not the same. endif::cl_khr_command_buffer_multi_device[] * {CL_INVALID_OPERATION} if _command_buffer_ has been finalized. + * {CL_INVALID_VALUE} if values specified in _properties_ are not valid. * {CL_INVALID_VALUE} if _mutable_handle_ is not `NULL`. * {CL_INVALID_SYNC_POINT_WAIT_LIST_KHR} if _sync_point_wait_list_ is `NULL` and _num_sync_points_in_wait_list_ is > 0, or @@ -14435,6 +14498,11 @@ ifdef::cl_khr_command_buffer_multi_device[] _command_queue_ is `NULL`, then only one command-queue must have been set on _command_buffer_ creation; otherwise, _command_queue_ must not be `NULL`. endif::cl_khr_command_buffer_multi_device[] + * _properties_ specifies a list of properties for the command and their + corresponding values. Each property name is immediately followed by the + corresponding desired value. The list is terminated with 0. The + {cl_khr_command_buffer_EXT} extension does not define any properties, but + supported properties may be defined by layered extensions in future. * _src_buffer_, _dst_buffer_, _src_offset_, _dst_offset_, _size_ refer to {clEnqueueCopyBuffer}. * _sync_point_wait_list_, _num_sync_points_in_wait_list_ specify @@ -14503,6 +14571,7 @@ New errors: * {CL_INVALID_COMMAND_BUFFER_KHR} if _command_buffer_ is not a valid command-buffer. * {CL_INVALID_OPERATION} if _command_buffer_ has been finalized. + * {CL_INVALID_VALUE} if values specified in _properties_ are not valid. * {CL_INVALID_VALUE} if _mutable_handle_ is not `NULL`. -- @@ -14526,6 +14595,11 @@ ifdef::cl_khr_command_buffer_multi_device[] _command_queue_ is `NULL`, then only one command-queue must have been set on _command_buffer_ creation; otherwise, _command_queue_ must not be `NULL`. endif::cl_khr_command_buffer_multi_device[] + * _properties_ specifies a list of properties for the command and their + corresponding values. Each property name is immediately followed by the + corresponding desired value. The list is terminated with 0. The + {cl_khr_command_buffer_EXT} extension does not define any properties, but + supported properties may be defined by layered extensions in future. * _src_origin_, _dst_origin_, _region_, _src_row_pitch_, _src_slice_pitch_, _dst_row_pitch_, _dst_slice_pitch_ refer to {clEnqueueCopyBufferRect}. @@ -14612,6 +14686,7 @@ New errors: * {CL_INVALID_COMMAND_BUFFER_KHR} if _command_buffer_ is not a valid command-buffer. * {CL_INVALID_OPERATION} if _command_buffer_ has been finalized. + * {CL_INVALID_VALUE} if values specified in _properties_ are not valid. * {CL_INVALID_VALUE} if _mutable_handle_ is not `NULL`. -- @@ -14635,6 +14710,11 @@ ifdef::cl_khr_command_buffer_multi_device[] _command_queue_ is `NULL`, then only one command-queue must have been set on _command_buffer_ creation; otherwise, _command_queue_ must not be `NULL`. endif::cl_khr_command_buffer_multi_device[] + * _properties_ specifies a list of properties for the command and their + corresponding values. Each property name is immediately followed by the + corresponding desired value. The list is terminated with 0. The + {cl_khr_command_buffer_EXT} extension does not define any properties, but + supported properties may be defined by layered extensions in future. * _src_buffer_, _dst_image_, _src_offset_, _dst_origin_, _region_ refer to {clEnqueueCopyBufferToImage} * _sync_point_wait_list_, _num_sync_points_in_wait_list_ specify @@ -14704,6 +14784,7 @@ New errors: * {CL_INVALID_COMMAND_BUFFER_KHR} if _command_buffer_ is not a valid command-buffer. * {CL_INVALID_OPERATION} if _command_buffer_ has been finalized. + * {CL_INVALID_VALUE} if values specified in _properties_ are not valid. * {CL_INVALID_VALUE} if _mutable_handle_ is not `NULL`. -- @@ -14726,6 +14807,11 @@ ifdef::cl_khr_command_buffer_multi_device[] _command_queue_ is `NULL`, then only one command-queue must have been set on _command_buffer_ creation; otherwise, _command_queue_ must not be `NULL`. endif::cl_khr_command_buffer_multi_device[] + * _properties_ specifies a list of properties for the command and their + corresponding values. Each property name is immediately followed by the + corresponding desired value. The list is terminated with 0. The + {cl_khr_command_buffer_EXT} extension does not define any properties, but + supported properties may be defined by layered extensions in future. * _src_image_, _dst_image_, _src_origin_, _dst_origin_, _region_ refer to {clEnqueueCopyImage}. * _sync_point_wait_list_, _num_sync_points_in_wait_list_ specify @@ -14802,6 +14888,7 @@ New errors: * {CL_INVALID_COMMAND_BUFFER_KHR} if _command_buffer_ is not a valid command-buffer. * {CL_INVALID_OPERATION} if _command_buffer_ has been finalized. + * {CL_INVALID_VALUE} if values specified in _properties_ are not valid. * {CL_INVALID_VALUE} if _mutable_handle_ is not `NULL`. -- @@ -14825,6 +14912,11 @@ ifdef::cl_khr_command_buffer_multi_device[] _command_queue_ is `NULL`, then only one command-queue must have been set on _command_buffer_ creation; otherwise, _command_queue_ must not be `NULL`. endif::cl_khr_command_buffer_multi_device[] + * _properties_ specifies a list of properties for the command and their + corresponding values. Each property name is immediately followed by the + corresponding desired value. The list is terminated with 0. The + {cl_khr_command_buffer_EXT} extension does not define any properties, but + supported properties may be defined by layered extensions in future. * _src_image_, _dst_buffer_, _src_origin_, _region_, _dst_offset_ refer to {clEnqueueCopyImageToBuffer}. * _sync_point_wait_list_, _num_sync_points_in_wait_list_ specify @@ -14894,6 +14986,7 @@ New errors: * {CL_INVALID_COMMAND_BUFFER_KHR} if _command_buffer_ is not a valid command-buffer. * {CL_INVALID_OPERATION} if _command_buffer_ has been finalized. + * {CL_INVALID_VALUE} if values specified in _properties_ are not valid. * {CL_INVALID_VALUE} if _mutable_handle_ is not `NULL`. -- @@ -14925,6 +15018,11 @@ ifdef::cl_khr_command_buffer_multi_device[] _command_queue_ is `NULL`, then only one command-queue must have been set on _command_buffer_ creation; otherwise, _command_queue_ must not be `NULL`. endif::cl_khr_command_buffer_multi_device[] + * _properties_ specifies a list of properties for the command and their + corresponding values. Each property name is immediately followed by the + corresponding desired value. The list is terminated with 0. The + {cl_khr_command_buffer_EXT} extension does not define any properties, but + supported properties may be defined by layered extensions in future. * _buffer_, _pattern_, _pattern_size_, _offset_, _size_ refer to {clEnqueueFillBuffer}. * _sync_point_wait_list_, _num_sync_points_in_wait_list_ specify @@ -14993,6 +15091,7 @@ New errors: * {CL_INVALID_COMMAND_BUFFER_KHR} if _command_buffer_ is not a valid command-buffer. * {CL_INVALID_OPERATION} if _command_buffer_ has been finalized. + * {CL_INVALID_VALUE} if values specified in _properties_ are not valid. * {CL_INVALID_VALUE} if _mutable_handle_ is not `NULL`. -- @@ -15023,6 +15122,11 @@ ifdef::cl_khr_command_buffer_multi_device[] _command_queue_ is `NULL`, then only one command-queue must have been set on _command_buffer_ creation; otherwise, _command_queue_ must not be `NULL`. endif::cl_khr_command_buffer_multi_device[] + * _properties_ specifies a list of properties for the command and their + corresponding values. Each property name is immediately followed by the + corresponding desired value. The list is terminated with 0. The + {cl_khr_command_buffer_EXT} extension does not define any properties, but + supported properties may be defined by layered extensions in future. * _image_, _fill_color_, _origin_, _region_ refer to {clEnqueueFillImage}. * _sync_point_wait_list_, _num_sync_points_in_wait_list_ specify synchronization-points that need to complete before this particular @@ -15090,6 +15194,7 @@ New errors: * {CL_INVALID_COMMAND_BUFFER_KHR} if _command_buffer_ is not a valid command-buffer. * {CL_INVALID_OPERATION} if _command_buffer_ has been finalized. + * {CL_INVALID_VALUE} if values specified in _properties_ are not valid. * {CL_INVALID_VALUE} if _mutable_handle_ is not `NULL`. -- @@ -15125,7 +15230,7 @@ ifdef::cl_khr_command_buffer_mutable_dispatch[] The {cl_khr_command_buffer_EXT} extension does not define any properties, but supported properties defined by extensions are defined in the <> table. + by clCommandNDRangeKernelKHR>> table. endif::cl_khr_command_buffer_mutable_dispatch[] * _kernel_ is a valid kernel object which **must** have its arguments set. Any changes to _kernel_ after calling {clCommandNDRangeKernelKHR}, such @@ -15337,8 +15442,8 @@ New errors: * {CL_INVALID_COMMAND_BUFFER_KHR} if _command_buffer_ is not a valid command-buffer. - * {CL_INVALID_VALUE} if values specified in _properties_ are not valid * {CL_INVALID_OPERATION} if _command_buffer_ has been finalized. + * {CL_INVALID_VALUE} if values specified in _properties_ are not valid. * {CL_INVALID_VALUE} if the {cl_khr_command_buffer_mutable_dispatch_EXT} extension is not supported and _mutable_handle_ is not `NULL`. * {CL_INVALID_OPERATION} if the device associated with _command_queue_ @@ -15387,6 +15492,11 @@ ifdef::cl_khr_command_buffer_multi_device[] _command_queue_ is `NULL`, then only one command-queue must have been set on _command_buffer_ creation; otherwise, _command_queue_ must not be `NULL`. endif::cl_khr_command_buffer_multi_device[] + * _properties_ specifies a list of properties for the command and thier + corresponding values. Each property name is immediately followed by the + corresponding desired value. The list is terminated with 0. The + {cl_khr_command_buffer_EXT} extension does not define any properties, but + supported properties may be defined by layered extensions in future. * _dst_ptr_ is the pointer to a host (if the device supports system SVM) or SVM memory allocation where data is copied to. * _src_ptr_ is the pointer to a host (if the device supports system SVM) @@ -15461,6 +15571,7 @@ New errors: * {CL_INVALID_COMMAND_BUFFER_KHR} if _command_buffer_ is not a valid command-buffer. * {CL_INVALID_OPERATION} if _command_buffer_ has been finalized. + * {CL_INVALID_VALUE} if values specified in _properties_ are not valid. * {CL_INVALID_VALUE} if _mutable_handle_ is not `NULL`. -- @@ -15484,6 +15595,11 @@ ifdef::cl_khr_command_buffer_multi_device[] _command_queue_ is `NULL`, then only one command-queue must have been set on _command_buffer_ creation; otherwise, _command_queue_ must not be `NULL`. endif::cl_khr_command_buffer_multi_device[] + * _properties_ specifies a list of properties for the command and their + corresponding values. Each property name is immediately followed by the + corresponding desired value. The list is terminated with 0. The + {cl_khr_command_buffer_EXT} extension does not define any properties, but + supported properties may be defined by layered extensions in future. * _svm_ptr_ is a pointer to a (if the device supports system SVM) or SVM memory region that will be filled with _pattern_. It must be aligned to _pattern_size_ bytes. @@ -15573,6 +15689,7 @@ New errors: * {CL_INVALID_COMMAND_BUFFER_KHR} if _command_buffer_ is not a valid command-buffer. * {CL_INVALID_OPERATION} if _command_buffer_ has been finalized. + * {CL_INVALID_VALUE} if values specified in _properties_ are not valid. * {CL_INVALID_VALUE} if _mutable_handle_ is not `NULL`. -- @@ -16110,12 +16227,11 @@ include::{generated}/api/version-notes/CL_MUTABLE_COMMAND_COMMAND_TYPE_KHR.ascii The list of supported event command types defined by {clGetEventInfo} is used with the matching command. -| {CL_MUTABLE_DISPATCH_PROPERTIES_ARRAY_KHR_anchor} +| {CL_MUTABLE_COMMAND_PROPERTIES_ARRAY_KHR_anchor} -include::{generated}/api/version-notes/CL_MUTABLE_DISPATCH_PROPERTIES_ARRAY_KHR.asciidoc[] - | {cl_ndrange_kernel_command_properties_khr_TYPE}[] - | Return the properties argument specified on _command_ recording with - {clCommandNDRangeKernelKHR}. +include::{generated}/api/version-notes/CL_MUTABLE_COMMAND_PROPERTIES_ARRAY_KHR.asciidoc[] + | {cl_command_properties_khr_TYPE}[] + | Return the properties argument specified on _command_ recording. If the properties argument specified on creation of _command_ was not `NULL`, the implementation must return the values specified in the @@ -16123,10 +16239,8 @@ include::{generated}/api/version-notes/CL_MUTABLE_DISPATCH_PROPERTIES_ARRAY_KHR. properties. If the properties argument specified on creation of _command_ was - `NULL`, or _command_ was not recorded from a - {clCommandNDRangeKernelKHR} command, the implementation must return - _param_value_size_ret_ equal to 0, indicating that there are no - properties to be returned. + `NULL`, the implementation must return _param_value_size_ret_ equal to 0, + indicating that there are no properties to be returned. | {CL_MUTABLE_DISPATCH_KERNEL_KHR_anchor} include::{generated}/api/version-notes/CL_MUTABLE_DISPATCH_KERNEL_KHR.asciidoc[] diff --git a/c/dictionary.asciidoc b/c/dictionary.asciidoc index ef7a9401..bde39ebc 100644 --- a/c/dictionary.asciidoc +++ b/c/dictionary.asciidoc @@ -4,3 +4,5 @@ include::{generated}/api/api-dictionary-no-links.asciidoc[] include::{generated}/api/ext-dictionary-no-links.asciidoc[] + +include::{generated}/meta/c-function-dictionary.asciidoc[] diff --git a/c/features.txt b/c/features.txt index b7e636dd..35a649c8 100644 --- a/c/features.txt +++ b/c/features.txt @@ -18,3 +18,4 @@ __opencl_c_integer_dot_product_input_4x8bit_packed __opencl_c_kernel_clock_scope_device __opencl_c_kernel_clock_scope_work_group __opencl_c_kernel_clock_scope_sub_group +__opencl_c_ext_image_unorm_int_2_101010 diff --git a/c/functions.txt b/c/functions.txt new file mode 100644 index 00000000..c9a9f640 --- /dev/null +++ b/c/functions.txt @@ -0,0 +1,99 @@ +get_kernel_preferred_work_group_size_multiple +get_sub_group_size +get_max_sub_group_size +get_num_sub_groups +get_enqueued_num_sub_groups +get_sub_group_id +get_sub_group_local_id +sub_group_barrier +sub_group_all +sub_group_any +sub_group_broadcast +sub_group_reduce_add +sub_group_reduce_min +sub_group_reduce_max +sub_group_scan_exclusive_add +sub_group_scan_exclusive_min +sub_group_scan_exclusive_max +sub_group_scan_inclusive_add +sub_group_scan_inclusive_min +sub_group_scan_inclusive_max +sub_group_reserve_read_pipe +sub_group_reserve_write_pipe +sub_group_commit_read_pipe +sub_group_commit_write_pipe +get_kernel_sub_group_count_for_ndrange +get_kernel_max_sub_group_size_for_ndrange +sub_group_non_uniform_broadcast +sub_group_broadcast_first +sub_group_ballot +sub_group_inverse_ballot +sub_group_ballot_bit_extract +sub_group_ballot_bit_count +sub_group_ballot_inclusive_scan +sub_group_ballot_exclusive_scan +sub_group_ballot_find_lsb +sub_group_ballot_find_msb +get_sub_group_eq_mask +get_sub_group_ge_mask +get_sub_group_gt_mask +get_sub_group_le_mask +get_sub_group_lt_mask +sub_group_clustered_reduce_add +sub_group_clustered_reduce_mul +sub_group_clustered_reduce_min +sub_group_clustered_reduce_max +sub_group_clustered_reduce_and +sub_group_clustered_reduce_or +sub_group_clustered_reduce_xor +sub_group_clustered_reduce_logical_and +sub_group_clustered_reduce_logical_or +sub_group_clustered_reduce_logical_xor +sub_group_broadcast +sub_group_reduce_add +sub_group_reduce_min +sub_group_reduce_max +sub_group_scan_exclusive_add +sub_group_scan_exclusive_min +sub_group_scan_exclusive_max +sub_group_scan_inclusive_add +sub_group_scan_inclusive_min +sub_group_scan_inclusive_max +sub_group_non_uniform_reduce_add +sub_group_non_uniform_reduce_mul +sub_group_non_uniform_reduce_min +sub_group_non_uniform_reduce_max +sub_group_non_uniform_reduce_and +sub_group_non_uniform_reduce_or +sub_group_non_uniform_reduce_xor +sub_group_non_uniform_reduce_logical_and +sub_group_non_uniform_reduce_logical_or +sub_group_non_uniform_reduce_logical_xor +sub_group_non_uniform_scan_inclusive_add +sub_group_non_uniform_scan_inclusive_mul +sub_group_non_uniform_scan_inclusive_min +sub_group_non_uniform_scan_inclusive_max +sub_group_non_uniform_scan_inclusive_and +sub_group_non_uniform_scan_inclusive_or +sub_group_non_uniform_scan_inclusive_xor +sub_group_non_uniform_scan_inclusive_logical_and +sub_group_non_uniform_scan_inclusive_logical_or +sub_group_non_uniform_scan_inclusive_logical_xor +sub_group_non_uniform_scan_exclusive_add +sub_group_non_uniform_scan_exclusive_mul +sub_group_non_uniform_scan_exclusive_min +sub_group_non_uniform_scan_exclusive_max +sub_group_non_uniform_scan_exclusive_and +sub_group_non_uniform_scan_exclusive_or +sub_group_non_uniform_scan_exclusive_xor +sub_group_non_uniform_scan_exclusive_logical_and +sub_group_non_uniform_scan_exclusive_logical_or +sub_group_non_uniform_scan_exclusive_logical_xor +sub_group_elect +sub_group_non_uniform_all +sub_group_non_uniform_any +sub_group_non_uniform_all_equal +sub_group_shuffle +sub_group_shuffle_xor +sub_group_shuffle_up +sub_group_shuffle_down diff --git a/config/rouge/lib/rouge/lexers/opencl.rb b/config/rouge/lib/rouge/lexers/opencl.rb index 1e1457c8..47c6edc5 100644 --- a/config/rouge/lib/rouge/lexers/opencl.rb +++ b/config/rouge/lib/rouge/lexers/opencl.rb @@ -158,7 +158,7 @@ class OpenCL < Cpp cl_command_buffer_state_khr cl_command_buffer_properties_khr cl_command_buffer_flags_khr - cl_ndrange_kernel_command_properties_khr + cl_command_properties_khr cl_mutable_command_khr cl_mutable_dispatch_fields_khr cl_mutable_command_info_khr diff --git a/env/common_properties.asciidoc b/env/common_properties.asciidoc index 8019b751..2b732c78 100644 --- a/env/common_properties.asciidoc +++ b/env/common_properties.asciidoc @@ -384,6 +384,11 @@ channel data types. | *UnormInt101010_2* | {CL_UNORM_INT_101010_2} +ifdef::cl_ext_image_unorm_int_2_101010[] +| 21 +| *UnormInt2_101010EXT* +| {CL_UNORM_INT_2_101010_EXT} +endif::cl_ext_image_unorm_int_2_101010[] |==== [NOTE] diff --git a/env/extensions.asciidoc b/env/extensions.asciidoc index f0ffc5d6..aa963e51 100644 --- a/env/extensions.asciidoc +++ b/env/extensions.asciidoc @@ -39,7 +39,7 @@ in a SPIR-V module using *OpExtension*. If the OpenCL environment supports the extension {cl_khr_3d_image_writes_EXT}, then the environment must accept _Image_ operands to *OpImageWrite* that -are declared with with dimensionality _Dim_ equal to *3D*. +are declared with dimensionality _Dim_ equal to *3D*. ==== {cl_khr_depth_images_EXT} @@ -57,7 +57,7 @@ Additionally, the following Image Channel Orders may be returned by ==== {cl_khr_device_enqueue_local_arg_types_EXT} If the OpenCL environment supports the extension -{cl_khr_device_enqueue_local_arg_types_EXT}, then then environment will allow +{cl_khr_device_enqueue_local_arg_types_EXT}, then the environment will allow _Invoke_ functions to be passed to *OpEnqueueKernel* with *Workgroup* memory pointer parameters of any type. diff --git a/env/image_addressing_and_filtering.asciidoc b/env/image_addressing_and_filtering.asciidoc index bd9be74d..c6f4f1fd 100644 --- a/env/image_addressing_and_filtering.asciidoc +++ b/env/image_addressing_and_filtering.asciidoc @@ -1030,6 +1030,12 @@ to the data vector component type or scalar type: `UnormInt24`, + `HalfFloat`, + `Float` + + +ifdef::cl_ext_image_unorm_int_2_101010[] +Additionally if the {cl_ext_image_unorm_int_2_101010_EXT} extension is +supported: `UnormInt2_101010EXT` +endif::cl_ext_image_unorm_int_2_101010[] + |*OpTypeFloat*, with _Width_ equal to 16 or 32. |`SignedInt8`, diff --git a/ext/introduction.asciidoc b/ext/introduction.asciidoc index 4c4cf584..3ff391de 100644 --- a/ext/introduction.asciidoc +++ b/ext/introduction.asciidoc @@ -189,7 +189,7 @@ 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. -{clGetExtensionFunctionAddressForPlatform} may not be be used to query for core +{clGetExtensionFunctionAddressForPlatform} may not be used to query for core (non-extension) functions in OpenCL. For extension functions that may be queried using {clGetExtensionFunctionAddressForPlatform}, implementations may also choose to diff --git a/extensions/cl_intel_subgroup_matrix_multiply_accumulate.asciidoc b/extensions/cl_intel_subgroup_matrix_multiply_accumulate.asciidoc index d6f492ba..64d4b348 100644 --- a/extensions/cl_intel_subgroup_matrix_multiply_accumulate.asciidoc +++ b/extensions/cl_intel_subgroup_matrix_multiply_accumulate.asciidoc @@ -95,6 +95,27 @@ int2 intel_sub_group_u8_u8_matrix_mad_k32(uint2 a, uint8 b, int2 acc); int4 intel_sub_group_u8_u8_matrix_mad_k32(uint4 a, uint8 b, int4 acc); int8 intel_sub_group_u8_u8_matrix_mad_k32(uint8 a, uint8 b, int8 acc); +// 4-bit matrices: +int intel_sub_group_i4_i4_matrix_mad_k64(int a, int8 b, int acc); +int2 intel_sub_group_i4_i4_matrix_mad_k64(int2 a, int8 b, int2 acc); +int4 intel_sub_group_i4_i4_matrix_mad_k64(int4 a, int8 b, int4 acc); +int8 intel_sub_group_i4_i4_matrix_mad_k64(int8 a, int8 b, int8 acc); + +int intel_sub_group_i4_u4_matrix_mad_k64(int a, uint8 b, int acc); +int2 intel_sub_group_i4_u4_matrix_mad_k64(int2 a, uint8 b, int2 acc); +int4 intel_sub_group_i4_u4_matrix_mad_k64(int4 a, uint8 b, int4 acc); +int8 intel_sub_group_i4_u4_matrix_mad_k64(int8 a, uint8 b, int8 acc); + +int intel_sub_group_u4_i4_matrix_mad_k64(uint a, int8 b, int acc); +int2 intel_sub_group_u4_i4_matrix_mad_k64(uint2 a, int8 b, int2 acc); +int4 intel_sub_group_u4_i4_matrix_mad_k64(uint4 a, int8 b, int4 acc); +int8 intel_sub_group_u4_i4_matrix_mad_k64(uint8 a, int8 b, int8 acc); + +int intel_sub_group_u4_u4_matrix_mad_k64(uint a, uint8 b, int acc); +int2 intel_sub_group_u4_u4_matrix_mad_k64(uint2 a, uint8 b, int2 acc); +int4 intel_sub_group_u4_u4_matrix_mad_k64(uint4 a, uint8 b, int4 acc); +int8 intel_sub_group_u4_u4_matrix_mad_k64(uint8 a, uint8 b, int8 acc); + // bfloat16 matrices: float intel_sub_group_bf16_bf16_matrix_mad_k16(int a, int8 b, float acc); float2 intel_sub_group_bf16_bf16_matrix_mad_k16(int2 a, int8 b, float2 acc); @@ -134,17 +155,50 @@ int2 intel_sub_group_u8_u8_matrix_mad_k32(ushort2 a, uint8 b, int2 acc); int4 intel_sub_group_u8_u8_matrix_mad_k32(ushort4 a, uint8 b, int4 acc); int8 intel_sub_group_u8_u8_matrix_mad_k32(ushort8 a, uint8 b, int8 acc); -// bfloat16 matrices: +// 4-bit matrices: +int intel_sub_group_i4_i4_matrix_mad_k64(short a, int8 b, int acc); +int2 intel_sub_group_i4_i4_matrix_mad_k64(short2 a, int8 b, int2 acc); +int4 intel_sub_group_i4_i4_matrix_mad_k64(short4 a, int8 b, int4 acc); +int8 intel_sub_group_i4_i4_matrix_mad_k64(short8 a, int8 b, int8 acc); + +int intel_sub_group_i4_u4_matrix_mad_k64(short a, uint8 b, int acc); +int2 intel_sub_group_i4_u4_matrix_mad_k64(short2 a, uint8 b, int2 acc); +int4 intel_sub_group_i4_u4_matrix_mad_k64(short4 a, uint8 b, int4 acc); +int8 intel_sub_group_i4_u4_matrix_mad_k64(short8 a, uint8 b, int8 acc); + +int intel_sub_group_u4_i4_matrix_mad_k64(ushort a, int8 b, int acc); +int2 intel_sub_group_u4_i4_matrix_mad_k64(ushort2 a, int8 b, int2 acc); +int4 intel_sub_group_u4_i4_matrix_mad_k64(ushort4 a, int8 b, int4 acc); +int8 intel_sub_group_u4_i4_matrix_mad_k64(ushort8 a, int8 b, int8 acc); + +int intel_sub_group_u4_u4_matrix_mad_k64(ushort a, uint8 b, int acc); +int2 intel_sub_group_u4_u4_matrix_mad_k64(ushort2 a, uint8 b, int2 acc); +int4 intel_sub_group_u4_u4_matrix_mad_k64(ushort4 a, uint8 b, int4 acc); +int8 intel_sub_group_u4_u4_matrix_mad_k64(ushort8 a, uint8 b, int8 acc); + +// bfloat16 matrices with float accumulator: float intel_sub_group_bf16_bf16_matrix_mad_k16(short a, int8 b, float acc); float2 intel_sub_group_bf16_bf16_matrix_mad_k16(short2 a, int8 b, float2 acc); float4 intel_sub_group_bf16_bf16_matrix_mad_k16(short4 a, int8 b, float4 acc); float8 intel_sub_group_bf16_bf16_matrix_mad_k16(short8 a, int8 b, float8 acc); -// fp16 matrices: +// fp16 matrices with float accumulator: float intel_sub_group_f16_f16_matrix_mad_k16(short a, int8 b, float acc); float2 intel_sub_group_f16_f16_matrix_mad_k16(short2 a, int8 b, float2 acc); float4 intel_sub_group_f16_f16_matrix_mad_k16(short4 a, int8 b, float4 acc); float8 intel_sub_group_f16_f16_matrix_mad_k16(short8 a, int8 b, float8 acc); + +// bfloat16 with bfloat16 accumulator: +short intel_sub_group_bf16_bf16_matrix_mad_k16(short a, int8 b, short acc); +short2 intel_sub_group_bf16_bf16_matrix_mad_k16(short2 a, int8 b, short2 acc); +short4 intel_sub_group_bf16_bf16_matrix_mad_k16(short4 a, int8 b, short4 acc); +short8 intel_sub_group_bf16_bf16_matrix_mad_k16(short8 a, int8 b, short8 acc); + +// fp16 matrices with fp16 accumulator: +half intel_sub_group_f16_f16_matrix_mad_k16(short a, int8 b, half acc); +half2 intel_sub_group_f16_f16_matrix_mad_k16(short2 a, int8 b, half2 acc); +half4 intel_sub_group_f16_f16_matrix_mad_k16(short4 a, int8 b, half4 acc); +half8 intel_sub_group_f16_f16_matrix_mad_k16(short8 a, int8 b, half8 acc); ---- == Modifications to the OpenCL C Specification @@ -213,10 +267,13 @@ For this list of functions: * `M` may be equal to 1, 2, 4, or 8. * `N` must be equal to 8 for some devices or 16 for other devices. In other words, the only supported subgroup sizes are 8 and 16. -* Supported integer matrix types for `a` and `b` are any combination of signed or unsigned 8-bit integers. -For these integer matrix types, the accumulation value `acc` and result value are signed 32-bit integers, and `K` must be equal to 32. +* Supported integer matrix types for `a` and `b` are any combination of signed or unsigned 8-bit integers, or any combination of signed or unsigned 4-bit integers. +For 8-bit matrices, `K` must be equal to 32. For 4-bit matrices, `K` must be equal to 64. +For these integer matrix types, the accumulation value `acc` and result value are signed 32-bit integers. * The supported floating-point matrix types for `a` and `b` are fp16 (half) or bfloat16. -For these floating-point matrix type, the accumulation value `acc` and result value are 32-bit floating-point values, and `K` must be equal to 16. +For these floating-point matrices, `K` must be equal to 16. +The accumulation value `acc` and result value are 32-bit floating-point values. +For devices with `N` equal to 16, the accumulation value `acc` and result value may also be fp16 for fp16 matrices, or bfloat16 for bfloat16 matrices. == Coding Sample @@ -288,12 +345,10 @@ int2 intel_sub_group_i8_i8_matrix_mad_k32(int2 a, int8 b, int2 acc) == Issues -None. - . Should this extension use signed or unsigned types to represent fp16 and bf16 data? + -- -`RESOLVED`: This extension will use signed types to represent fp16 and bf16 data even though this is inconsistent with other extensions such as cl_intel_bfloat16 conversions. +`RESOLVED`: This extension will use signed types to represent fp16 and bf16 data even though this is inconsistent with other extensions, such as the `cl_intel_bfloat16_conversions` extension. This inconsistency may be addressed in a future extension or in a future version of this extension. Applications are encouraged to use `as_type` to reinterpret unsigned data as signed data as needed to use the functions added by this extension. -- @@ -306,6 +361,7 @@ Applications are encouraged to use `as_type` to reinterpret unsigned data as sig |======================================== |Rev|Date|Author|Changes |1.0.0|2022-05-18|Ben Ashbaugh|*Initial public revision* +|1.0.0|2024-06-06|Ben Ashbaugh|Document additional functions. |======================================== //************************************************************************ diff --git a/extensions/cl_intel_unified_shared_memory.asciidoc b/extensions/cl_intel_unified_shared_memory.asciidoc index 934dbafa..05538f92 100644 --- a/extensions/cl_intel_unified_shared_memory.asciidoc +++ b/extensions/cl_intel_unified_shared_memory.asciidoc @@ -1278,6 +1278,29 @@ For some devices, this query will return the same value as `CL_DEVICE_MAX_MEM_AL * Do nothing and keep the existing error behavior. -- +. Should it be an error to allocate zero bytes? ++ +-- +*UNRESOLVED*: +Currently, attempting to allocate zero bytes fails and returns `CL_INVALID_BUFFER_SIZE`. +This is consistent with SVM, where *clSVMAlloc* fails and returns a `NULL` pointer if the size to allocate is zero. +It is also consistent with CUDA, where *cuMemAlloc*, etc. returns an error if the size to allocate is zero. + +However, it is not necessarily consistent with other memory allocation functions. For example: + +* The result of calling `malloc(0)` is implementation-defined: it can either return a `NULL` pointer or a unique non-null pointer that must be freed. +If a `NULL` pointer is returned then `errno` may be set to an implementation-defined value. +If a unique non-null pointer is returned then it cannot be dereferenced. +* Allocating an array of zero elements using `new` must return a non-null pointer, though dereferencing the pointer is undefined. + +Possible resolutions: + +* Allow zero-sized allocations and require returning a non-null pointer that must be freed. +* Allow zero-sized allocations but allow returning a `NULL` pointer. No error would be generated, even if a `NULL` pointer is returned. +* Specify that this case is implementation-defined. +* Do nothing and keep the existing error behavior. +-- + == Revision History [cols="5,15,15,70"] diff --git a/scripts/gen_c_feature_dictionary.py b/scripts/gen_dictionary_from_file.py similarity index 61% rename from scripts/gen_c_feature_dictionary.py rename to scripts/gen_dictionary_from_file.py index f9b07173..f2f6a72d 100644 --- a/scripts/gen_c_feature_dictionary.py +++ b/scripts/gen_dictionary_from_file.py @@ -11,40 +11,41 @@ if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('-features', action='store', + parser.add_argument('-i', action='store', default='', - help='File with OpenCL C features to generate, one per line') + help='Input file with dictionary source to generate, one per line, stdin is used if no file is provided.') parser.add_argument('-o', action='store', default='', - help='Output file in which to store the feature dictionary. stdout is used if no file is provided.') + help='Output file in which to store the generated dictionary, stdout is used if no file is provided.') args = parser.parse_args() - features = [] - if len(args.features) > 0: - print('Generating feature dictionaries from: ' + args.features) - with open(args.features) as f: - features = f.readlines() + entries = [] + if args.i: + print('Generating dictionary from source file: ' + args.i) + with open(args.i) as f: + entries = f.readlines() else: - print('Reading feature dictionaries from stdin...') + print('Generating dictionary from stdin.') for line in sys.stdin: - features.append(line) + entries.append(line) print('Generating...\n') numberOfFeatures = 0 + numberOfEntries = 0 if args.o: outfile = open(args.o, 'w') else: outfile = sys.stdout - for name in features: + for name in entries: name = name.strip() if len(name) == 0: continue # OpenCL C features start with __opencl_c if name.startswith('__opencl_c'): - #print('found enum: ' + name) + #print('found feature: ' + name) # Create a variant of the name that precedes underscores with # "zero width" spaces. This causes some long names to be @@ -74,14 +75,24 @@ numberOfFeatures = numberOfFeatures + 1 - # everything else is a function + # everything else else: - print('Unexpected feature name: ' + name + ', features should start with __opencl_c!') - sys.exit(1) + htmlName = name[:4] + name[4:].replace("_", "_") + otherName = name[:4] + name[4:].replace("_", "_​") + + outfile.write('// ' + name + '\n') + outfile.write('ifdef::backend-html5[]\n') + outfile.write(':' + name + ': pass:q[' + htmlName + ']\n') + outfile.write('endif::[]\n') + outfile.write('ifndef::backend-html5[]\n') + outfile.write(':' + name + ': pass:q[' + otherName + ']\n') + outfile.write('endif::[]\n') + + numberOfEntries = numberOfEntries + 1 outfile.write('\n') if args.o: outfile.close() - print('Found ' + str(numberOfFeatures) + ' features.') + print('Found ' + str(numberOfFeatures) + ' OpenCL C features and ' + str(numberOfEntries) + ' other entries.') diff --git a/xml/cl.xml b/xml/cl.xml index c7caaab9..a4396dce 100644 --- a/xml/cl.xml +++ b/xml/cl.xml @@ -247,7 +247,7 @@ server's OpenCL/api-docs repository. typedef cl_uint cl_command_buffer_state_khr; typedef cl_properties cl_command_buffer_properties_khr; typedef cl_bitfield cl_command_buffer_flags_khr; - typedef cl_properties cl_ndrange_kernel_command_properties_khr; + typedef cl_properties cl_command_properties_khr; typedef struct _cl_mutable_command_khr* cl_mutable_command_khr; typedef cl_bitfield cl_mutable_dispatch_fields_khr; typedef cl_uint cl_mutable_command_info_khr; @@ -1622,7 +1622,8 @@ server's OpenCL/api-docs repository. - + + @@ -1796,7 +1797,7 @@ server's OpenCL/api-docs repository. - + @@ -1898,7 +1899,9 @@ server's OpenCL/api-docs repository. - + + + @@ -3129,6 +3132,7 @@ server's OpenCL/api-docs repository. cl_int clCommandBarrierWithWaitListKHR cl_command_buffer_khr command_buffer cl_command_queue command_queue + const cl_command_properties_khr* properties cl_uint num_sync_points_in_wait_list const cl_sync_point_khr* sync_point_wait_list cl_sync_point_khr* sync_point @@ -3138,6 +3142,7 @@ server's OpenCL/api-docs repository. cl_int clCommandCopyBufferKHR cl_command_buffer_khr command_buffer cl_command_queue command_queue + const cl_command_properties_khr* properties cl_mem src_buffer cl_mem dst_buffer size_t src_offset @@ -3152,6 +3157,7 @@ server's OpenCL/api-docs repository. cl_int clCommandCopyBufferRectKHR cl_command_buffer_khr command_buffer cl_command_queue command_queue + const cl_command_properties_khr* properties cl_mem src_buffer cl_mem dst_buffer const size_t* src_origin @@ -3170,6 +3176,7 @@ server's OpenCL/api-docs repository. cl_int clCommandCopyBufferToImageKHR cl_command_buffer_khr command_buffer cl_command_queue command_queue + const cl_command_properties_khr* properties cl_mem src_buffer cl_mem dst_image size_t src_offset @@ -3184,6 +3191,7 @@ server's OpenCL/api-docs repository. cl_int clCommandCopyImageKHR cl_command_buffer_khr command_buffer cl_command_queue command_queue + const cl_command_properties_khr* properties cl_mem src_image cl_mem dst_image const size_t* src_origin @@ -3198,6 +3206,7 @@ server's OpenCL/api-docs repository. cl_int clCommandCopyImageToBufferKHR cl_command_buffer_khr command_buffer cl_command_queue command_queue + const cl_command_properties_khr* properties cl_mem src_image cl_mem dst_buffer const size_t* src_origin @@ -3212,6 +3221,7 @@ server's OpenCL/api-docs repository. cl_int clCommandFillBufferKHR cl_command_buffer_khr command_buffer cl_command_queue command_queue + const cl_command_properties_khr* properties cl_mem buffer const void* pattern size_t pattern_size @@ -3226,6 +3236,7 @@ server's OpenCL/api-docs repository. cl_int clCommandFillImageKHR cl_command_buffer_khr command_buffer cl_command_queue command_queue + const cl_command_properties_khr* properties cl_mem image const void* fill_color const size_t* origin @@ -3239,7 +3250,7 @@ server's OpenCL/api-docs repository. cl_int clCommandNDRangeKernelKHR cl_command_buffer_khr command_buffer cl_command_queue command_queue - const cl_ndrange_kernel_command_properties_khr* properties + const cl_command_properties_khr* properties cl_kernel kernel cl_uint work_dim const size_t* global_work_offset @@ -3254,6 +3265,7 @@ server's OpenCL/api-docs repository. cl_int clCommandSVMMemcpyKHR cl_command_buffer_khr command_buffer cl_command_queue command_queue + const cl_command_properties_khr* properties void* dst_ptr const void* src_ptr size_t size @@ -3266,6 +3278,7 @@ server's OpenCL/api-docs repository. cl_int clCommandSVMMemFillKHR cl_command_buffer_khr command_buffer cl_command_queue command_queue + const cl_command_properties_khr* properties void* svm_ptr const void* pattern size_t pattern_size @@ -7152,13 +7165,14 @@ server's OpenCL/api-docs repository. - + + @@ -7204,13 +7218,14 @@ server's OpenCL/api-docs repository. - + + @@ -7248,7 +7263,7 @@ server's OpenCL/api-docs repository. - + @@ -7260,7 +7275,7 @@ server's OpenCL/api-docs repository. - + @@ -7395,7 +7410,7 @@ server's OpenCL/api-docs repository. - + @@ -7417,7 +7432,7 @@ server's OpenCL/api-docs repository. - + @@ -7432,7 +7447,7 @@ server's OpenCL/api-docs repository. - + @@ -7445,7 +7460,7 @@ server's OpenCL/api-docs repository. - + @@ -7555,5 +7570,10 @@ server's OpenCL/api-docs repository. + + + + +