Vulkan-Docs/README.md

121 lines
4.7 KiB
Markdown

Vulkan^(R)^ 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:
* GNU-compatible make
* asciidoc (http://www.methods.co.nz/asciidoc/)
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.
Generating Headers and Related Files
------------------------------------
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 .