The Vulkan API Specification and related tools
Go to file
Jon Leech 6cdc56d0d7 Change log for November 11, 2016 Vulkan 1.0.33 spec update:
* Bump API patch number and header version number to 33 for this update.

Github Issues:

  * Added implicit external synchronization parameters to
    vkBegin/EndCommandBuffer, and fixed missing command pool host
    synchronization from per-command lists (public issue 398).
  * Started using git tags including the spec release number, such as
    'v1.0.32-core', instead of tags including the date of release, such as
    'v1.0-core-20161025' (public issue 405).

Internal Issues:

  * Add validity constraint for
    slink:VkImportMemoryWin32HandleInfoNV::pname:handle (internal issue
    #480).
  * Add scripts to compare two Vulkan HTML specifications, derived from W3
    htmldiff service (internal issue 525).
  * Relax requirement that memoryTypeBits can't depend on format, to allow
    it to differ only for depth/stencil formats (internal issue 544).
  * Add a new generator script to create a simple extension loader for
    Vulkan based on +vk.xml+ (internal issue 558).
  * Add the overlooked requirement that buffer and image memory
    alignment requirements must be a power of two in the
    <<resources-association,Resource Memory Association>> section
    (internal issue 569).

Other Issues:

  * Add a naming rule to the style guide for members of extension structures
    defining array lengths which are the same as array lengths of the core
    structure they are chained from.
  * Add a new generator to create a simple extension loader in
    +src/ext_loader/vulkan_ext.[ch]+ from +vk.xml+. This code can be
    included in your project, and is expected to be packaged in the Vulkan
    SDK provided by LunarG in the future.
2016-11-12 03:23:34 -08:00
doc/specs Change log for November 11, 2016 Vulkan 1.0.33 spec update: 2016-11-12 03:23:34 -08:00
out Change log for September 6, 2016 Vulkan 1.0.26 spec update: 2016-09-06 06:17:27 -07:00
src Change log for November 11, 2016 Vulkan 1.0.33 spec update: 2016-11-12 03:23:34 -08:00
.gitignore Change log for September 16, 2016 Vulkan 1.0.27 spec update: 2016-09-16 21:22:17 -07:00
COPYING.md Change log for September 23, 2016 Vulkan 1.0.28 spec update: 2016-09-24 01:54:47 -07:00
ChangeLog.txt Change log for November 11, 2016 Vulkan 1.0.33 spec update: 2016-11-12 03:23:34 -08:00
README.md Change log for August 26, 2016 Vulkan 1.0.25 spec update: 2016-08-28 03:47:19 -07:00

README.md

Vulkan API Documentation Project

This repository contains formal documentation of the Vulkan API. This includes the main API Specification, the reference (man) pages, the XML API Registry, and related tools and scripts.

Single-Branch Model

As of the 1.0.25 release, we have switch to a new 'single-branch' model in which all extensions are included in the source of the 1.0 branch of the Specification, and can be configured in or out of the build using Makefile options.

The single-branch model seems to be working for all the spec builds, although there are probably a few issues we haven't caught yet. The ref page build needs some additional work, as genRef.py is creating reference pages for all interfaces, not just those for the API and extensions being built, and we'll get to that within a week or two. The validation scripts also need to be tweaked further for the single-branch model.

Repository Structure

README.md               This file
ChangeLog.txt           Change log summary
doc/specs/              Main documentation tree
    vulkan/             Vulkan specification
        appendices/     Appendices - one file each
        chapters/       Chapters - one file each
        config/         asciidoc configuration
        images/         Images (figures, diagrams, icons)
        man/            Reference (manual) pages for API, mostly extracted from the spec source
    misc/               Related specifications (GL_KHR_vulkan_glsl)
src/spec/               XML API Registry (vk.xml) and related scripts
src/vulkan/             Vulkan headers, generated from the Registry

Building the Specification and Reference Pages

To build the documents, you need to install, at a minimum:

On some systems/build targets you may also need:

  • dblatex
  • source-highlight

These tools are known to work on several varieties of Linux, MacOS X, and Cygwin running under Microsoft Windows.

There are several make targets in doc/specs/vulkan :

  • make xhtml - Build one large HTML specification document.
  • make pdf - Build one large PDF specification document.
  • make chunked - Build an HTML document broken into one file per chapter.
  • make manhtml - Make HTML API reference (all man pages as one big file).
  • make manpdf - Make a one-giant PDF API reference.
  • make manhtmlpages - Make man pages as one-file-per-API.
  • make manpages - Make man pages as nroff Unix-style (real) man pages.
  • make allchecks - Run the validation rules on the specification.

The outputs will be written to $(OUTDIR), which defaults to out/ at the root of the checked-out git repository.

To build PDF outputs (make pdf, make manpdf), you need dblatex and a LaTeX processor. The PDF builds are currently configured to use asciidoc to go from asciidoc markdown to docbook, and then run the result through dblatex to go from there to LaTeX and then through your LaTeX processor to PDF.

Spec Validation

There are a couple of validation tools which look for inconsistencies and missing material between the specification and ref pages, and the canonical description of the API in vk.xml :

  • checkinc
  • checklinks
  • allchecks - both checkinc and checklinks

They are necessarily heuristic since they're dealing with lots of hand-written material. To use them you'll also need to install:

  • python3

The '''checkinc''' target uses Unix filters to determine which autogenerated API include files are used (and not used) in the spec. It generates several output files, but the only one you're likely to care about is '''actual.only'''. This is a list of the include files which are not referenced anywhere in the spec, and probably correspond to undocumented material in the spec.

The '''checklinks''' target validates the various internal tagged links in the man pages and spec (e.g. the '''fname:vkFuncBlah''', '''sname:VkStructBlah''', etc.) against the canonical description of the API in vk.xml . It generates two output files, manErrs.txt and specErrs.txt, which report problematic tags and the filenames/lines on which those tags were found.

The header file (src/vulkan/vulkan.h) and many parts of the specification and reference page documents are generated from descriptions in the XML API Registry (src/spec/vk.xml). The generated files, with the exception of vulkan.h, are not checked into the repository. If you change vk.xml, you can regenerate the header by going to src/spec and running:

  • make clobber install

The other generated files are built as required via dependencies in doc/specs/vulkan/Makefile .