diff --git a/.gitignore b/.gitignore
index af2fdc3f..92db94e0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,6 +46,4 @@ src/spec/diag.txt
.DS_Store
# Auto-generated files
-src/spec/hostsynctable
-src/spec/validity
-src/spec/vulkan-docs
+# doc/specs/vulkan/*/timeMarker
diff --git a/ChangeLog.txt b/ChangeLog.txt
index 27e32914..d2dee715 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -1006,3 +1006,78 @@ Other Commits:
APIs.
* Update vk_platform.h to handle 32-bit ARMv8 binaries.
* Various minor cleanups to the Makefile and build process.
+
+-----------------------------------------------------
+
+Change log for July 22, 2016 Vulkan 1.0.22 spec update:
+
+ * Bump API patch number and header version number to 22 for this update.
+
+Github Issues:
+
+ * Translate the subpass self-dependency language into concrete
+ validity statements, and added a validity statement about the
+ restrictions on layout parameters (public issue 267).
+ * Add validity requirement that
+ slink:VkAttachmentDescription::pname:finalLayout and
+ slink:VkAttachmentReference::pname:layout must not be
+ ename:VK_IMAGE_LAYOUT_UNDEFINED or
+ ename:VK_IMAGE_LAYOUT_PREINITIALIZED (public issue 268).
+ * Clarify that slink:VkSubpassDescription::pname:pResolveAttachments
+ layouts are used. Make language consistent with other attachment
+ arrays (public issue 270).
+ * Changed 64-bit definition for
+ dname:VK_DEFINE_NON_DISPATCHABLE_HANDLE to work for x32 platform in
+ +vk.xml+ and the resulting +vulkan.h+ (public issue 282).
+ * Add missing error return code for
+ flink:vkEnumerateInstanceExtensionProperties and
+ flink:vkEnumerateDeviceExtensionProperties (public issue 285)
+ * Fix several cases of stext::VkStructName.memberName markup to
+ stext::VkStructName::pname:memberName, to match other usage in the
+ spec, and describe this markup in the style guide (public issue
+ 286).
+ * Modified validity language generation script to avoid redundant
+ common ancestor language if covered by generic parent language, and
+ used `Both' instead of `Each' when appropriate (public issue 288).
+
+Internal Issues:
+
+ * Add language about behavior of flink:vkAllocateDescriptorSets when
+ allocation fails due to fragmentation, a new error
+ ename:VK_ERROR_FRAGMENTED_POOL, and a Note explaining the situation
+ (internal issue 309).
+ * For the features of code:PointSize, code:ClipDistance, and
+ code:CullDistance, the SPIR-V capability is required to be declared
+ on use (read or write) rather than on decoration (internal issue
+ 359).
+ * Have desktop versions of GLSL respect precision qualification
+ (code:mediump and code:lowp) when compiling for Vulkan. These will
+ get translated to SPIR-V's code:RelaxedPrecision decoration as they
+ do with OpenGL ES versions of GLSL (ESSL). The default precision of
+ all types is code:highp when using a desktop version (internal issue
+ 360).
+ * Add validity statement for slink:VkImageCreateInfo specifying that
+ multisampled images must be two-dimensional, optimally tiled, and
+ with a single mipmap level (internal issue 369).
+ * Add validity statements to slink:VkImageViewCreateInfo disallowing
+ creation of images or image views with no supported features. Made
+ some slink:VkImageViewCreateInfo validity statements more precise
+ and consistent. Added a Note to the <> chapter
+ about formats with no features (internal issue 371).
+ * Remove +manpages+ from default build targets. Nroff outputs
+ containing imbedded latexmath will not render properly. Fixing this
+ is a lot of work for limited use cases (internal issue 401).
+
+Other Commits:
+
+ * Fix flink:vkRenderPassBeginInfo::pname:clearValueCount validity
+ statement to be based on attachment indices rather than the number
+ of cleared attachments
+ (Vulkan-LoaderAndValidationLayers/issues/601).
+ * Convert registry documentation from LaTeX to asciidoc source and
+ rename from +src/spec/readme.tex+ to +src/spec/registry.txt+.
+ * Fix lack of Oxford commas in validity language.
+ * Lots of cleanup of generator scripts and Makefiles to move extension
+ list for generator into the script arguments instead of the body of
+ genvk.py, and express better dependencies between XML, scripts, and
+ generated files.
diff --git a/doc/specs/misc/GL_KHR_vulkan_glsl.txt b/doc/specs/misc/GL_KHR_vulkan_glsl.txt
index 811244e8..d6b5ef0c 100644
--- a/doc/specs/misc/GL_KHR_vulkan_glsl.txt
+++ b/doc/specs/misc/GL_KHR_vulkan_glsl.txt
@@ -33,8 +33,8 @@ Status
Version
- Last Modified Date: 12-Apr-2016
- Revision: 30
+ Last Modified Date: 20-Jul-2016
+ Revision: 31
Number
@@ -79,6 +79,9 @@ Overview
* subpass inputs
The following features are changed:
+ * precision qualifiers (mediump and lowp) will be respected for all
+ versions, not dropped for desktop versions (default precision for
+ desktop versions is highp for all types)
* gl_FragColor will no longer indicate an implicit broadcast
* arrays of opaque uniforms take only one binding number for
the entire object, not one per array element
@@ -374,19 +377,21 @@ Overview
Non-fragment stage:
- in/out gl_PerVertex {
+ in/out gl_PerVertex { // some subset of these members will be used
gl_Position
gl_PointSize
gl_ClipDistance
gl_CullDistance
- } (name of block is for debug only)
+ } // name of block is for debug only
There is at most one input and one output block per stage in SPIR-V.
+ The subset and order of members will match between stages sharing an
+ interface.
Mapping of precision qualifiers:
- lowp -> RelaxedPrecision, on variable and operation
- mediump -> RelaxedPrecision, on variable and operation
+ lowp -> RelaxedPrecision, on storage variable and operation
+ mediump -> RelaxedPrecision, on storage variable and operation
highp -> 32-bit, same as int or float
portability tool/mode -> OpQuantizeToF16
@@ -560,11 +565,16 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
samplerShadow | a handle for accessing state describing how to
| sample a depth texture with comparison"
-
-
Remove "structure member selection" from 4.1.7 and instead add a sentence
"Opaque types cannot be declared or nested in a structure (struct)."
+ Modify subsection 4.1.3 Integers, for desktop versions of GLSL, to say:
+
+ "Highp unsigned integers have exactly 32 bits of precision. Highp
+ signed integers use 32 bits, including a sign bit, in two's complement
+ form. Mediump and lowp integers are as defined by the RelaxedPrecision
+ decoration in SPIR-V."
+
Add a subsection to 4.1.7 Opaque Types:
"4.1.7.x Texture, *sampler*, and *samplerShadow* Types
@@ -598,6 +608,12 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
"Subpass input types are only available in fragment shaders. It is a
compile-time error to use them in any other stage."
+ Add to section 4.1.7.3 Atomic Counters:
+
+ "It is an error to declare an atomic type with a different precision or
+ to specify the default precision for an atomic type to be lowp or
+ mediump."
+
Change section 4.3.3 Constant Expressions:
Add a new very first sentence to this section:
@@ -870,6 +886,50 @@ Changes to Chapter 4 of the OpenGL Shading Language Specification
"However, when push_constant is declared, the default layout of the
buffer will be std430. There is no method to globally set this default."
+ Remove the following preamble from section 4.7, which exists for desktop
+ versions, but not ES versions. Removal:
+
+ "Precision qualifiers are added for code portability with OpenGL ES, not
+ for functionality. They have the same syntax as in OpenGL ES, as
+ described below, but they have no semantic meaning, which includes no
+ effect on the precision used to store or operate on variables.
+
+ "If an extension adds in the same semantics and functionality in the
+ OpenGL ES 2.0 specification for precision qualifiers, then the extension
+ is allowed to reuse the keywords below for that purpose.
+
+ "For the purposes of determining if an output from one shader stage
+ matches an input of the next stage, the precision qualifier need not
+ match."
+
+ Add:
+
+ "For interface matching, uniform variables and uniform and buffer block
+ members must have the same precision qualification. For matching *out*
+ variables or block members to *in* variables and block members, the
+ precision qualification does not have to match.
+
+ "Global variables declared in different compilation units linked into the
+ same shader stage must be declared with the same precision qualification."
+
+ More generally, all versions will follow OpenGL ES semantic rules for
+ precision qualifiers.
+
+ Section 4.7.2 Precision Qualifiers (desktop only)
+
+ Replace the table saying "none" for all precisions with this statement:
+
+ "Mediump and lowp floating-point values have the precision defined by
+ the RelaxedPrecision decoration in SPIR-V."
+
+ Section 4.7.4 Default Precision Qualifiers:
+
+ For desktop versions, replace the last three paragraphs that state the
+ default precisions with the following instead:
+
+ "All stages have default precision qualification of highp for all types
+ that accept precision qualifiers."
+
Changes to Chapter 5 of the OpenGL Shading Language Specification
Add a new subsection at the end of section 5.4 "Constructors":
@@ -1003,6 +1063,77 @@ Changes to Chapter 7 of the OpenGL Shading Language Specification
Changes to Chapter 8 of the OpenGL Shading Language Specification
+ Add the following ES language to desktop versions of the specification:
+
+ "The operation of a built-in function can have a different precision
+ qualification than the precision qualification of the resulting value.
+ These two precision qualifications are established as follows.
+
+ "The precision qualification of the operation of a built-in function is
+ based on the precision qualification of its input arguments and formal
+ parameters: When a formal parameter specifies a precision qualifier,
+ that is used, otherwise, the precision qualification of the calling
+ argument is used. The highest precision of these will be the precision
+ qualification of the operation of the built-in function. Generally,
+ this is applied across all arguments to a built-in function, with the
+ exceptions being:
+ - bitfieldExtract and bitfieldInsert ignore the 'offset' and 'bits'
+ arguments.
+ - interpolateAt* functions only look at the 'interpolant' argument.
+
+ "The precision qualification of the result of a built-in function is
+ determined in one of the following ways:
+
+ - For the texture sampling, image load, and image store functions,
+ the precision of the return type matches the precision of the
+ sampler type:
+ uniform lowp sampler2D sampler;
+ highp vec2 coord;
+ ...
+ lowp vec4 col = texture (sampler, coord); // texture() returns lowp
+
+ Otherwise:
+
+ - For prototypes that do not specify a resulting precision qualifier,
+ the precision will be the same as the precision of the operation.
+ (As defined earlier.)
+
+ - For prototypes that do specify a resulting precision qualifier,
+ the specified precision qualifier is the precision qualification of
+ the result."
+
+ Add precision qualifiers to the following in desktop versions:
+
+
+ genIType floatBitsToInt (highp genFType value)
+ genUType floatBitsToUint(highp genFType value)
+ genFType intBitsToFloat (highp genIType value)
+ genFType uintBitsToFloat(highp genUType value)
+
+ genFType frexp(highp genFType x, out highp genIType exp)
+ genFType ldexp(highp genFType x, in highp genIType exp)
+
+ highp uint packSnorm2x16(vec2 v)
+ vec2 unpackSnorm2x16(highp uint p)
+ highp uint packUnorm2x16(vec2 v)
+ vec2 unpackUnorm2x16(highp uint p)
+ vec2 unpackHalf2x16(highp uint v)
+ vec4 unpackUnorm4x8(highp uint v)
+ vec4 unpackSnorm4x8(highp uint v)
+
+ genIType bitfieldReverse(highp genIType value)
+ genUType bitfieldReverse(highp genUType value)
+ genIType findMSB(highp genIType value)
+ genIType findMSB(highp genUType value)
+ genUType uaddCarry(highp genUType x, highp genUType y,
+ out lowp genUType carry)
+ genUType usubBorrow(highp genUType x, highp genUType y,
+ out lowp genUType borrow)
+ void umulExtended(highp genUType x, highp genUType y,
+ out highp genUType msb, out highp genUType lsb)
+ void imulExtended(highp genIType x, highp genIType y,
+ out highp genIType msb, out highp genIType lsb)
+
Add a section
"8.X Subpass Functions
@@ -1155,6 +1286,7 @@ Revision History
Rev. Date Author Changes
---- ----------- ------- --------------------------------------------
+ 31 20-Jul-2016 JohnK Have desktop versions respect mediump/lowp
30 12-Apr-2016 JohnK Restrict spec-const operations to non-float
29 5-Apr-2016 JohnK Clarify disallowance of spec-const arrays in
initializers
diff --git a/doc/specs/vulkan/Makefile b/doc/specs/vulkan/Makefile
index d2f7aa00..dc613b76 100644
--- a/doc/specs/vulkan/Makefile
+++ b/doc/specs/vulkan/Makefile
@@ -6,12 +6,15 @@
# Default targets:
# - XHTML, XHTML chunked, and PDF specs ('allspecs')
# - HTML single-document reference pages ('manhtml' and 'manpdf')
-# - HTML and nroff separate reference pages ('manpages' and 'manhtmlpages')
+# - HTML separate reference pages ('manpages' and 'manhtmlpages')
# - Validator scripts ('allchecks')
#
# The 'html' target is deprecated but still supported, for now. It uses
# a different toolchain than XHTML/PDF outputs, isn't quite compatible,
# and will not be published, but is faster to generate for quick tests.
+#
+# Other targets:
+# - Nroff (Unix 'man' format) separate reference pages ('manpages').
all: alldocs allchecks
@@ -19,42 +22,46 @@ alldocs: allspecs allman
allspecs: xhtml chunked pdf styleguide
-allman: manhtml manpdf manpages manhtmlpages
+allman: manhtml manpdf manhtmlpages
allchecks: checkinc checklinks
# Note that the := assignments below are immediate, not deferred, and
# are therefore order-dependent in the Makefile
-QUIET?=@
+QUIET ?= @
+PYTHON ?= python3
ASCIIDOC ?= asciidoc.py
-A2X ?= a2x.py
-DBLATEX ?= dblatex
+A2X ?= a2x.py
+DBLATEX ?= dblatex
+XSLTPROC ?= xsltproc
# DBLATEXPREFIX can be overriden by setting it as an environment variable,
# if not installed in the standard location on your distribution
DBLATEXPREFIX ?= /etc/asciidoc/dblatex
-RM=rm -f
-RMRF=rm -rf
-MKDIR=mkdir -p
-CP=cp
-ECHO:=echo
+RM = rm -f
+RMRF = rm -rf
+MKDIR = mkdir -p
+CP = cp
+ECHO = echo
+
# Target directories for output files
# HTMLDIR - 'html' target
# XHTMLDIR - 'xhtml' target
+# CHUNKDIR - 'chunked' target
# PDFDIR - 'pdf' target
# CHECKDIR - 'allchecks' target
-OUTDIR := ../../../out/1.0
-HTMLDIR := $(OUTDIR)/html
-XHTMLDIR := $(OUTDIR)/xhtml
-PDFDIR := $(OUTDIR)/pdf
-CHECKDIR := $(OUTDIR)/checks
-STYLEXHTMLDIR := $(OUTDIR)/style
+# STYLEXHTMLDIR - 'styleguide' target
+OUTDIR := ../../../out/1.0
+HTMLDIR := $(OUTDIR)/html
+XHTMLDIR := $(OUTDIR)/xhtml
+CHUNKDIR := $(OUTDIR)/chunked
+PDFDIR := $(OUTDIR)/pdf
+CHECKDIR := $(OUTDIR)/checks
# Images used in the API spec
IMAGEPATH :=images
-ICONPATH :=$(IMAGEPATH)/icons
-PDFXSL :=config/vkspec-dblatex.xsl
-PDFSTY :=config/vkspec-dblatex.sty
-PYTHON ?= python3
+ICONPATH :=$(IMAGEPATH)/icons
+PDFXSL :=config/vkspec-dblatex.xsl
+PDFSTY :=config/vkspec-dblatex.sty
# Set VERBOSE to -v to see what asciidoc is doing.
# Set KEEP to -d to retain intermediate dblatex files
@@ -67,7 +74,7 @@ KEEP =
# ATTRIBOPTS sets the api revision and enables MathJax generation
# CONFIG Vulkan-specific Asciidoc macros. File used depends on target.
# ADOCOPTS options for asciidoc->HTML output
-# ADOCPDFOPTS options for asciidoc->PDF output via dblatex (not using a2x)
+# ADOCDBOPTS options for asciidoc->XHTML or PDF output via docbook (not using a2x)
# A2XOPTS options for a2x->{HTML,PDF} output
XMLLINT = --no-xmllint
NOTEOPTS = -a editing-notes -a implementation-guide
@@ -75,17 +82,26 @@ ATTRIBOPTS = -a apirevision="$(SPECREVISION)" -a mathjax
CONFIG = config/vkspec.conf
ADOCOPTS = $(ATTRIBOPTS) $(NOTEOPTS) -f config/mathjax-asciidoc.conf \
-f $(CONFIG) $(VERBOSE)
-ADOCPDFOPTS= $(ATTRIBOPTS) $(NOTEOPTS) -f config/mathjax-docbook.conf \
+ADOCDBOPTS = $(ATTRIBOPTS) $(NOTEOPTS) -f config/mathjax-docbook.conf \
-f $(CONFIG) $(VERBOSE)
A2XOPTS = $(ATTRIBOPTS) $(NOTEOPTS) \
--asciidoc-opts="-f config/mathjax-docbook.conf -f $(CONFIG)" \
--xsltproc-opts="--param generate.consistent.ids 1" \
$(XMLLINT) $(VERBOSE) --icons
+# All the options except the first are taken from a2x
+XSLTOPTS = \
+ --param generate.consistent.ids 1 \
+ --stringparam callout.graphics 1 \
+ --stringparam navig.graphics 1 \
+ --stringparam admon.textlabel 0 \
+ --stringparam admon.graphics 1
+
# XSL customizing Asciibook XSL to pass through equations and add
# MathJax. This varies depending on target type.
-XHTMLXSL = config/docbook-xsl/xhtml.xsl
-CHUNKEDXSL = config/docbook-xsl/chunked.xsl
+XHTMLXSL = config/docbook-xsl/xhtml.xsl
+CHUNKXSL = config/docbook-xsl/chunked.xsl
+MANPAGEXSL = config/docbook-xsl/manpage.xsl
# dblatex options passed two ways, directly to dblatex and via a2x.
DBLATEXOPTS := $(KEEP) -V -T db2latex -I. -I images -I images/icons -s $(DBLATEXPREFIX)/asciidoc-dblatex.sty
@@ -94,15 +110,16 @@ A2XDBLATEXOPTS := --dblatex-opts='$(DBLATEXOPTS)'
# Misc. files to clean up (see 'checkinc' target below)
DIRT = $(SPECVERSION)
-.PHONY: directories $(MANHTMLDIR) $(MANPAGEDIR)
+.PHONY: directories
+# Images and icons that are used in or referenced by targets.
+# For some targets they must be copied to output directories.
ICONFILES := $(wildcard $(ICONPATH)/*.png)
PNGFILES := $(ICONFILES) $(wildcard $(IMAGEPATH)/*.png)
# Don't use vulkantexture0.svg as a source SVG file, PNG is available
SVGFILES := $(filter-out $(IMAGEPATH)/vulkantexture0.svg,$(wildcard $(IMAGEPATH)/*.svg))
PDFFILES := $(SVGFILES:.svg=.pdf)
-# Misc. directories and files that need to be copied into output directory
-WEBIMAGES := $(SVGFILES:%=$(HTMLDIR)/%) $(PNGFILES:%=$(HTMLDIR)/%)
+
# File suffix for image targets for HTML and PDF Builds - Asciidoc {svgtype} attribute
SVGTYPEHTML := svg
SVGTYPEPDF := pdf
@@ -111,58 +128,72 @@ TOPDOC := vkspec.txt
# Files making up sections of the API spec. The wildcard expression
# should work in extension branches to pull in those files as well.
CHAPTERS := $(wildcard chapters/[A-Za-z]*.txt appendices/[A-Za-z]*.txt chapters/*/[A-Za-z]*.txt appendices/*/[A-Za-z]*.txt)
-INCLUDES := $(wildcard protos/*.txt structs/*.txt flags/*.txt enums/*.txt funcpointers/*.txt validity/structs/*.txt validity/protos/*.txt)
+GENINCLUDE = $(wildcard api/*/[A-Za-z]*.txt validity/*/[A-Za-z]*.txt hostsynctable/*.txt)
+GENDEPENDS = api/timeMarker validity/timeMarker hostsynctable/timeMarker
# All non-format-specific dependencies
-COMMONDOCS := $(CHAPTERS) $(INCLUDES)
+COMMONDOCS = $(CHAPTERS) $(GENINCLUDE) $(GENDEPENDS)
# A generated included file with the spec version, date, and git commit
SPECVERSION = specversion.txt
-SPECREVISION = 1.0.21
+SPECREVISION = 1.0.22
SPECREMARK =
# Spec targets
# There is some complexity to try and avoid short virtual targets like 'html'
# causing specs to *always* be regenerated.
-html: $(HTMLDIR)/vkspec.html $(TOPDOC) $(COMMONDOCS) $(WEBIMAGES)
+html: $(HTMLDIR)/vkspec.html $(TOPDOC) $(COMMONDOCS)
-$(HTMLDIR)/vkspec.html: $(CONFIG) $(SPECVERSION) $(TOPDOC) $(COMMONDOCS) $(WEBIMAGES)
- $(QUIET)if test ! -d $(HTMLDIR) ; then $(MKDIR) $(HTMLDIR) ; fi
+$(HTMLDIR)/vkspec.html: $(CONFIG) $(SPECVERSION) $(TOPDOC) $(COMMONDOCS)
+ $(QUIET)$(MKDIR) $(HTMLDIR)/images/icons
$(QUIET)$(ASCIIDOC) -b html5 $(ADOCOPTS) \
-o $(HTMLDIR)/vkspec.html -a svgpdf=$(SVGTYPEHTML) $(TOPDOC)
+ # Copy resource files in explicitly
+ $(QUIET)$(CP) $(SVGFILES) $(PNGFILES) $(HTMLDIR)/images
+ $(QUIET)$(CP) $(ICONFILES) $(HTMLDIR)/images/icons
xhtml: $(XHTMLDIR)/vkspec.html $(TOPDOC) $(COMMONDOCS)
$(XHTMLDIR)/vkspec.html: $(CONFIG) $(SPECVERSION) $(TOPDOC) $(COMMONDOCS)
- $(QUIET)if test ! -d $(XHTMLDIR) ; then $(MKDIR) $(XHTMLDIR) ; fi
- $(QUIET)$(A2X) $(A2XOPTS) -f xhtml $(TOPDOC) \
- --xsl-file=$(XHTMLXSL) \
- -a toc2 -a toclevels=2 --destination-dir=$(XHTMLDIR) \
- -a svgpdf=$(SVGTYPEHTML)
+ $(QUIET)$(MKDIR) $(XHTMLDIR)/images/icons $(XHTMLDIR)/config
+ $(QUIET)$(ASCIIDOC) --backend docbook $(ADOCDBOPTS) \
+ -a a2x-format=xhtml -a svgpdf=$(SVGTYPEHTML) \
+ -o $(XHTMLDIR)/vkspec.xml $(TOPDOC)
+ $(QUIET)$(XSLTPROC) $(XSLTOPTS) -o $@ $(XHTMLXSL) \
+ $(XHTMLDIR)/vkspec.xml
+ # Copy resource files in explicitly
+ $(QUIET)$(CP) config/vkspec-xhtml.css $(XHTMLDIR)/config/
+ $(QUIET)$(CP) $(SVGFILES) $(PNGFILES) $(XHTMLDIR)/images
+ $(QUIET)$(CP) $(ICONFILES) $(XHTMLDIR)/images/icons
+ $(QUIET)$(RM) $(XHTMLDIR)/vkspec.xml
-chunked: $(OUTDIR)/vkspec.chunked/index.html $(TOPDOC) $(COMMONDOCS)
+chunked: $(CHUNKDIR)/index.html $(TOPDOC) $(COMMONDOCS)
-$(OUTDIR)/vkspec.chunked/index.html: $(CONFIG) $(SPECVERSION) $(TOPDOC) $(COMMONDOCS)
- $(QUIET)if test ! -d $(OUTDIR)/chunked ; then $(MKDIR) $(OUTDIR) ; fi
- $(QUIET)$(A2X) $(A2XOPTS) -f chunked $(TOPDOC) \
- --xsl-file=$(CHUNKEDXSL) \
- -a toc2 -a toclevels=2 --destination-dir=$(OUTDIR) \
- -a svgpdf=$(SVGTYPEHTML)
+$(CHUNKDIR)/index.html: $(CONFIG) $(SPECVERSION) $(TOPDOC) $(COMMONDOCS)
+ $(QUIET)$(MKDIR) $(CHUNKDIR)/images/icons $(CHUNKDIR)/config
+ $(QUIET)$(ASCIIDOC) --backend docbook $(ADOCDBOPTS) \
+ -a a2x-format=chunked -a svgpdf=$(SVGTYPEHTML) \
+ -o $(CHUNKDIR)/vkspec.xml $(TOPDOC)
+ $(QUIET)$(XSLTPROC) $(XSLTOPTS) \
+ --stringparam base.dir $(CHUNKDIR)/ \
+ -o $@ $(CHUNKXSL) $(CHUNKDIR)/vkspec.xml
+ # Copy resource files in explicitly
+ $(QUIET)$(CP) config/vkspec-xhtml.css $(CHUNKDIR)/config/
+ $(QUIET)$(CP) $(SVGFILES) $(PNGFILES) $(CHUNKDIR)/images
+ $(QUIET)$(CP) $(ICONFILES) $(CHUNKDIR)/images/icons
+ $(QUIET)$(RM) $(CHUNKDIR)/vkspec.xml
pdf: $(PDFDIR)/vkspec.pdf
-$(PDFDIR)/vkspec.pdf: $(PDFXSL) $(PDFSTY) $(PDFDIR)/vkspec.xml
+$(PDFDIR)/vkspec.pdf: $(CONFIG) $(SPECVERSION) $(TOPDOC) $(COMMONDOCS) $(PDFFILES)
+ $(QUIET)$(MKDIR) $(PDFDIR)
+ $(QUIET)$(ASCIIDOC) --backend docbook $(ADOCDBOPTS) \
+ -a a2x-format=pdf -a svgpdf=pdf \
+ -o $(PDFDIR)/vkspec.xml $(TOPDOC)
$(QUIET)$(DBLATEX) -b pdftex $(DBLATEXOPTS) \
-p "$(DBLATEXPREFIX)/asciidoc-dblatex.xsl" \
-p $(PDFXSL) -s $(PDFSTY) \
- $(PDFDIR)/vkspec.xml -O $(PDFDIR)
-
-$(PDFDIR)/vkspec.xml: $(CONFIG) $(SPECVERSION) $(TOPDOC) $(COMMONDOCS) $(PDFDIR) $(PDFFILES)
- $(QUIET)$(ASCIIDOC) --backend docbook $(ADOCPDFOPTS) \
- -a a2x-format=pdf -a svgpdf=pdf \
- --out-file $(PDFDIR)/vkspec.xml $(TOPDOC)
-
-$(PDFDIR):
- $(QUIET)if test ! -d $(PDFDIR) ; then $(MKDIR) $(PDFDIR) ; fi
+ -o $@ $(PDFDIR)/vkspec.xml
+ $(QUIET)$(RM) $(PDFDIR)/vkspec.xml
# Generate Asciidoc attributes for spec version / date
GITHEAD := ../../../.git/logs/HEAD
@@ -192,36 +223,30 @@ STYLEFILES = $(wildcard style/[A-Za-z]*.txt)
styleguide: $(OUTDIR)/styleguide.html
-$(OUTDIR)/styleguide.html: $(CONFIG) $(SPECVERSION) $(STYLESRC) $(STYLEFILES)
+$(OUTDIR)/styleguide.html: $(CONFIG) $(SPECVERSION) $(STYLESRC) $(STYLEFILES) $(GENINCLUDE) $(GENDEPENDS)
$(QUIET)$(ASCIIDOC) -b html5 $(ADOCOPTS) \
-o $@ -a svgpdf=$(SVGTYPEHTML) \
$(STYLESRC)
-clean: clean_html clean_pdf clean_chunked clean_checks clean_dirt clean_man
-
-clean_man:
- $(RM) $(MANHTML)
- $(RMRF) $(MANHTMLDIR)
- $(RM) $(MANPAGES)
- $(RMRF) $(MANPAGEDIR)
+clean: clean_html clean_pdf clean_man clean_checks clean_generated clean_dirt
clean_html:
- $(QUIET)$(RMRF) $(HTMLDIR) $(XHTMLDIR) $(STYLEXHTMLDIR)
+ $(QUIET)$(RMRF) $(HTMLDIR) $(XHTMLDIR) $(CHUNKDIR)
$(QUIET)$(RM) $(OUTDIR)/apispec.html $(OUTDIR)/styleguide.html
clean_pdf:
- $(QUIET)$(RM) \
- $(PDFDIR)/vkspec.pdf \
- $(PDFDIR)/vkspec.xml \
- $(OUTDIR)/apispec.pdf \
- $(OUTDIR)/apispec.xml
+ $(QUIET)$(RM) $(PDFDIR)/vkspec.pdf $(OUTDIR)/apispec.pdf
-clean_chunked:
- $(QUIET)$(RMRF) $(OUTDIR)/vkspec.chunked
+clean_man:
+ $(QUIET)$(RMRF) $(MANHTMLDIR)
+ $(QUIET)$(RMRF) $(MANPAGEDIR)
clean_checks:
$(QUIET)$(RMRF) $(CHECKDIR)
+clean_generated:
+ $(QUIET)$(RMRF) api/* hostsynctable/* validity/* vkapi.py
+
clean_dirt:
$(QUIET)$(RM) $(DIRT)
@@ -238,18 +263,7 @@ WSISOURCES := $(wildcard $(MANDIR)/*KHR.txt)
EXTSOURCES := $(wildcard $(MANDIR)/*EXT.txt)
CORESOURCES := $(filter-out $(WSISOURCES) $(EXTSOURCES) $(MANDIR)/vkman.css,$(wildcard $(MANDIR)/[Vv][Kk]* $(MANDIR)/PFN*txt))
MANSOURCES := $(CORESOURCES) $(WSISOURCES) $(EXTSOURCES)
-
MANCOPYRIGHT:= $(MANDIR)/khronoscopyright.txt $(MANDIR)/footer.txt
-MANPAGEDIR := $(OUTDIR)/man/$(MANSECTION)
-MANPAGES := $(MANSOURCES:$(MANDIR)/%.txt=$(MANPAGEDIR)/%.$(MANSECTION))
-MANHTMLDIR := $(OUTDIR)/man/html
-MANHTML := $(MANSOURCES:$(MANDIR)/%.txt=$(MANHTMLDIR)/%.html)
-
-manpagesall: manpages manhtmlpages
-
-manpages: $(MANPAGEDIR) $(MANPAGES)
-
-manhtmlpages: $(MANHTMLDIR) $(MANHTML)
# Automatic generation of ref pages. Needs to have a proper dependency
# causing the man page sources to be generated by running genRef (once),
@@ -260,56 +274,62 @@ man/apispec.txt: $(CHAPTERS) genRef.py reflib.py vkapi.py
# These dependencies don't take into account include directives
-$(MANPAGEDIR)/%.$(MANSECTION): $(MANDIR)/%.$(MANSECTION)
- $(QUIET)mv $< $@
+# These targets are Unix 'man' nroff source, and are essentially useless
+# since the ref pages contain both LaTeX math equations and images.
-$(MANDIR)/%.$(MANSECTION): CONFIG=config/manpages.conf
+MANPAGEDIR := $(OUTDIR)/man/$(MANSECTION)
+MANPAGES := $(MANSOURCES:$(MANDIR)/%.txt=$(MANPAGEDIR)/%.$(MANSECTION))
-$(MANDIR)/%.$(MANSECTION): $(MANDIR)/%.txt $(MANCOPYRIGHT) config/manpages.conf
- $(QUIET)$(ECHO) Building $@
- $(QUIET)$(A2X) -d manpage -f manpage --asciidoc-opts "-f config/manpages.conf" $(A2XOPTS) $<
+manpages: $(MANPAGES)
+
+$(MANPAGEDIR)/%.$(MANSECTION): CONFIG=config/manpages.conf
+
+$(MANPAGEDIR)/%.$(MANSECTION): $(MANDIR)/%.txt $(MANCOPYRIGHT) config/manpages.conf $(GENINCLUDE) $(GENDEPENDS)
+ $(QUIET)$(MKDIR) $(MANPAGEDIR)
+ $(QUIET)$(ASCIIDOC) --backend docbook $(ADOCDBOPTS) --doctype manpage \
+ -a a2x-format=manpage -a svgpdf=$(SVGTYPEHTML) \
+ -o $@.xml $<
+ $(QUIET)$(XSLTPROC) $(XSLTOPTS) -o $@ $(MANPAGEXSL) $@.xml
+ $(QUIET)$(RM) $@.xml
+
+# These targets are HTML ref pages
+
+MANHTMLDIR := $(OUTDIR)/man/html
+MANHTML := $(MANSOURCES:$(MANDIR)/%.txt=$(MANHTMLDIR)/%.html)
+
+manhtmlpages: $(MANHTML)
$(MANHTMLDIR)/%.html: CONFIG=config/manpages.conf
-$(MANHTMLDIR)/%.html: $(MANDIR)/%.txt $(MANCOPYRIGHT) config/manpages.conf
- $(QUIET)$(ECHO) Building $@
+$(MANHTMLDIR)/%.html: $(MANDIR)/%.txt $(MANCOPYRIGHT) config/manpages.conf $(GENINCLUDE) $(GENDEPENDS)
+ $(QUIET)$(MKDIR) $(MANHTMLDIR)
$(QUIET)$(ASCIIDOC) -b html5 -d manpage $(ADOCOPTS) \
-a themedir=$(CURDIR)/config -a theme=vkman \
-o $@ -a svgpdf=$(SVGTYPEHTML) $<
-$(MANHTMLDIR):
- $(QUIET)$(MKDIR) $@
-
-$(MANPAGEDIR):
- $(QUIET)$(MKDIR) $@
-
-# Man page targets for HTML and PDF single-file documents
+# These targets are HTML and PDF single-file versions of the ref pages
manpdf: $(OUTDIR)/apispec.pdf
manhtml: $(OUTDIR)/apispec.html
-$(OUTDIR)/apispec.pdf: $(PDFXSL) $(PDFSTY) $(OUTDIR)/apispec.xml
+$(OUTDIR)/apispec.pdf: $(CONFIG) $(SPECVERSION) man/apispec.txt $(MANSOURCES) $(MANCOPYRIGHT) $(PDFXSL) $(PDFSTY) $(GENINCLUDE) $(GENDEPENDS)
+ $(QUIET)$(MKDIR) $(OUTDIR)
+ $(QUIET)$(ASCIIDOC) --backend docbook $(ADOCDBOPTS) \
+ -a a2x-format=pdf -a svgpdf=pdf \
+ -o $(OUTDIR)/apispec.xml man/apispec.txt
$(QUIET)$(DBLATEX) -b pdftex $(DBLATEXOPTS) \
-p "$(DBLATEXPREFIX)/asciidoc-dblatex.xsl" \
-p $(PDFXSL) -s $(PDFSTY) \
- $(OUTDIR)/apispec.xml -O $(OUTDIR)
+ -o $(OUTDIR) $(OUTDIR)/apispec.xml
+ $(QUIET)$(RM) $(OUTDIR)/apispec.xml
-$(OUTDIR)/apispec.xml: $(CONFIG) $(SPECVERSION) man/apispec.txt $(MANSOURCES) $(MANCOPYRIGHT) $(PDFXSL) $(PDFSTY)
- $(QUIET)$(ASCIIDOC) --backend docbook $(ADOCPDFOPTS) \
- -a a2x-format=pdf -a svgpdf=pdf \
- -o $@ man/apispec.txt
-
-$(OUTDIR)/apispec.html: $(CONFIG) $(SPECVERSION) man/apispec.txt $(MANSOURCES) $(MANCOPYRIGHT) $(SVGFILES)
- $(QUIET)if test ! -d $(OUTDIR) ; then $(MKDIR) $(OUTDIR) ; fi
+$(OUTDIR)/apispec.html: $(CONFIG) $(SPECVERSION) man/apispec.txt $(MANSOURCES) $(MANCOPYRIGHT) $(SVGFILES) $(GENINCLUDE) $(GENDEPENDS)
+ $(QUIET)$(MKDIR) $(OUTDIR)
$(QUIET)$(ASCIIDOC) -b html5 -d book $(ADOCOPTS) \
-a themedir=$(CURDIR)/config -a theme=vkspec-xhtml \
-o $@ -a svgpdf=$(SVGTYPEHTML) man/apispec.txt
-$(HTMLDIR)/images/%: images/%
- $(QUIET)$(MKDIR) $(@D)
- $(QUIET)$(CP) $< $@
-
# Automated (though heuristic) checks of consistency in the spec and
# ref page sources
@@ -328,7 +348,7 @@ INSPEC = $(CHECKDIR)/inspec
NOTINSPEC = $(CHECKDIR)/notInSpec.txt
checkinc:
$(QUIET)if test ! -d $(CHECKDIR) ; then $(MKDIR) $(CHECKDIR) ; fi
- $(QUIET)ls $(INCLUDES) | sort > $(ACTUAL)
+ $(QUIET)ls $(GENINCLUDE) | sort > $(ACTUAL)
$(QUIET)cat $(CHAPTERS) | \
egrep '^include::\.\./' | tr -d '[]' | \
sed -e 's#^include::\.\./##g' | sort > $(INCFILES)
@@ -347,13 +367,55 @@ checkinc:
# Generates files in $(CHECKDIR):
# specErrs.txt - errors & warnings in API spec
# manErrs.txt - errors & warnings in man pages
-checklinks:
+checklinks: vkapi.py
$(QUIET)if test ! -d $(CHECKDIR) ; then $(MKDIR) $(CHECKDIR) ; fi
$(QUIET)echo "Generating link checks for spec (specErrs.txt) and man pages (manErrs.txt)"
$(QUIET)$(PYTHON) checkLinks.py -follow man/[Vv][Kk]*.txt > $(CHECKDIR)/manErrs.txt
$(QUIET)$(PYTHON) checkLinks.py -follow $(CHAPTERS) > $(CHECKDIR)/specErrs.txt
+# Targets generated from the XML and registry processing scripts
+# vkapi.py - Python encoding of the registry
+# api/timeMarker - proxy for 'apiincludes' - API include files under api/*/*.txt
+# hostsynctable/timeMarker - proxy for host sync table include files under hostsynctable/*.txt
+# validity/timeMarker - proxy for API validity include files under validity/*/*.txt
+#
+# EXTLIST specifies the extensions that will be included in these
+# targets. This will differ in different extension branches, although
+# all will include the VK_KHR_sampler_mirror_clamp_to_edge extension.
+# Each extension should be specified as a separate -extension option.
+
+EXTLIST = -extension VK_KHR_sampler_mirror_clamp_to_edge \
+ -extension VK_KHR_wayland_surface
+REGISTRY = ../../../src/spec
+VKXML = $(REGISTRY)/vk.xml
+GENVK = $(REGISTRY)/genvk.py
+GENVKOPTS= $(EXTLIST) -registry $(VKXML)
+
+vkapi.py: $(VKXML) $(GENVK)
+ $(PYTHON) $(GENVK) $(GENVKOPTS) -o . vkapi.py
+
+apiinc: api/timeMarker
+
+api/timeMarker: $(VKXML) $(GENVK)
+ $(QUIET)$(MKDIR) api
+ $(QUIET)$(PYTHON) $(GENVK) $(GENVKOPTS) -o api apiinc
+
+hostsyncinc: hostsynctable/timeMarker
+
+hostsynctable/timeMarker: $(VKXML) $(GENVK)
+ $(QUIET)$(MKDIR) hostsynctable
+ $(QUIET)$(PYTHON) $(GENVK) $(GENVKOPTS) -o hostsynctable hostsyncinc
+
+validinc: validity/timeMarker
+
+validity/timeMarker: $(VKXML) $(GENVK)
+ $(QUIET)$(MKDIR) validity
+ $(QUIET)$(PYTHON) $(GENVK) $(GENVKOPTS) -o validity validinc
+
+# Debugging aid - generate all files from registry XML
+generated: vkapi.py api/timeMarker hostsynctable/timeMarker validity/timeMarker
+
# README file with build instructions
-README.html: $(CONFIG) $(SPECVERSION) README.txt
+README.html: $(CONFIG) $(SPECVERSION) README.adoc
$(QUIET)$(ASCIIDOC) -b html5 $(ADOCOPTS) \
- -o $@ README.txt
+ -o $@ README.adoc
diff --git a/doc/specs/vulkan/README.txt b/doc/specs/vulkan/README.adoc
similarity index 97%
rename from doc/specs/vulkan/README.txt
rename to doc/specs/vulkan/README.adoc
index 97062b66..77b999a5 100644
--- a/doc/specs/vulkan/README.txt
+++ b/doc/specs/vulkan/README.adoc
@@ -36,7 +36,7 @@ non-Windows environments.
or equivalently:
- $ make xhtml chunked pdf manhtml manpdf manpages manhtmlpages checkinc checklinks
+ $ make xhtml chunked pdf manhtml manpdf manhtmlpages checkinc checklinks
This will generate a variety of targets under +$(OUTDIR)+ (by default,
+../../../out/1.0+). The checked-in file +$(OUTDIR)/index.html+ links to
@@ -50,7 +50,6 @@ them all, or they can individually be found as follows:
** +manhtml+ - Single-file HTML in +$(OUTDIR)/apispec.html+
** +manpdf+ - Single-file PDF in +$(OUTDIR)/apispec.html+
** +manhtmlpages+ - File-per-entry-point HTML in +$(OUTDIR)/man/html/*+
-** +manpages+ - File-per-entry-point nroff source in +$(OUTDIR)/man/3/*+
* Validator output:
** +checkinc+ - List of commands, structs, etc. missing from the API spec in
+$(OUTDIR)/checks/notInSpec.txt+
@@ -71,6 +70,12 @@ the standard +/etc/asciidoc/dblatex+ directory, set the environment variable
+asciidoc-dblatex.xsl+ and +asciidoc-dblatex.sty+ files installed with
asciidoc).
+The +manpages+ target is deprecated, as the resulting Unix man pages have
+issues with content like embedded latexmath: constructs, but is still
+available for third parties wishing to generate them:
+
+* +manpages+ - File-per-entry-point nroff source in +$(OUTDIR)/man/3/*+
+
[[building-test]]
=== Alternate and Test Builds ===
diff --git a/doc/specs/vulkan/README.html b/doc/specs/vulkan/README.html
index bcf28232..04ab2c2e 100644
--- a/doc/specs/vulkan/README.html
+++ b/doc/specs/vulkan/README.html
@@ -797,35 +797,6 @@ asciidoc.install();
Introduction
-
-
-
-
This README describes important stuff for getting the Vulkan API
specification and reference pages building properly.
@@ -848,7 +819,7 @@ non-Windows environments.
-
$ make xhtml chunked pdf manhtml manpdf manpages manhtmlpages checkinc checklinks
+
$ make xhtml chunked pdf manhtml manpdf manhtmlpages checkinc checklinks
This will generate a variety of targets under $(OUTDIR) (by default,
../../../out/1.0). The checked-in file $(OUTDIR)/index.html links to
@@ -896,11 +867,6 @@ Reference pages:
manhtmlpages - File-per-entry-point HTML in $(OUTDIR)/man/html/*
-
-
-manpages - File-per-entry-point nroff source in $(OUTDIR)/man/3/*
-
-
@@ -936,6 +902,16 @@ the standard /etc/asciidoc/dblatex directory, se
DBLATEXPREFIX to the path to that directory (the one containing the
asciidoc-dblatex.xsl and asciidoc-dblatex.sty files installed with
asciidoc).
+The manpages target is deprecated, as the resulting Unix man pages have
+issues with content like embedded latexmath: constructs, but is still
+available for third parties wishing to generate them:
+
Alternate and Test Builds
If you are just testing asciidoc formatting, macros, stylesheets, etc.,
@@ -1310,7 +1286,7 @@ Devel/git (2.5.1-1) - Needed for updating specversion.txt