Skip to content

Commit 31018cf

Browse files
committed
Change log for June 17, 2016 Vulkan 1.0.17 spec update:
* Bump API patch number and header version number to 17 for this update. Github Issues: * Update description of vertex shader reuse in <<shaders-vertex-execution>> (public issue 106). * Simplify validity language around pname:ppEnabledExtensionNames and pname:ppEnabledLayerNames (in the <<initialization-instances>> and <<devsandqueues-device-creation>> sections) (public issue 214). * Add missing validity rule to flink:vkCmdBeginRenderPass requiring compatibility between slink:VkAttachmentDescription pname:initalLayout members and the corresponding attached framebuffer images (public issue 233). * Fix Unicode arrows appearing in output instead of relational operators (public issue 239). * Correctly describe the required number of elements for code:TessLevelInner and code:TessLevelOuter arrays in the <<interfaces-builtin-variables,Built-In Variables>> section as two and four, respectively, instead of the other way around, and refer to this section from the <<tessellation,Tessellation>> chapter (public issue 246). Internal Issues: * Document deprecation of ename:VK_COLORSPACE_SRGB_NONLINEAR_KHR in the VK_KHR_surface extension branch, and of ename:VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT in the VK_EXT_debug_report branch (internal issue 328). * Added language to define what a valid usage statement is and should be, with a note about some apparent weirdnesses this might entail (internal issue 357). Other Commits: * Added missing ename:VK_ERROR_DEVICE_LOST error to flink:vkQueueBindSparse.
1 parent 5de77cf commit 31018cf

15 files changed

Lines changed: 277 additions & 70 deletions

ChangeLog.txt

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -752,3 +752,46 @@ Other Commits:
752752
header / validation layer / include autogeneration from XML,
753753
reducing platform dependencies.
754754

755+
-----------------------------------------------------
756+
757+
Change log for June 17, 2016 Vulkan 1.0.17 spec update:
758+
759+
* Bump API patch number and header version number to 17 for this
760+
update.
761+
762+
Github Issues:
763+
764+
* Update description of vertex shader reuse in
765+
<<shaders-vertex-execution>> (public issue 106).
766+
* Simplify validity language around pname:ppEnabledExtensionNames and
767+
pname:ppEnabledLayerNames (in the <<initialization-instances>> and
768+
<<devsandqueues-device-creation>> sections) (public issue 214).
769+
* Add missing validity rule to flink:vkCmdBeginRenderPass requiring
770+
compatibility between slink:VkAttachmentDescription pname:initalLayout
771+
members and the corresponding attached framebuffer images (public issue
772+
233).
773+
* Fix Unicode arrows appearing in output instead of relational operators
774+
(public issue 239).
775+
* Correctly describe the required number of elements for
776+
code:TessLevelInner and code:TessLevelOuter arrays in the
777+
<<interfaces-builtin-variables,Built-In Variables>> section as two and
778+
four, respectively, instead of the other way around, and refer to this
779+
section from the <<tessellation,Tessellation>> chapter (public issue
780+
246).
781+
782+
Internal Issues:
783+
784+
* Document deprecation of ename:VK_COLORSPACE_SRGB_NONLINEAR_KHR in the
785+
VK_KHR_surface extension branch, and of
786+
ename:VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT in the
787+
VK_EXT_debug_report branch (internal issue 328).
788+
* Added language to define what a valid usage statement is and should be,
789+
with a note about some apparent weirdnesses this might entail (internal
790+
issue 357).
791+
792+
Other Commits:
793+
794+
* Added missing ename:VK_ERROR_DEVICE_LOST error to
795+
flink:vkQueueBindSparse.
796+
797+

doc/specs/vulkan/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ INCLUDES := $(wildcard protos/*.txt structs/*.txt flags/*.txt enums/*.txt funcpo
125125
COMMONDOCS := $(CHAPTERS) $(INCLUDES)
126126
# A generated included file with the spec version, date, and git commit
127127
SPECVERSION = specversion.txt
128-
SPECREVISION = 1.0.16
128+
SPECREVISION = 1.0.17
129129
SPECREMARK =
130130

131131
# Spec targets

doc/specs/vulkan/chapters/fundamentals.txt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,40 @@ validation layers by default.
543543
[[fundamentals-validusage]]
544544
=== Valid Usage
545545

546+
Valid usage defines a set of conditions which must: be met in order to achieve
547+
well-defined run-time behavior in an application. These conditions depend only
548+
on Vulkan state, and the parameters or objects whose usage is constrained by
549+
the condition.
550+
551+
Some valid usage conditions have dependencies on run-time limits or feature
552+
availability. It is possible to validate these conditions against Vulkan's
553+
minimum supported values for these limits and features, or some subset of
554+
other known values.
555+
556+
Valid usage conditions do not cover conditions where well-defined behavior
557+
(including returning an error code) exists.
558+
559+
Valid usage conditions should: apply to the command or structure where
560+
complete information about the condition would be known during execution of
561+
an application. This is such that a validation layer or linter can: be
562+
written directly against these statements at the point they are specified.
563+
564+
[NOTE]
565+
.Note
566+
====
567+
This does lead to some non-obvious places for valid usage statements. For
568+
instance, the valid values for a structure might depend on a separate value
569+
in the calling command. In this case, the structure itself will not
570+
reference this valid usage as it is impossible to determine validity from
571+
the structure that it is invalid - instead this valid usage would be
572+
attached to the calling command.
573+
574+
Another example is draw state - the state setters are independent, and can
575+
cause a legitimately invalid state configuration between draw calls; so the
576+
valid usage statements are attached to the place where all state needs to be
577+
valid - at the draw command.
578+
====
579+
546580
Certain usage rules apply to all commands in the API unless explicitly
547581
denoted differently for a command. These rules are as follows.
548582

doc/specs/vulkan/chapters/initialization.txt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,10 @@ include::../validity/structs/VkInstanceCreateInfo.txt[]
139139
fname:vkCreateInstance creates the instance, then enables and initializes
140140
global layers and extensions requested by the application. If an extension
141141
is provided by a layer, both the layer and extension must: be specified at
142-
fname:vkCreateInstance time.
142+
fname:vkCreateInstance time. If a specified layer cannot be found, no
143+
sname:VkInstance will be created and the function will return
144+
ename:VK_ERROR_LAYER_NOT_PRESENT. Likewise, if a specified extension cannot be found
145+
the call will return ename:VK_ERROR_EXTENSION_NOT_PRESENT.
143146

144147
The pname:pApplicationInfo member of slink:VkInstanceCreateInfo can: point
145148
to an instance of sname:VkApplicationInfo.
@@ -165,7 +168,7 @@ include::../structs/VkApplicationInfo.txt[]
165168
<<fundamentals-versionnum,API Version Numbers and Semantics>> section.
166169
If pname:apiVersion is 0 the implementation must: ignore it, otherwise
167170
if the implementation does not support the requested pname:apiVersion it
168-
must: return VK_ERROR_INCOMPATIBLE_DRIVER. The patch version number
171+
must: return ename:VK_ERROR_INCOMPATIBLE_DRIVER. The patch version number
169172
specified in pname:apiVersion is ignored when creating an instance
170173
object. Only the major and minor versions of the instance must: match
171174
those requested in pname:apiVersion.

doc/specs/vulkan/chapters/interfaces.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1112,32 +1112,32 @@ code:TessLevelOuter::
11121112

11131113
The code:TessLevelOuter decoration is used in tessellation control
11141114
shaders to decorate an output variable to contain the outer tessellation
1115-
factor for the resulting patch. This value is used by the tessellator
1115+
factors for the resulting patch. These values are used by the tessellator
11161116
to control primitive tessellation and can: be read by
11171117
tessellation evaluation shaders. When applied to an input variable in a
1118-
tessellation evaluation shader, the shader can: read the value written by
1118+
tessellation evaluation shader, the shader can: read the values written by
11191119
the tessellation control shader.
11201120
+
11211121
The code:TessLevelOuter decoration must: be used only within
11221122
tessellation control and evaluation shaders.
11231123
+
1124-
code:TessLevelOuter must: be declared as an array of size two,
1124+
code:TessLevelOuter must: be declared as an array of size four,
11251125
containing 32-bit floating-point values.
11261126

11271127
code:TessLevelInner::
11281128

11291129
The code:TessLevelInner decoration is used in tessellation control
11301130
shaders to decorate an output variable to contain the inner tessellation
1131-
factor for the resulting patch. This value is used by the tessellator to
1131+
factors for the resulting patch. These values are used by the tessellator to
11321132
control primitive tessellation and can: be read by
11331133
tessellation evaluation shaders. When applied to an input variable in a
1134-
tessellation evaluation shader, the shader can: read the value written by
1134+
tessellation evaluation shader, the shader can: read the values written by
11351135
the tessellation control shader.
11361136
+
11371137
The code:TessLevelInner decoration must: be used only within
11381138
tessellation control and evaluation shaders.
11391139
+
1140-
code:TessLevelInner must: be declared as an array of size four,
1140+
code:TessLevelInner must: be declared as an array of size two,
11411141
containing 32-bit floating-point values.
11421142

11431143
code:VertexIndex::

doc/specs/vulkan/chapters/shaders.txt

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -212,20 +212,21 @@ the vertex and instance for which it has been invoked. Input variables
212212
declared in the vertex shader are filled by the implementation with the
213213
values of vertex attributes associated with the invocation being executed.
214214

215-
If a vertex is a part of more than one input primitive, for example
216-
by including the same index value multiple times in an index buffer, the
217-
vertex shader may: be invoked only once and the results shared amongst the
218-
resulting primitives. This is known as _vertex reuse_.
219-
220-
ifdef::implementation-guide[]
221-
.Implementor's Note
222-
****
223-
If a vertex is repeated in a draw command (i.e. the same index is repeated
224-
in an indexed draw), the shader may: be executed anywhere from one to the
225-
number of repetitions times for that vertex, depending on the
226-
implementation's ability to reuse shader results.
227-
****
228-
endif::implementation-guide[]
215+
If the same vertex is specified multiple times in a draw command (e.g.
216+
by including the same index value multiple times in an index buffer) the
217+
implementation may: reuse the results of vertex shading if it can statically
218+
determine that the vertex shader invocations will produce identical results.
219+
220+
[NOTE]
221+
.Note
222+
==================
223+
It is implementation-dependent when and if results of vertex shading are
224+
reused, and thus how many times the vertex shader will be executed. This
225+
is true also if the vertex shader contains stores or atomic operations
226+
(see <<features-features-vertexPipelineStoresAndAtomics,
227+
pname:vertexPipelineStoresAndAtomics>>).
228+
==================
229+
229230

230231

231232
[[shaders-tessellation-control]]

doc/specs/vulkan/chapters/tessellation.txt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,11 @@ If a pipeline includes both tessellation shaders (control and evaluation),
2222
the tessellator consumes each input patch (after vertex shading) and
2323
produces a new set of independent primitives (points, lines, or triangles).
2424
These primitives are logically produced by subdividing a geometric primitive
25-
(rectangle or triangle) according to the per-patch tessellation levels
26-
written by the tessellation control shader. This subdivision is performed in
25+
(rectangle or triangle) according to the per-patch outer and inner
26+
tessellation levels written by the tessellation control shader. These levels
27+
are specified using the <<interfaces-builtin-variables,built-in variables>>
28+
code:TessLevelOuter and code:TessLevelInner, respectively.
29+
This subdivision is performed in
2730
an implementation-dependent manner. If no tessellation shaders are present
2831
in the pipeline, the tessellator is disabled and incoming primitives are
2932
passed through without modification.

doc/specs/vulkan/man/vkCreateDevice.txt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,33 @@ include::../structs/VkDeviceCreateInfo.txt[]
3535

3636
include::../validity/protos/vkCreateDevice.txt[]
3737

38+
* pname:sType is the type of this structure.
39+
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
40+
* pname:flags is reserved for future use.
41+
* pname:queueCreateInfoCount is the unsigned integer size of the
42+
pname:pQueueCreateInfos array. Refer to the
43+
<<devsandqueues-queue-creation,Queue Creation>> section below for
44+
further details.
45+
* pname:pQueueCreateInfos is a pointer to an array of
46+
slink:VkDeviceQueueCreateInfo structures describing the queues that are
47+
requested to be created along with the logical device. Refer to the
48+
<<devsandqueues-queue-creation,Queue Creation>> section below for
49+
further details.
50+
* pname:enabledLayerCount is deprecated and ignored.
51+
* pname:ppEnabledLayerNames is deprecated and ignored. See
52+
<<extended-functionality-device-layer-deprecation,Device Layer Deprecation>>.
53+
* pname:enabledExtensionCount is the number of device extensions to
54+
enable.
55+
* pname:ppEnabledExtensionNames is a pointer to an array of
56+
pname:enabledExtensionCount null-terminated UTF-8 strings containing the
57+
names of extensions to enable for the created device. See the
58+
<<extended-functionality-extensions,Extensions>> section for further
59+
details.
60+
* pname:pEnabledFeatures is `NULL` or a pointer to a
61+
slink:VkPhysicalDeviceFeatures structure that contains boolean
62+
indicators of all the features to be enabled. Refer to the
63+
<<features-features,Features>> section for further details.
64+
3865
See Also
3966
--------
4067

doc/specs/vulkan/man/vkCreateInstance.txt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,16 @@ The pname:enabledLayerNameCount member of sname:VkInstanceCreateInfo specifies t
4242
to enable, and pname:ppEnabledLayerNames is a pointer to an array of pname:enabledLayerNameCount
4343
code:NULL-terminated UTF-8 strings containing the names of layers
4444
that should be enabled globally. If pname:enabledLayerNameCount is zero, then pname:ppEnabledLayerNames
45-
is ignored and no global layers are enabled.
45+
is ignored and no global layers are enabled. If a layer cannot be found, the
46+
call will not create a sname:VkInstance and will return ename:VK_ERROR_LAYER_NOT_PRESENT.
4647

4748
Similary, information about global extensions is specified in the pname:enabledExtensionNameCount and
4849
pname:ppEnabledExtensionNames members. pname:enabledExtensionNameCount specifies the number of global
4950
extensions to enable and pname:ppEnabledExtensionNames is a pointer to an array of pointers
5051
to code:NULL-terminated UTF-8 strings containing the extension names. If an extension is provided
51-
by a layer, both the layer and extension must be specified at fname:vkCreateInstance time.
52+
by a layer, both the layer and extension must be specified at
53+
fname:vkCreateInstance time. If a extension cannot be found, the call will not
54+
create a sname:VkInstance and will return ename:VK_ERROR_LAYER_NOT_PRESENT.
5255

5356
If pname:enabledExtensionNameCount is zero then no extensions are enabled and pname:ppEnabledExtensionNames
5457
is ignored.

doc/specs/vulkan/validity/protos/vkCmdBeginRenderPass.txt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ endif::doctype-manpage[]
1414
* The sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics operations
1515
* This command must: only be called outside of a render pass instance
1616
* pname:commandBuffer must: be a primary sname:VkCommandBuffer
17-
* If any of the pname:initialLayout or pname:finalLayout member of the sname:VkAttachmentDescription structures or the pname:layout member of the sname:VkAttachmentReference structures specified when creating the render pass specified in the pname:renderPass member of pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL then the corresponding attachment image of the framebuffer specified in the pname:framebuffer member of pname:pRenderPassBegin must: have been created with ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT set
18-
* If any of the pname:initialLayout or pname:finalLayout member of the sname:VkAttachmentDescription structures or the pname:layout member of the sname:VkAttachmentReference structures specified when creating the render pass specified in the pname:renderPass member of pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then the corresponding attachment image of the framebuffer specified in the pname:framebuffer member of pname:pRenderPassBegin must: have been created with ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set
19-
* If any of the pname:initialLayout or pname:finalLayout member of the sname:VkAttachmentDescription structures or the pname:layout member of the sname:VkAttachmentReference structures specified when creating the render pass specified in the pname:renderPass member of pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL then the corresponding attachment image of the framebuffer specified in the pname:framebuffer member of pname:pRenderPassBegin must: have been created with ename:VK_IMAGE_USAGE_SAMPLED_BIT or ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT set
20-
* If any of the pname:initialLayout or pname:finalLayout member of the sname:VkAttachmentDescription structures or the pname:layout member of the sname:VkAttachmentReference structures specified when creating the render pass specified in the pname:renderPass member of pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL then the corresponding attachment image of the framebuffer specified in the pname:framebuffer member of pname:pRenderPassBegin must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT set
21-
* If any of the pname:initialLayout or pname:finalLayout member of the sname:VkAttachmentDescription structures or the pname:layout member of the sname:VkAttachmentReference structures specified when creating the render pass specified in the pname:renderPass member of pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL then the corresponding attachment image of the framebuffer specified in the pname:framebuffer member of pname:pRenderPassBegin must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT set
17+
* If any of the pname:initialLayout or pname:finalLayout member of the sname:VkAttachmentDescription structures or the pname:layout member of the sname:VkAttachmentReference structures specified when creating the render pass specified in the pname:renderPass member of pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL then the corresponding attachment image subresource of the framebuffer specified in the pname:framebuffer member of pname:pRenderPassBegin must: have been created with ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT set
18+
* If any of the pname:initialLayout or pname:finalLayout member of the sname:VkAttachmentDescription structures or the pname:layout member of the sname:VkAttachmentReference structures specified when creating the render pass specified in the pname:renderPass member of pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then the corresponding attachment image subresource of the framebuffer specified in the pname:framebuffer member of pname:pRenderPassBegin must: have been created with ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set
19+
* If any of the pname:initialLayout or pname:finalLayout member of the sname:VkAttachmentDescription structures or the pname:layout member of the sname:VkAttachmentReference structures specified when creating the render pass specified in the pname:renderPass member of pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL then the corresponding attachment image subresource of the framebuffer specified in the pname:framebuffer member of pname:pRenderPassBegin must: have been created with ename:VK_IMAGE_USAGE_SAMPLED_BIT or ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT set
20+
* If any of the pname:initialLayout or pname:finalLayout member of the sname:VkAttachmentDescription structures or the pname:layout member of the sname:VkAttachmentReference structures specified when creating the render pass specified in the pname:renderPass member of pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL then the corresponding attachment image subresource of the framebuffer specified in the pname:framebuffer member of pname:pRenderPassBegin must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT set
21+
* If any of the pname:initialLayout or pname:finalLayout member of the sname:VkAttachmentDescription structures or the pname:layout member of the sname:VkAttachmentReference structures specified when creating the render pass specified in the pname:renderPass member of pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL then the corresponding attachment image subresource of the framebuffer specified in the pname:framebuffer member of pname:pRenderPassBegin must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT set
22+
* If any of the pname:initialLayout members of the sname:VkAttachmentDescription structures specified when creating the render pass specified in the pname:renderPass member of pname:pRenderPassBegin is not one of ename:VK_IMAGE_LAYOUT_UNDEFINED or ename:VK_IMAGE_LAYOUT_PREINITIALIZED, then each such pname:initialLayout must: be equal to the current layout of the corresponding attachment image subresource of the framebuffer specified in the pname:framebuffer member of pname:pRenderPassBegin.
2223
ifndef::doctype-manpage[]
2324
********************************************************************************
2425
endif::doctype-manpage[]

0 commit comments

Comments
 (0)