Change log for August 13, 2018 Vulkan 1.1.83 spec update:

* Update release number to 83.

Public Issues:

  * Use [%inline] directive for all SVGs to reduce file size (public pull
    request 734).
  * Convert XML `value` aliases into \<alias> tags (public pull request
    747).
  * Fix metadoc script showing non-selected extensions (public pull request
    748).
  * Reapply public pull request 742 to make
    ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT part of the
    graphices pipeline (public pull request 749).
  * Fix numerous typos related to accidental duplication of words (public
    pull request 760).
  * Fix `vk.xml` contact typos (public pull request 761).

Internal Issues:

  * Add images to the <<Standard sample locations>> table (internal issue
    1115).
  * Add a definition of "`Inherited from`" precision in the
    <<spirvenv-precision-operation, Precision and Operation of SPIR-V
    Instructions>> section (internal issue 1314).
  * Clarify that both built-in and user-defined variables count against the
    location limits for shader interfaces in the
    <<interfaces-iointerfaces-locations, Location Assignment>> section
    (internal issue 1316).
  * Merge "`required`" capabilities into the <<spirvenv-capabilities-table,
    list of optional: SPIR-V capabilities>> (internal issue 1320).
  * Relax the layout matching rules of descriptors referring to only a
    single aspect of a depth/stencil image, by reference to the new
    <<resources-image-layouts-matching-rule, Image Layout Matching Rules>>
    section (internal issue 1346).
  * Revert extension metadoc generator warning about name mismatches to a
    diagnostic, due to annoying warnings in build output for conscious
    choices we've made (internal issue 1351).

Other Issues:

  * Reserve bits for pending vendor extensions.
  * Make Vulkan consistent with SPIR-V regarding code:DepthReplacing and
    code:FragDepth in the <<interfaces-builtin-variables, Built-In
    Variables>> section.
  * Add missing ChangeLog entries for the previous three spec updates.
This commit is contained in:
Jon Leech 2018-08-13 06:23:03 -07:00
parent dd7fe79336
commit dd9919749a
44 changed files with 730 additions and 309 deletions

View File

@ -8,6 +8,159 @@ public pull requests that have been accepted.
-----------------------------------------------------
Change log for August 13, 2018 Vulkan 1.1.83 spec update:
* Update release number to 83.
Public Issues:
* Use [%inline] directive for all SVGs to reduce file size (public pull
request 734).
* Convert XML `value` aliases into \<alias> tags (public pull request
747).
* Fix metadoc script showing non-selected extensions (public pull request
748).
* Reapply public pull request 742 to make
ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT part of the
graphices pipeline (public pull request 749).
* Fix numerous typos related to accidental duplication of words (public
pull request 760).
* Fix `vk.xml` contact typos (public pull request 761).
Internal Issues:
* Add images to the <<Standard sample locations>> table (internal issue
1115).
* Add a definition of "`Inherited from`" precision in the
<<spirvenv-precision-operation, Precision and Operation of SPIR-V
Instructions>> section (internal issue 1314).
* Clarify that both built-in and user-defined variables count against the
location limits for shader interfaces in the
<<interfaces-iointerfaces-locations, Location Assignment>> section
(internal issue 1316).
* Merge "`required`" capabilities into the <<spirvenv-capabilities-table,
list of optional: SPIR-V capabilities>> (internal issue 1320).
* Relax the layout matching rules of descriptors referring to only a
single aspect of a depth/stencil image, by reference to the new
<<resources-image-layouts-matching-rule, Image Layout Matching Rules>>
section (internal issue 1346).
* Revert extension metadoc generator warning about name mismatches to a
diagnostic, due to annoying warnings in build output for conscious
choices we've made (internal issue 1351).
Other Issues:
* Reserve bits for pending vendor extensions.
* Make Vulkan consistent with SPIR-V regarding code:DepthReplacing and
code:FragDepth in the <<interfaces-builtin-variables, Built-In
Variables>> section.
* Add missing ChangeLog entries for the previous three spec updates.
-----------------------------------------------------
Change log for July 30, 2018 Vulkan 1.1.82 spec update:
* Update release number to 82.
Public Issues:
* Add flink:vkDestroyPipelineLayout valid usage statement that the layout
must not have been used with command buffers still in the recording
state (public issue 730).
* Correct \<unused> tag for elink:VkResult in `vk.xml` (public merge
request 746).
Internal Issues:
* Add a valid usage statement to flink:vkQueueSubmit, and similar language
to the definitions of <<synchronization-queue-transfers-acquire, acquire
operations>> requiring that an acquire operation follow a previous
release of the same subresource (internal issue 1290).
* Add <<resources-image-format-features,Image Format Features>> and
<<resources-image-view-format-features,Image View Format Features>>
sections that precisely define the slink:VkFormatFeatures supported by
images and image views, and rewrite valid usage statements to reference
these sections instead of duplicating language (internal issue 1310).
* Reword and consolidate synchronization valid usage statements for
flink:vkCmdPipelineBarrier such that they correctly account for mutiple
possible self-dependencies (internal issue 1322).
* Change order of <<Standard sample locations>> for 2xMSAA (internal issue
1347).
* Add definitions of "`<<Correctly Rounded>>`" and "`<<ULP>>`" in the
SPIR-V environment appendix, and "`Units in the Last Place (ULP)`" in
the glossary.
New Extensions:
* `VK_NV_device_diagnostic_checkpoints`
-----------------------------------------------------
Change log for July 23, 2018 Vulkan 1.1.81 spec update:
* Update release number to 81.
Public Issues:
* Fix missing "`valid`" phrasing in some obscure cases (public pull
request 605).
* Replace improper use of cannot: referring to the implementation in the
description of the
<<features-limits-maxUpdateAfterBindDescriptorsInAllPools,
pname:maxUpdateAfterBindDescriptorsInAllPools>> limit (public pull
request 738).
* Reorder description of bits in elink:VkPipelineStageFlagBits and the
<<synchronization-pipeline-stages-supported, Supported pipeline stage
flags>> table to match their definition order (public pull request 740).
* Add description of ename:VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT
to elink:VkBufferUsageFlagBits (public pull request 741).
* Fix value usage statement for slink:VkSubpassDependency stage mask
parameters (public pull request 742).
* Fix visible markup in registry schema document (public pull request
#745).
Internal Issues:
* Make the <<geometry-invocations, geometry shader invocation
description>> and <<shaders-geometry-execution, Geometry Shader
Execution>> descriptions consistent with other pipeline stages (internal
issue 1325).
* Mark the `VK_NV_glsl_shader` extension as deprecated.
* Adjust the per-instance vertex attribute offset formula specified by
`VK_EXT_vertex_attribute_divisor` for
slink:VkVertexInputBindingDivisorDescriptionEXT so that the interaction
between pname:firstInstance and pname:divisor matches the OpenGL
convention (internal issue 1333).
-----------------------------------------------------
Change log for July 7, 2018 Vulkan 1.1.80 spec update:
* Update release number to 80.
Public Issues:
* Remove unused "`API Order`" term from glossary (public issue 657).
* Dynamically generate the extension appendix includes based on
information in `vk.xml`, including new metadata tags describing
deprecated, obsoleted, and promoted extensions (public pull request
690).
Internal Issues:
* Add valid usage statements to flink:vkCmdBindDescriptorSets to keep
offsets + range less than or equal to the buffer size (internal issue
1174).
New Extensions:
* `VK_EXT_conditional_render`
* `VK_KHR_create_renderpass2` (public issue 736)
* `VK_KHR_8bit_storage` (public issue 737)
-----------------------------------------------------
Change log for July 1, 2018 Vulkan 1.1.79 spec update:
* Update release number to 79.

View File

@ -107,7 +107,7 @@ VERBOSE =
# EXTRAATTRIBS sets additional attributes, if passed to make
# ADOCOPTS options for asciidoc->HTML5 output
NOTEOPTS = -a editing-notes -a implementation-guide
PATCHVERSION = 82
PATCHVERSION = 83
ifneq (,$(findstring VK_VERSION_1_1,$(VERSIONS)))
SPECREVISION = 1.1.$(PATCHVERSION)
else

View File

@ -27,7 +27,7 @@ None.
=== New Structures
* slink:VkPhysicalDeviceShaderCorePropertiesAMD
* slink:VkPhysicalDeviceShaderCorePropertiesAMD
=== New Functions

View File

@ -34,7 +34,7 @@ None.
=== New Structures
* slink:VkShaderStatisticsInfoAMD
* slink:VkShaderStatisticsInfoAMD
=== New Functions

View File

@ -21,13 +21,13 @@ slink:VkShaderModule.
=== New Object Types
* slink:VkValidationCacheEXT
* slink:VkValidationCacheEXT
=== New Enum Constants
* Extending elink:VkStructureType:
** ename:VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT
** ename:VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT
* Extending elink:VkStructureType:
** ename:VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT
** ename:VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT
=== New Enums

View File

@ -17,8 +17,8 @@ will be disabled by the validation layers.
=== New Enum Constants
* Extending elink:VkStructureType:
** ename:VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT
* Extending elink:VkStructureType:
** ename:VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT
=== New Enums

View File

@ -78,46 +78,47 @@ Such behavior may succeed when using one Vulkan implementation but fail when
using a different Vulkan implementation.
Potential failures include:
* Creating then destroying a flip presentation model DXGI swapchain on a
window object can prevent flink:vkCreateSwapchainKHR from succeeding on
the same window object.
* Creating then destroying a flip presentation model DXGI swapchain on a
window object can prevent flink:vkCreateSwapchainKHR from succeeding on
the same window object.
* Creating then destroying a slink:VkSwapchainKHR on a window object can
prevent creation of a bitblt model DXGI swapchain on the same window
object.
* Creating then destroying a slink:VkSwapchainKHR on a window object can
prevent creation of a bitblt model DXGI swapchain on the same window
object.
* Creating then destroying a slink:VkSwapchainKHR on a window object can
effectively code:SetPixelFormat to a different format than the format
chosen by an OpenGL application.
* Creating then destroying a slink:VkSwapchainKHR on a window object can
effectively code:SetPixelFormat to a different format than the format
chosen by an OpenGL application.
* Creating then destroying a slink:VkSwapchainKHR on a window object on one
slink:VkPhysicalDevice can prevent flink:vkCreateSwapchainKHR from
succeeding on the same window object, but on a different
slink:VkPhysicalDevice that is associated with a different Vulkan ICD.
* Creating then destroying a slink:VkSwapchainKHR on a window object on
one slink:VkPhysicalDevice can prevent flink:vkCreateSwapchainKHR from
succeeding on the same window object, but on a different
slink:VkPhysicalDevice that is associated with a different Vulkan ICD.
In all cases the problem can be worked around by creating a new window
object.
Technical details include:
* Creating a DXGI swapchain over a window object can alter the object for
the remainder of its lifetime.
The alteration persists even after the DXGI swapchain has been destroyed.
This alteration can make it impossible for a conformant Vulkan
implementation to create a slink:VkSwapchainKHR over the same window
object.
Mention of this alteration can be found in the remarks section of the
MSDN documentation for code:DXGI_SWAP_EFFECT.
* Creating a DXGI swapchain over a window object can alter the object for
the remainder of its lifetime.
The alteration persists even after the DXGI swapchain has been
destroyed.
This alteration can make it impossible for a conformant Vulkan
implementation to create a slink:VkSwapchainKHR over the same window
object.
Mention of this alteration can be found in the remarks section of the
MSDN documentation for code:DXGI_SWAP_EFFECT.
* Calling GDI's code:SetPixelFormat (needed by OpenGL's WGL layer) on a
window object alters the object for the remainder of its lifetime.
The MSDN documentation for code:SetPixelFormat explains that a window
object's pixel format can be set only one time.
* Calling GDI's code:SetPixelFormat (needed by OpenGL's WGL layer) on a
window object alters the object for the remainder of its lifetime.
The MSDN documentation for code:SetPixelFormat explains that a window
object's pixel format can be set only one time.
* Creating a slink:VkSwapchainKHR over a window object can alter the object
for the remaining life of its lifetime.
Either of the above alterations may occur as a side-effect of
slink:VkSwapchainKHR.
* Creating a slink:VkSwapchainKHR over a window object can alter the
object for the remaining life of its lifetime.
Either of the above alterations may occur as a side-effect of
slink:VkSwapchainKHR.
=== Version History

View File

@ -27,8 +27,8 @@ None.
Extending slink:VkStructureType:
* ename:VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV
* ename:VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV
* ename:VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV
* ename:VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV
=== New Enums
@ -36,13 +36,13 @@ None.
=== New Structures
* slink:VkCheckpointDataNV
* slink:VkQueueFamilyCheckpointPropertiesNV
* slink:VkCheckpointDataNV
* slink:VkQueueFamilyCheckpointPropertiesNV
=== New Functions
* flink:vkCmdSetCheckpointNV
* flink:vkGetQueueCheckpointDataNV
* flink:vkCmdSetCheckpointNV
* flink:vkGetQueueCheckpointDataNV
=== Issues

View File

@ -33,17 +33,17 @@ antialiasing is applied and there is no corruption on these edges.
The key features of this extension are:
* It allows render pass and framebuffer objects to be created where the
number of samples in the depth/stencil attachment in a subpass is a
multiple of the number of samples in the color attachments in the
subpass.
* A coverage reduction step is added to Fragment Operations which converts
a set of covered raster/depth/stencil samples to a set of color samples
that perform blending and color writes.
The coverage reduction step also includes an optional coverage modulation
step, multiplying color values by a fractional opacity corresponding to
the number of associated raster/depth/stencil samples covered.
* It allows render pass and framebuffer objects to be created where the
number of samples in the depth/stencil attachment in a subpass is a
multiple of the number of samples in the color attachments in the
subpass.
* A coverage reduction step is added to Fragment Operations which converts
a set of covered raster/depth/stencil samples to a set of color samples
that perform blending and color writes.
The coverage reduction step also includes an optional coverage
modulation step, multiplying color values by a fractional opacity
corresponding to the number of associated raster/depth/stencil samples
covered.
=== New Object Types

View File

@ -35,37 +35,27 @@ Specification.
[[spirvenv-capabilities]]
== Capabilities
Implementations must: support the following capability operands declared by
code:OpCapability:
* code:Matrix
* code:Shader
* code:InputAttachment
* code:Sampled1D
* code:Image1D
* code:SampledBuffer
* code:ImageBuffer
* code:ImageQuery
* code:DerivativeControl
ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
* code:DeviceGroup
endif::VK_VERSION_1_1,VK_KHR_device_group[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
* [[spirvenv-capabilities-multiview]] code:MultiView
endif::VK_VERSION_1_1,VK_KHR_multiview[]
ifdef::VK_KHR_8bit_storage[]
* code:StorageBuffer8BitAccess
endif::VK_KHR_8bit_storage[]
If the implementation supports any of the optional: features described in
the <<features-features,Features>> chapter, then the capability operand(s)
corresponding to that feature must: also be supported.
The SPIR-V capabilities listed below must: be supported if the corresponding
feature or extension is enabled, or if no features or extensions are listed
for that capability.
Extensions are only listed when there is not also a feature bit associated
with that capability.
[[spirvenv-capabilities-table]]
.List of optional: SPIR-V Capabilities and corresponding feature or extension names
.List of SPIR-V Capabilities and enabling features or extensions
[options="header"]
|====
| SPIR-V OpCapability | Vulkan feature or extension name
| SPIR-V code:OpCapability | Vulkan feature or extension name
| code:Matrix |
| code:Shader |
| code:InputAttachment |
| code:Sampled1D |
| code:Image1D |
| code:SampledBuffer |
| code:ImageBuffer |
| code:ImageQuery |
| code:DerivativeControl |
| code:Geometry | <<features-features-geometryShader,geometryShader>>
| code:Tessellation | <<features-features-tessellationShader,tessellationShader>>
| code:Float64 | <<features-features-shaderFloat64,shaderFloat64>>
@ -93,21 +83,30 @@ corresponding to that feature must: also be supported.
| code:StorageImageWriteWithoutFormat | <<features-features-shaderStorageImageWriteWithoutFormat,shaderStorageImageWriteWithoutFormat>>
| code:MultiViewport | <<features-features-multiViewport,multiViewport>>
ifdef::VK_VERSION_1_1,VK_KHR_shader_draw_parameters[]
| code:DrawParameters
| `<<VK_KHR_shader_draw_parameters>>`
| code:DrawParameters |
ifdef::VK_VERSION_1_1[]
or <<features-features-shaderDrawParameters,shaderDrawParameters>>
<<features-features-shaderDrawParameters,shaderDrawParameters>>
endif::VK_VERSION_1_1[]
ifdef::VK_KHR_shader_draw_parameters+VK_VERSION_1_1[]
or
endif::VK_KHR_shader_draw_parameters+VK_VERSION_1_1[]
ifdef::VK_KHR_shader_draw_parameters[]
<<VK_KHR_shader_draw_parameters>>
endif::VK_KHR_shader_draw_parameters[]
endif::VK_VERSION_1_1,VK_KHR_shader_draw_parameters[]
ifndef::VK_VERSION_1_1[]
ifdef::VK_KHR_multiview[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
[[spirvenv-capabilities-multiview]]
| code:MultiView | <<VK_KHR_multiview,VK_KHR_multiview>>
endif::VK_KHR_multiview[]
ifdef::VK_KHR_device_group[]
| code:DeviceGroup | <<VK_KHR_device_group,VK_KHR_device_group>>
endif::VK_KHR_device_group[]
| code:MultiView |
ifndef::VK_VERSION_1_1[]
<<VK_KHR_multiview,VK_KHR_multiview>>
endif::VK_VERSION_1_1[]
endif::VK_VERSION_1_1,VK_KHR_multiview[]
ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
| code:DeviceGroup |
ifndef::VK_VERSION_1_1[]
<<VK_KHR_device_group,VK_KHR_device_group>>
endif::VK_VERSION_1_1[]
endif::VK_VERSION_1_1,VK_KHR_device_group[]
ifdef::VK_VERSION_1_1,VK_KHR_variable_pointers[]
[[spirvenv-capabilities-table-variablepointers]]
| code:VariablePointersStorageBuffer | <<features-features-variablePointersStorageBuffer,variablePointersStorageBuffer>>
@ -544,8 +543,8 @@ instructions:
The precision of double-precision instructions is at least that of single
precision.
The precision of operations is defined either in terms of rounding or as an
error bound in ULP, as follows.
The precision of operations is defined either in terms of rounding, as an
error bound in ULP, or as inherited from a formula as follows.
.Correctly Rounded
Operations described as "correctly rounded" will return the infinitely
@ -575,6 +574,23 @@ operations may return an infinity of the appropriate sign.
If the infinitely precise result of the operation is not mathematically
defined then the value returned is undefined.
.Inherited From ...
Where an operation's precision is described as being inherited from a
formula, the result returned must be at least as accurate as the result of
computing an approximation to [eq]#x# using a formula equivalent to the
given formula applied to the supplied inputs.
Specifically, the formula given may be transformed using the mathematical
associativity, commutativity and distributivity of the operators involved to
yield an equivalent formula.
The SPIR-V precision rules, when applied to each such formula and the given
input values, define a range of permitted values.
If [eq]#NaN# is one of the permitted values then the operation may return
any result, otherwise let the largest permitted value in any of the ranges
be [eq]#F~max~# and the smallest be [eq]#F~min~#.
The operation must return a value in the range [eq]#[x - E, x + E]# where
latexmath:[E = \mathrm{max} \left( | x - F_{\mathrm{min}} |, | x -
F_{\mathrm{max}} | \right) ]
For single precision (32 bit) instructions, precisions are required: to be
at least as follows, unless decorated with RelaxedPrecision:

View File

@ -290,14 +290,14 @@ To destroy a sname:VkDebugReportCallbackEXT object, call:
include::../api/protos/vkDestroyDebugReportCallbackEXT.txt[]
* pname:instance the instance where the callback was created.
* pname:callback the slink:VkDebugReportCallbackEXT object to destroy.
pname:callback is an externally synchronized object and must: not be used
on more than one thread at a time.
This means that fname:vkDestroyDebugReportCallbackEXT must: not be called
when a callback is active.
* pname:pAllocator controls host memory allocation as described in the
<<memory-allocation, Memory Allocation>> chapter.
* pname:instance the instance where the callback was created.
* pname:callback the slink:VkDebugReportCallbackEXT object to destroy.
pname:callback is an externally synchronized object and must: not be
used on more than one thread at a time.
This means that fname:vkDestroyDebugReportCallbackEXT must: not be
called when a callback is active.
* pname:pAllocator controls host memory allocation as described in the
<<memory-allocation, Memory Allocation>> chapter.
.Valid Usage
****

View File

@ -658,14 +658,14 @@ To destroy a sname:VkDebugUtilsMessengerEXT object, call:
include::../api/protos/vkDestroyDebugUtilsMessengerEXT.txt[]
* pname:instance the instance where the callback was created.
* pname:messenger the slink:VkDebugUtilsMessengerEXT object to destroy.
pname:messenger is an externally synchronized object and must: not be
used on more than one thread at a time.
This means that fname:vkDestroyDebugUtilsMessengerEXT must: not be called
when a callback is active.
* pname:pAllocator controls host memory allocation as described in the
<<memory-allocation, Memory Allocation>> chapter.
* pname:instance the instance where the callback was created.
* pname:messenger the slink:VkDebugUtilsMessengerEXT object to destroy.
pname:messenger is an externally synchronized object and must: not be
used on more than one thread at a time.
This means that fname:vkDestroyDebugUtilsMessengerEXT must: not be
called when a callback is active.
* pname:pAllocator controls host memory allocation as described in the
<<memory-allocation, Memory Allocation>> chapter.
.Valid Usage
****

View File

@ -141,8 +141,8 @@ include::../../api/protos/vkGetPastPresentationTimingGOOGLE.txt[]
* pname:pPresentationTimingCount is a pointer to an integer related to the
number of sname:VkPastPresentationTimingGOOGLE structures to query, as
described below.
* pname:pPresentationTimings is either `NULL` or a pointer to an array
of sname:VkPastPresentationTimingGOOGLE structures.
* pname:pPresentationTimings is either `NULL` or a pointer to an array of
sname:VkPastPresentationTimingGOOGLE structures.
If pname:pPresentationTimings is `NULL`, then the number of newly-available
timing records for the given pname:swapchain is returned in
@ -244,8 +244,8 @@ The semantics for other present modes are as follows:
when the image was displayed.
For images that are not displayed to the user,
fname:vkGetPastPresentationTimingGOOGLE may: not return a
sname:VkPastPresentationTimingGOOGLE structure, or it may: return
a sname:VkPastPresentationTimingGOOGLE structure with the value of zero
sname:VkPastPresentationTimingGOOGLE structure, or it may: return a
sname:VkPastPresentationTimingGOOGLE structure with the value of zero
for both sname:VkPastPresentationTimingGOOGLE::pname:actualPresentTime
and sname:VkPastPresentationTimingGOOGLE::pname:earliestPresentTime.
It is possible that an application can: submit images with

View File

@ -81,13 +81,13 @@ the function arguments that need to be known at layout creation time:
include::../../api/structs/VkIndirectCommandsLayoutTokenNVX.txt[]
* pname:type specifies the token command type.
* pname:bindingUnit has a different meaning depending on the type, please
refer pseudo code further down for details.
* pname:dynamicCount has a different meaning depending on the type, please
refer pseudo code further down for details.
* pname:divisor defines the rate at which the input data buffers are
accessed.
* pname:type specifies the token command type.
* pname:bindingUnit has a different meaning depending on the type, please
refer pseudo code further down for details.
* pname:dynamicCount has a different meaning depending on the type, please
refer pseudo code further down for details.
* pname:divisor defines the rate at which the input data buffers are
accessed.
.Valid Usage
****

View File

@ -119,20 +119,20 @@ the entry type of a configuration, are:
include::../../api/enums/VkObjectEntryTypeNVX.txt[]
* ename:VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX specifies a
sname:VkDescriptorSet resource entry that is registered via
sname:VkObjectTableDescriptorSetEntryNVX.
* ename:VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX specifies a sname:VkPipeline
resource entry that is registered via
sname:VkObjectTablePipelineEntryNVX.
* ename:VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX specifies a sname:VkBuffer
resource entry that is registered via
sname:VkObjectTableIndexBufferEntryNVX.
* ename:VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX specifies a sname:VkBuffer
resource entry that is registered via
sname:VkObjectTableVertexBufferEntryNVX.
* ename:VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX specifies the resource entry
is registered via sname:VkObjectTablePushConstantEntryNVX.
* ename:VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX specifies a
sname:VkDescriptorSet resource entry that is registered via
sname:VkObjectTableDescriptorSetEntryNVX.
* ename:VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX specifies a sname:VkPipeline
resource entry that is registered via
sname:VkObjectTablePipelineEntryNVX.
* ename:VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX specifies a sname:VkBuffer
resource entry that is registered via
sname:VkObjectTableIndexBufferEntryNVX.
* ename:VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX specifies a sname:VkBuffer
resource entry that is registered via
sname:VkObjectTableVertexBufferEntryNVX.
* ename:VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX specifies the resource
entry is registered via sname:VkObjectTablePushConstantEntryNVX.
--

View File

@ -45,12 +45,12 @@ diagnostic checkpoints that were executed by the device.
include::../../api/protos/vkGetQueueCheckpointDataNV.txt[]
* pname:queue is the elink:VkQueue object the caller would like to retrieve
checkpoint data for
* pname:pCheckpointDataCount is a pointer to an integer related to the
number of checkpoint markers available or queried, as described below.
* pname:pCheckpointData is either `NULL` or a pointer to an array of
sname:VkCheckpointDataNV structures.
* pname:queue is the elink:VkQueue object the caller would like to
retrieve checkpoint data for
* pname:pCheckpointDataCount is a pointer to an integer related to the
number of checkpoint markers available or queried, as described below.
* pname:pCheckpointData is either `NULL` or a pointer to an array of
sname:VkCheckpointDataNV structures.
If pname:pCheckpointData is `NULL`, then the number of checkpoint markers
available is returned in pname:pCheckpointDataCount.
@ -78,12 +78,12 @@ The slink:VkCheckpointDataNV structure is defined as:
include::../../api/structs/VkCheckpointDataNV.txt[]
* pname:sType is the type of this structure
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:stage indicates which pipeline stage the checkpoint marker data
refers to.
* pname:pCheckpointMarker contains the value of the last checkpoint marker
executed in the stage that pname:stage refers to.
* pname:sType is the type of this structure
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:stage indicates which pipeline stage the checkpoint marker data
refers to.
* pname:pCheckpointMarker contains the value of the last checkpoint marker
executed in the stage that pname:stage refers to.
include::../../validity/structs/VkCheckpointDataNV.txt[]

View File

@ -2,7 +2,7 @@ Additional queue family information can be queried by setting
slink:VkQueueFamilyProperties2::pname:pNext to point to an instance of the
slink:VkQueueFamilyCheckpointPropertiesNV structure.
[open,refpage='VkQueueFamilyCheckpointPropertiesNV',desc='return structure for queue family checkpoint info query']
[open,refpage='VkQueueFamilyCheckpointPropertiesNV',desc='return structure for queue family checkpoint info query',type='structs']
--
The slink:VkQueueFamilyCheckpointPropertiesNV structure is defined as:

View File

@ -454,8 +454,8 @@ include::../api/structs/VkCommandBufferAllocateInfo.txt[]
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:commandPool is the command pool from which the command buffers are
allocated.
* pname:level is a elink:VkCommandBufferLevel value specifying the
command buffer level.
* pname:level is a elink:VkCommandBufferLevel value specifying the command
buffer level.
* pname:commandBufferCount is the number of command buffers to allocate
from the pool.

View File

@ -2609,7 +2609,8 @@ endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
* [[VUID-VkDescriptorImageInfo-imageLayout-00344]]
pname:imageLayout must: match the actual elink:VkImageLayout of each
subresource accessible from pname:imageView at the time this descriptor
is accessed
is accessed as defined by the <<resources-image-layouts-matching-rule,
image layout matching rules>>
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-VkDescriptorImageInfo-sampler-01564]]
If pname:sampler is used and the elink:VkFormat of the image is a

View File

@ -617,8 +617,8 @@ The assembled primitives execute the bound graphics pipeline.
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT.
ifdef::VK_IMG_filter_cubic[]
* [[VUID-vkCmdDraw-None-02010]]
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as
a result of this command, then the image view's
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG.
* [[VUID-vkCmdDraw-None-00452]]
@ -803,8 +803,8 @@ The assembled primitives execute the bound graphics pipeline.
not be accessed in any way other than as an attachment by this command.
ifdef::VK_IMG_filter_cubic[]
* [[VUID-vkCmdDrawIndexed-None-02012]]
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as
a result of this command, then the image view's
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG.
* [[VUID-vkCmdDrawIndexed-None-00472]]
@ -998,8 +998,8 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
not be accessed in any way other than as an attachment by this command.
ifdef::VK_IMG_filter_cubic[]
* [[VUID-vkCmdDrawIndirect-None-02014]]
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as
a result of this command, then the image view's
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG.
* [[VUID-vkCmdDrawIndirect-None-00498]]
@ -1238,8 +1238,8 @@ located at pname:countBufferOffset and use this as the draw count.
not be accessed in any way other than as an attachment by this command.
ifdef::VK_IMG_filter_cubic[]
* [[VUID-vkCmdDrawIndirectCountKHR-None-02016]]
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as
a result of this command, then the image view's
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG.
* [[VUID-vkCmdDrawIndirectCountKHR-None-03170]]
@ -1635,8 +1635,8 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
not be accessed in any way other than as an attachment by this command.
ifdef::VK_IMG_filter_cubic[]
* [[VUID-vkCmdDrawIndexedIndirect-None-02019]]
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as
a result of this command, then the image view's
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG.
* [[VUID-vkCmdDrawIndexedIndirect-None-00550]]
@ -1883,8 +1883,8 @@ located at pname:countBufferOffset and use this as the draw count.
not be accessed in any way other than as an attachment by this command.
ifdef::VK_IMG_filter_cubic[]
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-02021]]
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as
a result of this command, then the image view's
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG.
* [[VUID-vkCmdDrawIndexedIndirectCountKHR-None-03173]]

View File

@ -4251,10 +4251,10 @@ ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
Images in this format must: be defined with a width and height that is a
multiple of two.
* ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM specifies an unsigned normalized
_multi-planar format_ that has an 8-bit G component in plane 0, and a
two-component, 16-bit BR plane 1 consisting of an 8-bit B component in
byte 0 and an 8-bit R component in byte 1.
* ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM specifies an unsigned
normalized _multi-planar format_ that has an 8-bit G component in plane
0, and a two-component, 16-bit BR plane 1 consisting of an 8-bit B
component in byte 0 and an 8-bit R component in byte 1.
The horizontal and vertical dimensions of the BR plane is halved
relative to the image dimensions, and each R and B value is shared with
the G components for which latexmath:[\lfloor i_G \times 0.5 \rfloor =
@ -4278,10 +4278,10 @@ ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane.
Images in this format must: be defined with a width that is a multiple
of two.
* ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM specifies an unsigned normalized
_multi-planar format_ that has an 8-bit G component in plane 0, and a
two-component, 16-bit BR plane 1 consisting of an 8-bit B component in
byte 0 and an 8-bit R component in byte 1.
* ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM specifies an unsigned
normalized _multi-planar format_ that has an 8-bit G component in plane
0, and a two-component, 16-bit BR plane 1 consisting of an 8-bit B
component in byte 0 and an 8-bit R component in byte 1.
The horizontal dimensions of the BR plane is halved relative to the
image dimensions, and each R and B value is shared with the G components
for which latexmath:[\lfloor i_G \times 0.5 \rfloor = i_B = i_R].
@ -6933,13 +6933,13 @@ sample counts for the image parameters.
pname:sampleCounts will be set to ename:VK_SAMPLE_COUNT_1_BIT if at least
one of the following conditions is true:
* pname:tiling is ename:VK_IMAGE_TILING_LINEAR
* pname:type is not ename:VK_IMAGE_TYPE_2D
* pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
* Neither the ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT flag nor the
ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT flag in
sname:VkFormatProperties::pname:optimalTilingFeatures returned by
flink:vkGetPhysicalDeviceFormatProperties is set
* pname:tiling is ename:VK_IMAGE_TILING_LINEAR
* pname:type is not ename:VK_IMAGE_TYPE_2D
* pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
* Neither the ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT flag nor the
ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT flag in
sname:VkFormatProperties::pname:optimalTilingFeatures returned by
flink:vkGetPhysicalDeviceFormatProperties is set
ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
* pname:VkPhysicalDeviceExternalImageFormatInfoKHR::pname:handleType is an
external handle type for which multisampled image support is not
@ -6951,28 +6951,28 @@ supported for the specified values of pname:usage and pname:format.
For each bit set in pname:usage, the supported sample counts relate to the
limits in sname:VkPhysicalDeviceLimits as follows:
* If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT and
pname:format is a floating- or fixed-point color format, a superset of
sname:VkPhysicalDeviceLimits::pname:framebufferColorSampleCounts
* If pname:usage includes
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format
includes a depth aspect, a superset of
sname:VkPhysicalDeviceLimits::pname:framebufferDepthSampleCounts
* If pname:usage includes
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format
includes a stencil aspect, a superset of
sname:VkPhysicalDeviceLimits::pname:framebufferStencilSampleCounts
* If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and
pname:format includes a color aspect, a superset of
sname:VkPhysicalDeviceLimits::pname:sampledImageColorSampleCounts
* If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and
pname:format includes a depth aspect, a superset of
sname:VkPhysicalDeviceLimits::pname:sampledImageDepthSampleCounts
* If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and
pname:format is an integer format, a superset of
sname:VkPhysicalDeviceLimits::pname:sampledImageIntegerSampleCounts
* If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, a superset of
sname:VkPhysicalDeviceLimits::pname:storageImageSampleCounts
* If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT and
pname:format is a floating- or fixed-point color format, a superset of
sname:VkPhysicalDeviceLimits::pname:framebufferColorSampleCounts
* If pname:usage includes
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format
includes a depth aspect, a superset of
sname:VkPhysicalDeviceLimits::pname:framebufferDepthSampleCounts
* If pname:usage includes
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format
includes a stencil aspect, a superset of
sname:VkPhysicalDeviceLimits::pname:framebufferStencilSampleCounts
* If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and
pname:format includes a color aspect, a superset of
sname:VkPhysicalDeviceLimits::pname:sampledImageColorSampleCounts
* If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and
pname:format includes a depth aspect, a superset of
sname:VkPhysicalDeviceLimits::pname:sampledImageDepthSampleCounts
* If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and
pname:format is an integer format, a superset of
sname:VkPhysicalDeviceLimits::pname:sampledImageIntegerSampleCounts
* If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, a superset of
sname:VkPhysicalDeviceLimits::pname:storageImageSampleCounts
If multiple bits are set in pname:usage, pname:sampleCounts will be the
intersection of the per-usage values described above.

View File

@ -490,9 +490,8 @@ as:
include::../api/structs/VkVertexInputBindingDivisorDescriptionEXT.txt[]
* pname:binding is the binding number for which the divisor is specified.
* pname:divisor is the number of successive instances that will use
the same value of the vertex attribute when instanced rendering is
enabled.
* pname:divisor is the number of successive instances that will use the
same value of the vertex attribute when instanced rendering is enabled.
For example, if the divisor is N, the same vertex attribute will applied
to N successive instances before moving on to the next vertex attribute.
The maximum value of divisor is implementation dependent and can be

View File

@ -203,15 +203,15 @@ code:Input storage class.
The code:PassthroughNV decoration must: not be used with any of:
* an input primitive type other than code:InputPoints, code:InputLines, or
code:Triangles, as specified by the mode for code:OpExecutionMode.
* an invocation count other than one, as specified by the code:Invocations
mode for code:OpExecutionMode.
* an code:OpEntryPoint which statically uses the code:OpEmitVertex or
code:OpEndPrimitive instructions.
* a variable decorated with the code:InvocationId built-in decoration.
* a variable decorated with the code:PrimitiveId built-in decoration that
is declared using the code:Input storage class.
* an input primitive type other than code:InputPoints, code:InputLines, or
code:Triangles, as specified by the mode for code:OpExecutionMode.
* an invocation count other than one, as specified by the code:Invocations
mode for code:OpExecutionMode.
* an code:OpEntryPoint which statically uses the code:OpEmitVertex or
code:OpEndPrimitive instructions.
* a variable decorated with the code:InvocationId built-in decoration.
* a variable decorated with the code:PrimitiveId built-in decoration that
is declared using the code:Input storage class.
[[geometry-passthrough-interface]]

20
chapters/interfaces.txt Normal file → Executable file
View File

@ -238,6 +238,9 @@ be assigned the same location, either explicitly or implicitly.
The number of input and output locations available for a shader input or
output interface are limited, and dependent on the shader stage as described
in <<interfaces-iointerfaces-limits>>.
All variables in both the <<interfaces-builtin-variables,built-in interface
block>> and the <<interfaces-iointerfaces-user,user-defined variable
interface>> count against these limits.
[[interfaces-iointerfaces-limits]]
@ -1224,18 +1227,13 @@ four-component vector of 32-bit floating-point values.
code:FragDepth::
Decorating a variable with the code:FragDepth built-in decoration will make
that variable contain the new depth value for all samples covered by the
fragment.
This value will be used for depth testing and, if the depth test passes, any
subsequent write to the depth/stencil attachment.
To have a shader supply a fragment-depth value, the shader must: declare the
code:DepthReplacing execution mode.
Such a shader's fragment-depth value will come from the variable decorated
with the code:FragDepth built-in decoration.
+
To write to code:FragDepth, a shader must: declare the code:DepthReplacing
execution mode.
If a shader declares the code:DepthReplacing execution mode and there 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.
This value will be used for any subsequent depth testing performed by the
implementation or writes to the depth attachment.
+
The code:FragDepth decoration must: be used only within fragment shaders.
+

View File

@ -136,9 +136,9 @@ September, 2017.
[[spirv-extended]] J. Kessenich, _SPIR-V Extended Instructions for GLSL,
Version 1.00_, https://www.khronos.org/registry/spir-v/, February 10, 2016.
[[spirv-spec]] J. Kessenich and B. Ouriel, _The Khronos SPIR-V
Specification, Version 1.00_, https://www.khronos.org/registry/spir-v/,
February 10, 2016.
[[spirv-spec]] J. Kessenich, B. Ouriel, and R. Krisch, _SPIR-V
Specification, Version 1.3, Revision 2, Unified_,
https://www.khronos.org/registry/spir-v/, May 11, 2018.
[[vulkan-styleguide]] J. Leech and T. Hector, _Vulkan Documentation and
Extensions: Procedures and Conventions_,

View File

@ -2783,8 +2783,8 @@ representation, images with external formats must: only be used as sampled
images, must: only be sampled with a sampler that has Y'C~B~C~R~ conversion
enabled, and must: have optimal tiling.
Images that will be backed by an Android hardware buffer can: use an external
format by setting slink:VkImageCreateInfo::pname:format to
Images that will be backed by an Android hardware buffer can: use an
external format by setting slink:VkImageCreateInfo::pname:format to
ename:VK_FORMAT_UNDEFINED and including an instance of
slink:VkExternalFormatANDROID in the pname:pNext chain.
Images can: be created with an external format even if the Android hardware

View File

@ -400,6 +400,11 @@ pixel.
[eq]#(0.9375, 0.25)# +
[eq]#(0.875, 0.9375)# +
[eq]#(0.0625, 0.0)#
|image:images/sample_count_1.svg[align="center"]
|image:images/sample_count_2.svg[align="center"]
|image:images/sample_count_4.svg[align="center"]
|image:images/sample_count_8.svg[align="center"]
|image:images/sample_count_16.svg[align="center"]
|====
ifdef::VK_AMD_shader_fragment_mask[]

View File

@ -1841,9 +1841,33 @@ For use as a framebuffer attachment, this is a member in the substructures
of the sname:VkRenderPassCreateInfo (see <<renderpass,Render Pass>>).
For use in a descriptor set, this is a member in the
sname:VkDescriptorImageInfo structure (see <<descriptorsets-updates>>).
--
[[resources-image-layouts-matching-rule]]
=== Image Layout Matching Rules
At the time that any command buffer command accessing an image executes on
any queue, the layouts of the image subresources that are accessed must: all
match the layout specified via the API controlling those accesses.
match exactly the layout specified via the API controlling those accesses
ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
, except in case of accesses to an image with a depth/stencil format
performed through descriptors referring to only a single aspect of the
image, where the following relaxed matching rules apply:
* Descriptors referring just to the depth aspect of a depth/stencil image
only need to match in the image layout of the depth aspect, thus
ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL and
ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL are
considered to match.
* Descriptors referring just to the stencil aspect of a depth/stencil
image only need to match in the image layout of the stencil aspect, thus
ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL and
ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL are
considered to match
endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
.
When performing a layout transition on an image subresource, the old layout
value must: either equal the current layout of the image subresource (at the
@ -1879,8 +1903,6 @@ the contents of the depth aspect of those image subresources undefined.
endif::VK_EXT_sample_locations[]
--
[[resources-image-views]]
== Image Views

View File

@ -539,8 +539,9 @@ For the compute pipeline, the following stages occur in this order:
ifdef::VK_EXT_conditional_rendering[]
The conditional rendering stage is formally part of both the graphics, and
the compute pipeline. The pipeline stage where the predicate read happens
has unspecified order relative to other stages of these pipelines:
the compute pipeline.
The pipeline stage where the predicate read happens has unspecified order
relative to other stages of these pipelines:
* ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
endif::VK_EXT_conditional_rendering[]
@ -3426,7 +3427,8 @@ framebuffer-space>> pipeline stages is
contains a subset of the bit values in
sname:VkSubpassDependency::pname:dstStageMask, and pname:dependencyFlags
is equal to sname:VkSubpassDependency::pname:dependencyFlags.
* If fname:vkCmdPipelineBarrier is called within a render pass instance,
* [[VUID-vkCmdPipelineBarrier-pMemoryBarriers-02026]]
If fname:vkCmdPipelineBarrier is called within a render pass instance,
for each element of pname:pMemoryBarriers and
pname:pImageMemoryBarriers, the render pass must: have been defined with
a sname:VkSubpassDependency self-dependency for the current subpass with

View File

@ -727,14 +727,14 @@ endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
All texel input instructions apply a _swizzle_ based on:
* the elink:VkComponentSwizzle enums in the pname:components member of the
slink:VkImageViewCreateInfo structure for the image being read if
<<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>> is not
enabled, and
* the elink:VkComponentSwizzle enums in the pname:components member of the
slink:VkSamplerYcbcrConversionCreateInfo structure for the
<<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>> if sampler
Y'C~B~C~R~ conversion is enabled.
* the elink:VkComponentSwizzle enums in the pname:components member of the
slink:VkImageViewCreateInfo structure for the image being read if
<<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>> is not
enabled, and
* the elink:VkComponentSwizzle enums in the pname:components member of the
slink:VkSamplerYcbcrConversionCreateInfo structure for the
<<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>> if sampler
Y'C~B~C~R~ conversion is enabled.
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
@ -1174,30 +1174,30 @@ described in the "`Introduction to Color Conversions`" chapter of the
<<data-format,Khronos Data Format Specification>> may be performed as
follows:
* Calculate the <<textures-normalized-to-unnormalized,unnormalized texel
coordinates>> corresponding to the desired sample position.
* For a pname:minFilter/pname:magFilter of ename:VK_FILTER_NEAREST:
. Calculate (_i_,_j_) for the sample location as described under the
"`nearest filtering`" formulae in <<textures-unnormalized-to-integer>>
. Calculate the normalized texel coordinates corresponding to these
integer coordinates.
. Sample using <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~
conversion>> at this location.
* For a pname:minFilter/pname:magFilter of ename:VK_FILTER_LINEAR:
. Calculate (_i~[0,1]~_,_j~[0,1]~_) for the sample location as described
under the "`linear filtering`" formulae in
<<textures-unnormalized-to-integer>>
. Calculate the normalized texel coordinates corresponding to these
integer coordinates.
. Sample using <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~
conversion>> at each of these locations.
. Convert the non-linear AR'G'B' outputs of the Y'C~B~C~R~ conversions to
linear ARGB values as described in the "`Transfer Functions`" chapter
of the <<data-format,Khronos Data Format Specification>>.
. Interpolate the linear ARGB values using the [eq]#{alpha}# and
[eq]#{beta}# values described in the "`linear filtering`" section of
<<textures-unnormalized-to-integer>> and the equations in
<<textures-texel-filtering>>.
* Calculate the <<textures-normalized-to-unnormalized,unnormalized texel
coordinates>> corresponding to the desired sample position.
* For a pname:minFilter/pname:magFilter of ename:VK_FILTER_NEAREST:
. Calculate (_i_,_j_) for the sample location as described under the
"`nearest filtering`" formulae in <<textures-unnormalized-to-integer>>
. Calculate the normalized texel coordinates corresponding to these
integer coordinates.
. Sample using <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~
conversion>> at this location.
* For a pname:minFilter/pname:magFilter of ename:VK_FILTER_LINEAR:
. Calculate (_i~[0,1]~_,_j~[0,1]~_) for the sample location as described
under the "`linear filtering`" formulae in
<<textures-unnormalized-to-integer>>
. Calculate the normalized texel coordinates corresponding to these
integer coordinates.
. Sample using <<samplers-YCbCr-conversion,sampler Y'C~B~C~R~
conversion>> at each of these locations.
. Convert the non-linear AR'G'B' outputs of the Y'C~B~C~R~ conversions
to linear ARGB values as described in the "`Transfer Functions`"
chapter of the <<data-format,Khronos Data Format Specification>>.
. Interpolate the linear ARGB values using the [eq]#{alpha}# and
[eq]#{beta}# values described in the "`linear filtering`" section of
<<textures-unnormalized-to-integer>> and the equations in
<<textures-texel-filtering>>.
The additional calculations and, especially, additional number of sampling
operations in the ename:VK_FILTER_LINEAR case can be expected to have a

View File

@ -301,12 +301,12 @@ or the equivalent
include::../api/enums/VkPointClippingBehaviorKHR.txt[]
endif::VK_KHR_maintenance2[]
* ename:VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES specifies that the
primitive is discarded if the vertex lies outside any clip plane,
including the planes bounding the view volume.
* ename:VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY specifies that the
primitive is discarded only if the vertex lies outside any user clip
plane.
* ename:VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES specifies that the
primitive is discarded if the vertex lies outside any clip plane,
including the planes bounding the view volume.
* ename:VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY specifies that
the primitive is discarded only if the vertex lies outside any user clip
plane.
--

View File

@ -29,6 +29,9 @@ subprocess.check_call(['make', 'config/extDependency.py'])
from extDependency import *
def enQuote(str):
return '"' + str + '"'
# Make a single submission target. Several are needed per document.
#
# outDir - where to generate intermediate and final documents
@ -43,7 +46,7 @@ def makeTarget(outDir, extensionList, submitName, title, target):
'APITITLE="' + title + '"', target)
# Rename into submission directory
outFile = outDir + '/html/' + submitName + '.html'
print('mv', outDir + '/html/vkspec.html', outFile)
print('mv', outDir + '/html/vkspec.html', enQuote(outFile))
# No longer needed
# print('mv -n', outDir + '/katex', 'out/submit/')
@ -81,9 +84,10 @@ def makeSubmit(submitName, required, target='html'):
print('')
print('cd scripts')
print('./htmldiff',
'../' + baseSpec,
'../' + newSpec,
'> ../submit/html/diff-' + submitName + '.html')
enQuote('../' + baseSpec),
enQuote('../' + newSpec),
'>',
enQuote('../submit/html/diff-' + submitName + '.html'))
print('cd ..')
if __name__ == '__main__':

24
images/sample_count_1.svg Normal file
View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="160" height="160" viewBox="-500 -500 11000 11000" xmlns="http://www.w3.org/2000/svg" version="1.1">
<desc>VK_SAMPLE_COUNT_1_BIT</desc>
<defs>
<marker id="Triangle" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="8" orient="auto">
<path d="M 0 0 L 10 5 L 0 10 z" />
</marker>
</defs>
<g>
<!-- Axises -->
<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
<!-- Helper-lines -->
<line x1="00000" x2="10000" y1="10000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="10000" x2="10000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<!-- Helper-lines horizontal -->
<line x1="00000" x2="10000" y1="05000" y2="05000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<!-- Helper-lines vertical -->
<line x1="05000" x2="05000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<!-- Dots -->
<circle cx="05000" cy="05000" r="00200" fill="black" /><text x="05000" y="05000" fill="red" font-size="01100" transform="translate(00200 -00200)">0</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="160" height="160" viewBox="-500 -500 11000 11000" xmlns="http://www.w3.org/2000/svg" version="1.1">
<desc>VK_SAMPLE_COUNT_16_BIT</desc>
<defs>
<marker id="Triangle" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="8" orient="auto">
<path d="M 0 0 L 10 5 L 0 10 z" />
</marker>
</defs>
<g>
<!-- Axises -->
<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
<!-- Helper-lines -->
<line x1="00000" x2="10000" y1="10000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="10000" x2="10000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<!-- Helper-lines horizontal -->
<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="00625" y2="00625" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="01250" y2="01250" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="01875" y2="01875" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="02500" y2="02500" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="03125" y2="03125" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="03750" y2="03750" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="04375" y2="04375" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="05000" y2="05000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="05625" y2="05625" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="06250" y2="06250" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="06875" y2="06875" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="07500" y2="07500" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="08125" y2="08125" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="08750" y2="08750" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="09375" y2="09375" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<!-- Helper-lines vertical -->
<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00625" x2="00625" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="01250" x2="01250" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="01875" x2="01875" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="02500" x2="02500" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="03125" x2="03125" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="03750" x2="03750" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="04375" x2="04375" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="05000" x2="05000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="05625" x2="05625" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="06250" x2="06250" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="06875" x2="06875" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="07500" x2="07500" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="08125" x2="08125" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="08750" x2="08750" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="09375" x2="09375" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<!-- Dots -->
<circle cx="05625" cy="05625" r="00200" fill="black" /><text x="05625" y="05625" fill="red" font-size="01100" transform="translate(00200 -00200)">0</text>
<circle cx="04375" cy="03125" r="00200" fill="black" /><text x="04375" y="03125" fill="red" font-size="01100" transform="translate(00200 -00200)">1</text>
<circle cx="03125" cy="06250" r="00200" fill="black" /><text x="03125" y="06250" fill="red" font-size="01100" transform="translate(00200 -00200)">2</text>
<circle cx="07500" cy="04375" r="00200" fill="black" /><text x="07500" y="04375" fill="red" font-size="01100" transform="translate(00200 -00200)">3</text>
<circle cx="01875" cy="03750" r="00200" fill="black" /><text x="01875" y="03750" fill="red" font-size="01100" transform="translate(00200 -00200)">4</text>
<circle cx="06250" cy="08125" r="00200" fill="black" /><text x="06250" y="08125" fill="red" font-size="01100" transform="translate(00200 -00200)">5</text>
<circle cx="08125" cy="06875" r="00200" fill="black" /><text x="08125" y="06875" fill="red" font-size="01100" transform="translate(00200 -00200)">6</text>
<circle cx="06875" cy="01875" r="00200" fill="black" /><text x="06875" y="01875" fill="red" font-size="01100" transform="translate(00200 -00200)">7</text>
<circle cx="03750" cy="08750" r="00200" fill="black" /><text x="03750" y="08750" fill="red" font-size="01100" transform="translate(00200 -00200)">8</text>
<circle cx="05000" cy="00625" r="00200" fill="black" /><text x="05000" y="00625" fill="red" font-size="01100" transform="translate(00400 00400)">9</text>
<circle cx="02500" cy="01250" r="00200" fill="black" /><text x="02500" y="01250" fill="red" font-size="01100" transform="translate(00200 -00200)">10</text>
<circle cx="01250" cy="07500" r="00200" fill="black" /><text x="01250" y="07500" fill="red" font-size="01100" transform="translate(00200 -00200)">11</text>
<circle cx="00000" cy="05000" r="00200" fill="black" /><text x="00000" y="05000" fill="red" font-size="01100" transform="translate(00200 -00200)">12</text>
<circle cx="09375" cy="02500" r="00200" fill="black" /><text x="09375" y="02500" fill="red" font-size="01100" transform="translate(00000 -00400)">13</text>
<circle cx="08750" cy="09375" r="00200" fill="black" /><text x="08750" y="09375" fill="red" font-size="01100" transform="translate(00200 -00200)">14</text>
<circle cx="00625" cy="00000" r="00200" fill="black" /><text x="00625" y="00000" fill="red" font-size="01100" transform="translate(00200 00800)">15</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.2 KiB

27
images/sample_count_2.svg Normal file
View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="160" height="160" viewBox="-500 -500 11000 11000" xmlns="http://www.w3.org/2000/svg" version="1.1">
<desc>VK_SAMPLE_COUNT_2_BIT</desc>
<defs>
<marker id="Triangle" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="8" orient="auto">
<path d="M 0 0 L 10 5 L 0 10 z" />
</marker>
</defs>
<g>
<!-- Axises -->
<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
<!-- Helper-lines -->
<line x1="00000" x2="10000" y1="10000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="10000" x2="10000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<!-- Helper-lines horizontal -->
<line x1="00000" x2="10000" y1="02500" y2="02500" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="07500" y2="07500" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<!-- Helper-lines vertical -->
<line x1="02500" x2="02500" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="07500" x2="07500" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<!-- Dots -->
<circle cx="07500" cy="07500" r="00200" fill="black" /><text x="07500" y="07500" fill="red" font-size="01100" transform="translate(00200 -00200)">0</text>
<circle cx="02500" cy="02500" r="00200" fill="black" /><text x="02500" y="02500" fill="red" font-size="01100" transform="translate(00200 -00200)">1</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

33
images/sample_count_4.svg Normal file
View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="160" height="160" viewBox="-500 -500 11000 11000" xmlns="http://www.w3.org/2000/svg" version="1.1">
<desc>VK_SAMPLE_COUNT_4_BIT</desc>
<defs>
<marker id="Triangle" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="8" orient="auto">
<path d="M 0 0 L 10 5 L 0 10 z" />
</marker>
</defs>
<g>
<!-- Axises -->
<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
<!-- Helper-lines -->
<line x1="00000" x2="10000" y1="10000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="10000" x2="10000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<!-- Helper-lines horizontal -->
<line x1="00000" x2="10000" y1="01250" y2="01250" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="03750" y2="03750" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="06250" y2="06250" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="08750" y2="08750" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<!-- Helper-lines vertical -->
<line x1="01250" x2="01250" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="03750" x2="03750" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="06250" x2="06250" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="08750" x2="08750" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<!-- Dots -->
<circle cx="03750" cy="01250" r="00200" fill="black" /><text x="03750" y="01250" fill="red" font-size="01100" transform="translate(00200 -00200)">0</text>
<circle cx="08750" cy="03750" r="00200" fill="black" /><text x="08750" y="03750" fill="red" font-size="01100" transform="translate(00200 -00200)">1</text>
<circle cx="01250" cy="06250" r="00200" fill="black" /><text x="01250" y="06250" fill="red" font-size="01100" transform="translate(00200 -00200)">2</text>
<circle cx="06250" cy="08750" r="00200" fill="black" /><text x="06250" y="08750" fill="red" font-size="01100" transform="translate(00200 -00200)">3</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

45
images/sample_count_8.svg Normal file
View File

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="160" height="160" viewBox="-500 -500 11000 11000" xmlns="http://www.w3.org/2000/svg" version="1.1">
<desc>VK_SAMPLE_COUNT_8_BIT</desc>
<defs>
<marker id="Triangle" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="8" orient="auto">
<path d="M 0 0 L 10 5 L 0 10 z" />
</marker>
</defs>
<g>
<!-- Axises -->
<line x1="00000" x2="10000" y1="00000" y2="00000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
<line x1="00000" x2="00000" y1="00000" y2="10000" stroke-width="00050" stroke="black" marker-end="url(#Triangle)" />
<!-- Helper-lines -->
<line x1="00000" x2="10000" y1="10000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="10000" x2="10000" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<!-- Helper-lines horizontal -->
<line x1="00000" x2="10000" y1="00625" y2="00625" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="01875" y2="01875" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="03125" y2="03125" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="04375" y2="04375" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="05625" y2="05625" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="06875" y2="06875" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="08125" y2="08125" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="00000" x2="10000" y1="09375" y2="09375" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<!-- Helper-lines vertical -->
<line x1="00625" x2="00625" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="01875" x2="01875" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="03125" x2="03125" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="04375" x2="04375" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="05625" x2="05625" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="06875" x2="06875" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="08125" x2="08125" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<line x1="09375" x2="09375" y1="00000" y2="10000" stroke-width="00010" stroke="black" stroke-dasharray="00100" />
<!-- Dots -->
<circle cx="05625" cy="03125" r="00200" fill="black" /><text x="05625" y="03125" fill="red" font-size="01100" transform="translate(00200 -00200)">0</text>
<circle cx="04375" cy="06875" r="00200" fill="black" /><text x="04375" y="06875" fill="red" font-size="01100" transform="translate(00200 -00200)">1</text>
<circle cx="08125" cy="05625" r="00200" fill="black" /><text x="08125" y="05625" fill="red" font-size="01100" transform="translate(00200 -00200)">2</text>
<circle cx="03125" cy="01875" r="00200" fill="black" /><text x="03125" y="01875" fill="red" font-size="01100" transform="translate(00200 -00200)">3</text>
<circle cx="01875" cy="08125" r="00200" fill="black" /><text x="01875" y="08125" fill="red" font-size="01100" transform="translate(00200 -00200)">4</text>
<circle cx="00625" cy="04375" r="00200" fill="black" /><text x="00625" y="04375" fill="red" font-size="01100" transform="translate(00200 -00200)">5</text>
<circle cx="06875" cy="09375" r="00200" fill="black" /><text x="06875" y="09375" fill="red" font-size="01100" transform="translate(00200 -00200)">6</text>
<circle cx="09375" cy="00625" r="00200" fill="black" /><text x="09375" y="00625" fill="red" font-size="01100" transform="translate(00200 00700)">7</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -43,7 +43,7 @@ extern "C" {
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
// Version of this file
#define VK_HEADER_VERSION 82
#define VK_HEADER_VERSION 83
#define VK_NULL_HANDLE 0

View File

@ -1,2 +1,2 @@
# The value to start tagging VU statements at, unless overridden by -nextvu
startVUID = 2026
startVUID = 2027

View File

@ -348,13 +348,15 @@ and is added to the list of figures:
.Example Markup
----
[[fig-anchorname]]
[%inline]
image::images/imagename.svg[align="center",title="Figure caption",{fullimagewidth}]
----
There must be both .svg and .pdf versions of each figure checked into the
+images/+ directory, to support generating both HTML and PDF outputs.
It is best to create images in Inkscape as SVG files and then use the
conversion rule in `images/Makefile` to generate PDF.
There must be SVG versions of each figure checked into the `images/`
directory, to support generating both HTML and PDF outputs.
The PDF generation pipeline is now able to use SVG images, so PDF versions
of each image are no longer required.
The `[%inline]` directive decreases output image size in the generated HTML.
Asciidoc restricts captions in figures to be a single line in the source
document.

View File

@ -60,23 +60,23 @@ This rule applies to most declarations with the C Preprocessor's `#define`
token, including macros and constants.
There are however a few exceptions:
* The header guard for each header includes an additional underscore `_` at
the end of the identifier.
** Example: `VULKAN_H_`
* Definitions that denote the presence of an extension follow the
<<extensions-naming-conventions-name-strings,extension name string
convention>>.
** Example: `VK_KHR_sampler_mirror_clamp_to_edge`
* Three `VKAPI_*` definitions are defined by the platform header to alias
certain platform-specific identifiers related to calling conventions.
** Examples: `VKAPI_ATTR`, `VKAPI_CALL` and `VKAPI_PTR`
* Preprocessor defines are occasionally used to create aliases between
other Vulkan identifiers, which usually happens when something was
originally misnamed.
In these cases, the fixed name is added to the API, and the old name is
made into an alias of that.
In these cases, the name will be whatever the original misnamed
identifier was.
* The header guard for each header includes an additional underscore `_`
at the end of the identifier.
** Example: `VULKAN_H_`
* Definitions that denote the presence of an extension follow the
<<extensions-naming-conventions-name-strings,extension name string
convention>>.
** Example: `VK_KHR_sampler_mirror_clamp_to_edge`
* Three `VKAPI_*` definitions are defined by the platform header to alias
certain platform-specific identifiers related to calling conventions.
** Examples: `VKAPI_ATTR`, `VKAPI_CALL` and `VKAPI_PTR`
* Preprocessor defines are occasionally used to create aliases between
other Vulkan identifiers, which usually happens when something was
originally misnamed.
In these cases, the fixed name is added to the API, and the old name is
made into an alias of that.
In these cases, the name will be whatever the original misnamed
identifier was.
[source, c]
.Example
@ -183,10 +183,10 @@ converted to the correct case (e.g. `VkStructureType` ->
This rule applies to all enumerants, with one exception.
* The `VkResult` enumerants are split into two sub types: error and success
codes.
** Success codes are not prefixed with anything other than `VK_`.
** Error codes are prefixed with `VK_ERROR_`.
* The `VkResult` enumerants are split into two sub types: error and
success codes.
** Success codes are not prefixed with anything other than `VK_`.
** Error codes are prefixed with `VK_ERROR_`.
[source, c]
.Example
@ -400,10 +400,10 @@ as the length in the base structure.
These rules apply to all function parameters and struct/union members, with
a single exception:
* The `sType` member of structures is abbreviated as it is used in almost
every structure.
** The slightly odd naming prevents it clashing with any future variables.
** The `s` stands for "`structure`", referring to its enumerant type.
* The `sType` member of structures is abbreviated as it is used in almost
every structure.
** The slightly odd naming prevents it clashing with any future variables.
** The `s` stands for "`structure`", referring to its enumerant type.
[source, c]
.Example

View File

@ -150,6 +150,8 @@ include::style/vuid.txt[]
= Revision History
* 2018-08-13 - Add %inline directive to the <<markup-sample-section-images,
Figures>> section (public pull request 734).
* 2018-07-08 - Remove requirement to explicitly include extension appendices
in the <<extensions-documenting-extensions, Changes for New Extensions>>
section.

View File

@ -497,7 +497,7 @@ class ExtensionMetaDocOutputGenerator(OutputGenerator):
for enum in elem.findall('./require/enum'):
enumName = self.getAttrib(enum, 'name')
if enumName.find('SPEC_VERSION') != -1:
self.logMsg('warn', 'Missing ' + versioningEnumName + '! Potential misnamed candidate ' + enumName + '.')
self.logMsg('diag', 'Missing ' + versioningEnumName + '! Potential misnamed candidate ' + enumName + '.')
return self.getAttrib(enum, 'value')
self.logMsg('error', 'Missing ' + versioningEnumName + '!')

View File

@ -147,7 +147,7 @@ server.
<type category="define">// Vulkan 1.1 version number
#define <name>VK_API_VERSION_1_1</name> <type>VK_MAKE_VERSION</type>(1, 1, 0)// Patch version should always be set to 0</type>
<type category="define">// Version of this file
#define <name>VK_HEADER_VERSION</name> 82</type>
#define <name>VK_HEADER_VERSION</name> 83</type>
<type category="define">
#define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type>
@ -7276,6 +7276,7 @@ server.
<require>
<enum value="0" name="VK_NVX_EXTENSION_51_SPEC_VERSION"/>
<enum value="&quot;VK_NVX_extension_51&quot;" name="VK_NVX_EXTENSION_51_EXTENSION_NAME"/>
<enum bitpos="13" extends="VkImageCreateFlagBits" name="VK_IMAGE_CREATE_RESERVED_13_BIT_NV"/>
</require>
</extension>
<extension name="VK_NVX_extension_52" number="52" author="NVX" contact="James Jones @cubanismo" supported="disabled">
@ -8702,6 +8703,8 @@ server.
<require>
<enum value="0" name="VK_EXT_EXTENSION_165_SPEC_VERSION"/>
<enum value="&quot;VK_NV_extension_165&quot;" name="VK_EXT_EXTENSION_165_EXTENSION_NAME"/>
<enum bitpos="23" extends="VkAccessFlagBits" name="VK_ACCESS_RESERVED_23_BIT_NV"/>
<enum bitpos="8" extends="VkImageUsageFlagBits" name="VK_IMAGE_USAGE_RESERVED_8_BIT_NV"/>
</require>
</extension>
<extension name="VK_NV_extension_166" number="166" author="NV" contact="Daniel Koch @dgkoch" supported="disabled">
@ -8714,6 +8717,17 @@ server.
<require>
<enum value="0" name="VK_EXT_EXTENSION_167_SPEC_VERSION"/>
<enum value="&quot;VK_NV_extension_167&quot;" name="VK_EXT_EXTENSION_167_EXTENSION_NAME"/>
<enum bitpos="8" extends="VkShaderStageFlagBits" name="VK_SHADER_STAGE_RESERVED_8_BIT_NV"/>
<enum bitpos="9" extends="VkShaderStageFlagBits" name="VK_SHADER_STAGE_RESERVED_9_BIT_NV"/>
<enum bitpos="10" extends="VkShaderStageFlagBits" name="VK_SHADER_STAGE_RESERVED_10_BIT_NV"/>
<enum bitpos="11" extends="VkShaderStageFlagBits" name="VK_SHADER_STAGE_RESERVED_11_BIT_NV"/>
<enum bitpos="12" extends="VkShaderStageFlagBits" name="VK_SHADER_STAGE_RESERVED_12_BIT_NV"/>
<enum bitpos="13" extends="VkShaderStageFlagBits" name="VK_SHADER_STAGE_RESERVED_13_BIT_NV"/>
<enum bitpos="21" extends="VkPipelineStageFlagBits" name="VK_PIPELINE_STAGE_RESERVED_21_BIT_NV"/>
<enum bitpos="10" extends="VkBufferUsageFlagBits" name="VK_BUFFER_USAGE_RESERVED_10_BIT_NV"/>
<enum bitpos="21" extends="VkAccessFlagBits" name="VK_ACCESS_RESERVED_21_BIT_NV"/>
<enum bitpos="22" extends="VkAccessFlagBits" name="VK_ACCESS_RESERVED_22_BIT_NV"/>
<enum bitpos="5" extends="VkPipelineCreateFlagBits" name="VK_PIPELINE_CREATE_RESERVED_5_BIT_NV"/>
</require>
</extension>
<extension name="VK_NV_extension_168" number="168" author="NV" contact="Daniel Koch @dgkoch" supported="disabled">
@ -8963,6 +8977,10 @@ server.
<require>
<enum value="0" name="VK_NV_EXTENSION_203_SPEC_VERSION"/>
<enum value="&quot;VK_NV_extension_203&quot;" name="VK_NV_EXTENSION_203_EXTENSION_NAME"/>
<enum bitpos="6" extends="VkShaderStageFlagBits" name="VK_SHADER_STAGE_RESERVED_6_BIT_NV"/>
<enum bitpos="7" extends="VkShaderStageFlagBits" name="VK_SHADER_STAGE_RESERVED_7_BIT_NV"/>
<enum bitpos="19" extends="VkPipelineStageFlagBits" name="VK_PIPELINE_STAGE_RESERVED_19_BIT_NV"/>
<enum bitpos="20" extends="VkPipelineStageFlagBits" name="VK_PIPELINE_STAGE_RESERVED_20_BIT_NV"/>
</require>
</extension>
<extension name="VK_NV_extension_204" number="204" author="NV" contact="Pat Brown @nvpbrown" supported="disabled">