= OpenCL-Registry

The OpenCL-Registry repository contains the OpenCL API and Extension
Registry, including specifications, reference pages and reference cards, and
the enumerant registry. It is also used as a backing store for the web view
of the registry at https://www.khronos.org/registry/cl/ ; commits to the
master branch of this repository will be reflected there.

Please file issues with the OpenCL API (specification bugs, feature
requests, etc.) on the companion https://github.com/KhronosGroup/OpenCL-Docs
repository.

Issues that should be filed in *this* repository include adding OpenCL
extension specifications, and problems with the content of the registry
*itself*.

== Reserving OpenCL Enumerant Ranges

OpenCL enumerants are now documented in the specification repository
https://github.com/KhronosGroup/OpenCL-Docs in the file
https://github.com/KhronosGroup/OpenCL-Docs/blob/master/xml/cl.xml

New enumerant ranges can be allocated by proposing a pull request to master
branch of OpenCL-Docs modifying `cl.xml`, following the
existing examples. Allocate ranges starting at the lowest free values
available (search for "`Reserved for vendor extensions`"). Ranges are not
officially allocated until your pull request is *accepted* into master
branch of the OpenCL-Docs repository. At that point you can use values from
your assigned range for API extensions.

== Adding Extension Specifications

Extension specification documents can be added by proposing a pull request
to master, adding the specification '.txt' file under
'extensions/<vendor>/filename.txt'. You must also:

* Modify 'extensions/registry.py' to include the extension, using the next
  free extension number. Execute the python script 'nextfree.py' in the
  'extensions/' directory to find the next free number. The extension `flags`
  must be marked as `public` , similar to other entries in 'registry.py',
  for the extension to be linked from the registry index page.
* Include that extension number in the extension specification document
* In the 'extensions/' directory, `make` to regenerate the HTML index file
  'clext.php' from 'registry.py'. If this doesn't succeed due to not having
  the right Python version or something like that, we'll take care of it
  when merging to master.

Sometimes extension text files contain inappropriate UTF-8 characters. They
should be restricted to the ASCII subset of UTF-8 at present. They can be
removed using the iconv Linux command-line tool via

    iconv -c -f utf-8 -t ascii filename.txt

(see internal Bugzilla issue 16141 for more).

We will be transitioning to an asciidoc-based extension specification format
at some point.

== Repository Contents

Interesting files in this repository include:

* 'index.php' - toplevel index page for the web view. This relies on PHP
  include files found elsewhere on https://www.khronos.org and so is not very useful
  in isolation.
* 'extensions/' - OpenCL extension specifications, grouped into
  vendor-specific subdirectories.
** 'extensions/registry.py' - extension registry.
** 'extensions/makeindex.py' - create HTML extension indices from 'registry.py'.
** 'extensions/nextfree.py' - determine the next free extension number in
   'registry.py'.
* 'sdk/' - OpenCL reference pages and reference cards. There are separate
  sets for each API version. The current (OpenCL 2.2) reference pages are
  extracted from the OpenCL Specification, so problems with these pages
  should be filed in the OpenCL-Docs repository - only the generated HTML
  for the reference pages is published here.
* 'specs/' - OpenCL specification documents.


