diff --git a/ChangeLog.txt b/ChangeLog.txt
index 1280030b..7ebc08e0 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -580,3 +580,63 @@ Other Commits:
* Replace the {apiname} macro with hardcoded "Vulkan", now that we've
committed to that name.
* Add the VK_AMD_rasterization_order extension to vk.xml.
+
+-----------------------------------------------------
+
+Change log for May 13, 2016 Vulkan 1.0.13 spec update:
+
+ * Bump API patch number and header version number to 13 for this
+ update.
+
+Github Issues:
+
+ * Improve the description of ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR in the
+ VK_KHR_surface extension (public issue 174).
+ * Clarify use of etext:*_SIMULTANEOUS_USE_BIT for secondary command
+ buffers (public issue 182).
+ * Fix typos in VK_KHR_wayland_surface extension where code:wl_device was
+ used instead of code:wl_display (public issue 193).
+ * Replaced {apiname} with ``Vulkan'' in XML validity statements (public
+ issue 199).
+ * Fix dead links for WSI handle types (public issue 200).
+ * Use "signaled" instead of "signalled" spelling everywhere (public issue
+ 201).
+ * Move readme.pdf target directory for XML schema documentation into the
+ target generation directory, instead of leaving it checked into the spec
+ source tree (public issue 203).
+ * Fix duplicate 'which which' typo in description of
+ elink:VkCommandPoolResetFlagBits (public issue 204).
+ * Move the <> section up one level, out of
+ the <> section
+ (public issue 209).
+
+Internal Issues:
+
+ * Clarify in the <> section that
+ implementations should not manage the size of pipeline cache (internal
+ issue 192).
+ * Deprecate the concept of device layers and associated commands (internal
+ issue 255).
+ * Remove ename:VK_INCOMPLETE from the list of possible result codes of
+ flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR (internal issue 314).
+ * Add missing std140/std430 rule: the base alignment of a member following
+ a structure is a multiple of the structure's base alignment (internal
+ issue 321).
+ * Fixes naming of the single elink:VkColorSpaceKHR enum from
+ ename:VK_COLORSPACE_SRGB_NONLINEAR_KHR to
+ ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR in XML/header and the
+ VK_KHR_swapchain and VK_KHR_surface extensions to match the style of the
+ typename (space and color are two words, not one) (internal issue 322).
+ * Make it clear that code:LocalInvocationID should only be applied to an
+ input variable and normalize the language describing
+ code:LocalInvocationID to the language for other compute shader
+ variables in the <>
+ section, and add normative language (internal issue 323).
+ * Clarify in the <> section that
+ the result pointer may be modified for specific commands, even if a
+ runtime error is returned (internal issue 324).
+
+
+
+
+
diff --git a/doc/specs/vulkan/Makefile b/doc/specs/vulkan/Makefile
index 138084bf..72358b13 100644
--- a/doc/specs/vulkan/Makefile
+++ b/doc/specs/vulkan/Makefile
@@ -43,7 +43,7 @@ ECHO:=echo
# XHTMLDIR - 'xhtml' target
# PDFDIR - 'pdf' target
# CHECKDIR - 'allchecks' target
-OUTDIR :=../../../out/1.0
+OUTDIR := ../../../out/1.0
HTMLDIR := $(OUTDIR)/html
XHTMLDIR := $(OUTDIR)/xhtml
PDFDIR := $(OUTDIR)/pdf
@@ -125,7 +125,7 @@ INCLUDES := $(wildcard protos/*.txt structs/*.txt flags/*.txt enums/*.txt funcpo
COMMONDOCS := $(CHAPTERS) $(INCLUDES)
# A generated included file with the spec version, date, and git commit
SPECVERSION = specversion.txt
-SPECREVISION = 1.0.12
+SPECREVISION = 1.0.13
SPECREMARK =
# Spec targets
diff --git a/doc/specs/vulkan/appendices/glossary.txt b/doc/specs/vulkan/appendices/glossary.txt
index 913630ab..63430b9f 100644
--- a/doc/specs/vulkan/appendices/glossary.txt
+++ b/doc/specs/vulkan/appendices/glossary.txt
@@ -245,7 +245,7 @@ Explicitly-Enabled Layer::
list in flink:vkCreateInstance or flink:vkCreateDevice.
Event::
- A synchronization primitive that is signalled when execution of previous
+ A synchronization primitive that is signaled when execution of previous
commands complete through a specified set of pipeline stages. Events can
be waited on by the device and polled by the host. Represented by a
sname:VkEvent object.
diff --git a/doc/specs/vulkan/buildRelease b/doc/specs/vulkan/buildRelease
index 9d62a8a0..33df0fed 100755
--- a/doc/specs/vulkan/buildRelease
+++ b/doc/specs/vulkan/buildRelease
@@ -33,8 +33,7 @@ git checkout master
echo "**** AUTOGENERATING HEADERS AND SPEC INCLUDE FILES ****"
cd $xml
-make clobber
-make full_install
+make OUTDIR=$outdir clobber full_install
echo "**** CLEANING SPEC ****"
cd $spec
diff --git a/doc/specs/vulkan/chapters/cmdbuffers.txt b/doc/specs/vulkan/chapters/cmdbuffers.txt
index 68189dbd..7e463bca 100644
--- a/doc/specs/vulkan/chapters/cmdbuffers.txt
+++ b/doc/specs/vulkan/chapters/cmdbuffers.txt
@@ -136,7 +136,7 @@ command buffers allocated from the command pool back to the command pool.
All command buffers that have been allocated from the command pool are put
in the initial state.
-pname:flags is a bitmask controlling the operation. Bits which which can: be
+pname:flags is a bitmask controlling the operation. Bits which can: be
set include:
include::../enums/VkCommandPoolResetFlagBits.txt[]
@@ -336,7 +336,8 @@ fname:vkCmdExecuteCommands) until the final time that primary buffer's
submission to a queue completes. If, after the primary buffer completes, the
secondary command buffer is recorded to execute on a different primary
buffer, the first primary buffer mustnot: be resubmitted until after it is
-reset with flink:vkResetCommandBuffer.
+reset with flink:vkResetCommandBuffer unless the secondary command buffer
+was recorded with ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT.
If ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT is not set on a
secondary command buffer, that command buffer mustnot: be used more than
@@ -428,7 +429,7 @@ Each call to fname:vkQueueSubmit submits zero or more _batches_ of work to
the queue for execution. pname:submitCount is used to specify the number of
batches to submit. Each batch includes zero or more semaphores to wait upon,
and a corresponding set of stages that will wait for the semaphore to be
-signalled before executing any work, followed by a number of command buffers
+signaled before executing any work, followed by a number of command buffers
that will be executed, and finally, zero or more semaphores that will be
signaled after command buffer execution completes. Each batch is represented
as an instance of the slink:VkSubmitInfo structure stored in an array, the
diff --git a/doc/specs/vulkan/chapters/devsandqueues.txt b/doc/specs/vulkan/chapters/devsandqueues.txt
index 563d508a..c9782367 100644
--- a/doc/specs/vulkan/chapters/devsandqueues.txt
+++ b/doc/specs/vulkan/chapters/devsandqueues.txt
@@ -330,11 +330,9 @@ include::../structs/VkDeviceCreateInfo.txt[]
requested to be created along with the logical device. Refer to the
<> section below for
further details.
- * pname:enabledLayerCount is the number of device layers to enable.
- * pname:ppEnabledLayerNames is a pointer to an array of
- pname:enabledLayerCount null-terminated UTF-8 strings containing the
- names of layers to enable for the created device. See the
- <> section for further details.
+ * pname:enabledLayerCount is deprecated and ignored.
+ * pname:ppEnabledLayerNames is deprecated and ignored. See
+ <>.
* pname:enabledExtensionCount is the number of device extensions to
enable.
* pname:ppEnabledExtensionNames is a pointer to an array of
diff --git a/doc/specs/vulkan/chapters/drawing.txt b/doc/specs/vulkan/chapters/drawing.txt
index 0abc6ea2..220b56e1 100644
--- a/doc/specs/vulkan/chapters/drawing.txt
+++ b/doc/specs/vulkan/chapters/drawing.txt
@@ -340,7 +340,7 @@ The order of vertices in such a primitive is significant during
<>.
-=== Programmable Primitive Shading
+== Programmable Primitive Shading
Once primitives are assembled, they proceed to the vertex shading stage of
the pipeline. If the draw includes multiple instances, then the set of
diff --git a/doc/specs/vulkan/chapters/extensions.txt b/doc/specs/vulkan/chapters/extensions.txt
index 844ee097..41e526d8 100644
--- a/doc/specs/vulkan/chapters/extensions.txt
+++ b/doc/specs/vulkan/chapters/extensions.txt
@@ -7,17 +7,23 @@
Additional functionality may: be provided by layers or extensions. A layer
cannot: add or modify Vulkan commands, while an extension may: do so.
-There are two kinds of layers and extensions, instance and device. Instance
-layers and extensions are general purpose and do not depend on a specific
-device. Device layers and extensions operate on specific devices, and
-require a valid sname:VkDevice to be used. Instance extensions usually
-affect the operation of the API as a whole, whereas device layers and
-extensions tend to be hardware-specific. Examples of these might be:
+The set of layers to enable is specified when creating an instance, and those
+layers are able to intercept any Vulkan command dispatched to that instance
+or any of its child objects.
- * Whole API validation is an example of a good instance layer.
+Extensions can operate at either the instance or device scope. Enabled instance
+extensions are able to affect the operation of the instance and any of its
+child objects, while device extensions may: only be available on a subset of
+physical devices, must be individually enabled per-device, and only affect the
+operation of the devices where they are enabled.
+
+Examples of these might be:
+
+ * Whole API validation is an example of a layer.
* Debug capabilities might make a good instance extension.
* A layer that provides hardware-specific performance telemetry and
- analysis could be a device layer.
+ analysis could be a layer that is only active for devices created from
+ compatible physical devices.
* Functions to allow an application to use additional hardware features
beyond the core would be a good candidate for a device extension.
@@ -32,7 +38,7 @@ allowed ranges. Instead, a validation layer would do those checks and flag
issues. This avoids a performance penalty during production use of the
application because those layers would not be enabled in production.
-To query the available instance layers, call:
+To query the available layers, call:
include::../protos/vkEnumerateInstanceLayerProperties.txt[]
@@ -43,38 +49,16 @@ include::../protos/vkEnumerateInstanceLayerProperties.txt[]
include::../validity/protos/vkEnumerateInstanceLayerProperties.txt[]
-To enable a instance layer, the name of the layer should be added to the
-pname:ppEnabledLayerNames member of slink:VkInstanceCreateInfo when creating
-a sname:VkInstance.
-
-To query the layers available to a given physical device, call:
-
-include::../protos/vkEnumerateDeviceLayerProperties.txt[]
-
- * pname:physicalDevice is the physical device that will be queried.
- * pname:pPropertyCount is a pointer to an integer related to the number of
- layer properties available or queried, as described below.
- * pname:pProperties is either `NULL` or a pointer to an array of
- slink:VkLayerProperties structures.
-
-include::../validity/protos/vkEnumerateDeviceLayerProperties.txt[]
-
-To enable a device layer, the name of the layer should be added to the
-pname:ppEnabledLayerNames member of slink:VkDeviceCreateInfo when creating
-a sname:VkDevice.
-
-For both flink:vkEnumerateInstanceLayerProperties and
-flink:vkEnumerateDeviceLayerProperties, if pname:pProperties is `NULL`, then
-the number of layer properties available is returned in pname:pPropertyCount.
-Otherwise, pname:pPropertyCount must: point to a variable set by the user to
-the number of elements in the pname:pProperties array, and on return the
-variable is overwritten with the number of structures actually written to
-pname:pProperties. If pname:pPropertyCount is less than the
-number of layer properties available, at most pname:pPropertyCount
-structures will be written. If pname:pPropertyCount is smaller than the
-number of layers available, ename:VK_INCOMPLETE will be returned instead of
-ename:VK_SUCCESS, to indicate that not all the available layer properties
-were returned.
+If pname:pProperties is `NULL`, then the number of layer properties available
+is returned in pname:pPropertyCount. Otherwise, pname:pPropertyCount must:
+point to a variable set by the user to the number of elements in the
+pname:pProperties array, and on return the variable is overwritten with the
+number of structures actually written to pname:pProperties. If
+pname:pPropertyCount is less than the number of layer properties available, at
+most pname:pPropertyCount structures will be written. If pname:pPropertyCount
+is smaller than the number of layers available, ename:VK_INCOMPLETE will be
+returned instead of ename:VK_SUCCESS, to indicate that not all the available
+layer properties were returned.
The sname:VkLayerProperties structure is defined as:
@@ -82,9 +66,8 @@ include::../structs/VkLayerProperties.txt[]
* pname:layerName is a null-terminated UTF-8 string specifying the name of
the layer. Use this name in the pname:ppEnabledLayerNames array passed
- in the slink:VkInstanceCreateInfo and slink:VkDeviceCreateInfo
- structures passed to flink:vkCreateInstance and flink:vkCreateDevice,
- respectively, to enable this layer for an instance or device.
+ in the slink:VkInstanceCreateInfo structure to enable this layer for an
+ instance.
* pname:specVersion is the Vulkan version the layer was written to,
encoded as described in the <> section.
@@ -95,16 +78,82 @@ include::../structs/VkLayerProperties.txt[]
include::../validity/structs/VkLayerProperties.txt[]
+To enable a layer, the name of the layer should be added to the
+pname:ppEnabledLayerNames member of slink:VkInstanceCreateInfo when creating
+a sname:VkInstance.
+
Loader implementations may: provide mechanisms outside the Vulkan API for
enabling specific layers. Layers enabled through such a mechanism are
_implicitly enabled_, while layers enabled by including the layer name in
-the pname:ppEnabledLayerNames member of slink:VkDeviceCreateInfo are
+the pname:ppEnabledLayerNames member of slink:VkInstanceCreateInfo are
_explicitly enabled_. Except where otherwise specified, implicitly enabled
and explicitly enabled layers differ only in the way they are enabled.
Explicitly enabling a layer that is implicitly enabled has no additional
effect.
+[[extended-functionality-device-layer-deprecation]]
+=== Device Layer Deprecation
+
+Previous versions of this specification distinguished between instance and
+device layers. Instance layers were only able to intercept commands that
+operate on sname:VkInstance and sname:VkPhysicalDevice, except they were not
+able to intercept flink:vkCreateDevice. Device layers were enabled for
+individual devices when they were created, and could only intercept commands
+operating on that device or its child objects.
+
+Device-only layers are now deprecated, and this specification no longer
+distinguishes between instance and device layers. Layers are enabled during
+instance creation, and are able to intercept all commands operating on that
+instance or any of its child objects. At the time of deprecation there were no
+known device-only layers and no compelling reason to create one.
+
+In order to maintain compatibility with implementations released prior to
+device-layer deprecation, applications should: still enumerate and enable
+device layers. The behavior of fname:vkEnumerateDeviceLayerProperties and
+valid usage of the pname:ppEnabledLayerNames member of sname:VkDeviceCreateInfo
+maximizes compatibility with applications written to work with the previous
+requirements.
+
+Device layers can: be enumerated by calling:
+
+include::../protos/vkEnumerateDeviceLayerProperties.txt[]
+
+ * pname:pPropertyCount is a pointer to an integer related to the number of
+ layer properties available or queried.
+ * pname:pProperties is either `NULL` or a pointer to an array of
+ slink:VkLayerProperties structures.
+
+include::../validity/protos/vkEnumerateDeviceLayerProperties.txt[]
+
+If pname:pProperties is `NULL`, then the number of layer properties available
+is returned in pname:pPropertyCount. Otherwise, pname:pPropertyCount must:
+point to a variable set by the user to the number of elements in the
+pname:pProperties array, and on return the variable is overwritten with the
+number of structures actually written to pname:pProperties. If
+pname:pPropertyCount is less than the number of layer properties available, at
+most pname:pPropertyCount structures will be written. If pname:pPropertyCount
+is smaller than the number of layers available, ename:VK_INCOMPLETE will be
+returned instead of ename:VK_SUCCESS, to indicate that not all the available
+layer properties were returned.
+
+The list of layers enumerated by fname:vkEnumerateDeviceLayerProperties must:
+be exactly the sequence of layers enabled for the instance. The members of
+sname:VkLayerProperties for each enumerated layer must: be the same as the
+properties when the layer was enumerated by
+fname:vkEnumerateInstanceLayerProperties.
+
+The pname:ppEnabledLayerNames and pname:enabledLayerCount members of
+sname:VkDeviceCreateInfo are deprecated and their values must: be ignored by
+implementations. However, for compatibility, only an empty list of layers or a
+list that exactly matches the sequence enabled at instance creation time are
+valid, and validation layers should: issue diagnostics for other cases.
+
+Regardless of the enabled layer list provided in sname:VkDeviceCreateInfo, the
+sequence of layers active for a device will be exactly the sequence of layers
+enabled when the parent instance was created.
+
+
[[extended-functionality-extensions]]
== Extensions
@@ -123,7 +172,7 @@ To query the available instance extensions, call:
include::../protos/vkEnumerateInstanceExtensionProperties.txt[]
* pname:pLayerName is either `NULL` or a pointer to a null-terminated
- UTF-8 string naming the instance layer to retrieve extensions from.
+ UTF-8 string naming the layer to retrieve extensions from.
* pname:pPropertyCount is a pointer to an integer related to the number of
extension properties available or queried, as described below.
* pname:pProperties is either `NULL` or a pointer to an array of
@@ -136,7 +185,7 @@ implementation or by implicitly enabled layers are returned.
When pname:pLayerName is the name of a layer, the instance extensions
provided by that layer are returned.
-To enable a instance extension, the name of the extension should be added to
+To enable an instance extension, the name of the extension should be added to
the pname:ppEnabledExtensionNames member of slink:VkInstanceCreateInfo when
creating a sname:VkInstance.
@@ -146,7 +195,7 @@ include::../protos/vkEnumerateDeviceExtensionProperties.txt[]
* pname:physicalDevice is the physical device that will be queried.
* pname:pLayerName is either `NULL` or a pointer to a null-terminated
- UTF-8 string naming the device layer to retrieve extensions from.
+ UTF-8 string naming the layer to retrieve extensions from.
* pname:pPropertyCount is a pointer to an integer related to the number of
extension properties available or queried, as described below.
* pname:pProperties is either `NULL` or a pointer to an array of
@@ -159,10 +208,6 @@ implementation or by implicitly enabled layers are returned.
When pname:pLayerName is the name of a layer, the device extensions
provided by that layer are returned.
-To enable a device layer, the name of the layer should be added to the
-pname:ppEnabledExtensionNames member of slink:VkDeviceCreateInfo when
-creating a sname:VkDevice.
-
For both flink:vkEnumerateInstanceExtensionProperties and
flink:vkEnumerateDeviceExtensionProperties, if pname:pProperties is `NULL`,
then the number of extensions properties available is returned in
diff --git a/doc/specs/vulkan/chapters/fundamentals.txt b/doc/specs/vulkan/chapters/fundamentals.txt
index 35f9ef7f..dcf9049d 100644
--- a/doc/specs/vulkan/chapters/fundamentals.txt
+++ b/doc/specs/vulkan/chapters/fundamentals.txt
@@ -691,7 +691,7 @@ include::../enums/VkResult.txt[]
A requested format is not supported on this device.
If a command returns a run time error, it will leave any result pointers
-unmodified.
+unmodified, unless other behavior is explicitly defined in the specification.
Out of memory errors do not damage any currently existing Vulkan objects.
Objects that have already been successfully created can: still be used by
diff --git a/doc/specs/vulkan/chapters/interfaces.txt b/doc/specs/vulkan/chapters/interfaces.txt
index b283d564..02fe23b0 100644
--- a/doc/specs/vulkan/chapters/interfaces.txt
+++ b/doc/specs/vulkan/chapters/interfaces.txt
@@ -643,6 +643,11 @@ out according to the following rules.
+
* Any code:ArrayStride or code:MatrixStride decoration must: be an integer
multiple of the base alignment of the array or matrix from above.
++
+ * The code:Offset Decoration of a member immediately following a structure or
+ an array must: be greater than or equal to the next multiple of the base
+ alignment of that structure or array.
+
[NOTE]
.Note
@@ -742,7 +747,7 @@ The z component of code:FragCoord is the interpolated depth value of the
primitive, and the w component is the interpolated
latexmath:[$\frac{1}{w}$].
+
-The code:FragCoord decoration is only supported in fragment shaders. The
+The code:FragCoord decoration must: be used only within fragment shaders. The
code:Centroid interpolation decoration is ignored on code:FragCoord.
+
code:FragCoord must: be declared as a four-component vector of 32-bit
@@ -760,7 +765,7 @@ is an execution path through the shader that does not set code:FragDepth,
then the fragment's depth value is undefined for executions of the shader
that take that path.
+
-The code:FragDepth decoration is only supported in fragment shaders.
+The code:FragDepth decoration must: be used only within fragment shaders.
+
code:FragDepth must: be declared as a scalar 32-bit floating-point value.
@@ -797,7 +802,8 @@ workgroup. The value in this variable is equal to the index of the local
workgroup multiplied by the size of the local workgroup plus
code:LocalInvocationID.
+
-The code:GlobalInvocationID decoration is only supported in compute shaders.
+The code:GlobalInvocationID decoration must: be used only within compute
+shaders.
+
code:GlobalInvocationID must: be declared as a three-component vector of
32-bit integers.
@@ -810,7 +816,8 @@ the shader that is produced to satisfy internal requirements such as the
generation of derivatives.
+
--
-The code:HelperInvocation decoration is only supported in fragment shaders.
+The code:HelperInvocation decoration must: be used only within fragment
+shaders.
code:HelperInvocation must: be declared as a scalar 32-bit integer.
@@ -877,26 +884,34 @@ vertices of a given primitive. When used in a fragment shader, an input
variable decorated with code:Layer contains the layer index of the primitive
that the fragment invocation belongs to.
+
-The code:Layer decoration is only supported in geometry and fragment
+The code:Layer decoration must: be used only within geometry and fragment
shaders.
+
code:Layer must: be declared as a scalar 32-bit integer.
code:LocalInvocationID::
-This variable contains the location of the current compute shader invocation
-within the local workgroup. The range of possible values for each component
-of LocalInvocationID range from zero through the size of the workgroup in that
-dimension minus one. If the size of the workgroup in a particular dimension is
-one, then LocalInvocationID in that dimension will be zero. That is, if the
-workgroup is effectively two-dimensional, then code:LocalInvocationID.z will
-be zero, and if the workgroup is one-dimensional, then both
+The code:LocalInvocationID decoration can: be applied to a code:uvec3 input
+variable in a compute shader, in which case it will contain the location of the
+current compute shader invocation within the local workgroup. The possible
+values for each component of code:LocalInvocationID range from zero through to
+the size of the workgroup in that dimension minus one.
++
+The code:LocalInvocationID decoration must: be used only within compute
+shaders.
++
+code:LocalInvocationID must: be declared as a three-component vector of 32-bit
+integers.
+
+[NOTE]
+.Note
+====
+If the size of the workgroup in a particular dimension is one, then the
+code:LocalInvocationID in that dimension will be zero. If the workgroup is
+effectively two-dimensional, then code:LocalInvocationID.z will be zero.
+If the workgroup is effectively one-dimensional, then both
code:LocalInvocationID.y and code:LocalInvocationID.z will be zero.
-+
-The code:LocalInvocationID decoration is only supported in compute shaders.
-+
-code:LocalInvocationID must: be declared as a three-component vector of
-32-bit integers.
+====
code:NumWorkGroups::
@@ -907,7 +922,7 @@ to. It reflects the values passed to a call to flink:vkCmdDispatch or
through the structure consumed by the execution of
flink:vkCmdDispatchIndirect.
+
-The code:NumWorkGroups decoration is only supported in compute shaders.
+The code:NumWorkGroups decoration must: be used only within compute shaders.
+
code:NumWorkGroups must: be declared as a three-component vector of 32-bit
integers.
@@ -923,7 +938,7 @@ If a specialization constant or a constant is decorated with the
code:WorkgroupSize decoration, this must: take precedence over any execution
mode set for code:LocalSize.
+
-The code:WorkgroupSize decoration is only supported in compute shaders.
+The code:WorkgroupSize decoration must: be used only within compute shaders.
+
code:WorkgroupSize must: be declared as a three-component vector of 32-bit
integers.
@@ -936,8 +951,8 @@ vertices in the input patch being processed by the shader. A single
tessellation control or evaluation shader can: read patches of differing
sizes, so the code:PatchVertices variable may: differ between patches.
+
-The code:PatchVertices decoration is only supported in tessellation control
-and evaluation shaders.
+The code:PatchVertices decoration must: be used only within tessellation
+control and evaluation shaders.
+
code:PatchVertices must: be declared as scalar 32-bit integer.
@@ -951,7 +966,7 @@ Point Rasterization>>. If the primitive the fragment shader invocation
belongs to is not a point, then code:PointCoord is undefined.
+
--
-The code:PointCoord decoration is only supported in fragment shaders.
+The code:PointCoord decoration must: be used only within fragment shaders.
code:PointCoord must: be declared as two-component vector of 32-bit
floating-point values.
@@ -1076,7 +1091,7 @@ shader entry point's interface does not include an output variable decorated
with code:SampleMask, the sample mask has no effect on the processing of a
fragment.
+
-The code:SampleMask decoration is only supported in fragment shaders.
+The code:SampleMask decoration must: be used only within fragment shaders.
+
code:SampleMask must: be declared as an array of 32-bit integers.
@@ -1089,7 +1104,7 @@ fragment shader entry point's interface includes an input variable decorated
with code:SamplePosition, per-sample shading is enabled for draws that use
that fragment shader.
+
-The code:SamplePosition decoration is only supported in fragment shaders.
+The code:SamplePosition decoration must: be used only within fragment shaders.
+
code:SamplePosition must: be declared as a two-component vector of
floating-point values.
@@ -1103,7 +1118,7 @@ and w are in the range latexmath:[$[0,1\]$] and vary linearly across the
primitive being subdivided. For the tessellation modes of code:Quads or
code:IsoLines, the third component is always zero.
+
-The code:TessellationCoord decoration is only available to tessellation
+The code:TessellationCoord decoration must: be used only within tessellation
evaluation shaders.
+
code:TessellationCoord must: be declared as three-component vector of 32-bit
@@ -1119,7 +1134,7 @@ tessellation evaluation shaders. When applied to an input variable in a
tessellation evaluation shader, the shader can: read the value written by
the tessellation control shader.
+
-The code:TessellationLevelOuter decoration is not available outside
+The code:TessellationLevelOuter decoration must: be used only within
tessellation control and evaluation shaders.
+
code:TessellationLevelOuter must: be declared as an array of size two,
@@ -1135,7 +1150,7 @@ tessellation evaluation shaders. When applied to an input variable in a
tessellation evaluation shader, the shader can: read the value written by
the tessellation control shader.
+
-The code:TessellationLevelInner decoration is not available outside
+The code:TessellationLevelInner decoration must: be used only within
tessellation control and evaluation shaders.
+
code:TessellationLevelInner must: be declared as an array of size four,
@@ -1156,8 +1171,7 @@ consumed by flink:vkCmdDrawIndexedIndirect.
+
code:VertexIndex starts at the same starting value for each instance.
+
-The code:VertexIndex decoration mustnot: be used in any shader stage other
-than vertex.
+The code:VertexIndex decoration must: be used only within vertex shaders.
+
code:VertexIndex must: be declared as a 32-bit integer.
@@ -1176,8 +1190,8 @@ in a fragment shader, an input variable decorated with code:ViewportIndex
contains the viewport index of the primitive that the fragment invocation
belongs to.
+
-The code:ViewportIndex decoration is only supported in geometry and fragment
-shaders.
+The code:ViewportIndex decoration must: be used only within geometry and
+fragment shaders.
+
code:ViewportIndex must: be declared as a 32-bit integer.
@@ -1190,7 +1204,7 @@ Each component ranges from zero to the values of the parameters passed into
flink:vkCmdDispatch or read from the sname:VkDispatchIndirectCommand
structure read through a call to flink:vkCmdDispatchIndirect.
+
-The code:WorkGroupID decoration is only supported in compute shaders.
+The code:WorkGroupID decoration must: be used only within compute shaders.
+
code:WorkGroupID must: be declared as a three-component vector of 32-bit
integers.
diff --git a/doc/specs/vulkan/chapters/pipelines.txt b/doc/specs/vulkan/chapters/pipelines.txt
index 0c9382dd..f2b4a0ba 100644
--- a/doc/specs/vulkan/chapters/pipelines.txt
+++ b/doc/specs/vulkan/chapters/pipelines.txt
@@ -493,8 +493,9 @@ pipelines is achieved by passing the same pipeline cache object when
creating multiple related pipelines. Reuse across runs of an application is
achieved by retrieving pipeline cache contents in one run of an application,
saving the contents, and using them to preinitialize a pipeline cache on a
-subsequent run. The contents and size of the pipeline cache objects are
-managed by the implementation. Applications can: control the amount of data
+subsequent run. The contents of the pipeline cache objects are
+managed by the implementation. Applications can: manage the host memory
+consumed by a pipeline cache object and control the amount of data
retrieved from a pipeline cache object.
Pipeline cache objects are created by calling:
@@ -511,6 +512,16 @@ include::../protos/vkCreatePipelineCache.txt[]
* pname:pPipelineCache is a pointer to a sname:VkPipelineCache handle in
which the resulting pipeline cache object is returned.
+[NOTE]
+.Note
+====
+Applications can: track and manage the total host memory size of a pipeline
+cache object using the pname:pAllocator. Applications can: limit the amount
+of data retrieved from a pipeline cache object in fname:vkGetPipeineCacheData.
+Implementations shouldnot: internally limit the total number of entries added to a
+pipeline cache object or the total host memory consumed.
+====
+
include::../validity/protos/vkCreatePipelineCache.txt[]
The sname:VkPipelineCacheCreateInfo structure is defined as:
diff --git a/doc/specs/vulkan/genRelease b/doc/specs/vulkan/genRelease
index 6341e815..535da30d 100755
--- a/doc/specs/vulkan/genRelease
+++ b/doc/specs/vulkan/genRelease
@@ -18,7 +18,9 @@ from datetime import *
# branch = branch or commit or tag name
# label = textual label to apply
# outdir = directory to generate specs in
-def buildRelease(branch,label,outdir,targets):
+# xmlTargets = targets to build in src/spec/
+# specTargets = targets to build in doc/specs/vulkan/
+def buildRelease(branch,label,outdir,xmlTargets,specTargets):
global root, xml, spec
print('echo Info: Generating branch=' + branch,
@@ -26,10 +28,6 @@ def buildRelease(branch,label,outdir,targets):
'outdir=' + outdir)
print('git checkout', branch)
- print('echo Info: Generating headers and spec include files')
- print('cd', xml)
- print('make clobber full_install')
-
print('echo Info: Cleaning spec in', outdir)
print('cd', spec)
print('rm -rf',
@@ -40,9 +38,15 @@ def buildRelease(branch,label,outdir,targets):
outdir + '/vkspec.html',
'specversion.txt')
+ print('echo Info: Generating headers and spec include files')
+ print('cd', xml)
+ print('make OUTDIR=' + outdir, xmlTargets)
+
print('echo Info: Generating spec')
+ print('cd', spec)
print('make specversion.txt')
- print('make -j 4 OUTDIR=' + outdir, ' NOTEOPTS="-a implementation-guide"', targets)
+ print('make -j 4 OUTDIR=' + outdir, ' NOTEOPTS="-a implementation-guide"',
+ specTargets)
print('rm', outdir + '/pdf/vkspec.xml')
# Main
@@ -68,11 +72,15 @@ wsibranch = '1.0-wsi_extensions'
now = datetime.today().strftime('%Y%m%d')
# Generate specs
-coretargets='xhtml pdf styleguide manhtml manpdf manhtmlpages'
-buildRelease(corebranch, corebranch, outdir + corebranch, coretargets)
+coreXmlTargets='clobber full_install pdf_install'
+coreSpecTargets='xhtml pdf styleguide manhtml manpdf manhtmlpages'
+buildRelease(corebranch, corebranch, outdir + corebranch,
+ coreXmlTargets, coreSpecTargets)
-wsitargets='xhtml pdf'
-buildRelease(wsibranch, wsibranch, outdir + wsibranch, wsitargets)
+wsiXmlTargets='clobber full_install'
+wsiSpecTargets='xhtml pdf'
+buildRelease(wsibranch, wsibranch, outdir + wsibranch,
+ wsiXmlTargets, wsiSpecTargets)
print('echo Info: post-generation cleanup')
@@ -80,8 +88,9 @@ print('git checkout ' + corebranch)
print('echo To tag the spec branches, execute these commands:')
print('echo git checkout', corebranch)
-print('echo git tag -a -m \\"Tag core API specification for', now, 'release\\"', 'v1.0-core-' + now)
+print('echo git tag -a -m \\"Tag core API specification for', now,
+ 'release\\"', 'v1.0-core-' + now)
print('echo git checkout', wsibranch)
-print('echo git tag -a -m \\"Tag core+WSI API specification for', now, 'release\\"', 'v1.0-core+wsi-' + now)
-print('echo git push --tags')
+print('echo git tag -a -m \\"Tag core+WSI API specification for', now,
+ 'release\\"', 'v1.0-core+wsi-' + now)
diff --git a/doc/specs/vulkan/man/vkCmdWaitEvents.txt b/doc/specs/vulkan/man/vkCmdWaitEvents.txt
index ca63b29c..827c78ba 100644
--- a/doc/specs/vulkan/man/vkCmdWaitEvents.txt
+++ b/doc/specs/vulkan/man/vkCmdWaitEvents.txt
@@ -43,13 +43,13 @@ Description
-----------
fname:vkCmdWaitEvents waits for a number of event objects to become
-signalled and inserts a set of memory barriers into the command buffer
+signaled and inserts a set of memory barriers into the command buffer
specified by pname:commandBuffer.
fname:vkCmdWaitEvents waits for each of the pname:eventCount event object
-specified by pname:pEvents to become signalled. The point at which each is
-signalled must have been specified in the command that caused the object to
-become signalled (either fname:vkSetEvent or fname:vkCmdSetEvent) and must
+specified by pname:pEvents to become signaled. The point at which each is
+signaled must have been specified in the command that caused the object to
+become signaled (either fname:vkSetEvent or fname:vkCmdSetEvent) and must
also have the corresponding bit set in pname:srcStageMask.
The pname:ppMemoryBarriers parameter is a pointer to an array of pname:memoryBarrierCount
diff --git a/doc/specs/vulkan/style/styleguide.txt b/doc/specs/vulkan/style/styleguide.txt
index 245ea937..f4f324ee 100644
--- a/doc/specs/vulkan/style/styleguide.txt
+++ b/doc/specs/vulkan/style/styleguide.txt
@@ -641,6 +641,16 @@ write that it ``contains one or more bits''. A counter example is that it is oka
to write ``For non-stereoscopic-3D applications, this value is 1.''
+=== Use American Spelling Conventions
+
+In case of conflict, use American rather than British spelling
+conventions. For example:
+
+*Correct:* color, signaled.
+
+*Incorrect:* colour, signalled.
+
+
[[writingstyle-describing]]
== Describing Commands and Parameters
@@ -963,6 +973,9 @@ for this structure:
= Revision History
+* May 1, 2016 - Include feedback from public Github issues 120 and 190. Use
+ consistent conventions for defining structures. Use American rather than
+ British spelling conventions.
* March 12, 2016 - Recommend against "the value of".
* February 26, 2016 - Replace use of the "maynot{cl}" macro with "may{cl} not".
* February 16, 2016 - Place asciidoc conversion post-release.
diff --git a/doc/specs/vulkan/validity/protos/vkEnumerateDeviceExtensionProperties.txt b/doc/specs/vulkan/validity/protos/vkEnumerateDeviceExtensionProperties.txt
index f3ad2c1b..edb44cbc 100644
--- a/doc/specs/vulkan/validity/protos/vkEnumerateDeviceExtensionProperties.txt
+++ b/doc/specs/vulkan/validity/protos/vkEnumerateDeviceExtensionProperties.txt
@@ -11,7 +11,7 @@ endif::doctype-manpage[]
* If pname:pLayerName is not `NULL`, pname:pLayerName must: be a null-terminated string
* pname:pPropertyCount must: be a pointer to a basetype:uint32_t value
* If the value referenced by pname:pPropertyCount is not `0`, and pname:pProperties is not `NULL`, pname:pProperties must: be a pointer to an array of pname:pPropertyCount sname:VkExtensionProperties structures
-* If pname:pLayerName is not `NULL`, it must: be the name of a device layer returned by flink:vkEnumerateDeviceLayerProperties
+* If pname:pLayerName is not `NULL`, it must: be the name of a layer returned by flink:vkEnumerateDeviceLayerProperties
ifndef::doctype-manpage[]
********************************************************************************
endif::doctype-manpage[]
diff --git a/doc/specs/vulkan/validity/protos/vkEnumerateInstanceExtensionProperties.txt b/doc/specs/vulkan/validity/protos/vkEnumerateInstanceExtensionProperties.txt
index 7a202b76..0b21ed71 100644
--- a/doc/specs/vulkan/validity/protos/vkEnumerateInstanceExtensionProperties.txt
+++ b/doc/specs/vulkan/validity/protos/vkEnumerateInstanceExtensionProperties.txt
@@ -10,7 +10,7 @@ endif::doctype-manpage[]
* If pname:pLayerName is not `NULL`, pname:pLayerName must: be a null-terminated string
* pname:pPropertyCount must: be a pointer to a basetype:uint32_t value
* If the value referenced by pname:pPropertyCount is not `0`, and pname:pProperties is not `NULL`, pname:pProperties must: be a pointer to an array of pname:pPropertyCount sname:VkExtensionProperties structures
-* If pname:pLayerName is not `NULL`, it must: be the name of an instance layer returned by flink:vkEnumerateInstanceLayerProperties
+* If pname:pLayerName is not `NULL`, it must: be the name of a layer returned by flink:vkEnumerateInstanceLayerProperties
ifndef::doctype-manpage[]
********************************************************************************
endif::doctype-manpage[]
diff --git a/doc/specs/vulkan/validity/protos/vkQueueBindSparse.txt b/doc/specs/vulkan/validity/protos/vkQueueBindSparse.txt
index 6f820ecf..44672ff3 100644
--- a/doc/specs/vulkan/validity/protos/vkQueueBindSparse.txt
+++ b/doc/specs/vulkan/validity/protos/vkQueueBindSparse.txt
@@ -12,7 +12,7 @@ endif::doctype-manpage[]
* If pname:fence is not sname:VK_NULL_HANDLE, pname:fence must: be a valid sname:VkFence handle
* The pname:queue must: support sparse binding operations
* Each of pname:queue and pname:fence that are valid handles must: have been created, allocated or retrieved from the same sname:VkDevice
-* pname:fence must: be unsignalled
+* pname:fence must: be unsignaled
* pname:fence mustnot: be associated with any other queue command that has not yet completed execution on that queue
ifndef::doctype-manpage[]
********************************************************************************
diff --git a/doc/specs/vulkan/validity/protos/vkQueueSubmit.txt b/doc/specs/vulkan/validity/protos/vkQueueSubmit.txt
index d066a965..d29228fb 100644
--- a/doc/specs/vulkan/validity/protos/vkQueueSubmit.txt
+++ b/doc/specs/vulkan/validity/protos/vkQueueSubmit.txt
@@ -11,7 +11,7 @@ endif::doctype-manpage[]
* If pname:submitCount is not `0`, pname:pSubmits must: be a pointer to an array of pname:submitCount valid sname:VkSubmitInfo structures
* If pname:fence is not sname:VK_NULL_HANDLE, pname:fence must: be a valid sname:VkFence handle
* Each of pname:queue and pname:fence that are valid handles must: have been created, allocated or retrieved from the same sname:VkDevice
-* If pname:fence is not sname:VK_NULL_HANDLE, pname:fence must: be unsignalled
+* If pname:fence is not sname:VK_NULL_HANDLE, pname:fence must: be unsignaled
* If pname:fence is not sname:VK_NULL_HANDLE, pname:fence mustnot: be associated with any other queue command that has not yet completed execution on that queue
ifndef::doctype-manpage[]
********************************************************************************
diff --git a/doc/specs/vulkan/validity/structs/VkDeviceCreateInfo.txt b/doc/specs/vulkan/validity/structs/VkDeviceCreateInfo.txt
index 2578a59b..e2e546a3 100644
--- a/doc/specs/vulkan/validity/structs/VkDeviceCreateInfo.txt
+++ b/doc/specs/vulkan/validity/structs/VkDeviceCreateInfo.txt
@@ -15,7 +15,7 @@ endif::doctype-manpage[]
* If pname:enabledExtensionCount is not `0`, pname:ppEnabledExtensionNames must: be a pointer to an array of pname:enabledExtensionCount null-terminated strings
* If pname:pEnabledFeatures is not `NULL`, pname:pEnabledFeatures must: be a pointer to a valid sname:VkPhysicalDeviceFeatures structure
* pname:queueCreateInfoCount must: be greater than `0`
-* Any given element of pname:ppEnabledLayerNames must: be the name of a layer present on the system, exactly matching a string returned in the sname:VkLayerProperties structure by fname:vkEnumerateDeviceLayerProperties
+* pname:ppEnabledLayerNames must: either be sname:NULL or contain the same sequence of layer names that was enabled when creating the parent instance
* Any given element of pname:ppEnabledExtensionNames must: be the name of an extension present on the system, exactly matching a string returned in the sname:VkExtensionProperties structure by fname:vkEnumerateDeviceExtensionProperties
* If an extension listed in pname:ppEnabledExtensionNames is provided as part of a layer, then both the layer and extension must: be enabled to enable that extension
* The pname:queueFamilyIndex member of any given element of pname:pQueueCreateInfos must: be unique within pname:pQueueCreateInfos
diff --git a/doc/specs/vulkan/validity/structs/VkSubmitInfo.txt b/doc/specs/vulkan/validity/structs/VkSubmitInfo.txt
index 4a644444..39a81fa2 100644
--- a/doc/specs/vulkan/validity/structs/VkSubmitInfo.txt
+++ b/doc/specs/vulkan/validity/structs/VkSubmitInfo.txt
@@ -15,7 +15,7 @@ endif::doctype-manpage[]
* If pname:commandBufferCount is not `0`, pname:pCommandBuffers must: be a pointer to an array of pname:commandBufferCount valid sname:VkCommandBuffer handles
* If pname:signalSemaphoreCount is not `0`, pname:pSignalSemaphores must: be a pointer to an array of pname:signalSemaphoreCount valid sname:VkSemaphore handles
* Each of the elements of pname:pWaitSemaphores, the elements of pname:pCommandBuffers and the elements of pname:pSignalSemaphores that are valid handles must: have been created, allocated or retrieved from the same sname:VkDevice
-* Any given element of pname:pSignalSemaphores must: currently be unsignalled
+* Any given element of pname:pSignalSemaphores must: currently be unsignaled
* Any given element of pname:pCommandBuffers must: either have been recorded with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, or not currently be executing on the device
* Any given element of pname:pCommandBuffers must: be in the executable state
* If any given element of pname:pCommandBuffers contains commands that execute secondary command buffers, those secondary command buffers must: have been recorded with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, or not currently be executing on the device
diff --git a/out/index.html b/out/index.html
index cfc7ba88..8c155c73 100644
--- a/out/index.html
+++ b/out/index.html
@@ -9,9 +9,11 @@
related documents. It is updated by hand periodically by Jon Leech.
- - The Vulkan Style Guide is a work
- in progress (but significantly complete) document, useful when
- writing and modifying Specification and reference page language.
+
- The Vulkan Style Guide is a work in
+ progress (but significantly complete) document, useful when writing
+ and modifying Specification and reference page language.
+ - The XML Registry README describes the
+ schema and some use cases for vk.xml.
- Core API Specifications
- The following targets are for internal use only and are probably
- not included in, or if included, not up to date in the sandbox
-
+ not included in, or if included, not up to date in the sandbox
+
diff --git a/src/spec/Makefile b/src/spec/Makefile
index b8f15fe4..8c999d14 100644
--- a/src/spec/Makefile
+++ b/src/spec/Makefile
@@ -19,6 +19,7 @@ PYTHON ?= python3
PYFILES = genheaders.py reg.py
GENOPTS =
GENHEADERS = genheaders.py $(GENOPTS)
+OUTDIR = ../../out/1.0
# Generate all outputs for Vulkan, including headers and (soon) Asciidoc
# frameworks. Targets:
@@ -39,7 +40,7 @@ DOCROOT = ../../doc/specs/vulkan
DOCPYSRC = $(DOCROOT)/vkapi.py
DOCVALIDITY = validity
DOCHOSTSYNCTABLE = hostsynctable
-XMLDOC = readme.pdf
+XMLDOC = $(OUTDIR)/readme.pdf
# Could add $(XMLDOC) to default, but that requires a LaTeX install.
# Could regenerate vk.json automatically but the generator script isn't
@@ -50,6 +51,8 @@ default install: $(HEADERS)
full_install: default $(DOCINCLUDES) $(DOCPYSRC) $(DOCVALIDITY) $(DOCHOSTSYNCTABLE)
+pdf_install: $(OUTDIR)/readme.pdf
+
################################################
# Python and XML files on which vulkan.h depends
@@ -97,12 +100,13 @@ vk.json: tojson.py vk.xml
################################################
# Documentation targets
-readme.pdf: readme.tex Makefile
+$(OUTDIR)/readme.pdf: readme.tex Makefile
touch readme.ind
pdflatex readme.tex
pdflatex readme.tex
makeindex readme.idx
pdflatex readme.tex
+ mv readme.pdf $@
################################################
@@ -128,6 +132,7 @@ clean:
# (installed header & asciidoc includes)
clobber: clean
-rm -f $(HEADERS) $(DOCINCLUDES)
+ -rm -f $(OUTDIR)/readme.pdf
-rm -f $(DOCROOT)/vkapi.py
-rm -f $(DOCROOT)/structs/*.txt $(DOCROOT)/protos/*.txt
-rm -f $(DOCROOT)/enums/*.txt $(DOCROOT)/flags/*.txt
diff --git a/src/spec/readme.pdf b/src/spec/readme.pdf
deleted file mode 100644
index 14f8f22e..00000000
--- a/src/spec/readme.pdf
+++ /dev/null
@@ -1,5285 +0,0 @@
-%PDF-1.5
-%
-1 0 obj
-<< /S /GoTo /D (section.1) >>
-endobj
-4 0 obj
-(1 Introduction)
-endobj
-5 0 obj
-<< /S /GoTo /D (subsection.1.1) >>
-endobj
-8 0 obj
-(1.1 Schema Choices)
-endobj
-9 0 obj
-<< /S /GoTo /D (section.2) >>
-endobj
-12 0 obj
-(2 Getting Started)
-endobj
-13 0 obj
-<< /S /GoTo /D (subsection.2.1) >>
-endobj
-16 0 obj
-(2.1 Header Generation Script - genvk.py)
-endobj
-17 0 obj
-<< /S /GoTo /D (subsection.2.2) >>
-endobj
-20 0 obj
-(2.2 Registry Processing Script - reg.py)
-endobj
-21 0 obj
-<< /S /GoTo /D (subsection.2.3) >>
-endobj
-24 0 obj
-(2.3 Output Generator Script - generator.py)
-endobj
-25 0 obj
-<< /S /GoTo /D (section.3) >>
-endobj
-28 0 obj
-(3 Vulkan Registry Schema)
-endobj
-29 0 obj
-<< /S /GoTo /D (subsection.3.1) >>
-endobj
-32 0 obj
-(3.1 Profiles)
-endobj
-33 0 obj
-<< /S /GoTo /D (subsection.3.2) >>
-endobj
-36 0 obj
-(3.2 API Names)
-endobj
-37 0 obj
-<< /S /GoTo /D (section.4) >>
-endobj
-40 0 obj
-(4 Registry Root \( tag\))
-endobj
-41 0 obj
-<< /S /GoTo /D (subsection.4.1) >>
-endobj
-44 0 obj
-(4.1 Attributes of tags)
-endobj
-45 0 obj
-<< /S /GoTo /D (subsection.4.2) >>
-endobj
-48 0 obj
-(4.2 Contents of tags)
-endobj
-49 0 obj
-<< /S /GoTo /D (section.5) >>
-endobj
-52 0 obj
-(5 Vendor IDs \( tag\))
-endobj
-53 0 obj
-<< /S /GoTo /D (subsection.5.1) >>
-endobj
-56 0 obj
-(5.1 Attributes of tags)
-endobj
-57 0 obj
-<< /S /GoTo /D (section.6) >>
-endobj
-60 0 obj
-(6 Author Prefixes \( tag\))
-endobj
-61 0 obj
-<< /S /GoTo /D (subsection.6.1) >>
-endobj
-64 0 obj
-(6.1 Attributes of tags)
-endobj
-65 0 obj
-<< /S /GoTo /D (section.7) >>
-endobj
-68 0 obj
-(7 API types \( tag\))
-endobj
-69 0 obj
-<< /S /GoTo /D (subsection.7.1) >>
-endobj
-72 0 obj
-(7.1 Attributes of tags)
-endobj
-73 0 obj
-<< /S /GoTo /D (subsection.7.2) >>
-endobj
-76 0 obj
-(7.2 Contents of tags)
-endobj
-77 0 obj
-<< /S /GoTo /D (subsubsection.7.2.1) >>
-endobj
-80 0 obj
-(7.2.1 Enumerated types - category "enum")
-endobj
-81 0 obj
-<< /S /GoTo /D (subsubsection.7.2.2) >>
-endobj
-84 0 obj
-(7.2.2 Structure types - category "struct" or "union")
-endobj
-85 0 obj
-<< /S /GoTo /D (section*.2) >>
-endobj
-88 0 obj
-(Structure member \(\) tags)
-endobj
-89 0 obj
-<< /S /GoTo /D (section*.3) >>
-endobj
-92 0 obj
-(Attributes of tags)
-endobj
-93 0 obj
-<< /S /GoTo /D (section*.4) >>
-endobj
-96 0 obj
-(Contents of tags)
-endobj
-97 0 obj
-<< /S /GoTo /D (section*.5) >>
-endobj
-100 0 obj
-(Validation \(\) tags)
-endobj
-101 0 obj
-<< /S /GoTo /D (section*.6) >>
-endobj
-104 0 obj
-(Contents of tags)
-endobj
-105 0 obj
-<< /S /GoTo /D (subsubsection.7.2.3) >>
-endobj
-108 0 obj
-(7.2.3 All other types)
-endobj
-109 0 obj
-<< /S /GoTo /D (subsection.7.3) >>
-endobj
-112 0 obj
-(7.3 Example of a tag)
-endobj
-113 0 obj
-<< /S /GoTo /D (section.8) >>
-endobj
-116 0 obj
-(8 Enumerant Blocks \( tag\))
-endobj
-117 0 obj
-<< /S /GoTo /D (subsection.8.1) >>
-endobj
-120 0 obj
-(8.1 Attributes of tags)
-endobj
-121 0 obj
-<< /S /GoTo /D (subsection.8.2) >>
-endobj
-124 0 obj
-(8.2 Contents of tags)
-endobj
-125 0 obj
-<< /S /GoTo /D (subsection.8.3) >>
-endobj
-128 0 obj
-(8.3 Example of tags)
-endobj
-129 0 obj
-<< /S /GoTo /D (section.9) >>
-endobj
-132 0 obj
-(9 Enumerants \( tag\))
-endobj
-133 0 obj
-<< /S /GoTo /D (subsection.9.1) >>
-endobj
-136 0 obj
-(9.1 Attributes of tags)
-endobj
-137 0 obj
-<< /S /GoTo /D (subsection.9.2) >>
-endobj
-140 0 obj
-(9.2 Contents of tags)
-endobj
-141 0 obj
-<< /S /GoTo /D (section.10) >>
-endobj
-144 0 obj
-(10 Unused Enumerants \( tag\))
-endobj
-145 0 obj
-<< /S /GoTo /D (subsection.10.1) >>
-endobj
-148 0 obj
-(10.1 Attributes of tags)
-endobj
-149 0 obj
-<< /S /GoTo /D (subsection.10.2) >>
-endobj
-152 0 obj
-(10.2 Contents of tags)
-endobj
-153 0 obj
-<< /S /GoTo /D (section.11) >>
-endobj
-156 0 obj
-(11 Command Blocks \( tag\))
-endobj
-157 0 obj
-<< /S /GoTo /D (subsection.11.1) >>
-endobj
-160 0 obj
-(11.1 Attributes of tags)
-endobj
-161 0 obj
-<< /S /GoTo /D (subsection.11.2) >>
-endobj
-164 0 obj
-(11.2 Contents of tags)
-endobj
-165 0 obj
-<< /S /GoTo /D (section.12) >>
-endobj
-168 0 obj
-(12 Commands \( tag\))
-endobj
-169 0 obj
-<< /S /GoTo /D (subsection.12.1) >>
-endobj
-172 0 obj
-(12.1 Attributes of tags)
-endobj
-173 0 obj
-<< /S /GoTo /D (subsection.12.2) >>
-endobj
-176 0 obj
-(12.2 Contents of tags)
-endobj
-177 0 obj
-<< /S /GoTo /D (subsection.12.3) >>
-endobj
-180 0 obj
-(12.3 Command prototype \( tags\))
-endobj
-181 0 obj
-<< /S /GoTo /D (subsubsection.12.3.1) >>
-endobj
-184 0 obj
-(12.3.1 Attributes of tags)
-endobj
-185 0 obj
-<< /S /GoTo /D (subsubsection.12.3.2) >>
-endobj
-188 0 obj
-(12.3.2 Contents of tags)
-endobj
-189 0 obj
-<< /S /GoTo /D (subsection.12.4) >>
-endobj
-192 0 obj
-(12.4 Command parameter \( tags\))
-endobj
-193 0 obj
-<< /S /GoTo /D (subsubsection.12.4.1) >>
-endobj
-196 0 obj
-(12.4.1 Attributes of tags)
-endobj
-197 0 obj
-<< /S /GoTo /D (subsubsection.12.4.2) >>
-endobj
-200 0 obj
-(12.4.2 Contents of tags)
-endobj
-201 0 obj
-<< /S /GoTo /D (subsection.12.5) >>
-endobj
-204 0 obj
-(12.5 Example of a tag)
-endobj
-205 0 obj
-<< /S /GoTo /D (subsection.12.6) >>
-endobj
-208 0 obj
-(12.6 Parameter validation \(\) tags)
-endobj
-209 0 obj
-<< /S /GoTo /D (section*.7) >>
-endobj
-212 0 obj
-(Contents of tags)
-endobj
-213 0 obj
-<< /S /GoTo /D (section.13) >>
-endobj
-216 0 obj
-(13 API Features / Versions \( tag\))
-endobj
-217 0 obj
-<< /S /GoTo /D (subsection.13.1) >>
-endobj
-220 0 obj
-(13.1 Attributes of tags)
-endobj
-221 0 obj
-<< /S /GoTo /D (subsection.13.2) >>
-endobj
-224 0 obj
-(13.2 Contents of tags)
-endobj
-225 0 obj
-<< /S /GoTo /D (subsection.13.3) >>
-endobj
-228 0 obj
-(13.3 Example of a tag)
-endobj
-229 0 obj
-<< /S /GoTo /D (section.14) >>
-endobj
-232 0 obj
-(14 Extension Blocks \( tag\))
-endobj
-233 0 obj
-<< /S /GoTo /D (subsection.14.1) >>
-endobj
-236 0 obj
-(14.1 Attributes of tags)
-endobj
-237 0 obj
-<< /S /GoTo /D (subsection.14.2) >>
-endobj
-240 0 obj
-(14.2 Contents of tags)
-endobj
-241 0 obj
-<< /S /GoTo /D (section.15) >>
-endobj
-244 0 obj
-(15 API Extensions \( tag\))
-endobj
-245 0 obj
-<< /S /GoTo /D (subsection.15.1) >>
-endobj
-248 0 obj
-(15.1 Attributes of tags)
-endobj
-249 0 obj
-<< /S /GoTo /D (subsection.15.2) >>
-endobj
-252 0 obj
-(15.2 Contents of tags)
-endobj
-253 0 obj
-<< /S /GoTo /D (subsection.15.3) >>
-endobj
-256 0 obj
-(15.3 Example of an tag)
-endobj
-257 0 obj
-<< /S /GoTo /D (section.16) >>
-endobj
-260 0 obj
-(16 Required and Removed Interfaces \( and tags\))
-endobj
-261 0 obj
-<< /S /GoTo /D (subsection.16.1) >>
-endobj
-264 0 obj
-(16.1 Attributes of and tags)
-endobj
-265 0 obj
-<< /S /GoTo /D (subsection.16.2) >>
-endobj
-268 0 obj
-(16.2 Contents of and tags)
-endobj
-269 0 obj
-<< /S /GoTo /D (subsection.16.3) >>
-endobj
-272 0 obj
-(16.3 Examples of Extension Enumerants)
-endobj
-273 0 obj
-<< /S /GoTo /D (appendix.A) >>
-endobj
-276 0 obj
-(A Examples / FAQ / How Do I?)
-endobj
-277 0 obj
-<< /S /GoTo /D (subsection.A.1) >>
-endobj
-280 0 obj
-(A.1 General Strategy)
-endobj
-281 0 obj
-<< /S /GoTo /D (subsection.A.2) >>
-endobj
-284 0 obj
-(A.2 API Feature Dependencies)
-endobj
-285 0 obj
-<< /S /GoTo /D (subsubsection.A.2.1) >>
-endobj
-288 0 obj
-(A.2.1 API Feature Walkthrough)
-endobj
-289 0 obj
-<< /S /GoTo /D (subsection.A.3) >>
-endobj
-292 0 obj
-(A.3 How To Add A Compile-Time Constant)
-endobj
-293 0 obj
-<< /S /GoTo /D (subsection.A.4) >>
-endobj
-296 0 obj
-(A.4 How To Add A Struct or Union Type)
-endobj
-297 0 obj
-<< /S /GoTo /D (subsection.A.5) >>
-endobj
-300 0 obj
-(A.5 How To Add An Enumerated Type)
-endobj
-301 0 obj
-<< /S /GoTo /D (subsection.A.6) >>
-endobj
-304 0 obj
-(A.6 How to Add A Command)
-endobj
-305 0 obj
-<< /S /GoTo /D (subsection.A.7) >>
-endobj
-308 0 obj
-(A.7 More Complicated API Representations)
-endobj
-309 0 obj
-<< /S /GoTo /D (subsection.A.8) >>
-endobj
-312 0 obj
-(A.8 More Complicated Output Formats And Other Languages)
-endobj
-313 0 obj
-<< /S /GoTo /D (subsection.A.9) >>
-endobj
-316 0 obj
-(A.9 Additional Semantic Tagging)
-endobj
-317 0 obj
-<< /S /GoTo /D (subsection.A.10) >>
-endobj
-320 0 obj
-(A.10 Stability of the XML Database and Schema)
-endobj
-321 0 obj
-<< /S /GoTo /D (appendix.B) >>
-endobj
-324 0 obj
-(B Change Log)
-endobj
-325 0 obj
-<< /S /GoTo /D [326 0 R /Fit] >>
-endobj
-348 0 obj <<
-/Length 1414
-/Filter /FlateDecode
->>
-stream
-xXmo6_20|)q(d閥Ͷ">(c%C(RyYЭGcoah\G"D ŕGPxp$_,oWUY0߬~;5#_浮nUYN䜶Cq{Q,t+6/`:va2A1sL甚w #)Dk~HQe+ || $>:Lv3Y6UE%3UU~ܤna03LZab3LJmfO̎n2B
ĝj7y֊үˍa?ɲ\eL^7ehbiGЩ53'!`V;KU
-\jLB\[3@N"FhZ̢fLUvtmL6k?Nw#2oԷno֧y^R*0rᣩMx^^ضt6߭~UinNI#lTJUH)dj486{[Eflhַ։!vz͇_(3u6H>:Om4*;4{^{;NmΑ0
)㌕|i r3g$ҧlfZ˴Sc@#wĈDF*]٩k3v%q&
bm8ЏLAV3pƻE,B٭"]!=a!)h[n8)
DW;$L > pN 3p1Y-YnάΫGG]d~lيXDi!:YyjӚ&e@o2
w8$1ةT'^㱠~Tk87N핑wl?p1OE<\87h{ۇn!md_ X"Gc訃.sJz(DLP1?$A o|#s0{UG#1D=b`5
-J$"'bwv0#&"c2Rzx+_,ǎIWoɦܚ_./Х~\O DgWD%LNp$9a$Ʊ?Cb;3
-B꾈=d[
s9/"A#B.$ _#)7p#.F1_Ywu9U_ѼiwY=s19NȦ9GQnvuVؔ{dpxp(h]lʔC&<'{
S(ZF?. xݦBAmɯ6TFWWg8ZJ
-endstream
-endobj
-326 0 obj <<
-/Type /Page
-/Contents 348 0 R
-/Resources 347 0 R
-/MediaBox [0 0 612 792]
-/Parent 356 0 R
-/Annots [ 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R ]
->> endobj
-327 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[0 1 1]
-/Rect [213.338 436.348 397.91 446.343]
-/Subtype/Link/A<>
->> endobj
-328 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [471.502 365.207 478.476 374.203]
-/A << /S /GoTo /D (section.1) >>
->> endobj
-329 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [471.502 353.252 478.476 362.178]
-/A << /S /GoTo /D (subsection.1.1) >>
->> endobj
-330 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [471.502 331.473 478.476 340.33]
-/A << /S /GoTo /D (section.2) >>
->> endobj
-331 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [471.502 319.379 478.476 328.305]
-/A << /S /GoTo /D (subsection.2.1) >>
->> endobj
-332 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [471.502 307.423 478.476 316.35]
-/A << /S /GoTo /D (subsection.2.2) >>
->> endobj
-333 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [471.502 295.468 478.476 304.395]
-/A << /S /GoTo /D (subsection.2.3) >>
->> endobj
-334 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [471.502 273.55 478.476 282.547]
-/A << /S /GoTo /D (section.3) >>
->> endobj
-335 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [471.502 261.595 478.476 270.522]
-/A << /S /GoTo /D (subsection.3.1) >>
->> endobj
-336 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [471.502 249.64 478.476 258.566]
-/A << /S /GoTo /D (subsection.3.2) >>
->> endobj
-337 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [471.502 227.722 478.476 236.718]
-/A << /S /GoTo /D (section.4) >>
->> endobj
-338 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [471.502 215.767 478.476 224.693]
-/A << /S /GoTo /D (subsection.4.1) >>
->> endobj
-339 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [471.502 203.877 478.476 212.599]
-/A << /S /GoTo /D (subsection.4.2) >>
->> endobj
-340 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [471.502 182.034 478.476 190.726]
-/A << /S /GoTo /D (section.5) >>
->> endobj
-341 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [471.502 170.004 478.476 178.726]
-/A << /S /GoTo /D (subsection.5.1) >>
->> endobj
-342 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [471.502 148.161 478.476 156.853]
-/A << /S /GoTo /D (section.6) >>
->> endobj
-343 0 obj <<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [471.502 136.066 478.476 144.992]
-/A << /S /GoTo /D (subsection.6.1) >>
->> endobj
-349 0 obj <<
-/D [326 0 R /XYZ 132.768 705.06 null]
->> endobj
-350 0 obj <<
-/D [326 0 R /XYZ 133.768 667.198 null]
->> endobj
-354 0 obj <<
-/D [326 0 R /XYZ 133.768 406.542 null]
->> endobj
-347 0 obj <<
-/Font << /F40 351 0 R /F42 352 0 R /F44 353 0 R /F48 355 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-398 0 obj <<
-/Length 1387
-/Filter /FlateDecode
->>
-stream
-xMoF